此文章内容兼容API12,使用harmony next应用开发
H5 调用原生方法,并通信
1,在原生的web处,定义 javaScriptProxy / registerJavaScriptProxy 将ArkTS方法注册到H5页面中,供H5调用。
二者都可以注入JavaScript对象到window对象中;
(1) 但 javaScriptProxy 只能注册一个对象,registerJavaScriptProxy可以注册多个对象;
(2) javaScriptProxy是Web组件的方法,而,registerJavaScriptProxy是WebViewController的方法。
(3) 但前者在Web组件初始化调用,后者在Web组件初始化完成后调用。
javaScriptProxy 的使用规则
javaScriptProxy(javaScriptProxy: JavaScriptProxy): WebAttribute
Web({ src: '', controller: this.webviewController })
.javaScriptProxy({
object: new WebViewJsAndHm(),
name: "TestAppJs",
methodList: ["Method1", 'Method2', 'Method3'],
controller: this.webviewController
})
registerJavaScriptProxy 的使用规则
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处,调用 name.method
<script>
function callArkTS() {
let str = window.TestAppJs.Method1(); // 调用ArkTS的test方法
}
</script>
原生调用H5方法,并通信
使用webviewController
this.webviewController.runJavaScript("javascript:closeDZHWebViewResult('1')")
使用DSBridge框架
鸿蒙侧使用 ohos-dsbridge 包,操作方法详见gitee DSBrigde-HarmonyOS: 鸿蒙原生ArkTS与JavaScript通信框架