1# Class (WebController, deprecated) 2<!--Kit: ArkWeb--> 3<!--Subsystem: Web--> 4<!--Owner: @yp99ustc; @aohui; @zourongchun--> 5<!--Designer: @LongLie; @yaomingliu; @zhufenghao--> 6<!--Tester: @ghiker--> 7<!--Adviser: @HelloCrease--> 8 9通过WebController可以控制Web组件各种行为。一个WebController对象只能控制一个Web组件,且必须在Web组件和WebController绑定后,才能调用WebController上的方法。 10 11从API version 9开始不再维护,建议使用[WebviewController<sup>9+</sup>](./arkts-apis-webview-WebviewController.md)代替。 12 13> **说明:** 14> 15> - 该组件首批接口从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 16> 17> - 本Class首批接口从API version 8开始支持。 18> 19> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。 20 21## 创建对象 22 23<!--deprecated_code_no_check--> 24```ts 25let webController: WebController = new WebController() 26``` 27 28## constructor<sup>(deprecated)</sup> 29 30constructor() 31 32WebController的构造函数。 33 34> **说明:** 35> 36> 从API version 8开始支持,从API version 9开始废弃。并且不再提供新的接口作为替代。 37 38**系统能力:** SystemCapability.Web.Webview.Core 39 40## getCookieManager<sup>(deprecated)</sup> 41 42getCookieManager(): WebCookie 43 44获取Web组件cookie管理对象。 45 46从API version 9开始不再维护,建议使用[getCookie](./arkts-apis-webview-WebCookieManager.md#getcookiedeprecated)代替。 47 48**系统能力:** SystemCapability.Web.Webview.Core 49 50**返回值:** 51 52| 类型 | 说明 | 53| --------- | ---------------------------------------- | 54| WebCookie | Web组件cookie管理对象,参考[WebCookie](./arkts-basic-components-web-WebCookie.md)定义。 | 55 56**示例:** 57 58 ```ts 59 // xxx.ets 60 @Entry 61 @Component 62 struct WebComponent { 63 controller: WebController = new WebController() 64 65 build() { 66 Column() { 67 Button('getCookieManager') 68 .onClick(() => { 69 let cookieManager = this.controller.getCookieManager() 70 }) 71 Web({ src: 'www.example.com', controller: this.controller }) 72 } 73 } 74 } 75 ``` 76 77## requestFocus<sup>(deprecated)</sup> 78 79requestFocus() 80 81使当前web页面获取焦点。 82 83从API version 9开始不再维护,建议使用[requestFocus<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#requestfocus)代替。 84 85**系统能力:** SystemCapability.Web.Webview.Core 86 87**示例:** 88 89 ```ts 90 // xxx.ets 91 @Entry 92 @Component 93 struct WebComponent { 94 controller: WebController = new WebController() 95 96 build() { 97 Column() { 98 Button('requestFocus') 99 .onClick(() => { 100 this.controller.requestFocus() 101 }) 102 Web({ src: 'www.example.com', controller: this.controller }) 103 } 104 } 105 } 106 ``` 107 108## accessBackward<sup>(deprecated)</sup> 109 110accessBackward(): boolean 111 112当前页面是否可后退,即当前页面是否有返回历史记录。 113 114从API version 9开始不再维护,建议使用[accessBackward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessbackward)代替。 115 116**系统能力:** SystemCapability.Web.Webview.Core 117 118**返回值:** 119 120| 类型 | 说明 | 121| ------- | --------------------- | 122| boolean | 可以后退返回true,否则返回false。 | 123 124**示例:** 125 126 ```ts 127 // xxx.ets 128 @Entry 129 @Component 130 struct WebComponent { 131 controller: WebController = new WebController() 132 133 build() { 134 Column() { 135 Button('accessBackward') 136 .onClick(() => { 137 let result = this.controller.accessBackward() 138 console.info('result:' + result) 139 }) 140 Web({ src: 'www.example.com', controller: this.controller }) 141 } 142 } 143 } 144 ``` 145 146## accessForward<sup>(deprecated)</sup> 147 148accessForward(): boolean 149 150当前页面是否可前进,即当前页面是否有前进历史记录。 151 152从API version 9开始不再维护,建议使用[accessForward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessforward)代替。 153 154**系统能力:** SystemCapability.Web.Webview.Core 155 156**返回值:** 157 158| 类型 | 说明 | 159| ------- | --------------------- | 160| boolean | 返回true表示当前页面可以前进,返回false表示当前页面不可以前进。 | 161 162**示例:** 163 164 ```ts 165 // xxx.ets 166 @Entry 167 @Component 168 struct WebComponent { 169 controller: WebController = new WebController() 170 171 build() { 172 Column() { 173 Button('accessForward') 174 .onClick(() => { 175 let result = this.controller.accessForward() 176 console.info('result:' + result) 177 }) 178 Web({ src: 'www.example.com', controller: this.controller }) 179 } 180 } 181 } 182 ``` 183 184## accessStep<sup>(deprecated)</sup> 185 186accessStep(step: number): boolean 187 188当前页面是否可前进或者后退给定的step步。 189 190从API version 9开始不再维护,建议使用[accessStep<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessstep)代替。 191 192**系统能力:** SystemCapability.Web.Webview.Core 193 194**参数:** 195 196| 参数名 | 类型 | 必填 | 说明 | 197| ---- | ------ | ---- | --------------------- | 198| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 199 200**返回值:** 201 202| 类型 | 说明 | 203| ------- | --------- | 204| boolean | 页面是否前进或后退 | 205 206**示例:** 207 208 ```ts 209 // xxx.ets 210 @Entry 211 @Component 212 struct WebComponent { 213 controller: WebController = new WebController() 214 @State steps: number = 2 215 216 build() { 217 Column() { 218 Button('accessStep') 219 .onClick(() => { 220 let result = this.controller.accessStep(this.steps) 221 console.info('result:' + result) 222 }) 223 Web({ src: 'www.example.com', controller: this.controller }) 224 } 225 } 226 } 227 ``` 228 229## backward<sup>(deprecated)</sup> 230 231backward() 232 233按照历史栈,后退一个页面。一般结合accessBackward一起使用。 234 235从API version 9开始不再维护,建议使用[backward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#backward)代替。 236 237**系统能力:** SystemCapability.Web.Webview.Core 238 239**示例:** 240 241 ```ts 242 // xxx.ets 243 @Entry 244 @Component 245 struct WebComponent { 246 controller: WebController = new WebController() 247 248 build() { 249 Column() { 250 Button('backward') 251 .onClick(() => { 252 this.controller.backward() 253 }) 254 Web({ src: 'www.example.com', controller: this.controller }) 255 } 256 } 257 } 258 ``` 259 260## forward<sup>(deprecated)</sup> 261 262forward() 263 264按照历史栈,前进一个页面。一般结合accessForward一起使用。 265 266从API version 9开始不再维护,建议使用[forward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#forward)代替。 267 268**系统能力:** SystemCapability.Web.Webview.Core 269 270**示例:** 271 272 ```ts 273 // xxx.ets 274 @Entry 275 @Component 276 struct WebComponent { 277 controller: WebController = new WebController() 278 279 build() { 280 Column() { 281 Button('forward') 282 .onClick(() => { 283 this.controller.forward() 284 }) 285 Web({ src: 'www.example.com', controller: this.controller }) 286 } 287 } 288 } 289 ``` 290 291## deleteJavaScriptRegister<sup>(deprecated)</sup> 292 293deleteJavaScriptRegister(name: string) 294 295删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后立即生效,无须调用[refresh](#refreshdeprecated)接口。 296 297从API version 9开始不再维护,建议使用[deleteJavaScriptRegister<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#deletejavascriptregister)代替。 298 299**系统能力:** SystemCapability.Web.Webview.Core 300 301**参数:** 302 303| 参数名 | 类型 | 必填 | 说明 | 304| ---- | ------ | ---- | ---------------------------------------- | 305| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 306 307**示例:** 308 309 ```ts 310 // xxx.ets 311 @Entry 312 @Component 313 struct WebComponent { 314 controller: WebController = new WebController() 315 @State name: string = 'Object' 316 317 build() { 318 Column() { 319 Button('deleteJavaScriptRegister') 320 .onClick(() => { 321 this.controller.deleteJavaScriptRegister(this.name) 322 }) 323 Web({ src: 'www.example.com', controller: this.controller }) 324 } 325 } 326 } 327 ``` 328 329## getHitTest<sup>(deprecated)</sup> 330 331getHitTest(): HitTestType 332 333获取当前被点击区域的元素类型。 334 335从API version 9开始不再维护,建议使用[getHitTest<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#gethittestdeprecated)代替。 336 337**系统能力:** SystemCapability.Web.Webview.Core 338 339**返回值:** 340 341| 类型 | 说明 | 342| ------------------------------- | ----------- | 343| [HitTestType](./arkts-basic-components-web-e.md#hittesttype) | 被点击区域的元素类型。 | 344 345**示例:** 346 347 ```ts 348 // xxx.ets 349 @Entry 350 @Component 351 struct WebComponent { 352 controller: WebController = new WebController() 353 354 build() { 355 Column() { 356 Button('getHitTest') 357 .onClick(() => { 358 let hitType = this.controller.getHitTest() 359 console.info("hitType: " + hitType) 360 }) 361 Web({ src: 'www.example.com', controller: this.controller }) 362 } 363 } 364 } 365 ``` 366 367## loadData<sup>(deprecated)</sup> 368 369loadData(options: { data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string }) 370 371baseUrl为空时,通过”data“协议加载指定的一段字符串。 372 373当baseUrl为”data“协议时,编码后的data字符串将被Web组件作为”data"协议加载。 374 375当baseUrl为“http/https"协议时,编码后的data字符串将被Web组件以类似loadUrl的方式以非编码字符串处理。 376 377从API version 9开始不再维护,建议使用[loadData<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#loaddata)代替。 378 379**系统能力:** SystemCapability.Web.Webview.Core 380 381**参数:** 382 383| 参数名 | 类型 | 必填 | 说明 | 384| ---------- | ------ | ---- | ---------------------------------------- | 385| data | string | 是 | 按照”Base64“或者”URL"编码后的一段字符串。 | 386| mimeType | string | 是 | 媒体类型(MIME)。 | 387| encoding | string | 是 | 编码类型,具体为“Base64"或者”URL编码。 | 388| baseUrl | string | 否 | 指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给`window.origin`。 | 389| historyUrl | string | 否 | 历史记录URL。非空时,可被历史记录管理,实现前后后退功能。当baseUrl为空时,此属性无效。 | 390 391**示例:** 392 393 ```ts 394 // xxx.ets 395 @Entry 396 @Component 397 struct WebComponent { 398 controller: WebController = new WebController() 399 400 build() { 401 Column() { 402 Button('loadData') 403 .onClick(() => { 404 this.controller.loadData({ 405 data: "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 406 mimeType: "text/html", 407 encoding: "UTF-8" 408 }) 409 }) 410 Web({ src: 'www.example.com', controller: this.controller }) 411 } 412 } 413 } 414 ``` 415 416## loadUrl<sup>(deprecated)</sup> 417 418loadUrl(options: { url: string | Resource, headers?: Array\<Header\> }) 419 420使用指定的http头加载指定的URL。 421 422通过loadUrl注入的对象只在当前document有效,即通过loadUrl导航到新的页面会无效。 423 424而通过registerJavaScriptProxy注入的对象,在loadUrl导航到新的页面也会有效。 425 426从API version 9开始不再维护,建议使用[loadUrl<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#loadurl)代替。 427 428**系统能力:** SystemCapability.Web.Webview.Core 429 430**参数:** 431 432| 参数名 | 类型 | 必填 | 说明 | 433| -------- | -------------------------- | ---- | -------------- | 434| url | string \| Resource | 是 | 需要加载的 URL。 | 435| headers | Array\<[Header](./arkts-basic-components-web-i.md#header)\> | 否 | URL的附加HTTP请求头。<br>默认值:[]。 | 436 437**示例:** 438 439 ```ts 440 // xxx.ets 441 @Entry 442 @Component 443 struct WebComponent { 444 controller: WebController = new WebController() 445 446 build() { 447 Column() { 448 Button('loadUrl') 449 .onClick(() => { 450 this.controller.loadUrl({ url: 'www.example.com' }) 451 }) 452 Web({ src: 'www.example.com', controller: this.controller }) 453 } 454 } 455 } 456 ``` 457 458## onActive<sup>(deprecated)</sup> 459 460onActive(): void 461 462调用此接口通知Web组件进入前台激活状态。 463 464从API version 9开始不再维护,建议使用[onActive<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#onactive)代替。 465 466**系统能力:** SystemCapability.Web.Webview.Core 467 468**示例:** 469 470 ```ts 471 // xxx.ets 472 @Entry 473 @Component 474 struct WebComponent { 475 controller: WebController = new WebController() 476 477 build() { 478 Column() { 479 Button('onActive') 480 .onClick(() => { 481 this.controller.onActive() 482 }) 483 Web({ src: 'www.example.com', controller: this.controller }) 484 } 485 } 486 } 487 ``` 488 489## onInactive<sup>(deprecated)</sup> 490 491onInactive(): void 492 493调用此接口通知Web组件进入未激活状态。 494 495从API version 9开始不再维护,建议使用[onInactive<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#oninactive)代替。 496 497**系统能力:** SystemCapability.Web.Webview.Core 498 499**示例:** 500 501 ```ts 502 // xxx.ets 503 @Entry 504 @Component 505 struct WebComponent { 506 controller: WebController = new WebController() 507 508 build() { 509 Column() { 510 Button('onInactive') 511 .onClick(() => { 512 this.controller.onInactive() 513 }) 514 Web({ src: 'www.example.com', controller: this.controller }) 515 } 516 } 517 } 518 ``` 519 520## zoom<sup>(deprecated)</sup> 521 522zoom(factor: number): void 523 524调整当前网页的缩放比例。 525 526从API version 9开始不再维护,建议使用[zoom<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#zoom)代替。 527 528**系统能力:** SystemCapability.Web.Webview.Core 529 530**参数:** 531 532| 参数名 | 类型 | 必填 | 说明 | 533| ------ | ------ | ---- | ------------------------------ | 534| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,正值为放大,负值为缩小。 | 535 536**示例:** 537 538 ```ts 539 // xxx.ets 540 @Entry 541 @Component 542 struct WebComponent { 543 controller: WebController = new WebController() 544 @State factor: number = 1 545 546 build() { 547 Column() { 548 Button('zoom') 549 .onClick(() => { 550 this.controller.zoom(this.factor) 551 }) 552 Web({ src: 'www.example.com', controller: this.controller }) 553 } 554 } 555 } 556 ``` 557 558## refresh<sup>(deprecated)</sup> 559 560refresh() 561 562调用此接口通知Web组件刷新网页。 563 564从API version 9开始不再维护,建议使用[refresh<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#refresh)代替。 565 566**系统能力:** SystemCapability.Web.Webview.Core 567 568**示例:** 569 570 ```ts 571 // xxx.ets 572 @Entry 573 @Component 574 struct WebComponent { 575 controller: WebController = new WebController() 576 577 build() { 578 Column() { 579 Button('refresh') 580 .onClick(() => { 581 this.controller.refresh() 582 }) 583 Web({ src: 'www.example.com', controller: this.controller }) 584 } 585 } 586 } 587 ``` 588 589## registerJavaScriptProxy<sup>(deprecated)</sup> 590 591registerJavaScriptProxy(options: { object: object, name: string, methodList: Array\<string\> }) 592 593注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refreshdeprecated)接口生效。 594 595从API version 9开始不再维护,建议使用[registerJavaScriptProxy<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#registerjavascriptproxy)代替。 596 597**系统能力:** SystemCapability.Web.Webview.Core 598 599**参数:** 600 601| 参数名 | 类型 | 必填 | 说明 | 602| ---------- | --------------- | ---- | ---------------------------------------- | 603| object | object | 是 | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。其中方法的参数和返回类型只能为string,number,boolean | 604| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 605| methodList | Array\<string\> | 是 | 参与注册的应用侧JavaScript对象的方法。 | 606 607**示例:** 608 609 ```ts 610 // xxx.ets 611 class TestObj { 612 constructor() { 613 } 614 615 test(): string { 616 return "ArkUI Web Component" 617 } 618 619 toString(): void { 620 console.info('Web Component toString') 621 } 622 } 623 624 @Entry 625 @Component 626 struct Index { 627 controller: WebController = new WebController() 628 testObj = new TestObj(); 629 build() { 630 Column() { 631 Row() { 632 Button('Register JavaScript To Window').onClick(() => { 633 this.controller.registerJavaScriptProxy({ 634 object: this.testObj, 635 name: "objName", 636 methodList: ["test", "toString"], 637 }) 638 }) 639 } 640 Web({ src: $rawfile('index.html'), controller: this.controller }) 641 .javaScriptAccess(true) 642 } 643 } 644 } 645 ``` 646 647 加载的html文件。 648 ```html 649 <!-- index.html --> 650 <!DOCTYPE html> 651 <html> 652 <head> 653 <meta charset="utf-8"> 654 </head> 655 <body> 656 Hello world! 657 <script type="text/javascript"> 658 function htmlTest() { 659 str = objName.test("test function") 660 console.info('objName.test result:'+ str) 661 } 662 </script> 663 </body> 664 </html> 665 666 ``` 667 668## runJavaScript<sup>(deprecated)</sup> 669 670runJavaScript(options: { script: string, callback?: (result: string) => void }) 671 672异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 673 674从API version 9开始不再维护,建议使用[runJavaScript<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#runjavascript)代替。 675 676**系统能力:** SystemCapability.Web.Webview.Core 677 678**参数:** 679 680| 参数名 | 类型 | 必填 | 说明 | 681| -------- | ------------------------ | ---- | ---------------------------------------- | 682| script | string | 是 | JavaScript脚本。 | 683| callback | (result: string) => void | 否 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 684 685**示例:** 686 687 ```ts 688 // xxx.ets 689 @Entry 690 @Component 691 struct WebComponent { 692 controller: WebController = new WebController() 693 @State webResult: string = '' 694 build() { 695 Column() { 696 Text(this.webResult).fontSize(20) 697 Web({ src: $rawfile('index.html'), controller: this.controller }) 698 .javaScriptAccess(true) 699 .onPageEnd((event) => { 700 this.controller.runJavaScript({ 701 script: 'test()', 702 callback: (result: string)=> { 703 this.webResult = result 704 console.info(`The test() return value is: ${result}`) 705 }}) 706 if (event) { 707 console.info('url: ', event.url) 708 } 709 }) 710 } 711 } 712 } 713 ``` 714 加载的html文件。 715 ```html 716 <!-- index.html --> 717 <!DOCTYPE html> 718 <html> 719 <head> 720 <meta charset="utf-8"> 721 </head> 722 <body> 723 Hello world! 724 <script type="text/javascript"> 725 function test() { 726 console.info('Ark WebComponent') 727 return "This value is from index.html" 728 } 729 </script> 730 </body> 731 </html> 732 ``` 733 734## stop<sup>(deprecated)</sup> 735 736stop() 737 738停止页面加载。 739 740从API version 9开始不再维护,建议使用[stop<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#stop)代替。 741 742**系统能力:** SystemCapability.Web.Webview.Core 743 744**示例:** 745 746 ```ts 747 // xxx.ets 748 @Entry 749 @Component 750 struct WebComponent { 751 controller: WebController = new WebController() 752 753 build() { 754 Column() { 755 Button('stop') 756 .onClick(() => { 757 this.controller.stop() 758 }) 759 Web({ src: 'www.example.com', controller: this.controller }) 760 } 761 } 762 } 763 ``` 764 765## clearHistory<sup>(deprecated)</sup> 766 767clearHistory(): void 768 769删除所有前进后退记录。 770 771从API version 9开始不再维护,建议使用[clearHistory<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#clearhistory)代替。 772 773**系统能力:** SystemCapability.Web.Webview.Core 774 775**示例:** 776 777 ```ts 778 // xxx.ets 779 @Entry 780 @Component 781 struct WebComponent { 782 controller: WebController = new WebController() 783 784 build() { 785 Column() { 786 Button('clearHistory') 787 .onClick(() => { 788 this.controller.clearHistory() 789 }) 790 Web({ src: 'www.example.com', controller: this.controller }) 791 } 792 } 793 } 794 ```