HarmonyOS鸿蒙Next中web和harmony的交互问题
HarmonyOS鸿蒙Next中web和harmony的交互问题
我发现在onPageEnd中执行交互,客户端还是收不到,需要setTimeout 50ms或者以上才可以。我是在onControllerAttached中去loadUrl并且加入head的。前端是react next.js 编写的。现在我的疑问如何才能提供一个方法,让我明确知道在某个时机时候可以开始交互了,当然我可以通过网页调用一个交互来告诉当前已经准备好了,但是这样不太现实。页端改动太大。另外就是加上setTimeout 200ms的延时。但是这样很恶心。
目前的问题就是onPageEnd回调的时候,直接调用交互是有问题。但是没有较好的方式解决。求助求助
更多关于HarmonyOS鸿蒙Next中web和harmony的交互问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以利用Web().javaScriptProxy({})注册jsBridge,然后在h5页面中调用方法通知网页加载完成了,这个时候再由鸿蒙端向网页调用runJavaScript就行了。
更多关于HarmonyOS鸿蒙Next中web和harmony的交互问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
感谢答复,你这个方案我也思考过,就是让网页加载完成后再通知鸿蒙端,告诉鸿蒙说网页可以加载完成了,可以接受交互,但是这样改动就很麻烦了,因为网页比较多,都是之前的,所以这种不是很现实。
修正一下“我发现在onPageEnd中执行交互,客户端还是收不到” 这里是页端收不到,不是客户端。
在HarmonyOS鸿蒙Next中,Web与Harmony的交互主要通过Web组件和JSBridge实现。Web组件用于加载网页,JSBridge则提供JavaScript与HarmonyOS原生代码的通信能力。开发者可以通过JSBridge调用HarmonyOS的API,实现数据传递和功能调用。具体实现涉及在Web页面中注入JavaScript代码,并通过JSBridge与HarmonyOS原生模块进行交互。
在HarmonyOS Next中,Web与Harmony交互的时机问题确实需要注意。针对您的情况,建议采用以下解决方案:
-
使用
onProgressChanged
监听加载进度,当进度达到100%时再进行交互,这比单纯依赖onPageEnd
更可靠。 -
考虑使用WebView的
evaluateJavascript
方法主动检测页面准备状态,例如:
webView.evaluateJavascript("document.readyState", value -> {
if ("complete".equals(value)) {
// 执行交互
}
});
- 对于React Next.js页面,可以在组件挂载时触发自定义事件:
window.dispatchEvent(new Event('HarmonyReady'));
然后在Native端监听这个事件。
- 如果必须使用延时,建议减少到100ms以内,大多数情况下这个延时足够。
这些方法都比固定延时更可靠,且不需要大规模修改现有代码。