HarmonyOS 鸿蒙Next WebView注册多个javaScriptProxy
HarmonyOS 鸿蒙Next WebView注册多个javaScriptProxy
Web组件暂不支持javaScriptProxy属性方法注入多个JavaScript对象,最后注入的对象会覆盖之前的。可以在例如Web组件onControllerAttached生命周期中通过WebviewController.registerJavaScriptProxy接口注入多个JavaScript对象。
示例代码:
Web({ src: 'www.baidu.com', controller: this.webviewController })
.onControllerAttached(() => {
try {
this.webviewController.registerJavaScriptProxy(this.testObjtest1, 'JSBridge1', ['toString', 'test']);
console.error(`Invoke webviewController.registerJavaScriptProxy JSBridge1 succeed!`);
this.webviewController.registerJavaScriptProxy(this.testObjtest2, 'JSBridge2', ['test', 'toString']);
console.error(`Invoke webviewController.registerJavaScriptProxy JSBridge2 succeed!`);
} catch (err) {
console.error(`Invoke webviewController.registerJavaScriptProxy failed! err: ${JSON.stringify(err)}`);
}
});
在HarmonyOS(鸿蒙)的WebView组件中,关于注册多个javaScriptProxy的问题,可以通过registerJavaScriptProxy
方法实现。每个registerJavaScriptProxy
调用可以注册一个不同的JavaScript对象,并为其指定一个唯一的名称和方法列表。
例如,在WebView的onControllerAttached
生命周期事件中,你可以这样注册多个javaScriptProxy:
this.webviewcontroller.registerJavaScriptProxy(this.testObj1, 'jsbridge1', ['method1', 'method2']);
this.webviewcontroller.registerJavaScriptProxy(this.testObj2, 'jsbridge2', ['methodA', 'methodB']);
上述代码中,testObj1
和testObj2
是两个不同的JavaScript对象,'jsbridge1’和’jsbridge2’是它们在WebView中的唯一标识,而['method1', 'method2']
和['methodA', 'methodB']
则是这些对象暴露给WebView的方法列表。
请注意,javaScriptProxy目前仅支持同步调用,异步调用无法获取执行结果。如果需要异步处理,可以考虑在Java/Kotlin端使用线程或协程执行耗时操作,然后通过WebView的evaluateJavascript
方法将结果传回JavaScript端。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html