1 2 3# @ohos.web.webview (Webview) 4 5@ohos.web.webview提供web控制能力,[web](../arkui-ts/ts-basic-components-web.md)组件提供具有网页显示能力。 6 7> **说明:** 8> 9> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 10> 11> - 示例效果请以真机运行为准,当前IDE预览器不支持。 12 13## 需要权限 14 15访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[权限申请声明](../../security/accesstoken-guidelines.md)。 16 17## 导入模块 18 19```ts 20import web_webview from '@ohos.web.webview'; 21``` 22 23## once 24 25once(type: string, callback: Callback\<void\>): void 26 27订阅一次指定类型Web事件的回调。 28 29**系统能力:** SystemCapability.Web.Webview.Core 30 31**参数:** 32 33| 参数名 | 类型 | 必填 | 说明 | 34| ------- | ---------------- | ---- | -------------------- | 35| type | string | 是 | Web事件的类型,目前支持:"webInited"(Web初始化完成)。 | 36| headers | Callback\<void\> | 是 | 所订阅的回调函数。 | 37 38**示例:** 39 40```ts 41// xxx.ets 42import web_webview from '@ohos.web.webview' 43 44web_webview.once("webInited", () => { 45 console.log("setCookie") 46 web_webview.WebCookieManager.setCookie("https://www.example.com", "a=b") 47}) 48 49@Entry 50@Component 51struct WebComponent { 52 controller: web_webview.WebviewController = new web_webview.WebviewController(); 53 54 build() { 55 Column() { 56 Web({ src: 'www.example.com', controller: this.controller }) 57 } 58 } 59} 60``` 61 62## WebMessagePort 63 64通过WebMessagePort可以进行消息的发送以及接收。 65 66### close 67 68close(): void 69 70关闭该消息端口。 71 72**系统能力:** SystemCapability.Web.Webview.Core 73 74**示例:** 75 76```ts 77// xxx.ets 78import web_webview from '@ohos.web.webview' 79 80@Entry 81@Component 82struct WebComponent { 83 controller: web_webview.WebviewController = new web_webview.WebviewController(); 84 msgPort: web_webview.WebMessagePort[] = null; 85 86 build() { 87 Column() { 88 Button('close') 89 .onClick(() => { 90 if (this.msgPort && this.msgPort[1]) { 91 this.msgPort[1].close(); 92 } else { 93 console.error("msgPort is null, Please initialize first"); 94 } 95 }) 96 Web({ src: 'www.example.com', controller: this.controller }) 97 } 98 } 99} 100``` 101 102### postMessageEvent 103 104postMessageEvent(message: WebMessage): void 105 106发送消息。完整示例代码参考[postMessage](#postmessage) 107 108**系统能力:** SystemCapability.Web.Webview.Core 109 110**参数:** 111 112| 参数名 | 类型 | 必填 | 说明 | 113| ------- | ------ | ---- | :------------- | 114| message | [WebMessage](#webmessage) | 是 | 要发送的消息。 | 115 116**错误码:** 117 118以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 119 120| 错误码ID | 错误信息 | 121| -------- | ------------------------------------- | 122| 17100010 | Can not post message using this port. | 123 124**示例:** 125 126```ts 127// xxx.ets 128import web_webview from '@ohos.web.webview' 129 130@Entry 131@Component 132struct WebComponent { 133 controller: web_webview.WebviewController = new web_webview.WebviewController(); 134 ports: web_webview.WebMessagePort[]; 135 136 build() { 137 Column() { 138 Button('postMessageEvent') 139 .onClick(() => { 140 try { 141 this.ports = this.controller.createWebMessagePorts(); 142 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 143 this.ports[1].postMessageEvent("post message from ets to html5"); 144 } catch (error) { 145 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 146 } 147 }) 148 Web({ src: 'www.example.com', controller: this.controller }) 149 } 150 } 151} 152``` 153 154### onMessageEvent 155 156onMessageEvent(callback: (result: WebMessage) => void): void 157 158注册回调函数,接收HTML5侧发送过来的消息。完整示例代码参考[postMessage](#postmessage) 159 160**系统能力:** SystemCapability.Web.Webview.Core 161 162**参数:** 163 164| 参数名 | 类型 | 必填 | 说明 | 165| -------- | -------- | ---- | :------------------- | 166| result | [WebMessage](#webmessage) | 是 | 接收到的消息。 | 167 168**错误码:** 169 170以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 171 172| 错误码ID | 错误信息 | 173| -------- | ----------------------------------------------- | 174| 17100006 | Can not register message event using this port. | 175 176**示例:** 177 178```ts 179// xxx.ets 180import web_webview from '@ohos.web.webview' 181 182@Entry 183@Component 184struct WebComponent { 185 controller: web_webview.WebviewController = new web_webview.WebviewController(); 186 ports: web_webview.WebMessagePort[]; 187 188 build() { 189 Column() { 190 Button('onMessageEvent') 191 .onClick(() => { 192 try { 193 this.ports = this.controller.createWebMessagePorts(); 194 this.ports[1].onMessageEvent((msg) => { 195 if (typeof(msg) == "string") { 196 console.log("received string message from html5, string is:" + msg); 197 } else if (typeof(msg) == "object") { 198 if (msg instanceof ArrayBuffer) { 199 console.log("received arraybuffer from html5, length is:" + msg.byteLength); 200 } else { 201 console.log("not support"); 202 } 203 } else { 204 console.log("not support"); 205 } 206 }) 207 } catch (error) { 208 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 209 } 210 }) 211 Web({ src: 'www.example.com', controller: this.controller }) 212 } 213 } 214} 215``` 216 217## WebviewController 218 219通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 220 221### initializeWebEngine 222 223static initializeWebEngine(): void 224 225在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。 226 227**系统能力:** SystemCapability.Web.Webview.Core 228 229**示例:** 230 231本示例以 MainAbility 为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。 232 233```ts 234// xxx.ts 235import UIAbility from '@ohos.app.ability.UIAbility'; 236import web_webview from '@ohos.web.webview'; 237 238export default class EntryAbility extends UIAbility { 239 onCreate(want, launchParam) { 240 console.log("EntryAbility onCreate") 241 web_webview.WebviewController.initializeWebEngine() 242 globalThis.abilityWant = want 243 console.log("EntryAbility onCreate done") 244 } 245} 246``` 247 248### 创建对象 249 250```ts 251// xxx.ets 252import web_webview from '@ohos.web.webview'; 253 254@Entry 255@Component 256struct WebComponent { 257 controller: web_webview.WebviewController = new web_webview.WebviewController(); 258 259 build() { 260 Column() { 261 Web({ src: 'www.example.com', controller: this.controller }) 262 } 263 } 264} 265``` 266 267### setWebDebuggingAccess 268 269static setWebDebuggingAccess(webDebuggingAccess: boolean): void 270 271设置是否启用网页调试功能。 272 273**系统能力:** SystemCapability.Web.Webview.Core 274 275**参数:** 276 277| 参数名 | 类型 | 必填 | 说明 | 278| ------------------ | ------- | ---- | ------------- | 279| webDebuggingAccess | boolean | 是 | 设置是否启用网页调试功能。| 280 281```ts 282// xxx.ets 283import web_webview from '@ohos.web.webview'; 284 285@Entry 286@Component 287struct WebComponent { 288 controller: web_webview.WebviewController = new web_webview.WebviewController(); 289 290 aboutToAppear():void { 291 try { 292 web_webview.WebviewController.setWebDebuggingAccess(true); 293 } catch(error) { 294 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 295 } 296 } 297 298 build() { 299 Column() { 300 Web({ src: 'www.example.com', controller: this.controller }) 301 } 302 } 303} 304``` 305 306### loadUrl 307 308loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 309 310加载指定的URL。 311 312**系统能力:** SystemCapability.Web.Webview.Core 313 314**参数:** 315 316| 参数名 | 类型 | 必填 | 说明 | 317| ------- | ---------------- | ---- | :-------------------- | 318| url | string \| Resource | 是 | 需要加载的 URL。 | 319| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 320 321**错误码:** 322 323以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 324 325| 错误码ID | 错误信息 | 326| -------- | ------------------------------------------------------------ | 327| 17100001 | Init error. The WebviewController must be associated with a Web component. | 328| 17100002 | Invalid url. | 329| 17100003 | Invalid resource path or file type. | 330 331**示例:** 332 333```ts 334// xxx.ets 335import web_webview from '@ohos.web.webview' 336 337@Entry 338@Component 339struct WebComponent { 340 controller: web_webview.WebviewController = new web_webview.WebviewController(); 341 342 build() { 343 Column() { 344 Button('loadUrl') 345 .onClick(() => { 346 try { 347 //需要加载的URL是string类型 348 this.controller.loadUrl('www.example.com'); 349 } catch (error) { 350 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 351 } 352 }) 353 Web({ src: 'www.example.com', controller: this.controller }) 354 } 355 } 356} 357``` 358 359```ts 360// xxx.ets 361import web_webview from '@ohos.web.webview' 362 363@Entry 364@Component 365struct WebComponent { 366 controller: web_webview.WebviewController = new web_webview.WebviewController(); 367 368 build() { 369 Column() { 370 Button('loadUrl') 371 .onClick(() => { 372 try { 373 //带参数headers 374 this.controller.loadUrl('www.example.com', [{headerKey: "headerKey", headerValue: "headerValue"}]); 375 } catch (error) { 376 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 377 } 378 }) 379 Web({ src: 'www.example.com', controller: this.controller }) 380 } 381 } 382} 383``` 384 385加载本地网页,加载本地资源文件有两种方式。 3861.$rawfile方式。 387```ts 388// xxx.ets 389import web_webview from '@ohos.web.webview' 390 391@Entry 392@Component 393struct WebComponent { 394 controller: web_webview.WebviewController = new web_webview.WebviewController(); 395 396 build() { 397 Column() { 398 Button('loadUrl') 399 .onClick(() => { 400 try { 401 //需要加载的URL是Resource类型 402 this.controller.loadUrl($rawfile('xxx.html')); 403 } catch (error) { 404 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 405 } 406 }) 407 Web({ src: 'www.example.com', controller: this.controller }) 408 } 409 } 410} 411``` 412 4132.加载沙箱路径下的本地资源文件,可以参考[web](../arkui-ts/ts-basic-components-web.md#web)加载沙箱路径的示例代码。 414 415```html 416<!-- xxx.html --> 417<!DOCTYPE html> 418<html> 419 <body> 420 <p>Hello World</p> 421 </body> 422</html> 423``` 424 425### loadData 426 427loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void 428 429加载指定的数据。 430 431**系统能力:** SystemCapability.Web.Webview.Core 432 433**参数:** 434 435| 参数名 | 类型 | 必填 | 说明 | 436| ---------- | ------ | ---- | ------------------------------------------------------------ | 437| data | string | 是 | 按照”Base64“或者”URL"编码后的一段字符串。 | 438| mimeType | string | 是 | 媒体类型(MIME)。 | 439| encoding | string | 是 | 编码类型,具体为“Base64"或者”URL编码。 | 440| baseUrl | string | 否 | 指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给window.origin。 | 441| historyUrl | string | 否 | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 | 442 443**错误码:** 444 445以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 446 447| 错误码ID | 错误信息 | 448| -------- | ------------------------------------------------------------ | 449| 17100001 | Init error. The WebviewController must be associated with a Web component. | 450| 17100002 | Invalid url. | 451 452**示例:** 453 454```ts 455// xxx.ets 456import web_webview from '@ohos.web.webview' 457 458@Entry 459@Component 460struct WebComponent { 461 controller: web_webview.WebviewController = new web_webview.WebviewController(); 462 463 build() { 464 Column() { 465 Button('loadData') 466 .onClick(() => { 467 try { 468 this.controller.loadData( 469 "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 470 "text/html", 471 "UTF-8" 472 ); 473 } catch (error) { 474 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 475 } 476 }) 477 Web({ src: 'www.example.com', controller: this.controller }) 478 } 479 } 480} 481``` 482 483加载本地资源 484```ts 485// xxx.ets 486import web_webview from '@ohos.web.webview' 487 488@Entry 489@Component 490struct WebComponent { 491 controller: web_webview.WebviewController = new web_webview.WebviewController(); 492 updataContent: string = '<body><div><image src=file:///data/storage/el1/bundle/entry/resources/rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>' 493 494 build() { 495 Column() { 496 Button('loadData') 497 .onClick(() => { 498 try { 499 this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " "); 500 } catch (error) { 501 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 502 } 503 }) 504 Web({ src: 'www.example.com', controller: this.controller }) 505 } 506 } 507} 508``` 509 510### accessForward 511 512accessForward(): boolean 513 514当前页面是否可前进,即当前页面是否有前进历史记录。 515 516**系统能力:** SystemCapability.Web.Webview.Core 517 518**返回值:** 519 520| 类型 | 说明 | 521| ------- | --------------------------------- | 522| boolean | 可以前进返回true,否则返回false。 | 523 524**错误码:** 525 526以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 527 528| 错误码ID | 错误信息 | 529| -------- | ------------------------------------------------------------ | 530| 17100001 | Init error. The WebviewController must be associated with a Web component. | 531 532**示例:** 533 534```ts 535// xxx.ets 536import web_webview from '@ohos.web.webview' 537 538@Entry 539@Component 540struct WebComponent { 541 controller: web_webview.WebviewController = new web_webview.WebviewController(); 542 543 build() { 544 Column() { 545 Button('accessForward') 546 .onClick(() => { 547 try { 548 let result = this.controller.accessForward(); 549 console.log('result:' + result); 550 } catch (error) { 551 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 552 } 553 }) 554 Web({ src: 'www.example.com', controller: this.controller }) 555 } 556 } 557} 558``` 559 560### forward 561 562forward(): void 563 564按照历史栈,前进一个页面。一般结合accessForward一起使用。 565 566**系统能力:** SystemCapability.Web.Webview.Core 567 568**错误码:** 569 570以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 571 572| 错误码ID | 错误信息 | 573| -------- | ------------------------------------------------------------ | 574| 17100001 | Init error. The WebviewController must be associated with a Web component. | 575 576**示例:** 577 578```ts 579// xxx.ets 580import web_webview from '@ohos.web.webview' 581 582@Entry 583@Component 584struct WebComponent { 585 controller: web_webview.WebviewController = new web_webview.WebviewController(); 586 587 build() { 588 Column() { 589 Button('forward') 590 .onClick(() => { 591 try { 592 this.controller.forward(); 593 } catch (error) { 594 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 595 } 596 }) 597 Web({ src: 'www.example.com', controller: this.controller }) 598 } 599 } 600} 601``` 602 603### accessBackward 604 605accessBackward(): boolean 606 607当前页面是否可后退,即当前页面是否有返回历史记录。 608 609**系统能力:** SystemCapability.Web.Webview.Core 610 611**返回值:** 612 613| 类型 | 说明 | 614| ------- | -------------------------------- | 615| boolean | 可以后退返回true,否则返回false。 | 616 617**错误码:** 618 619以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 620 621| 错误码ID | 错误信息 | 622| -------- | ------------------------------------------------------------ | 623| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 624 625**示例:** 626 627```ts 628// xxx.ets 629import web_webview from '@ohos.web.webview' 630 631@Entry 632@Component 633struct WebComponent { 634 controller: web_webview.WebviewController = new web_webview.WebviewController(); 635 636 build() { 637 Column() { 638 Button('accessBackward') 639 .onClick(() => { 640 try { 641 let result = this.controller.accessBackward(); 642 console.log('result:' + result); 643 } catch (error) { 644 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 645 } 646 }) 647 Web({ src: 'www.example.com', controller: this.controller }) 648 } 649 } 650} 651``` 652 653### backward 654 655backward(): void 656 657按照历史栈,后退一个页面。一般结合accessBackward一起使用。 658 659**系统能力:** SystemCapability.Web.Webview.Core 660 661**错误码:** 662 663以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 664 665| 错误码ID | 错误信息 | 666| -------- | ------------------------------------------------------------ | 667| 17100001 | Init error. The WebviewController must be associated with a Web component. | 668 669**示例:** 670 671```ts 672// xxx.ets 673import web_webview from '@ohos.web.webview' 674 675@Entry 676@Component 677struct WebComponent { 678 controller: web_webview.WebviewController = new web_webview.WebviewController(); 679 680 build() { 681 Column() { 682 Button('backward') 683 .onClick(() => { 684 try { 685 this.controller.backward(); 686 } catch (error) { 687 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 688 } 689 }) 690 Web({ src: 'www.example.com', controller: this.controller }) 691 } 692 } 693} 694``` 695 696### onActive 697 698onActive(): void 699 700调用此接口通知Web组件进入前台激活状态。 701 702**系统能力:** SystemCapability.Web.Webview.Core 703 704**错误码:** 705 706以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 707 708| 错误码ID | 错误信息 | 709| -------- | ------------------------------------------------------------ | 710| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 711 712**示例:** 713 714```ts 715// xxx.ets 716import web_webview from '@ohos.web.webview' 717 718@Entry 719@Component 720struct WebComponent { 721 controller: web_webview.WebviewController = new web_webview.WebviewController(); 722 723 build() { 724 Column() { 725 Button('onActive') 726 .onClick(() => { 727 try { 728 this.controller.onActive(); 729 } catch (error) { 730 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 731 } 732 }) 733 Web({ src: 'www.example.com', controller: this.controller }) 734 } 735 } 736} 737``` 738 739### onInactive 740 741onInactive(): void 742 743调用此接口通知Web组件进入未激活状态。 744 745**系统能力:** SystemCapability.Web.Webview.Core 746 747**错误码:** 748 749以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 750 751| 错误码ID | 错误信息 | 752| -------- | ------------------------------------------------------------ | 753| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 754 755**示例:** 756 757```ts 758// xxx.ets 759import web_webview from '@ohos.web.webview' 760 761@Entry 762@Component 763struct WebComponent { 764 controller: web_webview.WebviewController = new web_webview.WebviewController(); 765 766 build() { 767 Column() { 768 Button('onInactive') 769 .onClick(() => { 770 try { 771 this.controller.onInactive(); 772 } catch (error) { 773 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 774 } 775 }) 776 Web({ src: 'www.example.com', controller: this.controller }) 777 } 778 } 779} 780``` 781 782### refresh 783refresh(): void 784 785调用此接口通知Web组件刷新网页。 786 787**系统能力:** SystemCapability.Web.Webview.Core 788 789**错误码:** 790 791以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 792 793| 错误码ID | 错误信息 | 794| -------- | ------------------------------------------------------------ | 795| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 796 797**示例:** 798 799```ts 800// xxx.ets 801import web_webview from '@ohos.web.webview' 802 803@Entry 804@Component 805struct WebComponent { 806 controller: web_webview.WebviewController = new web_webview.WebviewController(); 807 808 build() { 809 Column() { 810 Button('refresh') 811 .onClick(() => { 812 try { 813 this.controller.refresh(); 814 } catch (error) { 815 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 816 } 817 }) 818 Web({ src: 'www.example.com', controller: this.controller }) 819 } 820 } 821} 822``` 823 824### accessStep 825 826accessStep(step: number): boolean 827 828当前页面是否可前进或者后退给定的step步。 829 830**系统能力:** SystemCapability.Web.Webview.Core 831 832**参数:** 833 834| 参数名 | 类型 | 必填 | 说明 | 835| ------ | -------- | ---- | ------------------------------------------ | 836| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 837 838**返回值:** 839 840| 类型 | 说明 | 841| ------- | ------------------ | 842| boolean | 页面是否前进或后退 | 843 844**错误码:** 845 846以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 847 848| 错误码ID | 错误信息 | 849| -------- | ------------------------------------------------------------ | 850| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 851 852**示例:** 853 854```ts 855// xxx.ets 856import web_webview from '@ohos.web.webview' 857 858@Entry 859@Component 860struct WebComponent { 861 controller: web_webview.WebviewController = new web_webview.WebviewController(); 862 @State steps: number = 2; 863 864 build() { 865 Column() { 866 Button('accessStep') 867 .onClick(() => { 868 try { 869 let result = this.controller.accessStep(this.steps); 870 console.log('result:' + result); 871 } catch (error) { 872 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 873 } 874 }) 875 Web({ src: 'www.example.com', controller: this.controller }) 876 } 877 } 878} 879``` 880 881### clearHistory 882 883clearHistory(): void 884 885删除所有前进后退记录。 886 887**系统能力:** SystemCapability.Web.Webview.Core 888 889**错误码:** 890 891以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 892 893| 错误码ID | 错误信息 | 894| -------- | ------------------------------------------------------------ | 895| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 896 897**示例:** 898 899```ts 900// xxx.ets 901import web_webview from '@ohos.web.webview' 902 903@Entry 904@Component 905struct WebComponent { 906 controller: web_webview.WebviewController = new web_webview.WebviewController(); 907 908 build() { 909 Column() { 910 Button('clearHistory') 911 .onClick(() => { 912 try { 913 this.controller.clearHistory(); 914 } catch (error) { 915 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 916 } 917 }) 918 Web({ src: 'www.example.com', controller: this.controller }) 919 } 920 } 921} 922``` 923 924### getHitTest 925 926getHitTest(): WebHitTestType 927 928获取当前被点击区域的元素类型。 929 930**系统能力:** SystemCapability.Web.Webview.Core 931 932**返回值:** 933 934| 类型 | 说明 | 935| ------------------------------------------------------------ | ---------------------- | 936| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 937 938**错误码:** 939 940以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 941 942| 错误码ID | 错误信息 | 943| -------- | ------------------------------------------------------------ | 944| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 945 946**示例:** 947 948```ts 949// xxx.ets 950import web_webview from '@ohos.web.webview' 951 952@Entry 953@Component 954struct WebComponent { 955 controller: web_webview.WebviewController = new web_webview.WebviewController(); 956 957 build() { 958 Column() { 959 Button('getHitTest') 960 .onClick(() => { 961 try { 962 let hitTestType = this.controller.getHitTest(); 963 console.log("hitTestType: " + hitTestType); 964 } catch (error) { 965 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 966 } 967 }) 968 Web({ src: 'www.example.com', controller: this.controller }) 969 } 970 } 971} 972``` 973 974### registerJavaScriptProxy 975 976registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>): void 977 978注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 979 980**系统能力:** SystemCapability.Web.Webview.Core 981 982**参数:** 983 984| 参数名 | 类型 | 必填 | 说明 | 985| ---------- | -------------- | ---- | ------------------------------------------------------------ | 986| object | object | 是 | 参与注册的应用侧JavaScript对象。只能声明方法,不能声明属性 。其中方法的参数和返回类型只能为string,number,boolean | 987| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 988| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的方法。 | 989 990**错误码:** 991 992以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 993 994| 错误码ID | 错误信息 | 995| -------- | ------------------------------------------------------------ | 996| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 997 998**示例:** 999 1000```ts 1001// xxx.ets 1002import web_webview from '@ohos.web.webview' 1003 1004@Entry 1005@Component 1006struct Index { 1007 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1008 testObj = { 1009 test: (data) => { 1010 return "ArkUI Web Component"; 1011 }, 1012 toString: () => { 1013 console.log('Web Component toString'); 1014 } 1015 } 1016 1017 build() { 1018 Column() { 1019 Button('refresh') 1020 .onClick(() => { 1021 try { 1022 this.controller.refresh(); 1023 } catch (error) { 1024 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1025 } 1026 }) 1027 Button('Register JavaScript To Window') 1028 .onClick(() => { 1029 try { 1030 this.controller.registerJavaScriptProxy(this.testObj, "objName", ["test", "toString"]); 1031 } catch (error) { 1032 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1033 } 1034 }) 1035 Web({ src: $rawfile('index.html'), controller: this.controller }) 1036 .javaScriptAccess(true) 1037 } 1038 } 1039} 1040``` 1041 1042### runJavaScript 1043 1044runJavaScript(script: string, callback : AsyncCallback\<string>): void 1045 1046异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1047 1048**系统能力:** SystemCapability.Web.Webview.Core 1049 1050**参数:** 1051 1052| 参数名 | 类型 | 必填 | 说明 | 1053| -------- | -------------------- | ---- | ---------------------------- | 1054| script | string | 是 | JavaScript脚本。 | 1055| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1056 1057**错误码:** 1058 1059以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1060 1061| 错误码ID | 错误信息 | 1062| -------- | ------------------------------------------------------------ | 1063| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1064 1065**示例:** 1066 1067```ts 1068import web_webview from '@ohos.web.webview' 1069 1070@Entry 1071@Component 1072struct WebComponent { 1073 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1074 @State webResult: string = '' 1075 1076 build() { 1077 Column() { 1078 Text(this.webResult).fontSize(20) 1079 Web({ src: $rawfile('index.html'), controller: this.controller }) 1080 .javaScriptAccess(true) 1081 .onPageEnd(e => { 1082 try { 1083 this.controller.runJavaScript( 1084 'test()', 1085 (error, result) => { 1086 if (error) { 1087 console.info(`run JavaScript error: ` + JSON.stringify(error)) 1088 return; 1089 } 1090 if (result) { 1091 this.webResult = result 1092 console.info(`The test() return value is: ${result}`) 1093 } 1094 }); 1095 console.info('url: ', e.url); 1096 } catch (error) { 1097 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1098 } 1099 }) 1100 } 1101 } 1102} 1103``` 1104 1105### runJavaScript 1106 1107runJavaScript(script: string): Promise\<string> 1108 1109异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1110 1111**系统能力:** SystemCapability.Web.Webview.Core 1112 1113**参数:** 1114 1115| 参数名 | 类型 | 必填 | 说明 | 1116| ------ | -------- | ---- | ---------------- | 1117| script | string | 是 | JavaScript脚本。 | 1118 1119**返回值:** 1120 1121| 类型 | 说明 | 1122| --------------- | --------------------------------------------------- | 1123| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1124 1125**错误码:** 1126 1127以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1128 1129| 错误码ID | 错误信息 | 1130| -------- | ------------------------------------------------------------ | 1131| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1132 1133**示例:** 1134 1135```ts 1136// xxx.ets 1137import web_webview from '@ohos.web.webview' 1138 1139@Entry 1140@Component 1141struct WebComponent { 1142 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1143 @State webResult: string = ''; 1144 1145 build() { 1146 Column() { 1147 Text(this.webResult).fontSize(20) 1148 Web({ src: $rawfile('index.html'), controller: this.controller }) 1149 .javaScriptAccess(true) 1150 .onPageEnd(e => { 1151 try { 1152 this.controller.runJavaScript('test()') 1153 .then(function (result) { 1154 console.log('result: ' + result); 1155 }) 1156 .catch(function (error) { 1157 console.error("error: " + error); 1158 }) 1159 console.info('url: ', e.url); 1160 } catch (error) { 1161 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1162 } 1163 }) 1164 } 1165 } 1166} 1167``` 1168 1169### deleteJavaScriptRegister 1170 1171deleteJavaScriptRegister(name: string): void 1172 1173删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后立即生效,无须调用[refresh](#refresh)接口。 1174 1175**系统能力:** SystemCapability.Web.Webview.Core 1176 1177**参数:** 1178 1179| 参数名 | 类型 | 必填 | 说明 | 1180| ------ | -------- | ---- | ---- | 1181| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 1182 1183**错误码:** 1184 1185以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1186 1187| 错误码ID | 错误信息 | 1188| -------- | ------------------------------------------------------------ | 1189| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1190| 17100008 | Cannot delete JavaScriptProxy. | 1191 1192**示例:** 1193 1194```ts 1195// xxx.ets 1196import web_webview from '@ohos.web.webview' 1197 1198@Entry 1199@Component 1200struct WebComponent { 1201 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1202 @State name: string = 'Object'; 1203 1204 build() { 1205 Column() { 1206 Button('deleteJavaScriptRegister') 1207 .onClick(() => { 1208 try { 1209 this.controller.deleteJavaScriptRegister(this.name); 1210 } catch (error) { 1211 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1212 } 1213 }) 1214 Web({ src: 'www.example.com', controller: this.controller }) 1215 } 1216 } 1217} 1218``` 1219 1220### zoom 1221 1222zoom(factor: number): void 1223 1224调整当前网页的缩放比例。 1225 1226**系统能力:** SystemCapability.Web.Webview.Core 1227 1228**参数:** 1229 1230| 参数名 | 类型 | 必填 | 说明 | 1231| ------ | -------- | ---- | ------------------------------------------------------------ | 1232| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,正值为放大,负值为缩小。 | 1233 1234**错误码:** 1235 1236以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1237 1238| 错误码ID | 错误信息 | 1239| -------- | ------------------------------------------------------------ | 1240| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1241| 17100004 | Function not enable. | 1242 1243**示例:** 1244 1245```ts 1246// xxx.ets 1247import web_webview from '@ohos.web.webview' 1248 1249@Entry 1250@Component 1251struct WebComponent { 1252 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1253 @State factor: number = 1; 1254 1255 build() { 1256 Column() { 1257 Button('zoom') 1258 .onClick(() => { 1259 try { 1260 this.controller.zoom(this.factor); 1261 } catch (error) { 1262 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1263 } 1264 }) 1265 Web({ src: 'www.example.com', controller: this.controller }) 1266 } 1267 } 1268} 1269``` 1270 1271### searchAllAsync 1272 1273searchAllAsync(searchString: string): void 1274 1275异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](../arkui-ts/ts-basic-components-web.md#onsearchresultreceive9)异步返回。 1276 1277**系统能力:** SystemCapability.Web.Webview.Core 1278 1279**参数:** 1280 1281| 参数名 | 类型 | 必填 | 说明 | 1282| ------------ | -------- | ---- | -------------- | 1283| searchString | string | 是 | 查找的关键字。 | 1284 1285**错误码:** 1286 1287以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1288 1289| 错误码ID | 错误信息 | 1290| -------- | ------------------------------------------------------------ | 1291| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1292 1293**示例:** 1294 1295```ts 1296// xxx.ets 1297import web_webview from '@ohos.web.webview' 1298 1299@Entry 1300@Component 1301struct WebComponent { 1302 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1303 @State searchString: string = "xxx"; 1304 1305 build() { 1306 Column() { 1307 Button('searchString') 1308 .onClick(() => { 1309 try { 1310 this.controller.searchAllAsync(this.searchString); 1311 } catch (error) { 1312 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1313 } 1314 }) 1315 Web({ src: 'www.example.com', controller: this.controller }) 1316 .onSearchResultReceive(ret => { 1317 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 1318 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 1319 }) 1320 } 1321 } 1322} 1323``` 1324 1325### clearMatches 1326 1327clearMatches(): void 1328 1329清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 1330 1331**系统能力:** SystemCapability.Web.Webview.Core 1332 1333**错误码:** 1334 1335以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1336 1337| 错误码ID | 错误信息 | 1338| -------- | ------------------------------------------------------------ | 1339| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1340 1341**示例:** 1342 1343```ts 1344// xxx.ets 1345import web_webview from '@ohos.web.webview' 1346 1347@Entry 1348@Component 1349struct WebComponent { 1350 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1351 1352 build() { 1353 Column() { 1354 Button('clearMatches') 1355 .onClick(() => { 1356 try { 1357 this.controller.clearMatches(); 1358 } catch (error) { 1359 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1360 } 1361 }) 1362 Web({ src: 'www.example.com', controller: this.controller }) 1363 } 1364 } 1365} 1366``` 1367 1368### searchNext 1369 1370searchNext(forward: boolean): void 1371 1372滚动到下一个匹配的查找结果并高亮。 1373 1374**系统能力:** SystemCapability.Web.Webview.Core 1375 1376**参数:** 1377 1378| 参数名 | 类型 | 必填 | 说明 | 1379| ------- | -------- | ---- | ---------------------- | 1380| forward | boolean | 是 | 从前向后或者逆向查找。 | 1381 1382**错误码:** 1383 1384以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1385 1386| 错误码ID | 错误信息 | 1387| -------- | ------------------------------------------------------------ | 1388| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1389 1390**示例:** 1391 1392```ts 1393// xxx.ets 1394import web_webview from '@ohos.web.webview' 1395 1396@Entry 1397@Component 1398struct WebComponent { 1399 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1400 1401 build() { 1402 Column() { 1403 Button('searchNext') 1404 .onClick(() => { 1405 try { 1406 this.controller.searchNext(true); 1407 } catch (error) { 1408 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1409 } 1410 }) 1411 Web({ src: 'www.example.com', controller: this.controller }) 1412 } 1413 } 1414} 1415``` 1416 1417### clearSslCache 1418 1419clearSslCache(): void 1420 1421清除Web组件记录的SSL证书错误事件对应的用户操作行为。 1422 1423**系统能力:** SystemCapability.Web.Webview.Core 1424 1425**错误码:** 1426 1427以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1428 1429| 错误码ID | 错误信息 | 1430| -------- | ------------------------------------------------------------ | 1431| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1432 1433**示例:** 1434 1435```ts 1436// xxx.ets 1437import web_webview from '@ohos.web.webview' 1438 1439@Entry 1440@Component 1441struct WebComponent { 1442 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1443 1444 build() { 1445 Column() { 1446 Button('clearSslCache') 1447 .onClick(() => { 1448 try { 1449 this.controller.clearSslCache(); 1450 } catch (error) { 1451 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1452 } 1453 }) 1454 Web({ src: 'www.example.com', controller: this.controller }) 1455 } 1456 } 1457} 1458``` 1459 1460### clearClientAuthenticationCache 1461 1462clearClientAuthenticationCache(): void 1463 1464清除Web组件记录的客户端证书请求事件对应的用户操作行为。 1465 1466**系统能力:** SystemCapability.Web.Webview.Core 1467 1468**错误码:** 1469 1470以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1471 1472| 错误码ID | 错误信息 | 1473| -------- | ------------------------------------------------------------ | 1474| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1475 1476**示例:** 1477 1478```ts 1479// xxx.ets 1480import web_webview from '@ohos.web.webview' 1481 1482@Entry 1483@Component 1484struct WebComponent { 1485 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1486 1487 build() { 1488 Column() { 1489 Button('clearClientAuthenticationCache') 1490 .onClick(() => { 1491 try { 1492 this.controller.clearClientAuthenticationCache(); 1493 } catch (error) { 1494 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 1495 } 1496 }) 1497 Web({ src: 'www.example.com', controller: this.controller }) 1498 } 1499 } 1500} 1501``` 1502 1503### createWebMessagePorts 1504 1505 createWebMessagePorts(): Array\<WebMessagePort> 1506 1507创建Web消息端口。 1508 1509**系统能力:** SystemCapability.Web.Webview.Core 1510 1511**返回值:** 1512 1513| 类型 | 说明 | 1514| ---------------------- | ----------------- | 1515| Array\<WebMessagePort> | web消息端口列表。 | 1516 1517**错误码:** 1518 1519以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1520 1521| 错误码ID | 错误信息 | 1522| -------- | ------------------------------------------------------------ | 1523| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1524 1525**示例:** 1526 1527 ```ts 1528// xxx.ets 1529import web_webview from '@ohos.web.webview' 1530 1531@Entry 1532@Component 1533struct WebComponent { 1534 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1535 ports: web_webview.WebMessagePort[]; 1536 1537 build() { 1538 Column() { 1539 Button('createWebMessagePorts') 1540 .onClick(() => { 1541 try { 1542 this.ports = this.controller.createWebMessagePorts(); 1543 console.log("createWebMessagePorts size:" + this.ports.length) 1544 } catch (error) { 1545 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1546 } 1547 }) 1548 Web({ src: 'www.example.com', controller: this.controller }) 1549 } 1550 } 1551} 1552 ``` 1553 1554### postMessage 1555 1556postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 1557 1558发送Web消息端口到HTML5。 1559 1560**系统能力:** SystemCapability.Web.Webview.Core 1561 1562**参数:** 1563 1564| 参数名 | 类型 | 必填 | 说明 | 1565| ------ | ---------------------- | ---- | :------------------------------- | 1566| name | string | 是 | 要发送的消息,包含数据和消息端口。 | 1567| ports | Array\<WebMessagePort> | 是 | 接收该消息的URI。 | 1568| uri | string | 是 | 接收该消息的URI。 | 1569 1570**错误码:** 1571 1572以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1573 1574| 错误码ID | 错误信息 | 1575| -------- | ------------------------------------------------------------ | 1576| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1577 1578**示例:** 1579 1580```ts 1581// xxx.ets 1582import web_webview from '@ohos.web.webview'; 1583 1584@Entry 1585@Component 1586struct WebComponent { 1587 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1588 ports: web_webview.WebMessagePort[]; 1589 @State sendFromEts: string = 'Send this message from ets to HTML'; 1590 @State receivedFromHtml: string = 'Display received message send from HTML'; 1591 1592 build() { 1593 Column() { 1594 // 展示接收到的来自HTML的内容 1595 Text(this.receivedFromHtml) 1596 // 输入框的内容发送到html 1597 TextInput({placeholder: 'Send this message from ets to HTML'}) 1598 .onChange((value: string) => { 1599 this.sendFromEts = value; 1600 }) 1601 1602 Button('postMessage') 1603 .onClick(() => { 1604 try { 1605 // 1、创建两个消息端口。 1606 this.ports = this.controller.createWebMessagePorts(); 1607 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 1608 this.ports[1].onMessageEvent((result: web_webview.WebMessage) => { 1609 let msg = 'Got msg from HTML:'; 1610 if (typeof(result) == "string") { 1611 console.log("received string message from html5, string is:" + result); 1612 msg = msg + result; 1613 } else if (typeof(result) == "object") { 1614 if (result instanceof ArrayBuffer) { 1615 console.log("received arraybuffer from html5, length is:" + result.byteLength); 1616 msg = msg + "lenght is " + result.byteLength; 1617 } else { 1618 console.log("not support"); 1619 } 1620 } else { 1621 console.log("not support"); 1622 } 1623 this.receivedFromHtml = msg; 1624 }) 1625 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 1626 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 1627 } catch (error) { 1628 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1629 } 1630 }) 1631 1632 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 1633 Button('SendDataToHTML') 1634 .onClick(() => { 1635 try { 1636 if (this.ports && this.ports[1]) { 1637 this.ports[1].postMessageEvent(this.sendFromEts); 1638 } else { 1639 console.error(`ports is null, Please initialize first`); 1640 } 1641 } catch (error) { 1642 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1643 } 1644 }) 1645 Web({ src: $rawfile('xxx.html'), controller: this.controller }) 1646 } 1647 } 1648} 1649``` 1650 1651```html 1652<!--xxx.html--> 1653<!DOCTYPE html> 1654<html> 1655<head> 1656 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 1657 <title>WebView Message Port Demo</title> 1658</head> 1659 1660 <body> 1661 <h1>WebView Message Port Demo</h1> 1662 <div> 1663 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 1664 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 1665 </div> 1666 <p class="output">display received message send from ets</p> 1667 </body> 1668 <script src="xxx.js"></script> 1669</html> 1670``` 1671 1672```js 1673//xxx.js 1674var h5Port; 1675var output = document.querySelector('.output'); 1676window.addEventListener('message', function (event) { 1677 if (event.data == '__init_port__') { 1678 if (event.ports[0] != null) { 1679 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 1680 h5Port.onmessage = function (event) { 1681 // 2. 接收ets侧发送过来的消息. 1682 var msg = 'Got message from ets:'; 1683 var result = event.data; 1684 if (typeof(result) == "string") { 1685 console.log("received string message from html5, string is:" + result); 1686 msg = msg + result; 1687 } else if (typeof(result) == "object") { 1688 if (result instanceof ArrayBuffer) { 1689 console.log("received arraybuffer from html5, length is:" + result.byteLength); 1690 msg = msg + "lenght is " + result.byteLength; 1691 } else { 1692 console.log("not support"); 1693 } 1694 } else { 1695 console.log("not support"); 1696 } 1697 output.innerHTML = msg; 1698 } 1699 } 1700 } 1701}) 1702 1703// 3. 使用h5Port往ets侧发送消息. 1704function PostMsgToEts(data) { 1705 if (h5Port) { 1706 h5Port.postMessage(data); 1707 } else { 1708 console.error("h5Port is null, Please initialize first"); 1709 } 1710} 1711``` 1712 1713### requestFocus 1714 1715requestFocus(): void 1716 1717使当前web页面获取焦点。 1718 1719**系统能力:** SystemCapability.Web.Webview.Core 1720 1721**错误码:** 1722 1723以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1724 1725| 错误码ID | 错误信息 | 1726| -------- | ------------------------------------------------------------ | 1727| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1728 1729**示例:** 1730 1731```ts 1732// xxx.ets 1733import web_webview from '@ohos.web.webview'; 1734 1735@Entry 1736@Component 1737struct WebComponent { 1738 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1739 1740 build() { 1741 Column() { 1742 Button('requestFocus') 1743 .onClick(() => { 1744 try { 1745 this.controller.requestFocus(); 1746 } catch (error) { 1747 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1748 } 1749 }); 1750 Web({ src: 'www.example.com', controller: this.controller }) 1751 } 1752 } 1753} 1754``` 1755 1756### zoomIn 1757 1758zoomIn(): void 1759 1760调用此接口将当前网页进行放大,比例为20%。 1761 1762**系统能力:** SystemCapability.Web.Webview.Core 1763 1764**错误码:** 1765 1766以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1767 1768| 错误码ID | 错误信息 | 1769| -------- | ------------------------------------------------------------ | 1770| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1771| 17100004 | Function not enable. | 1772 1773**示例:** 1774 1775```ts 1776// xxx.ets 1777import web_webview from '@ohos.web.webview'; 1778 1779@Entry 1780@Component 1781struct WebComponent { 1782 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1783 1784 build() { 1785 Column() { 1786 Button('zoomIn') 1787 .onClick(() => { 1788 try { 1789 this.controller.zoomIn(); 1790 } catch (error) { 1791 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1792 } 1793 }) 1794 Web({ src: 'www.example.com', controller: this.controller }) 1795 } 1796 } 1797} 1798``` 1799 1800### zoomOut 1801 1802zoomOut(): void 1803 1804调用此接口将当前网页进行缩小,比例为20%。 1805 1806**系统能力:** SystemCapability.Web.Webview.Core 1807 1808**错误码:** 1809 1810以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1811 1812| 错误码ID | 错误信息 | 1813| -------- | ------------------------------------------------------------ | 1814| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1815| 17100004 | Function not enable. | 1816 1817**示例:** 1818 1819```ts 1820// xxx.ets 1821import web_webview from '@ohos.web.webview'; 1822 1823@Entry 1824@Component 1825struct WebComponent { 1826 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1827 1828 build() { 1829 Column() { 1830 Button('zoomOut') 1831 .onClick(() => { 1832 try { 1833 this.controller.zoomOut(); 1834 } catch (error) { 1835 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1836 } 1837 }) 1838 Web({ src: 'www.example.com', controller: this.controller }) 1839 } 1840 } 1841} 1842``` 1843 1844### getHitTestValue 1845 1846getHitTestValue(): HitTestValue 1847 1848获取当前被点击区域的元素信息。 1849 1850**系统能力:** SystemCapability.Web.Webview.Core 1851 1852**返回值:** 1853 1854| 类型 | 说明 | 1855| ------------ | -------------------- | 1856| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 1857 1858**错误码:** 1859 1860以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1861 1862| 错误码ID | 错误信息 | 1863| -------- | ------------------------------------------------------------ | 1864| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1865 1866**示例:** 1867 1868```ts 1869// xxx.ets 1870import web_webview from '@ohos.web.webview'; 1871 1872@Entry 1873@Component 1874struct WebComponent { 1875 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1876 1877 build() { 1878 Column() { 1879 Button('getHitTestValue') 1880 .onClick(() => { 1881 try { 1882 let hitValue = this.controller.getHitTestValue(); 1883 console.log("hitType: " + hitValue.type); 1884 console.log("extra: " + hitValue.extra); 1885 } catch (error) { 1886 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1887 } 1888 }) 1889 Web({ src: 'www.example.com', controller: this.controller }) 1890 } 1891 } 1892} 1893``` 1894 1895### getWebId 1896 1897getWebId(): number 1898 1899获取当前Web组件的索引值,用于多个Web组件的管理。 1900 1901**系统能力:** SystemCapability.Web.Webview.Core 1902 1903**返回值:** 1904 1905| 类型 | 说明 | 1906| ------ | --------------------- | 1907| number | 当前Web组件的索引值。 | 1908 1909**错误码:** 1910 1911以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1912 1913| 错误码ID | 错误信息 | 1914| -------- | ------------------------------------------------------------ | 1915| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1916 1917**示例:** 1918 1919```ts 1920// xxx.ets 1921import web_webview from '@ohos.web.webview'; 1922 1923@Entry 1924@Component 1925struct WebComponent { 1926 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1927 1928 build() { 1929 Column() { 1930 Button('getWebId') 1931 .onClick(() => { 1932 try { 1933 let id = this.controller.getWebId(); 1934 console.log("id: " + id); 1935 } catch (error) { 1936 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1937 } 1938 }) 1939 Web({ src: 'www.example.com', controller: this.controller }) 1940 } 1941 } 1942} 1943``` 1944 1945### getUserAgent 1946 1947getUserAgent(): string 1948 1949获取当前默认用户代理。 1950 1951**系统能力:** SystemCapability.Web.Webview.Core 1952 1953**返回值:** 1954 1955| 类型 | 说明 | 1956| ------ | -------------- | 1957| string | 默认用户代理。 | 1958 1959**错误码:** 1960 1961以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1962 1963| 错误码ID | 错误信息 | 1964| -------- | ------------------------------------------------------------ | 1965| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1966 1967**示例:** 1968 1969```ts 1970// xxx.ets 1971import web_webview from '@ohos.web.webview'; 1972 1973@Entry 1974@Component 1975struct WebComponent { 1976 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1977 1978 build() { 1979 Column() { 1980 Button('getUserAgent') 1981 .onClick(() => { 1982 try { 1983 let userAgent = this.controller.getUserAgent(); 1984 console.log("userAgent: " + userAgent); 1985 } catch (error) { 1986 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 1987 } 1988 }) 1989 Web({ src: 'www.example.com', controller: this.controller }) 1990 } 1991 } 1992} 1993``` 1994 1995### getTitle 1996 1997getTitle(): string 1998 1999获取当前网页的标题。 2000 2001**系统能力:** SystemCapability.Web.Webview.Core 2002 2003**返回值:** 2004 2005| 类型 | 说明 | 2006| ------ | -------------------- | 2007| string | 当前网页的标题。 | 2008 2009**错误码:** 2010 2011以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2012 2013| 错误码ID | 错误信息 | 2014| -------- | ------------------------------------------------------------ | 2015| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2016 2017**示例:** 2018 2019```ts 2020// xxx.ets 2021import web_webview from '@ohos.web.webview'; 2022 2023@Entry 2024@Component 2025struct WebComponent { 2026 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2027 2028 build() { 2029 Column() { 2030 Button('getTitle') 2031 .onClick(() => { 2032 try { 2033 let title = this.controller.getTitle(); 2034 console.log("title: " + title); 2035 } catch (error) { 2036 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2037 } 2038 }) 2039 Web({ src: 'www.example.com', controller: this.controller }) 2040 } 2041 } 2042} 2043``` 2044 2045### getPageHeight 2046 2047getPageHeight(): number 2048 2049获取当前网页的页面高度。 2050 2051**系统能力:** SystemCapability.Web.Webview.Core 2052 2053**返回值:** 2054 2055| 类型 | 说明 | 2056| ------ | -------------------- | 2057| number | 当前网页的页面高度。 | 2058 2059**错误码:** 2060 2061以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2062 2063| 错误码ID | 错误信息 | 2064| -------- | ------------------------------------------------------------ | 2065| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2066 2067**示例:** 2068 2069```ts 2070// xxx.ets 2071import web_webview from '@ohos.web.webview'; 2072 2073@Entry 2074@Component 2075struct WebComponent { 2076 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2077 2078 build() { 2079 Column() { 2080 Button('getPageHeight') 2081 .onClick(() => { 2082 try { 2083 let pageHeight = this.controller.getPageHeight(); 2084 console.log("pageHeight : " + pageHeight); 2085 } catch (error) { 2086 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2087 } 2088 }) 2089 Web({ src: 'www.example.com', controller: this.controller }) 2090 } 2091 } 2092} 2093``` 2094 2095### storeWebArchive 2096 2097storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 2098 2099以回调方式异步保存当前页面。 2100 2101**系统能力:** SystemCapability.Web.Webview.Core 2102 2103**参数:** 2104 2105| 参数名 | 类型 | 必填 | 说明 | 2106| -------- | --------------------- | ---- | ------------------------------------------------------------ | 2107| baseName | string | 是 | 文件存储路径,该值不能为空。 | 2108| autoName | boolean | 是 | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 | 2109| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保持网页失败会返回null。 | 2110 2111**错误码:** 2112 2113以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2114 2115| 错误码ID | 错误信息 | 2116| -------- | ------------------------------------------------------------ | 2117| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2118| 17100003 | Invalid resource path or file type. | 2119 2120**示例:** 2121 2122```ts 2123// xxx.ets 2124import web_webview from '@ohos.web.webview' 2125 2126@Entry 2127@Component 2128struct WebComponent { 2129 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2130 2131 build() { 2132 Column() { 2133 Button('saveWebArchive') 2134 .onClick(() => { 2135 try { 2136 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 2137 if (error) { 2138 console.info(`save web archive error: ` + JSON.stringify(error)) 2139 return; 2140 } 2141 if (filename != null) { 2142 console.info(`save web archive success: ${filename}`) 2143 } 2144 }); 2145 } catch (error) { 2146 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2147 } 2148 }) 2149 Web({ src: 'www.example.com', controller: this.controller }) 2150 } 2151 } 2152} 2153``` 2154 2155### storeWebArchive 2156 2157storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 2158 2159以Promise方式异步保存当前页面。 2160 2161**系统能力:** SystemCapability.Web.Webview.Core 2162 2163**参数:** 2164 2165| 参数名 | 类型 | 必填 | 说明 | 2166| -------- | -------- | ---- | ------------------------------------------------------------ | 2167| baseName | string | 是 | 文件存储路径,该值不能为空。 | 2168| autoName | boolean | 是 | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 | 2169 2170**返回值:** 2171 2172| 类型 | 说明 | 2173| --------------- | ----------------------------------------------------- | 2174| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 2175 2176**错误码:** 2177 2178以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2179 2180| 错误码ID | 错误信息 | 2181| -------- | ------------------------------------------------------------ | 2182| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2183| 17100003 | Invalid resource path or file type. | 2184 2185**示例:** 2186 2187```ts 2188// xxx.ets 2189import web_webview from '@ohos.web.webview' 2190 2191@Entry 2192@Component 2193struct WebComponent { 2194 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2195 2196 build() { 2197 Column() { 2198 Button('saveWebArchive') 2199 .onClick(() => { 2200 try { 2201 this.controller.storeWebArchive("/data/storage/el2/base/", true) 2202 .then(filename => { 2203 if (filename != null) { 2204 console.info(`save web archive success: ${filename}`) 2205 } 2206 }) 2207 .catch(error => { 2208 console.log('error: ' + JSON.stringify(error)); 2209 }) 2210 } catch (error) { 2211 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2212 } 2213 }) 2214 Web({ src: 'www.example.com', controller: this.controller }) 2215 } 2216 } 2217} 2218``` 2219 2220### getUrl 2221 2222getUrl(): string 2223 2224获取当前页面的url地址。 2225 2226**系统能力:** SystemCapability.Web.Webview.Core 2227 2228**返回值:** 2229 2230| 类型 | 说明 | 2231| ------ | ------------------- | 2232| string | 当前页面的url地址。 | 2233 2234**错误码:** 2235 2236以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2237 2238| 错误码ID | 错误信息 | 2239| -------- | ------------------------------------------------------------ | 2240| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2241 2242**示例:** 2243 2244```ts 2245// xxx.ets 2246import web_webview from '@ohos.web.webview'; 2247 2248@Entry 2249@Component 2250struct WebComponent { 2251 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2252 2253 build() { 2254 Column() { 2255 Button('getUrl') 2256 .onClick(() => { 2257 try { 2258 let url = this.controller.getUrl(); 2259 console.log("url: " + url); 2260 } catch (error) { 2261 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2262 } 2263 }) 2264 Web({ src: 'www.example.com', controller: this.controller }) 2265 } 2266 } 2267} 2268``` 2269 2270### stop 2271 2272stop(): void 2273 2274停止页面加载。 2275 2276**系统能力:** SystemCapability.Web.Webview.Core 2277 2278**错误码:** 2279 2280以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2281 2282| 错误码ID | 错误信息 | 2283| -------- | ------------------------------------------------------------ | 2284| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2285 2286**示例:** 2287 2288```ts 2289// xxx.ets 2290import web_webview from '@ohos.web.webview'; 2291 2292@Entry 2293@Component 2294struct WebComponent { 2295 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2296 2297 build() { 2298 Column() { 2299 Button('stop') 2300 .onClick(() => { 2301 try { 2302 this.controller.stop(); 2303 } catch (error) { 2304 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2305 } 2306 }); 2307 Web({ src: 'www.example.com', controller: this.controller }) 2308 } 2309 } 2310} 2311``` 2312 2313### backOrForward 2314 2315backOrForward(step: number): void 2316 2317按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 2318 2319**系统能力:** SystemCapability.Web.Webview.Core 2320 2321**参数:** 2322 2323| 参数名 | 类型 | 必填 | 说明 | 2324| ------ | -------- | ---- | ---------------------- | 2325| step | number | 是 | 需要前进或后退的步长。 | 2326 2327**错误码:** 2328 2329以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2330 2331| 错误码ID | 错误信息 | 2332| -------- | ------------------------------------------------------------ | 2333| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2334 2335**示例:** 2336 2337```ts 2338// xxx.ets 2339import web_webview from '@ohos.web.webview'; 2340 2341@Entry 2342@Component 2343struct WebComponent { 2344 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2345 @State step: number = -2; 2346 2347 build() { 2348 Column() { 2349 Button('backOrForward') 2350 .onClick(() => { 2351 try { 2352 this.controller.backOrForward(this.step); 2353 } catch (error) { 2354 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2355 } 2356 }) 2357 Web({ src: 'www.example.com', controller: this.controller }) 2358 } 2359 } 2360} 2361``` 2362 2363### scrollTo 2364 2365scrollTo(x:number, y:number): void 2366 2367将页面滚动到指定的绝对位置。 2368 2369**系统能力:** SystemCapability.Web.Webview.Core 2370 2371**参数:** 2372 2373| 参数名 | 类型 | 必填 | 说明 | 2374| ------ | -------- | ---- | ---------------------- | 2375| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。 | 2376| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。| 2377 2378**错误码:** 2379 2380以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2381 2382| 错误码ID | 错误信息 | 2383| -------- | ------------------------------------------------------------ | 2384| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2385 2386**示例:** 2387 2388```ts 2389// xxx.ets 2390import web_webview from '@ohos.web.webview'; 2391 2392@Entry 2393@Component 2394struct WebComponent { 2395 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2396 2397 build() { 2398 Column() { 2399 Button('scrollTo') 2400 .onClick(() => { 2401 try { 2402 this.controller.scrollTo(50, 50); 2403 } catch (error) { 2404 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2405 } 2406 }) 2407 Web({ src: 'www.example.com', controller: this.controller }) 2408 } 2409 } 2410} 2411``` 2412 2413```html 2414<!--xxx.html--> 2415<!DOCTYPE html> 2416<html> 2417<head> 2418 <title>Demo</title> 2419 <style> 2420 body { 2421 width:3000px; 2422 height:3000px; 2423 padding-right:170px; 2424 padding-left:170px; 2425 border:5px solid blueviolet 2426 } 2427 </style> 2428</head> 2429<body> 2430Scroll Test 2431</body> 2432</html> 2433``` 2434 2435### scrollBy 2436 2437scrollBy(deltaX:number, deltaY:number): void 2438 2439将页面滚动指定的偏移量。 2440 2441**系统能力:** SystemCapability.Web.Webview.Core 2442 2443**参数:** 2444 2445| 参数名 | 类型 | 必填 | 说明 | 2446| ------ | -------- | ---- | ---------------------- | 2447| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 2448| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 2449 2450**错误码:** 2451 2452以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2453 2454| 错误码ID | 错误信息 | 2455| -------- | ------------------------------------------------------------ | 2456| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2457 2458**示例:** 2459 2460```ts 2461// xxx.ets 2462import web_webview from '@ohos.web.webview'; 2463 2464@Entry 2465@Component 2466struct WebComponent { 2467 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2468 2469 build() { 2470 Column() { 2471 Button('scrollBy') 2472 .onClick(() => { 2473 try { 2474 this.controller.scrollBy(50, 50); 2475 } catch (error) { 2476 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2477 } 2478 }) 2479 Web({ src: 'www.example.com', controller: this.controller }) 2480 } 2481 } 2482} 2483``` 2484 2485```html 2486<!--xxx.html--> 2487<!DOCTYPE html> 2488<html> 2489<head> 2490 <title>Demo</title> 2491 <style> 2492 body { 2493 width:3000px; 2494 height:3000px; 2495 padding-right:170px; 2496 padding-left:170px; 2497 border:5px solid blueviolet 2498 } 2499 </style> 2500</head> 2501<body> 2502Scroll Test 2503</body> 2504</html> 2505``` 2506 2507### slideScroll 2508 2509slideScroll(vx:number, vy:number): void 2510 2511按照指定速度模拟对页面的轻扫滚动动作。 2512 2513**系统能力:** SystemCapability.Web.Webview.Core 2514 2515**参数:** 2516 2517| 参数名 | 类型 | 必填 | 说明 | 2518| ------ | -------- | ---- | ---------------------- | 2519| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。 | 2520| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。 | 2521 2522**错误码:** 2523 2524以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2525 2526| 错误码ID | 错误信息 | 2527| -------- | ------------------------------------------------------------ | 2528| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2529 2530**示例:** 2531 2532```ts 2533// xxx.ets 2534import web_webview from '@ohos.web.webview'; 2535 2536@Entry 2537@Component 2538struct WebComponent { 2539 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2540 2541 build() { 2542 Column() { 2543 Button('slideScroll') 2544 .onClick(() => { 2545 try { 2546 this.controller.slideScroll(500, 500); 2547 } catch (error) { 2548 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2549 } 2550 }) 2551 Web({ src: 'www.example.com', controller: this.controller }) 2552 } 2553 } 2554} 2555``` 2556 2557```html 2558<!--xxx.html--> 2559<!DOCTYPE html> 2560<html> 2561<head> 2562 <title>Demo</title> 2563 <style> 2564 body { 2565 width:3000px; 2566 height:3000px; 2567 padding-right:170px; 2568 padding-left:170px; 2569 border:5px solid blueviolet 2570 } 2571 </style> 2572</head> 2573<body> 2574Scroll Test 2575</body> 2576</html> 2577``` 2578 2579### getOriginalUrl 2580 2581getOriginalUrl(): string 2582 2583获取当前页面的原始url地址。 2584 2585**系统能力:** SystemCapability.Web.Webview.Core 2586 2587**返回值:** 2588 2589| 类型 | 说明 | 2590| ------ | ----------------------- | 2591| string | 当前页面的原始url地址。 | 2592 2593**错误码:** 2594 2595以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2596 2597| 错误码ID | 错误信息 | 2598| -------- | ------------------------------------------------------------ | 2599| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2600 2601**示例:** 2602 2603```ts 2604// xxx.ets 2605import web_webview from '@ohos.web.webview'; 2606 2607@Entry 2608@Component 2609struct WebComponent { 2610 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2611 2612 build() { 2613 Column() { 2614 Button('getOrgUrl') 2615 .onClick(() => { 2616 try { 2617 let url = this.controller.getOriginalUrl(); 2618 console.log("original url: " + url); 2619 } catch (error) { 2620 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2621 } 2622 }) 2623 Web({ src: 'www.example.com', controller: this.controller }) 2624 } 2625 } 2626} 2627``` 2628 2629### getFavicon 2630 2631getFavicon(): image.PixelMap 2632 2633获取页面的favicon图标。 2634 2635**系统能力:** SystemCapability.Web.Webview.Core 2636 2637**返回值:** 2638 2639| 类型 | 说明 | 2640| -------------------------------------- | ------------------------------- | 2641| [PixelMap](js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 2642 2643**错误码:** 2644 2645以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2646 2647| 错误码ID | 错误信息 | 2648| -------- | ------------------------------------------------------------ | 2649| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2650 2651**示例:** 2652 2653```ts 2654// xxx.ets 2655import web_webview from '@ohos.web.webview'; 2656import image from "@ohos.multimedia.image" 2657@Entry 2658@Component 2659struct WebComponent { 2660 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2661 @State pixelmap: image.PixelMap = undefined; 2662 2663 build() { 2664 Column() { 2665 Button('getFavicon') 2666 .onClick(() => { 2667 try { 2668 this.pixelmap = this.controller.getFavicon(); 2669 } catch (error) { 2670 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2671 } 2672 }) 2673 Web({ src: 'www.example.com', controller: this.controller }) 2674 } 2675 } 2676} 2677``` 2678 2679### setNetworkAvailable 2680 2681setNetworkAvailable(enable: boolean): void 2682 2683设置JavaScript中的window.navigator.onLine属性。 2684 2685**系统能力:** SystemCapability.Web.Webview.Core 2686 2687**参数:** 2688 2689| 参数名 | 类型 | 必填 | 说明 | 2690| ------ | ------- | ---- | --------------------------------- | 2691| enable | boolean | 是 | 是否使能window.navigator.onLine。 | 2692 2693**错误码:** 2694 2695以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2696 2697| 错误码ID | 错误信息 | 2698| -------- | ------------------------------------------------------------ | 2699| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2700 2701**示例:** 2702 2703```ts 2704// xxx.ets 2705import web_webview from '@ohos.web.webview'; 2706 2707@Entry 2708@Component 2709struct WebComponent { 2710 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2711 2712 build() { 2713 Column() { 2714 Button('setNetworkAvailable') 2715 .onClick(() => { 2716 try { 2717 this.controller.setNetworkAvailable(true); 2718 } catch (error) { 2719 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2720 } 2721 }) 2722 Web({ src: 'www.example.com', controller: this.controller }) 2723 } 2724 } 2725} 2726``` 2727 2728### hasImage 2729 2730hasImage(callback: AsyncCallback\<boolean>): void 2731 2732通过Callback方式异步查找当前页面是否存在图像。 2733 2734**系统能力:** SystemCapability.Web.Webview.Core 2735 2736**参数:** 2737 2738| 参数名 | 类型 | 必填 | 说明 | 2739| -------- | ----------------------- | ---- | -------------------------- | 2740| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。 | 2741 2742**错误码:** 2743 2744以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2745 2746| 错误码ID | 错误信息 | 2747| -------- | ------------------------------------------------------------ | 2748| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2749 2750**示例:** 2751 2752```ts 2753// xxx.ets 2754import web_webview from '@ohos.web.webview'; 2755 2756@Entry 2757@Component 2758struct WebComponent { 2759 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2760 2761 build() { 2762 Column() { 2763 Button('hasImageCb') 2764 .onClick(() => { 2765 try { 2766 this.controller.hasImage((error, data) => { 2767 if (error) { 2768 console.info(`hasImage error: ` + JSON.stringify(error)) 2769 return; 2770 } 2771 console.info("hasImage: " + data); 2772 }); 2773 } catch (error) { 2774 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2775 } 2776 }) 2777 Web({ src: 'www.example.com', controller: this.controller }) 2778 } 2779 } 2780} 2781``` 2782 2783### hasImage 2784 2785hasImage(): Promise\<boolean> 2786 2787通过Promise方式异步查找当前页面是否存在图像。 2788 2789**系统能力:** SystemCapability.Web.Webview.Core 2790 2791**返回值:** 2792 2793| 类型 | 说明 | 2794| ----------------- | --------------------------------------- | 2795| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 | 2796 2797**错误码:** 2798 2799以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2800 2801| 错误码ID | 错误信息 | 2802| -------- | ------------------------------------------------------------ | 2803| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2804 2805**示例:** 2806 2807```ts 2808// xxx.ets 2809import web_webview from '@ohos.web.webview'; 2810 2811@Entry 2812@Component 2813struct WebComponent { 2814 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2815 2816 build() { 2817 Column() { 2818 Button('hasImagePm') 2819 .onClick(() => { 2820 try { 2821 this.controller.hasImage().then((data) => { 2822 console.info('hasImage: ' + data); 2823 }) 2824 .catch(function (error) { 2825 console.error("error: " + error); 2826 }) 2827 } catch (error) { 2828 console.error(`Errorcode: ${error.code}, Message: ${error.message}`); 2829 } 2830 }) 2831 Web({ src: 'www.example.com', controller: this.controller }) 2832 } 2833 } 2834} 2835``` 2836 2837### removeCache 2838 2839removeCache(clearRom: boolean): void 2840 2841清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 2842 2843**系统能力:** SystemCapability.Web.Webview.Core 2844 2845**参数:** 2846 2847| 参数名 | 类型 | 必填 | 说明 | 2848| -------- | ------- | ---- | -------------------------------------------------------- | 2849| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 2850 2851**错误码:** 2852 2853以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2854 2855| 错误码ID | 错误信息 | 2856| -------- | ------------------------------------------------------------ | 2857| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2858 2859**示例:** 2860 2861```ts 2862// xxx.ets 2863import web_webview from '@ohos.web.webview'; 2864 2865@Entry 2866@Component 2867struct WebComponent { 2868 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2869 2870 build() { 2871 Column() { 2872 Button('removeCache') 2873 .onClick(() => { 2874 try { 2875 this.controller.removeCache(false); 2876 } catch (error) { 2877 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2878 } 2879 }) 2880 Web({ src: 'www.example.com', controller: this.controller }) 2881 } 2882 } 2883} 2884``` 2885 2886### pageUp 2887 2888pageUp(top:boolean): void 2889 2890将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 2891 2892**系统能力:** SystemCapability.Web.Webview.Core 2893 2894**参数:** 2895 2896| 参数名 | 类型 | 必填 | 说明 | 2897| ------ | ------- | ---- | ------------------------------------------------------------ | 2898| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 2899 2900**错误码:** 2901 2902以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2903 2904| 错误码ID | 错误信息 | 2905| -------- | ------------------------------------------------------------ | 2906| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2907 2908**示例:** 2909 2910```ts 2911// xxx.ets 2912import web_webview from '@ohos.web.webview'; 2913 2914@Entry 2915@Component 2916struct WebComponent { 2917 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2918 2919 build() { 2920 Column() { 2921 Button('pageUp') 2922 .onClick(() => { 2923 try { 2924 this.controller.pageUp(false); 2925 } catch (error) { 2926 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2927 } 2928 }) 2929 Web({ src: 'www.example.com', controller: this.controller }) 2930 } 2931 } 2932} 2933``` 2934 2935### pageDown 2936 2937pageDown(bottom:boolean): void 2938 2939将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 2940 2941**系统能力:** SystemCapability.Web.Webview.Core 2942 2943**参数:** 2944 2945| 参数名 | 类型 | 必填 | 说明 | 2946| ------ | ------- | ---- | ------------------------------------------------------------ | 2947| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 2948 2949**错误码:** 2950 2951以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2952 2953| 错误码ID | 错误信息 | 2954| -------- | ------------------------------------------------------------ | 2955| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2956 2957**示例:** 2958 2959```ts 2960// xxx.ets 2961import web_webview from '@ohos.web.webview'; 2962 2963@Entry 2964@Component 2965struct WebComponent { 2966 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2967 2968 build() { 2969 Column() { 2970 Button('pageDown') 2971 .onClick(() => { 2972 try { 2973 this.controller.pageDown(false); 2974 } catch (error) { 2975 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 2976 } 2977 }) 2978 Web({ src: 'www.example.com', controller: this.controller }) 2979 } 2980 } 2981} 2982``` 2983 2984### getBackForwardEntries 2985 2986getBackForwardEntries(): BackForwardList 2987 2988获取当前Webview的历史信息列表。 2989 2990**系统能力:** SystemCapability.Web.Webview.Core 2991 2992**返回值:** 2993 2994| 类型 | 说明 | 2995| ----------------------------------- | --------------------------- | 2996| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 2997 2998**错误码:** 2999 3000以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3001 3002| 错误码ID | 错误信息 | 3003| -------- | ------------------------------------------------------------ | 3004| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3005 3006**示例:** 3007 3008```ts 3009// xxx.ets 3010import web_webview from '@ohos.web.webview'; 3011 3012@Entry 3013@Component 3014struct WebComponent { 3015 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3016 3017 build() { 3018 Column() { 3019 Button('getBackForwardEntries') 3020 .onClick(() => { 3021 try { 3022 let list = this.controller.getBackForwardEntries() 3023 } catch (error) { 3024 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3025 } 3026 }) 3027 Web({ src: 'www.example.com', controller: this.controller }) 3028 } 3029 } 3030} 3031``` 3032 3033### serializeWebState 3034 3035serializeWebState(): Uint8Array 3036 3037将当前Webview的页面状态历史记录信息序列化。 3038 3039**系统能力:** SystemCapability.Web.Webview.Core 3040 3041**返回值:** 3042 3043| 类型 | 说明 | 3044| ---------- | --------------------------------------------- | 3045| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 3046 3047**错误码:** 3048 3049以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3050 3051| 错误码ID | 错误信息 | 3052| -------- | ------------------------------------------------------------ | 3053| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3054 3055**示例:** 3056 3057```ts 3058// xxx.ets 3059import web_webview from '@ohos.web.webview'; 3060import fileio from '@ohos.fileio'; 3061 3062@Entry 3063@Component 3064struct WebComponent { 3065 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3066 3067 build() { 3068 Column() { 3069 Button('serializeWebState') 3070 .onClick(() => { 3071 try { 3072 let state = this.controller.serializeWebState(); 3073 let path = globalThis.AbilityContext.cacheDir; 3074 path += '/WebState'; 3075 let fd = fileio.openSync(path, 0o2 | 0o100, 0o666); 3076 fileio.writeSync(fd, state.buffer); 3077 fileio.closeSync(fd); 3078 } catch (error) { 3079 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3080 } 3081 }) 3082 Web({ src: 'www.example.com', controller: this.controller }) 3083 } 3084 } 3085} 3086``` 3087 3088### restoreWebState 3089 3090restoreWebState(state: Uint8Array): void 3091 3092当前Webview从序列化数据中恢复页面状态历史记录。 3093 3094**系统能力:** SystemCapability.Web.Webview.Core 3095 3096**参数:** 3097 3098| 参数名 | 类型 | 必填 | 说明 | 3099| ------ | ---------- | ---- | ---------------------------- | 3100| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 3101 3102**错误码:** 3103 3104以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3105 3106| 错误码ID | 错误信息 | 3107| -------- | ------------------------------------------------------------ | 3108| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3109 3110**示例:** 3111 3112```ts 3113// xxx.ets 3114import web_webview from '@ohos.web.webview'; 3115import fileio from '@ohos.fileio'; 3116 3117@Entry 3118@Component 3119struct WebComponent { 3120 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3121 3122 build() { 3123 Column() { 3124 Button('RestoreWebState') 3125 .onClick(() => { 3126 try { 3127 let path = globalThis.AbilityContext.cacheDir; 3128 path += '/WebState'; 3129 let fd = fileio.openSync(path, 0o002, 0o666); 3130 let stat = fileio.fstatSync(fd); 3131 let size = stat.size; 3132 let buf = new ArrayBuffer(size); 3133 fileio.read(fd, buf, (err, data) => { 3134 if (data) { 3135 this.controller.restoreWebState(new Uint8Array(data.buffer)); 3136 } 3137 fileio.closeSync(fd); 3138 }); 3139 } catch (error) { 3140 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3141 } 3142 }) 3143 Web({ src: 'www.example.com', controller: this.controller }) 3144 } 3145 } 3146} 3147``` 3148 3149### customizeSchemes 3150 3151static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 3152 3153配置Web自定义协议请求的权限。建议在任何Web组件初始化之前进行调用。 3154 3155**系统能力:** SystemCapability.Web.Webview.Core 3156 3157**参数:** 3158 3159| 参数名 | 类型 | 必填 | 说明 | 3160| -------- | ------- | ---- | -------------------------------------- | 3161| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 3162 3163**示例:** 3164 3165```ts 3166// xxx.ets 3167import web_webview from '@ohos.web.webview'; 3168 3169@Entry 3170@Component 3171struct WebComponent { 3172 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3173 responseweb: WebResourceResponse = new WebResourceResponse() 3174 scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true} 3175 scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true} 3176 scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true} 3177 3178 aboutToAppear():void { 3179 try { 3180 web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]) 3181 } catch(error) { 3182 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3183 } 3184 } 3185 3186 build() { 3187 Column() { 3188 Web({ src: 'www.example.com', controller: this.controller }) 3189 .onInterceptRequest((event) => { 3190 console.log('url:' + event.request.getRequestUrl()) 3191 return this.responseweb 3192 }) 3193 } 3194 } 3195} 3196``` 3197 3198## WebCookieManager 3199 3200通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。 3201 3202### getCookie 3203 3204static getCookie(url: string): string 3205 3206获取指定url对应cookie的值。 3207 3208**系统能力:** SystemCapability.Web.Webview.Core 3209 3210**参数:** 3211 3212| 参数名 | 类型 | 必填 | 说明 | 3213| ------ | ------ | ---- | :------------------------ | 3214| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 3215 3216**返回值:** 3217 3218| 类型 | 说明 | 3219| ------ | ------------------------- | 3220| string | 指定url对应的cookie的值。 | 3221 3222**错误码:** 3223 3224以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3225 3226| 错误码ID | 错误信息 | 3227| -------- | ------------------------------------------------------ | 3228| 17100002 | Invalid url. | 3229 3230**示例:** 3231 3232```ts 3233// xxx.ets 3234import web_webview from '@ohos.web.webview' 3235 3236@Entry 3237@Component 3238struct WebComponent { 3239 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3240 3241 build() { 3242 Column() { 3243 Button('getCookie') 3244 .onClick(() => { 3245 try { 3246 let value = web_webview.WebCookieManager.getCookie('https://www.example.com'); 3247 console.log("value: " + value); 3248 } catch (error) { 3249 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3250 } 3251 }) 3252 Web({ src: 'www.example.com', controller: this.controller }) 3253 } 3254 } 3255} 3256``` 3257 3258### setCookie 3259 3260static setCookie(url: string, value: string): void 3261 3262为指定url设置单个cookie的值。 3263 3264**系统能力:** SystemCapability.Web.Webview.Core 3265 3266**参数:** 3267 3268| 参数名 | 类型 | 必填 | 说明 | 3269| ------ | ------ | ---- | :------------------------ | 3270| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 3271| value | string | 是 | 要设置的cookie的值。 | 3272 3273**错误码:** 3274 3275以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3276 3277| 错误码ID | 错误信息 | 3278| -------- | ------------------------------------------------------ | 3279| 17100002 | Invalid url. | 3280| 17100005 | Invalid cookie value. | 3281 3282**示例:** 3283 3284```ts 3285// xxx.ets 3286import web_webview from '@ohos.web.webview' 3287 3288@Entry 3289@Component 3290struct WebComponent { 3291 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3292 3293 build() { 3294 Column() { 3295 Button('setCookie') 3296 .onClick(() => { 3297 try { 3298 web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 3299 } catch (error) { 3300 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3301 } 3302 }) 3303 Web({ src: 'www.example.com', controller: this.controller }) 3304 } 3305 } 3306} 3307``` 3308 3309### saveCookieAsync 3310 3311static saveCookieAsync(callback: AsyncCallback\<void>): void 3312 3313将当前存在内存中的cookie异步保存到磁盘中。 3314 3315**系统能力:** SystemCapability.Web.Webview.Core 3316 3317**参数:** 3318 3319| 参数名 | 类型 | 必填 | 说明 | 3320| -------- | ---------------------- | ---- | :------------------------------------------------- | 3321| callback | AsyncCallback\<void> | 是 | 返回cookie是否成功保存的布尔值作为回调函数的入参。 | 3322 3323 3324**示例:** 3325 3326```ts 3327// xxx.ets 3328import web_webview from '@ohos.web.webview' 3329 3330@Entry 3331@Component 3332struct WebComponent { 3333 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3334 3335 build() { 3336 Column() { 3337 Button('saveCookieAsync') 3338 .onClick(() => { 3339 try { 3340 web_webview.WebCookieManager.saveCookieAsync((error) => { 3341 if (error) { 3342 console.log("error: " + error); 3343 } 3344 }) 3345 } catch (error) { 3346 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3347 } 3348 }) 3349 Web({ src: 'www.example.com', controller: this.controller }) 3350 } 3351 } 3352} 3353``` 3354 3355### saveCookieAsync 3356 3357static saveCookieAsync(): Promise\<void> 3358 3359将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 3360 3361**系统能力:** SystemCapability.Web.Webview.Core 3362 3363**返回值:** 3364 3365| 类型 | 说明 | 3366| ---------------- | ----------------------------------------- | 3367| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 3368 3369**示例:** 3370 3371```ts 3372// xxx.ets 3373import web_webview from '@ohos.web.webview' 3374 3375@Entry 3376@Component 3377struct WebComponent { 3378 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3379 3380 build() { 3381 Column() { 3382 Button('saveCookieAsync') 3383 .onClick(() => { 3384 try { 3385 web_webview.WebCookieManager.saveCookieAsync() 3386 .then(() => { 3387 console.log("saveCookieAsyncCallback success!"); 3388 }) 3389 .catch((error) => { 3390 console.error("error: " + error); 3391 }); 3392 } catch (error) { 3393 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3394 } 3395 }) 3396 Web({ src: 'www.example.com', controller: this.controller }) 3397 } 3398 } 3399} 3400``` 3401 3402### putAcceptCookieEnabled 3403 3404static putAcceptCookieEnabled(accept: boolean): void 3405 3406设置WebCookieManager实例是否拥有发送和接收cookie的权限。 3407 3408**系统能力:** SystemCapability.Web.Webview.Core 3409 3410**参数:** 3411 3412| 参数名 | 类型 | 必填 | 说明 | 3413| ------ | ------- | ---- | :----------------------------------- | 3414| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限。 | 3415 3416**示例:** 3417 3418```ts 3419// xxx.ets 3420import web_webview from '@ohos.web.webview' 3421 3422@Entry 3423@Component 3424struct WebComponent { 3425 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3426 3427 build() { 3428 Column() { 3429 Button('putAcceptCookieEnabled') 3430 .onClick(() => { 3431 try { 3432 web_webview.WebCookieManager.putAcceptCookieEnabled(false); 3433 } catch (error) { 3434 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3435 } 3436 }) 3437 Web({ src: 'www.example.com', controller: this.controller }) 3438 } 3439 } 3440} 3441``` 3442 3443### isCookieAllowed 3444 3445static isCookieAllowed(): boolean 3446 3447获取WebCookieManager实例是否拥有发送和接收cookie的权限。 3448 3449**系统能力:** SystemCapability.Web.Webview.Core 3450 3451**返回值:** 3452 3453| 类型 | 说明 | 3454| ------- | -------------------------------- | 3455| boolean | 是否拥有发送和接收cookie的权限,默认为true。 | 3456 3457**示例:** 3458 3459```ts 3460// xxx.ets 3461import web_webview from '@ohos.web.webview' 3462 3463@Entry 3464@Component 3465struct WebComponent { 3466 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3467 3468 build() { 3469 Column() { 3470 Button('isCookieAllowed') 3471 .onClick(() => { 3472 let result = web_webview.WebCookieManager.isCookieAllowed(); 3473 console.log("result: " + result); 3474 }) 3475 Web({ src: 'www.example.com', controller: this.controller }) 3476 } 3477 } 3478} 3479``` 3480 3481### putAcceptThirdPartyCookieEnabled 3482 3483static putAcceptThirdPartyCookieEnabled(accept: boolean): void 3484 3485设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 3486 3487**系统能力:** SystemCapability.Web.Webview.Core 3488 3489**参数:** 3490 3491| 参数名 | 类型 | 必填 | 说明 | 3492| ------ | ------- | ---- | :----------------------------------------- | 3493| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限。 | 3494 3495**示例:** 3496 3497```ts 3498// xxx.ets 3499import web_webview from '@ohos.web.webview' 3500 3501@Entry 3502@Component 3503struct WebComponent { 3504 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3505 3506 build() { 3507 Column() { 3508 Button('putAcceptThirdPartyCookieEnabled') 3509 .onClick(() => { 3510 try { 3511 web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 3512 } catch (error) { 3513 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3514 } 3515 }) 3516 Web({ src: 'www.example.com', controller: this.controller }) 3517 } 3518 } 3519} 3520``` 3521 3522### isThirdPartyCookieAllowed 3523 3524static isThirdPartyCookieAllowed(): boolean 3525 3526获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 3527 3528**系统能力:** SystemCapability.Web.Webview.Core 3529 3530**返回值:** 3531 3532| 类型 | 说明 | 3533| ------- | -------------------------------------- | 3534| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 | 3535 3536**示例:** 3537 3538```ts 3539// xxx.ets 3540import web_webview from '@ohos.web.webview' 3541 3542@Entry 3543@Component 3544struct WebComponent { 3545 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3546 3547 build() { 3548 Column() { 3549 Button('isThirdPartyCookieAllowed') 3550 .onClick(() => { 3551 let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed(); 3552 console.log("result: " + result); 3553 }) 3554 Web({ src: 'www.example.com', controller: this.controller }) 3555 } 3556 } 3557} 3558``` 3559 3560### existCookie 3561 3562static existCookie(): boolean 3563 3564获取是否存在cookie。 3565 3566**系统能力:** SystemCapability.Web.Webview.Core 3567 3568**返回值:** 3569 3570| 类型 | 说明 | 3571| ------- | -------------------------------------- | 3572| boolean | 是否拥有发送和接收第三方cookie的权限。 | 3573 3574**示例:** 3575 3576```ts 3577// xxx.ets 3578import web_webview from '@ohos.web.webview' 3579 3580@Entry 3581@Component 3582struct WebComponent { 3583 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3584 3585 build() { 3586 Column() { 3587 Button('existCookie') 3588 .onClick(() => { 3589 let result = web_webview.WebCookieManager.existCookie(); 3590 console.log("result: " + result); 3591 }) 3592 Web({ src: 'www.example.com', controller: this.controller }) 3593 } 3594 } 3595} 3596``` 3597 3598### deleteEntireCookie 3599 3600static deleteEntireCookie(): void 3601 3602清除所有cookie。 3603 3604**系统能力:** SystemCapability.Web.Webview.Core 3605 3606**示例:** 3607 3608```ts 3609// xxx.ets 3610import web_webview from '@ohos.web.webview' 3611 3612@Entry 3613@Component 3614struct WebComponent { 3615 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3616 3617 build() { 3618 Column() { 3619 Button('deleteEntireCookie') 3620 .onClick(() => { 3621 web_webview.WebCookieManager.deleteEntireCookie(); 3622 }) 3623 Web({ src: 'www.example.com', controller: this.controller }) 3624 } 3625 } 3626} 3627``` 3628 3629### deleteSessionCookie 3630 3631static deleteSessionCookie(): void 3632 3633清除所有会话cookie。 3634 3635**系统能力:** SystemCapability.Web.Webview.Core 3636 3637**示例:** 3638 3639```ts 3640// xxx.ets 3641import web_webview from '@ohos.web.webview' 3642 3643@Entry 3644@Component 3645struct WebComponent { 3646 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3647 3648 build() { 3649 Column() { 3650 Button('deleteSessionCookie') 3651 .onClick(() => { 3652 web_webview.WebCookieManager.deleteSessionCookie(); 3653 }) 3654 Web({ src: 'www.example.com', controller: this.controller }) 3655 } 3656 } 3657} 3658``` 3659 3660## WebStorage 3661 3662通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 3663 3664### deleteOrigin 3665 3666static deleteOrigin(origin : string): void 3667 3668清除指定源所使用的存储。 3669 3670**系统能力:** SystemCapability.Web.Webview.Core 3671 3672**参数:** 3673 3674| 参数名 | 类型 | 必填 | 说明 | 3675| ------ | ------ | ---- | ------------------------ | 3676| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 3677 3678**错误码:** 3679 3680以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3681 3682| 错误码ID | 错误信息 | 3683| -------- | ------------------------------------------------------ | 3684| 17100011 | Invalid origin. | 3685 3686**示例:** 3687 3688```ts 3689// xxx.ets 3690import web_webview from '@ohos.web.webview'; 3691 3692@Entry 3693@Component 3694struct WebComponent { 3695 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3696 origin: string = "file:///"; 3697 3698 build() { 3699 Column() { 3700 Button('deleteOrigin') 3701 .onClick(() => { 3702 try { 3703 web_webview.WebStorage.deleteOrigin(this.origin); 3704 } catch (error) { 3705 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3706 } 3707 3708 }) 3709 Web({ src: 'www.example.com', controller: this.controller }) 3710 .databaseAccess(true) 3711 } 3712 } 3713} 3714``` 3715 3716### getOrigins 3717 3718static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>) : void 3719 3720以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 3721 3722**系统能力:** SystemCapability.Web.Webview.Core 3723 3724**参数:** 3725 3726| 参数名 | 类型 | 必填 | 说明 | 3727| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 3728| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 3729 3730**错误码:** 3731 3732以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3733 3734| 错误码ID | 错误信息 | 3735| -------- | ------------------------------------------------------ | 3736| 17100012 | Invalid web storage origin. | 3737 3738**示例:** 3739 3740```ts 3741// xxx.ets 3742import web_webview from '@ohos.web.webview'; 3743 3744@Entry 3745@Component 3746struct WebComponent { 3747 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3748 3749 build() { 3750 Column() { 3751 Button('getOrigins') 3752 .onClick(() => { 3753 try { 3754 web_webview.WebStorage.getOrigins((error, origins) => { 3755 if (error) { 3756 console.log('error: ' + JSON.stringify(error)); 3757 return; 3758 } 3759 for (let i = 0; i < origins.length; i++) { 3760 console.log('origin: ' + origins[i].origin); 3761 console.log('usage: ' + origins[i].usage); 3762 console.log('quota: ' + origins[i].quota); 3763 } 3764 }) 3765 } catch (error) { 3766 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3767 } 3768 3769 }) 3770 Web({ src: 'www.example.com', controller: this.controller }) 3771 .databaseAccess(true) 3772 } 3773 } 3774} 3775``` 3776 3777### getOrigins 3778 3779static getOrigins() : Promise\<Array\<WebStorageOrigin>> 3780 3781以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 3782 3783**系统能力:** SystemCapability.Web.Webview.Core 3784 3785**返回值:** 3786 3787| 类型 | 说明 | 3788| -------------------------------- | ------------------------------------------------------------ | 3789| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 3790 3791**错误码:** 3792 3793以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3794 3795| 错误码ID | 错误信息 | 3796| -------- | ------------------------------------------------------ | 3797| 17100012 | Invalid web storage origin. | 3798 3799**示例:** 3800 3801```ts 3802// xxx.ets 3803import web_webview from '@ohos.web.webview'; 3804 3805@Entry 3806@Component 3807struct WebComponent { 3808 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3809 3810 build() { 3811 Column() { 3812 Button('getOrigins') 3813 .onClick(() => { 3814 try { 3815 web_webview.WebStorage.getOrigins() 3816 .then(origins => { 3817 for (let i = 0; i < origins.length; i++) { 3818 console.log('origin: ' + origins[i].origin); 3819 console.log('usage: ' + origins[i].usage); 3820 console.log('quota: ' + origins[i].quota); 3821 } 3822 }) 3823 .catch(e => { 3824 console.log('error: ' + JSON.stringify(e)); 3825 }) 3826 } catch (error) { 3827 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3828 } 3829 3830 }) 3831 Web({ src: 'www.example.com', controller: this.controller }) 3832 .databaseAccess(true) 3833 } 3834 } 3835} 3836``` 3837 3838### getOriginQuota 3839 3840static getOriginQuota(origin : string, callback : AsyncCallback\<number>) : void 3841 3842使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 3843 3844**系统能力:** SystemCapability.Web.Webview.Core 3845 3846**参数:** 3847 3848| 参数名 | 类型 | 必填 | 说明 | 3849| -------- | --------------------- | ---- | ------------------ | 3850| origin | string | 是 | 指定源的字符串索引 | 3851| callback | AsyncCallback\<number> | 是 | 指定源的存储配额 | 3852 3853**错误码:** 3854 3855以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3856 3857| 错误码ID | 错误信息 | 3858| -------- | ------------------------------------------------------ | 3859| 17100011 | Invalid origin. | 3860 3861**示例:** 3862 3863```ts 3864// xxx.ets 3865import web_webview from '@ohos.web.webview'; 3866 3867@Entry 3868@Component 3869struct WebComponent { 3870 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3871 origin: string = "file:///"; 3872 3873 build() { 3874 Column() { 3875 Button('getOriginQuota') 3876 .onClick(() => { 3877 try { 3878 web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 3879 if (error) { 3880 console.log('error: ' + JSON.stringify(error)); 3881 return; 3882 } 3883 console.log('quota: ' + quota); 3884 }) 3885 } catch (error) { 3886 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3887 } 3888 3889 }) 3890 Web({ src: 'www.example.com', controller: this.controller }) 3891 .databaseAccess(true) 3892 } 3893 } 3894} 3895``` 3896 3897### getOriginQuota 3898 3899static getOriginQuota(origin : string) : Promise\<number> 3900 3901以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 3902 3903**系统能力:** SystemCapability.Web.Webview.Core 3904 3905**参数:** 3906 3907| 参数名 | 类型 | 必填 | 说明 | 3908| ------ | ------ | ---- | ------------------ | 3909| origin | string | 是 | 指定源的字符串索引 | 3910 3911**返回值:** 3912 3913| 类型 | 说明 | 3914| --------------- | --------------------------------------- | 3915| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 3916 3917**错误码:** 3918 3919以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3920 3921| 错误码ID | 错误信息 | 3922| -------- | ------------------------------------------------------ | 3923| 17100011 | Invalid origin. | 3924 3925**示例:** 3926 3927```ts 3928// xxx.ets 3929import web_webview from '@ohos.web.webview'; 3930 3931@Entry 3932@Component 3933struct WebComponent { 3934 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3935 origin: string = "file:///"; 3936 3937 build() { 3938 Column() { 3939 Button('getOriginQuota') 3940 .onClick(() => { 3941 try { 3942 web_webview.WebStorage.getOriginQuota(this.origin) 3943 .then(quota => { 3944 console.log('quota: ' + quota); 3945 }) 3946 .catch(e => { 3947 console.log('error: ' + JSON.stringify(e)); 3948 }) 3949 } catch (error) { 3950 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3951 } 3952 3953 }) 3954 Web({ src: 'www.example.com', controller: this.controller }) 3955 .databaseAccess(true) 3956 } 3957 } 3958} 3959``` 3960 3961### getOriginUsage 3962 3963static getOriginUsage(origin : string, callback : AsyncCallback\<number>) : void 3964 3965以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 3966 3967**系统能力:** SystemCapability.Web.Webview.Core 3968 3969**参数:** 3970 3971| 参数名 | 类型 | 必填 | 说明 | 3972| -------- | --------------------- | ---- | ------------------ | 3973| origin | string | 是 | 指定源的字符串索引 | 3974| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 3975 3976**错误码:** 3977 3978以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3979 3980| 错误码ID | 错误信息 | 3981| -------- | ------------------------------------------------------ | 3982| 17100011 | Invalid origin. | 3983 3984**示例:** 3985 3986```ts 3987// xxx.ets 3988import web_webview from '@ohos.web.webview'; 3989 3990@Entry 3991@Component 3992struct WebComponent { 3993 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3994 origin: string = "file:///"; 3995 3996 build() { 3997 Column() { 3998 Button('getOriginUsage') 3999 .onClick(() => { 4000 try { 4001 web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 4002 if (error) { 4003 console.log('error: ' + JSON.stringify(error)); 4004 return; 4005 } 4006 console.log('usage: ' + usage); 4007 }) 4008 } catch (error) { 4009 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4010 } 4011 4012 }) 4013 Web({ src: 'www.example.com', controller: this.controller }) 4014 .databaseAccess(true) 4015 } 4016 } 4017} 4018``` 4019 4020### getOriginUsage 4021 4022static getOriginUsage(origin : string) : Promise\<number> 4023 4024以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 4025 4026**系统能力:** SystemCapability.Web.Webview.Core 4027 4028**参数:** 4029 4030| 参数名 | 类型 | 必填 | 说明 | 4031| ------ | ------ | ---- | ------------------ | 4032| origin | string | 是 | 指定源的字符串索引 | 4033 4034**返回值:** 4035 4036| 类型 | 说明 | 4037| --------------- | ------------------------------------- | 4038| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 4039 4040**错误码:** 4041 4042以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4043 4044| 错误码ID | 错误信息 | 4045| -------- | ----------------------------------------------------- | 4046| 17100011 | Invalid origin. | 4047 4048**示例:** 4049 4050```ts 4051// xxx.ets 4052import web_webview from '@ohos.web.webview'; 4053 4054@Entry 4055@Component 4056struct WebComponent { 4057 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4058 origin: string = "file:///"; 4059 4060 build() { 4061 Column() { 4062 Button('getOriginUsage') 4063 .onClick(() => { 4064 try { 4065 web_webview.WebStorage.getOriginUsage(this.origin) 4066 .then(usage => { 4067 console.log('usage: ' + usage); 4068 }) 4069 .catch(e => { 4070 console.log('error: ' + JSON.stringify(e)); 4071 }) 4072 } catch (error) { 4073 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4074 } 4075 4076 }) 4077 Web({ src: 'www.example.com', controller: this.controller }) 4078 .databaseAccess(true) 4079 } 4080 } 4081} 4082``` 4083 4084### deleteAllData 4085 4086static deleteAllData(): void 4087 4088清除Web SQL数据库当前使用的所有存储。 4089 4090**系统能力:** SystemCapability.Web.Webview.Core 4091 4092**示例:** 4093 4094```ts 4095// xxx.ets 4096import web_webview from '@ohos.web.webview'; 4097 4098@Entry 4099@Component 4100struct WebComponent { 4101 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4102 4103 build() { 4104 Column() { 4105 Button('deleteAllData') 4106 .onClick(() => { 4107 try { 4108 web_webview.WebStorage.deleteAllData(); 4109 } catch (error) { 4110 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4111 } 4112 }) 4113 Web({ src: 'www.example.com', controller: this.controller }) 4114 .databaseAccess(true) 4115 } 4116 } 4117} 4118``` 4119 4120## WebDataBase 4121 4122web组件数据库管理对象。 4123 4124### getHttpAuthCredentials 4125 4126static getHttpAuthCredentials(host: string, realm: string): Array\<string> 4127 4128检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 4129 4130**系统能力:** SystemCapability.Web.Webview.Core 4131 4132**参数:** 4133 4134| 参数名 | 类型 | 必填 | 说明 | 4135| ------ | ------ | ---- | ---------------------------- | 4136| host | string | 是 | HTTP身份验证凭据应用的主机。 | 4137| realm | string | 是 | HTTP身份验证凭据应用的域。 | 4138 4139**返回值:** 4140 4141| 类型 | 说明 | 4142| ----- | -------------------------------------------- | 4143| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 4144 4145**示例:** 4146 4147```ts 4148// xxx.ets 4149import web_webview from '@ohos.web.webview'; 4150 4151@Entry 4152@Component 4153struct WebComponent { 4154 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4155 host: string = "www.spincast.org"; 4156 realm: string = "protected example"; 4157 username_password: string[]; 4158 4159 build() { 4160 Column() { 4161 Button('getHttpAuthCredentials') 4162 .onClick(() => { 4163 try { 4164 this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 4165 console.log('num: ' + this.username_password.length); 4166 } catch (error) { 4167 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4168 } 4169 }) 4170 Web({ src: 'www.example.com', controller: this.controller }) 4171 } 4172 } 4173} 4174``` 4175 4176### saveHttpAuthCredentials 4177 4178static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 4179 4180保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 4181 4182**系统能力:** SystemCapability.Web.Webview.Core 4183 4184**参数:** 4185 4186| 参数名 | 类型 | 必填 | 说明 | 4187| -------- | ------ | ---- | ---------------------------- | 4188| host | string | 是 | HTTP身份验证凭据应用的主机。 | 4189| realm | string | 是 | HTTP身份验证凭据应用的域。 | 4190| username | string | 是 | 用户名。 | 4191| password | string | 是 | 密码。 | 4192 4193**示例:** 4194 4195```ts 4196// xxx.ets 4197import web_webview from '@ohos.web.webview'; 4198 4199@Entry 4200@Component 4201struct WebComponent { 4202 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4203 host: string = "www.spincast.org"; 4204 realm: string = "protected example"; 4205 4206 build() { 4207 Column() { 4208 Button('saveHttpAuthCredentials') 4209 .onClick(() => { 4210 try { 4211 web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 4212 } catch (error) { 4213 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4214 } 4215 }) 4216 Web({ src: 'www.example.com', controller: this.controller }) 4217 } 4218 } 4219} 4220``` 4221 4222### existHttpAuthCredentials 4223 4224static existHttpAuthCredentials(): boolean 4225 4226判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 4227 4228**系统能力:** SystemCapability.Web.Webview.Core 4229 4230**返回值:** 4231 4232| 类型 | 说明 | 4233| ------- | ------------------------------------------------------------ | 4234| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 4235 4236**示例:** 4237 4238```ts 4239// xxx.ets 4240import web_webview from '@ohos.web.webview'; 4241 4242@Entry 4243@Component 4244struct WebComponent { 4245 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4246 4247 build() { 4248 Column() { 4249 Button('existHttpAuthCredentials') 4250 .onClick(() => { 4251 try { 4252 let result = web_webview.WebDataBase.existHttpAuthCredentials(); 4253 } catch (error) { 4254 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4255 } 4256 }) 4257 Web({ src: 'www.example.com', controller: this.controller }) 4258 } 4259 } 4260} 4261``` 4262 4263### deleteHttpAuthCredentials 4264 4265static deleteHttpAuthCredentials(): void 4266 4267清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 4268 4269**系统能力:** SystemCapability.Web.Webview.Core 4270 4271**示例:** 4272 4273```ts 4274// xxx.ets 4275import web_webview from '@ohos.web.webview'; 4276 4277@Entry 4278@Component 4279struct WebComponent { 4280 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4281 4282 build() { 4283 Column() { 4284 Button('deleteHttpAuthCredentials') 4285 .onClick(() => { 4286 try { 4287 web_webview.WebDataBase.deleteHttpAuthCredentials(); 4288 } catch (error) { 4289 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4290 } 4291 }) 4292 Web({ src: 'www.example.com', controller: this.controller }) 4293 } 4294 } 4295} 4296``` 4297 4298## GeolocationPermissions 4299 4300web组件地理位置权限管理对象。 4301 4302### 需要权限 4303 4304访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](./js-apis-geolocation.md)。 4305 4306### allowGeolocation 4307 4308static allowGeolocation(origin: string): void 4309 4310允许指定来源使用地理位置接口。 4311 4312**系统能力:** SystemCapability.Web.Webview.Core 4313 4314**参数:** 4315 4316| 参数名 | 类型 | 必填 | 说明 | 4317| ------ | ------ | ---- | ------------------ | 4318| origin | string | 是 |指定源的字符串索引 | 4319 4320**错误码:** 4321 4322以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4323 4324| 错误码ID | 错误信息 | 4325| -------- | ------------------------------------------------------ | 4326| 17100011 | Invalid origin. | 4327 4328**示例:** 4329 4330```ts 4331// xxx.ets 4332import web_webview from '@ohos.web.webview'; 4333 4334@Entry 4335@Component 4336struct WebComponent { 4337 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4338 origin: string = "file:///"; 4339 4340 build() { 4341 Column() { 4342 Button('allowGeolocation') 4343 .onClick(() => { 4344 try { 4345 web_webview.GeolocationPermissions.allowGeolocation(this.origin); 4346 } catch (error) { 4347 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4348 } 4349 }) 4350 Web({ src: 'www.example.com', controller: this.controller }) 4351 } 4352 } 4353} 4354``` 4355 4356### deleteGeolocation 4357 4358static deleteGeolocation(origin: string): void 4359 4360清除指定来源的地理位置权限状态。 4361 4362**系统能力:** SystemCapability.Web.Webview.Core 4363 4364**参数:** 4365 4366| 参数名 | 类型 | 必填 | 说明 | 4367| ------ | ------ | ---- | ------------------ | 4368| origin | string | 是 | 指定源的字符串索引 | 4369 4370**错误码:** 4371 4372以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4373 4374| 错误码ID | 错误信息 | 4375| -------- | ------------------------------------------------------ | 4376| 17100011 | Invalid origin. | 4377 4378**示例:** 4379 4380```ts 4381// xxx.ets 4382import web_webview from '@ohos.web.webview'; 4383 4384@Entry 4385@Component 4386struct WebComponent { 4387 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4388 origin: string = "file:///"; 4389 4390 build() { 4391 Column() { 4392 Button('deleteGeolocation') 4393 .onClick(() => { 4394 try { 4395 web_webview.GeolocationPermissions.deleteGeolocation(this.origin); 4396 } catch (error) { 4397 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4398 } 4399 }) 4400 Web({ src: 'www.example.com', controller: this.controller }) 4401 } 4402 } 4403} 4404``` 4405 4406### getAccessibleGeolocation 4407 4408static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>): void 4409 4410以回调方式异步获取指定源的地理位置权限状态。 4411 4412**系统能力:** SystemCapability.Web.Webview.Core 4413 4414**参数:** 4415 4416| 参数名 | 类型 | 必填 | 说明 | 4417| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 4418| origin | string | 是 | 指定源的字符串索引 | 4419| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 4420 4421**错误码:** 4422 4423以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4424 4425| 错误码ID | 错误信息 | 4426| -------- | ------------------------------------------------------ | 4427| 17100011 | Invalid origin. | 4428 4429**示例:** 4430 4431```ts 4432// xxx.ets 4433import web_webview from '@ohos.web.webview'; 4434 4435@Entry 4436@Component 4437struct WebComponent { 4438 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4439 origin: string = "file:///"; 4440 4441 build() { 4442 Column() { 4443 Button('getAccessibleGeolocation') 4444 .onClick(() => { 4445 try { 4446 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 4447 if (error) { 4448 console.log('getAccessibleGeolocationAsync error: ' + JSON.stringify(error)); 4449 return; 4450 } 4451 console.log('getAccessibleGeolocationAsync result: ' + result); 4452 }); 4453 } catch (error) { 4454 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4455 } 4456 }) 4457 Web({ src: 'www.example.com', controller: this.controller }) 4458 } 4459 } 4460} 4461``` 4462 4463### getAccessibleGeolocation 4464 4465static getAccessibleGeolocation(origin: string): Promise\<boolean> 4466 4467以Promise方式异步获取指定源的地理位置权限状态。 4468 4469**系统能力:** SystemCapability.Web.Webview.Core 4470 4471**参数:** 4472 4473| 参数名 | 类型 | 必填 | 说明 | 4474| ------ | -------- | ---- | -------------------- | 4475| origin | string | 是 | 指定源的字符串索引。 | 4476 4477**返回值:** 4478 4479| 类型 | 说明 | 4480| ---------------- | ------------------------------------------------------------ | 4481| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 4482 4483**错误码:** 4484 4485以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4486 4487| 错误码ID | 错误信息 | 4488| -------- | ------------------------------------------------------ | 4489| 17100011 | Invalid origin. | 4490 4491**示例:** 4492 4493```ts 4494// xxx.ets 4495import web_webview from '@ohos.web.webview'; 4496 4497@Entry 4498@Component 4499struct WebComponent { 4500 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4501 origin: string = "file:///"; 4502 4503 build() { 4504 Column() { 4505 Button('getAccessibleGeolocation') 4506 .onClick(() => { 4507 try { 4508 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 4509 .then(result => { 4510 console.log('getAccessibleGeolocationPromise result: ' + result); 4511 }).catch(error => { 4512 console.log('getAccessibleGeolocationPromise error: ' + JSON.stringify(error)); 4513 }); 4514 } catch (error) { 4515 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4516 } 4517 }) 4518 Web({ src: 'www.example.com', controller: this.controller }) 4519 } 4520 } 4521} 4522``` 4523 4524### getStoredGeolocation 4525 4526static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>): void 4527 4528以回调方式异步获取已存储地理位置权限状态的所有源信息。 4529 4530**系统能力:** SystemCapability.Web.Webview.Core 4531 4532**参数:** 4533 4534| 参数名 | 类型 | 必填 | 说明 | 4535| -------- | ---------------------------- | ---- | ---------------------------------------- | 4536| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 4537 4538**示例:** 4539 4540```ts 4541// xxx.ets 4542import web_webview from '@ohos.web.webview'; 4543 4544@Entry 4545@Component 4546struct WebComponent { 4547 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4548 4549 build() { 4550 Column() { 4551 Button('getStoredGeolocation') 4552 .onClick(() => { 4553 try { 4554 web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 4555 if (error) { 4556 console.log('getStoredGeolocationAsync error: ' + JSON.stringify(error)); 4557 return; 4558 } 4559 let origins_str: string = origins.join(); 4560 console.log('getStoredGeolocationAsync origins: ' + origins_str); 4561 }); 4562 } catch (error) { 4563 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4564 } 4565 }) 4566 Web({ src: 'www.example.com', controller: this.controller }) 4567 } 4568 } 4569} 4570``` 4571 4572### getStoredGeolocation 4573 4574static getStoredGeolocation(): Promise\<Array\<string>> 4575 4576以Promise方式异步获取已存储地理位置权限状态的所有源信息。 4577 4578**系统能力:** SystemCapability.Web.Webview.Core 4579 4580**返回值:** 4581 4582| 类型 | 说明 | 4583| ---------------------- | --------------------------------------------------------- | 4584| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 4585 4586**示例:** 4587 4588```ts 4589// xxx.ets 4590import web_webview from '@ohos.web.webview'; 4591 4592@Entry 4593@Component 4594struct WebComponent { 4595 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4596 4597 build() { 4598 Column() { 4599 Button('getStoredGeolocation') 4600 .onClick(() => { 4601 try { 4602 web_webview.GeolocationPermissions.getStoredGeolocation() 4603 .then(origins => { 4604 let origins_str: string = origins.join(); 4605 console.log('getStoredGeolocationPromise origins: ' + origins_str); 4606 }).catch(error => { 4607 console.log('getStoredGeolocationPromise error: ' + JSON.stringify(error)); 4608 }); 4609 } catch (error) { 4610 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4611 } 4612 }) 4613 Web({ src: 'www.example.com', controller: this.controller }) 4614 } 4615 } 4616} 4617``` 4618 4619### deleteAllGeolocation 4620 4621static deleteAllGeolocation(): void 4622 4623清除所有来源的地理位置权限状态。 4624 4625**系统能力:** SystemCapability.Web.Webview.Core 4626 4627**示例:** 4628 4629```ts 4630// xxx.ets 4631import web_webview from '@ohos.web.webview'; 4632 4633@Entry 4634@Component 4635struct WebComponent { 4636 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4637 4638 build() { 4639 Column() { 4640 Button('deleteAllGeolocation') 4641 .onClick(() => { 4642 try { 4643 web_webview.GeolocationPermissions.deleteAllGeolocation(); 4644 } catch (error) { 4645 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4646 } 4647 }) 4648 Web({ src: 'www.example.com', controller: this.controller }) 4649 } 4650 } 4651} 4652``` 4653## WebHeader 4654Web组件返回的请求/响应头对象。 4655 4656**系统能力:** SystemCapability.Web.Webview.Core 4657 4658| 名称 | 类型 | 可读 | 可写 |说明 | 4659| ----------- | ------ | -----|------|------------------- | 4660| headerKey | string | 是 | 是 | 请求/响应头的key。 | 4661| headerValue | string | 是 | 是 | 请求/响应头的value。 | 4662 4663## WebHitTestType 4664 4665**系统能力:** SystemCapability.Web.Webview.Core 4666 4667| 名称 | 值 | 说明 | 4668| ------------- | -- |----------------------------------------- | 4669| EditText | 0 |可编辑的区域。 | 4670| Email | 1 |电子邮件地址。 | 4671| HttpAnchor | 2 |超链接,其src为http。 | 4672| HttpAnchorImg | 3 |带有超链接的图片,其中超链接的src为http。 | 4673| Img | 4 |HTML::img标签。 | 4674| Map | 5 |地理地址。 | 4675| Phone | 6 |电话号码。 | 4676| Unknown | 7 |未知内容。 | 4677 4678## HitTestValue 4679 4680提供点击区域的元素信息。示例代码参考getHitTestValue。 4681 4682**系统能力:** SystemCapability.Web.Webview.Core 4683 4684| 名称 | 类型 | 可读 | 可写 | 说明| 4685| ---- | ---- | ---- | ---- |---- | 4686| type | [WebHitTestType](#webhittesttype) | 是 | 否 | 当前被点击区域的元素类型。| 4687| extra | string | 是 | 否 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 4688 4689## WebMessage 4690 4691用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 4692 4693**系统能力:** SystemCapability.Web.Webview.Core 4694 4695| 类型 | 说明 | 4696| -------- | -------------------------------------- | 4697| string | 字符串类型数据。 | 4698| ArrayBuffer | 二进制类型数据。 | 4699 4700## WebStorageOrigin 4701 4702提供Web SQL数据库的使用信息。 4703 4704**系统能力:** SystemCapability.Web.Webview.Core 4705 4706| 名称 | 类型 | 可读 | 可写 | 说明 | 4707| ------ | ------ | ---- | ---- | ---- | 4708| origin | string | 是 | 否 | 指定源的字符串索引。 | 4709| usage | number | 是 | 否 | 指定源的存储量。 | 4710| quota | number | 是 | 否 | 指定源的存储配额。 | 4711 4712## BackForwardList 4713 4714当前Webview的历史信息列表。 4715 4716**系统能力:** SystemCapability.Web.Webview.Core 4717 4718| 名称 | 类型 | 可读 | 可写 | 说明 | 4719| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 4720| currentIndex | number | 是 | 否 | 当前在页面历史列表中的索引。 | 4721| size | number | 是 | 否 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 4722 4723### getItemAtIndex 4724 4725getItemAtIndex(index: number): HistoryItem 4726 4727获取历史列表中指定索引的历史记录项信息。 4728 4729**系统能力:** SystemCapability.Web.Webview.Core 4730 4731**参数:** 4732 4733| 参数名 | 类型 | 必填 | 说明 | 4734| ------ | ------ | ---- | ---------------------- | 4735| index | number | 是 | 指定历史列表中的索引。 | 4736 4737**返回值:** 4738 4739| 类型 | 说明 | 4740| --------------------------- | ------------ | 4741| [HistoryItem](#historyitem) | 历史记录项。 | 4742 4743**示例:** 4744 4745```ts 4746// xxx.ets 4747import web_webview from '@ohos.web.webview'; 4748import image from "@ohos.multimedia.image" 4749 4750@Entry 4751@Component 4752struct WebComponent { 4753 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4754 @State icon: image.PixelMap = undefined; 4755 4756 build() { 4757 Column() { 4758 Button('getBackForwardEntries') 4759 .onClick(() => { 4760 try { 4761 let list = this.controller.getBackForwardEntries(); 4762 let historyItem = list.getItemAtIndex(list.currentIndex); 4763 console.log("HistoryItem: " + JSON.stringify(historyItem)); 4764 this.icon = historyItem.icon; 4765 } catch (error) { 4766 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 4767 } 4768 }) 4769 Web({ src: 'www.example.com', controller: this.controller }) 4770 } 4771 } 4772} 4773``` 4774 4775## HistoryItem 4776 4777页面历史记录项。 4778 4779**系统能力:** SystemCapability.Web.Webview.Core 4780 4781| 名称 | 类型 | 可读 | 可写 | 说明 | 4782| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 4783| icon | [PixelMap](js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 4784| historyUrl | string | 是 | 否 | 历史记录项的url地址。 | 4785| historyRawUrl | string | 是 | 否 | 历史记录项的原始url地址。 | 4786| title | string | 是 | 否 | 历史记录项的标题。 | 4787 4788## WebCustomScheme 4789 4790自定义协议配置。 4791 4792**系统能力:** SystemCapability.Web.Webview.Core 4793 4794| 名称 | 类型 | 可读 | 可写 | 说明 | 4795| -------------- | --------- | ---- | ---- | ---------------------------- | 4796| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-'。 | 4797| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。 | 4798| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。 | 4799