HarmonyOS JsBridge分层设计思想

在ArkWeb渲染框架适配方案中(https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-arkweb_rendering_framework-V5#section1672011288193),双端通讯的JSBridge,能否给完整的demo代码参考下。

HarmonyOS
2024-09-05 12:30:37
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

推荐的是JavaScriptProxy 样例请参考。

1.ArkTS调用前端函数

this.webviewController.runJavaScript('arkTsCallJs("arkTs调用前端函数")');

2.前端调用ArkTS函数,Web组件初始化调用,使用javaScriptProxy()接口

import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
@Entry 
@Component 
struct WebJsPages { 
  webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  //创建传入对象 
  @State arkObj: arkTSClass = new arkTSClass(); 
  @State regProObj: registerProxyClass = new registerProxyClass(); 
 
  aboutToAppear() { 
    // 配置Web开启调试模式 
    web_webview.WebviewController.setWebDebuggingAccess(true); 
  } 
 
  build() { 
    Column() { 
      Button('runJavaScript') 
        .onClick(() => { 
          this.webviewController.runJavaScript('arkTsCallJs("arkTs调用前端函数")'); 
        }) 
      Button('registerJavaScriptProxy') 
        .onClick(() => { 
          try { 
            this.webviewController.registerJavaScriptProxy(this.regProObj, "regObj", ["regTest", "toString"]); 
          } catch (error) { 
            let e: business_error.BusinessError = error as business_error.BusinessError; 
            console.log(`ErrorCode: ${e.code},  Message: ${e.message}`); 
          } 
        }) 
      //看业务需要,Web组件初始化调用,使用javaScriptProxy()接口 
      Web({ src: $rawfile('jsBridge.html'), controller: this.webviewController }) 
        .javaScriptProxy({ 
          object: this.arkObj, 
          name: "arkObj", 
          methodList: ["test"], 
          controller: this.webviewController 
        }) 
    } 
  } 
} 
 
class arkTSClass { 
  constructor() { 
 
  } 
  test(): string { 
    return 'js call ArkTS success!'; 
  } 
} 
 
class registerProxyClass { 
  constructor() { 
 
  } 
  regTest(): string{ 
    console.log("regTest==================") 
    return 'ArkTS  Use registerJavaScriptProxy Success!'; 
  } 
 
  toString(param:String): string { 
    console.log('reg proxy toString' + param); 
    return 'reg proxy toString' + param 
  } 
}

3.registerJavaScriptProxy方式 前端调用ArkTS函数,注意注入之后调用web刷新。

import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
@Entry 
@Component 
struct RegProxyPage { 
  webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  //创建传入对象 
  @State regProObj: registerProxyClass = new registerProxyClass(); 
 
  aboutToAppear() { 
    // 配置Web开启调试模式 
    // web_webview.WebviewController.setWebDebuggingAccess(true); 
  } 
 
  build() { 
    Column() { 
      //刷新web 这样web那边才能获得注入对象 
      Button('refresh') 
        .onClick(()=>{ 
          try{ 
            this.webviewController.refresh(); 
          }catch(error){ 
            let e:business_error.BusinessError = error as business_error.BusinessError; 
            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`) 
          } 
        }) 
      //1.注入对象 
      Button('registerJavaScriptProxy') 
        .onClick(() => { 
          try { 
            this.webviewController.registerJavaScriptProxy(this.regProObj, "regObj", ["regTest", "toString"]); 
          } catch (error) { 
            let e: business_error.BusinessError = error as business_error.BusinessError; 
            console.log(`ErrorCode: ${e.code},  Message: ${e.message}`); 
          } 
        }) 
      Web({ src: $rawfile('jsBridge.html'), controller: this.webviewController }) 
    } 
  } 
} 
 
class registerProxyClass { 
  constructor() { 
 
  } 
  regTest(): string{ 
    console.log("regTest==================") 
    return 'ArkTS  Use registerJavaScriptProxy Success!'; 
  } 
 
  toString(param:String): string { 
    console.log('regTest proxy toString' + param); 
    return 'regTest proxy toString' + param 
  } 
}
分享
微博
QQ
微信
回复
2024-09-05 15:36:23
相关问题
HarmonyOS JsBridge适配问题
1018浏览 • 1回复 待解决
HarmonyOS 如何配置分层图标?
988浏览 • 1回复 待解决
HarmonyOS jsbridge HarmonyOS版本
903浏览 • 1回复 待解决
HarmonyOS web组件jsBridge通信
1172浏览 • 1回复 待解决
HarmonyOS jsbridge使用问题
950浏览 • 1回复 待解决
HarmonyOS jsbridge功能demo
751浏览 • 1回复 待解决
HarmonyOS jsBridge 最佳实践
1600浏览 • 1回复 待解决
HarmonyOS JSBridge有哪些实现方式?
1041浏览 • 1回复 待解决
HarmonyOS web组件jsbridge通信demo
748浏览 • 1回复 待解决
jsBridge中如何正确使用this
1360浏览 • 1回复 待解决
HarmonyOS JsBridgeHarmonyOS版本sdk
963浏览 • 1回复 待解决
使用jsBridge拉起弹窗
2171浏览 • 1回复 待解决
jsBridge相关问题咨询
1434浏览 • 1回复 待解决
分层图标处理开发步骤
1525浏览 • 1回复 待解决
HarmonyOS 应用图标分层是指什么
1148浏览 • 1回复 待解决
HarmonyOS jsbridge能力暴露封装案例
1400浏览 • 1回复 待解决
HarmonyOS NDK JSBridge是否有性能提升
1048浏览 • 1回复 待解决
ets与ts需要如何做好分层
1737浏览 • 1回复 待解决
需要web组件JSBridge通信的demo
1117浏览 • 1回复 待解决