H5 調(diào)用原生方法秀又,并通信
1恋昼,在原生的web處谒兄,定義 javaScriptProxy / registerJavaScriptProxy 將ArkTS方法注冊到H5頁面中,供H5調(diào)用端朵。
二者都可以注入JavaScript對象到window對象中好芭;
(1) 但 javaScriptProxy 只能注冊一個對象,registerJavaScriptProxy可以注冊多個對象逸月;
(2) javaScriptProxy是Web組件的方法栓撞,而,registerJavaScriptProxy是WebViewController的方法。
(3) 但前者在Web組件初始化調(diào)用碗硬,后者在Web組件初始化完成后調(diào)用瓤湘。
javaScriptProxy 的使用規(guī)則
javaScriptProxy(javaScriptProxy: JavaScriptProxy): WebAttribute
Web({ src: '', controller: this.webviewController })
.javaScriptProxy({
object: new WebViewJsAndHm(),
name: "TestAppJs",
methodList: ["Method1", 'Method2', 'Method3'],
controller: this.webviewController
})
registerJavaScriptProxy 的使用規(guī)則
registerJavaScriptProxy(object: object, name: string, methodList: Array<string>, asyncMethodList?: Array<string>, permission?: string): void;
Web({ src: '', controller: this.webviewController })
.onControllerAttached(() => {
this.webViewJsAndHm = new NativeForJsPublic();
this.webViewJsAndHm1 = new NativeForJsPublic();
this.webviewController.registerJavaScriptProxy(this.webViewJsAndHm, 'TestAppJs', this.webViewJsAndHm.methodListForAppJs());
this.webviewController.registerJavaScriptProxy(this.webViewJsAndHm1, 'TestSj', this.webViewJsAndHm.methodList());
this.webviewController.refresh();
})
methodListForAppJs(): string[] {
return ["openUrlInNewPage"]
}
2,在web處恩尾,調(diào)用 name.method
<script>
function callArkTS() {
let str = window.TestAppJs.Method1(); // 調(diào)用ArkTS的test方法
}
</script>
原生調(diào)用H5方法弛说,并通信
使用webviewController
this.webviewController.runJavaScript("javascript:closeDZHWebViewResult('1')")
使用DSBridge框架
鴻蒙側(cè)使用 ohos-dsbridge 包,操作方法詳見gitee DSBrigde-HarmonyOS: 鴻蒙原生ArkTS與JavaScript通信框架