registerJavaScriptProxy为什么一定要refresh接口才能生效?如果挂载两个name的话如何实现?

registerJavaScriptProxy为什么一定要refresh接口才能生效?如果挂载两个name的话如何实现?

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

因为registerJavaScriptProxy是用来注册JavaScript代理的方法,它是将JavaScript代理对象注册到Web页面中使用。需要在页面加载时调用,因为它需要将代理对象注入到页面中。而refresh接口是用来刷新页面的方法,它可以重新加载页面并更新页面中的内容。在调用registerJavaScriptProxy方法后,如果不调用refresh接口,页面中可能无法立即使用代理对象。因此,为了确保代理对象能够在页面中正确使用,需要调用refresh接口来刷新页面,以便让代理对象生效。

挂载两个name的方法如下:

import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
 
class testObj { 
  constructor() { 
  } 
  test(): string { 
    console.log('ArkUI Web Component'); 
    return 'ArkUI Web Component'; 
  } 
  toString(): void { 
    console.log('Web Component toString'); 
  } 
} 
class webObj { 
  constructor() { 
  } 
  webTest(): string { 
    console.log('Web test'); 
    return 'Web test'; 
  } 
  webString(): void { 
    console.log('Web test toString'); 
  } 
} 
@Entry 
@Component 
struct Index { 
  controller: web_webview.WebviewController = new web_webview.WebviewController(); 
  @State testObjtest: testObj = new testObj(); 
  @State webTestObj: webObj = new webObj(); 
  build() { 
    Column() { 
      Button('refresh') 
      .onClick(() => { 
        try { 
          this.controller.refresh(); 
        } catch (error) { 
          let e: business_error.BusinessError = error as business_error.BusinessError; 
          console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 
        } 
      }) 
      Button('Register JavaScript To Window') 
      .onClick(() => { 
        try { 
          this.controller.registerJavaScriptProxy(this.testObjtest, 'objName', ['test', 'toString']); 
          this.controller.registerJavaScriptProxy(this.webTestObj, 'objTestName', ['webTest', 'webString']); 
        } catch (error) { 
          let e: business_error.BusinessError = error as business_error.BusinessError; 
          console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 
        } 
      }) 
      Web({ src: $rawfile('index.html'), controller: this.controller }) 
        .javaScriptAccess(true) 
    } 
  } 
}

参考文档:registerJavaScriptProxy

分享
微博
QQ
微信
回复
2024-06-06 22:27:50
相关问题
页面导航如何实现两个页面叠层
675浏览 • 1回复 待解决
页面导航如何实现A B两个页面叠层
285浏览 • 1回复 待解决
ArrayBuffer是否一定要传固定长度参数
751浏览 • 1回复 待解决
ArkTS开发如何比较两个string是否致 ?
3887浏览 • 3回复 待解决
两个设备控制相关问题
7818浏览 • 3回复 已解决
关于数据库的两个问题。
1060浏览 • 1回复 待解决
有谁知道如何合并两个对象
1105浏览 • 1回复 待解决
Left、Top为什么生效
340浏览 • 1回复 待解决
关于SQL查询两个表查询
1824浏览 • 1回复 待解决