前端頁面調(diào)用應(yīng)用側(cè)函數(shù)

2024-02-16 13:39 更新

開發(fā)者使用Web組件將應(yīng)用側(cè)代碼注冊到前端頁面中,注冊完成之后,前端頁面中使用注冊的對象名稱就可以調(diào)用應(yīng)用側(cè)的函數(shù),實現(xiàn)在前端頁面中調(diào)用應(yīng)用側(cè)方法。

注冊應(yīng)用側(cè)代碼有兩種方式,一種在Web組件初始化使用調(diào)用,使用javaScriptProxy()接口。另外一種在Web組件初始化完成后調(diào)用,使用registerJavaScriptProxy()接口。

在下面的示例中,將test()方法注冊在前端頁面中, 該函數(shù)可以在前端頁面觸發(fā)運行。

  • javaScriptProxy()接口使用示例如下。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview';
    3. class testClass {
    4. constructor() {
    5. }
    6. test(): string {
    7. return 'ArkTS Hello World!';
    8. }
    9. }
    10. @Entry
    11. @Component
    12. struct WebComponent {
    13. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
    14. // 聲明需要注冊的對象
    15. @State testObj: testClass = new testClass();
    16. build() {
    17. Column() {
    18. // web組件加載本地index.html頁面
    19. Web({ src: $rawfile('index.html'), controller: this.webviewController})
    20. // 將對象注入到web端
    21. .javaScriptProxy({
    22. object: this.testObj,
    23. name: "testObjName",
    24. methodList: ["test"],
    25. controller: this.webviewController
    26. })
    27. }
    28. }
    29. }
  • 應(yīng)用側(cè)使用registerJavaScriptProxy()接口注冊。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview';
    3. import business_error from '@ohos.base';
    4. class testClass {
    5. constructor() {
    6. }
    7. test(): string {
    8. return "ArkUI Web Component";
    9. }
    10. toString(): void {
    11. console.log('Web Component toString');
    12. }
    13. }
    14. @Entry
    15. @Component
    16. struct Index {
    17. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
    18. @State testObj: testClass = new testClass();
    19. build() {
    20. Column() {
    21. Button('refresh')
    22. .onClick(() => {
    23. try {
    24. this.webviewController.refresh();
    25. } catch (error) {
    26. let e: business_error.BusinessError = error as business_error.BusinessError;
    27. console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
    28. }
    29. })
    30. Button('Register JavaScript To Window')
    31. .onClick(() => {
    32. try {
    33. this.webviewController.registerJavaScriptProxy(this.testObj, "testObjName", ["test", "toString"]);
    34. } catch (error) {
    35. let e: business_error.BusinessError = error as business_error.BusinessError;
    36. console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
    37. }
    38. })
    39. Web({ src: $rawfile('index.html'), controller: this.webviewController })
    40. }
    41. }
    42. }
    說明

    使用registerJavaScriptProxy()接口注冊方法時,注冊后需調(diào)用refresh()接口生效。

  • index.html前端頁面觸發(fā)應(yīng)用側(cè)代碼。
    1. <!-- index.html -->
    2. <!DOCTYPE html>
    3. <html>
    4. <body>
    5. <button type="button" onclick="callArkTS()">Click Me!</button>
    6. <p id="demo"></p>
    7. <script>
    8. function callArkTS() {
    9. let str = testObjName.test();
    10. document.getElementById("demo").innerHTML = str;
    11. console.info('ArkTS Hello World! :' + str);
    12. }
    13. </script>
    14. </body>
    15. </html>
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號