当前位置: 首页 > news >正文

# 鸿蒙 Web 容器(四):ArkTS 拿到请求后,怎么「按 action 找能力」?

鸿蒙 Web 容器(四):ArkTS 拿到请求后,怎么「按 action 找能力」?

这是「ArkWeb / JSBridge」系列的第 4 篇,对应 demo 提交 4:新增BridgeDispatcher按action分发到模拟底座能力

上一步,ArkTS 已经能收到 H5 发来的BridgeRequest了,但只是「记了一笔」。这一步让它真去干活:根据action找到对应能力、执行、把结果包成统一的BridgeResponse

一、类比:分发器就是「政务大厅前台」

你去政务大厅办事,不会直接冲进某个科室,而是先到前台说「我要办身份证」。前台按业务名在名册里一查,把你指到对应窗口;窗口办完,给你一张统一格式的回执

桥的这一层就是这个前台,叫BridgeDispatcher

  • H5 报一个业务名actiongetDeviceInfo/getCurrentTime/openToast);
  • 分发器按 action 找到对应能力实现
  • 办完,把结果统一包成BridgeResponse(成功/失败一个格式)。
dispatch(req:BridgeRequest):BridgeResponse{try{if(req.action===BridgeAction.GET_DEVICE_INFO)returnok(req.id,biz.getDeviceInfo());if(req.action===BridgeAction.GET_CURRENT_TIME)returnok(req.id,biz.getCurrentTime());if(req.action===BridgeAction.OPEN_TOAST)returnok(req.id,biz.openToast(msg));returnfail(req.id,404,'未知 action: '+req.action);// 名册里没有}catch(e){returnfail(req.id,500,'能力执行出错');// 窗口办砸了}}

这正是小程序的运行机制:H5 写wx.getSystemInfo(),小程序宿主收到后按这个 API 名去找它的底座实现。我们这里把「宿主按 API 名分发」这件事,用BridgeDispatcher亲手复刻了一遍。

二、能力实现:分两层,和 demo 其他切片一样

具体能力没有都堆在分发器里,而是照 demo 一贯的分层拆成 Biz / Imp:

  • NativeAbilityImp(实现层):真去调系统能力。getDeviceInfodeviceInfo.brand / productModel / osFullNamegetCurrentTimeDate它扮演的就是「ASCF 里 C++/NDK 底座」的角色——前端只认 action,底座具体怎么实现(读系统、调 NDK)归这层。
  • NativeAbilityBiz(业务层):编排 Imp。现在多是透传,但它是预留「参数校验 / 数据加工 / 多能力组合」的地方。
// Imp:真正读底座能力readDeviceInfo():Record<string,string>{return{brand:deviceInfo.brand,model:deviceInfo.productModel,osVersion:deviceInfo.osFullName};}

openToast是「效果」类能力,真弹出需要页面的UIContext,这层拿不到,所以本步先回执一个 mock,下一步在页面层接真实 Toast。

三、为什么「统一返回结构」这么重要?

不管成功、未知 action、还是执行炸了,回的都是同一个形状BridgeResponse { id, code, message, data }

  • 成功 →code: 0+data
  • 没这个能力 →code: 404
  • 执行异常 →code: 500try/catch兜住,绝不让一个能力的崩溃把整座桥带塌)。

H5 那头就能用一套逻辑处理所有结果:看code判断成败,不用为每个 action 写不同的解析。桥的健壮性,一半靠这个「不管怎样都给一张格式统一的回执」。

四、现在能看到什么

WebBridgeChannel.send在记完请求后,多了一步dispatcher.dispatch(req),并把响应也记进账本。所以页面底部那条日志,状态会从「待处理」翻成「完成」,下面多出一行开头的响应 JSON——点「获取设备信息」,你会看到真实的设备品牌/型号被 ArkTS 取出来、包成BridgeResponse记了下来。只差最后一步:把它送回 H5

一句话总结

分发器像政务大厅前台:H5 报业务名action,它按名册找到对应能力(NativeAbilityImp扮演底座、Biz做编排),办完统一包成BridgeResponse——成功、未知、异常都是同一个形状,try/catch保证一个能力崩了不连累整座桥。这就是小程序「按 API 名分发到底座」的核心。下一步,把这张回执真正回传给 H5,闭环就成了。

http://www.jsqmd.com/news/1033156/

相关文章:

  • 调查研究-182 turbovec 项目解析:把 RAG 向量索引从“内存怪兽“拉回本地工程
  • Java毕设项目:基于 Spring Boot 的文创书店躲猫猫业务管理系统的设计与实现 基于 Spring Boot 的躲猫猫书店借阅预约管理系统 (源码+文档,讲解、调试运行,定制等)
  • 【毕业设计】基于 Spring Boot 的大学生勤工助学信息管理系统的设计与实现 基于 Spring Boot 的校园勤工助学岗位匹配系统(源码+文档+远程调试,全bao定制等)
  • 2026年新消息:武汉四害消杀服务商综合评估与优选指南 - 品牌鉴赏官2026
  • 珠三角地区精选17-4PH不锈钢供应商名单,助您快速对接源头工厂 - 品牌2026
  • 2026年口碑不错的工艺品设计服务推荐榜单
  • 数据驱动的神经网络初始化技术解析
  • 2026年昆山空调维修加氟避坑指南:5家靠谱专业服务推荐 - 本地品牌推荐
  • TileLang 入门教程,用领域特定语言描述矩阵分块策略
  • NavSim自动驾驶仿真平台:从数据生成到闭环评估的工程实践
  • AI暂时不知道的事
  • 医用超声图像模拟系统:模拟病灶算法代码详解
  • 2026年6月智能家居实践,亲测效果分享
  • 2026年职场人必备AI办公工具盘点:10款工具按技术实用度排序
  • 甄选!北京职务犯罪律师/刑事辩护律师口碑排行(2026年6月18日最新发布):贪污罪贿赂罪案件5位律师专业维度实测对比 - 奋斗者888
  • 2026年天津代理记账公司哪家好?5家专业机构推荐指南 - 本地品牌推荐
  • 谐波电流抑制仿真 补偿电流控制APF并联型有源滤波器仿真模型 MATLAB simulink仿真及报告1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码
  • 智能办公本选型指南 新一代AI让会议和记录更高效
  • 2026年现阶段烤肉桌供应厂家综合评估与优选指南:聚焦重庆爱无烟电器有限公司 - 品牌鉴赏官2026
  • 环卫测评立足市民视角,破解市容满意度落差难题
  • 自动备份工具怎么选?客观测评+踩坑总结
  • deepseekgui安装包
  • 2026青岛即墨区靠谱的空调加氟公司联系电话一览 - 品牌排行榜
  • 行星盘动力学与ALMA观测:揭示HD 135344B系统中的行星形成
  • 从国标到美标欧标,一文读懂4J36低膨胀合金的合规采购要点 - 品牌2026
  • 招聘效率提升10倍?揭秘剪流AI招聘系统如何重塑2026年企业批量招聘效率对比
  • 多模态智能融合:CMAD架构实战解析
  • Thinglinks-iot 物联网平台:不只是设备接入,更是业务落地底座
  • 为什么越来越多的高端设备制造商转向使用UNS S21800不锈钢? - 品牌2026
  • 论文写作黑科技!全能AI论文工具,秒出初稿不费力