1# 前端页面调用应用侧函数 2 3 4开发者使用Web组件将应用侧代码注册到前端页面中,注册完成之后,前端页面中使用注册的对象名称就可以调用应用侧的函数,实现在前端页面中调用应用侧方法。 5 6 7注册应用侧代码有两种方式,一种在Web组件初始化使用调用,使用[javaScriptProxy()](../reference/arkui-ts/ts-basic-components-web.md#javascriptproxy)接口。另外一种在Web组件初始化完成后调用,使用[registerJavaScriptProxy()](../reference/apis/js-apis-webview.md#registerjavascriptproxy)接口。 8 9 10在下面的示例中,将test()方法注册在前端页面中, 该函数可以在前端页面触发运行。 11 12 13- [javaScriptProxy()](../reference/arkui-ts/ts-basic-components-web.md#javascriptproxy)接口使用示例如下。 14 15 ```ts 16 // xxx.ets 17 import web_webview from '@ohos.web.webview'; 18 19 class testClass { 20 constructor() { 21 } 22 23 test(): string { 24 return 'ArkTS Hello World!'; 25 } 26 } 27 28 @Entry 29 @Component 30 struct WebComponent { 31 webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 32 // 声明需要注册的对象 33 @State testObj: testClass = new testClass(); 34 35 build() { 36 Column() { 37 // web组件加载本地index.html页面 38 Web({ src: $rawfile('index.html'), controller: this.webviewController}) 39 // 将对象注入到web端 40 .javaScriptProxy({ 41 object: this.testObj, 42 name: "testObjName", 43 methodList: ["test"], 44 controller: this.webviewController 45 }) 46 } 47 } 48 } 49 ``` 50 51 52- 应用侧使用registerJavaScriptProxy()接口注册。 53 54 ```ts 55 // xxx.ets 56 import web_webview from '@ohos.web.webview'; 57 import business_error from '@ohos.base'; 58 59 class testClass { 60 constructor() { 61 } 62 63 test(): string { 64 return "ArkUI Web Component"; 65 } 66 67 toString(): void { 68 console.log('Web Component toString'); 69 } 70 } 71 72 @Entry 73 @Component 74 struct Index { 75 webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 76 @State testObj: testClass = new testClass(); 77 78 build() { 79 Column() { 80 Button('refresh') 81 .onClick(() => { 82 try { 83 this.webviewController.refresh(); 84 } catch (error) { 85 let e: business_error.BusinessError = error as business_error.BusinessError; 86 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 87 } 88 }) 89 Button('Register JavaScript To Window') 90 .onClick(() => { 91 try { 92 this.webviewController.registerJavaScriptProxy(this.testObj, "testObjName", ["test", "toString"]); 93 } catch (error) { 94 let e: business_error.BusinessError = error as business_error.BusinessError; 95 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 96 } 97 }) 98 Web({ src: $rawfile('index.html'), controller: this.webviewController }) 99 } 100 } 101 } 102 ``` 103 104 > **说明:** 105 > 106 > 使用[registerJavaScriptProxy()](../reference/apis/js-apis-webview.md#registerjavascriptproxy)接口注册方法时,注册后需调用[refresh()](../reference/apis/js-apis-webview.md#refresh)接口生效。 107 108 109- index.html前端页面触发应用侧代码。 110 111 ```html 112 <!-- index.html --> 113 <!DOCTYPE html> 114 <html> 115 <body> 116 <button type="button" onclick="callArkTS()">Click Me!</button> 117 <p id="demo"></p> 118 <script> 119 function callArkTS() { 120 let str = testObjName.test(); 121 document.getElementById("demo").innerHTML = str; 122 console.info('ArkTS Hello World! :' + str); 123 } 124 </script> 125 </body> 126 </html> 127 ``` 128