HarmonyOS鸿蒙Next中H5页面如何与ArkTS交互
HarmonyOS鸿蒙Next中H5页面如何与ArkTS交互 问题现象
目前javaScriptProxy仅支持同步调用,异步调用无法获取执行结果。
解决措施
对javaScriptProxy和runJavaScript封装,实现JSBridge通信方案。适用于H5调用原生侧函数。使用Web组件javaScriptProxy将原生侧接口注入到H5的window对象上,通过runJavaScript接口执行JS脚本到H5中,并在回调中获取脚本执行结果。具体调用流程如下图所示:
-
首先通过Web组件的javaScriptProxy属性,将JSBridgeHandle对象注册到H5的window上,作为H5调用原生的通道。当H5开始加载时,在onPageBegin生命周期中调用initJSBridge()方法初始化JSBridge。
-
在initJSBridge方法中,通过webviewControll.runJavaScript()将JSBridge初始化脚本注入H5执行。当H5调用时,生成window.callID标识回调函数,将callID与调用参数使用JSBridgeHandle.call传到原生侧。通过JSBridgeCallback接收原生侧执行的结果,根据callID找到对应callback执行并且释放内存.
-
JSBridgeHandle.call()是H5调用原生接口的统一入口,在该方法中根据H5调用的方法名,匹配到对应接口去调用。调用结束后通过this.callback()方法将调用结果返回H5。callback方法中使用webviewControll.runJavaScript()调用H5的JSBridgeCallback回传callID和调用结果。
更多关于HarmonyOS鸿蒙Next中H5页面如何与ArkTS交互的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以将promise处理内容放在arkts这边处理,不传递到html侧就行了。
更多关于HarmonyOS鸿蒙Next中H5页面如何与ArkTS交互的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请问注入多个JavaScript对象到window对象中,有相应方法吗?每个对象下面都有方法
使用registerJavaScriptProxy注册,
已经实现了,
楼主能否提供demo的源码,我对比一下看看跟这个demo([https://developer.huawei.com/consumer/cn/forum/topic/0204135282874792129?fid=0101587866109860105](https://developer.huawei.com/consumer/cn/forum/topic/0204135282874792129?fid=0101587866109860105)的差异在哪里。
目前论坛找到的demo,都存在各种问题,官方文档也没有详细的说明,体验实在是糟糕。
目前Api 9的模拟器是否无法进行交互?我下载了官方demo,跑起来后发现无法交互。
模拟器不行,真机可以,
难怪。
请问有那几款真机现在可以正常跑Api 9甚至更高版本?我的P40可以正常安装,但没法正常使用,需要开启GPU强制渲染才能刷新,不然一直黑屏。但开启这个功能后,眼睛受不了😖,
官方回复说的是mate 40以上才能正常,我的nova 6跟你一样,页面不刷新,需要开启surface更新或者使用scrcpy投屏,
您好:我们的H5代码是这样调用原生的,我用您给的代码修改了一下,发现H5不能调用原生方法。
并且我用官方给的例子写出来的代码,也无法交互
请问问题出在哪里了 谢谢回复
在HarmonyOS鸿蒙Next中,H5页面与ArkTS交互主要通过WebView
组件的postMessage
和onMessage
机制实现。首先,在ArkTS中创建WebView
组件并加载H5页面。通过postMessage
将数据从ArkTS发送到H5页面,H5页面通过window.addEventListener
监听消息并处理。反之,H5页面通过window.parent.postMessage
发送消息,ArkTS通过onMessage
接收并处理。这种双向通信机制实现了H5与ArkTS的无缝交互。