HarmonyOS web组件什么事件加载jsbridge方法?

ArkTS中的web组件在什么事件中加载jsbridge方法?在文档中没有找到,或者提供下相关文档地址。

HarmonyOS
2024-11-07 11:19:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

​可以尝试在onpagebegin 或者onpageende 生命周期中进行注册:

应用侧代码如下:​

// xxx.ets 
import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
 
class testClass { 
  constructor() { 
  } 
 
  test(): string { 
    return "ArkUI Web Component"; 
  } 
 
  toString(): void { 
    console.log('Web Component toString'); 
  } 
} 
 
@Entry 
@Component 
struct Index { 
  webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  @State testObj: testClass = new testClass(); 
 
  build() { 
    Column() { 
      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}`); 
          } 
        }) 
      Web({ src: $rawfile('test.html'), controller: this.webviewController }).onPageEnd(()=>{ 
        try { 
          this.webviewController.registerJavaScriptProxy(this.testObj, "testObjName", ["test", "toString"]); 
        } catch (error) { 
          let e: business_error.BusinessError = error as business_error.BusinessError; 
          console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 
        } 
      }) 
    } 
  } 
}

html代码如下:

// xxx.ets 
import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
 
class testClass { 
  constructor() { 
  } 
 
  test(): string { 
    return "ArkUI Web Component"; 
  } 
 
  toString(): void { 
    console.log('Web Component toString'); 
  } 
} 
 
@Entry 
@Component 
struct Index { 
  webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  @State testObj: testClass = new testClass(); 
 
  build() { 
    Column() { 
      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}`); 
          } 
        }) 
      Web({ src: $rawfile('test.html'), controller: this.webviewController }).onPageEnd(()=>{ 
        try { 
          this.webviewController.registerJavaScriptProxy(this.testObj, "testObjName", ["test", "toString"]); 
        } catch (error) { 
          let e: business_error.BusinessError = error as business_error.BusinessError; 
          console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 
        } 
      }) 
    } 
  } 
}

可以把registerJavaScriptProxy的使用放在onControllerAttached这个生命周期中,放在该生命周期里不需要refresh即可生效。

分享
微博
QQ
微信
回复
2024-11-07 17:38:37
相关问题
需要web组件JSBridge通信的demo
138浏览 • 1回复 待解决
HarmonyOS web组件加载pdf问题
469浏览 • 1回复 待解决
HarmonyOS web组件如何加载本地字库?
99浏览 • 1回复 待解决
HarmonyOS 使用Web组件加载页面示例
356浏览 • 1回复 待解决
HarmonyOS Web组件加载pdf预览
119浏览 • 1回复 待解决
HarmonyOS web组件加载url失败
350浏览 • 1回复 待解决
HarmonyOS Web组件加载片段时候不显示
134浏览 • 1回复 待解决
HarmonyOS Web组件加载富文本异常
148浏览 • 1回复 待解决
HarmonyOS Web组件加载html文件异常
391浏览 • 1回复 待解决
HarmonyOS Web组件如何加载html字符串
467浏览 • 1回复 待解决
HarmonyOS Web组件HTTP图片加载如何放行
347浏览 • 1回复 待解决
web组件对html文件的加载
709浏览 • 1回复 待解决
Web组件的onKeyEvent键盘事件不生效
1944浏览 • 1回复 待解决
HarmonyOS web加载失败
131浏览 • 1回复 待解决