HarmonyOS h5与原生交互, 在原生实现的js方法中怎么获取到webController,用于调用runJavaScript方法?
HarmonyOS端定义js方法,提供给前端调用,之后需要通过webController的runJavaScript的方法调用h5的方法,但是JavaScriptObjTest在struct UI类外部,获取不到webController,HarmonyOS这边应该如何跟UI线程通信呢?
class JavaScriptObjTest {
mUnlineLocationCallBack: string = '';
jssdkCallSystemInfo(param: string) {
PiccLog.info('js参数' + param);
let unLineJsBirdgeReq: UnLineJsBirdgeReq = WebImp.parse(param);
if (unLineJsBirdgeReq == null) {
return;
}
switch (unLineJsBirdgeReq.method) {
case WebviewConstant.METHOD_SYSTEMINFO_SYSTEMINFO:
let systemInfo = WebImp.getSystemInfo();
let loadSystemInfoScriptUrl = "javascript:" + unLineJsBirdgeReq.callback + "('" + systemInfo + "')";
break;
}
}
};
@Entry
@Component
struct WebViewPage {
webParam: WebParam = router.getParams() as WebParam;
url: string = this.webParam.webUrl;
webController: webview.WebviewController = new webview.WebviewController();
build() {
Web({ src: this.url, controller: this.webController })
.javaScriptAccess(true)
.javaScriptProxy({
object: this.javascript,
name: 'PICAppModel',
methodList: ['jssdkCallSystemInfo'],
controller: this.webController
})
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS web原生和H5如何交互?
377浏览 • 1回复 待解决
HarmonyOS 原生与js交互
33浏览 • 1回复 待解决
HarmonyOS H5中触发原生的调用定位相关的示例实现
250浏览 • 1回复 待解决
HarmonyOS 原生跟h5交互现在有没有合适的框架,只使用webview不行,功能受限,h5不能调用原生的功能
48浏览 • 1回复 待解决
怎样在H5不传对象名的情况下原生收到对方要调用的方法?
37浏览 • 1回复 待解决
H5和ArkTS交互,H5页面首次获取不到原生侧接口返回数据
346浏览 • 1回复 待解决
前端代码如何调用原生中的方法并获取到返回值?
233浏览 • 1回复 待解决
H5调用相机、相册使用哪个原生接口?
43浏览 • 1回复 待解决
HarmonyOS H5页面怎么调用原生自定义键盘
366浏览 • 1回复 待解决
HarmonyOS web与H5交互
450浏览 • 1回复 待解决
HarmonyOS 怎么能收到H5调用的window方法?
58浏览 • 1回复 待解决
H5原生调JSbrige的demo示例
43浏览 • 1回复 待解决
有没有判断是小程序还是H5跳转到HarmonyOS原生页面的方法
281浏览 • 1回复 待解决
应用中内置web如何实现与h5的交互传参?
48浏览 • 1回复 待解决
HarmonyOS 原生项目怎么使用H5封装的js库,有没有桥接方案
239浏览 • 1回复 待解决
响应式布局是只适用于原生页面,还是H5页也支持
1851浏览 • 1回复 待解决
HarmonyOS H5与应用侧数据交互的Demo
378浏览 • 1回复 待解决
H5页面如何与ArkTS交互
2865浏览 • 1回复 待解决
HarmonyOS web与H5两端数据交互
550浏览 • 1回复 待解决
Web中webview和H5交互
947浏览 • 1回复 待解决
HarmonyOS原生中的web组件如何和组件内渲染的h5进行通信
244浏览 • 1回复 待解决
原生调用html中的javascript的实现。
249浏览 • 1回复 待解决
HarmonyOS开发场景下,如何通过flutter框架加载H5页面,并实现H5和原生页面之间互相跳转
289浏览 • 1回复 待解决
webviewController runJavaScript 获取h5返回值嵌套字符串
1216浏览 • 1回复 待解决
可以对javaScriptProxy和runJavaScript封装,实现JSBridge通信方案。使用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和调用结果。
完整demo参考链接如下:https://gitee.com/harmonyos/codelabs/tree/master/SelectContact