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