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