鸿蒙app与JS的交互/通信

此文章内容兼容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通信框架

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容