• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2
3# @ohos.web.webview (Webview)
4
5@ohos.web.webview提供web控制能力,[web](../arkui-ts/ts-basic-components-web.md)组件提供网页显示的能力。
6
7> **说明:**
8>
9> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
10>
11> - 示例效果请以真机运行为准,当前IDE预览器不支持。
12
13## 需要权限
14
15访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[权限申请声明](../../security/accesstoken-guidelines.md)。
16
17## 导入模块
18
19```ts
20import web_webview from '@ohos.web.webview';
21```
22
23## once
24
25once(type: string, callback: Callback\<void\>): void
26
27订阅一次指定类型Web事件的回调。
28
29**系统能力:** SystemCapability.Web.Webview.Core
30
31**参数:**
32
33| 参数名  | 类型              | 必填 | 说明                  |
34| ------- | ---------------- | ---- | -------------------- |
35| type     | string          | 是   | Web事件的类型,目前支持:"webInited"(Web初始化完成)。      |
36| headers | Callback\<void\> | 是   | 所订阅的回调函数。 |
37
38**示例:**
39
40```ts
41// xxx.ets
42import web_webview from '@ohos.web.webview'
43
44web_webview.once("webInited", () => {
45  console.log("setCookie")
46  web_webview.WebCookieManager.setCookie("https://www.example.com", "a=b")
47})
48
49@Entry
50@Component
51struct WebComponent {
52  controller: web_webview.WebviewController = new web_webview.WebviewController();
53
54  build() {
55    Column() {
56      Web({ src: 'www.example.com', controller: this.controller })
57    }
58  }
59}
60```
61
62## WebMessagePort
63
64通过WebMessagePort可以进行消息的发送以及接收。
65
66### postMessageEvent
67
68postMessageEvent(message: WebMessage): void
69
70发送消息。完整示例代码参考[postMessage](#postmessage)。
71
72**系统能力:** SystemCapability.Web.Webview.Core
73
74**参数:**
75
76| 参数名  | 类型   | 必填 | 说明           |
77| ------- | ------ | ---- | :------------- |
78| message | [WebMessage](#webmessage) | 是   | 要发送的消息。 |
79
80**错误码:**
81
82以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
83
84| 错误码ID | 错误信息                              |
85| -------- | ------------------------------------- |
86| 17100010 | Can not post message using this port. |
87
88**示例:**
89
90```ts
91// xxx.ets
92import web_webview from '@ohos.web.webview';
93import business_error from '@ohos.base';
94
95@Entry
96@Component
97struct WebComponent {
98  controller: web_webview.WebviewController = new web_webview.WebviewController();
99  ports: web_webview.WebMessagePort[] = [];
100
101  build() {
102    Column() {
103      Button('postMessageEvent')
104        .onClick(() => {
105          try {
106            this.ports = this.controller.createWebMessagePorts();
107            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
108            this.ports[1].postMessageEvent("post message from ets to html5");
109          } catch (error) {
110            let e: business_error.BusinessError = error as business_error.BusinessError;
111            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
112          }
113        })
114      Web({ src: 'www.example.com', controller: this.controller })
115    }
116  }
117}
118```
119
120### onMessageEvent
121
122onMessageEvent(callback: (result: WebMessage) => void): void
123
124注册回调函数,接收HTML侧发送过来的消息。完整示例代码参考[postMessage](#postmessage)。
125
126**系统能力:** SystemCapability.Web.Webview.Core
127
128**参数:**
129
130| 参数名   | 类型     | 必填 | 说明                 |
131| -------- | -------- | ---- | :------------------- |
132| result | [WebMessage](#webmessage) | 是   | 接收到的消息。 |
133
134**错误码:**
135
136以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
137
138| 错误码ID | 错误信息                                        |
139| -------- | ----------------------------------------------- |
140| 17100006 | Can not register message event using this port. |
141
142**示例:**
143
144```ts
145// xxx.ets
146import web_webview from '@ohos.web.webview';
147import business_error from '@ohos.base';
148
149@Entry
150@Component
151struct WebComponent {
152  controller: web_webview.WebviewController = new web_webview.WebviewController();
153  ports: web_webview.WebMessagePort[] = [];
154
155  build() {
156    Column() {
157      Button('onMessageEvent')
158        .onClick(() => {
159          try {
160            this.ports = this.controller.createWebMessagePorts();
161            this.ports[1].onMessageEvent((msg) => {
162              if (typeof(msg) == "string") {
163                console.log("received string message from html5, string is:" + msg);
164              } else if (typeof(msg) == "object") {
165                if (msg instanceof ArrayBuffer) {
166                  console.log("received arraybuffer from html5, length is:" + msg.byteLength);
167                } else {
168                  console.log("not support");
169                }
170              } else {
171                console.log("not support");
172              }
173            })
174          } catch (error) {
175            let e: business_error.BusinessError = error as business_error.BusinessError;
176            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
177          }
178        })
179      Web({ src: 'www.example.com', controller: this.controller })
180    }
181  }
182}
183```
184
185### isExtentionType<sup>10+</sup>
186
187**系统能力:** SystemCapability.Web.Webview.Core
188
189| 名称         | 类型   | 可读 | 可写 | 说明                                              |
190| ------------ | ------ | ---- | ---- | ------------------------------------------------|
191| isExtentionType | boolean | 是   | 否 | 创建WebMessagePort时是否指定使用扩展增强接口。   |
192
193### postMessageEventExt<sup>10+</sup>
194
195postMessageEventExt(message: WebMessageExt): void
196
197发送消息。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
198
199**系统能力:** SystemCapability.Web.Webview.Core
200
201**参数:**
202
203| 参数名  | 类型   | 必填 | 说明           |
204| ------- | ------ | ---- | :------------- |
205| message | [WebMessageExt](#webmessageext10) | 是   | 要发送的消息。 |
206
207**错误码:**
208
209以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
210
211| 错误码ID | 错误信息                              |
212| -------- | ------------------------------------- |
213| 17100010 | Can not post message using this port. |
214
215### onMessageEventExt<sup>10+</sup>
216
217onMessageEventExt(callback: (result: WebMessageExt) => void): void
218
219注册回调函数,接收HTML5侧发送过来的消息。
220
221**系统能力:** SystemCapability.Web.Webview.Core
222
223**参数:**
224
225| 参数名   | 类型     | 必填 | 说明                 |
226| -------- | -------- | ---- | :------------------- |
227| result | [WebMessageExt](#webmessageext10) | 是   | 接收到的消息。 |
228
229**错误码:**
230
231以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
232
233| 错误码ID | 错误信息                                        |
234| -------- | ----------------------------------------------- |
235| 17100006 | Can not register message event using this port. |
236
237**示例:**
238
239```ts
240// xxx.ets
241import web_webview from '@ohos.web.webview';
242import business_error from '@ohos.base';
243
244// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。
245@Entry
246@Component
247struct WebComponent {
248  controller: web_webview.WebviewController = new web_webview.WebviewController();
249  ports: web_webview.WebMessagePort[] = [];
250  nativePort: web_webview.WebMessagePort | null = null;
251  @State msg1: string = "";
252  @State msg2: string = "";
253  message: web_webview.WebMessageExt = new web_webview.WebMessageExt();
254
255  build() {
256    Column() {
257      Text(this.msg1).fontSize(16)
258      Text(this.msg2).fontSize(16)
259      Button('SendToH5')
260        .onClick(() => {
261          // 使用本侧端口发送消息给HTML5
262          try {
263            console.log("In ArkTS side send true start");
264            if (this.nativePort) {
265              this.message.setString("helloFromEts");
266              this.nativePort.postMessageEventExt(this.message);
267            }
268          }
269          catch (error) {
270            let e: business_error.BusinessError = error as business_error.BusinessError;
271            console.log("In ArkTS side send message catch error:" + e.code + ", msg:" + e.message);
272          }
273        })
274
275      Web({ src: $rawfile('index.html'), controller: this.controller })
276        .onPageEnd(() => {
277          console.log("In ArkTS side message onPageEnd init mesaage channel");
278          // 1. 创建消息端口
279          this.ports = this.controller.createWebMessagePorts(true);
280          // 2. 发送端口1到HTML5
281          this.controller.postMessage("init_web_messageport", [this.ports[1]], "*");
282          // 3. 保存端口0到本地
283          this.nativePort = this.ports[0];
284          // 4. 设置回调函数
285          this.nativePort.onMessageEventExt((result) => {
286            console.log("In ArkTS side got message");
287            try {
288              let type = result.getType();
289              console.log("In ArkTS side getType:" + type);
290              switch (type) {
291                case web_webview.WebMessageType.STRING: {
292                  this.msg1 = "result type:" + typeof (result.getString());
293                  this.msg2 = "result getString:" + ((result.getString()));
294                  break;
295                }
296                case web_webview.WebMessageType.NUMBER: {
297                  this.msg1 = "result type:" + typeof (result.getNumber());
298                  this.msg2 = "result getNumber:" + ((result.getNumber()));
299                  break;
300                }
301                case web_webview.WebMessageType.BOOLEAN: {
302                  this.msg1 = "result type:" + typeof (result.getBoolean());
303                  this.msg2 = "result getBoolean:" + ((result.getBoolean()));
304                  break;
305                }
306                case web_webview.WebMessageType.ARRAY_BUFFER: {
307                  this.msg1 = "result type:" + typeof (result.getArrayBuffer());
308                  this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
309                  break;
310                }
311                case web_webview.WebMessageType.ARRAY: {
312                  this.msg1 = "result type:" + typeof (result.getArray());
313                  this.msg2 = "result getArray:" + result.getArray();
314                  break;
315                }
316                case web_webview.WebMessageType.ERROR: {
317                  this.msg1 = "result type:" + typeof (result.getError());
318                  this.msg2 = "result getError:" + result.getError();
319                  break;
320                }
321                default: {
322                  this.msg1 = "default break, type:" + type;
323                  break;
324                }
325              }
326            }
327            catch (error) {
328              let e: business_error.BusinessError = error as business_error.BusinessError;
329              console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
330            }
331          });
332        })
333    }
334  }
335}
336```
337
338加载的html文件。
339```html
340<!--index.html-->
341<!DOCTYPE html>
342<html lang="en-gb">
343<head>
344    <title>WebView MessagePort Demo</title>
345</head>
346
347<body>
348<h1>Html5 Send and Receive Message</h1>
349<h3 id="msg">Receive string:</h3>
350<h3 id="msg2">Receive arraybuffer:</h3>
351<div style="font-size: 10pt; text-align: center;">
352    <input type="button" value="Send String" onclick="postStringToApp();" /><br/>
353</div>
354</body>
355<script src="index.js"></script>
356</html>
357```
358
359```js
360//index.js
361var h5Port;
362window.addEventListener('message', function(event) {
363    if (event.data == 'init_web_messageport') {
364        if(event.ports[0] != null) {
365            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
366            h5Port.onmessage = function(event) {
367                console.log("hwd In html got message");
368                // 2. 接收ets侧发送过来的消息.
369                var result = event.data;
370                console.log("In html got message, typeof: ", typeof(result));
371                console.log("In html got message, result: ", (result));
372                if (typeof(result) == "string") {
373                    console.log("In html got message, String: ", result);
374                    document.getElementById("msg").innerHTML  =  "String:" + result;
375                } else if (typeof(result) == "number") {
376                  console.log("In html side got message, number: ", result);
377                    document.getElementById("msg").innerHTML = "Number:" + result;
378                } else if (typeof(result) == "boolean") {
379                    console.log("In html side got message, boolean: ", result);
380                    document.getElementById("msg").innerHTML = "Boolean:" + result;
381                } else if (typeof(result) == "object") {
382                    if (result instanceof ArrayBuffer) {
383                        document.getElementById("msg2").innerHTML  =  "ArrayBuffer:" + result.byteLength;
384                        console.log("In html got message, byteLength: ", result.byteLength);
385                    } else if (result instanceof Error) {
386                        console.log("In html error message, err:" + (result));
387                        console.log("In html error message, typeof err:" + typeof(result));
388                        document.getElementById("msg2").innerHTML  =  "Error:" + result.name + ", msg:" + result.message;
389                    } else if (result instanceof Array) {
390                        console.log("In html got message, Array");
391                        console.log("In html got message, Array length:" + result.length);
392                        console.log("In html got message, Array[0]:" + (result[0]));
393                        console.log("In html got message, typeof Array[0]:" + typeof(result[0]));
394                        document.getElementById("msg2").innerHTML  =  "Array len:" + result.length + ", value:" + result;
395                    } else {
396                        console.log("In html got message, not any instance of support type");
397                        document.getElementById("msg").innerHTML  = "not any instance of support type";
398                    }
399                } else {
400                    console.log("In html got message, not support type");
401                    document.getElementById("msg").innerHTML  = "not support type";
402                }
403            }
404            h5Port.onmessageerror = (event) => {
405                console.error(`hwd In html Error receiving message: ${event}`);
406            };
407        }
408    }
409})
410
411// 使用h5Port往ets侧发送String类型的消息.
412function postStringToApp() {
413    if (h5Port) {
414        console.log("In html send string message");
415        h5Port.postMessage("hello");
416        console.log("In html send string message end");
417    } else {
418        console.error("In html h5port is null, please init first");
419    }
420}
421```
422
423### close
424
425close(): void
426
427关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。
428
429**系统能力:** SystemCapability.Web.Webview.Core
430
431**示例:**
432
433```ts
434// xxx.ets
435import web_webview from '@ohos.web.webview';
436import business_error from '@ohos.base';
437
438@Entry
439@Component
440struct WebComponent {
441  controller: web_webview.WebviewController = new web_webview.WebviewController();
442  msgPort: web_webview.WebMessagePort[] = [];
443
444  build() {
445    Column() {
446      // 先使用createWebMessagePorts创建端口。
447      Button('createWebMessagePorts')
448        .onClick(() => {
449          try {
450            this.msgPort = this.controller.createWebMessagePorts();
451            console.log("createWebMessagePorts size:" + this.msgPort.length)
452          } catch (error) {
453            let e: business_error.BusinessError = error as business_error.BusinessError;
454            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
455          }
456        })
457      Button('close')
458        .onClick(() => {
459          try {
460            if (this.msgPort && this.msgPort.length == 2) {
461              this.msgPort[1].close();
462            } else {
463              console.error("msgPort is null, Please initialize first");
464            }
465          } catch (error) {
466            let e: business_error.BusinessError = error as business_error.BusinessError;
467            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
468          }
469        })
470      Web({ src: 'www.example.com', controller: this.controller })
471    }
472  }
473}
474```
475
476## WebviewController
477
478通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
479
480### initializeWebEngine
481
482static initializeWebEngine(): void
483
484在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。
485
486**系统能力:** SystemCapability.Web.Webview.Core
487
488**示例:**
489
490本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。
491
492```ts
493// xxx.ts
494import UIAbility from '@ohos.app.ability.UIAbility';
495import web_webview from '@ohos.web.webview';
496import AbilityConstant from '@ohos.app.ability.AbilityConstant';
497import Want from '@ohos.app.ability.Want';
498
499export default class EntryAbility extends UIAbility {
500  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
501    console.log("EntryAbility onCreate")
502    web_webview.WebviewController.initializeWebEngine()
503    console.log("EntryAbility onCreate done")
504  }
505}
506```
507
508### setHttpDns<sup>10+</sup>
509
510static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void
511
512设置Web组件是否使用HTTPDNS解析dns。
513
514**系统能力:** SystemCapability.Web.Webview.Core
515
516**参数:**
517
518| 参数名              | 类型    | 必填   |  说明 |
519| ------------------ | ------- | ---- | ------------- |
520| secureDnsMode         |   [SecureDnsMode](#securednsmode10)   | 是   | 使用HTTPDNS的模式。|
521| secureDnsConfig       | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 |
522
523**示例:**
524
525```ts
526// xxx.ts
527import UIAbility from '@ohos.app.ability.UIAbility';
528import web_webview from '@ohos.web.webview';
529import AbilityConstant from '@ohos.app.ability.AbilityConstant';
530import Want from '@ohos.app.ability.Want';
531import business_error from '@ohos.base';
532
533export default class EntryAbility extends UIAbility {
534  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
535    console.log("EntryAbility onCreate")
536    try {
537      web_webview.WebviewController.setHttpDns(web_webview.SecureDnsMode.AUTO, "https://example1.test")
538    } catch (error) {
539      let e: business_error.BusinessError = error as business_error.BusinessError;
540      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
541    }
542
543    AppStorage.setOrCreate("abilityWant", want);
544    console.log("EntryAbility onCreate done")
545  }
546}
547```
548
549### setWebDebuggingAccess
550
551static setWebDebuggingAccess(webDebuggingAccess: boolean): void
552
553设置是否启用网页调试功能。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。
554
555**系统能力:** SystemCapability.Web.Webview.Core
556
557**参数:**
558
559| 参数名              | 类型    | 必填   |  说明 |
560| ------------------ | ------- | ---- | ------------- |
561| webDebuggingAccess | boolean | 是   | 设置是否启用网页调试功能。|
562
563**示例:**
564
565```ts
566// xxx.ets
567import web_webview from '@ohos.web.webview';
568import business_error from '@ohos.base';
569
570@Entry
571@Component
572struct WebComponent {
573  controller: web_webview.WebviewController = new web_webview.WebviewController();
574
575  aboutToAppear(): void {
576    try {
577      web_webview.WebviewController.setWebDebuggingAccess(true);
578    } catch (error) {
579      let e: business_error.BusinessError = error as business_error.BusinessError;
580      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
581    }
582  }
583
584  build() {
585    Column() {
586      Web({ src: 'www.example.com', controller: this.controller })
587    }
588  }
589}
590```
591
592### loadUrl
593
594loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void
595
596加载指定的URL。
597
598**系统能力:** SystemCapability.Web.Webview.Core
599
600**参数:**
601
602| 参数名  | 类型             | 必填 | 说明                  |
603| ------- | ---------------- | ---- | :-------------------- |
604| url     | string \| Resource | 是   | 需要加载的 URL。      |
605| headers | Array\<[WebHeader](#webheader)> | 否   | URL的附加HTTP请求头。 |
606
607**错误码:**
608
609以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
610
611| 错误码ID | 错误信息                                                     |
612| -------- | ------------------------------------------------------------ |
613| 17100001 | Init error. The WebviewController must be associated with a Web component. |
614| 17100002 | Invalid url.                                                 |
615| 17100003 | Invalid resource path or file type.                          |
616
617**示例:**
618
619```ts
620// xxx.ets
621import web_webview from '@ohos.web.webview';
622import business_error from '@ohos.base';
623
624@Entry
625@Component
626struct WebComponent {
627  controller: web_webview.WebviewController = new web_webview.WebviewController();
628
629  build() {
630    Column() {
631      Button('loadUrl')
632        .onClick(() => {
633          try {
634            // 需要加载的URL是string类型。
635            this.controller.loadUrl('www.example.com');
636          } catch (error) {
637            let e: business_error.BusinessError = error as business_error.BusinessError;
638            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
639          }
640        })
641      Web({ src: 'www.example.com', controller: this.controller })
642    }
643  }
644}
645```
646
647```ts
648// xxx.ets
649import web_webview from '@ohos.web.webview';
650import business_error from '@ohos.base';
651
652@Entry
653@Component
654struct WebComponent {
655  controller: web_webview.WebviewController = new web_webview.WebviewController();
656
657  build() {
658    Column() {
659      Button('loadUrl')
660        .onClick(() => {
661          try {
662            // 带参数headers。
663            this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]);
664          } catch (error) {
665            let e: business_error.BusinessError = error as business_error.BusinessError;
666            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
667          }
668        })
669      Web({ src: 'www.example.com', controller: this.controller })
670    }
671  }
672}
673```
674
675加载本地网页,加载本地资源文件有三种方式。
676
6771.$rawfile方式。
678```ts
679// xxx.ets
680import web_webview from '@ohos.web.webview';
681import business_error from '@ohos.base';
682
683@Entry
684@Component
685struct WebComponent {
686  controller: web_webview.WebviewController = new web_webview.WebviewController();
687
688  build() {
689    Column() {
690      Button('loadUrl')
691        .onClick(() => {
692          try {
693            // 通过$rawfile加载本地资源文件。
694            this.controller.loadUrl($rawfile('index.html'));
695          } catch (error) {
696            let e: business_error.BusinessError = error as business_error.BusinessError;
697            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
698          }
699        })
700      Web({ src: 'www.example.com', controller: this.controller })
701    }
702  }
703}
704```
705
7062.resources协议。
707```ts
708// xxx.ets
709import web_webview from '@ohos.web.webview';
710import business_error from '@ohos.base';
711
712@Entry
713@Component
714struct WebComponent {
715  controller: web_webview.WebviewController = new web_webview.WebviewController();
716
717  build() {
718    Column() {
719      Button('loadUrl')
720        .onClick(() => {
721          try {
722            // 通过resource协议加载本地资源文件。
723            this.controller.loadUrl("resource://rawfile/index.html");
724          } catch (error) {
725            let e: business_error.BusinessError = error as business_error.BusinessError;
726            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
727          }
728        })
729      Web({ src: 'www.example.com', controller: this.controller })
730    }
731  }
732}
733```
734
7353.通过沙箱路径加载本地文件,可以参考[web](../arkui-ts/ts-basic-components-web.md#web)加载沙箱路径的示例代码。
736
737加载的html文件。
738```html
739<!-- index.html -->
740<!DOCTYPE html>
741<html>
742  <body>
743    <p>Hello World</p>
744  </body>
745</html>
746```
747
748### loadData
749
750loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void
751
752加载指定的数据。
753
754**系统能力:** SystemCapability.Web.Webview.Core
755
756**参数:**
757
758| 参数名     | 类型   | 必填 | 说明                                                         |
759| ---------- | ------ | ---- | ------------------------------------------------------------ |
760| data       | string | 是   | 按照"Base64"或者"URL"编码后的一段字符串。                    |
761| mimeType   | string | 是   | 媒体类型(MIME)。                                           |
762| encoding   | string | 是   | 编码类型,具体为"Base64"或者"URL"编码。                       |
763| baseUrl    | string | 否   | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 |
764| historyUrl | string | 否   | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 |
765
766> **说明:**
767>
768> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。
769> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。
770
771**错误码:**
772
773以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
774
775| 错误码ID | 错误信息                                                     |
776| -------- | ------------------------------------------------------------ |
777| 17100001 | Init error. The WebviewController must be associated with a Web component. |
778| 17100002 | Invalid url.                                                 |
779
780**示例:**
781
782```ts
783// xxx.ets
784import web_webview from '@ohos.web.webview';
785import business_error from '@ohos.base';
786
787@Entry
788@Component
789struct WebComponent {
790  controller: web_webview.WebviewController = new web_webview.WebviewController();
791
792  build() {
793    Column() {
794      Button('loadData')
795        .onClick(() => {
796          try {
797            this.controller.loadData(
798              "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
799              "text/html",
800              "UTF-8"
801            );
802          } catch (error) {
803            let e: business_error.BusinessError = error as business_error.BusinessError;
804            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
805          }
806        })
807      Web({ src: 'www.example.com', controller: this.controller })
808    }
809  }
810}
811```
812
813加载本地资源
814```ts
815// xxx.ets
816import web_webview from '@ohos.web.webview';
817import business_error from '@ohos.base';
818
819@Entry
820@Component
821struct WebComponent {
822  controller: web_webview.WebviewController = new web_webview.WebviewController();
823  updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>'
824
825  build() {
826    Column() {
827      Button('loadData')
828        .onClick(() => {
829          try {
830            this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " ");
831          } catch (error) {
832            let e: business_error.BusinessError = error as business_error.BusinessError;
833            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
834          }
835        })
836      Web({ src: 'www.example.com', controller: this.controller })
837    }
838  }
839}
840```
841
842### accessForward
843
844accessForward(): boolean
845
846当前页面是否可前进,即当前页面是否有前进历史记录。
847
848**系统能力:** SystemCapability.Web.Webview.Core
849
850**返回值:**
851
852| 类型    | 说明                              |
853| ------- | --------------------------------- |
854| boolean | 可以前进返回true,否则返回false。 |
855
856**错误码:**
857
858以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
859
860| 错误码ID | 错误信息                                                     |
861| -------- | ------------------------------------------------------------ |
862| 17100001 | Init error. The WebviewController must be associated with a Web component. |
863
864**示例:**
865
866```ts
867// xxx.ets
868import web_webview from '@ohos.web.webview';
869import business_error from '@ohos.base';
870
871@Entry
872@Component
873struct WebComponent {
874  controller: web_webview.WebviewController = new web_webview.WebviewController();
875
876  build() {
877    Column() {
878      Button('accessForward')
879        .onClick(() => {
880          try {
881            let result = this.controller.accessForward();
882            console.log('result:' + result);
883          } catch (error) {
884            let e: business_error.BusinessError = error as business_error.BusinessError;
885            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
886          }
887        })
888      Web({ src: 'www.example.com', controller: this.controller })
889    }
890  }
891}
892```
893
894### forward
895
896forward(): void
897
898按照历史栈,前进一个页面。一般结合accessForward一起使用。
899
900**系统能力:** SystemCapability.Web.Webview.Core
901
902**错误码:**
903
904以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
905
906| 错误码ID | 错误信息                                                     |
907| -------- | ------------------------------------------------------------ |
908| 17100001 | Init error. The WebviewController must be associated with a Web component. |
909
910**示例:**
911
912```ts
913// xxx.ets
914import web_webview from '@ohos.web.webview';
915import business_error from '@ohos.base';
916
917@Entry
918@Component
919struct WebComponent {
920  controller: web_webview.WebviewController = new web_webview.WebviewController();
921
922  build() {
923    Column() {
924      Button('forward')
925        .onClick(() => {
926          try {
927            this.controller.forward();
928          } catch (error) {
929            let e: business_error.BusinessError = error as business_error.BusinessError;
930            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
931          }
932        })
933      Web({ src: 'www.example.com', controller: this.controller })
934    }
935  }
936}
937```
938
939### accessBackward
940
941accessBackward(): boolean
942
943当前页面是否可后退,即当前页面是否有返回历史记录。
944
945**系统能力:** SystemCapability.Web.Webview.Core
946
947**返回值:**
948
949| 类型    | 说明                             |
950| ------- | -------------------------------- |
951| boolean | 可以后退返回true,否则返回false。 |
952
953**错误码:**
954
955以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
956
957| 错误码ID | 错误信息                                                     |
958| -------- | ------------------------------------------------------------ |
959| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
960
961**示例:**
962
963```ts
964// xxx.ets
965import web_webview from '@ohos.web.webview';
966import business_error from '@ohos.base';
967
968@Entry
969@Component
970struct WebComponent {
971  controller: web_webview.WebviewController = new web_webview.WebviewController();
972
973  build() {
974    Column() {
975      Button('accessBackward')
976        .onClick(() => {
977          try {
978            let result = this.controller.accessBackward();
979            console.log('result:' + result);
980          } catch (error) {
981            let e: business_error.BusinessError = error as business_error.BusinessError;
982            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
983          }
984        })
985      Web({ src: 'www.example.com', controller: this.controller })
986    }
987  }
988}
989```
990
991### backward
992
993backward(): void
994
995按照历史栈,后退一个页面。一般结合accessBackward一起使用。
996
997**系统能力:** SystemCapability.Web.Webview.Core
998
999**错误码:**
1000
1001以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1002
1003| 错误码ID | 错误信息                                                     |
1004| -------- | ------------------------------------------------------------ |
1005| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1006
1007**示例:**
1008
1009```ts
1010// xxx.ets
1011import web_webview from '@ohos.web.webview';
1012import business_error from '@ohos.base';
1013
1014@Entry
1015@Component
1016struct WebComponent {
1017  controller: web_webview.WebviewController = new web_webview.WebviewController();
1018
1019  build() {
1020    Column() {
1021      Button('backward')
1022        .onClick(() => {
1023          try {
1024            this.controller.backward();
1025          } catch (error) {
1026            let e: business_error.BusinessError = error as business_error.BusinessError;
1027            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1028          }
1029        })
1030      Web({ src: 'www.example.com', controller: this.controller })
1031    }
1032  }
1033}
1034```
1035
1036### onActive
1037
1038onActive(): void
1039
1040调用此接口通知Web组件进入前台激活状态。
1041
1042**系统能力:** SystemCapability.Web.Webview.Core
1043
1044**错误码:**
1045
1046以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1047
1048| 错误码ID | 错误信息                                                     |
1049| -------- | ------------------------------------------------------------ |
1050| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1051
1052**示例:**
1053
1054```ts
1055// xxx.ets
1056import web_webview from '@ohos.web.webview';
1057import business_error from '@ohos.base';
1058
1059@Entry
1060@Component
1061struct WebComponent {
1062  controller: web_webview.WebviewController = new web_webview.WebviewController();
1063
1064  build() {
1065    Column() {
1066      Button('onActive')
1067        .onClick(() => {
1068          try {
1069            this.controller.onActive();
1070          } catch (error) {
1071            let e: business_error.BusinessError = error as business_error.BusinessError;
1072            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1073          }
1074        })
1075      Web({ src: 'www.example.com', controller: this.controller })
1076    }
1077  }
1078}
1079```
1080
1081### onInactive
1082
1083onInactive(): void
1084
1085调用此接口通知Web组件进入未激活状态。
1086
1087**系统能力:** SystemCapability.Web.Webview.Core
1088
1089**错误码:**
1090
1091以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1092
1093| 错误码ID | 错误信息                                                     |
1094| -------- | ------------------------------------------------------------ |
1095| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1096
1097**示例:**
1098
1099```ts
1100// xxx.ets
1101import web_webview from '@ohos.web.webview';
1102import business_error from '@ohos.base';
1103
1104@Entry
1105@Component
1106struct WebComponent {
1107  controller: web_webview.WebviewController = new web_webview.WebviewController();
1108
1109  build() {
1110    Column() {
1111      Button('onInactive')
1112        .onClick(() => {
1113          try {
1114            this.controller.onInactive();
1115          } catch (error) {
1116            let e: business_error.BusinessError = error as business_error.BusinessError;
1117            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1118          }
1119        })
1120      Web({ src: 'www.example.com', controller: this.controller })
1121    }
1122  }
1123}
1124```
1125
1126### refresh
1127refresh(): void
1128
1129调用此接口通知Web组件刷新网页。
1130
1131**系统能力:** SystemCapability.Web.Webview.Core
1132
1133**错误码:**
1134
1135以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1136
1137| 错误码ID | 错误信息                                                     |
1138| -------- | ------------------------------------------------------------ |
1139| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1140
1141**示例:**
1142
1143```ts
1144// xxx.ets
1145import web_webview from '@ohos.web.webview';
1146import business_error from '@ohos.base';
1147
1148@Entry
1149@Component
1150struct WebComponent {
1151  controller: web_webview.WebviewController = new web_webview.WebviewController();
1152
1153  build() {
1154    Column() {
1155      Button('refresh')
1156        .onClick(() => {
1157          try {
1158            this.controller.refresh();
1159          } catch (error) {
1160            let e: business_error.BusinessError = error as business_error.BusinessError;
1161            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1162          }
1163        })
1164      Web({ src: 'www.example.com', controller: this.controller })
1165    }
1166  }
1167}
1168```
1169
1170### accessStep
1171
1172accessStep(step: number): boolean
1173
1174当前页面是否可前进或者后退给定的step步。
1175
1176**系统能力:** SystemCapability.Web.Webview.Core
1177
1178**参数:**
1179
1180| 参数名 | 类型 | 必填 | 说明                                   |
1181| ------ | -------- | ---- | ------------------------------------------ |
1182| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1183
1184**返回值:**
1185
1186| 类型    | 说明               |
1187| ------- | ------------------ |
1188| boolean | 页面是否前进或后退 |
1189
1190**错误码:**
1191
1192以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1193
1194| 错误码ID | 错误信息                                                     |
1195| -------- | ------------------------------------------------------------ |
1196| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1197
1198**示例:**
1199
1200```ts
1201// xxx.ets
1202import web_webview from '@ohos.web.webview';
1203import business_error from '@ohos.base';
1204
1205@Entry
1206@Component
1207struct WebComponent {
1208  controller: web_webview.WebviewController = new web_webview.WebviewController();
1209  @State steps: number = 2;
1210
1211  build() {
1212    Column() {
1213      Button('accessStep')
1214        .onClick(() => {
1215          try {
1216            let result = this.controller.accessStep(this.steps);
1217            console.log('result:' + result);
1218          } catch (error) {
1219            let e: business_error.BusinessError = error as business_error.BusinessError;
1220            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1221          }
1222        })
1223      Web({ src: 'www.example.com', controller: this.controller })
1224    }
1225  }
1226}
1227```
1228
1229### clearHistory
1230
1231clearHistory(): void
1232
1233删除所有前进后退记录。
1234
1235**系统能力:** SystemCapability.Web.Webview.Core
1236
1237**错误码:**
1238
1239以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1240
1241| 错误码ID | 错误信息                                                     |
1242| -------- | ------------------------------------------------------------ |
1243| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1244
1245**示例:**
1246
1247```ts
1248// xxx.ets
1249import web_webview from '@ohos.web.webview';
1250import business_error from '@ohos.base';
1251
1252@Entry
1253@Component
1254struct WebComponent {
1255  controller: web_webview.WebviewController = new web_webview.WebviewController();
1256
1257  build() {
1258    Column() {
1259      Button('clearHistory')
1260        .onClick(() => {
1261          try {
1262            this.controller.clearHistory();
1263          } catch (error) {
1264            let e: business_error.BusinessError = error as business_error.BusinessError;
1265            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1266          }
1267        })
1268      Web({ src: 'www.example.com', controller: this.controller })
1269    }
1270  }
1271}
1272```
1273
1274### getHitTest
1275
1276getHitTest(): WebHitTestType
1277
1278获取当前被点击区域的元素类型。
1279
1280**系统能力:** SystemCapability.Web.Webview.Core
1281
1282**返回值:**
1283
1284| 类型                                                         | 说明                   |
1285| ------------------------------------------------------------ | ---------------------- |
1286| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1287
1288**错误码:**
1289
1290以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1291
1292| 错误码ID | 错误信息                                                     |
1293| -------- | ------------------------------------------------------------ |
1294| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1295
1296**示例:**
1297
1298```ts
1299// xxx.ets
1300import web_webview from '@ohos.web.webview';
1301import business_error from '@ohos.base';
1302
1303@Entry
1304@Component
1305struct WebComponent {
1306  controller: web_webview.WebviewController = new web_webview.WebviewController();
1307
1308  build() {
1309    Column() {
1310      Button('getHitTest')
1311        .onClick(() => {
1312          try {
1313            let hitTestType = this.controller.getHitTest();
1314            console.log("hitTestType: " + hitTestType);
1315          } catch (error) {
1316            let e: business_error.BusinessError = error as business_error.BusinessError;
1317            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1318          }
1319        })
1320      Web({ src: 'www.example.com', controller: this.controller })
1321    }
1322  }
1323}
1324```
1325
1326### registerJavaScriptProxy
1327
1328registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>): void
1329
1330注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1331
1332**系统能力:** SystemCapability.Web.Webview.Core
1333
1334**参数:**
1335
1336| 参数名     | 类型       | 必填 | 说明                                        |
1337| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1338| object     | object         | 是   | 参与注册的应用侧JavaScript对象。只能声明方法,不能声明属性 。其中方法的参数和返回类型只能为string,number,boolean |
1339| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1340| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的方法。                       |
1341
1342**错误码:**
1343
1344以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1345
1346| 错误码ID | 错误信息                                                     |
1347| -------- | ------------------------------------------------------------ |
1348| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1349
1350**示例:**
1351
1352```ts
1353// xxx.ets
1354import web_webview from '@ohos.web.webview';
1355import business_error from '@ohos.base';
1356
1357class testObj {
1358  constructor() {
1359  }
1360
1361  test(): string {
1362    return "ArkUI Web Component";
1363  }
1364
1365  toString(): void {
1366    console.log('Web Component toString');
1367  }
1368}
1369
1370@Entry
1371@Component
1372struct Index {
1373  controller: web_webview.WebviewController = new web_webview.WebviewController();
1374  @State testObjtest: testObj = new testObj();
1375  build() {
1376    Column() {
1377      Button('refresh')
1378        .onClick(() => {
1379          try {
1380            this.controller.refresh();
1381          } catch (error) {
1382            let e: business_error.BusinessError = error as business_error.BusinessError;
1383            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1384          }
1385        })
1386      Button('Register JavaScript To Window')
1387        .onClick(() => {
1388          try {
1389            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString"]);
1390          } catch (error) {
1391            let e: business_error.BusinessError = error as business_error.BusinessError;
1392            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1393          }
1394        })
1395      Web({ src: $rawfile('index.html'), controller: this.controller })
1396        .javaScriptAccess(true)
1397    }
1398  }
1399}
1400```
1401
1402加载的html文件。
1403```html
1404<!-- index.html -->
1405<!DOCTYPE html>
1406<html>
1407    <meta charset="utf-8">
1408    <body>
1409      <button type="button" onclick="htmlTest()">Click Me!</button>
1410      <p id="demo"></p>
1411    </body>
1412    <script type="text/javascript">
1413    function htmlTest() {
1414      let str=objName.test();
1415      document.getElementById("demo").innerHTML=str;
1416      console.log('objName.test result:'+ str)
1417    }
1418</script>
1419</html>
1420```
1421
1422### runJavaScript
1423
1424runJavaScript(script: string, callback : AsyncCallback\<string>): void
1425
1426异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1427
1428**系统能力:** SystemCapability.Web.Webview.Core
1429
1430**参数:**
1431
1432| 参数名   | 类型                 | 必填 | 说明                         |
1433| -------- | -------------------- | ---- | ---------------------------- |
1434| script   | string                   | 是   | JavaScript脚本。                                             |
1435| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1436
1437**错误码:**
1438
1439以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1440
1441| 错误码ID | 错误信息                                                     |
1442| -------- | ------------------------------------------------------------ |
1443| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1444
1445**示例:**
1446
1447```ts
1448import web_webview from '@ohos.web.webview';
1449import business_error from '@ohos.base';
1450
1451@Entry
1452@Component
1453struct WebComponent {
1454  controller: web_webview.WebviewController = new web_webview.WebviewController();
1455  @State webResult: string = ''
1456
1457  build() {
1458    Column() {
1459      Text(this.webResult).fontSize(20)
1460      Web({ src: $rawfile('index.html'), controller: this.controller })
1461        .javaScriptAccess(true)
1462        .onPageEnd(e => {
1463          try {
1464            this.controller.runJavaScript(
1465              'test()',
1466              (error, result) => {
1467                if (error) {
1468                  console.info(`run JavaScript error: ` + JSON.stringify(error))
1469                  return;
1470                }
1471                if (result) {
1472                  this.webResult = result
1473                  console.info(`The test() return value is: ${result}`)
1474                }
1475              });
1476            if (e) {
1477              console.info('url: ', e.url);
1478            }
1479          } catch (error) {
1480            let e: business_error.BusinessError = error as business_error.BusinessError;
1481            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1482          }
1483        })
1484    }
1485  }
1486}
1487```
1488
1489加载的html文件。
1490```html
1491<!-- index.html -->
1492<!DOCTYPE html>
1493<html>
1494  <meta charset="utf-8">
1495  <body>
1496      Hello world!
1497  </body>
1498  <script type="text/javascript">
1499  function test() {
1500      console.log('Ark WebComponent')
1501      return "This value is from index.html"
1502  }
1503  </script>
1504</html>
1505```
1506
1507### runJavaScript
1508
1509runJavaScript(script: string): Promise\<string>
1510
1511异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1512
1513**系统能力:** SystemCapability.Web.Webview.Core
1514
1515**参数:**
1516
1517| 参数名 | 类型 | 必填 | 说明         |
1518| ------ | -------- | ---- | ---------------- |
1519| script | string   | 是   | JavaScript脚本。 |
1520
1521**返回值:**
1522
1523| 类型            | 说明                                                |
1524| --------------- | --------------------------------------------------- |
1525| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1526
1527**错误码:**
1528
1529以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1530
1531| 错误码ID | 错误信息                                                     |
1532| -------- | ------------------------------------------------------------ |
1533| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1534
1535**示例:**
1536
1537```ts
1538// xxx.ets
1539import web_webview from '@ohos.web.webview';
1540import business_error from '@ohos.base';
1541
1542@Entry
1543@Component
1544struct WebComponent {
1545  controller: web_webview.WebviewController = new web_webview.WebviewController();
1546
1547  build() {
1548    Column() {
1549      Web({ src: $rawfile('index.html'), controller: this.controller })
1550        .javaScriptAccess(true)
1551        .onPageEnd(e => {
1552          try {
1553            this.controller.runJavaScript('test()')
1554              .then((result) => {
1555                console.log('result: ' + result);
1556              })
1557              .catch((error: business_error.BusinessError) => {
1558                console.error("error: " + error);
1559              })
1560            if (e) {
1561              console.info('url: ', e.url);
1562            }
1563          } catch (error) {
1564            let e: business_error.BusinessError = error as business_error.BusinessError;
1565            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1566          }
1567        })
1568    }
1569  }
1570}
1571```
1572
1573加载的html文件。
1574```html
1575<!-- index.html -->
1576<!DOCTYPE html>
1577<html>
1578  <meta charset="utf-8">
1579  <body>
1580      Hello world!
1581  </body>
1582  <script type="text/javascript">
1583  function test() {
1584      console.log('Ark WebComponent')
1585      return "This value is from index.html"
1586  }
1587  </script>
1588</html>
1589```
1590
1591### runJavaScriptExt<sup>10+</sup>
1592
1593runJavaScriptExt(script: string, callback : AsyncCallback\<JsMessageExt>): void
1594
1595异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1596
1597**系统能力:** SystemCapability.Web.Webview.Core
1598
1599**参数:**
1600
1601| 参数名   | 类型                 | 必填 | 说明                         |
1602| -------- | -------------------- | ---- | ---------------------------- |
1603| script   | string                   | 是   | JavaScript脚本。                                             |
1604| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1605
1606**错误码:**
1607
1608以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1609
1610| 错误码ID | 错误信息                                                     |
1611| -------- | ------------------------------------------------------------ |
1612| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1613
1614**示例:**
1615
1616```ts
1617import web_webview from '@ohos.web.webview';
1618import business_error from '@ohos.base';
1619
1620@Entry
1621@Component
1622struct WebComponent {
1623  controller: web_webview.WebviewController = new web_webview.WebviewController();
1624  @State msg1: string = ''
1625  @State msg2: string = ''
1626
1627  build() {
1628    Column() {
1629      Text(this.msg1).fontSize(20)
1630      Text(this.msg2).fontSize(20)
1631      Web({ src: $rawfile('index.html'), controller: this.controller })
1632        .javaScriptAccess(true)
1633        .onPageEnd(e => {
1634          try {
1635            this.controller.runJavaScriptExt(
1636              'test()',
1637              (error, result) => {
1638                if (error) {
1639                  console.info(`run JavaScript error: ` + JSON.stringify(error))
1640                  return;
1641                }
1642                if (result) {
1643                  try {
1644                    let type = result.getType();
1645                    switch (type) {
1646                      case web_webview.JsMessageType.STRING: {
1647                        this.msg1 = "result type:" + typeof (result.getString());
1648                        this.msg2 = "result getString:" + ((result.getString()));
1649                        break;
1650                      }
1651                      case web_webview.JsMessageType.NUMBER: {
1652                        this.msg1 = "result type:" + typeof (result.getNumber());
1653                        this.msg2 = "result getNumber:" + ((result.getNumber()));
1654                        break;
1655                      }
1656                      case web_webview.JsMessageType.BOOLEAN: {
1657                        this.msg1 = "result type:" + typeof (result.getBoolean());
1658                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
1659                        break;
1660                      }
1661                      case web_webview.JsMessageType.ARRAY_BUFFER: {
1662                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
1663                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
1664                        break;
1665                      }
1666                      case web_webview.JsMessageType.ARRAY: {
1667                        this.msg1 = "result type:" + typeof (result.getArray());
1668                        this.msg2 = "result getArray:" + result.getArray();
1669                        break;
1670                      }
1671                      default: {
1672                        this.msg1 = "default break, type:" + type;
1673                        break;
1674                      }
1675                    }
1676                  }
1677                  catch (resError) {
1678                    let e: business_error.BusinessError = resError as business_error.BusinessError;
1679                    console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1680                  }
1681                }
1682              });
1683            if (e) {
1684              console.info('url: ', e.url);
1685            }
1686          } catch (error) {
1687            let e: business_error.BusinessError = error as business_error.BusinessError;
1688            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1689          }
1690        })
1691    }
1692  }
1693}
1694```
1695
1696加载的html文件。
1697```html
1698<!-- index.html -->
1699<!DOCTYPE html>
1700<html lang="en-gb">
1701<body>
1702<h1>run JavaScript Ext demo</h1>
1703</body>
1704<script type="text/javascript">
1705function test() {
1706  return "hello, world";
1707}
1708</script>
1709</html>
1710```
1711
1712### runJavaScriptExt<sup>10+</sup>
1713
1714runJavaScriptExt(script: string): Promise\<JsMessageExt>
1715
1716异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1717
1718**系统能力:** SystemCapability.Web.Webview.Core
1719
1720**参数:**
1721
1722| 参数名 | 类型 | 必填 | 说明         |
1723| ------ | -------- | ---- | ---------------- |
1724| script | string   | 是   | JavaScript脚本。 |
1725
1726**返回值:**
1727
1728| 类型            | 说明                                                |
1729| --------------- | --------------------------------------------------- |
1730| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
1731
1732**错误码:**
1733
1734以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1735
1736| 错误码ID | 错误信息                                                     |
1737| -------- | ------------------------------------------------------------ |
1738| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1739
1740**示例:**
1741
1742```ts
1743// xxx.ets
1744import web_webview from '@ohos.web.webview';
1745import business_error from '@ohos.base';
1746
1747@Entry
1748@Component
1749struct WebComponent {
1750  controller: web_webview.WebviewController = new web_webview.WebviewController();
1751  @State webResult: string = '';
1752  @State msg1: string = ''
1753  @State msg2: string = ''
1754
1755  build() {
1756    Column() {
1757      Text(this.webResult).fontSize(20)
1758      Text(this.msg1).fontSize(20)
1759      Text(this.msg2).fontSize(20)
1760      Web({ src: $rawfile('index.html'), controller: this.controller })
1761        .javaScriptAccess(true)
1762        .onPageEnd(() => {
1763          this.controller.runJavaScriptExt('test()')
1764            .then((result) => {
1765              try {
1766                let type = result.getType();
1767                switch (type) {
1768                  case web_webview.JsMessageType.STRING: {
1769                    this.msg1 = "result type:" + typeof (result.getString());
1770                    this.msg2 = "result getString:" + ((result.getString()));
1771                    break;
1772                  }
1773                  case web_webview.JsMessageType.NUMBER: {
1774                    this.msg1 = "result type:" + typeof (result.getNumber());
1775                    this.msg2 = "result getNumber:" + ((result.getNumber()));
1776                    break;
1777                  }
1778                  case web_webview.JsMessageType.BOOLEAN: {
1779                    this.msg1 = "result type:" + typeof (result.getBoolean());
1780                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
1781                    break;
1782                  }
1783                  case web_webview.JsMessageType.ARRAY_BUFFER: {
1784                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
1785                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
1786                    break;
1787                  }
1788                  case web_webview.JsMessageType.ARRAY: {
1789                    this.msg1 = "result type:" + typeof (result.getArray());
1790                    this.msg2 = "result getArray:" + result.getArray();
1791                    break;
1792                  }
1793                  default: {
1794                    this.msg1 = "default break, type:" + type;
1795                    break;
1796                  }
1797                }
1798              }
1799              catch (resError) {
1800                let e: business_error.BusinessError = resError as business_error.BusinessError;
1801                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1802              }
1803            })
1804            .catch((error: business_error.BusinessError) => {
1805              console.error("error: " + error);
1806            })
1807        })
1808    }
1809  }
1810}
1811```
1812
1813加载的html文件。
1814```html
1815<!-- index.html -->
1816<!DOCTYPE html>
1817<html lang="en-gb">
1818<body>
1819<h1>run JavaScript Ext demo</h1>
1820</body>
1821<script type="text/javascript">
1822function test() {
1823  return "hello, world";
1824}
1825</script>
1826</html>
1827```
1828
1829### deleteJavaScriptRegister
1830
1831deleteJavaScriptRegister(name: string): void
1832
1833删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
1834
1835**系统能力:** SystemCapability.Web.Webview.Core
1836
1837**参数:**
1838
1839| 参数名 | 类型 | 必填 | 说明  |
1840| ------ | -------- | ---- | ---- |
1841| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
1842
1843**错误码:**
1844
1845以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1846
1847| 错误码ID | 错误信息                                                     |
1848| -------- | ------------------------------------------------------------ |
1849| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1850| 17100008 | Cannot delete JavaScriptProxy.                               |
1851
1852**示例:**
1853
1854```ts
1855// xxx.ets
1856import web_webview from '@ohos.web.webview';
1857import business_error from '@ohos.base';
1858
1859class testObj {
1860  constructor() {
1861  }
1862
1863  test(): string {
1864    return "ArkUI Web Component";
1865  }
1866
1867  toString(): void {
1868    console.log('Web Component toString');
1869  }
1870}
1871
1872@Entry
1873@Component
1874struct WebComponent {
1875  controller: web_webview.WebviewController = new web_webview.WebviewController();
1876  @State testObjtest: testObj = new testObj();
1877  @State name: string = 'objName';
1878  build() {
1879    Column() {
1880      Button('refresh')
1881        .onClick(() => {
1882          try {
1883            this.controller.refresh();
1884          } catch (error) {
1885            let e: business_error.BusinessError = error as business_error.BusinessError;
1886            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1887          }
1888        })
1889      Button('Register JavaScript To Window')
1890        .onClick(() => {
1891          try {
1892            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
1893          } catch (error) {
1894            let e: business_error.BusinessError = error as business_error.BusinessError;
1895            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1896          }
1897        })
1898      Button('deleteJavaScriptRegister')
1899        .onClick(() => {
1900          try {
1901            this.controller.deleteJavaScriptRegister(this.name);
1902          } catch (error) {
1903            let e: business_error.BusinessError = error as business_error.BusinessError;
1904            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1905          }
1906        })
1907      Web({ src: $rawfile('index.html'), controller: this.controller })
1908        .javaScriptAccess(true)
1909    }
1910  }
1911}
1912```
1913
1914加载的html文件。
1915```html
1916<!-- index.html -->
1917<!DOCTYPE html>
1918<html>
1919    <meta charset="utf-8">
1920    <body>
1921      <button type="button" onclick="htmlTest()">Click Me!</button>
1922      <p id="demo"></p>
1923    </body>
1924    <script type="text/javascript">
1925    function htmlTest() {
1926      let str=objName.test();
1927      document.getElementById("demo").innerHTML=str;
1928      console.log('objName.test result:'+ str)
1929    }
1930</script>
1931</html>
1932```
1933
1934### zoom
1935
1936zoom(factor: number): void
1937
1938调整当前网页的缩放比例。
1939
1940**系统能力:** SystemCapability.Web.Webview.Core
1941
1942**参数:**
1943
1944| 参数名 | 类型 | 必填 | 说明 |
1945| ------ | -------- | ---- | ------------------------------------------------------------ |
1946| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 |
1947
1948**错误码:**
1949
1950以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
1951
1952| 错误码ID | 错误信息                                                     |
1953| -------- | ------------------------------------------------------------ |
1954| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
1955| 17100004 | Function not enable.                                         |
1956
1957**示例:**
1958
1959```ts
1960// xxx.ets
1961import web_webview from '@ohos.web.webview';
1962import business_error from '@ohos.base';
1963
1964@Entry
1965@Component
1966struct WebComponent {
1967  controller: web_webview.WebviewController = new web_webview.WebviewController();
1968  @State factor: number = 1;
1969
1970  build() {
1971    Column() {
1972      Button('zoom')
1973        .onClick(() => {
1974          try {
1975            this.controller.zoom(this.factor);
1976          } catch (error) {
1977            let e: business_error.BusinessError = error as business_error.BusinessError;
1978            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1979          }
1980        })
1981      Web({ src: 'www.example.com', controller: this.controller })
1982    }
1983  }
1984}
1985```
1986
1987### searchAllAsync
1988
1989searchAllAsync(searchString: string): void
1990
1991异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](../arkui-ts/ts-basic-components-web.md#onsearchresultreceive9)异步返回。
1992
1993**系统能力:** SystemCapability.Web.Webview.Core
1994
1995**参数:**
1996
1997| 参数名       | 类型 | 必填 | 说明       |
1998| ------------ | -------- | ---- | -------------- |
1999| searchString | string   | 是   | 查找的关键字。 |
2000
2001**错误码:**
2002
2003以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2004
2005| 错误码ID | 错误信息                                                     |
2006| -------- | ------------------------------------------------------------ |
2007| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
2008
2009**示例:**
2010
2011```ts
2012// xxx.ets
2013import web_webview from '@ohos.web.webview';
2014import business_error from '@ohos.base';
2015
2016@Entry
2017@Component
2018struct WebComponent {
2019  controller: web_webview.WebviewController = new web_webview.WebviewController();
2020  @State searchString: string = "Hello World";
2021
2022  build() {
2023    Column() {
2024      Button('searchString')
2025        .onClick(() => {
2026          try {
2027            this.controller.searchAllAsync(this.searchString);
2028          } catch (error) {
2029            let e: business_error.BusinessError = error as business_error.BusinessError;
2030            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2031          }
2032        })
2033      Web({ src: $rawfile('index.html'), controller: this.controller })
2034        .onSearchResultReceive(ret => {
2035          if (ret) {
2036            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2037              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2038          }
2039        })
2040    }
2041  }
2042}
2043```
2044
2045加载的html文件。
2046```html
2047<!-- index.html -->
2048<!DOCTYPE html>
2049<html>
2050  <body>
2051    <p>Hello World Highlight Hello World</p>
2052  </body>
2053</html>
2054```
2055
2056### clearMatches
2057
2058clearMatches(): void
2059
2060清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2061
2062**系统能力:** SystemCapability.Web.Webview.Core
2063
2064**错误码:**
2065
2066以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2067
2068| 错误码ID | 错误信息                                                     |
2069| -------- | ------------------------------------------------------------ |
2070| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
2071
2072**示例:**
2073
2074```ts
2075// xxx.ets
2076import web_webview from '@ohos.web.webview';
2077import business_error from '@ohos.base';
2078
2079@Entry
2080@Component
2081struct WebComponent {
2082  controller: web_webview.WebviewController = new web_webview.WebviewController();
2083
2084  build() {
2085    Column() {
2086      Button('clearMatches')
2087        .onClick(() => {
2088          try {
2089            this.controller.clearMatches();
2090          } catch (error) {
2091            let e: business_error.BusinessError = error as business_error.BusinessError;
2092            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2093          }
2094        })
2095      Web({ src: $rawfile('index.html'), controller: this.controller })
2096    }
2097  }
2098}
2099```
2100
2101加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2102
2103### searchNext
2104
2105searchNext(forward: boolean): void
2106
2107滚动到下一个匹配的查找结果并高亮。
2108
2109**系统能力:** SystemCapability.Web.Webview.Core
2110
2111**参数:**
2112
2113| 参数名  | 类型 | 必填 | 说明               |
2114| ------- | -------- | ---- | ---------------------- |
2115| forward | boolean  | 是   | 从前向后或者逆向查找。 |
2116
2117**错误码:**
2118
2119以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2120
2121| 错误码ID | 错误信息                                                     |
2122| -------- | ------------------------------------------------------------ |
2123| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
2124
2125**示例:**
2126
2127```ts
2128// xxx.ets
2129import web_webview from '@ohos.web.webview';
2130import business_error from '@ohos.base';
2131
2132@Entry
2133@Component
2134struct WebComponent {
2135  controller: web_webview.WebviewController = new web_webview.WebviewController();
2136
2137  build() {
2138    Column() {
2139      Button('searchNext')
2140        .onClick(() => {
2141          try {
2142            this.controller.searchNext(true);
2143          } catch (error) {
2144            let e: business_error.BusinessError = error as business_error.BusinessError;
2145            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2146          }
2147        })
2148      Web({ src: $rawfile('index.html'), controller: this.controller })
2149    }
2150  }
2151}
2152```
2153
2154加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2155
2156### clearSslCache
2157
2158clearSslCache(): void
2159
2160清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2161
2162**系统能力:** SystemCapability.Web.Webview.Core
2163
2164**错误码:**
2165
2166以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2167
2168| 错误码ID | 错误信息                                                     |
2169| -------- | ------------------------------------------------------------ |
2170| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
2171
2172**示例:**
2173
2174```ts
2175// xxx.ets
2176import web_webview from '@ohos.web.webview';
2177import business_error from '@ohos.base';
2178
2179@Entry
2180@Component
2181struct WebComponent {
2182  controller: web_webview.WebviewController = new web_webview.WebviewController();
2183
2184  build() {
2185    Column() {
2186      Button('clearSslCache')
2187        .onClick(() => {
2188          try {
2189            this.controller.clearSslCache();
2190          } catch (error) {
2191            let e: business_error.BusinessError = error as business_error.BusinessError;
2192            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2193          }
2194        })
2195      Web({ src: 'www.example.com', controller: this.controller })
2196    }
2197  }
2198}
2199```
2200
2201### clearClientAuthenticationCache
2202
2203clearClientAuthenticationCache(): void
2204
2205清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2206
2207**系统能力:** SystemCapability.Web.Webview.Core
2208
2209**错误码:**
2210
2211以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2212
2213| 错误码ID | 错误信息                                                     |
2214| -------- | ------------------------------------------------------------ |
2215| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
2216
2217**示例:**
2218
2219```ts
2220// xxx.ets
2221import web_webview from '@ohos.web.webview';
2222import business_error from '@ohos.base';
2223
2224@Entry
2225@Component
2226struct WebComponent {
2227  controller: web_webview.WebviewController = new web_webview.WebviewController();
2228
2229  build() {
2230    Column() {
2231      Button('clearClientAuthenticationCache')
2232        .onClick(() => {
2233          try {
2234            this.controller.clearClientAuthenticationCache();
2235          } catch (error) {
2236            let e: business_error.BusinessError = error as business_error.BusinessError;
2237            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2238          }
2239        })
2240      Web({ src: 'www.example.com', controller: this.controller })
2241    }
2242  }
2243}
2244```
2245
2246### createWebMessagePorts
2247
2248createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2249
2250创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2251
2252**系统能力:** SystemCapability.Web.Webview.Core
2253
2254**参数:**
2255
2256| 参数名 | 类型                   | 必填 | 说明                             |
2257| ------ | ---------------------- | ---- | :------------------------------|
2258| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 从API version 10开始,该接口支持此参数。|
2259
2260**返回值:**
2261
2262| 类型                   | 说明              |
2263| ---------------------- | ----------------- |
2264| [WebMessagePort](#webmessageport) | web消息端口列表。 |
2265
2266**错误码:**
2267
2268以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2269
2270| 错误码ID | 错误信息                                                     |
2271| -------- | ------------------------------------------------------------ |
2272| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2273
2274**示例:**
2275
2276  ```ts
2277// xxx.ets
2278import web_webview from '@ohos.web.webview';
2279import business_error from '@ohos.base';
2280
2281@Entry
2282@Component
2283struct WebComponent {
2284  controller: web_webview.WebviewController = new web_webview.WebviewController();
2285  ports: web_webview.WebMessagePort[] = [];
2286
2287  build() {
2288    Column() {
2289      Button('createWebMessagePorts')
2290        .onClick(() => {
2291          try {
2292            this.ports = this.controller.createWebMessagePorts();
2293            console.log("createWebMessagePorts size:" + this.ports.length)
2294          } catch (error) {
2295            let e: business_error.BusinessError = error as business_error.BusinessError;
2296            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2297          }
2298        })
2299      Web({ src: 'www.example.com', controller: this.controller })
2300    }
2301  }
2302}
2303  ```
2304
2305### postMessage
2306
2307postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2308
2309发送Web消息端口到HTML。
2310
2311**系统能力:** SystemCapability.Web.Webview.Core
2312
2313**参数:**
2314
2315| 参数名 | 类型                   | 必填 | 说明                             |
2316| ------ | ---------------------- | ---- | :------------------------------- |
2317| name   | string                 | 是   | 要发送的消息名称。            |
2318| ports  | Array\<WebMessagePort> | 是   | 要发送的消息端口。            |
2319| uri    | string                 | 是   | 接收该消息的URI。                |
2320
2321**错误码:**
2322
2323以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2324
2325| 错误码ID | 错误信息                                                     |
2326| -------- | ------------------------------------------------------------ |
2327| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2328
2329**示例:**
2330
2331```ts
2332// xxx.ets
2333import web_webview from '@ohos.web.webview';
2334import business_error from '@ohos.base';
2335
2336@Entry
2337@Component
2338struct WebComponent {
2339  controller: web_webview.WebviewController = new web_webview.WebviewController();
2340  ports: web_webview.WebMessagePort[] = [];
2341  @State sendFromEts: string = 'Send this message from ets to HTML';
2342  @State receivedFromHtml: string = 'Display received message send from HTML';
2343
2344  build() {
2345    Column() {
2346      // 展示接收到的来自HTML的内容
2347      Text(this.receivedFromHtml)
2348      // 输入框的内容发送到html
2349      TextInput({ placeholder: 'Send this message from ets to HTML' })
2350        .onChange((value: string) => {
2351          this.sendFromEts = value;
2352        })
2353
2354      Button('postMessage')
2355        .onClick(() => {
2356          try {
2357            // 1、创建两个消息端口。
2358            this.ports = this.controller.createWebMessagePorts();
2359            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2360            this.ports[1].onMessageEvent((result: web_webview.WebMessage) => {
2361              let msg = 'Got msg from HTML:';
2362              if (typeof(result) == "string") {
2363                console.log("received string message from html5, string is:" + result);
2364                msg = msg + result;
2365              } else if (typeof(result) == "object") {
2366                if (result instanceof ArrayBuffer) {
2367                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2368                  msg = msg + "lenght is " + result.byteLength;
2369                } else {
2370                  console.log("not support");
2371                }
2372              } else {
2373                console.log("not support");
2374              }
2375              this.receivedFromHtml = msg;
2376            })
2377            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2378            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2379          } catch (error) {
2380            let e: business_error.BusinessError = error as business_error.BusinessError;
2381            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2382          }
2383        })
2384
2385      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2386      Button('SendDataToHTML')
2387        .onClick(() => {
2388          try {
2389            if (this.ports && this.ports[1]) {
2390              this.ports[1].postMessageEvent(this.sendFromEts);
2391            } else {
2392              console.error(`ports is null, Please initialize first`);
2393            }
2394          } catch (error) {
2395            let e: business_error.BusinessError = error as business_error.BusinessError;
2396            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2397          }
2398        })
2399      Web({ src: $rawfile('index.html'), controller: this.controller })
2400    }
2401  }
2402}
2403```
2404
2405加载的html文件。
2406```html
2407<!--index.html-->
2408<!DOCTYPE html>
2409<html>
2410<head>
2411    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2412    <title>WebView Message Port Demo</title>
2413</head>
2414
2415  <body>
2416    <h1>WebView Message Port Demo</h1>
2417    <div>
2418        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2419        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2420    </div>
2421    <p class="output">display received message send from ets</p>
2422  </body>
2423  <script src="xxx.js"></script>
2424</html>
2425```
2426
2427```js
2428//xxx.js
2429var h5Port;
2430var output = document.querySelector('.output');
2431window.addEventListener('message', function (event) {
2432    if (event.data == '__init_port__') {
2433        if (event.ports[0] != null) {
2434            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2435            h5Port.onmessage = function (event) {
2436              // 2. 接收ets侧发送过来的消息.
2437              var msg = 'Got message from ets:';
2438              var result = event.data;
2439              if (typeof(result) == "string") {
2440                console.log("received string message from html5, string is:" + result);
2441                msg = msg + result;
2442              } else if (typeof(result) == "object") {
2443                if (result instanceof ArrayBuffer) {
2444                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2445                  msg = msg + "lenght is " + result.byteLength;
2446                } else {
2447                  console.log("not support");
2448                }
2449              } else {
2450                console.log("not support");
2451              }
2452              output.innerHTML = msg;
2453            }
2454        }
2455    }
2456})
2457
2458// 3. 使用h5Port往ets侧发送消息.
2459function PostMsgToEts(data) {
2460    if (h5Port) {
2461      h5Port.postMessage(data);
2462    } else {
2463      console.error("h5Port is null, Please initialize first");
2464    }
2465}
2466```
2467
2468### requestFocus
2469
2470requestFocus(): void
2471
2472使当前web页面获取焦点。
2473
2474**系统能力:** SystemCapability.Web.Webview.Core
2475
2476**错误码:**
2477
2478以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2479
2480| 错误码ID | 错误信息                                                     |
2481| -------- | ------------------------------------------------------------ |
2482| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2483
2484**示例:**
2485
2486```ts
2487// xxx.ets
2488import web_webview from '@ohos.web.webview';
2489import business_error from '@ohos.base';
2490
2491@Entry
2492@Component
2493struct WebComponent {
2494  controller: web_webview.WebviewController = new web_webview.WebviewController();
2495
2496  build() {
2497    Column() {
2498      Button('requestFocus')
2499        .onClick(() => {
2500          try {
2501            this.controller.requestFocus();
2502          } catch (error) {
2503            let e: business_error.BusinessError = error as business_error.BusinessError;
2504            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2505          }
2506        });
2507      Web({ src: 'www.example.com', controller: this.controller })
2508    }
2509  }
2510}
2511```
2512
2513### zoomIn
2514
2515zoomIn(): void
2516
2517调用此接口将当前网页进行放大,比例为20%。
2518
2519**系统能力:** SystemCapability.Web.Webview.Core
2520
2521**错误码:**
2522
2523以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2524
2525| 错误码ID | 错误信息                                                     |
2526| -------- | ------------------------------------------------------------ |
2527| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2528| 17100004 | Function not enable.                                         |
2529
2530**示例:**
2531
2532```ts
2533// xxx.ets
2534import web_webview from '@ohos.web.webview';
2535import business_error from '@ohos.base';
2536
2537@Entry
2538@Component
2539struct WebComponent {
2540  controller: web_webview.WebviewController = new web_webview.WebviewController();
2541
2542  build() {
2543    Column() {
2544      Button('zoomIn')
2545        .onClick(() => {
2546          try {
2547            this.controller.zoomIn();
2548          } catch (error) {
2549            let e: business_error.BusinessError = error as business_error.BusinessError;
2550            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2551          }
2552        })
2553      Web({ src: 'www.example.com', controller: this.controller })
2554    }
2555  }
2556}
2557```
2558
2559### zoomOut
2560
2561zoomOut(): void
2562
2563调用此接口将当前网页进行缩小,比例为20%。
2564
2565**系统能力:** SystemCapability.Web.Webview.Core
2566
2567**错误码:**
2568
2569以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2570
2571| 错误码ID | 错误信息                                                     |
2572| -------- | ------------------------------------------------------------ |
2573| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2574| 17100004 | Function not enable.                                         |
2575
2576**示例:**
2577
2578```ts
2579// xxx.ets
2580import web_webview from '@ohos.web.webview';
2581import business_error from '@ohos.base';
2582
2583@Entry
2584@Component
2585struct WebComponent {
2586  controller: web_webview.WebviewController = new web_webview.WebviewController();
2587
2588  build() {
2589    Column() {
2590      Button('zoomOut')
2591        .onClick(() => {
2592          try {
2593            this.controller.zoomOut();
2594          } catch (error) {
2595            let e: business_error.BusinessError = error as business_error.BusinessError;
2596            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2597          }
2598        })
2599      Web({ src: 'www.example.com', controller: this.controller })
2600    }
2601  }
2602}
2603```
2604
2605### getHitTestValue
2606
2607getHitTestValue(): HitTestValue
2608
2609获取当前被点击区域的元素信息。
2610
2611**系统能力:** SystemCapability.Web.Webview.Core
2612
2613**返回值:**
2614
2615| 类型         | 说明                 |
2616| ------------ | -------------------- |
2617| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
2618
2619**错误码:**
2620
2621以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2622
2623| 错误码ID | 错误信息                                                     |
2624| -------- | ------------------------------------------------------------ |
2625| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2626
2627**示例:**
2628
2629```ts
2630// xxx.ets
2631import web_webview from '@ohos.web.webview';
2632import business_error from '@ohos.base';
2633
2634@Entry
2635@Component
2636struct WebComponent {
2637  controller: web_webview.WebviewController = new web_webview.WebviewController();
2638
2639  build() {
2640    Column() {
2641      Button('getHitTestValue')
2642        .onClick(() => {
2643          try {
2644            let hitValue = this.controller.getHitTestValue();
2645            console.log("hitType: " + hitValue.type);
2646            console.log("extra: " + hitValue.extra);
2647          } catch (error) {
2648            let e: business_error.BusinessError = error as business_error.BusinessError;
2649            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2650          }
2651        })
2652      Web({ src: 'www.example.com', controller: this.controller })
2653    }
2654  }
2655}
2656```
2657
2658### getWebId
2659
2660getWebId(): number
2661
2662获取当前Web组件的索引值,用于多个Web组件的管理。
2663
2664**系统能力:** SystemCapability.Web.Webview.Core
2665
2666**返回值:**
2667
2668| 类型   | 说明                  |
2669| ------ | --------------------- |
2670| number | 当前Web组件的索引值。 |
2671
2672**错误码:**
2673
2674以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2675
2676| 错误码ID | 错误信息                                                     |
2677| -------- | ------------------------------------------------------------ |
2678| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2679
2680**示例:**
2681
2682```ts
2683// xxx.ets
2684import web_webview from '@ohos.web.webview';
2685import business_error from '@ohos.base';
2686
2687@Entry
2688@Component
2689struct WebComponent {
2690  controller: web_webview.WebviewController = new web_webview.WebviewController();
2691
2692  build() {
2693    Column() {
2694      Button('getWebId')
2695        .onClick(() => {
2696          try {
2697            let id = this.controller.getWebId();
2698            console.log("id: " + id);
2699          } catch (error) {
2700            let e: business_error.BusinessError = error as business_error.BusinessError;
2701            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2702          }
2703        })
2704      Web({ src: 'www.example.com', controller: this.controller })
2705    }
2706  }
2707}
2708```
2709
2710### getUserAgent
2711
2712getUserAgent(): string
2713
2714获取当前默认用户代理。
2715
2716**系统能力:** SystemCapability.Web.Webview.Core
2717
2718**返回值:**
2719
2720| 类型   | 说明           |
2721| ------ | -------------- |
2722| string | 默认用户代理。 |
2723
2724**错误码:**
2725
2726以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2727
2728| 错误码ID | 错误信息                                                     |
2729| -------- | ------------------------------------------------------------ |
2730| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2731
2732**示例:**
2733
2734```ts
2735// xxx.ets
2736import web_webview from '@ohos.web.webview';
2737import business_error from '@ohos.base';
2738
2739@Entry
2740@Component
2741struct WebComponent {
2742  controller: web_webview.WebviewController = new web_webview.WebviewController();
2743
2744  build() {
2745    Column() {
2746      Button('getUserAgent')
2747        .onClick(() => {
2748          try {
2749            let userAgent = this.controller.getUserAgent();
2750            console.log("userAgent: " + userAgent);
2751          } catch (error) {
2752            let e:business_error.BusinessError = error as business_error.BusinessError;
2753            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2754          }
2755        })
2756      Web({ src: 'www.example.com', controller: this.controller })
2757    }
2758  }
2759}
2760```
2761
2762支持开发者基于默认的UserAgent去定制UserAgent。
2763```ts
2764// xxx.ets
2765import web_webview from '@ohos.web.webview';
2766import business_error from '@ohos.base';
2767
2768@Entry
2769@Component
2770struct WebComponent {
2771  controller: web_webview.WebviewController = new web_webview.WebviewController();
2772  @State ua: string = ""
2773
2774  aboutToAppear():void {
2775    web_webview.once('webInited', () => {
2776      try {
2777        // 应用侧用法示例,定制UserAgent。
2778        this.ua = this.controller.getUserAgent() + 'xxx';
2779      } catch(error) {
2780        let e:business_error.BusinessError = error as business_error.BusinessError;
2781        console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2782      }
2783    })
2784  }
2785
2786  build() {
2787    Column() {
2788      Web({ src: 'www.example.com', controller: this.controller })
2789        .userAgent(this.ua)
2790    }
2791  }
2792}
2793```
2794
2795### getTitle
2796
2797getTitle(): string
2798
2799获取当前网页的标题。
2800
2801**系统能力:** SystemCapability.Web.Webview.Core
2802
2803**返回值:**
2804
2805| 类型   | 说明                 |
2806| ------ | -------------------- |
2807| string | 当前网页的标题。 |
2808
2809**错误码:**
2810
2811以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2812
2813| 错误码ID | 错误信息                                                     |
2814| -------- | ------------------------------------------------------------ |
2815| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2816
2817**示例:**
2818
2819```ts
2820// xxx.ets
2821import web_webview from '@ohos.web.webview';
2822import business_error from '@ohos.base';
2823
2824@Entry
2825@Component
2826struct WebComponent {
2827  controller: web_webview.WebviewController = new web_webview.WebviewController();
2828
2829  build() {
2830    Column() {
2831      Button('getTitle')
2832        .onClick(() => {
2833          try {
2834            let title = this.controller.getTitle();
2835            console.log("title: " + title);
2836          } catch (error) {
2837            let e:business_error.BusinessError = error as business_error.BusinessError;
2838            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2839          }
2840        })
2841      Web({ src: 'www.example.com', controller: this.controller })
2842    }
2843  }
2844}
2845```
2846
2847### getPageHeight
2848
2849getPageHeight(): number
2850
2851获取当前网页的页面高度。
2852
2853**系统能力:** SystemCapability.Web.Webview.Core
2854
2855**返回值:**
2856
2857| 类型   | 说明                 |
2858| ------ | -------------------- |
2859| number | 当前网页的页面高度。 |
2860
2861**错误码:**
2862
2863以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2864
2865| 错误码ID | 错误信息                                                     |
2866| -------- | ------------------------------------------------------------ |
2867| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2868
2869**示例:**
2870
2871```ts
2872// xxx.ets
2873import web_webview from '@ohos.web.webview';
2874import business_error from '@ohos.base';
2875
2876@Entry
2877@Component
2878struct WebComponent {
2879  controller: web_webview.WebviewController = new web_webview.WebviewController();
2880
2881  build() {
2882    Column() {
2883      Button('getPageHeight')
2884        .onClick(() => {
2885          try {
2886            let pageHeight = this.controller.getPageHeight();
2887            console.log("pageHeight : " + pageHeight);
2888          } catch (error) {
2889            let e:business_error.BusinessError = error as business_error.BusinessError;
2890            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2891          }
2892        })
2893      Web({ src: 'www.example.com', controller: this.controller })
2894    }
2895  }
2896}
2897```
2898
2899### storeWebArchive
2900
2901storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
2902
2903以回调方式异步保存当前页面。
2904
2905**系统能力:** SystemCapability.Web.Webview.Core
2906
2907**参数:**
2908
2909| 参数名   | 类型              | 必填 | 说明                                                         |
2910| -------- | --------------------- | ---- | ------------------------------------------------------------ |
2911| baseName | string                | 是   | 文件存储路径,该值不能为空。                                 |
2912| autoName | boolean               | 是   | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 |
2913| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
2914
2915**错误码:**
2916
2917以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
2918
2919| 错误码ID | 错误信息                                                     |
2920| -------- | ------------------------------------------------------------ |
2921| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2922| 17100003 | Invalid resource path or file type.                          |
2923
2924**示例:**
2925
2926```ts
2927// xxx.ets
2928import web_webview from '@ohos.web.webview'
2929import business_error from '@ohos.base'
2930
2931@Entry
2932@Component
2933struct WebComponent {
2934  controller: web_webview.WebviewController = new web_webview.WebviewController();
2935
2936  build() {
2937    Column() {
2938      Button('storeWebArchive')
2939        .onClick(() => {
2940          try {
2941            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
2942              if (error) {
2943                console.info(`save web archive error: ` + JSON.stringify(error))
2944                return;
2945              }
2946              if (filename != null) {
2947                console.info(`save web archive success: ${filename}`)
2948              }
2949            });
2950          } catch (error) {
2951            let e:business_error.BusinessError = error as business_error.BusinessError;
2952            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2953          }
2954        })
2955      Web({ src: 'www.example.com', controller: this.controller })
2956    }
2957  }
2958}
2959```
2960
2961### storeWebArchive
2962
2963storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
2964
2965以Promise方式异步保存当前页面。
2966
2967**系统能力:** SystemCapability.Web.Webview.Core
2968
2969**参数:**
2970
2971| 参数名   | 类型 | 必填 | 说明                                                         |
2972| -------- | -------- | ---- | ------------------------------------------------------------ |
2973| baseName | string   | 是   | 文件存储路径,该值不能为空。                                 |
2974| autoName | boolean  | 是   | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 |
2975
2976**返回值:**
2977
2978| 类型            | 说明                                                  |
2979| --------------- | ----------------------------------------------------- |
2980| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
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| 17100003 | Invalid resource path or file type.                          |
2990
2991**示例:**
2992
2993```ts
2994// xxx.ets
2995import web_webview from '@ohos.web.webview'
2996import business_error from '@ohos.base'
2997
2998@Entry
2999@Component
3000struct WebComponent {
3001  controller: web_webview.WebviewController = new web_webview.WebviewController();
3002
3003  build() {
3004    Column() {
3005      Button('storeWebArchive')
3006        .onClick(() => {
3007          try {
3008            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3009              .then(filename => {
3010                if (filename != null) {
3011                  console.info(`save web archive success: ${filename}`)
3012                }
3013              })
3014              .catch((error:business_error.BusinessError) => {
3015                console.log('error: ' + JSON.stringify(error));
3016              })
3017          } catch (error) {
3018            let e:business_error.BusinessError = error as business_error.BusinessError;
3019            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3020          }
3021        })
3022      Web({ src: 'www.example.com', controller: this.controller })
3023    }
3024  }
3025}
3026```
3027
3028### getUrl
3029
3030getUrl(): string
3031
3032获取当前页面的url地址。
3033
3034**系统能力:** SystemCapability.Web.Webview.Core
3035
3036**返回值:**
3037
3038| 类型   | 说明                |
3039| ------ | ------------------- |
3040| string | 当前页面的url地址。 |
3041
3042**错误码:**
3043
3044以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3045
3046| 错误码ID | 错误信息                                                     |
3047| -------- | ------------------------------------------------------------ |
3048| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3049
3050**示例:**
3051
3052```ts
3053// xxx.ets
3054import web_webview from '@ohos.web.webview';
3055import business_error from '@ohos.base';
3056
3057@Entry
3058@Component
3059struct WebComponent {
3060  controller: web_webview.WebviewController = new web_webview.WebviewController();
3061
3062  build() {
3063    Column() {
3064      Button('getUrl')
3065        .onClick(() => {
3066          try {
3067            let url = this.controller.getUrl();
3068            console.log("url: " + url);
3069          } catch (error) {
3070            let e:business_error.BusinessError = error as business_error.BusinessError;
3071            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3072          }
3073        })
3074      Web({ src: 'www.example.com', controller: this.controller })
3075    }
3076  }
3077}
3078```
3079
3080### stop
3081
3082stop(): void
3083
3084停止页面加载。
3085
3086**系统能力:** SystemCapability.Web.Webview.Core
3087
3088**错误码:**
3089
3090以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3091
3092| 错误码ID | 错误信息                                                     |
3093| -------- | ------------------------------------------------------------ |
3094| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3095
3096**示例:**
3097
3098```ts
3099// xxx.ets
3100import web_webview from '@ohos.web.webview';
3101import business_error from '@ohos.base';
3102
3103@Entry
3104@Component
3105struct WebComponent {
3106  controller: web_webview.WebviewController = new web_webview.WebviewController();
3107
3108  build() {
3109    Column() {
3110      Button('stop')
3111        .onClick(() => {
3112          try {
3113            this.controller.stop();
3114          } catch (error) {
3115            let e:business_error.BusinessError = error as business_error.BusinessError;
3116            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3117          }
3118        });
3119      Web({ src: 'www.example.com', controller: this.controller })
3120    }
3121  }
3122}
3123```
3124
3125### backOrForward
3126
3127backOrForward(step: number): void
3128
3129按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3130
3131前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3132
3133**系统能力:** SystemCapability.Web.Webview.Core
3134
3135**参数:**
3136
3137| 参数名 | 类型 | 必填 | 说明               |
3138| ------ | -------- | ---- | ---------------------- |
3139| step   | number   | 是   | 需要前进或后退的步长。 |
3140
3141**错误码:**
3142
3143以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3144
3145| 错误码ID | 错误信息                                                     |
3146| -------- | ------------------------------------------------------------ |
3147| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3148
3149**示例:**
3150
3151```ts
3152// xxx.ets
3153import web_webview from '@ohos.web.webview';
3154import business_error from '@ohos.base';
3155
3156@Entry
3157@Component
3158struct WebComponent {
3159  controller: web_webview.WebviewController = new web_webview.WebviewController();
3160  @State step: number = -2;
3161
3162  build() {
3163    Column() {
3164      Button('backOrForward')
3165        .onClick(() => {
3166          try {
3167            this.controller.backOrForward(this.step);
3168          } catch (error) {
3169            let e:business_error.BusinessError = error as business_error.BusinessError;
3170            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3171          }
3172        })
3173      Web({ src: 'www.example.com', controller: this.controller })
3174    }
3175  }
3176}
3177```
3178
3179### scrollTo
3180
3181scrollTo(x:number, y:number): void
3182
3183将页面滚动到指定的绝对位置。
3184
3185**系统能力:** SystemCapability.Web.Webview.Core
3186
3187**参数:**
3188
3189| 参数名 | 类型 | 必填 | 说明               |
3190| ------ | -------- | ---- | ---------------------- |
3191| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。 |
3192| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。|
3193
3194**错误码:**
3195
3196以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3197
3198| 错误码ID | 错误信息                                                     |
3199| -------- | ------------------------------------------------------------ |
3200| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3201
3202**示例:**
3203
3204```ts
3205// xxx.ets
3206import web_webview from '@ohos.web.webview';
3207import business_error from '@ohos.base';
3208
3209@Entry
3210@Component
3211struct WebComponent {
3212  controller: web_webview.WebviewController = new web_webview.WebviewController();
3213
3214  build() {
3215    Column() {
3216      Button('scrollTo')
3217        .onClick(() => {
3218          try {
3219            this.controller.scrollTo(50, 50);
3220          } catch (error) {
3221            let e:business_error.BusinessError = error as business_error.BusinessError;
3222            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3223          }
3224        })
3225      Web({ src: $rawfile('index.html'), controller: this.controller })
3226    }
3227  }
3228}
3229```
3230
3231加载的html文件。
3232```html
3233<!--index.html-->
3234<!DOCTYPE html>
3235<html>
3236<head>
3237    <title>Demo</title>
3238    <style>
3239        body {
3240            width:3000px;
3241            height:3000px;
3242            padding-right:170px;
3243            padding-left:170px;
3244            border:5px solid blueviolet
3245        }
3246    </style>
3247</head>
3248<body>
3249Scroll Test
3250</body>
3251</html>
3252```
3253
3254### scrollBy
3255
3256scrollBy(deltaX:number, deltaY:number): void
3257
3258将页面滚动指定的偏移量。
3259
3260**系统能力:** SystemCapability.Web.Webview.Core
3261
3262**参数:**
3263
3264| 参数名 | 类型 | 必填 | 说明               |
3265| ------ | -------- | ---- | ---------------------- |
3266| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3267| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3268
3269**错误码:**
3270
3271以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3272
3273| 错误码ID | 错误信息                                                     |
3274| -------- | ------------------------------------------------------------ |
3275| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3276
3277**示例:**
3278
3279```ts
3280// xxx.ets
3281import web_webview from '@ohos.web.webview';
3282import business_error from '@ohos.base';
3283
3284@Entry
3285@Component
3286struct WebComponent {
3287  controller: web_webview.WebviewController = new web_webview.WebviewController();
3288
3289  build() {
3290    Column() {
3291      Button('scrollBy')
3292        .onClick(() => {
3293          try {
3294            this.controller.scrollBy(50, 50);
3295          } catch (error) {
3296            let e:business_error.BusinessError = error as business_error.BusinessError;
3297            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3298          }
3299        })
3300      Web({ src: $rawfile('index.html'), controller: this.controller })
3301    }
3302  }
3303}
3304```
3305
3306加载的html文件。
3307```html
3308<!--index.html-->
3309<!DOCTYPE html>
3310<html>
3311<head>
3312    <title>Demo</title>
3313    <style>
3314        body {
3315            width:3000px;
3316            height:3000px;
3317            padding-right:170px;
3318            padding-left:170px;
3319            border:5px solid blueviolet
3320        }
3321    </style>
3322</head>
3323<body>
3324Scroll Test
3325</body>
3326</html>
3327```
3328
3329### slideScroll
3330
3331slideScroll(vx:number, vy:number): void
3332
3333按照指定速度模拟对页面的轻扫滚动动作。
3334
3335**系统能力:** SystemCapability.Web.Webview.Core
3336
3337**参数:**
3338
3339| 参数名 | 类型 | 必填 | 说明               |
3340| ------ | -------- | ---- | ---------------------- |
3341| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。 |
3342| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。 |
3343
3344**错误码:**
3345
3346以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3347
3348| 错误码ID | 错误信息                                                     |
3349| -------- | ------------------------------------------------------------ |
3350| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3351
3352**示例:**
3353
3354```ts
3355// xxx.ets
3356import web_webview from '@ohos.web.webview';
3357import business_error from '@ohos.base';
3358
3359@Entry
3360@Component
3361struct WebComponent {
3362  controller: web_webview.WebviewController = new web_webview.WebviewController();
3363
3364  build() {
3365    Column() {
3366      Button('slideScroll')
3367        .onClick(() => {
3368          try {
3369            this.controller.slideScroll(500, 500);
3370          } catch (error) {
3371            let e:business_error.BusinessError = error as business_error.BusinessError;
3372            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3373          }
3374        })
3375      Web({ src: $rawfile('index.html'), controller: this.controller })
3376    }
3377  }
3378}
3379```
3380
3381加载的html文件。
3382```html
3383<!--index.html-->
3384<!DOCTYPE html>
3385<html>
3386<head>
3387    <title>Demo</title>
3388    <style>
3389        body {
3390            width:3000px;
3391            height:3000px;
3392            padding-right:170px;
3393            padding-left:170px;
3394            border:5px solid blueviolet
3395        }
3396    </style>
3397</head>
3398<body>
3399Scroll Test
3400</body>
3401</html>
3402```
3403
3404### getOriginalUrl
3405
3406getOriginalUrl(): string
3407
3408获取当前页面的原始url地址。
3409
3410**系统能力:** SystemCapability.Web.Webview.Core
3411
3412**返回值:**
3413
3414| 类型   | 说明                    |
3415| ------ | ----------------------- |
3416| string | 当前页面的原始url地址。 |
3417
3418**错误码:**
3419
3420以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3421
3422| 错误码ID | 错误信息                                                     |
3423| -------- | ------------------------------------------------------------ |
3424| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3425
3426**示例:**
3427
3428```ts
3429// xxx.ets
3430import web_webview from '@ohos.web.webview';
3431import business_error from '@ohos.base';
3432
3433@Entry
3434@Component
3435struct WebComponent {
3436  controller: web_webview.WebviewController = new web_webview.WebviewController();
3437
3438  build() {
3439    Column() {
3440      Button('getOrgUrl')
3441        .onClick(() => {
3442          try {
3443            let url = this.controller.getOriginalUrl();
3444            console.log("original url: " + url);
3445          } catch (error) {
3446            let e:business_error.BusinessError = error as business_error.BusinessError;
3447            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3448          }
3449        })
3450      Web({ src: 'www.example.com', controller: this.controller })
3451    }
3452  }
3453}
3454```
3455
3456### getFavicon
3457
3458getFavicon(): image.PixelMap
3459
3460获取页面的favicon图标。
3461
3462**系统能力:** SystemCapability.Web.Webview.Core
3463
3464**返回值:**
3465
3466| 类型                                   | 说明                            |
3467| -------------------------------------- | ------------------------------- |
3468| [PixelMap](js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
3469
3470**错误码:**
3471
3472以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3473
3474| 错误码ID | 错误信息                                                     |
3475| -------- | ------------------------------------------------------------ |
3476| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3477
3478**示例:**
3479
3480```ts
3481// xxx.ets
3482import web_webview from '@ohos.web.webview';
3483import image from "@ohos.multimedia.image";
3484import business_error from '@ohos.base';
3485
3486@Entry
3487@Component
3488struct WebComponent {
3489  controller: web_webview.WebviewController = new web_webview.WebviewController();
3490  @State pixelmap: image.PixelMap | undefined = undefined;
3491
3492  build() {
3493    Column() {
3494      Button('getFavicon')
3495        .onClick(() => {
3496          try {
3497            this.pixelmap = this.controller.getFavicon();
3498          } catch (error) {
3499            let e:business_error.BusinessError = error as business_error.BusinessError;
3500            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3501          }
3502        })
3503      Web({ src: 'www.example.com', controller: this.controller })
3504    }
3505  }
3506}
3507```
3508
3509### setNetworkAvailable
3510
3511setNetworkAvailable(enable: boolean): void
3512
3513设置JavaScript中的window.navigator.onLine属性。
3514
3515**系统能力:** SystemCapability.Web.Webview.Core
3516
3517**参数:**
3518
3519| 参数名 | 类型    | 必填 | 说明                              |
3520| ------ | ------- | ---- | --------------------------------- |
3521| enable | boolean | 是   | 是否使能window.navigator.onLine。 |
3522
3523**错误码:**
3524
3525以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3526
3527| 错误码ID | 错误信息                                                     |
3528| -------- | ------------------------------------------------------------ |
3529| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3530
3531**示例:**
3532
3533```ts
3534// xxx.ets
3535import web_webview from '@ohos.web.webview';
3536import business_error from '@ohos.base';
3537
3538@Entry
3539@Component
3540struct WebComponent {
3541  controller: web_webview.WebviewController = new web_webview.WebviewController();
3542
3543  build() {
3544    Column() {
3545      Button('setNetworkAvailable')
3546        .onClick(() => {
3547          try {
3548            this.controller.setNetworkAvailable(true);
3549          } catch (error) {
3550            let e:business_error.BusinessError = error as business_error.BusinessError;
3551            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3552          }
3553        })
3554      Web({ src: $rawfile('index.html'), controller: this.controller })
3555    }
3556  }
3557}
3558```
3559
3560加载的html文件。
3561```html
3562<!-- index.html -->
3563<!DOCTYPE html>
3564<html>
3565<body>
3566<h1>online 属性</h1>
3567<p id="demo"></p>
3568<button onclick="func()">click</button>
3569<script>
3570    let online = navigator.onLine;
3571    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
3572
3573    function func(){
3574      var online = navigator.onLine;
3575      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
3576    }
3577</script>
3578</body>
3579</html>
3580```
3581
3582### hasImage
3583
3584hasImage(callback: AsyncCallback\<boolean>): void
3585
3586通过Callback方式异步查找当前页面是否存在图像。
3587
3588**系统能力:** SystemCapability.Web.Webview.Core
3589
3590**参数:**
3591
3592| 参数名   | 类型                    | 必填 | 说明                       |
3593| -------- | ----------------------- | ---- | -------------------------- |
3594| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。 |
3595
3596**错误码:**
3597
3598以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3599
3600| 错误码ID | 错误信息                                                     |
3601| -------- | ------------------------------------------------------------ |
3602| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
3603
3604**示例:**
3605
3606```ts
3607// xxx.ets
3608import web_webview from '@ohos.web.webview';
3609import business_error from '@ohos.base';
3610
3611@Entry
3612@Component
3613struct WebComponent {
3614  controller: web_webview.WebviewController = new web_webview.WebviewController();
3615
3616  build() {
3617    Column() {
3618      Button('hasImageCb')
3619        .onClick(() => {
3620          try {
3621            this.controller.hasImage((error, data) => {
3622              if (error) {
3623                console.info(`hasImage error: ` + JSON.stringify(error))
3624                return;
3625              }
3626              console.info("hasImage: " + data);
3627            });
3628          } catch (error) {
3629            let e:business_error.BusinessError = error as business_error.BusinessError;
3630            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3631          }
3632        })
3633      Web({ src: 'www.example.com', controller: this.controller })
3634    }
3635  }
3636}
3637```
3638
3639### hasImage
3640
3641hasImage(): Promise\<boolean>
3642
3643通过Promise方式异步查找当前页面是否存在图像。
3644
3645**系统能力:** SystemCapability.Web.Webview.Core
3646
3647**返回值:**
3648
3649| 类型              | 说明                                    |
3650| ----------------- | --------------------------------------- |
3651| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 |
3652
3653**错误码:**
3654
3655以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3656
3657| 错误码ID | 错误信息                                                     |
3658| -------- | ------------------------------------------------------------ |
3659| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
3660
3661**示例:**
3662
3663```ts
3664// xxx.ets
3665import web_webview from '@ohos.web.webview';
3666import business_error from '@ohos.base';
3667
3668@Entry
3669@Component
3670struct WebComponent {
3671  controller: web_webview.WebviewController = new web_webview.WebviewController();
3672
3673  build() {
3674    Column() {
3675      Button('hasImagePm')
3676        .onClick(() => {
3677          try {
3678            this.controller.hasImage().then((data) => {
3679              console.info('hasImage: ' + data);
3680            })
3681            .catch((error:business_error.BusinessError) => {
3682              console.error("error: " + error);
3683            })
3684          } catch (error) {
3685            let e:business_error.BusinessError = error as business_error.BusinessError;
3686            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3687          }
3688        })
3689      Web({ src: 'www.example.com', controller: this.controller })
3690    }
3691  }
3692}
3693```
3694
3695### removeCache
3696
3697removeCache(clearRom: boolean): void
3698
3699清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
3700
3701**系统能力:** SystemCapability.Web.Webview.Core
3702
3703**参数:**
3704
3705| 参数名   | 类型    | 必填 | 说明                                                     |
3706| -------- | ------- | ---- | -------------------------------------------------------- |
3707| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
3708
3709**错误码:**
3710
3711以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3712
3713| 错误码ID | 错误信息                                                     |
3714| -------- | ------------------------------------------------------------ |
3715| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3716
3717**示例:**
3718
3719```ts
3720// xxx.ets
3721import web_webview from '@ohos.web.webview';
3722import business_error from '@ohos.base';
3723
3724@Entry
3725@Component
3726struct WebComponent {
3727  controller: web_webview.WebviewController = new web_webview.WebviewController();
3728
3729  build() {
3730    Column() {
3731      Button('removeCache')
3732        .onClick(() => {
3733          try {
3734            this.controller.removeCache(false);
3735          } catch (error) {
3736            let e:business_error.BusinessError = error as business_error.BusinessError;
3737            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3738          }
3739        })
3740      Web({ src: 'www.example.com', controller: this.controller })
3741    }
3742  }
3743}
3744```
3745
3746### pageUp
3747
3748pageUp(top:boolean): void
3749
3750将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
3751
3752**系统能力:** SystemCapability.Web.Webview.Core
3753
3754**参数:**
3755
3756| 参数名 | 类型    | 必填 | 说明                                                         |
3757| ------ | ------- | ---- | ------------------------------------------------------------ |
3758| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
3759
3760**错误码:**
3761
3762以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3763
3764| 错误码ID | 错误信息                                                     |
3765| -------- | ------------------------------------------------------------ |
3766| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3767
3768**示例:**
3769
3770```ts
3771// xxx.ets
3772import web_webview from '@ohos.web.webview';
3773import business_error from '@ohos.base';
3774
3775@Entry
3776@Component
3777struct WebComponent {
3778  controller: web_webview.WebviewController = new web_webview.WebviewController();
3779
3780  build() {
3781    Column() {
3782      Button('pageUp')
3783        .onClick(() => {
3784          try {
3785            this.controller.pageUp(false);
3786          } catch (error) {
3787            let e:business_error.BusinessError = error as business_error.BusinessError;
3788            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3789          }
3790        })
3791      Web({ src: 'www.example.com', controller: this.controller })
3792    }
3793  }
3794}
3795```
3796
3797### pageDown
3798
3799pageDown(bottom:boolean): void
3800
3801将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
3802
3803**系统能力:** SystemCapability.Web.Webview.Core
3804
3805**参数:**
3806
3807| 参数名 | 类型    | 必填 | 说明                                                         |
3808| ------ | ------- | ---- | ------------------------------------------------------------ |
3809| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
3810
3811**错误码:**
3812
3813以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3814
3815| 错误码ID | 错误信息                                                     |
3816| -------- | ------------------------------------------------------------ |
3817| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3818
3819**示例:**
3820
3821```ts
3822// xxx.ets
3823import web_webview from '@ohos.web.webview';
3824import business_error from '@ohos.base';
3825
3826@Entry
3827@Component
3828struct WebComponent {
3829  controller: web_webview.WebviewController = new web_webview.WebviewController();
3830
3831  build() {
3832    Column() {
3833      Button('pageDown')
3834        .onClick(() => {
3835          try {
3836            this.controller.pageDown(false);
3837          } catch (error) {
3838            let e:business_error.BusinessError = error as business_error.BusinessError;
3839            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3840          }
3841        })
3842      Web({ src: 'www.example.com', controller: this.controller })
3843    }
3844  }
3845}
3846```
3847
3848### getBackForwardEntries
3849
3850getBackForwardEntries(): BackForwardList
3851
3852获取当前Webview的历史信息列表。
3853
3854**系统能力:** SystemCapability.Web.Webview.Core
3855
3856**返回值:**
3857
3858| 类型                                | 说明                        |
3859| ----------------------------------- | --------------------------- |
3860| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
3861
3862**错误码:**
3863
3864以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3865
3866| 错误码ID | 错误信息                                                     |
3867| -------- | ------------------------------------------------------------ |
3868| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3869
3870**示例:**
3871
3872```ts
3873// xxx.ets
3874import web_webview from '@ohos.web.webview';
3875import business_error from '@ohos.base';
3876
3877@Entry
3878@Component
3879struct WebComponent {
3880  controller: web_webview.WebviewController = new web_webview.WebviewController();
3881
3882  build() {
3883    Column() {
3884      Button('getBackForwardEntries')
3885        .onClick(() => {
3886          try {
3887            let list = this.controller.getBackForwardEntries()
3888          } catch (error) {
3889            let e:business_error.BusinessError = error as business_error.BusinessError;
3890            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3891          }
3892        })
3893      Web({ src: 'www.example.com', controller: this.controller })
3894    }
3895  }
3896}
3897```
3898
3899### serializeWebState
3900
3901serializeWebState(): Uint8Array
3902
3903将当前Webview的页面状态历史记录信息序列化。
3904
3905**系统能力:** SystemCapability.Web.Webview.Core
3906
3907**返回值:**
3908
3909| 类型       | 说明                                          |
3910| ---------- | --------------------------------------------- |
3911| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
3912
3913**错误码:**
3914
3915以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3916
3917| 错误码ID | 错误信息                                                     |
3918| -------- | ------------------------------------------------------------ |
3919| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3920
3921**示例:**
3922
39231.对文件的操作需要导入文件管理模块,详情请参考[文件管理](./js-apis-file-fs.md)。
3924```ts
3925// xxx.ets
3926import web_webview from '@ohos.web.webview';
3927import fs from '@ohos.file.fs';
3928import business_error from '@ohos.base';
3929
3930@Entry
3931@Component
3932struct WebComponent {
3933  controller: web_webview.WebviewController = new web_webview.WebviewController();
3934
3935  build() {
3936    Column() {
3937      Button('serializeWebState')
3938        .onClick(() => {
3939          try {
3940            let state = this.controller.serializeWebState();
3941            let path:string | undefined = AppStorage.get("cacheDir");
3942            if (path) {
3943              path += '/WebState';
3944              // 以同步方法打开文件。
3945              let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
3946              fs.writeSync(file.fd, state.buffer);
3947              fs.closeSync(file.fd);
3948            }
3949          } catch (error) {
3950            let e:business_error.BusinessError = error as business_error.BusinessError;
3951            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3952          }
3953        })
3954      Web({ src: 'www.example.com', controller: this.controller })
3955    }
3956  }
3957}
3958```
3959
39602.修改EntryAbility.ts3961获取应用缓存文件路径。
3962```ts
3963// xxx.ts
3964import UIAbility from '@ohos.app.ability.UIAbility';
3965import web_webview from '@ohos.web.webview';
3966import AbilityConstant from '@ohos.app.ability.AbilityConstant';
3967import Want from '@ohos.app.ability.Want';
3968
3969export default class EntryAbility extends UIAbility {
3970    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
3971        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
3972        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
3973    }
3974}
3975```
3976
3977### restoreWebState
3978
3979restoreWebState(state: Uint8Array): void
3980
3981当前Webview从序列化数据中恢复页面状态历史记录。
3982
3983**系统能力:** SystemCapability.Web.Webview.Core
3984
3985**参数:**
3986
3987| 参数名 | 类型       | 必填 | 说明                         |
3988| ------ | ---------- | ---- | ---------------------------- |
3989| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
3990
3991**错误码:**
3992
3993以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
3994
3995| 错误码ID | 错误信息                                                     |
3996| -------- | ------------------------------------------------------------ |
3997| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3998
3999**示例:**
4000
40011.对文件的操作需要导入文件管理模块,详情请参考[文件管理](./js-apis-file-fs.md)。
4002```ts
4003// xxx.ets
4004import web_webview from '@ohos.web.webview';
4005import fs from '@ohos.file.fs';
4006import business_error from '@ohos.base';
4007
4008@Entry
4009@Component
4010struct WebComponent {
4011  controller: web_webview.WebviewController = new web_webview.WebviewController();
4012
4013  build() {
4014    Column() {
4015      Button('RestoreWebState')
4016        .onClick(() => {
4017          try {
4018            let path:string | undefined = AppStorage.get("cacheDir");
4019            if (path) {
4020              path += '/WebState';
4021              // 以同步方法打开文件。
4022              let file = fs.openSync(path, fs.OpenMode.READ_WRITE);
4023              let stat = fs.statSync(path);
4024              let size = stat.size;
4025              let buf = new ArrayBuffer(size);
4026              fs.read(file.fd, buf, (err, readLen) => {
4027                if (err) {
4028                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4029                } else {
4030                  console.info("read file data succeed");
4031                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4032                  fs.closeSync(file);
4033                }
4034              });
4035            }
4036          } catch (error) {
4037            let e:business_error.BusinessError = error as business_error.BusinessError;
4038            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4039          }
4040        })
4041      Web({ src: 'www.example.com', controller: this.controller })
4042    }
4043  }
4044}
4045```
4046
40472.修改EntryAbility.ts4048获取应用缓存文件路径。
4049```ts
4050// xxx.ts
4051import UIAbility from '@ohos.app.ability.UIAbility';
4052import web_webview from '@ohos.web.webview';
4053import AbilityConstant from '@ohos.app.ability.AbilityConstant';
4054import Want from '@ohos.app.ability.Want';
4055
4056export default class EntryAbility extends UIAbility {
4057    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4058        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4059        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4060    }
4061}
4062```
4063
4064### customizeSchemes
4065
4066static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4067
4068配置Web自定义协议请求的权限。建议在任何Web组件初始化之前进行调用。
4069
4070**系统能力:** SystemCapability.Web.Webview.Core
4071
4072**参数:**
4073
4074| 参数名   | 类型    | 必填 | 说明                      |
4075| -------- | ------- | ---- | -------------------------------------- |
4076| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4077
4078**示例:**
4079
4080```ts
4081// xxx.ets
4082import web_webview from '@ohos.web.webview';
4083import business_error from '@ohos.base';
4084
4085@Entry
4086@Component
4087struct WebComponent {
4088  controller: web_webview.WebviewController = new web_webview.WebviewController();
4089  responseweb: WebResourceResponse = new WebResourceResponse()
4090  scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true}
4091  scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true}
4092  scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true}
4093
4094  aboutToAppear():void {
4095    try {
4096      web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3])
4097    } catch(error) {
4098      let e:business_error.BusinessError = error as business_error.BusinessError;
4099      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4100    }
4101  }
4102
4103  build() {
4104    Column() {
4105      Web({ src: 'www.example.com', controller: this.controller })
4106        .onInterceptRequest((event) => {
4107          if (event) {
4108            console.log('url:' + event.request.getRequestUrl())
4109          }
4110          return this.responseweb
4111        })
4112    }
4113  }
4114}
4115```
4116
4117### getCertificate<sup>10+</sup>
4118
4119getCertificate(): Promise<Array<cert.X509Cert>>
4120
4121获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](./js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4122
4123**系统能力:** SystemCapability.Web.Webview.Core
4124
4125**返回值:**
4126
4127| 类型       | 说明                                          |
4128| ---------- | --------------------------------------------- |
4129| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4130
4131**错误码:**
4132
4133以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
4134
4135| 错误码ID | 错误信息                                                     |
4136| -------- | ------------------------------------------------------------ |
4137| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4138
4139**示例:**
4140
4141```ts
4142// xxx.ets
4143import web_webview from '@ohos.web.webview';
4144import business_error from '@ohos.base';
4145import cert from '@ohos.security.cert';
4146
4147function Uint8ArrayToString(dataArray:Uint8Array) {
4148  let dataString = ''
4149  for (let i = 0; i < dataArray.length; i++) {
4150    dataString += String.fromCharCode(dataArray[i])
4151  }
4152  return dataString
4153}
4154
4155function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) {
4156  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4157  for (let i = 0; i < x509CertArray.length; i++) {
4158    res += ', index = ' + i + ', issuer name = '
4159    + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4160    + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4161    + x509CertArray[i].getNotBeforeTime()
4162    + ', valid end = ' + x509CertArray[i].getNotAfterTime()
4163  }
4164  return res
4165}
4166
4167@Entry
4168@Component
4169struct Index {
4170  // outputStr在UI界面显示调试信息
4171  @State outputStr: string = ''
4172  webviewCtl: web_webview.WebviewController = new web_webview.WebviewController();
4173
4174  build() {
4175    Row() {
4176      Column() {
4177        List({space: 20, initialIndex: 0}) {
4178          ListItem() {
4179            Button() {
4180              Text('load bad ssl')
4181                .fontSize(10)
4182                .fontWeight(FontWeight.Bold)
4183            }
4184            .type(ButtonType.Capsule)
4185            .onClick(() => {
4186              // 加载一个过期的证书网站,查看获取到的证书信息
4187              this.webviewCtl.loadUrl('https://expired.badssl.com')
4188            })
4189            .height(50)
4190          }
4191
4192          ListItem() {
4193            Button() {
4194              Text('load example')
4195                .fontSize(10)
4196                .fontWeight(FontWeight.Bold)
4197            }
4198            .type(ButtonType.Capsule)
4199            .onClick(() => {
4200              // 加载一个https网站,查看网站的证书信息
4201              this.webviewCtl.loadUrl('https://www.example.com')
4202            })
4203            .height(50)
4204          }
4205
4206          ListItem() {
4207            Button() {
4208              Text('getCertificate Promise')
4209                .fontSize(10)
4210                .fontWeight(FontWeight.Bold)
4211            }
4212            .type(ButtonType.Capsule)
4213            .onClick(() => {
4214              try {
4215                this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => {
4216                  this.outputStr = ParseX509CertInfo(x509CertArray);
4217                })
4218              } catch (error) {
4219                let e:business_error.BusinessError = error as business_error.BusinessError;
4220                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4221              }
4222            })
4223            .height(50)
4224          }
4225
4226          ListItem() {
4227            Button() {
4228              Text('getCertificate AsyncCallback')
4229                .fontSize(10)
4230                .fontWeight(FontWeight.Bold)
4231            }
4232            .type(ButtonType.Capsule)
4233            .onClick(() => {
4234              try {
4235                this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => {
4236                  if (error) {
4237                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4238                  } else {
4239                    this.outputStr = ParseX509CertInfo(x509CertArray);
4240                  }
4241                })
4242              } catch (error) {
4243                let e:business_error.BusinessError = error as business_error.BusinessError;
4244                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4245              }
4246            })
4247            .height(50)
4248          }
4249        }
4250        .listDirection(Axis.Horizontal)
4251        .height('10%')
4252
4253        Text(this.outputStr)
4254          .width('100%')
4255          .fontSize(10)
4256
4257        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4258          .fileAccess(true)
4259          .javaScriptAccess(true)
4260          .domStorageAccess(true)
4261          .onlineImageAccess(true)
4262          .onPageEnd((e) => {
4263            if(e) {
4264              this.outputStr = 'onPageEnd : url = ' + e.url
4265            }
4266          })
4267          .onSslErrorEventReceive((e) => {
4268            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4269            e.handler.handleConfirm()
4270          })
4271          .width('100%')
4272          .height('70%')
4273      }
4274      .height('100%')
4275    }
4276  }
4277}
4278```
4279
4280### getCertificate<sup>10+</sup>
4281
4282getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4283
4284获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](./js-apis-cert.md)),便于开发者展示网站证书信息。
4285
4286**系统能力:** SystemCapability.Web.Webview.Core
4287
4288**参数:**
4289
4290| 参数名   | 类型                         | 必填 | 说明                                     |
4291| -------- | ---------------------------- | ---- | ---------------------------------------- |
4292| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4293
4294**错误码:**
4295
4296以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
4297
4298| 错误码ID | 错误信息                                                     |
4299| -------- | ------------------------------------------------------------ |
4300| 17100001 | Init error. The WebviewController must be associated with a Web compoent. |
4301
4302**示例:**
4303
4304```ts
4305// xxx.ets
4306import web_webview from '@ohos.web.webview';
4307import business_error from '@ohos.base';
4308import cert from '@ohos.security.cert';
4309
4310function Uint8ArrayToString(dataArray:Uint8Array) {
4311  let dataString = ''
4312  for (let i = 0; i < dataArray.length; i++) {
4313    dataString += String.fromCharCode(dataArray[i])
4314  }
4315  return dataString
4316}
4317
4318function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) {
4319  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4320  for (let i = 0; i < x509CertArray.length; i++) {
4321    res += ', index = ' + i + ', issuer name = '
4322    + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4323    + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4324    + x509CertArray[i].getNotBeforeTime()
4325    + ', valid end = ' + x509CertArray[i].getNotAfterTime()
4326  }
4327  return res
4328}
4329
4330@Entry
4331@Component
4332struct Index {
4333  // outputStr在UI界面显示调试信息
4334  @State outputStr: string = ''
4335  webviewCtl: web_webview.WebviewController = new web_webview.WebviewController();
4336
4337  build() {
4338    Row() {
4339      Column() {
4340        List({space: 20, initialIndex: 0}) {
4341          ListItem() {
4342            Button() {
4343              Text('load bad ssl')
4344                .fontSize(10)
4345                .fontWeight(FontWeight.Bold)
4346            }
4347            .type(ButtonType.Capsule)
4348            .onClick(() => {
4349              // 加载一个过期的证书网站,查看获取到的证书信息
4350              this.webviewCtl.loadUrl('https://expired.badssl.com')
4351            })
4352            .height(50)
4353          }
4354
4355          ListItem() {
4356            Button() {
4357              Text('load example')
4358                .fontSize(10)
4359                .fontWeight(FontWeight.Bold)
4360            }
4361            .type(ButtonType.Capsule)
4362            .onClick(() => {
4363              // 加载一个https网站,查看网站的证书信息
4364              this.webviewCtl.loadUrl('https://www.example.com')
4365            })
4366            .height(50)
4367          }
4368
4369          ListItem() {
4370            Button() {
4371              Text('getCertificate Promise')
4372                .fontSize(10)
4373                .fontWeight(FontWeight.Bold)
4374            }
4375            .type(ButtonType.Capsule)
4376            .onClick(() => {
4377              try {
4378                this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => {
4379                  this.outputStr = ParseX509CertInfo(x509CertArray);
4380                })
4381              } catch (error) {
4382                let e:business_error.BusinessError = error as business_error.BusinessError;
4383                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4384              }
4385            })
4386            .height(50)
4387          }
4388
4389          ListItem() {
4390            Button() {
4391              Text('getCertificate AsyncCallback')
4392                .fontSize(10)
4393                .fontWeight(FontWeight.Bold)
4394            }
4395            .type(ButtonType.Capsule)
4396            .onClick(() => {
4397              try {
4398                this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => {
4399                  if (error) {
4400                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4401                  } else {
4402                    this.outputStr = ParseX509CertInfo(x509CertArray);
4403                  }
4404                })
4405              } catch (error) {
4406                let e:business_error.BusinessError = error as business_error.BusinessError;
4407                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4408              }
4409            })
4410            .height(50)
4411          }
4412        }
4413        .listDirection(Axis.Horizontal)
4414        .height('10%')
4415
4416        Text(this.outputStr)
4417          .width('100%')
4418          .fontSize(10)
4419
4420        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4421          .fileAccess(true)
4422          .javaScriptAccess(true)
4423          .domStorageAccess(true)
4424          .onlineImageAccess(true)
4425          .onPageEnd((e) => {
4426            if (e) {
4427              this.outputStr = 'onPageEnd : url = ' + e.url
4428            }
4429          })
4430          .onSslErrorEventReceive((e) => {
4431            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4432            e.handler.handleConfirm()
4433          })
4434          .width('100%')
4435          .height('70%')
4436      }
4437      .height('100%')
4438    }
4439  }
4440}
4441```
4442
4443### setAudioMuted<sup>10+</sup>
4444
4445setAudioMuted(mute: boolean): void
4446
4447设置网页静音。
4448
4449**系统能力:** SystemCapability.Web.Webview.Core
4450
4451**参数:**
4452
4453| 参数名   | 类型    | 必填 | 说明                      |
4454| -------- | ------- | ---- | -------------------------------------- |
4455| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
4456
4457**错误码:**
4458
4459以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
4460
4461| 错误码ID | 错误信息                                                     |
4462| -------- | ------------------------------------------------------------ |
4463| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4464
4465**示例:**
4466
4467```ts
4468// xxx.ets
4469import web_webview from '@ohos.web.webview'
4470
4471@Entry
4472@Component
4473struct WebComponent {
4474  controller: web_webview.WebviewController = new web_webview.WebviewController()
4475  @State muted: boolean = false
4476  build() {
4477    Column() {
4478      Button("Toggle Mute")
4479        .onClick(event => {
4480          this.muted = !this.muted
4481          this.controller.setAudioMuted(this.muted)
4482        })
4483      Web({ src: 'www.example.com', controller: this.controller })
4484    }
4485  }
4486}
4487```
4488
4489### prefetchPage<sup>10+</sup>
4490
4491prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
4492
4493在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
4494
4495**系统能力:** SystemCapability.Web.Webview.Core
4496
4497**参数:**
4498
4499| 参数名             | 类型                             | 必填  | 说明                      |
4500| ------------------| --------------------------------| ---- | ------------- |
4501| url               | string                          | 是    | 预加载的url。|
4502| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
4503
4504**错误码:**
4505
4506以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md).
4507
4508| 错误码ID  | 错误信息                                                      |
4509| -------- | ------------------------------------------------------------ |
4510| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4511| 17100002 | Invalid url.                                                 |
4512
4513**示例:**
4514
4515```ts
4516// xxx.ets
4517import web_webview from '@ohos.web.webview'
4518import business_error from '@ohos.base'
4519
4520@Entry
4521@Component
4522struct WebComponent {
4523  controller: web_webview.WebviewController = new web_webview.WebviewController();
4524
4525  build() {
4526    Column() {
4527      Button('prefetchPopularPage')
4528        .onClick(() => {
4529          try {
4530            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
4531            this.controller.prefetchPage('https://www.example.com');
4532          } catch (error) {
4533            let e:business_error.BusinessError = error as business_error.BusinessError;
4534            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4535          }
4536        })
4537      // 需要将'www.example1.com'替换成一个真实的网站地址。
4538      Web({ src: 'www.example1.com', controller: this.controller })
4539    }
4540  }
4541}
4542```
4543
4544### prepareForPageLoad<sup>10+</sup>
4545
4546static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
4547
4548预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
4549
4550**系统能力:**  SystemCapability.Web.Webview.Core
4551
4552**参数:**
4553
4554| 参数名          | 类型    |  必填  | 说明                                            |
4555| ---------------| ------- | ---- | ------------- |
4556| url            | string  | 是   | 预连接的url。|
4557| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
4558| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
4559
4560**错误码:**
4561
4562以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md).
4563
4564| 错误码ID  | 错误信息                                                      |
4565| -------- | ------------------------------------------------------------ |
4566| 17100002 | Invalid url.                                                 |
4567| 171000013| The number of preconnect sockets is invalid.                                                 |
4568
4569**示例:**
4570
4571```ts
4572// xxx.ts
4573import UIAbility from '@ohos.app.ability.UIAbility';
4574import web_webview from '@ohos.web.webview';
4575import AbilityConstant from '@ohos.app.ability.AbilityConstant';
4576import Want from '@ohos.app.ability.Want';
4577
4578export default class EntryAbility extends UIAbility {
4579    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4580        console.log("EntryAbility onCreate")
4581        web_webview.WebviewController.initializeWebEngine()
4582        // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
4583        web_webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
4584        AppStorage.setOrCreate("abilityWant", want)
4585        console.log("EntryAbility onCreate done")
4586    }
4587}
4588```
4589
4590### setCustomUserAgent<sup>10+</sup>
4591
4592setCustomUserAgent(userAgent: string): void
4593
4594设置自定义用户代理。
4595
4596**系统能力:**  SystemCapability.Web.Webview.Core
4597
4598**参数:**
4599
4600| 参数名          | 类型    |  必填  | 说明                                            |
4601| ---------------| ------- | ---- | ------------- |
4602| userAgent      | string  | 是   | 用户自定义代理信息。 |
4603
4604**错误码:**
4605
4606以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md).
4607
4608| 错误码ID  | 错误信息                                                      |
4609| -------- | ------------------------------------------------------------ |
4610| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4611
4612**示例:**
4613
4614```ts
4615// xxx.ets
4616import web_webview from '@ohos.web.webview'
4617import business_error from '@ohos.base'
4618
4619@Entry
4620@Component
4621struct WebComponent {
4622  controller: web_webview.WebviewController = new web_webview.WebviewController();
4623  @State userAgent: string = 'test'
4624
4625  build() {
4626    Column() {
4627      Button('setCustomUserAgent')
4628        .onClick(() => {
4629          try {
4630            this.controller.setCustomUserAgent(this.userAgent);
4631          } catch (error) {
4632            let e:business_error.BusinessError = error as business_error.BusinessError;
4633            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4634          }
4635        })
4636      Web({ src: 'www.example.com', controller: this.controller })
4637    }
4638  }
4639}
4640```
4641
4642### getCustomUserAgent<sup>10+</sup>
4643
4644getCustomUserAgent(): string
4645
4646获取自定义用户代理。
4647
4648**系统能力:**  SystemCapability.Web.Webview.Core
4649
4650**返回值:**
4651
4652| 类型   | 说明                      |
4653| ------ | ------------------------- |
4654| string | 用户自定义代理信息。 |
4655
4656**错误码:**
4657
4658以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md).
4659
4660| 错误码ID  | 错误信息                                                      |
4661| -------- | ------------------------------------------------------------ |
4662| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4663
4664**示例:**
4665
4666```ts
4667// xxx.ets
4668import web_webview from '@ohos.web.webview'
4669import business_error from '@ohos.base'
4670
4671@Entry
4672@Component
4673struct WebComponent {
4674  controller: web_webview.WebviewController = new web_webview.WebviewController();
4675  @State userAgent: string = ''
4676
4677  build() {
4678    Column() {
4679      Button('getCustomUserAgent')
4680        .onClick(() => {
4681          try {
4682            this.userAgent = this.controller.getCustomUserAgent();
4683            console.log("userAgent: " + this.userAgent);
4684          } catch (error) {
4685            let e:business_error.BusinessError = error as business_error.BusinessError;
4686            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4687          }
4688        })
4689      Web({ src: 'www.example.com', controller: this.controller })
4690    }
4691  }
4692}
4693```
4694
4695## WebCookieManager
4696
4697通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。
4698
4699> **说明:**
4700>
4701> 目前调用WebCookieManager下的方法,都需要先加载Web组件。
4702
4703### getCookie
4704
4705static getCookie(url: string): string
4706
4707获取指定url对应cookie的值。
4708
4709**系统能力:** SystemCapability.Web.Webview.Core
4710
4711**参数:**
4712
4713| 参数名 | 类型   | 必填 | 说明                      |
4714| ------ | ------ | ---- | :------------------------ |
4715| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
4716
4717**返回值:**
4718
4719| 类型   | 说明                      |
4720| ------ | ------------------------- |
4721| string | 指定url对应的cookie的值。 |
4722
4723**错误码:**
4724
4725以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
4726
4727| 错误码ID | 错误信息                                               |
4728| -------- | ------------------------------------------------------ |
4729| 17100002 | Invalid url.                                           |
4730
4731**示例:**
4732
4733```ts
4734// xxx.ets
4735import web_webview from '@ohos.web.webview'
4736import business_error from '@ohos.base'
4737
4738@Entry
4739@Component
4740struct WebComponent {
4741  controller: web_webview.WebviewController = new web_webview.WebviewController();
4742
4743  build() {
4744    Column() {
4745      Button('getCookie')
4746        .onClick(() => {
4747          try {
4748            let value = web_webview.WebCookieManager.getCookie('https://www.example.com');
4749            console.log("value: " + value);
4750          } catch (error) {
4751            let e:business_error.BusinessError = error as business_error.BusinessError;
4752            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4753          }
4754        })
4755      Web({ src: 'www.example.com', controller: this.controller })
4756    }
4757  }
4758}
4759```
4760
4761### setCookie
4762
4763static setCookie(url: string, value: string): void
4764
4765为指定url设置单个cookie的值。
4766
4767**系统能力:** SystemCapability.Web.Webview.Core
4768
4769**参数:**
4770
4771| 参数名 | 类型   | 必填 | 说明                      |
4772| ------ | ------ | ---- | :------------------------ |
4773| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
4774| value  | string | 是   | 要设置的cookie的值。      |
4775
4776**错误码:**
4777
4778以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
4779
4780| 错误码ID | 错误信息                                               |
4781| -------- | ------------------------------------------------------ |
4782| 17100002 | Invalid url.                                           |
4783| 17100005 | Invalid cookie value.                                  |
4784
4785**示例:**
4786
4787```ts
4788// xxx.ets
4789import web_webview from '@ohos.web.webview'
4790import business_error from '@ohos.base'
4791
4792@Entry
4793@Component
4794struct WebComponent {
4795  controller: web_webview.WebviewController = new web_webview.WebviewController();
4796
4797  build() {
4798    Column() {
4799      Button('setCookie')
4800        .onClick(() => {
4801          try {
4802            web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
4803          } catch (error) {
4804            let e:business_error.BusinessError = error as business_error.BusinessError;
4805            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4806          }
4807        })
4808      Web({ src: 'www.example.com', controller: this.controller })
4809    }
4810  }
4811}
4812```
4813
4814### saveCookieAsync
4815
4816static saveCookieAsync(callback: AsyncCallback\<void>): void
4817
4818将当前存在内存中的cookie异步保存到磁盘中。
4819
4820**系统能力:** SystemCapability.Web.Webview.Core
4821
4822**参数:**
4823
4824| 参数名   | 类型                   | 必填 | 说明                                               |
4825| -------- | ---------------------- | ---- | :------------------------------------------------- |
4826| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
4827
4828**示例:**
4829
4830```ts
4831// xxx.ets
4832import web_webview from '@ohos.web.webview'
4833import business_error from '@ohos.base'
4834
4835@Entry
4836@Component
4837struct WebComponent {
4838  controller: web_webview.WebviewController = new web_webview.WebviewController();
4839
4840  build() {
4841    Column() {
4842      Button('saveCookieAsync')
4843        .onClick(() => {
4844          try {
4845            web_webview.WebCookieManager.saveCookieAsync((error) => {
4846              if (error) {
4847                console.log("error: " + error);
4848              }
4849            })
4850          } catch (error) {
4851            let e:business_error.BusinessError = error as business_error.BusinessError;
4852            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4853          }
4854        })
4855      Web({ src: 'www.example.com', controller: this.controller })
4856    }
4857  }
4858}
4859```
4860
4861### saveCookieAsync
4862
4863static saveCookieAsync(): Promise\<void>
4864
4865将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
4866
4867**系统能力:** SystemCapability.Web.Webview.Core
4868
4869**返回值:**
4870
4871| 类型             | 说明                                      |
4872| ---------------- | ----------------------------------------- |
4873| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
4874
4875**示例:**
4876
4877```ts
4878// xxx.ets
4879import web_webview from '@ohos.web.webview'
4880import business_error from '@ohos.base'
4881
4882@Entry
4883@Component
4884struct WebComponent {
4885  controller: web_webview.WebviewController = new web_webview.WebviewController();
4886
4887  build() {
4888    Column() {
4889      Button('saveCookieAsync')
4890        .onClick(() => {
4891          try {
4892            web_webview.WebCookieManager.saveCookieAsync()
4893              .then(() => {
4894                console.log("saveCookieAsyncCallback success!");
4895              })
4896              .catch((error:business_error.BusinessError) => {
4897                console.error("error: " + error);
4898              });
4899          } catch (error) {
4900            let e:business_error.BusinessError = error as business_error.BusinessError;
4901            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4902          }
4903        })
4904      Web({ src: 'www.example.com', controller: this.controller })
4905    }
4906  }
4907}
4908```
4909
4910### putAcceptCookieEnabled
4911
4912static putAcceptCookieEnabled(accept: boolean): void
4913
4914设置WebCookieManager实例是否拥有发送和接收cookie的权限。
4915
4916**系统能力:** SystemCapability.Web.Webview.Core
4917
4918**参数:**
4919
4920| 参数名 | 类型    | 必填 | 说明                                 |
4921| ------ | ------- | ---- | :----------------------------------- |
4922| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限。 |
4923
4924**示例:**
4925
4926```ts
4927// xxx.ets
4928import web_webview from '@ohos.web.webview'
4929import business_error from '@ohos.base'
4930
4931@Entry
4932@Component
4933struct WebComponent {
4934  controller: web_webview.WebviewController = new web_webview.WebviewController();
4935
4936  build() {
4937    Column() {
4938      Button('putAcceptCookieEnabled')
4939        .onClick(() => {
4940          try {
4941            web_webview.WebCookieManager.putAcceptCookieEnabled(false);
4942          } catch (error) {
4943            let e:business_error.BusinessError = error as business_error.BusinessError;
4944            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4945          }
4946        })
4947      Web({ src: 'www.example.com', controller: this.controller })
4948    }
4949  }
4950}
4951```
4952
4953### isCookieAllowed
4954
4955static isCookieAllowed(): boolean
4956
4957获取WebCookieManager实例是否拥有发送和接收cookie的权限。
4958
4959**系统能力:** SystemCapability.Web.Webview.Core
4960
4961**返回值:**
4962
4963| 类型    | 说明                             |
4964| ------- | -------------------------------- |
4965| boolean | 是否拥有发送和接收cookie的权限,默认为true。 |
4966
4967**示例:**
4968
4969```ts
4970// xxx.ets
4971import web_webview from '@ohos.web.webview'
4972
4973@Entry
4974@Component
4975struct WebComponent {
4976  controller: web_webview.WebviewController = new web_webview.WebviewController();
4977
4978  build() {
4979    Column() {
4980      Button('isCookieAllowed')
4981        .onClick(() => {
4982          let result = web_webview.WebCookieManager.isCookieAllowed();
4983          console.log("result: " + result);
4984        })
4985      Web({ src: 'www.example.com', controller: this.controller })
4986    }
4987  }
4988}
4989```
4990
4991### putAcceptThirdPartyCookieEnabled
4992
4993static putAcceptThirdPartyCookieEnabled(accept: boolean): void
4994
4995设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
4996
4997**系统能力:** SystemCapability.Web.Webview.Core
4998
4999**参数:**
5000
5001| 参数名 | 类型    | 必填 | 说明                                       |
5002| ------ | ------- | ---- | :----------------------------------------- |
5003| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限。 |
5004
5005**示例:**
5006
5007```ts
5008// xxx.ets
5009import web_webview from '@ohos.web.webview'
5010import business_error from '@ohos.base'
5011
5012@Entry
5013@Component
5014struct WebComponent {
5015  controller: web_webview.WebviewController = new web_webview.WebviewController();
5016
5017  build() {
5018    Column() {
5019      Button('putAcceptThirdPartyCookieEnabled')
5020        .onClick(() => {
5021          try {
5022            web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
5023          } catch (error) {
5024            let e:business_error.BusinessError = error as business_error.BusinessError;
5025            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5026          }
5027        })
5028      Web({ src: 'www.example.com', controller: this.controller })
5029    }
5030  }
5031}
5032```
5033
5034### isThirdPartyCookieAllowed
5035
5036static isThirdPartyCookieAllowed(): boolean
5037
5038获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
5039
5040**系统能力:** SystemCapability.Web.Webview.Core
5041
5042**返回值:**
5043
5044| 类型    | 说明                                   |
5045| ------- | -------------------------------------- |
5046| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 |
5047
5048**示例:**
5049
5050```ts
5051// xxx.ets
5052import web_webview from '@ohos.web.webview'
5053
5054@Entry
5055@Component
5056struct WebComponent {
5057  controller: web_webview.WebviewController = new web_webview.WebviewController();
5058
5059  build() {
5060    Column() {
5061      Button('isThirdPartyCookieAllowed')
5062        .onClick(() => {
5063          let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed();
5064          console.log("result: " + result);
5065        })
5066      Web({ src: 'www.example.com', controller: this.controller })
5067    }
5068  }
5069}
5070```
5071
5072### existCookie
5073
5074static existCookie(): boolean
5075
5076获取是否存在cookie。
5077
5078**系统能力:** SystemCapability.Web.Webview.Core
5079
5080**返回值:**
5081
5082| 类型    | 说明                                   |
5083| ------- | -------------------------------------- |
5084| boolean | 是否拥有发送和接收第三方cookie的权限。 |
5085
5086**示例:**
5087
5088```ts
5089// xxx.ets
5090import web_webview from '@ohos.web.webview'
5091
5092@Entry
5093@Component
5094struct WebComponent {
5095  controller: web_webview.WebviewController = new web_webview.WebviewController();
5096
5097  build() {
5098    Column() {
5099      Button('existCookie')
5100        .onClick(() => {
5101          let result = web_webview.WebCookieManager.existCookie();
5102          console.log("result: " + result);
5103        })
5104      Web({ src: 'www.example.com', controller: this.controller })
5105    }
5106  }
5107}
5108```
5109
5110### deleteEntireCookie
5111
5112static deleteEntireCookie(): void
5113
5114清除所有cookie。
5115
5116**系统能力:** SystemCapability.Web.Webview.Core
5117
5118**示例:**
5119
5120```ts
5121// xxx.ets
5122import web_webview from '@ohos.web.webview'
5123
5124@Entry
5125@Component
5126struct WebComponent {
5127  controller: web_webview.WebviewController = new web_webview.WebviewController();
5128
5129  build() {
5130    Column() {
5131      Button('deleteEntireCookie')
5132        .onClick(() => {
5133          web_webview.WebCookieManager.deleteEntireCookie();
5134        })
5135      Web({ src: 'www.example.com', controller: this.controller })
5136    }
5137  }
5138}
5139```
5140
5141### deleteSessionCookie
5142
5143static deleteSessionCookie(): void
5144
5145清除所有会话cookie。
5146
5147**系统能力:** SystemCapability.Web.Webview.Core
5148
5149**示例:**
5150
5151```ts
5152// xxx.ets
5153import web_webview from '@ohos.web.webview'
5154
5155@Entry
5156@Component
5157struct WebComponent {
5158  controller: web_webview.WebviewController = new web_webview.WebviewController();
5159
5160  build() {
5161    Column() {
5162      Button('deleteSessionCookie')
5163        .onClick(() => {
5164          web_webview.WebCookieManager.deleteSessionCookie();
5165        })
5166      Web({ src: 'www.example.com', controller: this.controller })
5167    }
5168  }
5169}
5170```
5171
5172## WebStorage
5173
5174通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
5175
5176> **说明:**
5177>
5178> 目前调用WebStorage下的方法,都需要先加载Web组件。
5179
5180### deleteOrigin
5181
5182static deleteOrigin(origin : string): void
5183
5184清除指定源所使用的存储。
5185
5186**系统能力:** SystemCapability.Web.Webview.Core
5187
5188**参数:**
5189
5190| 参数名 | 类型   | 必填 | 说明                     |
5191| ------ | ------ | ---- | ------------------------ |
5192| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
5193
5194**错误码:**
5195
5196以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5197
5198| 错误码ID | 错误信息                                               |
5199| -------- | ------------------------------------------------------ |
5200| 17100011 | Invalid origin.                             |
5201
5202**示例:**
5203
5204```ts
5205// xxx.ets
5206import web_webview from '@ohos.web.webview';
5207import business_error from '@ohos.base';
5208
5209@Entry
5210@Component
5211struct WebComponent {
5212  controller: web_webview.WebviewController = new web_webview.WebviewController();
5213  origin: string = "resource://rawfile/";
5214
5215  build() {
5216    Column() {
5217      Button('deleteOrigin')
5218        .onClick(() => {
5219          try {
5220            web_webview.WebStorage.deleteOrigin(this.origin);
5221          } catch (error) {
5222            let e: business_error.BusinessError = error as business_error.BusinessError;
5223            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5224          }
5225
5226        })
5227      Web({ src: $rawfile('index.html'), controller: this.controller })
5228        .databaseAccess(true)
5229    }
5230  }
5231}
5232```
5233
5234加载的html文件。
5235 ```html
5236  <!-- index.html -->
5237  <!DOCTYPE html>
5238  <html>
5239  <head>
5240    <meta charset="UTF-8">
5241    <title>test</title>
5242    <script type="text/javascript">
5243
5244      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
5245      var msg;
5246
5247      db.transaction(function(tx){
5248        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
5249        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
5250        msg = '<p>数据表已创建,且插入了两条数据。</p>';
5251
5252        document.querySelector('#status').innerHTML = msg;
5253      });
5254
5255      db.transaction(function(tx){
5256        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
5257          var len = results.rows.length,i;
5258          msg = "<p>查询记录条数:" + len + "</p>";
5259
5260          document.querySelector('#status').innerHTML += msg;
5261
5262              for(i = 0; i < len; i++){
5263                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
5264
5265          document.querySelector('#status').innerHTML += msg;
5266          }
5267        },null);
5268      });
5269
5270      </script>
5271  </head>
5272  <body>
5273  <div id="status" name="status">状态信息</div>
5274  </body>
5275  </html>
5276  ```
5277
5278### getOrigins
5279
5280static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>) : void
5281
5282以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
5283
5284**系统能力:** SystemCapability.Web.Webview.Core
5285
5286**参数:**
5287
5288| 参数名   | 类型                                   | 必填 | 说明                                                   |
5289| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
5290| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
5291
5292**错误码:**
5293
5294以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5295
5296| 错误码ID | 错误信息                                               |
5297| -------- | ------------------------------------------------------ |
5298| 17100012 | Invalid web storage origin.                             |
5299
5300**示例:**
5301
5302```ts
5303// xxx.ets
5304import web_webview from '@ohos.web.webview';
5305import business_error from '@ohos.base';
5306
5307@Entry
5308@Component
5309struct WebComponent {
5310  controller: web_webview.WebviewController = new web_webview.WebviewController();
5311
5312  build() {
5313    Column() {
5314      Button('getOrigins')
5315        .onClick(() => {
5316          try {
5317            web_webview.WebStorage.getOrigins((error, origins) => {
5318              if (error) {
5319                console.log('error: ' + JSON.stringify(error));
5320                return;
5321              }
5322              for (let i = 0; i < origins.length; i++) {
5323                console.log('origin: ' + origins[i].origin);
5324                console.log('usage: ' + origins[i].usage);
5325                console.log('quota: ' + origins[i].quota);
5326              }
5327            })
5328          } catch (error) {
5329            let e: business_error.BusinessError = error as business_error.BusinessError;
5330            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5331          }
5332
5333        })
5334      Web({ src: $rawfile('index.html'), controller: this.controller })
5335        .databaseAccess(true)
5336    }
5337  }
5338}
5339```
5340
5341加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5342
5343### getOrigins
5344
5345static getOrigins() : Promise\<Array\<WebStorageOrigin>>
5346
5347以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
5348
5349**系统能力:** SystemCapability.Web.Webview.Core
5350
5351**返回值:**
5352
5353| 类型                             | 说明                                                         |
5354| -------------------------------- | ------------------------------------------------------------ |
5355| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
5356
5357**错误码:**
5358
5359以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5360
5361| 错误码ID | 错误信息                                               |
5362| -------- | ------------------------------------------------------ |
5363| 17100012 | Invalid web storage origin.                             |
5364
5365**示例:**
5366
5367```ts
5368// xxx.ets
5369import web_webview from '@ohos.web.webview';
5370import business_error from '@ohos.base';
5371
5372@Entry
5373@Component
5374struct WebComponent {
5375  controller: web_webview.WebviewController = new web_webview.WebviewController();
5376
5377  build() {
5378    Column() {
5379      Button('getOrigins')
5380        .onClick(() => {
5381          try {
5382            web_webview.WebStorage.getOrigins()
5383              .then(origins => {
5384                for (let i = 0; i < origins.length; i++) {
5385                  console.log('origin: ' + origins[i].origin);
5386                  console.log('usage: ' + origins[i].usage);
5387                  console.log('quota: ' + origins[i].quota);
5388                }
5389              })
5390              .catch((e : business_error.BusinessError) => {
5391                console.log('error: ' + JSON.stringify(e));
5392              })
5393          } catch (error) {
5394            let e: business_error.BusinessError = error as business_error.BusinessError;
5395            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5396          }
5397
5398        })
5399      Web({ src: $rawfile('index.html'), controller: this.controller })
5400        .databaseAccess(true)
5401    }
5402  }
5403}
5404```
5405
5406加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5407
5408### getOriginQuota
5409
5410static getOriginQuota(origin : string, callback : AsyncCallback\<number>) : void
5411
5412使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
5413
5414**系统能力:** SystemCapability.Web.Webview.Core
5415
5416**参数:**
5417
5418| 参数名   | 类型                  | 必填 | 说明               |
5419| -------- | --------------------- | ---- | ------------------ |
5420| origin   | string                | 是   | 指定源的字符串索引 |
5421| callback | AsyncCallback\<number> | 是   | 指定源的存储配额   |
5422
5423**错误码:**
5424
5425以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5426
5427| 错误码ID | 错误信息                                               |
5428| -------- | ------------------------------------------------------ |
5429| 17100011 | Invalid origin.                             |
5430
5431**示例:**
5432
5433```ts
5434// xxx.ets
5435import web_webview from '@ohos.web.webview';
5436import business_error from '@ohos.base';
5437
5438@Entry
5439@Component
5440struct WebComponent {
5441  controller: web_webview.WebviewController = new web_webview.WebviewController();
5442  origin: string = "resource://rawfile/";
5443
5444  build() {
5445    Column() {
5446      Button('getOriginQuota')
5447        .onClick(() => {
5448          try {
5449            web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
5450              if (error) {
5451                console.log('error: ' + JSON.stringify(error));
5452                return;
5453              }
5454              console.log('quota: ' + quota);
5455            })
5456          } catch (error) {
5457            let e: business_error.BusinessError = error as business_error.BusinessError;
5458            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5459          }
5460
5461        })
5462      Web({ src: $rawfile('index.html'), controller: this.controller })
5463        .databaseAccess(true)
5464    }
5465  }
5466}
5467```
5468
5469加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5470
5471### getOriginQuota
5472
5473static getOriginQuota(origin : string) : Promise\<number>
5474
5475以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
5476
5477**系统能力:** SystemCapability.Web.Webview.Core
5478
5479**参数:**
5480
5481| 参数名 | 类型   | 必填 | 说明               |
5482| ------ | ------ | ---- | ------------------ |
5483| origin | string | 是   | 指定源的字符串索引 |
5484
5485**返回值:**
5486
5487| 类型            | 说明                                    |
5488| --------------- | --------------------------------------- |
5489| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
5490
5491**错误码:**
5492
5493以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5494
5495| 错误码ID | 错误信息                                               |
5496| -------- | ------------------------------------------------------ |
5497| 17100011 | Invalid origin.                             |
5498
5499**示例:**
5500
5501```ts
5502// xxx.ets
5503import web_webview from '@ohos.web.webview';
5504import business_error from '@ohos.base';
5505
5506@Entry
5507@Component
5508struct WebComponent {
5509  controller: web_webview.WebviewController = new web_webview.WebviewController();
5510  origin: string = "resource://rawfile/";
5511
5512  build() {
5513    Column() {
5514      Button('getOriginQuota')
5515        .onClick(() => {
5516          try {
5517            web_webview.WebStorage.getOriginQuota(this.origin)
5518              .then(quota => {
5519                console.log('quota: ' + quota);
5520              })
5521              .catch((e : business_error.BusinessError) => {
5522                console.log('error: ' + JSON.stringify(e));
5523              })
5524          } catch (error) {
5525            let e: business_error.BusinessError = error as business_error.BusinessError;
5526            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5527          }
5528
5529        })
5530      Web({ src: $rawfile('index.html'), controller: this.controller })
5531        .databaseAccess(true)
5532    }
5533  }
5534}
5535```
5536
5537加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5538
5539### getOriginUsage
5540
5541static getOriginUsage(origin : string, callback : AsyncCallback\<number>) : void
5542
5543以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
5544
5545**系统能力:** SystemCapability.Web.Webview.Core
5546
5547**参数:**
5548
5549| 参数名   | 类型                  | 必填 | 说明               |
5550| -------- | --------------------- | ---- | ------------------ |
5551| origin   | string                | 是   | 指定源的字符串索引 |
5552| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
5553
5554**错误码:**
5555
5556以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5557
5558| 错误码ID | 错误信息                                               |
5559| -------- | ------------------------------------------------------ |
5560| 17100011 | Invalid origin.                             |
5561
5562**示例:**
5563
5564```ts
5565// xxx.ets
5566import web_webview from '@ohos.web.webview';
5567import business_error from '@ohos.base';
5568
5569@Entry
5570@Component
5571struct WebComponent {
5572  controller: web_webview.WebviewController = new web_webview.WebviewController();
5573  origin: string = "resource://rawfile/";
5574
5575  build() {
5576    Column() {
5577      Button('getOriginUsage')
5578        .onClick(() => {
5579          try {
5580            web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
5581              if (error) {
5582                console.log('error: ' + JSON.stringify(error));
5583                return;
5584              }
5585              console.log('usage: ' + usage);
5586            })
5587          } catch (error) {
5588            let e: business_error.BusinessError = error as business_error.BusinessError;
5589            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5590          }
5591
5592        })
5593      Web({ src: $rawfile('index.html'), controller: this.controller })
5594        .databaseAccess(true)
5595    }
5596  }
5597}
5598```
5599
5600加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5601
5602### getOriginUsage
5603
5604static getOriginUsage(origin : string) : Promise\<number>
5605
5606以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
5607
5608**系统能力:** SystemCapability.Web.Webview.Core
5609
5610**参数:**
5611
5612| 参数名 | 类型   | 必填 | 说明               |
5613| ------ | ------ | ---- | ------------------ |
5614| origin | string | 是   | 指定源的字符串索引 |
5615
5616**返回值:**
5617
5618| 类型            | 说明                                  |
5619| --------------- | ------------------------------------- |
5620| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
5621
5622**错误码:**
5623
5624以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5625
5626| 错误码ID | 错误信息                                              |
5627| -------- | ----------------------------------------------------- |
5628| 17100011 | Invalid origin.                            |
5629
5630**示例:**
5631
5632```ts
5633// xxx.ets
5634import web_webview from '@ohos.web.webview';
5635import business_error from '@ohos.base';
5636
5637@Entry
5638@Component
5639struct WebComponent {
5640  controller: web_webview.WebviewController = new web_webview.WebviewController();
5641  origin: string = "resource://rawfile/";
5642
5643  build() {
5644    Column() {
5645      Button('getOriginUsage')
5646        .onClick(() => {
5647          try {
5648            web_webview.WebStorage.getOriginUsage(this.origin)
5649              .then(usage => {
5650                console.log('usage: ' + usage);
5651              })
5652              .catch((e : business_error.BusinessError) => {
5653                console.log('error: ' + JSON.stringify(e));
5654              })
5655          } catch (error) {
5656            let e: business_error.BusinessError = error as business_error.BusinessError;
5657            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5658          }
5659
5660        })
5661      Web({ src: $rawfile('index.html'), controller: this.controller })
5662        .databaseAccess(true)
5663    }
5664  }
5665}
5666```
5667
5668加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
5669
5670### deleteAllData
5671
5672static deleteAllData(): void
5673
5674清除Web SQL数据库当前使用的所有存储。
5675
5676**系统能力:** SystemCapability.Web.Webview.Core
5677
5678**示例:**
5679
5680```ts
5681// xxx.ets
5682import web_webview from '@ohos.web.webview';
5683import business_error from '@ohos.base';
5684
5685@Entry
5686@Component
5687struct WebComponent {
5688  controller: web_webview.WebviewController = new web_webview.WebviewController();
5689
5690  build() {
5691    Column() {
5692      Button('deleteAllData')
5693        .onClick(() => {
5694          try {
5695            web_webview.WebStorage.deleteAllData();
5696          } catch (error) {
5697            let e: business_error.BusinessError = error as business_error.BusinessError;
5698            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5699          }
5700        })
5701      Web({ src: $rawfile('index.html'), controller: this.controller })
5702        .databaseAccess(true)
5703    }
5704  }
5705}
5706```
5707
5708加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
5709
5710## WebDataBase
5711
5712web组件数据库管理对象。
5713
5714> **说明:**
5715>
5716> 目前调用WebDataBase下的方法,都需要先加载Web组件。
5717
5718### getHttpAuthCredentials
5719
5720static getHttpAuthCredentials(host: string, realm: string): Array\<string>
5721
5722检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
5723
5724**系统能力:** SystemCapability.Web.Webview.Core
5725
5726**参数:**
5727
5728| 参数名 | 类型   | 必填 | 说明                         |
5729| ------ | ------ | ---- | ---------------------------- |
5730| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
5731| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
5732
5733**返回值:**
5734
5735| 类型  | 说明                                         |
5736| ----- | -------------------------------------------- |
5737| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
5738
5739**示例:**
5740
5741```ts
5742// xxx.ets
5743import web_webview from '@ohos.web.webview';
5744import business_error from '@ohos.base';
5745
5746@Entry
5747@Component
5748struct WebComponent {
5749  controller: web_webview.WebviewController = new web_webview.WebviewController();
5750  host: string = "www.spincast.org";
5751  realm: string = "protected example";
5752  username_password: string[] = [];
5753
5754  build() {
5755    Column() {
5756      Button('getHttpAuthCredentials')
5757        .onClick(() => {
5758          try {
5759            this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
5760            console.log('num: ' + this.username_password.length);
5761          } catch (error) {
5762            let e: business_error.BusinessError = error as business_error.BusinessError;
5763            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5764          }
5765        })
5766      Web({ src: 'www.example.com', controller: this.controller })
5767    }
5768  }
5769}
5770```
5771
5772### saveHttpAuthCredentials
5773
5774static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
5775
5776保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
5777
5778**系统能力:** SystemCapability.Web.Webview.Core
5779
5780**参数:**
5781
5782| 参数名   | 类型   | 必填 | 说明                         |
5783| -------- | ------ | ---- | ---------------------------- |
5784| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
5785| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
5786| username | string | 是   | 用户名。                     |
5787| password | string | 是   | 密码。                       |
5788
5789**示例:**
5790
5791```ts
5792// xxx.ets
5793import web_webview from '@ohos.web.webview';
5794import business_error from '@ohos.base';
5795
5796@Entry
5797@Component
5798struct WebComponent {
5799  controller: web_webview.WebviewController = new web_webview.WebviewController();
5800  host: string = "www.spincast.org";
5801  realm: string = "protected example";
5802
5803  build() {
5804    Column() {
5805      Button('saveHttpAuthCredentials')
5806        .onClick(() => {
5807          try {
5808            web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
5809          } catch (error) {
5810            let e: business_error.BusinessError = error as business_error.BusinessError;
5811            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5812          }
5813        })
5814      Web({ src: 'www.example.com', controller: this.controller })
5815    }
5816  }
5817}
5818```
5819
5820### existHttpAuthCredentials
5821
5822static existHttpAuthCredentials(): boolean
5823
5824判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
5825
5826**系统能力:** SystemCapability.Web.Webview.Core
5827
5828**返回值:**
5829
5830| 类型    | 说明                                                         |
5831| ------- | ------------------------------------------------------------ |
5832| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
5833
5834**示例:**
5835
5836```ts
5837// xxx.ets
5838import web_webview from '@ohos.web.webview';
5839import business_error from '@ohos.base';
5840
5841@Entry
5842@Component
5843struct WebComponent {
5844  controller: web_webview.WebviewController = new web_webview.WebviewController();
5845
5846  build() {
5847    Column() {
5848      Button('existHttpAuthCredentials')
5849        .onClick(() => {
5850          try {
5851            let result = web_webview.WebDataBase.existHttpAuthCredentials();
5852          } catch (error) {
5853            let e: business_error.BusinessError = error as business_error.BusinessError;
5854            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5855          }
5856        })
5857      Web({ src: 'www.example.com', controller: this.controller })
5858    }
5859  }
5860}
5861```
5862
5863### deleteHttpAuthCredentials
5864
5865static deleteHttpAuthCredentials(): void
5866
5867清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
5868
5869**系统能力:** SystemCapability.Web.Webview.Core
5870
5871**示例:**
5872
5873```ts
5874// xxx.ets
5875import web_webview from '@ohos.web.webview';
5876import business_error from '@ohos.base';
5877
5878@Entry
5879@Component
5880struct WebComponent {
5881  controller: web_webview.WebviewController = new web_webview.WebviewController();
5882
5883  build() {
5884    Column() {
5885      Button('deleteHttpAuthCredentials')
5886        .onClick(() => {
5887          try {
5888            web_webview.WebDataBase.deleteHttpAuthCredentials();
5889          } catch (error) {
5890            let e: business_error.BusinessError = error as business_error.BusinessError;
5891            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5892          }
5893        })
5894      Web({ src: 'www.example.com', controller: this.controller })
5895    }
5896  }
5897}
5898```
5899
5900## GeolocationPermissions
5901
5902web组件地理位置权限管理对象。
5903
5904> **说明:**
5905>
5906> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
5907
5908### 需要权限
5909
5910访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](./js-apis-geolocation.md)。
5911
5912### allowGeolocation
5913
5914static allowGeolocation(origin: string): void
5915
5916允许指定来源使用地理位置接口。
5917
5918**系统能力:** SystemCapability.Web.Webview.Core
5919
5920**参数:**
5921
5922| 参数名 | 类型   | 必填 | 说明               |
5923| ------ | ------ | ---- | ------------------ |
5924| origin | string | 是   |指定源的字符串索引 |
5925
5926**错误码:**
5927
5928以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5929
5930| 错误码ID | 错误信息                                               |
5931| -------- | ------------------------------------------------------ |
5932| 17100011 | Invalid origin.                             |
5933
5934**示例:**
5935
5936```ts
5937// xxx.ets
5938import web_webview from '@ohos.web.webview';
5939import business_error from '@ohos.base';
5940
5941@Entry
5942@Component
5943struct WebComponent {
5944  controller: web_webview.WebviewController = new web_webview.WebviewController();
5945  origin: string = "file:///";
5946
5947  build() {
5948    Column() {
5949      Button('allowGeolocation')
5950        .onClick(() => {
5951          try {
5952            web_webview.GeolocationPermissions.allowGeolocation(this.origin);
5953          } catch (error) {
5954            let e: business_error.BusinessError = error as business_error.BusinessError;
5955            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5956          }
5957        })
5958      Web({ src: 'www.example.com', controller: this.controller })
5959    }
5960  }
5961}
5962```
5963
5964### deleteGeolocation
5965
5966static deleteGeolocation(origin: string): void
5967
5968清除指定来源的地理位置权限状态。
5969
5970**系统能力:** SystemCapability.Web.Webview.Core
5971
5972**参数:**
5973
5974| 参数名 | 类型   | 必填 | 说明               |
5975| ------ | ------ | ---- | ------------------ |
5976| origin | string | 是   | 指定源的字符串索引 |
5977
5978**错误码:**
5979
5980以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
5981
5982| 错误码ID | 错误信息                                               |
5983| -------- | ------------------------------------------------------ |
5984| 17100011 | Invalid origin.                             |
5985
5986**示例:**
5987
5988```ts
5989// xxx.ets
5990import web_webview from '@ohos.web.webview';
5991import business_error from '@ohos.base';
5992
5993@Entry
5994@Component
5995struct WebComponent {
5996  controller: web_webview.WebviewController = new web_webview.WebviewController();
5997  origin: string = "file:///";
5998
5999  build() {
6000    Column() {
6001      Button('deleteGeolocation')
6002        .onClick(() => {
6003          try {
6004            web_webview.GeolocationPermissions.deleteGeolocation(this.origin);
6005          } catch (error) {
6006            let e: business_error.BusinessError = error as business_error.BusinessError;
6007            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6008          }
6009        })
6010      Web({ src: 'www.example.com', controller: this.controller })
6011    }
6012  }
6013}
6014```
6015
6016### getAccessibleGeolocation
6017
6018static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>): void
6019
6020以回调方式异步获取指定源的地理位置权限状态。
6021
6022**系统能力:** SystemCapability.Web.Webview.Core
6023
6024**参数:**
6025
6026| 参数名   | 类型                   | 必填 | 说明                                                         |
6027| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6028| origin   | string                 | 是   | 指定源的字符串索引                                           |
6029| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
6030
6031**错误码:**
6032
6033以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6034
6035| 错误码ID | 错误信息                                               |
6036| -------- | ------------------------------------------------------ |
6037| 17100011 | Invalid origin.                             |
6038
6039**示例:**
6040
6041```ts
6042// xxx.ets
6043import web_webview from '@ohos.web.webview';
6044import business_error from '@ohos.base';
6045
6046@Entry
6047@Component
6048struct WebComponent {
6049  controller: web_webview.WebviewController = new web_webview.WebviewController();
6050  origin: string = "file:///";
6051
6052  build() {
6053    Column() {
6054      Button('getAccessibleGeolocation')
6055        .onClick(() => {
6056          try {
6057            web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
6058              if (error) {
6059                console.log('getAccessibleGeolocationAsync error: ' + JSON.stringify(error));
6060                return;
6061              }
6062              console.log('getAccessibleGeolocationAsync result: ' + result);
6063            });
6064          } catch (error) {
6065            let e: business_error.BusinessError = error as business_error.BusinessError;
6066            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6067          }
6068        })
6069      Web({ src: 'www.example.com', controller: this.controller })
6070    }
6071  }
6072}
6073```
6074
6075### getAccessibleGeolocation
6076
6077static getAccessibleGeolocation(origin: string): Promise\<boolean>
6078
6079以Promise方式异步获取指定源的地理位置权限状态。
6080
6081**系统能力:** SystemCapability.Web.Webview.Core
6082
6083**参数:**
6084
6085| 参数名 | 类型 | 必填 | 说明             |
6086| ------ | -------- | ---- | -------------------- |
6087| origin | string   | 是   | 指定源的字符串索引。 |
6088
6089**返回值:**
6090
6091| 类型             | 说明                                                         |
6092| ---------------- | ------------------------------------------------------------ |
6093| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
6094
6095**错误码:**
6096
6097以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6098
6099| 错误码ID | 错误信息                                               |
6100| -------- | ------------------------------------------------------ |
6101| 17100011 | Invalid origin.                             |
6102
6103**示例:**
6104
6105```ts
6106// xxx.ets
6107import web_webview from '@ohos.web.webview';
6108import business_error from '@ohos.base';
6109
6110@Entry
6111@Component
6112struct WebComponent {
6113  controller: web_webview.WebviewController = new web_webview.WebviewController();
6114  origin: string = "file:///";
6115
6116  build() {
6117    Column() {
6118      Button('getAccessibleGeolocation')
6119        .onClick(() => {
6120          try {
6121            web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
6122              .then(result => {
6123                console.log('getAccessibleGeolocationPromise result: ' + result);
6124              }).catch((error : business_error.BusinessError) => {
6125              console.log('getAccessibleGeolocationPromise error: ' + JSON.stringify(error));
6126            });
6127          } catch (error) {
6128            let e: business_error.BusinessError = error as business_error.BusinessError;
6129            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6130          }
6131        })
6132      Web({ src: 'www.example.com', controller: this.controller })
6133    }
6134  }
6135}
6136```
6137
6138### getStoredGeolocation
6139
6140static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>): void
6141
6142以回调方式异步获取已存储地理位置权限状态的所有源信息。
6143
6144**系统能力:** SystemCapability.Web.Webview.Core
6145
6146**参数:**
6147
6148| 参数名   | 类型                         | 必填 | 说明                                     |
6149| -------- | ---------------------------- | ---- | ---------------------------------------- |
6150| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
6151
6152**示例:**
6153
6154```ts
6155// xxx.ets
6156import web_webview from '@ohos.web.webview';
6157import business_error from '@ohos.base';
6158
6159@Entry
6160@Component
6161struct WebComponent {
6162  controller: web_webview.WebviewController = new web_webview.WebviewController();
6163
6164  build() {
6165    Column() {
6166      Button('getStoredGeolocation')
6167        .onClick(() => {
6168          try {
6169            web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
6170              if (error) {
6171                console.log('getStoredGeolocationAsync error: ' + JSON.stringify(error));
6172                return;
6173              }
6174              let origins_str: string = origins.join();
6175              console.log('getStoredGeolocationAsync origins: ' + origins_str);
6176            });
6177          } catch (error) {
6178            let e: business_error.BusinessError = error as business_error.BusinessError;
6179            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6180          }
6181        })
6182      Web({ src: 'www.example.com', controller: this.controller })
6183    }
6184  }
6185}
6186```
6187
6188### getStoredGeolocation
6189
6190static getStoredGeolocation(): Promise\<Array\<string>>
6191
6192以Promise方式异步获取已存储地理位置权限状态的所有源信息。
6193
6194**系统能力:** SystemCapability.Web.Webview.Core
6195
6196**返回值:**
6197
6198| 类型                   | 说明                                                      |
6199| ---------------------- | --------------------------------------------------------- |
6200| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
6201
6202**示例:**
6203
6204```ts
6205// xxx.ets
6206import web_webview from '@ohos.web.webview';
6207import business_error from '@ohos.base';
6208
6209@Entry
6210@Component
6211struct WebComponent {
6212  controller: web_webview.WebviewController = new web_webview.WebviewController();
6213
6214  build() {
6215    Column() {
6216      Button('getStoredGeolocation')
6217        .onClick(() => {
6218          try {
6219            web_webview.GeolocationPermissions.getStoredGeolocation()
6220              .then(origins => {
6221                let origins_str: string = origins.join();
6222                console.log('getStoredGeolocationPromise origins: ' + origins_str);
6223              }).catch((error : business_error.BusinessError) => {
6224              console.log('getStoredGeolocationPromise error: ' + JSON.stringify(error));
6225            });
6226          } catch (error) {
6227            let e: business_error.BusinessError = error as business_error.BusinessError;
6228            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6229          }
6230        })
6231      Web({ src: 'www.example.com', controller: this.controller })
6232    }
6233  }
6234}
6235```
6236
6237### deleteAllGeolocation
6238
6239static deleteAllGeolocation(): void
6240
6241清除所有来源的地理位置权限状态。
6242
6243**系统能力:** SystemCapability.Web.Webview.Core
6244
6245**示例:**
6246
6247```ts
6248// xxx.ets
6249import web_webview from '@ohos.web.webview';
6250import business_error from '@ohos.base';
6251
6252@Entry
6253@Component
6254struct WebComponent {
6255  controller: web_webview.WebviewController = new web_webview.WebviewController();
6256
6257  build() {
6258    Column() {
6259      Button('deleteAllGeolocation')
6260        .onClick(() => {
6261          try {
6262            web_webview.GeolocationPermissions.deleteAllGeolocation();
6263          } catch (error) {
6264            let e: business_error.BusinessError = error as business_error.BusinessError;
6265            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6266          }
6267        })
6268      Web({ src: 'www.example.com', controller: this.controller })
6269    }
6270  }
6271}
6272```
6273## WebHeader
6274Web组件返回的请求/响应头对象。
6275
6276**系统能力:** SystemCapability.Web.Webview.Core
6277
6278| 名称        | 类型   | 可读 | 可写 |说明                 |
6279| ----------- | ------ | -----|------|------------------- |
6280| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
6281| headerValue | string | 是 | 是 | 请求/响应头的value。 |
6282
6283## WebHitTestType
6284
6285**系统能力:** SystemCapability.Web.Webview.Core
6286
6287| 名称          | 值 | 说明                                      |
6288| ------------- | -- |----------------------------------------- |
6289| EditText      | 0 |可编辑的区域。                            |
6290| Email         | 1 |电子邮件地址。                            |
6291| HttpAnchor    | 2 |超链接,其src为http。                     |
6292| HttpAnchorImg | 3 |带有超链接的图片,其中超链接的src为http。 |
6293| Img           | 4 |HTML::img标签。                           |
6294| Map           | 5 |地理地址。                                |
6295| Phone         | 6 |电话号码。                                |
6296| Unknown       | 7 |未知内容。                                |
6297
6298##  HitTestValue
6299
6300提供点击区域的元素信息。示例代码参考getHitTestValue。
6301
6302**系统能力:** SystemCapability.Web.Webview.Core
6303
6304| 名称 | 类型 | 可读 | 可写 | 说明|
6305| ---- | ---- | ---- | ---- |---- |
6306| type | [WebHitTestType](#webhittesttype) | 是 | 否 | 当前被点击区域的元素类型。|
6307| extra | string        | 是 | 否 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
6308
6309## WebMessage
6310
6311用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
6312
6313**系统能力:** SystemCapability.Web.Webview.Core
6314
6315| 类型       | 说明                                     |
6316| -------- | -------------------------------------- |
6317| string   | 字符串类型数据。 |
6318| ArrayBuffer   | 二进制类型数据。 |
6319
6320## JsMessageType<sup>10+</sup>
6321
6322[runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
6323
6324**系统能力:** SystemCapability.Web.Webview.Core
6325
6326| 名称         | 值 | 说明                              |
6327| ------------ | -- |--------------------------------- |
6328| NOT_SUPPORT  | 0 |不支持的数据类型。|
6329| STRING       | 1 |字符串类型。|
6330| NUMBER       | 2 |数值类型。|
6331| BOOLEAN      | 3 |布尔类型。|
6332| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
6333| ARRAY        | 5 |数组类型|
6334
6335## WebMessageType<sup>10+</sup>
6336
6337[webMessagePort](#webmessageport)接口所支持的数据类型。
6338
6339**系统能力:** SystemCapability.Web.Webview.Core
6340
6341| 名称         | 值 | 说明                            |
6342| ------------ | -- |------------------------------- |
6343| NOT_SUPPORT  | 0 |不支持的数据类型。|
6344| STRING       | 1 |字符串类型。|
6345| NUMBER       | 2 |数值类型。|
6346| BOOLEAN      | 3 |布尔类型。|
6347| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
6348| ARRAY        | 5 |数组类型。|
6349| ERROR        | 6 |错误类型。|
6350
6351## JsMessageExt<sup>10+</sup>
6352
6353[runJavaScirptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
6354
6355### getType<sup>10+</sup>
6356
6357getType(): JsMessageType
6358
6359获取数据对象的类型。
6360
6361**系统能力:** SystemCapability.Web.Webview.Core
6362
6363**返回值:**
6364
6365| 类型           | 说明                                                      |
6366| --------------| --------------------------------------------------------- |
6367| [JsMessageType](#jsmessagetype10) | [runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
6368
6369### getString<sup>10+</sup>
6370
6371getString(): string
6372
6373获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
6374
6375**系统能力:** SystemCapability.Web.Webview.Core
6376
6377**返回值:**
6378
6379| 类型           | 说明          |
6380| --------------| ------------- |
6381| string | 返回字符串类型的数据。 |
6382
6383**错误码:**
6384
6385以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6386
6387| 错误码ID | 错误信息                              |
6388| -------- | ------------------------------------- |
6389| 17100014 | The type does not match with the value of the result. |
6390
6391### getNumber<sup>10+</sup>
6392
6393getNumber(): number
6394
6395获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
6396
6397**系统能力:** SystemCapability.Web.Webview.Core
6398
6399**返回值:**
6400
6401| 类型           | 说明          |
6402| --------------| ------------- |
6403| number | 返回数值类型的数据。 |
6404
6405**错误码:**
6406
6407以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6408
6409| 错误码ID | 错误信息                              |
6410| -------- | ------------------------------------- |
6411| 17100014 | The type does not match with the value of the result. |
6412
6413### getBoolean<sup>10+</sup>
6414
6415getBoolean(): boolean
6416
6417获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
6418
6419**系统能力:** SystemCapability.Web.Webview.Core
6420
6421**返回值:**
6422
6423| 类型           | 说明          |
6424| --------------| ------------- |
6425| boolean | 返回布尔类型的数据。 |
6426
6427**错误码:**
6428
6429以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6430
6431| 错误码ID | 错误信息                              |
6432| -------- | ------------------------------------- |
6433| 17100014 | The type does not match with the value of the result. |
6434
6435### getArrayBuffer<sup>10+</sup>
6436
6437getArrayBuffer(): ArrayBuffer
6438
6439获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
6440
6441**系统能力:** SystemCapability.Web.Webview.Core
6442
6443**返回值:**
6444
6445| 类型           | 说明          |
6446| --------------| ------------- |
6447| ArrayBuffer | 返回原始二进制数据。 |
6448
6449**错误码:**
6450
6451以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6452
6453| 错误码ID | 错误信息                              |
6454| -------- | ------------------------------------- |
6455| 17100014 | The type does not match with the value of the result. |
6456
6457### getArray<sup>10+</sup>
6458
6459getArray(): Array\<string | number | boolean\>
6460
6461获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
6462
6463**系统能力:** SystemCapability.Web.Webview.Core
6464
6465**返回值:**
6466
6467| 类型           | 说明          |
6468| --------------| ------------- |
6469| Array\<string | number | boolean\> | 返回数组类型的数据。 |
6470
6471**错误码:**
6472
6473以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6474
6475| 错误码ID | 错误信息                              |
6476| -------- | ------------------------------------- |
6477| 17100014 | The type does not match with the value of the result. |
6478
6479## WebMessageExt<sup>10+</sup>
6480
6481[webMessagePort](#webmessageport)接口接收、发送的的数据对象。
6482
6483### getType<sup>10+</sup>
6484
6485getType(): WebMessageType
6486
6487获取数据对象的类型。
6488
6489**系统能力:** SystemCapability.Web.Webview.Core
6490
6491**返回值:**
6492
6493| 类型           | 说明                                                      |
6494| --------------| --------------------------------------------------------- |
6495| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
6496
6497### getString<sup>10+</sup>
6498
6499getString(): string
6500
6501获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6502
6503**系统能力:** SystemCapability.Web.Webview.Core
6504
6505**返回值:**
6506
6507| 类型           | 说明          |
6508| --------------| ------------- |
6509| string | 返回字符串类型的数据。 |
6510
6511**错误码:**
6512
6513以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6514
6515| 错误码ID | 错误信息                              |
6516| -------- | ------------------------------------- |
6517| 17100014 | The type does not match with the value of the web message. |
6518
6519### getNumber<sup>10+</sup>
6520
6521getNumber(): number
6522
6523获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6524
6525**系统能力:** SystemCapability.Web.Webview.Core
6526
6527**返回值:**
6528
6529| 类型           | 说明          |
6530| --------------| ------------- |
6531| number | 返回数值类型的数据。 |
6532
6533**错误码:**
6534
6535以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6536
6537| 错误码ID | 错误信息                              |
6538| -------- | ------------------------------------- |
6539| 17100014 | The type does not match with the value of the web message. |
6540
6541### getBoolean<sup>10+</sup>
6542
6543getBoolean(): boolean
6544
6545获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6546
6547**系统能力:** SystemCapability.Web.Webview.Core
6548
6549**返回值:**
6550
6551| 类型           | 说明          |
6552| --------------| ------------- |
6553| boolean | 返回布尔类型的数据。 |
6554
6555**错误码:**
6556
6557以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6558
6559| 错误码ID | 错误信息                              |
6560| -------- | ------------------------------------- |
6561| 17100014 | The type does not match with the value of the web message. |
6562
6563### getArrayBuffer<sup>10+</sup>
6564
6565getArrayBuffer(): ArrayBuffer
6566
6567获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6568**系统能力:** SystemCapability.Web.Webview.Core
6569
6570**返回值:**
6571
6572| 类型           | 说明          |
6573| --------------| ------------- |
6574| ArrayBuffer | 返回原始二进制数据。 |
6575
6576**错误码:**
6577
6578以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6579
6580| 错误码ID | 错误信息                              |
6581| -------- | ------------------------------------- |
6582| 17100014 | The type does not match with the value of the web message. |
6583
6584### getArray<sup>10+</sup>
6585
6586getArray(): Array\<string | number | boolean\>
6587
6588获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6589
6590**系统能力:** SystemCapability.Web.Webview.Core
6591
6592**返回值:**
6593
6594| 类型           | 说明          |
6595| --------------| ------------- |
6596| Array\<string | number | boolean\> | 返回数组类型的数据。 |
6597
6598**错误码:**
6599
6600以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6601
6602| 错误码ID | 错误信息                              |
6603| -------- | ------------------------------------- |
6604| 17100014 | The type does not match with the value of the web message. |
6605
6606### getError<sup>10+</sup>
6607
6608getError(): Error
6609
6610获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6611
6612**系统能力:** SystemCapability.Web.Webview.Core
6613
6614**返回值:**
6615
6616| 类型           | 说明          |
6617| --------------| ------------- |
6618| Error | 返回错误对象类型的数据。 |
6619
6620**错误码:**
6621
6622以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。
6623
6624| 错误码ID | 错误信息                              |
6625| -------- | ------------------------------------- |
6626| 17100014 | The type does not match with the value of the web message. |
6627
6628### setType<sup>10+</sup>
6629
6630setType(type: WebMessageType): void
6631
6632设置数据对象的类型。
6633
6634**系统能力:** SystemCapability.Web.Webview.Core
6635
6636**参数:**
6637
6638| 参数名 | 类型   | 必填 | 说明                   |
6639| ------ | ------ | ---- | ---------------------- |
6640| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
6641
6642**错误码:**
6643
6644| 错误码ID | 错误信息                              |
6645| -------- | ------------------------------------- |
6646| 17100014 | The type does not match with the value of the web message. |
6647
6648### setString<sup>10+</sup>
6649
6650setString(message: string): void
6651
6652设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6653
6654**系统能力:** SystemCapability.Web.Webview.Core
6655
6656**参数:**
6657
6658| 参数名 | 类型   | 必填 | 说明                   |
6659| ------ | ------ | ---- | -------------------- |
6660| message  | string | 是   | 字符串类型数据。 |
6661
6662**错误码:**
6663
6664| 错误码ID | 错误信息                              |
6665| -------- | ------------------------------------- |
6666| 17100014 | The type does not match with the value of the web message. |
6667
6668### setNumber<sup>10+</sup>
6669
6670setNumber(message: number): void
6671
6672设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6673
6674**系统能力:** SystemCapability.Web.Webview.Core
6675
6676**参数:**
6677
6678| 参数名 | 类型   | 必填 | 说明                   |
6679| ------ | ------ | ---- | -------------------- |
6680| message  | number | 是   | 数值类型数据。 |
6681
6682**错误码:**
6683
6684| 错误码ID | 错误信息                              |
6685| -------- | ------------------------------------- |
6686| 17100014 | The type does not match with the value of the web message. |
6687
6688### setBoolean<sup>10+</sup>
6689
6690setBoolean(message: boolean): void
6691
6692设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6693
6694**系统能力:** SystemCapability.Web.Webview.Core
6695
6696**参数:**
6697
6698| 参数名 | 类型   | 必填 | 说明                   |
6699| ------ | ------ | ---- | -------------------- |
6700| message  | boolean | 是   | 布尔类型数据。 |
6701
6702**错误码:**
6703
6704| 错误码ID | 错误信息                              |
6705| -------- | ------------------------------------- |
6706| 17100014 | The type does not match with the value of the web message. |
6707
6708### setArrayBuffer<sup>10+</sup>
6709
6710setArrayBuffer(message: ArrayBuffer): void
6711
6712设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6713
6714**系统能力:** SystemCapability.Web.Webview.Core
6715
6716**参数:**
6717
6718| 参数名 | 类型   | 必填 | 说明                   |
6719| ------ | ------ | ---- | -------------------- |
6720| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
6721
6722**错误码:**
6723
6724| 错误码ID | 错误信息                              |
6725| -------- | ------------------------------------- |
6726| 17100014 | The type does not match with the value of the web message. |
6727
6728### setArray<sup>10+</sup>
6729
6730setArray(message: Array\<string | number | boolean\>): void
6731
6732设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6733
6734**系统能力:** SystemCapability.Web.Webview.Core
6735
6736**参数:**
6737
6738| 参数名 | 类型   | 必填 | 说明                   |
6739| ------ | ------ | ---- | -------------------- |
6740| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
6741
6742**错误码:**
6743
6744| 错误码ID | 错误信息                              |
6745| -------- | ------------------------------------- |
6746| 17100014 | The type does not match with the value of the web message. |
6747
6748### setError<sup>10+</sup>
6749
6750setError(message: Error): void
6751
6752设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
6753
6754**系统能力:** SystemCapability.Web.Webview.Core
6755
6756**参数:**
6757
6758| 参数名 | 类型   | 必填 | 说明                   |
6759| ------ | ------ | ---- | -------------------- |
6760| message  | Error | 是   | 错误对象类型数据。 |
6761
6762**错误码:**
6763
6764| 错误码ID | 错误信息                              |
6765| -------- | ------------------------------------- |
6766| 17100014 | The type does not match with the value of the web message. |
6767
6768## WebStorageOrigin
6769
6770提供Web SQL数据库的使用信息。
6771
6772**系统能力:** SystemCapability.Web.Webview.Core
6773
6774| 名称   | 类型   | 可读 | 可写 | 说明 |
6775| ------ | ------ | ---- | ---- | ---- |
6776| origin | string | 是  | 否 | 指定源的字符串索引。 |
6777| usage  | number | 是  | 否 | 指定源的存储量。     |
6778| quota  | number | 是  | 否 | 指定源的存储配额。   |
6779
6780## BackForwardList
6781
6782当前Webview的历史信息列表。
6783
6784**系统能力:** SystemCapability.Web.Webview.Core
6785
6786| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
6787| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
6788| currentIndex | number | 是   | 否   | 当前在页面历史列表中的索引。                                 |
6789| size         | number | 是   | 否   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
6790
6791### getItemAtIndex
6792
6793getItemAtIndex(index: number): HistoryItem
6794
6795获取历史列表中指定索引的历史记录项信息。
6796
6797**系统能力:** SystemCapability.Web.Webview.Core
6798
6799**参数:**
6800
6801| 参数名 | 类型   | 必填 | 说明                   |
6802| ------ | ------ | ---- | ---------------------- |
6803| index  | number | 是   | 指定历史列表中的索引。 |
6804
6805**返回值:**
6806
6807| 类型                        | 说明         |
6808| --------------------------- | ------------ |
6809| [HistoryItem](#historyitem) | 历史记录项。 |
6810
6811**示例:**
6812
6813```ts
6814// xxx.ets
6815import web_webview from '@ohos.web.webview';
6816import image from "@ohos.multimedia.image";
6817import business_error from '@ohos.base';
6818
6819@Entry
6820@Component
6821struct WebComponent {
6822  controller: web_webview.WebviewController = new web_webview.WebviewController();
6823  @State icon: image.PixelMap | undefined = undefined;
6824
6825  build() {
6826    Column() {
6827      Button('getBackForwardEntries')
6828        .onClick(() => {
6829          try {
6830            let list = this.controller.getBackForwardEntries();
6831            let historyItem = list.getItemAtIndex(list.currentIndex);
6832            console.log("HistoryItem: " + JSON.stringify(historyItem));
6833            this.icon = historyItem.icon;
6834          } catch (error) {
6835            let e: business_error.BusinessError = error as business_error.BusinessError;
6836            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6837          }
6838        })
6839      Web({ src: 'www.example.com', controller: this.controller })
6840    }
6841  }
6842}
6843```
6844
6845## HistoryItem
6846
6847页面历史记录项。
6848
6849**系统能力:** SystemCapability.Web.Webview.Core
6850
6851| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
6852| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
6853| icon          | [PixelMap](js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
6854| historyUrl    | string                                 | 是   | 否   | 历史记录项的url地址。        |
6855| historyRawUrl | string                                 | 是   | 否   | 历史记录项的原始url地址。    |
6856| title         | string                                 | 是   | 否   | 历史记录项的标题。           |
6857
6858## WebCustomScheme
6859
6860自定义协议配置。
6861
6862**系统能力:** SystemCapability.Web.Webview.Core
6863
6864| 名称           | 类型       | 可读 | 可写 | 说明                         |
6865| -------------- | --------- | ---- | ---- | ---------------------------- |
6866| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-'。        |
6867| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。    |
6868| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。           |
6869
6870## SecureDnsMode<sup>10+</sup>
6871
6872Web组件使用HTTPDNS的模式。
6873
6874**系统能力:** SystemCapability.Web.Webview.Core
6875
6876| 名称          | 值 | 说明                                      |
6877| ------------- | -- |----------------------------------------- |
6878| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
6879| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
6880| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|