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