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
相关问题
HarmonyOS web组件jsBridge通信
1172浏览 • 1回复 待解决
HarmonyOS web组件jsbridge通信demo
748浏览 • 1回复 待解决
需要web组件JSBridge通信的demo
1117浏览 • 1回复 待解决
HarmonyOS web组件 加载web页面异常
1582浏览 • 1回复 待解决
HarmonyOS Web组件加载太慢
916浏览 • 1回复 待解决
HarmonyOS web组件加载pdf问题
1989浏览 • 1回复 待解决
HarmonyOS Web组件UserAgent判断方法
916浏览 • 1回复 待解决
HarmonyOS web组件加载url失败
1751浏览 • 1回复 待解决
HarmonyOS Web组件无法加载页面
1067浏览 • 1回复 待解决
HarmonyOS web组件加载页面空白
1351浏览 • 1回复 待解决
HarmonyOS Web组件加载pdf预览
1518浏览 • 1回复 待解决
HarmonyOS web组件如何加载本地字库?
1521浏览 • 1回复 待解决
HarmonyOS 使用Web组件加载页面示例
1510浏览 • 1回复 待解决
HarmonyOS组件响应父组件事件方法
1109浏览 • 1回复 待解决
HarmonyOS Web组件加载富文本异常
1561浏览 • 1回复 待解决