HarmonyOS 鸿蒙Next WebView注册多个javaScriptProxy

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next WebView注册多个javaScriptProxy

可以注册多个吗? .javaScriptProxy({ object: this.jsCallBackListener, name: “jsCallBackListener”, methodList: AppUtil.getJsMethod(), controller: this.webviewController }) .javaScriptProxy({ object: this.java, name: “java”, methodList: AppUtil.getJsJavaMethod(), controller: this.webviewController })

2 回复

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']);

上述代码中,testObj1testObj2是两个不同的JavaScript对象,'jsbridge1’和’jsbridge2’是它们在WebView中的唯一标识,而['method1', 'method2']['methodA', 'methodB']则是这些对象暴露给WebView的方法列表。

请注意,javaScriptProxy目前仅支持同步调用,异步调用无法获取执行结果。如果需要异步处理,可以考虑在Java/Kotlin端使用线程或协程执行耗时操作,然后通过WebView的evaluateJavascript方法将结果传回JavaScript端。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部