• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2
3# @ohos.web.webview (Webview)
4
5@ohos.web.webview提供web控制能力,[web](ts-basic-components-web.md)组件提供网页显示的能力。
6
7> **说明:**
8>
9> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
10>
11> - 示例效果请以真机运行为准,当前IDE预览器不支持。
12
13## 需要权限
14
15访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.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| callback | 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("configCookieSync")
46  web_webview.WebCookieManager.configCookieSync("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错误码](errorcode-webview.md)。
83
84| 错误码ID | 错误信息                              |
85| -------- | ------------------------------------- |
86| 17100010 | Can not post message using this port. |
87
88**示例:**
89
90```ts
91// xxx.ets
92import web_webview from '@ohos.web.webview';
93import business_error from '@ohos.base';
94
95@Entry
96@Component
97struct WebComponent {
98  controller: web_webview.WebviewController = new web_webview.WebviewController();
99  ports: web_webview.WebMessagePort[] = [];
100
101  build() {
102    Column() {
103      Button('postMessageEvent')
104        .onClick(() => {
105          try {
106            this.ports = this.controller.createWebMessagePorts();
107            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
108            this.ports[1].postMessageEvent("post message from ets to html5");
109          } catch (error) {
110            let e: business_error.BusinessError = error as business_error.BusinessError;
111            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
112          }
113        })
114      Web({ src: 'www.example.com', controller: this.controller })
115    }
116  }
117}
118```
119
120### onMessageEvent
121
122onMessageEvent(callback: (result: WebMessage) => void): void
123
124注册回调函数,接收HTML侧发送过来的消息。完整示例代码参考[postMessage](#postmessage)。
125
126**系统能力:** SystemCapability.Web.Webview.Core
127
128**参数:**
129
130| 参数名   | 类型     | 必填 | 说明                 |
131| -------- | -------- | ---- | :------------------- |
132| result | [WebMessage](#webmessage) | 是   | 接收到的消息。 |
133
134**错误码:**
135
136以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
137
138| 错误码ID | 错误信息                                        |
139| -------- | ----------------------------------------------- |
140| 17100006 | Can not register message event using this port. |
141
142**示例:**
143
144```ts
145// xxx.ets
146import web_webview from '@ohos.web.webview';
147import business_error from '@ohos.base';
148
149@Entry
150@Component
151struct WebComponent {
152  controller: web_webview.WebviewController = new web_webview.WebviewController();
153  ports: web_webview.WebMessagePort[] = [];
154
155  build() {
156    Column() {
157      Button('onMessageEvent')
158        .onClick(() => {
159          try {
160            this.ports = this.controller.createWebMessagePorts();
161            this.ports[1].onMessageEvent((msg) => {
162              if (typeof(msg) == "string") {
163                console.log("received string message from html5, string is:" + msg);
164              } else if (typeof(msg) == "object") {
165                if (msg instanceof ArrayBuffer) {
166                  console.log("received arraybuffer from html5, length is:" + msg.byteLength);
167                } else {
168                  console.log("not support");
169                }
170              } else {
171                console.log("not support");
172              }
173            })
174          } catch (error) {
175            let e: business_error.BusinessError = error as business_error.BusinessError;
176            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
177          }
178        })
179      Web({ src: 'www.example.com', controller: this.controller })
180    }
181  }
182}
183```
184
185### isExtentionType<sup>10+</sup>
186
187**系统能力:** SystemCapability.Web.Webview.Core
188
189| 名称         | 类型   | 可读 | 可写 | 说明                                              |
190| ------------ | ------ | ---- | ---- | ------------------------------------------------|
191| isExtentionType | boolean | 是   | 否 | 创建WebMessagePort时是否指定使用扩展增强接口。   |
192
193### postMessageEventExt<sup>10+</sup>
194
195postMessageEventExt(message: WebMessageExt): void
196
197发送消息。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
198
199**系统能力:** SystemCapability.Web.Webview.Core
200
201**参数:**
202
203| 参数名  | 类型   | 必填 | 说明           |
204| ------- | ------ | ---- | :------------- |
205| message | [WebMessageExt](#webmessageext10) | 是   | 要发送的消息。 |
206
207**错误码:**
208
209以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
210
211| 错误码ID | 错误信息                              |
212| -------- | ------------------------------------- |
213| 17100010 | Can not post message using this port. |
214
215### onMessageEventExt<sup>10+</sup>
216
217onMessageEventExt(callback: (result: WebMessageExt) => void): void
218
219注册回调函数,接收HTML5侧发送过来的消息。
220
221**系统能力:** SystemCapability.Web.Webview.Core
222
223**参数:**
224
225| 参数名   | 类型     | 必填 | 说明                 |
226| -------- | -------- | ---- | :------------------- |
227| result | [WebMessageExt](#webmessageext10) | 是   | 接收到的消息。 |
228
229**错误码:**
230
231以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
232
233| 错误码ID | 错误信息                                        |
234| -------- | ----------------------------------------------- |
235| 17100006 | Can not register message event using this port. |
236
237**示例:**
238
239```ts
240// xxx.ets
241import web_webview from '@ohos.web.webview';
242import business_error from '@ohos.base';
243
244class TestObj {
245  test(str: string): ArrayBuffer {
246    let buf = new ArrayBuffer(str.length);
247    let buff = new Uint8Array(buf);
248
249    for (let i = 0; i < str.length; i++) {
250      buff[i] = str.charCodeAt(i);
251    }
252    return buf;
253  }
254}
255
256// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。
257@Entry
258@Component
259struct WebComponent {
260  controller: web_webview.WebviewController = new web_webview.WebviewController();
261  ports: web_webview.WebMessagePort[] = [];
262  nativePort: web_webview.WebMessagePort | null = null;
263  @State msg1: string = "";
264  @State msg2: string = "";
265  message: web_webview.WebMessageExt = new web_webview.WebMessageExt();
266  @State testObjtest: TestObj = new TestObj();
267
268  build() {
269    Column() {
270      Text(this.msg1).fontSize(16)
271      Text(this.msg2).fontSize(16)
272      Button('SendToH5 setString').margin({
273        right: 800,
274      })
275        .onClick(() => {
276          // 使用本侧端口发送消息给HTML5
277          try {
278            console.log("In ArkTS side send true start");
279            if (this.nativePort) {
280              this.message.setType(1);
281              this.message.setString("helloFromEts");
282              this.nativePort.postMessageEventExt(this.message);
283            }
284          }
285          catch (error) {
286            let e: business_error.BusinessError = error as business_error.BusinessError;
287            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
288          }
289        })
290        Button('SendToH5 setNumber').margin({
291        top: 10,
292        right: 800,
293      })
294        .onClick(() => {
295          // 使用本侧端口发送消息给HTML5
296          try {
297            console.log("In ArkTS side send true start");
298            if (this.nativePort) {
299              this.message.setType(2);
300              this.message.setNumber(12345);
301              this.nativePort.postMessageEventExt(this.message);
302            }
303          }
304          catch (error) {
305            let e: business_error.BusinessError = error as business_error.BusinessError;
306            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
307          }
308        })
309        Button('SendToH5 setBoolean').margin({
310        top: -90,
311      })
312        .onClick(() => {
313          // 使用本侧端口发送消息给HTML5
314          try {
315            console.log("In ArkTS side send true start");
316            if (this.nativePort) {
317              this.message.setType(3);
318              this.message.setBoolean(true);
319              this.nativePort.postMessageEventExt(this.message);
320            }
321          }
322          catch (error) {
323            let e: business_error.BusinessError = error as business_error.BusinessError;
324            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
325          }
326        })
327        Button('SendToH5 setArrayBuffer').margin({
328        top: 10,
329      })
330        .onClick(() => {
331          // 使用本侧端口发送消息给HTML5
332          try {
333            console.log("In ArkTS side send true start");
334            if (this.nativePort) {
335              this.message.setType(4);
336              this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test"));
337              this.nativePort.postMessageEventExt(this.message);
338            }
339          }
340          catch (error) {
341            let e: business_error.BusinessError = error as business_error.BusinessError;
342            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
343          }
344        })
345        Button('SendToH5 setArray').margin({
346        top: -90,
347        left: 800,
348      })
349        .onClick(() => {
350          // 使用本侧端口发送消息给HTML5
351          try {
352            console.log("In ArkTS side send true start");
353            if (this.nativePort) {
354              this.message.setType(5);
355              this.message.setArray([1,2,3]);
356              this.nativePort.postMessageEventExt(this.message);
357            }
358          }
359          catch (error) {
360            let e: business_error.BusinessError = error as business_error.BusinessError;
361            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
362          }
363        })
364        Button('SendToH5 setError').margin({
365        top: 10,
366        left: 800,
367      })
368        .onClick(() => {
369          // 使用本侧端口发送消息给HTML5
370          try {
371            console.log("In ArkTS side send true start");
372            throw new ReferenceError("ReferenceError");
373          }
374          catch (error) {
375            if (this.nativePort) {
376              this.message.setType(6);
377              this.message.setError(error);
378              this.nativePort.postMessageEventExt(this.message);
379            }
380            let e: business_error.BusinessError = error as business_error.BusinessError;
381            console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code},  Message: ${e.message}`);
382          }
383        })
384
385      Web({ src: $rawfile('index.html'), controller: this.controller })
386        .onPageEnd(() => {
387          console.log("In ArkTS side message onPageEnd init mesaage channel");
388          // 1. 创建消息端口
389          this.ports = this.controller.createWebMessagePorts(true);
390          // 2. 发送端口1到HTML5
391          this.controller.postMessage("init_web_messageport", [this.ports[1]], "*");
392          // 3. 保存端口0到本地
393          this.nativePort = this.ports[0];
394          // 4. 设置回调函数
395          this.nativePort.onMessageEventExt((result) => {
396            console.log("In ArkTS side got message");
397            try {
398              let type = result.getType();
399              console.log("In ArkTS side getType:" + type);
400              switch (type) {
401                case web_webview.WebMessageType.STRING: {
402                  this.msg1 = "result type:" + typeof (result.getString());
403                  this.msg2 = "result getString:" + ((result.getString()));
404                  break;
405                }
406                case web_webview.WebMessageType.NUMBER: {
407                  this.msg1 = "result type:" + typeof (result.getNumber());
408                  this.msg2 = "result getNumber:" + ((result.getNumber()));
409                  break;
410                }
411                case web_webview.WebMessageType.BOOLEAN: {
412                  this.msg1 = "result type:" + typeof (result.getBoolean());
413                  this.msg2 = "result getBoolean:" + ((result.getBoolean()));
414                  break;
415                }
416                case web_webview.WebMessageType.ARRAY_BUFFER: {
417                  this.msg1 = "result type:" + typeof (result.getArrayBuffer());
418                  this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
419                  break;
420                }
421                case web_webview.WebMessageType.ARRAY: {
422                  this.msg1 = "result type:" + typeof (result.getArray());
423                  this.msg2 = "result getArray:" + result.getArray();
424                  break;
425                }
426                case web_webview.WebMessageType.ERROR: {
427                  this.msg1 = "result type:" + typeof (result.getError());
428                  this.msg2 = "result getError:" + result.getError();
429                  break;
430                }
431                default: {
432                  this.msg1 = "default break, type:" + type;
433                  break;
434                }
435              }
436            }
437            catch (error) {
438              let e: business_error.BusinessError = error as business_error.BusinessError;
439              console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
440            }
441          });
442        })
443    }
444  }
445}
446```
447
448加载的html文件。
449```html
450<!--index.html-->
451<!DOCTYPE html>
452<html lang="en-gb">
453<head>
454    <title>WebView MessagePort Demo</title>
455</head>
456
457<body>
458<h1>Html5 Send and Receive Message</h1>
459<h3 id="msg">Receive string:</h3>
460<h3 id="msg2">Receive arraybuffer:</h3>
461<div style="font-size: 10pt; text-align: center;">
462    <input type="button" value="Send String" onclick="postStringToApp();" /><br/>
463</div>
464</body>
465<script src="index.js"></script>
466</html>
467```
468
469```js
470//index.js
471var h5Port;
472window.addEventListener('message', function(event) {
473    if (event.data == 'init_web_messageport') {
474        if(event.ports[0] != null) {
475            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
476            h5Port.onmessage = function(event) {
477                console.log("hwd In html got message");
478                // 2. 接收ets侧发送过来的消息.
479                var result = event.data;
480                console.log("In html got message, typeof: ", typeof(result));
481                console.log("In html got message, result: ", (result));
482                if (typeof(result) == "string") {
483                    console.log("In html got message, String: ", result);
484                    document.getElementById("msg").innerHTML  =  "String:" + result;
485                } else if (typeof(result) == "number") {
486                  console.log("In html side got message, number: ", result);
487                    document.getElementById("msg").innerHTML = "Number:" + result;
488                } else if (typeof(result) == "boolean") {
489                    console.log("In html side got message, boolean: ", result);
490                    document.getElementById("msg").innerHTML = "Boolean:" + result;
491                } else if (typeof(result) == "object") {
492                    if (result instanceof ArrayBuffer) {
493                        document.getElementById("msg2").innerHTML  =  "ArrayBuffer:" + result.byteLength;
494                        console.log("In html got message, byteLength: ", result.byteLength);
495                    } else if (result instanceof Error) {
496                        console.log("In html error message, err:" + (result));
497                        console.log("In html error message, typeof err:" + typeof(result));
498                        document.getElementById("msg2").innerHTML  =  "Error:" + result.name + ", msg:" + result.message;
499                    } else if (result instanceof Array) {
500                        console.log("In html got message, Array");
501                        console.log("In html got message, Array length:" + result.length);
502                        console.log("In html got message, Array[0]:" + (result[0]));
503                        console.log("In html got message, typeof Array[0]:" + typeof(result[0]));
504                        document.getElementById("msg2").innerHTML  =  "Array len:" + result.length + ", value:" + result;
505                    } else {
506                        console.log("In html got message, not any instance of support type");
507                        document.getElementById("msg").innerHTML  = "not any instance of support type";
508                    }
509                } else {
510                    console.log("In html got message, not support type");
511                    document.getElementById("msg").innerHTML  = "not support type";
512                }
513            }
514            h5Port.onmessageerror = (event) => {
515                console.error(`hwd In html Error receiving message: ${event}`);
516            };
517        }
518    }
519})
520
521// 使用h5Port往ets侧发送String类型的消息.
522function postStringToApp() {
523    if (h5Port) {
524        console.log("In html send string message");
525        h5Port.postMessage("hello");
526        console.log("In html send string message end");
527    } else {
528        console.error("In html h5port is null, please init first");
529    }
530}
531```
532
533### close
534
535close(): void
536
537关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。
538
539**系统能力:** SystemCapability.Web.Webview.Core
540
541**示例:**
542
543```ts
544// xxx.ets
545import web_webview from '@ohos.web.webview';
546import business_error from '@ohos.base';
547
548@Entry
549@Component
550struct WebComponent {
551  controller: web_webview.WebviewController = new web_webview.WebviewController();
552  msgPort: web_webview.WebMessagePort[] = [];
553
554  build() {
555    Column() {
556      // 先使用createWebMessagePorts创建端口。
557      Button('createWebMessagePorts')
558        .onClick(() => {
559          try {
560            this.msgPort = this.controller.createWebMessagePorts();
561            console.log("createWebMessagePorts size:" + this.msgPort.length)
562          } catch (error) {
563            let e: business_error.BusinessError = error as business_error.BusinessError;
564            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
565          }
566        })
567      Button('close')
568        .onClick(() => {
569          try {
570            if (this.msgPort && this.msgPort.length == 2) {
571              this.msgPort[1].close();
572            } else {
573              console.error("msgPort is null, Please initialize first");
574            }
575          } catch (error) {
576            let e: business_error.BusinessError = error as business_error.BusinessError;
577            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
578          }
579        })
580      Web({ src: 'www.example.com', controller: this.controller })
581    }
582  }
583}
584```
585
586## WebviewController
587
588通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
589
590### constructor<sup>11+</sup>
591
592constructor(webTag?: string)
593
594用于创建 WebviewController 对象的构造函数。
595
596> **说明:**
597>
598> webTag是需要开发者自定义的一个标记,即开发者给web的一个字符串形式参数,用来做标记。
599
600**系统能力:** SystemCapability.Web.Webview.Core
601
602**参数:**
603
604| 参数名     | 类型   | 必填 | 说明                               |
605| ---------- | ------ | ---- | -------------------------------- |
606| webTag   | string | 否   | 指定了 Web 组件的名称,默认为 Empty。 |
607
608**示例:**
609
610```ts
611// xxx.ets
612import web_webview from '@ohos.web.webview';
613import business_error from '@ohos.base';
614
615class WebObj {
616  constructor() {
617  }
618
619  webTest(): string {
620    console.log('Web test');
621    return "Web test";
622  }
623
624  webString(): void {
625    console.log('Web test toString');
626  }
627}
628
629@Entry
630@Component
631struct WebComponent {
632  controller: web_webview.WebviewController = new web_webview.WebviewController()
633  @State webTestObj: WebObj = new WebObj();
634  build() {
635    Column() {
636      Button('refresh')
637        .onClick(() => {
638          try {
639            this.controller.refresh();
640          } catch (error) {
641            let e: business_error.BusinessError = error as business_error.BusinessError;
642            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
643          }
644        })
645      Web({ src: '', controller: this.controller })
646        .javaScriptAccess(true)
647        .onControllerAttached(() => {
648          this.controller.loadUrl($rawfile("index.html"));
649          this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
650        })
651    }
652  }
653}
654```
655
656加载的html文件。
657```html
658<!-- index.html -->
659<!DOCTYPE html>
660<html>
661    <meta charset="utf-8">
662    <body>
663      <button type="button" onclick="htmlTest()">Click Me!</button>
664      <p id="demo"></p>
665      <p id="webDemo"></p>
666    </body>
667    <script type="text/javascript">
668    function htmlTest() {
669      // This function call expects to return "Web test"
670      let webStr = objTestName.webTest();
671      document.getElementById("webDemo").innerHTML=webStr;
672      console.log('objTestName.webTest result:'+ webStr)
673    }
674</script>
675</html>
676```
677
678### initializeWebEngine
679
680static initializeWebEngine(): void
681
682在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。
683
684**系统能力:** SystemCapability.Web.Webview.Core
685
686**示例:**
687
688本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。
689
690```ts
691// xxx.ts
692import UIAbility from '@ohos.app.ability.UIAbility';
693import web_webview from '@ohos.web.webview';
694import AbilityConstant from '@ohos.app.ability.AbilityConstant';
695import Want from '@ohos.app.ability.Want';
696
697export default class EntryAbility extends UIAbility {
698  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
699    console.log("EntryAbility onCreate")
700    web_webview.WebviewController.initializeWebEngine()
701    console.log("EntryAbility onCreate done")
702  }
703}
704```
705
706### setHttpDns<sup>10+</sup>
707
708static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void
709
710设置Web组件是否使用HTTPDNS解析dns。
711
712**系统能力:** SystemCapability.Web.Webview.Core
713
714**参数:**
715
716| 参数名              | 类型    | 必填   |  说明 |
717| ------------------ | ------- | ---- | ------------- |
718| secureDnsMode         |   [SecureDnsMode](#securednsmode10)   | 是   | 使用HTTPDNS的模式。|
719| secureDnsConfig       | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 |
720
721**示例:**
722
723```ts
724// xxx.ts
725import UIAbility from '@ohos.app.ability.UIAbility';
726import web_webview from '@ohos.web.webview';
727import AbilityConstant from '@ohos.app.ability.AbilityConstant';
728import Want from '@ohos.app.ability.Want';
729import business_error from '@ohos.base';
730
731export default class EntryAbility extends UIAbility {
732  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
733    console.log("EntryAbility onCreate")
734    try {
735      web_webview.WebviewController.setHttpDns(web_webview.SecureDnsMode.AUTO, "https://example1.test")
736    } catch (error) {
737      let e: business_error.BusinessError = error as business_error.BusinessError;
738      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
739    }
740
741    AppStorage.setOrCreate("abilityWant", want);
742    console.log("EntryAbility onCreate done")
743  }
744}
745```
746
747### setWebDebuggingAccess
748
749static setWebDebuggingAccess(webDebuggingAccess: boolean): void
750
751设置是否启用网页调试功能。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。
752
753**系统能力:** SystemCapability.Web.Webview.Core
754
755**参数:**
756
757| 参数名              | 类型    | 必填   |  说明 |
758| ------------------ | ------- | ---- | ------------- |
759| webDebuggingAccess | boolean | 是   | 设置是否启用网页调试功能。|
760
761**示例:**
762
763```ts
764// xxx.ets
765import web_webview from '@ohos.web.webview';
766import business_error from '@ohos.base';
767
768@Entry
769@Component
770struct WebComponent {
771  controller: web_webview.WebviewController = new web_webview.WebviewController();
772
773  aboutToAppear(): void {
774    try {
775      web_webview.WebviewController.setWebDebuggingAccess(true);
776    } catch (error) {
777      let e: business_error.BusinessError = error as business_error.BusinessError;
778      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
779    }
780  }
781
782  build() {
783    Column() {
784      Web({ src: 'www.example.com', controller: this.controller })
785    }
786  }
787}
788```
789
790### loadUrl
791
792loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void
793
794加载指定的URL。
795
796**系统能力:** SystemCapability.Web.Webview.Core
797
798**参数:**
799
800| 参数名  | 类型             | 必填 | 说明                  |
801| ------- | ---------------- | ---- | :-------------------- |
802| url     | string \| Resource | 是   | 需要加载的 URL。      |
803| headers | Array\<[WebHeader](#webheader)> | 否   | URL的附加HTTP请求头。 |
804
805**错误码:**
806
807以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
808
809| 错误码ID | 错误信息                                                     |
810| -------- | ------------------------------------------------------------ |
811| 17100001 | Init error. The WebviewController must be associated with a Web component. |
812| 17100002 | Invalid url.                                                 |
813| 17100003 | Invalid resource path or file type.                          |
814
815**示例:**
816
817```ts
818// xxx.ets
819import web_webview from '@ohos.web.webview';
820import business_error from '@ohos.base';
821
822@Entry
823@Component
824struct WebComponent {
825  controller: web_webview.WebviewController = new web_webview.WebviewController();
826
827  build() {
828    Column() {
829      Button('loadUrl')
830        .onClick(() => {
831          try {
832            // 需要加载的URL是string类型。
833            this.controller.loadUrl('www.example.com');
834          } catch (error) {
835            let e: business_error.BusinessError = error as business_error.BusinessError;
836            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
837          }
838        })
839      Web({ src: 'www.example.com', controller: this.controller })
840    }
841  }
842}
843```
844
845```ts
846// xxx.ets
847import web_webview from '@ohos.web.webview';
848import business_error from '@ohos.base';
849
850@Entry
851@Component
852struct WebComponent {
853  controller: web_webview.WebviewController = new web_webview.WebviewController();
854
855  build() {
856    Column() {
857      Button('loadUrl')
858        .onClick(() => {
859          try {
860            // 带参数headers。
861            this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]);
862          } catch (error) {
863            let e: business_error.BusinessError = error as business_error.BusinessError;
864            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
865          }
866        })
867      Web({ src: 'www.example.com', controller: this.controller })
868    }
869  }
870}
871```
872
873加载本地网页,加载本地资源文件有三种方式。
874
8751.$rawfile方式。
876```ts
877// xxx.ets
878import web_webview from '@ohos.web.webview';
879import business_error from '@ohos.base';
880
881@Entry
882@Component
883struct WebComponent {
884  controller: web_webview.WebviewController = new web_webview.WebviewController();
885
886  build() {
887    Column() {
888      Button('loadUrl')
889        .onClick(() => {
890          try {
891            // 通过$rawfile加载本地资源文件。
892            this.controller.loadUrl($rawfile('index.html'));
893          } catch (error) {
894            let e: business_error.BusinessError = error as business_error.BusinessError;
895            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
896          }
897        })
898      Web({ src: 'www.example.com', controller: this.controller })
899    }
900  }
901}
902```
903
9042.resources协议。
905```ts
906// xxx.ets
907import web_webview from '@ohos.web.webview';
908import business_error from '@ohos.base';
909
910@Entry
911@Component
912struct WebComponent {
913  controller: web_webview.WebviewController = new web_webview.WebviewController();
914
915  build() {
916    Column() {
917      Button('loadUrl')
918        .onClick(() => {
919          try {
920            // 通过resource协议加载本地资源文件。
921            this.controller.loadUrl("resource://rawfile/index.html");
922          } catch (error) {
923            let e: business_error.BusinessError = error as business_error.BusinessError;
924            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
925          }
926        })
927      Web({ src: 'www.example.com', controller: this.controller })
928    }
929  }
930}
931```
932
9333.通过沙箱路径加载本地文件,可以参考[web](ts-basic-components-web.md#web)加载沙箱路径的示例代码。
934
935加载的html文件。
936```html
937<!-- index.html -->
938<!DOCTYPE html>
939<html>
940  <body>
941    <p>Hello World</p>
942  </body>
943</html>
944```
945
946### loadData
947
948loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void
949
950加载指定的数据。
951
952**系统能力:** SystemCapability.Web.Webview.Core
953
954**参数:**
955
956| 参数名     | 类型   | 必填 | 说明                                                         |
957| ---------- | ------ | ---- | ------------------------------------------------------------ |
958| data       | string | 是   | 按照"Base64"或者"URL"编码后的一段字符串。                    |
959| mimeType   | string | 是   | 媒体类型(MIME)。                                           |
960| encoding   | string | 是   | 编码类型,具体为"Base64"或者"URL"编码。                       |
961| baseUrl    | string | 否   | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 |
962| historyUrl | string | 否   | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 |
963
964> **说明:**
965>
966> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。
967> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。
968> 若html中的富文本中带有注入#等特殊字符,建议使用带有两个空格的loadData函数,将baseUrl和historyUrl置为空。
969
970**错误码:**
971
972以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
973
974| 错误码ID | 错误信息                                                     |
975| -------- | ------------------------------------------------------------ |
976| 17100001 | Init error. The WebviewController must be associated with a Web component. |
977
978**示例:**
979
980```ts
981// xxx.ets
982import web_webview from '@ohos.web.webview';
983import business_error from '@ohos.base';
984
985@Entry
986@Component
987struct WebComponent {
988  controller: web_webview.WebviewController = new web_webview.WebviewController();
989
990  build() {
991    Column() {
992      Button('loadData')
993        .onClick(() => {
994          try {
995            this.controller.loadData(
996              "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
997              "text/html",
998              "UTF-8"
999            );
1000          } catch (error) {
1001            let e: business_error.BusinessError = error as business_error.BusinessError;
1002            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1003          }
1004        })
1005      Web({ src: 'www.example.com', controller: this.controller })
1006    }
1007  }
1008}
1009```
1010
1011加载本地资源
1012```ts
1013// xxx.ets
1014import web_webview from '@ohos.web.webview';
1015import business_error from '@ohos.base';
1016
1017@Entry
1018@Component
1019struct WebComponent {
1020  controller: web_webview.WebviewController = new web_webview.WebviewController();
1021  updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>'
1022
1023  build() {
1024    Column() {
1025      Button('loadData')
1026        .onClick(() => {
1027          try {
1028            this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " ");
1029          } catch (error) {
1030            let e: business_error.BusinessError = error as business_error.BusinessError;
1031            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1032          }
1033        })
1034      Web({ src: 'www.example.com', controller: this.controller })
1035    }
1036  }
1037}
1038```
1039
1040### accessForward
1041
1042accessForward(): boolean
1043
1044当前页面是否可前进,即当前页面是否有前进历史记录。
1045
1046**系统能力:** SystemCapability.Web.Webview.Core
1047
1048**返回值:**
1049
1050| 类型    | 说明                              |
1051| ------- | --------------------------------- |
1052| boolean | 可以前进返回true,否则返回false。 |
1053
1054**错误码:**
1055
1056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1057
1058| 错误码ID | 错误信息                                                     |
1059| -------- | ------------------------------------------------------------ |
1060| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1061
1062**示例:**
1063
1064```ts
1065// xxx.ets
1066import web_webview from '@ohos.web.webview';
1067import business_error from '@ohos.base';
1068
1069@Entry
1070@Component
1071struct WebComponent {
1072  controller: web_webview.WebviewController = new web_webview.WebviewController();
1073
1074  build() {
1075    Column() {
1076      Button('accessForward')
1077        .onClick(() => {
1078          try {
1079            let result = this.controller.accessForward();
1080            console.log('result:' + result);
1081          } catch (error) {
1082            let e: business_error.BusinessError = error as business_error.BusinessError;
1083            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1084          }
1085        })
1086      Web({ src: 'www.example.com', controller: this.controller })
1087    }
1088  }
1089}
1090```
1091
1092### forward
1093
1094forward(): void
1095
1096按照历史栈,前进一个页面。一般结合accessForward一起使用。
1097
1098**系统能力:** SystemCapability.Web.Webview.Core
1099
1100**错误码:**
1101
1102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1103
1104| 错误码ID | 错误信息                                                     |
1105| -------- | ------------------------------------------------------------ |
1106| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1107
1108**示例:**
1109
1110```ts
1111// xxx.ets
1112import web_webview from '@ohos.web.webview';
1113import business_error from '@ohos.base';
1114
1115@Entry
1116@Component
1117struct WebComponent {
1118  controller: web_webview.WebviewController = new web_webview.WebviewController();
1119
1120  build() {
1121    Column() {
1122      Button('forward')
1123        .onClick(() => {
1124          try {
1125            this.controller.forward();
1126          } catch (error) {
1127            let e: business_error.BusinessError = error as business_error.BusinessError;
1128            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1129          }
1130        })
1131      Web({ src: 'www.example.com', controller: this.controller })
1132    }
1133  }
1134}
1135```
1136
1137### accessBackward
1138
1139accessBackward(): boolean
1140
1141当前页面是否可后退,即当前页面是否有返回历史记录。
1142
1143**系统能力:** SystemCapability.Web.Webview.Core
1144
1145**返回值:**
1146
1147| 类型    | 说明                             |
1148| ------- | -------------------------------- |
1149| boolean | 可以后退返回true,否则返回false。 |
1150
1151**错误码:**
1152
1153以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1154
1155| 错误码ID | 错误信息                                                     |
1156| -------- | ------------------------------------------------------------ |
1157| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1158
1159**示例:**
1160
1161```ts
1162// xxx.ets
1163import web_webview from '@ohos.web.webview';
1164import business_error from '@ohos.base';
1165
1166@Entry
1167@Component
1168struct WebComponent {
1169  controller: web_webview.WebviewController = new web_webview.WebviewController();
1170
1171  build() {
1172    Column() {
1173      Button('accessBackward')
1174        .onClick(() => {
1175          try {
1176            let result = this.controller.accessBackward();
1177            console.log('result:' + result);
1178          } catch (error) {
1179            let e: business_error.BusinessError = error as business_error.BusinessError;
1180            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1181          }
1182        })
1183      Web({ src: 'www.example.com', controller: this.controller })
1184    }
1185  }
1186}
1187```
1188
1189### backward
1190
1191backward(): void
1192
1193按照历史栈,后退一个页面。一般结合accessBackward一起使用。
1194
1195**系统能力:** SystemCapability.Web.Webview.Core
1196
1197**错误码:**
1198
1199以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1200
1201| 错误码ID | 错误信息                                                     |
1202| -------- | ------------------------------------------------------------ |
1203| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1204
1205**示例:**
1206
1207```ts
1208// xxx.ets
1209import web_webview from '@ohos.web.webview';
1210import business_error from '@ohos.base';
1211
1212@Entry
1213@Component
1214struct WebComponent {
1215  controller: web_webview.WebviewController = new web_webview.WebviewController();
1216
1217  build() {
1218    Column() {
1219      Button('backward')
1220        .onClick(() => {
1221          try {
1222            this.controller.backward();
1223          } catch (error) {
1224            let e: business_error.BusinessError = error as business_error.BusinessError;
1225            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1226          }
1227        })
1228      Web({ src: 'www.example.com', controller: this.controller })
1229    }
1230  }
1231}
1232```
1233
1234### onActive
1235
1236onActive(): void
1237
1238调用此接口通知Web组件进入前台激活状态。
1239<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。
1240
1241**系统能力:** SystemCapability.Web.Webview.Core
1242
1243**错误码:**
1244
1245以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1246
1247| 错误码ID | 错误信息                                                     |
1248| -------- | ------------------------------------------------------------ |
1249| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1250
1251**示例:**
1252
1253```ts
1254// xxx.ets
1255import web_webview from '@ohos.web.webview';
1256import business_error from '@ohos.base';
1257
1258@Entry
1259@Component
1260struct WebComponent {
1261  controller: web_webview.WebviewController = new web_webview.WebviewController();
1262
1263  build() {
1264    Column() {
1265      Button('onActive')
1266        .onClick(() => {
1267          try {
1268            this.controller.onActive();
1269          } catch (error) {
1270            let e: business_error.BusinessError = error as business_error.BusinessError;
1271            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1272          }
1273        })
1274      Web({ src: 'www.example.com', controller: this.controller })
1275    }
1276  }
1277}
1278```
1279
1280### onInactive
1281
1282onInactive(): void
1283
1284调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。
1285
1286**系统能力:** SystemCapability.Web.Webview.Core
1287
1288**错误码:**
1289
1290以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1291
1292| 错误码ID | 错误信息                                                     |
1293| -------- | ------------------------------------------------------------ |
1294| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1295
1296**示例:**
1297
1298```ts
1299// xxx.ets
1300import web_webview from '@ohos.web.webview';
1301import business_error from '@ohos.base';
1302
1303@Entry
1304@Component
1305struct WebComponent {
1306  controller: web_webview.WebviewController = new web_webview.WebviewController();
1307
1308  build() {
1309    Column() {
1310      Button('onInactive')
1311        .onClick(() => {
1312          try {
1313            this.controller.onInactive();
1314          } catch (error) {
1315            let e: business_error.BusinessError = error as business_error.BusinessError;
1316            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1317          }
1318        })
1319      Web({ src: 'www.example.com', controller: this.controller })
1320    }
1321  }
1322}
1323```
1324
1325### refresh
1326refresh(): void
1327
1328调用此接口通知Web组件刷新网页。
1329
1330**系统能力:** SystemCapability.Web.Webview.Core
1331
1332**错误码:**
1333
1334以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1335
1336| 错误码ID | 错误信息                                                     |
1337| -------- | ------------------------------------------------------------ |
1338| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1339
1340**示例:**
1341
1342```ts
1343// xxx.ets
1344import web_webview from '@ohos.web.webview';
1345import business_error from '@ohos.base';
1346
1347@Entry
1348@Component
1349struct WebComponent {
1350  controller: web_webview.WebviewController = new web_webview.WebviewController();
1351
1352  build() {
1353    Column() {
1354      Button('refresh')
1355        .onClick(() => {
1356          try {
1357            this.controller.refresh();
1358          } catch (error) {
1359            let e: business_error.BusinessError = error as business_error.BusinessError;
1360            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1361          }
1362        })
1363      Web({ src: 'www.example.com', controller: this.controller })
1364    }
1365  }
1366}
1367```
1368
1369### accessStep
1370
1371accessStep(step: number): boolean
1372
1373当前页面是否可前进或者后退给定的step步。
1374
1375**系统能力:** SystemCapability.Web.Webview.Core
1376
1377**参数:**
1378
1379| 参数名 | 类型 | 必填 | 说明                                   |
1380| ------ | -------- | ---- | ------------------------------------------ |
1381| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1382
1383**返回值:**
1384
1385| 类型    | 说明               |
1386| ------- | ------------------ |
1387| boolean | 页面是否前进或后退 |
1388
1389**错误码:**
1390
1391以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1392
1393| 错误码ID | 错误信息                                                     |
1394| -------- | ------------------------------------------------------------ |
1395| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1396
1397**示例:**
1398
1399```ts
1400// xxx.ets
1401import web_webview from '@ohos.web.webview';
1402import business_error from '@ohos.base';
1403
1404@Entry
1405@Component
1406struct WebComponent {
1407  controller: web_webview.WebviewController = new web_webview.WebviewController();
1408  @State steps: number = 2;
1409
1410  build() {
1411    Column() {
1412      Button('accessStep')
1413        .onClick(() => {
1414          try {
1415            let result = this.controller.accessStep(this.steps);
1416            console.log('result:' + result);
1417          } catch (error) {
1418            let e: business_error.BusinessError = error as business_error.BusinessError;
1419            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1420          }
1421        })
1422      Web({ src: 'www.example.com', controller: this.controller })
1423    }
1424  }
1425}
1426```
1427
1428### clearHistory
1429
1430clearHistory(): void
1431
1432删除所有前进后退记录。
1433
1434**系统能力:** SystemCapability.Web.Webview.Core
1435
1436**错误码:**
1437
1438以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1439
1440| 错误码ID | 错误信息                                                     |
1441| -------- | ------------------------------------------------------------ |
1442| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1443
1444**示例:**
1445
1446```ts
1447// xxx.ets
1448import web_webview from '@ohos.web.webview';
1449import business_error from '@ohos.base';
1450
1451@Entry
1452@Component
1453struct WebComponent {
1454  controller: web_webview.WebviewController = new web_webview.WebviewController();
1455
1456  build() {
1457    Column() {
1458      Button('clearHistory')
1459        .onClick(() => {
1460          try {
1461            this.controller.clearHistory();
1462          } catch (error) {
1463            let e: business_error.BusinessError = error as business_error.BusinessError;
1464            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1465          }
1466        })
1467      Web({ src: 'www.example.com', controller: this.controller })
1468    }
1469  }
1470}
1471```
1472
1473### getHitTest
1474
1475getHitTest(): WebHitTestType
1476
1477获取当前被点击区域的元素类型。
1478
1479**系统能力:** SystemCapability.Web.Webview.Core
1480
1481**返回值:**
1482
1483| 类型                                                         | 说明                   |
1484| ------------------------------------------------------------ | ---------------------- |
1485| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1486
1487**错误码:**
1488
1489以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1490
1491| 错误码ID | 错误信息                                                     |
1492| -------- | ------------------------------------------------------------ |
1493| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1494
1495**示例:**
1496
1497```ts
1498// xxx.ets
1499import web_webview from '@ohos.web.webview';
1500import business_error from '@ohos.base';
1501
1502@Entry
1503@Component
1504struct WebComponent {
1505  controller: web_webview.WebviewController = new web_webview.WebviewController();
1506
1507  build() {
1508    Column() {
1509      Button('getHitTest')
1510        .onClick(() => {
1511          try {
1512            let hitTestType = this.controller.getHitTest();
1513            console.log("hitTestType: " + hitTestType);
1514          } catch (error) {
1515            let e: business_error.BusinessError = error as business_error.BusinessError;
1516            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1517          }
1518        })
1519      Web({ src: 'www.example.com', controller: this.controller })
1520    }
1521  }
1522}
1523```
1524
1525### registerJavaScriptProxy
1526
1527registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>): void
1528
1529注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1530
1531**系统能力:** SystemCapability.Web.Webview.Core
1532
1533**参数:**
1534
1535| 参数名     | 类型       | 必填 | 说明                                        |
1536| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1537| object     | object         | 是   | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。<br>方法的参数和返回类型可以为string,number,boolean。<br>方法的参数和返回类型支持Dictionary,Array,最多嵌套10层,每层1w个数据。<br>方法的参数和返回类型支持Object,需要在Object里添加属性methodNameListForJsProxy:[fun1, fun2],fun1和fun2为可被调用的方法。<br>方法的参数支持Function,Promise,它们的Callback不能有返回值。<br>方法的返回类型支持Promise,Promise的Callback不能有返回值。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 |
1538| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1539| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的方法。                       |
1540
1541**错误码:**
1542
1543以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1544
1545| 错误码ID | 错误信息                                                     |
1546| -------- | ------------------------------------------------------------ |
1547| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1548
1549**示例:**
1550
1551```ts
1552// xxx.ets
1553import web_webview from '@ohos.web.webview';
1554import business_error from '@ohos.base';
1555
1556class TestObj {
1557  constructor() {
1558  }
1559
1560  test(testStr:string): string {
1561    console.log('Web Component str' + testStr);
1562    return testStr;
1563  }
1564
1565  toString(): void {
1566    console.log('Web Component toString');
1567  }
1568
1569  testNumber(testNum:number): number {
1570    console.log('Web Component number' + testNum);
1571    return testNum;
1572  }
1573
1574  testBool(testBol:boolean): boolean {
1575    console.log('Web Component boolean' + testBol);
1576    return testBol;
1577  }
1578}
1579
1580class WebObj {
1581  constructor() {
1582  }
1583
1584  webTest(): string {
1585    console.log('Web test');
1586    return "Web test";
1587  }
1588
1589  webString(): void {
1590    console.log('Web test toString');
1591  }
1592}
1593
1594@Entry
1595@Component
1596struct Index {
1597  controller: web_webview.WebviewController = new web_webview.WebviewController();
1598  @State testObjtest: TestObj = new TestObj();
1599  @State webTestObj: WebObj = new WebObj();
1600  build() {
1601    Column() {
1602      Button('refresh')
1603        .onClick(() => {
1604          try {
1605            this.controller.refresh();
1606          } catch (error) {
1607            let e: business_error.BusinessError = error as business_error.BusinessError;
1608            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1609          }
1610        })
1611      Button('Register JavaScript To Window')
1612        .onClick(() => {
1613          try {
1614            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
1615            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
1616          } catch (error) {
1617            let e: business_error.BusinessError = error as business_error.BusinessError;
1618            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1619          }
1620        })
1621      Web({ src: $rawfile('index.html'), controller: this.controller })
1622        .javaScriptAccess(true)
1623    }
1624  }
1625}
1626```
1627
1628加载的html文件。
1629```html
1630<!-- index.html -->
1631<!DOCTYPE html>
1632<html>
1633    <meta charset="utf-8">
1634    <body>
1635      <button type="button" onclick="htmlTest()">Click Me!</button>
1636      <p id="demo"></p>
1637      <p id="webDemo"></p>
1638    </body>
1639    <script type="text/javascript">
1640    function htmlTest() {
1641      // This function call expects to return "ArkUI Web Component"
1642      let str=objName.test("webtest data");
1643      objName.testNumber(1);
1644      objName.testBool(true);
1645      document.getElementById("demo").innerHTML=str;
1646      console.log('objName.test result:'+ str)
1647
1648      // This function call expects to return "Web test"
1649      let webStr = objTestName.webTest();
1650      document.getElementById("webDemo").innerHTML=webStr;
1651      console.log('objTestName.webTest result:'+ webStr)
1652    }
1653</script>
1654</html>
1655```
1656更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。
1657
1658### runJavaScript
1659
1660runJavaScript(script: string, callback : AsyncCallback\<string>): void
1661
1662异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1663
1664**系统能力:** SystemCapability.Web.Webview.Core
1665
1666**参数:**
1667
1668| 参数名   | 类型                 | 必填 | 说明                         |
1669| -------- | -------------------- | ---- | ---------------------------- |
1670| script   | string                   | 是   | JavaScript脚本。                                             |
1671| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1672
1673**错误码:**
1674
1675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1676
1677| 错误码ID | 错误信息                                                     |
1678| -------- | ------------------------------------------------------------ |
1679| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1680
1681**示例:**
1682
1683```ts
1684import web_webview from '@ohos.web.webview';
1685import business_error from '@ohos.base';
1686
1687@Entry
1688@Component
1689struct WebComponent {
1690  controller: web_webview.WebviewController = new web_webview.WebviewController();
1691  @State webResult: string = ''
1692
1693  build() {
1694    Column() {
1695      Text(this.webResult).fontSize(20)
1696      Web({ src: $rawfile('index.html'), controller: this.controller })
1697        .javaScriptAccess(true)
1698        .onPageEnd(e => {
1699          try {
1700            this.controller.runJavaScript(
1701              'test()',
1702              (error, result) => {
1703                if (error) {
1704                  let e: business_error.BusinessError = error as business_error.BusinessError;
1705                  console.error(`run JavaScript error, ErrorCode: ${e.code},  Message: ${e.message}`);
1706                  return;
1707                }
1708                if (result) {
1709                  this.webResult = result
1710                  console.info(`The test() return value is: ${result}`)
1711                }
1712              });
1713            if (e) {
1714              console.info('url: ', e.url);
1715            }
1716          } catch (error) {
1717            let e: business_error.BusinessError = error as business_error.BusinessError;
1718            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1719          }
1720        })
1721    }
1722  }
1723}
1724```
1725
1726加载的html文件。
1727```html
1728<!-- index.html -->
1729<!DOCTYPE html>
1730<html>
1731  <meta charset="utf-8">
1732  <body>
1733      Hello world!
1734  </body>
1735  <script type="text/javascript">
1736  function test() {
1737      console.log('Ark WebComponent')
1738      return "This value is from index.html"
1739  }
1740  </script>
1741</html>
1742```
1743
1744### runJavaScript
1745
1746runJavaScript(script: string): Promise\<string>
1747
1748异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1749
1750**系统能力:** SystemCapability.Web.Webview.Core
1751
1752**参数:**
1753
1754| 参数名 | 类型 | 必填 | 说明         |
1755| ------ | -------- | ---- | ---------------- |
1756| script | string   | 是   | JavaScript脚本。 |
1757
1758**返回值:**
1759
1760| 类型            | 说明                                                |
1761| --------------- | --------------------------------------------------- |
1762| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1763
1764**错误码:**
1765
1766以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1767
1768| 错误码ID | 错误信息                                                     |
1769| -------- | ------------------------------------------------------------ |
1770| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1771
1772**示例:**
1773
1774```ts
1775// xxx.ets
1776import web_webview from '@ohos.web.webview';
1777import business_error from '@ohos.base';
1778
1779@Entry
1780@Component
1781struct WebComponent {
1782  controller: web_webview.WebviewController = new web_webview.WebviewController();
1783
1784  build() {
1785    Column() {
1786      Web({ src: $rawfile('index.html'), controller: this.controller })
1787        .javaScriptAccess(true)
1788        .onPageEnd(e => {
1789          try {
1790            this.controller.runJavaScript('test()')
1791              .then((result) => {
1792                console.log('result: ' + result);
1793              })
1794              .catch((error: business_error.BusinessError) => {
1795                console.error("error: " + error);
1796              })
1797            if (e) {
1798              console.info('url: ', e.url);
1799            }
1800          } catch (error) {
1801            let e: business_error.BusinessError = error as business_error.BusinessError;
1802            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1803          }
1804        })
1805    }
1806  }
1807}
1808```
1809
1810加载的html文件。
1811```html
1812<!-- index.html -->
1813<!DOCTYPE html>
1814<html>
1815  <meta charset="utf-8">
1816  <body>
1817      Hello world!
1818  </body>
1819  <script type="text/javascript">
1820  function test() {
1821      console.log('Ark WebComponent')
1822      return "This value is from index.html"
1823  }
1824  </script>
1825</html>
1826```
1827
1828### runJavaScriptExt<sup>10+</sup>
1829
1830runJavaScriptExt(script: string, callback : AsyncCallback\<JsMessageExt>): void
1831
1832异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1833
1834**系统能力:** SystemCapability.Web.Webview.Core
1835
1836**参数:**
1837
1838| 参数名   | 类型                 | 必填 | 说明                         |
1839| -------- | -------------------- | ---- | ---------------------------- |
1840| script   | string                   | 是   | JavaScript脚本。                                             |
1841| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1842
1843**错误码:**
1844
1845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1846
1847| 错误码ID | 错误信息                                                     |
1848| -------- | ------------------------------------------------------------ |
1849| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1850
1851**示例:**
1852
1853```ts
1854import web_webview from '@ohos.web.webview';
1855import business_error from '@ohos.base';
1856
1857@Entry
1858@Component
1859struct WebComponent {
1860  controller: web_webview.WebviewController = new web_webview.WebviewController();
1861  @State msg1: string = ''
1862  @State msg2: string = ''
1863
1864  build() {
1865    Column() {
1866      Text(this.msg1).fontSize(20)
1867      Text(this.msg2).fontSize(20)
1868      Web({ src: $rawfile('index.html'), controller: this.controller })
1869        .javaScriptAccess(true)
1870        .onPageEnd(e => {
1871          try {
1872            this.controller.runJavaScriptExt(
1873              'test()',
1874              (error, result) => {
1875                if (error) {
1876                  let e: business_error.BusinessError = error as business_error.BusinessError;
1877                  console.error(`run JavaScript error, ErrorCode: ${e.code},  Message: ${e.message}`)
1878                  return;
1879                }
1880                if (result) {
1881                  try {
1882                    let type = result.getType();
1883                    switch (type) {
1884                      case web_webview.JsMessageType.STRING: {
1885                        this.msg1 = "result type:" + typeof (result.getString());
1886                        this.msg2 = "result getString:" + ((result.getString()));
1887                        break;
1888                      }
1889                      case web_webview.JsMessageType.NUMBER: {
1890                        this.msg1 = "result type:" + typeof (result.getNumber());
1891                        this.msg2 = "result getNumber:" + ((result.getNumber()));
1892                        break;
1893                      }
1894                      case web_webview.JsMessageType.BOOLEAN: {
1895                        this.msg1 = "result type:" + typeof (result.getBoolean());
1896                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
1897                        break;
1898                      }
1899                      case web_webview.JsMessageType.ARRAY_BUFFER: {
1900                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
1901                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
1902                        break;
1903                      }
1904                      case web_webview.JsMessageType.ARRAY: {
1905                        this.msg1 = "result type:" + typeof (result.getArray());
1906                        this.msg2 = "result getArray:" + result.getArray();
1907                        break;
1908                      }
1909                      default: {
1910                        this.msg1 = "default break, type:" + type;
1911                        break;
1912                      }
1913                    }
1914                  }
1915                  catch (resError) {
1916                    let e: business_error.BusinessError = resError as business_error.BusinessError;
1917                    console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1918                  }
1919                }
1920              });
1921            if (e) {
1922              console.info('url: ', e.url);
1923            }
1924          } catch (error) {
1925            let e: business_error.BusinessError = error as business_error.BusinessError;
1926            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
1927          }
1928        })
1929    }
1930  }
1931}
1932```
1933
1934加载的html文件。
1935```html
1936<!-- index.html -->
1937<!DOCTYPE html>
1938<html lang="en-gb">
1939<body>
1940<h1>run JavaScript Ext demo</h1>
1941</body>
1942<script type="text/javascript">
1943function test() {
1944  return "hello, world";
1945}
1946</script>
1947</html>
1948```
1949
1950### runJavaScriptExt<sup>10+</sup>
1951
1952runJavaScriptExt(script: string): Promise\<JsMessageExt>
1953
1954异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1955
1956**系统能力:** SystemCapability.Web.Webview.Core
1957
1958**参数:**
1959
1960| 参数名 | 类型 | 必填 | 说明         |
1961| ------ | -------- | ---- | ---------------- |
1962| script | string   | 是   | JavaScript脚本。 |
1963
1964**返回值:**
1965
1966| 类型            | 说明                                                |
1967| --------------- | --------------------------------------------------- |
1968| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
1969
1970**错误码:**
1971
1972以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1973
1974| 错误码ID | 错误信息                                                     |
1975| -------- | ------------------------------------------------------------ |
1976| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1977
1978**示例:**
1979
1980```ts
1981// xxx.ets
1982import web_webview from '@ohos.web.webview';
1983import business_error from '@ohos.base';
1984
1985@Entry
1986@Component
1987struct WebComponent {
1988  controller: web_webview.WebviewController = new web_webview.WebviewController();
1989  @State webResult: string = '';
1990  @State msg1: string = ''
1991  @State msg2: string = ''
1992
1993  build() {
1994    Column() {
1995      Text(this.webResult).fontSize(20)
1996      Text(this.msg1).fontSize(20)
1997      Text(this.msg2).fontSize(20)
1998      Web({ src: $rawfile('index.html'), controller: this.controller })
1999        .javaScriptAccess(true)
2000        .onPageEnd(() => {
2001          this.controller.runJavaScriptExt('test()')
2002            .then((result) => {
2003              try {
2004                let type = result.getType();
2005                switch (type) {
2006                  case web_webview.JsMessageType.STRING: {
2007                    this.msg1 = "result type:" + typeof (result.getString());
2008                    this.msg2 = "result getString:" + ((result.getString()));
2009                    break;
2010                  }
2011                  case web_webview.JsMessageType.NUMBER: {
2012                    this.msg1 = "result type:" + typeof (result.getNumber());
2013                    this.msg2 = "result getNumber:" + ((result.getNumber()));
2014                    break;
2015                  }
2016                  case web_webview.JsMessageType.BOOLEAN: {
2017                    this.msg1 = "result type:" + typeof (result.getBoolean());
2018                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2019                    break;
2020                  }
2021                  case web_webview.JsMessageType.ARRAY_BUFFER: {
2022                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2023                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2024                    break;
2025                  }
2026                  case web_webview.JsMessageType.ARRAY: {
2027                    this.msg1 = "result type:" + typeof (result.getArray());
2028                    this.msg2 = "result getArray:" + result.getArray();
2029                    break;
2030                  }
2031                  default: {
2032                    this.msg1 = "default break, type:" + type;
2033                    break;
2034                  }
2035                }
2036              }
2037              catch (resError) {
2038                let e: business_error.BusinessError = resError as business_error.BusinessError;
2039                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2040              }
2041            })
2042            .catch((error: business_error.BusinessError) => {
2043              console.error("error: " + error);
2044            })
2045        })
2046    }
2047  }
2048}
2049```
2050
2051加载的html文件。
2052```html
2053<!-- index.html -->
2054<!DOCTYPE html>
2055<html lang="en-gb">
2056<body>
2057<h1>run JavaScript Ext demo</h1>
2058</body>
2059<script type="text/javascript">
2060function test() {
2061  return "hello, world";
2062}
2063</script>
2064</html>
2065```
2066
2067### deleteJavaScriptRegister
2068
2069deleteJavaScriptRegister(name: string): void
2070
2071删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
2072
2073**系统能力:** SystemCapability.Web.Webview.Core
2074
2075**参数:**
2076
2077| 参数名 | 类型 | 必填 | 说明  |
2078| ------ | -------- | ---- | ---- |
2079| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
2080
2081**错误码:**
2082
2083以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2084
2085| 错误码ID | 错误信息                                                     |
2086| -------- | ------------------------------------------------------------ |
2087| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2088| 17100008 | Cannot delete JavaScriptProxy.                               |
2089
2090**示例:**
2091
2092```ts
2093// xxx.ets
2094import web_webview from '@ohos.web.webview';
2095import business_error from '@ohos.base';
2096
2097class TestObj {
2098  constructor() {
2099  }
2100
2101  test(): string {
2102    return "ArkUI Web Component";
2103  }
2104
2105  toString(): void {
2106    console.log('Web Component toString');
2107  }
2108}
2109
2110@Entry
2111@Component
2112struct WebComponent {
2113  controller: web_webview.WebviewController = new web_webview.WebviewController();
2114  @State testObjtest: TestObj = new TestObj();
2115  @State name: string = 'objName';
2116  build() {
2117    Column() {
2118      Button('refresh')
2119        .onClick(() => {
2120          try {
2121            this.controller.refresh();
2122          } catch (error) {
2123            let e: business_error.BusinessError = error as business_error.BusinessError;
2124            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2125          }
2126        })
2127      Button('Register JavaScript To Window')
2128        .onClick(() => {
2129          try {
2130            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
2131          } catch (error) {
2132            let e: business_error.BusinessError = error as business_error.BusinessError;
2133            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2134          }
2135        })
2136      Button('deleteJavaScriptRegister')
2137        .onClick(() => {
2138          try {
2139            this.controller.deleteJavaScriptRegister(this.name);
2140          } catch (error) {
2141            let e: business_error.BusinessError = error as business_error.BusinessError;
2142            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2143          }
2144        })
2145      Web({ src: $rawfile('index.html'), controller: this.controller })
2146        .javaScriptAccess(true)
2147    }
2148  }
2149}
2150```
2151
2152加载的html文件。
2153```html
2154<!-- index.html -->
2155<!DOCTYPE html>
2156<html>
2157    <meta charset="utf-8">
2158    <body>
2159      <button type="button" onclick="htmlTest()">Click Me!</button>
2160      <p id="demo"></p>
2161    </body>
2162    <script type="text/javascript">
2163    function htmlTest() {
2164      let str=objName.test();
2165      document.getElementById("demo").innerHTML=str;
2166      console.log('objName.test result:'+ str)
2167    }
2168</script>
2169</html>
2170```
2171
2172### zoom
2173
2174zoom(factor: number): void
2175
2176调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。
2177
2178**系统能力:** SystemCapability.Web.Webview.Core
2179
2180**参数:**
2181
2182| 参数名 | 类型 | 必填 | 说明 |
2183| ------ | -------- | ---- | ------------------------------------------------------------ |
2184| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 |
2185
2186**错误码:**
2187
2188以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2189
2190| 错误码ID | 错误信息                                                     |
2191| -------- | ------------------------------------------------------------ |
2192| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2193| 17100004 | Function not enable.                                         |
2194
2195**示例:**
2196
2197```ts
2198// xxx.ets
2199import web_webview from '@ohos.web.webview';
2200import business_error from '@ohos.base';
2201
2202@Entry
2203@Component
2204struct WebComponent {
2205  controller: web_webview.WebviewController = new web_webview.WebviewController();
2206  @State factor: number = 1;
2207
2208  build() {
2209    Column() {
2210      Button('zoom')
2211        .onClick(() => {
2212          try {
2213            this.controller.zoom(this.factor);
2214          } catch (error) {
2215            let e: business_error.BusinessError = error as business_error.BusinessError;
2216            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2217          }
2218        })
2219      Web({ src: 'www.example.com', controller: this.controller })
2220        .zoomAccess(true)
2221    }
2222  }
2223}
2224```
2225
2226### searchAllAsync
2227
2228searchAllAsync(searchString: string): void
2229
2230异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。
2231
2232**系统能力:** SystemCapability.Web.Webview.Core
2233
2234**参数:**
2235
2236| 参数名       | 类型 | 必填 | 说明       |
2237| ------------ | -------- | ---- | -------------- |
2238| searchString | string   | 是   | 查找的关键字。 |
2239
2240**错误码:**
2241
2242以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2243
2244| 错误码ID | 错误信息                                                     |
2245| -------- | ------------------------------------------------------------ |
2246| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2247
2248**示例:**
2249
2250```ts
2251// xxx.ets
2252import web_webview from '@ohos.web.webview';
2253import business_error from '@ohos.base';
2254
2255@Entry
2256@Component
2257struct WebComponent {
2258  controller: web_webview.WebviewController = new web_webview.WebviewController();
2259  @State searchString: string = "Hello World";
2260
2261  build() {
2262    Column() {
2263      Button('searchString')
2264        .onClick(() => {
2265          try {
2266            this.controller.searchAllAsync(this.searchString);
2267          } catch (error) {
2268            let e: business_error.BusinessError = error as business_error.BusinessError;
2269            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2270          }
2271        })
2272      Web({ src: $rawfile('index.html'), controller: this.controller })
2273        .onSearchResultReceive(ret => {
2274          if (ret) {
2275            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2276              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2277          }
2278        })
2279    }
2280  }
2281}
2282```
2283
2284加载的html文件。
2285```html
2286<!-- index.html -->
2287<!DOCTYPE html>
2288<html>
2289  <body>
2290    <p>Hello World Highlight Hello World</p>
2291  </body>
2292</html>
2293```
2294
2295### clearMatches
2296
2297clearMatches(): void
2298
2299清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2300
2301**系统能力:** SystemCapability.Web.Webview.Core
2302
2303**错误码:**
2304
2305以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2306
2307| 错误码ID | 错误信息                                                     |
2308| -------- | ------------------------------------------------------------ |
2309| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2310
2311**示例:**
2312
2313```ts
2314// xxx.ets
2315import web_webview from '@ohos.web.webview';
2316import business_error from '@ohos.base';
2317
2318@Entry
2319@Component
2320struct WebComponent {
2321  controller: web_webview.WebviewController = new web_webview.WebviewController();
2322
2323  build() {
2324    Column() {
2325      Button('clearMatches')
2326        .onClick(() => {
2327          try {
2328            this.controller.clearMatches();
2329          } catch (error) {
2330            let e: business_error.BusinessError = error as business_error.BusinessError;
2331            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2332          }
2333        })
2334      Web({ src: $rawfile('index.html'), controller: this.controller })
2335    }
2336  }
2337}
2338```
2339
2340加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2341
2342### searchNext
2343
2344searchNext(forward: boolean): void
2345
2346滚动到下一个匹配的查找结果并高亮。
2347
2348**系统能力:** SystemCapability.Web.Webview.Core
2349
2350**参数:**
2351
2352| 参数名  | 类型 | 必填 | 说明               |
2353| ------- | -------- | ---- | ---------------------- |
2354| forward | boolean  | 是   | 从前向后或者逆向查找。 |
2355
2356**错误码:**
2357
2358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2359
2360| 错误码ID | 错误信息                                                     |
2361| -------- | ------------------------------------------------------------ |
2362| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2363
2364**示例:**
2365
2366```ts
2367// xxx.ets
2368import web_webview from '@ohos.web.webview';
2369import business_error from '@ohos.base';
2370
2371@Entry
2372@Component
2373struct WebComponent {
2374  controller: web_webview.WebviewController = new web_webview.WebviewController();
2375
2376  build() {
2377    Column() {
2378      Button('searchNext')
2379        .onClick(() => {
2380          try {
2381            this.controller.searchNext(true);
2382          } catch (error) {
2383            let e: business_error.BusinessError = error as business_error.BusinessError;
2384            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2385          }
2386        })
2387      Web({ src: $rawfile('index.html'), controller: this.controller })
2388    }
2389  }
2390}
2391```
2392
2393加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2394
2395### clearSslCache
2396
2397clearSslCache(): void
2398
2399清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2400
2401**系统能力:** SystemCapability.Web.Webview.Core
2402
2403**错误码:**
2404
2405以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2406
2407| 错误码ID | 错误信息                                                     |
2408| -------- | ------------------------------------------------------------ |
2409| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2410
2411**示例:**
2412
2413```ts
2414// xxx.ets
2415import web_webview from '@ohos.web.webview';
2416import business_error from '@ohos.base';
2417
2418@Entry
2419@Component
2420struct WebComponent {
2421  controller: web_webview.WebviewController = new web_webview.WebviewController();
2422
2423  build() {
2424    Column() {
2425      Button('clearSslCache')
2426        .onClick(() => {
2427          try {
2428            this.controller.clearSslCache();
2429          } catch (error) {
2430            let e: business_error.BusinessError = error as business_error.BusinessError;
2431            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2432          }
2433        })
2434      Web({ src: 'www.example.com', controller: this.controller })
2435    }
2436  }
2437}
2438```
2439
2440### clearClientAuthenticationCache
2441
2442clearClientAuthenticationCache(): void
2443
2444清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2445
2446**系统能力:** SystemCapability.Web.Webview.Core
2447
2448**错误码:**
2449
2450以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2451
2452| 错误码ID | 错误信息                                                     |
2453| -------- | ------------------------------------------------------------ |
2454| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2455
2456**示例:**
2457
2458```ts
2459// xxx.ets
2460import web_webview from '@ohos.web.webview';
2461import business_error from '@ohos.base';
2462
2463@Entry
2464@Component
2465struct WebComponent {
2466  controller: web_webview.WebviewController = new web_webview.WebviewController();
2467
2468  build() {
2469    Column() {
2470      Button('clearClientAuthenticationCache')
2471        .onClick(() => {
2472          try {
2473            this.controller.clearClientAuthenticationCache();
2474          } catch (error) {
2475            let e: business_error.BusinessError = error as business_error.BusinessError;
2476            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2477          }
2478        })
2479      Web({ src: 'www.example.com', controller: this.controller })
2480    }
2481  }
2482}
2483```
2484
2485### createWebMessagePorts
2486
2487createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2488
2489创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2490
2491**系统能力:** SystemCapability.Web.Webview.Core
2492
2493**参数:**
2494
2495| 参数名 | 类型                   | 必填 | 说明                             |
2496| ------ | ---------------------- | ---- | :------------------------------|
2497| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 从API version 10开始,该接口支持此参数。|
2498
2499**返回值:**
2500
2501| 类型                   | 说明              |
2502| ---------------------- | ----------------- |
2503| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 |
2504
2505**错误码:**
2506
2507以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2508
2509| 错误码ID | 错误信息                                                     |
2510| -------- | ------------------------------------------------------------ |
2511| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2512
2513**示例:**
2514
2515  ```ts
2516// xxx.ets
2517import web_webview from '@ohos.web.webview';
2518import business_error from '@ohos.base';
2519
2520@Entry
2521@Component
2522struct WebComponent {
2523  controller: web_webview.WebviewController = new web_webview.WebviewController();
2524  ports: web_webview.WebMessagePort[] = [];
2525
2526  build() {
2527    Column() {
2528      Button('createWebMessagePorts')
2529        .onClick(() => {
2530          try {
2531            this.ports = this.controller.createWebMessagePorts();
2532            console.log("createWebMessagePorts size:" + this.ports.length)
2533          } catch (error) {
2534            let e: business_error.BusinessError = error as business_error.BusinessError;
2535            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2536          }
2537        })
2538      Web({ src: 'www.example.com', controller: this.controller })
2539    }
2540  }
2541}
2542  ```
2543
2544### postMessage
2545
2546postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2547
2548发送Web消息端口到HTML。
2549
2550**系统能力:** SystemCapability.Web.Webview.Core
2551
2552**参数:**
2553
2554| 参数名 | 类型                   | 必填 | 说明                             |
2555| ------ | ---------------------- | ---- | :------------------------------- |
2556| name   | string                 | 是   | 要发送的消息名称。            |
2557| ports  | Array\<WebMessagePort> | 是   | 要发送的消息端口。            |
2558| uri    | string                 | 是   | 接收该消息的URI。                |
2559
2560**错误码:**
2561
2562以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2563
2564| 错误码ID | 错误信息                                                     |
2565| -------- | ------------------------------------------------------------ |
2566| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2567
2568**示例:**
2569
2570```ts
2571// xxx.ets
2572import web_webview from '@ohos.web.webview';
2573import business_error from '@ohos.base';
2574
2575@Entry
2576@Component
2577struct WebComponent {
2578  controller: web_webview.WebviewController = new web_webview.WebviewController();
2579  ports: web_webview.WebMessagePort[] = [];
2580  @State sendFromEts: string = 'Send this message from ets to HTML';
2581  @State receivedFromHtml: string = 'Display received message send from HTML';
2582
2583  build() {
2584    Column() {
2585      // 展示接收到的来自HTML的内容
2586      Text(this.receivedFromHtml)
2587      // 输入框的内容发送到html
2588      TextInput({ placeholder: 'Send this message from ets to HTML' })
2589        .onChange((value: string) => {
2590          this.sendFromEts = value;
2591        })
2592
2593      Button('postMessage')
2594        .onClick(() => {
2595          try {
2596            // 1、创建两个消息端口。
2597            this.ports = this.controller.createWebMessagePorts();
2598            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2599            this.ports[1].onMessageEvent((result: web_webview.WebMessage) => {
2600              let msg = 'Got msg from HTML:';
2601              if (typeof(result) == "string") {
2602                console.log("received string message from html5, string is:" + result);
2603                msg = msg + result;
2604              } else if (typeof(result) == "object") {
2605                if (result instanceof ArrayBuffer) {
2606                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2607                  msg = msg + "length is " + result.byteLength;
2608                } else {
2609                  console.log("not support");
2610                }
2611              } else {
2612                console.log("not support");
2613              }
2614              this.receivedFromHtml = msg;
2615            })
2616            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2617            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2618          } catch (error) {
2619            let e: business_error.BusinessError = error as business_error.BusinessError;
2620            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2621          }
2622        })
2623
2624      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2625      Button('SendDataToHTML')
2626        .onClick(() => {
2627          try {
2628            if (this.ports && this.ports[1]) {
2629              this.ports[1].postMessageEvent(this.sendFromEts);
2630            } else {
2631              console.error(`ports is null, Please initialize first`);
2632            }
2633          } catch (error) {
2634            let e: business_error.BusinessError = error as business_error.BusinessError;
2635            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2636          }
2637        })
2638      Web({ src: $rawfile('index.html'), controller: this.controller })
2639    }
2640  }
2641}
2642```
2643
2644加载的html文件。
2645```html
2646<!--index.html-->
2647<!DOCTYPE html>
2648<html>
2649<head>
2650    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2651    <title>WebView Message Port Demo</title>
2652</head>
2653
2654  <body>
2655    <h1>WebView Message Port Demo</h1>
2656    <div>
2657        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2658        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2659    </div>
2660    <p class="output">display received message send from ets</p>
2661  </body>
2662  <script src="xxx.js"></script>
2663</html>
2664```
2665
2666```js
2667//xxx.js
2668var h5Port;
2669var output = document.querySelector('.output');
2670window.addEventListener('message', function (event) {
2671    if (event.data == '__init_port__') {
2672        if (event.ports[0] != null) {
2673            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2674            h5Port.onmessage = function (event) {
2675              // 2. 接收ets侧发送过来的消息.
2676              var msg = 'Got message from ets:';
2677              var result = event.data;
2678              if (typeof(result) == "string") {
2679                console.log("received string message from html5, string is:" + result);
2680                msg = msg + result;
2681              } else if (typeof(result) == "object") {
2682                if (result instanceof ArrayBuffer) {
2683                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2684                  msg = msg + "length is " + result.byteLength;
2685                } else {
2686                  console.log("not support");
2687                }
2688              } else {
2689                console.log("not support");
2690              }
2691              output.innerHTML = msg;
2692            }
2693        }
2694    }
2695})
2696
2697// 3. 使用h5Port往ets侧发送消息.
2698function PostMsgToEts(data) {
2699    if (h5Port) {
2700      h5Port.postMessage(data);
2701    } else {
2702      console.error("h5Port is null, Please initialize first");
2703    }
2704}
2705```
2706
2707### requestFocus
2708
2709requestFocus(): void
2710
2711使当前web页面获取焦点。
2712
2713**系统能力:** SystemCapability.Web.Webview.Core
2714
2715**错误码:**
2716
2717以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2718
2719| 错误码ID | 错误信息                                                     |
2720| -------- | ------------------------------------------------------------ |
2721| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2722
2723**示例:**
2724
2725```ts
2726// xxx.ets
2727import web_webview from '@ohos.web.webview';
2728import business_error from '@ohos.base';
2729
2730@Entry
2731@Component
2732struct WebComponent {
2733  controller: web_webview.WebviewController = new web_webview.WebviewController();
2734
2735  build() {
2736    Column() {
2737      Button('requestFocus')
2738        .onClick(() => {
2739          try {
2740            this.controller.requestFocus();
2741          } catch (error) {
2742            let e: business_error.BusinessError = error as business_error.BusinessError;
2743            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2744          }
2745        });
2746      Web({ src: 'www.example.com', controller: this.controller })
2747    }
2748  }
2749}
2750```
2751
2752### zoomIn
2753
2754zoomIn(): void
2755
2756调用此接口将当前网页进行放大,比例为20%。
2757
2758**系统能力:** SystemCapability.Web.Webview.Core
2759
2760**错误码:**
2761
2762以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2763
2764| 错误码ID | 错误信息                                                     |
2765| -------- | ------------------------------------------------------------ |
2766| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2767| 17100004 | Function not enable.                                         |
2768
2769**示例:**
2770
2771```ts
2772// xxx.ets
2773import web_webview from '@ohos.web.webview';
2774import business_error from '@ohos.base';
2775
2776@Entry
2777@Component
2778struct WebComponent {
2779  controller: web_webview.WebviewController = new web_webview.WebviewController();
2780
2781  build() {
2782    Column() {
2783      Button('zoomIn')
2784        .onClick(() => {
2785          try {
2786            this.controller.zoomIn();
2787          } catch (error) {
2788            let e: business_error.BusinessError = error as business_error.BusinessError;
2789            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2790          }
2791        })
2792      Web({ src: 'www.example.com', controller: this.controller })
2793    }
2794  }
2795}
2796```
2797
2798### zoomOut
2799
2800zoomOut(): void
2801
2802调用此接口将当前网页进行缩小,比例为20%。
2803
2804**系统能力:** SystemCapability.Web.Webview.Core
2805
2806**错误码:**
2807
2808以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2809
2810| 错误码ID | 错误信息                                                     |
2811| -------- | ------------------------------------------------------------ |
2812| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2813| 17100004 | Function not enable.                                         |
2814
2815**示例:**
2816
2817```ts
2818// xxx.ets
2819import web_webview from '@ohos.web.webview';
2820import business_error from '@ohos.base';
2821
2822@Entry
2823@Component
2824struct WebComponent {
2825  controller: web_webview.WebviewController = new web_webview.WebviewController();
2826
2827  build() {
2828    Column() {
2829      Button('zoomOut')
2830        .onClick(() => {
2831          try {
2832            this.controller.zoomOut();
2833          } catch (error) {
2834            let e: business_error.BusinessError = error as business_error.BusinessError;
2835            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2836          }
2837        })
2838      Web({ src: 'www.example.com', controller: this.controller })
2839    }
2840  }
2841}
2842```
2843
2844### getHitTestValue
2845
2846getHitTestValue(): HitTestValue
2847
2848获取当前被点击区域的元素信息。
2849
2850**系统能力:** SystemCapability.Web.Webview.Core
2851
2852**返回值:**
2853
2854| 类型         | 说明                 |
2855| ------------ | -------------------- |
2856| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
2857
2858**错误码:**
2859
2860以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2861
2862| 错误码ID | 错误信息                                                     |
2863| -------- | ------------------------------------------------------------ |
2864| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2865
2866**示例:**
2867
2868```ts
2869// xxx.ets
2870import web_webview from '@ohos.web.webview';
2871import business_error from '@ohos.base';
2872
2873@Entry
2874@Component
2875struct WebComponent {
2876  controller: web_webview.WebviewController = new web_webview.WebviewController();
2877
2878  build() {
2879    Column() {
2880      Button('getHitTestValue')
2881        .onClick(() => {
2882          try {
2883            let hitValue = this.controller.getHitTestValue();
2884            console.log("hitType: " + hitValue.type);
2885            console.log("extra: " + hitValue.extra);
2886          } catch (error) {
2887            let e: business_error.BusinessError = error as business_error.BusinessError;
2888            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2889          }
2890        })
2891      Web({ src: 'www.example.com', controller: this.controller })
2892    }
2893  }
2894}
2895```
2896
2897### getWebId
2898
2899getWebId(): number
2900
2901获取当前Web组件的索引值,用于多个Web组件的管理。
2902
2903**系统能力:** SystemCapability.Web.Webview.Core
2904
2905**返回值:**
2906
2907| 类型   | 说明                  |
2908| ------ | --------------------- |
2909| number | 当前Web组件的索引值。 |
2910
2911**错误码:**
2912
2913以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2914
2915| 错误码ID | 错误信息                                                     |
2916| -------- | ------------------------------------------------------------ |
2917| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2918
2919**示例:**
2920
2921```ts
2922// xxx.ets
2923import web_webview from '@ohos.web.webview';
2924import business_error from '@ohos.base';
2925
2926@Entry
2927@Component
2928struct WebComponent {
2929  controller: web_webview.WebviewController = new web_webview.WebviewController();
2930
2931  build() {
2932    Column() {
2933      Button('getWebId')
2934        .onClick(() => {
2935          try {
2936            let id = this.controller.getWebId();
2937            console.log("id: " + id);
2938          } catch (error) {
2939            let e: business_error.BusinessError = error as business_error.BusinessError;
2940            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2941          }
2942        })
2943      Web({ src: 'www.example.com', controller: this.controller })
2944    }
2945  }
2946}
2947```
2948
2949### getUserAgent
2950
2951getUserAgent(): string
2952
2953获取当前默认用户代理。
2954
2955**系统能力:** SystemCapability.Web.Webview.Core
2956
2957**返回值:**
2958
2959| 类型   | 说明           |
2960| ------ | -------------- |
2961| string | 默认用户代理。 |
2962
2963**错误码:**
2964
2965以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2966
2967| 错误码ID | 错误信息                                                     |
2968| -------- | ------------------------------------------------------------ |
2969| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2970
2971**示例:**
2972
2973```ts
2974// xxx.ets
2975import web_webview from '@ohos.web.webview';
2976import business_error from '@ohos.base';
2977
2978@Entry
2979@Component
2980struct WebComponent {
2981  controller: web_webview.WebviewController = new web_webview.WebviewController();
2982
2983  build() {
2984    Column() {
2985      Button('getUserAgent')
2986        .onClick(() => {
2987          try {
2988            let userAgent = this.controller.getUserAgent();
2989            console.log("userAgent: " + userAgent);
2990          } catch (error) {
2991            let e:business_error.BusinessError = error as business_error.BusinessError;
2992            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
2993          }
2994        })
2995      Web({ src: 'www.example.com', controller: this.controller })
2996    }
2997  }
2998}
2999```
3000
3001支持开发者基于默认的UserAgent去定制UserAgent。
3002```ts
3003// xxx.ets
3004import web_webview from '@ohos.web.webview';
3005import business_error from '@ohos.base';
3006
3007@Entry
3008@Component
3009struct WebComponent {
3010  controller: web_webview.WebviewController = new web_webview.WebviewController();
3011  @State ua: string = ""
3012
3013  aboutToAppear():void {
3014    web_webview.once('webInited', () => {
3015      try {
3016        // 应用侧用法示例,定制UserAgent。
3017        this.ua = this.controller.getUserAgent() + 'xxx';
3018      } catch(error) {
3019        let e:business_error.BusinessError = error as business_error.BusinessError;
3020        console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3021      }
3022    })
3023  }
3024
3025  build() {
3026    Column() {
3027      Web({ src: 'www.example.com', controller: this.controller })
3028        .userAgent(this.ua)
3029    }
3030  }
3031}
3032```
3033
3034### getTitle
3035
3036getTitle(): string
3037
3038获取当前网页的标题。
3039
3040**系统能力:** SystemCapability.Web.Webview.Core
3041
3042**返回值:**
3043
3044| 类型   | 说明                 |
3045| ------ | -------------------- |
3046| string | 当前网页的标题。 |
3047
3048**错误码:**
3049
3050以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3051
3052| 错误码ID | 错误信息                                                     |
3053| -------- | ------------------------------------------------------------ |
3054| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3055
3056**示例:**
3057
3058```ts
3059// xxx.ets
3060import web_webview from '@ohos.web.webview';
3061import business_error from '@ohos.base';
3062
3063@Entry
3064@Component
3065struct WebComponent {
3066  controller: web_webview.WebviewController = new web_webview.WebviewController();
3067
3068  build() {
3069    Column() {
3070      Button('getTitle')
3071        .onClick(() => {
3072          try {
3073            let title = this.controller.getTitle();
3074            console.log("title: " + title);
3075          } catch (error) {
3076            let e:business_error.BusinessError = error as business_error.BusinessError;
3077            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3078          }
3079        })
3080      Web({ src: 'www.example.com', controller: this.controller })
3081    }
3082  }
3083}
3084```
3085
3086### getPageHeight
3087
3088getPageHeight(): number
3089
3090获取当前网页的页面高度。
3091
3092**系统能力:** SystemCapability.Web.Webview.Core
3093
3094**返回值:**
3095
3096| 类型   | 说明                 |
3097| ------ | -------------------- |
3098| number | 当前网页的页面高度。 |
3099
3100**错误码:**
3101
3102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3103
3104| 错误码ID | 错误信息                                                     |
3105| -------- | ------------------------------------------------------------ |
3106| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3107
3108**示例:**
3109
3110```ts
3111// xxx.ets
3112import web_webview from '@ohos.web.webview';
3113import business_error from '@ohos.base';
3114
3115@Entry
3116@Component
3117struct WebComponent {
3118  controller: web_webview.WebviewController = new web_webview.WebviewController();
3119
3120  build() {
3121    Column() {
3122      Button('getPageHeight')
3123        .onClick(() => {
3124          try {
3125            let pageHeight = this.controller.getPageHeight();
3126            console.log("pageHeight : " + pageHeight);
3127          } catch (error) {
3128            let e:business_error.BusinessError = error as business_error.BusinessError;
3129            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3130          }
3131        })
3132      Web({ src: 'www.example.com', controller: this.controller })
3133    }
3134  }
3135}
3136```
3137
3138### storeWebArchive
3139
3140storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
3141
3142以回调方式异步保存当前页面。
3143
3144**系统能力:** SystemCapability.Web.Webview.Core
3145
3146**参数:**
3147
3148| 参数名   | 类型              | 必填 | 说明                                                         |
3149| -------- | --------------------- | ---- | ------------------------------------------------------------ |
3150| baseName | string                | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3151| autoName | boolean               | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3152| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
3153
3154**错误码:**
3155
3156以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3157
3158| 错误码ID | 错误信息                                                     |
3159| -------- | ------------------------------------------------------------ |
3160| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3161| 17100003 | Invalid resource path or file type.                          |
3162
3163**示例:**
3164
3165```ts
3166// xxx.ets
3167import web_webview from '@ohos.web.webview'
3168import business_error from '@ohos.base'
3169
3170@Entry
3171@Component
3172struct WebComponent {
3173  controller: web_webview.WebviewController = new web_webview.WebviewController();
3174
3175  build() {
3176    Column() {
3177      Button('storeWebArchive')
3178        .onClick(() => {
3179          try {
3180            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
3181              if (error) {
3182                let e: business_error.BusinessError = error as business_error.BusinessError;
3183                console.error(`save web archive error, ErrorCode: ${e.code},  Message: ${e.message}`);
3184                return;
3185              }
3186              if (filename != null) {
3187                console.info(`save web archive success: ${filename}`)
3188              }
3189            });
3190          } catch (error) {
3191            let e: business_error.BusinessError = error as business_error.BusinessError;
3192            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3193          }
3194        })
3195      Web({ src: 'www.example.com', controller: this.controller })
3196    }
3197  }
3198}
3199```
3200
3201### storeWebArchive
3202
3203storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
3204
3205以Promise方式异步保存当前页面。
3206
3207**系统能力:** SystemCapability.Web.Webview.Core
3208
3209**参数:**
3210
3211| 参数名   | 类型 | 必填 | 说明                                                         |
3212| -------- | -------- | ---- | ------------------------------------------------------------ |
3213| baseName | string   | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3214| autoName | boolean  | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3215
3216**返回值:**
3217
3218| 类型            | 说明                                                  |
3219| --------------- | ----------------------------------------------------- |
3220| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
3221
3222**错误码:**
3223
3224以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3225
3226| 错误码ID | 错误信息                                                     |
3227| -------- | ------------------------------------------------------------ |
3228| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3229| 17100003 | Invalid resource path or file type.                          |
3230
3231**示例:**
3232
3233```ts
3234// xxx.ets
3235import web_webview from '@ohos.web.webview'
3236import business_error from '@ohos.base'
3237
3238@Entry
3239@Component
3240struct WebComponent {
3241  controller: web_webview.WebviewController = new web_webview.WebviewController();
3242
3243  build() {
3244    Column() {
3245      Button('storeWebArchive')
3246        .onClick(() => {
3247          try {
3248            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3249              .then(filename => {
3250                if (filename != null) {
3251                  console.info(`save web archive success: ${filename}`)
3252                }
3253              })
3254              .catch((error:business_error.BusinessError) => {
3255                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
3256              })
3257          } catch (error) {
3258            let e:business_error.BusinessError = error as business_error.BusinessError;
3259            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3260          }
3261        })
3262      Web({ src: 'www.example.com', controller: this.controller })
3263    }
3264  }
3265}
3266```
3267
3268### getUrl
3269
3270getUrl(): string
3271
3272获取当前页面的url地址。
3273
3274**系统能力:** SystemCapability.Web.Webview.Core
3275
3276**返回值:**
3277
3278| 类型   | 说明                |
3279| ------ | ------------------- |
3280| string | 当前页面的url地址。 |
3281
3282**错误码:**
3283
3284以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3285
3286| 错误码ID | 错误信息                                                     |
3287| -------- | ------------------------------------------------------------ |
3288| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3289
3290**示例:**
3291
3292```ts
3293// xxx.ets
3294import web_webview from '@ohos.web.webview';
3295import business_error from '@ohos.base';
3296
3297@Entry
3298@Component
3299struct WebComponent {
3300  controller: web_webview.WebviewController = new web_webview.WebviewController();
3301
3302  build() {
3303    Column() {
3304      Button('getUrl')
3305        .onClick(() => {
3306          try {
3307            let url = this.controller.getUrl();
3308            console.log("url: " + url);
3309          } catch (error) {
3310            let e:business_error.BusinessError = error as business_error.BusinessError;
3311            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3312          }
3313        })
3314      Web({ src: 'www.example.com', controller: this.controller })
3315    }
3316  }
3317}
3318```
3319
3320### stop
3321
3322stop(): void
3323
3324停止页面加载。
3325
3326**系统能力:** SystemCapability.Web.Webview.Core
3327
3328**错误码:**
3329
3330以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3331
3332| 错误码ID | 错误信息                                                     |
3333| -------- | ------------------------------------------------------------ |
3334| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3335
3336**示例:**
3337
3338```ts
3339// xxx.ets
3340import web_webview from '@ohos.web.webview';
3341import business_error from '@ohos.base';
3342
3343@Entry
3344@Component
3345struct WebComponent {
3346  controller: web_webview.WebviewController = new web_webview.WebviewController();
3347
3348  build() {
3349    Column() {
3350      Button('stop')
3351        .onClick(() => {
3352          try {
3353            this.controller.stop();
3354          } catch (error) {
3355            let e:business_error.BusinessError = error as business_error.BusinessError;
3356            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3357          }
3358        });
3359      Web({ src: 'www.example.com', controller: this.controller })
3360    }
3361  }
3362}
3363```
3364
3365### backOrForward
3366
3367backOrForward(step: number): void
3368
3369按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3370
3371前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3372
3373**系统能力:** SystemCapability.Web.Webview.Core
3374
3375**参数:**
3376
3377| 参数名 | 类型 | 必填 | 说明               |
3378| ------ | -------- | ---- | ---------------------- |
3379| step   | number   | 是   | 需要前进或后退的步长。 |
3380
3381**错误码:**
3382
3383以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3384
3385| 错误码ID | 错误信息                                                     |
3386| -------- | ------------------------------------------------------------ |
3387| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3388
3389**示例:**
3390
3391```ts
3392// xxx.ets
3393import web_webview from '@ohos.web.webview';
3394import business_error from '@ohos.base';
3395
3396@Entry
3397@Component
3398struct WebComponent {
3399  controller: web_webview.WebviewController = new web_webview.WebviewController();
3400  @State step: number = -2;
3401
3402  build() {
3403    Column() {
3404      Button('backOrForward')
3405        .onClick(() => {
3406          try {
3407            this.controller.backOrForward(this.step);
3408          } catch (error) {
3409            let e:business_error.BusinessError = error as business_error.BusinessError;
3410            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3411          }
3412        })
3413      Web({ src: 'www.example.com', controller: this.controller })
3414    }
3415  }
3416}
3417```
3418
3419### scrollTo
3420
3421scrollTo(x:number, y:number): void
3422
3423将页面滚动到指定的绝对位置。
3424
3425**系统能力:** SystemCapability.Web.Webview.Core
3426
3427**参数:**
3428
3429| 参数名 | 类型 | 必填 | 说明               |
3430| ------ | -------- | ---- | ---------------------- |
3431| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。 |
3432| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。|
3433
3434**错误码:**
3435
3436以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3437
3438| 错误码ID | 错误信息                                                     |
3439| -------- | ------------------------------------------------------------ |
3440| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3441
3442**示例:**
3443
3444```ts
3445// xxx.ets
3446import web_webview from '@ohos.web.webview';
3447import business_error from '@ohos.base';
3448
3449@Entry
3450@Component
3451struct WebComponent {
3452  controller: web_webview.WebviewController = new web_webview.WebviewController();
3453
3454  build() {
3455    Column() {
3456      Button('scrollTo')
3457        .onClick(() => {
3458          try {
3459            this.controller.scrollTo(50, 50);
3460          } catch (error) {
3461            let e:business_error.BusinessError = error as business_error.BusinessError;
3462            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3463          }
3464        })
3465      Web({ src: $rawfile('index.html'), controller: this.controller })
3466    }
3467  }
3468}
3469```
3470
3471加载的html文件。
3472```html
3473<!--index.html-->
3474<!DOCTYPE html>
3475<html>
3476<head>
3477    <title>Demo</title>
3478    <style>
3479        body {
3480            width:3000px;
3481            height:3000px;
3482            padding-right:170px;
3483            padding-left:170px;
3484            border:5px solid blueviolet
3485        }
3486    </style>
3487</head>
3488<body>
3489Scroll Test
3490</body>
3491</html>
3492```
3493
3494### scrollBy
3495
3496scrollBy(deltaX:number, deltaY:number): void
3497
3498将页面滚动指定的偏移量。
3499
3500**系统能力:** SystemCapability.Web.Webview.Core
3501
3502**参数:**
3503
3504| 参数名 | 类型 | 必填 | 说明               |
3505| ------ | -------- | ---- | ---------------------- |
3506| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3507| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3508
3509**错误码:**
3510
3511以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3512
3513| 错误码ID | 错误信息                                                     |
3514| -------- | ------------------------------------------------------------ |
3515| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3516
3517**示例:**
3518
3519```ts
3520// xxx.ets
3521import web_webview from '@ohos.web.webview';
3522import business_error from '@ohos.base';
3523
3524@Entry
3525@Component
3526struct WebComponent {
3527  controller: web_webview.WebviewController = new web_webview.WebviewController();
3528
3529  build() {
3530    Column() {
3531      Button('scrollBy')
3532        .onClick(() => {
3533          try {
3534            this.controller.scrollBy(50, 50);
3535          } catch (error) {
3536            let e:business_error.BusinessError = error as business_error.BusinessError;
3537            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3538          }
3539        })
3540      Web({ src: $rawfile('index.html'), controller: this.controller })
3541    }
3542  }
3543}
3544```
3545
3546加载的html文件。
3547```html
3548<!--index.html-->
3549<!DOCTYPE html>
3550<html>
3551<head>
3552    <title>Demo</title>
3553    <style>
3554        body {
3555            width:3000px;
3556            height:3000px;
3557            padding-right:170px;
3558            padding-left:170px;
3559            border:5px solid blueviolet
3560        }
3561    </style>
3562</head>
3563<body>
3564Scroll Test
3565</body>
3566</html>
3567```
3568
3569### slideScroll
3570
3571slideScroll(vx:number, vy:number): void
3572
3573按照指定速度模拟对页面的轻扫滚动动作。
3574
3575**系统能力:** SystemCapability.Web.Webview.Core
3576
3577**参数:**
3578
3579| 参数名 | 类型 | 必填 | 说明               |
3580| ------ | -------- | ---- | ---------------------- |
3581| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。 |
3582| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。 |
3583
3584**错误码:**
3585
3586以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3587
3588| 错误码ID | 错误信息                                                     |
3589| -------- | ------------------------------------------------------------ |
3590| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3591
3592**示例:**
3593
3594```ts
3595// xxx.ets
3596import web_webview from '@ohos.web.webview';
3597import business_error from '@ohos.base';
3598
3599@Entry
3600@Component
3601struct WebComponent {
3602  controller: web_webview.WebviewController = new web_webview.WebviewController();
3603
3604  build() {
3605    Column() {
3606      Button('slideScroll')
3607        .onClick(() => {
3608          try {
3609            this.controller.slideScroll(500, 500);
3610          } catch (error) {
3611            let e:business_error.BusinessError = error as business_error.BusinessError;
3612            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3613          }
3614        })
3615      Web({ src: $rawfile('index.html'), controller: this.controller })
3616    }
3617  }
3618}
3619```
3620
3621加载的html文件。
3622```html
3623<!--index.html-->
3624<!DOCTYPE html>
3625<html>
3626<head>
3627    <title>Demo</title>
3628    <style>
3629        body {
3630            width:3000px;
3631            height:3000px;
3632            padding-right:170px;
3633            padding-left:170px;
3634            border:5px solid blueviolet
3635        }
3636    </style>
3637</head>
3638<body>
3639Scroll Test
3640</body>
3641</html>
3642```
3643
3644### getOriginalUrl
3645
3646getOriginalUrl(): string
3647
3648获取当前页面的原始url地址。
3649
3650**系统能力:** SystemCapability.Web.Webview.Core
3651
3652**返回值:**
3653
3654| 类型   | 说明                    |
3655| ------ | ----------------------- |
3656| string | 当前页面的原始url地址。 |
3657
3658**错误码:**
3659
3660以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3661
3662| 错误码ID | 错误信息                                                     |
3663| -------- | ------------------------------------------------------------ |
3664| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3665
3666**示例:**
3667
3668```ts
3669// xxx.ets
3670import web_webview from '@ohos.web.webview';
3671import business_error from '@ohos.base';
3672
3673@Entry
3674@Component
3675struct WebComponent {
3676  controller: web_webview.WebviewController = new web_webview.WebviewController();
3677
3678  build() {
3679    Column() {
3680      Button('getOrgUrl')
3681        .onClick(() => {
3682          try {
3683            let url = this.controller.getOriginalUrl();
3684            console.log("original url: " + url);
3685          } catch (error) {
3686            let e:business_error.BusinessError = error as business_error.BusinessError;
3687            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3688          }
3689        })
3690      Web({ src: 'www.example.com', controller: this.controller })
3691    }
3692  }
3693}
3694```
3695
3696### getFavicon
3697
3698getFavicon(): image.PixelMap
3699
3700获取页面的favicon图标。
3701
3702**系统能力:** SystemCapability.Web.Webview.Core
3703
3704**返回值:**
3705
3706| 类型                                   | 说明                            |
3707| -------------------------------------- | ------------------------------- |
3708| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
3709
3710**错误码:**
3711
3712以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3713
3714| 错误码ID | 错误信息                                                     |
3715| -------- | ------------------------------------------------------------ |
3716| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3717
3718**示例:**
3719
3720```ts
3721// xxx.ets
3722import web_webview from '@ohos.web.webview';
3723import image from "@ohos.multimedia.image";
3724import business_error from '@ohos.base';
3725
3726@Entry
3727@Component
3728struct WebComponent {
3729  controller: web_webview.WebviewController = new web_webview.WebviewController();
3730  @State pixelmap: image.PixelMap | undefined = undefined;
3731
3732  build() {
3733    Column() {
3734      Button('getFavicon')
3735        .onClick(() => {
3736          try {
3737            this.pixelmap = this.controller.getFavicon();
3738          } catch (error) {
3739            let e:business_error.BusinessError = error as business_error.BusinessError;
3740            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3741          }
3742        })
3743      Web({ src: 'www.example.com', controller: this.controller })
3744    }
3745  }
3746}
3747```
3748
3749### setNetworkAvailable
3750
3751setNetworkAvailable(enable: boolean): void
3752
3753设置JavaScript中的window.navigator.onLine属性。
3754
3755**系统能力:** SystemCapability.Web.Webview.Core
3756
3757**参数:**
3758
3759| 参数名 | 类型    | 必填 | 说明                              |
3760| ------ | ------- | ---- | --------------------------------- |
3761| enable | boolean | 是   | 是否使能window.navigator.onLine。 |
3762
3763**错误码:**
3764
3765以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3766
3767| 错误码ID | 错误信息                                                     |
3768| -------- | ------------------------------------------------------------ |
3769| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3770
3771**示例:**
3772
3773```ts
3774// xxx.ets
3775import web_webview from '@ohos.web.webview';
3776import business_error from '@ohos.base';
3777
3778@Entry
3779@Component
3780struct WebComponent {
3781  controller: web_webview.WebviewController = new web_webview.WebviewController();
3782
3783  build() {
3784    Column() {
3785      Button('setNetworkAvailable')
3786        .onClick(() => {
3787          try {
3788            this.controller.setNetworkAvailable(true);
3789          } catch (error) {
3790            let e:business_error.BusinessError = error as business_error.BusinessError;
3791            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3792          }
3793        })
3794      Web({ src: $rawfile('index.html'), controller: this.controller })
3795    }
3796  }
3797}
3798```
3799
3800加载的html文件。
3801```html
3802<!-- index.html -->
3803<!DOCTYPE html>
3804<html>
3805<body>
3806<h1>online 属性</h1>
3807<p id="demo"></p>
3808<button onclick="func()">click</button>
3809<script>
3810    let online = navigator.onLine;
3811    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
3812
3813    function func(){
3814      var online = navigator.onLine;
3815      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
3816    }
3817</script>
3818</body>
3819</html>
3820```
3821
3822### hasImage
3823
3824hasImage(callback: AsyncCallback\<boolean>): void
3825
3826通过Callback方式异步查找当前页面是否存在图像。
3827
3828**系统能力:** SystemCapability.Web.Webview.Core
3829
3830**参数:**
3831
3832| 参数名   | 类型                    | 必填 | 说明                       |
3833| -------- | ----------------------- | ---- | -------------------------- |
3834| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。 |
3835
3836**错误码:**
3837
3838以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3839
3840| 错误码ID | 错误信息                                                     |
3841| -------- | ------------------------------------------------------------ |
3842| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3843
3844**示例:**
3845
3846```ts
3847// xxx.ets
3848import web_webview from '@ohos.web.webview';
3849import business_error from '@ohos.base';
3850
3851@Entry
3852@Component
3853struct WebComponent {
3854  controller: web_webview.WebviewController = new web_webview.WebviewController();
3855
3856  build() {
3857    Column() {
3858      Button('hasImageCb')
3859        .onClick(() => {
3860          try {
3861            this.controller.hasImage((error, data) => {
3862              if (error) {
3863                let e: business_error.BusinessError = error as business_error.BusinessError;
3864                console.error(`hasImage error, ErrorCode: ${e.code},  Message: ${e.message}`);
3865                return;
3866              }
3867              console.info("hasImage: " + data);
3868            });
3869          } catch (error) {
3870            let e:business_error.BusinessError = error as business_error.BusinessError;
3871            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3872          }
3873        })
3874      Web({ src: 'www.example.com', controller: this.controller })
3875    }
3876  }
3877}
3878```
3879
3880### hasImage
3881
3882hasImage(): Promise\<boolean>
3883
3884通过Promise方式异步查找当前页面是否存在图像。
3885
3886**系统能力:** SystemCapability.Web.Webview.Core
3887
3888**返回值:**
3889
3890| 类型              | 说明                                    |
3891| ----------------- | --------------------------------------- |
3892| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 |
3893
3894**错误码:**
3895
3896以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3897
3898| 错误码ID | 错误信息                                                     |
3899| -------- | ------------------------------------------------------------ |
3900| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3901
3902**示例:**
3903
3904```ts
3905// xxx.ets
3906import web_webview from '@ohos.web.webview';
3907import business_error from '@ohos.base';
3908
3909@Entry
3910@Component
3911struct WebComponent {
3912  controller: web_webview.WebviewController = new web_webview.WebviewController();
3913
3914  build() {
3915    Column() {
3916      Button('hasImagePm')
3917        .onClick(() => {
3918          try {
3919            this.controller.hasImage().then((data) => {
3920              console.info('hasImage: ' + data);
3921            })
3922            .catch((error:business_error.BusinessError) => {
3923              console.error("error: " + error);
3924            })
3925          } catch (error) {
3926            let e:business_error.BusinessError = error as business_error.BusinessError;
3927            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3928          }
3929        })
3930      Web({ src: 'www.example.com', controller: this.controller })
3931    }
3932  }
3933}
3934```
3935
3936### removeCache
3937
3938removeCache(clearRom: boolean): void
3939
3940清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
3941
3942**系统能力:** SystemCapability.Web.Webview.Core
3943
3944**参数:**
3945
3946| 参数名   | 类型    | 必填 | 说明                                                     |
3947| -------- | ------- | ---- | -------------------------------------------------------- |
3948| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
3949
3950**错误码:**
3951
3952以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3953
3954| 错误码ID | 错误信息                                                     |
3955| -------- | ------------------------------------------------------------ |
3956| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3957
3958**示例:**
3959
3960```ts
3961// xxx.ets
3962import web_webview from '@ohos.web.webview';
3963import business_error from '@ohos.base';
3964
3965@Entry
3966@Component
3967struct WebComponent {
3968  controller: web_webview.WebviewController = new web_webview.WebviewController();
3969
3970  build() {
3971    Column() {
3972      Button('removeCache')
3973        .onClick(() => {
3974          try {
3975            this.controller.removeCache(false);
3976          } catch (error) {
3977            let e:business_error.BusinessError = error as business_error.BusinessError;
3978            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3979          }
3980        })
3981      Web({ src: 'www.example.com', controller: this.controller })
3982    }
3983  }
3984}
3985```
3986
3987### pageUp
3988
3989pageUp(top: boolean): void
3990
3991将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
3992
3993**系统能力:** SystemCapability.Web.Webview.Core
3994
3995**参数:**
3996
3997| 参数名 | 类型    | 必填 | 说明                                                         |
3998| ------ | ------- | ---- | ------------------------------------------------------------ |
3999| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
4000
4001**错误码:**
4002
4003以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4004
4005| 错误码ID | 错误信息                                                     |
4006| -------- | ------------------------------------------------------------ |
4007| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4008
4009**示例:**
4010
4011```ts
4012// xxx.ets
4013import web_webview from '@ohos.web.webview';
4014import business_error from '@ohos.base';
4015
4016@Entry
4017@Component
4018struct WebComponent {
4019  controller: web_webview.WebviewController = new web_webview.WebviewController();
4020
4021  build() {
4022    Column() {
4023      Button('pageUp')
4024        .onClick(() => {
4025          try {
4026            this.controller.pageUp(false);
4027          } catch (error) {
4028            let e:business_error.BusinessError = error as business_error.BusinessError;
4029            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4030          }
4031        })
4032      Web({ src: 'www.example.com', controller: this.controller })
4033    }
4034  }
4035}
4036```
4037
4038### pageDown
4039
4040pageDown(bottom: boolean): void
4041
4042将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
4043
4044**系统能力:** SystemCapability.Web.Webview.Core
4045
4046**参数:**
4047
4048| 参数名 | 类型    | 必填 | 说明                                                         |
4049| ------ | ------- | ---- | ------------------------------------------------------------ |
4050| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
4051
4052**错误码:**
4053
4054以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4055
4056| 错误码ID | 错误信息                                                     |
4057| -------- | ------------------------------------------------------------ |
4058| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4059
4060**示例:**
4061
4062```ts
4063// xxx.ets
4064import web_webview from '@ohos.web.webview';
4065import business_error from '@ohos.base';
4066
4067@Entry
4068@Component
4069struct WebComponent {
4070  controller: web_webview.WebviewController = new web_webview.WebviewController();
4071
4072  build() {
4073    Column() {
4074      Button('pageDown')
4075        .onClick(() => {
4076          try {
4077            this.controller.pageDown(false);
4078          } catch (error) {
4079            let e:business_error.BusinessError = error as business_error.BusinessError;
4080            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4081          }
4082        })
4083      Web({ src: 'www.example.com', controller: this.controller })
4084    }
4085  }
4086}
4087```
4088
4089### getBackForwardEntries
4090
4091getBackForwardEntries(): BackForwardList
4092
4093获取当前Webview的历史信息列表。
4094
4095**系统能力:** SystemCapability.Web.Webview.Core
4096
4097**返回值:**
4098
4099| 类型                                | 说明                        |
4100| ----------------------------------- | --------------------------- |
4101| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
4102
4103**错误码:**
4104
4105以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4106
4107| 错误码ID | 错误信息                                                     |
4108| -------- | ------------------------------------------------------------ |
4109| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4110
4111**示例:**
4112
4113```ts
4114// xxx.ets
4115import web_webview from '@ohos.web.webview';
4116import business_error from '@ohos.base';
4117
4118@Entry
4119@Component
4120struct WebComponent {
4121  controller: web_webview.WebviewController = new web_webview.WebviewController();
4122
4123  build() {
4124    Column() {
4125      Button('getBackForwardEntries')
4126        .onClick(() => {
4127          try {
4128            let list = this.controller.getBackForwardEntries()
4129          } catch (error) {
4130            let e:business_error.BusinessError = error as business_error.BusinessError;
4131            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4132          }
4133        })
4134      Web({ src: 'www.example.com', controller: this.controller })
4135    }
4136  }
4137}
4138```
4139
4140### serializeWebState
4141
4142serializeWebState(): Uint8Array
4143
4144将当前Webview的页面状态历史记录信息序列化。
4145
4146**系统能力:** SystemCapability.Web.Webview.Core
4147
4148**返回值:**
4149
4150| 类型       | 说明                                          |
4151| ---------- | --------------------------------------------- |
4152| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
4153
4154**错误码:**
4155
4156以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4157
4158| 错误码ID | 错误信息                                                     |
4159| -------- | ------------------------------------------------------------ |
4160| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4161
4162**示例:**
4163
41641.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4165```ts
4166// xxx.ets
4167import web_webview from '@ohos.web.webview';
4168import fs from '@ohos.file.fs';
4169import business_error from '@ohos.base';
4170
4171@Entry
4172@Component
4173struct WebComponent {
4174  controller: web_webview.WebviewController = new web_webview.WebviewController();
4175
4176  build() {
4177    Column() {
4178      Button('serializeWebState')
4179        .onClick(() => {
4180          try {
4181            let state = this.controller.serializeWebState();
4182            let path:string | undefined = AppStorage.get("cacheDir");
4183            if (path) {
4184              path += '/WebState';
4185              // 以同步方法打开文件。
4186              let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
4187              fs.writeSync(file.fd, state.buffer);
4188              fs.closeSync(file.fd);
4189            }
4190          } catch (error) {
4191            let e:business_error.BusinessError = error as business_error.BusinessError;
4192            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4193          }
4194        })
4195      Web({ src: 'www.example.com', controller: this.controller })
4196    }
4197  }
4198}
4199```
4200
42012.修改EntryAbility.ets4202获取应用缓存文件路径。
4203```ts
4204// xxx.ts
4205import UIAbility from '@ohos.app.ability.UIAbility';
4206import AbilityConstant from '@ohos.app.ability.AbilityConstant';
4207import Want from '@ohos.app.ability.Want';
4208
4209export default class EntryAbility extends UIAbility {
4210    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4211        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4212        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4213    }
4214}
4215```
4216
4217### restoreWebState
4218
4219restoreWebState(state: Uint8Array): void
4220
4221当前Webview从序列化数据中恢复页面状态历史记录。
4222
4223**系统能力:** SystemCapability.Web.Webview.Core
4224
4225**参数:**
4226
4227| 参数名 | 类型       | 必填 | 说明                         |
4228| ------ | ---------- | ---- | ---------------------------- |
4229| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
4230
4231**错误码:**
4232
4233以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4234
4235| 错误码ID | 错误信息                                                     |
4236| -------- | ------------------------------------------------------------ |
4237| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4238
4239**示例:**
4240
42411.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4242```ts
4243// xxx.ets
4244import web_webview from '@ohos.web.webview';
4245import fs from '@ohos.file.fs';
4246import business_error from '@ohos.base';
4247
4248@Entry
4249@Component
4250struct WebComponent {
4251  controller: web_webview.WebviewController = new web_webview.WebviewController();
4252
4253  build() {
4254    Column() {
4255      Button('RestoreWebState')
4256        .onClick(() => {
4257          try {
4258            let path:string | undefined = AppStorage.get("cacheDir");
4259            if (path) {
4260              path += '/WebState';
4261              // 以同步方法打开文件。
4262              let file = fs.openSync(path, fs.OpenMode.READ_WRITE);
4263              let stat = fs.statSync(path);
4264              let size = stat.size;
4265              let buf = new ArrayBuffer(size);
4266              fs.read(file.fd, buf, (err, readLen) => {
4267                if (err) {
4268                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4269                } else {
4270                  console.info("read file data succeed");
4271                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4272                  fs.closeSync(file);
4273                }
4274              });
4275            }
4276          } catch (error) {
4277            let e:business_error.BusinessError = error as business_error.BusinessError;
4278            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4279          }
4280        })
4281      Web({ src: 'www.example.com', controller: this.controller })
4282    }
4283  }
4284}
4285```
4286
42872.修改EntryAbility.ets4288获取应用缓存文件路径。
4289```ts
4290// xxx.ts
4291import UIAbility from '@ohos.app.ability.UIAbility';
4292import AbilityConstant from '@ohos.app.ability.AbilityConstant';
4293import Want from '@ohos.app.ability.Want';
4294
4295export default class EntryAbility extends UIAbility {
4296    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4297        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4298        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4299    }
4300}
4301```
4302
4303### customizeSchemes
4304
4305static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4306
4307对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。
4308
4309**系统能力:** SystemCapability.Web.Webview.Core
4310
4311**参数:**
4312
4313| 参数名   | 类型    | 必填 | 说明                      |
4314| -------- | ------- | ---- | -------------------------------------- |
4315| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4316
4317**示例:**
4318
4319```ts
4320// xxx.ets
4321import web_webview from '@ohos.web.webview';
4322import business_error from '@ohos.base';
4323
4324@Entry
4325@Component
4326struct WebComponent {
4327  controller: web_webview.WebviewController = new web_webview.WebviewController();
4328  responseweb: WebResourceResponse = new WebResourceResponse()
4329  scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true}
4330  scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true}
4331  scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true}
4332
4333  aboutToAppear():void {
4334    try {
4335      web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3])
4336    } catch(error) {
4337      let e:business_error.BusinessError = error as business_error.BusinessError;
4338      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4339    }
4340  }
4341
4342  build() {
4343    Column() {
4344      Web({ src: 'www.example.com', controller: this.controller })
4345        .onInterceptRequest((event) => {
4346          if (event) {
4347            console.log('url:' + event.request.getRequestUrl())
4348          }
4349          return this.responseweb
4350        })
4351    }
4352  }
4353}
4354```
4355
4356### getCertificate<sup>10+</sup>
4357
4358getCertificate(): Promise<Array<cert.X509Cert>>
4359
4360获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4361
4362**系统能力:** SystemCapability.Web.Webview.Core
4363
4364**返回值:**
4365
4366| 类型       | 说明                                          |
4367| ---------- | --------------------------------------------- |
4368| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4369
4370**错误码:**
4371
4372以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4373
4374| 错误码ID | 错误信息                                                     |
4375| -------- | ------------------------------------------------------------ |
4376| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4377
4378**示例:**
4379
4380```ts
4381// xxx.ets
4382import web_webview from '@ohos.web.webview';
4383import business_error from '@ohos.base';
4384import cert from '@ohos.security.cert';
4385
4386function Uint8ArrayToString(dataArray:Uint8Array) {
4387  let dataString = ''
4388  for (let i = 0; i < dataArray.length; i++) {
4389    dataString += String.fromCharCode(dataArray[i])
4390  }
4391  return dataString
4392}
4393
4394function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) {
4395  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4396  for (let i = 0; i < x509CertArray.length; i++) {
4397    res += ', index = ' + i + ', issuer name = '
4398    + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4399    + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4400    + x509CertArray[i].getNotBeforeTime()
4401    + ', valid end = ' + x509CertArray[i].getNotAfterTime()
4402  }
4403  return res
4404}
4405
4406@Entry
4407@Component
4408struct Index {
4409  // outputStr在UI界面显示调试信息
4410  @State outputStr: string = ''
4411  webviewCtl: web_webview.WebviewController = new web_webview.WebviewController();
4412
4413  build() {
4414    Row() {
4415      Column() {
4416        List({space: 20, initialIndex: 0}) {
4417          ListItem() {
4418            Button() {
4419              Text('load bad ssl')
4420                .fontSize(10)
4421                .fontWeight(FontWeight.Bold)
4422            }
4423            .type(ButtonType.Capsule)
4424            .onClick(() => {
4425              // 加载一个过期的证书网站,查看获取到的证书信息
4426              this.webviewCtl.loadUrl('https://expired.badssl.com')
4427            })
4428            .height(50)
4429          }
4430
4431          ListItem() {
4432            Button() {
4433              Text('load example')
4434                .fontSize(10)
4435                .fontWeight(FontWeight.Bold)
4436            }
4437            .type(ButtonType.Capsule)
4438            .onClick(() => {
4439              // 加载一个https网站,查看网站的证书信息
4440              this.webviewCtl.loadUrl('https://www.example.com')
4441            })
4442            .height(50)
4443          }
4444
4445          ListItem() {
4446            Button() {
4447              Text('getCertificate Promise')
4448                .fontSize(10)
4449                .fontWeight(FontWeight.Bold)
4450            }
4451            .type(ButtonType.Capsule)
4452            .onClick(() => {
4453              try {
4454                this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => {
4455                  this.outputStr = ParseX509CertInfo(x509CertArray);
4456                })
4457              } catch (error) {
4458                let e:business_error.BusinessError = error as business_error.BusinessError;
4459                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4460              }
4461            })
4462            .height(50)
4463          }
4464
4465          ListItem() {
4466            Button() {
4467              Text('getCertificate AsyncCallback')
4468                .fontSize(10)
4469                .fontWeight(FontWeight.Bold)
4470            }
4471            .type(ButtonType.Capsule)
4472            .onClick(() => {
4473              try {
4474                this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => {
4475                  if (error) {
4476                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4477                  } else {
4478                    this.outputStr = ParseX509CertInfo(x509CertArray);
4479                  }
4480                })
4481              } catch (error) {
4482                let e:business_error.BusinessError = error as business_error.BusinessError;
4483                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4484              }
4485            })
4486            .height(50)
4487          }
4488        }
4489        .listDirection(Axis.Horizontal)
4490        .height('10%')
4491
4492        Text(this.outputStr)
4493          .width('100%')
4494          .fontSize(10)
4495
4496        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4497          .fileAccess(true)
4498          .javaScriptAccess(true)
4499          .domStorageAccess(true)
4500          .onlineImageAccess(true)
4501          .onPageEnd((e) => {
4502            if(e) {
4503              this.outputStr = 'onPageEnd : url = ' + e.url
4504            }
4505          })
4506          .onSslErrorEventReceive((e) => {
4507            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4508            e.handler.handleConfirm()
4509          })
4510          .width('100%')
4511          .height('70%')
4512      }
4513      .height('100%')
4514    }
4515  }
4516}
4517```
4518
4519### getCertificate<sup>10+</sup>
4520
4521getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4522
4523获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。
4524
4525**系统能力:** SystemCapability.Web.Webview.Core
4526
4527**参数:**
4528
4529| 参数名   | 类型                         | 必填 | 说明                                     |
4530| -------- | ---------------------------- | ---- | ---------------------------------------- |
4531| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4532
4533**错误码:**
4534
4535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4536
4537| 错误码ID | 错误信息                                                     |
4538| -------- | ------------------------------------------------------------ |
4539| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4540
4541**示例:**
4542
4543```ts
4544// xxx.ets
4545import web_webview from '@ohos.web.webview';
4546import business_error from '@ohos.base';
4547import cert from '@ohos.security.cert';
4548
4549function Uint8ArrayToString(dataArray:Uint8Array) {
4550  let dataString = ''
4551  for (let i = 0; i < dataArray.length; i++) {
4552    dataString += String.fromCharCode(dataArray[i])
4553  }
4554  return dataString
4555}
4556
4557function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) {
4558  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4559  for (let i = 0; i < x509CertArray.length; i++) {
4560    res += ', index = ' + i + ', issuer name = '
4561    + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4562    + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4563    + x509CertArray[i].getNotBeforeTime()
4564    + ', valid end = ' + x509CertArray[i].getNotAfterTime()
4565  }
4566  return res
4567}
4568
4569@Entry
4570@Component
4571struct Index {
4572  // outputStr在UI界面显示调试信息
4573  @State outputStr: string = ''
4574  webviewCtl: web_webview.WebviewController = new web_webview.WebviewController();
4575
4576  build() {
4577    Row() {
4578      Column() {
4579        List({space: 20, initialIndex: 0}) {
4580          ListItem() {
4581            Button() {
4582              Text('load bad ssl')
4583                .fontSize(10)
4584                .fontWeight(FontWeight.Bold)
4585            }
4586            .type(ButtonType.Capsule)
4587            .onClick(() => {
4588              // 加载一个过期的证书网站,查看获取到的证书信息
4589              this.webviewCtl.loadUrl('https://expired.badssl.com')
4590            })
4591            .height(50)
4592          }
4593
4594          ListItem() {
4595            Button() {
4596              Text('load example')
4597                .fontSize(10)
4598                .fontWeight(FontWeight.Bold)
4599            }
4600            .type(ButtonType.Capsule)
4601            .onClick(() => {
4602              // 加载一个https网站,查看网站的证书信息
4603              this.webviewCtl.loadUrl('https://www.example.com')
4604            })
4605            .height(50)
4606          }
4607
4608          ListItem() {
4609            Button() {
4610              Text('getCertificate Promise')
4611                .fontSize(10)
4612                .fontWeight(FontWeight.Bold)
4613            }
4614            .type(ButtonType.Capsule)
4615            .onClick(() => {
4616              try {
4617                this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => {
4618                  this.outputStr = ParseX509CertInfo(x509CertArray);
4619                })
4620              } catch (error) {
4621                let e:business_error.BusinessError = error as business_error.BusinessError;
4622                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4623              }
4624            })
4625            .height(50)
4626          }
4627
4628          ListItem() {
4629            Button() {
4630              Text('getCertificate AsyncCallback')
4631                .fontSize(10)
4632                .fontWeight(FontWeight.Bold)
4633            }
4634            .type(ButtonType.Capsule)
4635            .onClick(() => {
4636              try {
4637                this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => {
4638                  if (error) {
4639                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4640                  } else {
4641                    this.outputStr = ParseX509CertInfo(x509CertArray);
4642                  }
4643                })
4644              } catch (error) {
4645                let e:business_error.BusinessError = error as business_error.BusinessError;
4646                this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message;
4647              }
4648            })
4649            .height(50)
4650          }
4651        }
4652        .listDirection(Axis.Horizontal)
4653        .height('10%')
4654
4655        Text(this.outputStr)
4656          .width('100%')
4657          .fontSize(10)
4658
4659        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4660          .fileAccess(true)
4661          .javaScriptAccess(true)
4662          .domStorageAccess(true)
4663          .onlineImageAccess(true)
4664          .onPageEnd((e) => {
4665            if (e) {
4666              this.outputStr = 'onPageEnd : url = ' + e.url
4667            }
4668          })
4669          .onSslErrorEventReceive((e) => {
4670            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4671            e.handler.handleConfirm()
4672          })
4673          .width('100%')
4674          .height('70%')
4675      }
4676      .height('100%')
4677    }
4678  }
4679}
4680```
4681
4682### setAudioMuted<sup>10+</sup>
4683
4684setAudioMuted(mute: boolean): void
4685
4686设置网页静音。
4687
4688**系统能力:** SystemCapability.Web.Webview.Core
4689
4690**参数:**
4691
4692| 参数名   | 类型    | 必填 | 说明                      |
4693| -------- | ------- | ---- | -------------------------------------- |
4694| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
4695
4696**错误码:**
4697
4698以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4699
4700| 错误码ID | 错误信息                                                     |
4701| -------- | ------------------------------------------------------------ |
4702| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4703
4704**示例:**
4705
4706```ts
4707// xxx.ets
4708import web_webview from '@ohos.web.webview'
4709
4710@Entry
4711@Component
4712struct WebComponent {
4713  controller: web_webview.WebviewController = new web_webview.WebviewController()
4714  @State muted: boolean = false
4715  build() {
4716    Column() {
4717      Button("Toggle Mute")
4718        .onClick(event => {
4719          this.muted = !this.muted
4720          this.controller.setAudioMuted(this.muted)
4721        })
4722      Web({ src: 'www.example.com', controller: this.controller })
4723    }
4724  }
4725}
4726```
4727
4728### prefetchPage<sup>10+</sup>
4729
4730prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
4731
4732在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
4733
4734**系统能力:** SystemCapability.Web.Webview.Core
4735
4736**参数:**
4737
4738| 参数名             | 类型                             | 必填  | 说明                      |
4739| ------------------| --------------------------------| ---- | ------------- |
4740| url               | string                          | 是    | 预加载的url。|
4741| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
4742
4743**错误码:**
4744
4745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
4746
4747| 错误码ID  | 错误信息                                                      |
4748| -------- | ------------------------------------------------------------ |
4749| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4750| 17100002 | Invalid url.                                                 |
4751
4752**示例:**
4753
4754```ts
4755// xxx.ets
4756import web_webview from '@ohos.web.webview'
4757import business_error from '@ohos.base'
4758
4759@Entry
4760@Component
4761struct WebComponent {
4762  controller: web_webview.WebviewController = new web_webview.WebviewController();
4763
4764  build() {
4765    Column() {
4766      Button('prefetchPopularPage')
4767        .onClick(() => {
4768          try {
4769            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
4770            this.controller.prefetchPage('https://www.example.com');
4771          } catch (error) {
4772            let e:business_error.BusinessError = error as business_error.BusinessError;
4773            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4774          }
4775        })
4776      // 需要将'www.example1.com'替换成一个真实的网站地址。
4777      Web({ src: 'www.example1.com', controller: this.controller })
4778    }
4779  }
4780}
4781```
4782
4783### prepareForPageLoad<sup>10+</sup>
4784
4785static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
4786
4787预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
4788
4789**系统能力:**  SystemCapability.Web.Webview.Core
4790
4791**参数:**
4792
4793| 参数名          | 类型    |  必填  | 说明                                            |
4794| ---------------| ------- | ---- | ------------- |
4795| url            | string  | 是   | 预连接的url。|
4796| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
4797| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
4798
4799**错误码:**
4800
4801以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
4802
4803| 错误码ID  | 错误信息                                                      |
4804| -------- | ------------------------------------------------------------ |
4805| 17100002 | Invalid url.                                                 |
4806| 171000013| The number of preconnect sockets is invalid.                                                 |
4807
4808**示例:**
4809
4810```ts
4811// xxx.ts
4812import UIAbility from '@ohos.app.ability.UIAbility';
4813import web_webview from '@ohos.web.webview';
4814import AbilityConstant from '@ohos.app.ability.AbilityConstant';
4815import Want from '@ohos.app.ability.Want';
4816
4817export default class EntryAbility extends UIAbility {
4818    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4819        console.log("EntryAbility onCreate");
4820        web_webview.WebviewController.initializeWebEngine();
4821        // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
4822        web_webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
4823        AppStorage.setOrCreate("abilityWant", want);
4824        console.log("EntryAbility onCreate done");
4825    }
4826}
4827```
4828
4829### setCustomUserAgent<sup>10+</sup>
4830
4831setCustomUserAgent(userAgent: string): void
4832
4833设置自定义用户代理,会覆盖系统的用户代理,推荐设置的位置是onControllerAttached回调事件,不建议放在onLoadIntercept。
4834
4835> **说明:**
4836>
4837>setCustomUserAgent设置后与web页面的跳转时序是web跳转后才设置UserAgent,这就导致页面跳转了但新agent关联的页面堆栈数仍只有一个,webviewController.accessBackward()总是返回false。
4838>若需要setCustomUserAgent,在setCustomUserAgent方法后添加this.controller.loadUrl(this.webUrl),webUrl为要加载的web页面,在原始的web组件的src可以设置一个空字符串。
4839
4840**系统能力:**  SystemCapability.Web.Webview.Core
4841
4842**参数:**
4843
4844| 参数名          | 类型    |  必填  | 说明                                            |
4845| ---------------| ------- | ---- | ------------- |
4846| userAgent      | string  | 是   | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 |
4847
4848**错误码:**
4849
4850以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
4851
4852| 错误码ID  | 错误信息                                                      |
4853| -------- | ------------------------------------------------------------ |
4854| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4855
4856**示例:**
4857
4858```ts
4859// xxx.ets
4860import web_webview from '@ohos.web.webview'
4861import business_error from '@ohos.base'
4862
4863@Entry
4864@Component
4865struct WebComponent {
4866  controller: web_webview.WebviewController = new web_webview.WebviewController();
4867  @State customUserAgent: string = 'test'
4868
4869  build() {
4870    Column() {
4871      Button('setCustomUserAgent')
4872        .onClick(() => {
4873          try {
4874            let userAgent = this.controller.getUserAgent() + this.customUserAgent;
4875            this.controller.setCustomUserAgent(userAgent);
4876          } catch (error) {
4877            let e:business_error.BusinessError = error as business_error.BusinessError;
4878            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4879          }
4880        })
4881      Web({ src: 'www.example.com', controller: this.controller })
4882    }
4883  }
4884}
4885```
4886
4887### setDownloadDelegate<sup>11+</sup>
4888
4889setDownloadDelegate(delegate: WebDownloadDelegate): void
4890
4891为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。
4892
4893**系统能力:**  SystemCapability.Web.Webview.Core
4894
4895**参数:**
4896
4897| 参数名          | 类型    |  必填  | 说明                                            |
4898| ---------------| ------- | ---- | ------------- |
4899| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
4900
4901**错误码:**
4902
4903以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
4904
4905| 错误码ID  | 错误信息                                                      |
4906| -------- | ------------------------------------------------------------ |
4907| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4908
4909**示例:**
4910
4911```ts
4912// xxx.ets
4913import web_webview from '@ohos.web.webview'
4914import business_error from '@ohos.base'
4915
4916@Entry
4917@Component
4918struct WebComponent {
4919  controller: web_webview.WebviewController = new web_webview.WebviewController();
4920  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
4921
4922  build() {
4923    Column() {
4924      Button('setDownloadDelegate')
4925        .onClick(() => {
4926          try {
4927            this.controller.setDownloadDelegate(this.delegate);
4928          } catch (error) {
4929            let e:business_error.BusinessError = error as business_error.BusinessError;
4930            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4931          }
4932        })
4933      Web({ src: 'www.example.com', controller: this.controller })
4934    }
4935  }
4936}
4937```
4938
4939### startDownload<sup>11+</sup>
4940
4941startDownload(url: string): void
4942
4943使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。
4944
4945**系统能力:**  SystemCapability.Web.Webview.Core
4946
4947**参数:**
4948
4949| 参数名          | 类型    |  必填  | 说明                                            |
4950| ---------------| ------- | ---- | ------------- |
4951| url      | string  | 是   | 下载地址。 |
4952
4953**错误码:**
4954
4955以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
4956
4957| 错误码ID  | 错误信息                                                      |
4958| -------- | ------------------------------------------------------------ |
4959| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4960| 17100002 | Invalid url. |
4961
4962**示例:**
4963
4964```ts
4965// xxx.ets
4966import web_webview from '@ohos.web.webview'
4967import business_error from '@ohos.base'
4968
4969@Entry
4970@Component
4971struct WebComponent {
4972  controller: web_webview.WebviewController = new web_webview.WebviewController();
4973  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
4974
4975  build() {
4976    Column() {
4977      Button('setDownloadDelegate')
4978        .onClick(() => {
4979          try {
4980            this.controller.setDownloadDelegate(this.delegate);
4981          } catch (error) {
4982            let e:business_error.BusinessError = error as business_error.BusinessError;
4983            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4984          }
4985        })
4986      Button('startDownload')
4987        .onClick(() => {
4988          try {
4989            this.controller.startDownload('www.example.com');
4990          } catch (error) {
4991            let e:business_error.BusinessError = error as business_error.BusinessError;
4992            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
4993          }
4994        })
4995      Web({ src: 'www.example.com', controller: this.controller })
4996    }
4997  }
4998}
4999```
5000
5001### getCustomUserAgent<sup>10+</sup>
5002
5003getCustomUserAgent(): string
5004
5005获取自定义用户代理。
5006
5007**系统能力:**  SystemCapability.Web.Webview.Core
5008
5009**返回值:**
5010
5011| 类型   | 说明                      |
5012| ------ | ------------------------- |
5013| string | 用户自定义代理信息。 |
5014
5015**错误码:**
5016
5017以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
5018
5019| 错误码ID  | 错误信息                                                      |
5020| -------- | ------------------------------------------------------------ |
5021| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5022
5023**示例:**
5024
5025```ts
5026// xxx.ets
5027import web_webview from '@ohos.web.webview'
5028import business_error from '@ohos.base'
5029
5030@Entry
5031@Component
5032struct WebComponent {
5033  controller: web_webview.WebviewController = new web_webview.WebviewController();
5034  @State userAgent: string = ''
5035
5036  build() {
5037    Column() {
5038      Button('getCustomUserAgent')
5039        .onClick(() => {
5040          try {
5041            this.userAgent = this.controller.getCustomUserAgent();
5042            console.log("userAgent: " + this.userAgent);
5043          } catch (error) {
5044            let e:business_error.BusinessError = error as business_error.BusinessError;
5045            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5046          }
5047        })
5048      Web({ src: 'www.example.com', controller: this.controller })
5049    }
5050  }
5051}
5052```
5053
5054### setConnectionTimeout<sup>11+</sup>
5055
5056static setConnectionTimeout(timeout: number): void
5057
5058设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。
5059
5060**系统能力:** SystemCapability.Web.Webview.Core
5061
5062**参数:**
5063
5064| 参数名          | 类型    |  必填  | 说明                                            |
5065| ---------------| ------- | ---- | ------------- |
5066| timeout        | number  | 是   | socket连接超时时间,以秒为单位。 |
5067
5068**示例:**
5069
5070```ts
5071// xxx.ets
5072import web_webview from '@ohos.web.webview'
5073import business_error from '@ohos.base'
5074
5075@Entry
5076@Component
5077struct WebComponent {
5078  controller: web_webview.WebviewController = new web_webview.WebviewController();
5079
5080  build() {
5081    Column() {
5082      Button('setConnectionTimeout')
5083        .onClick(() => {
5084          try {
5085            web_webview.WebviewController.setConnectionTimeout(5);
5086            console.log("setConnectionTimeout: 5s");
5087          } catch (error) {
5088            let e:business_error.BusinessError = error as business_error.BusinessError;
5089            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5090          }
5091        })
5092      Web({ src: 'www.example.com', controller: this.controller })
5093        .onErrorReceive((event) => {
5094          if (event) {
5095            console.log('getErrorInfo:' + event.error.getErrorInfo())
5096            console.log('getErrorCode:' + event.error.getErrorCode())
5097          }
5098        })
5099    }
5100  }
5101}
5102```
5103
5104### enableSafeBrowsing<sup>11+</sup>
5105
5106enableSafeBrowsing(enable: boolean): void
5107
5108启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。
5109
5110**系统能力:** SystemCapability.Web.Webview.Core
5111
5112**参数:**
5113
5114| 参数名   | 类型    |  必填  | 说明                       |
5115| --------| ------- | ---- | ---------------------------|
5116|  enable | boolean | 是   | 是否启用检查网站安全风险的功能。 |
5117
5118**错误码:**
5119
5120以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5121
5122| 错误码ID | 错误信息                  |
5123| -------- | ----------------------- |
5124|  401 | Invalid input parameter.    |
5125
5126**示例:**
5127
5128```ts
5129// xxx.ets
5130import web_webview from '@ohos.web.webview'
5131import business_error from '@ohos.base'
5132
5133@Entry
5134@Component
5135struct WebComponent {
5136  controller: web_webview.WebviewController = new web_webview.WebviewController();
5137
5138  build() {
5139    Column() {
5140      Button('enableSafeBrowsing')
5141        .onClick(() => {
5142          try {
5143            this.controller.enableSafeBrowsing(true);
5144            console.log("enableSafeBrowsing: true");
5145          } catch (error) {
5146            let e:business_error.BusinessError = error as business_error.BusinessError;
5147            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5148          }
5149        })
5150      Web({ src: 'www.example.com', controller: this.controller })
5151    }
5152  }
5153}
5154```
5155
5156### isSafeBrowsingEnabled<sup>11+</sup>
5157
5158isSafeBrowsingEnabled(): boolean
5159
5160获取当前网页是否启用了检查网站安全风险。
5161
5162**系统能力:** SystemCapability.Web.Webview.Core
5163
5164**返回值:**
5165
5166| 类型    | 说明                                     |
5167| ------- | --------------------------------------- |
5168| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。|
5169
5170**示例:**
5171
5172```ts
5173// xxx.ets
5174import web_webview from '@ohos.web.webview'
5175
5176@Entry
5177@Component
5178struct WebComponent {
5179  controller: web_webview.WebviewController = new web_webview.WebviewController();
5180
5181  build() {
5182    Column() {
5183      Button('isSafeBrowsingEnabled')
5184        .onClick(() => {
5185          let result = this.controller.isSafeBrowsingEnabled();
5186          console.log("result: " + result);
5187        })
5188      Web({ src: 'www.example.com', controller: this.controller })
5189    }
5190  }
5191}
5192```
5193
5194### postUrl<sup>11+</sup>
5195
5196postUrl(url: string, postData: ArrayBuffer): void
5197
5198使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。
5199
5200**系统能力:** SystemCapability.Web.Webview.Core
5201
5202**参数:**
5203
5204| 参数名  | 类型             | 必填 | 说明                  |
5205| ------- | ---------------- | ---- | :-------------------- |
5206| url     | string | 是   | 需要加载的 URL。      |
5207| postData | ArrayBuffer | 是   | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。|
5208
5209**错误码:**
5210
5211以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5212
5213| 错误码ID | 错误信息                                                     |
5214| -------- | ------------------------------------------------------------ |
5215| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5216| 17100002 | Invalid url.                                                 |
5217
5218**示例:**
5219
5220```ts
5221// xxx.ets
5222import web_webview from '@ohos.web.webview'
5223import business_error from '@ohos.base'
5224
5225class TestObj {
5226  constructor() {
5227  }
5228
5229  test(str: string): ArrayBuffer {
5230    let buf = new ArrayBuffer(str.length);
5231    let buff = new Uint8Array(buf);
5232
5233    for (let i = 0; i < str.length; i++) {
5234      buff[i] = str.charCodeAt(i);
5235    }
5236    return buf;
5237  }
5238}
5239
5240@Entry
5241@Component
5242struct WebComponent {
5243  controller: web_webview.WebviewController = new web_webview.WebviewController();
5244  @State testObjtest: TestObj = new TestObj();
5245
5246  build() {
5247    Column() {
5248      Button('postUrl')
5249        .onClick(() => {
5250          try {
5251            // 数据转化为ArrayBuffer类型。
5252            let postData = this.testObjtest.test("Name=test&Password=test");
5253            this.controller.postUrl('www.example.com', postData);
5254          } catch (error) {
5255            let e: business_error.BusinessError = error as business_error.BusinessError;
5256            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5257          }
5258        })
5259      Web({ src: '', controller: this.controller })
5260    }
5261  }
5262}
5263```
5264
5265### createWebPrintDocumentAdapter<sup>11+</sup>
5266
5267createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter
5268
5269创建web相关打印功能。
5270
5271**系统能力:** SystemCapability.Web.Webview.Core
5272
5273**参数:**
5274
5275| 参数名  | 类型    | 必填 | 说明                  |
5276| ------- | ------ | ---- | :-------------------- |
5277| jobName | string | 是   | 需要打印的文件名。      |
5278
5279**返回值:**
5280
5281| 类型                 | 说明                      |
5282| -------------------- | ------------------------- |
5283| print.printDocumentAdapter | 返回打印文档的适配器。 |
5284
5285**错误码:**
5286
5287以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5288
5289| 错误码ID | 错误信息                                                                    |
5290| -------- | -------------------------------------------------------------------------- |
5291| 401 | Invalid input parameter.                                                        |
5292| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5293
5294**示例:**
5295
5296```ts
5297// xxx.ets
5298import web_webview from '@ohos.web.webview'
5299import business_error from '@ohos.base'
5300import print from '@ohos.print'
5301
5302@Entry
5303@Component
5304struct WebComponent {
5305  controller: web_webview.WebviewController = new web_webview.WebviewController();
5306
5307  build() {
5308    Column() {
5309      Button('createWebPrintDocumentAdapter')
5310        .onClick(() => {
5311          try {
5312            let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf');
5313            print.print('example_jobid', webPrintDocadapter, null, getContext());
5314          } catch (error) {
5315            let e: business_error.BusinessError = error as business_error.BusinessError;
5316            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5317          }
5318        })
5319      Web({ src: 'www.example.com', controller: this.controller })
5320    }
5321  }
5322}
5323```
5324### isIncognitoMode<sup>11+</sup>
5325
5326isIncognitoMode(): boolean
5327
5328查询当前是否是隐私模式的Webview。
5329
5330**系统能力:** SystemCapability.Web.Webview.Core
5331
5332**返回值:**
5333
5334| 类型                 | 说明                      |
5335| -------------------- | ------------------------- |
5336| boolean              | 返回是否是隐私模式的Webview。 |
5337
5338**错误码:**
5339
5340以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5341
5342| 错误码ID | 错误信息                                                                    |
5343| -------- | -------------------------------------------------------------------------- |
5344| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5345
5346**示例:**
5347
5348```ts
5349// xxx.ets
5350import web_webview from '@ohos.web.webview'
5351import business_error from '@ohos.base'
5352
5353@Entry
5354@Component
5355struct WebComponent {
5356  controller: web_webview.WebviewController = new web_webview.WebviewController();
5357
5358  build() {
5359    Column() {
5360      Button('isIncognitoMode')
5361        .onClick(() => {
5362          try {
5363             let result = this.controller.isIncognitoMode();
5364             console.log('isIncognitoMode' + result);
5365            } catch (error) {
5366            let e: business_error.BusinessError = error as business_error.BusinessError;
5367            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5368          }
5369        })
5370      Web({ src: 'www.example.com', controller: this.controller })
5371    }
5372  }
5373}
5374```
5375
5376### getSecurityLevel<sup>11+</sup>
5377
5378getSecurityLevel(): SecurityLevel
5379
5380获取当前网页的安全级别。
5381
5382**系统能力:** SystemCapability.Web.Webview.Core
5383
5384**返回值:**
5385
5386| 类型                                | 说明                        |
5387| ----------------------------------- | --------------------------- |
5388| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 |
5389
5390**错误码:**
5391
5392以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5393
5394| 错误码ID | 错误信息                                                     |
5395| -------- | ------------------------------------------------------------ |
5396| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5397
5398**示例:**
5399
5400```ts
5401import webview from '@ohos.web.webview'
5402
5403
5404
5405@Entry
5406@Component
5407struct WebComponent {
5408  controller: webview.WebviewController = new webview.WebviewController()
5409  build() {
5410    Column() {
5411      Web({ src: 'www.example.com', controller: this.controller })
5412        .onPageEnd((event) => {
5413          if (event) {
5414            let securityLevel = this.controller.getSecurityLevel()
5415            console.info('securityLevel: ', securityLevel)
5416          }
5417        })
5418    }
5419  }
5420}
5421```
5422
5423## WebCookieManager
5424
5425通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。
5426
5427### getCookie<sup>(deprecated)</sup>
5428
5429static getCookie(url: string): string
5430
5431获取指定url对应cookie的值。
5432
5433> **说明:**
5434>
5435> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代
5436
5437**系统能力:** SystemCapability.Web.Webview.Core
5438
5439**参数:**
5440
5441| 参数名 | 类型   | 必填 | 说明                      |
5442| ------ | ------ | ---- | :------------------------ |
5443| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5444
5445**返回值:**
5446
5447| 类型   | 说明                      |
5448| ------ | ------------------------- |
5449| string | 指定url对应的cookie的值。 |
5450
5451**错误码:**
5452
5453以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5454
5455| 错误码ID | 错误信息                                               |
5456| -------- | ------------------------------------------------------ |
5457| 17100002 | Invalid url.                                           |
5458
5459**示例:**
5460
5461```ts
5462// xxx.ets
5463import web_webview from '@ohos.web.webview'
5464import business_error from '@ohos.base'
5465
5466@Entry
5467@Component
5468struct WebComponent {
5469  controller: web_webview.WebviewController = new web_webview.WebviewController();
5470
5471  build() {
5472    Column() {
5473      Button('getCookie')
5474        .onClick(() => {
5475          try {
5476            let value = web_webview.WebCookieManager.getCookie('https://www.example.com');
5477            console.log("value: " + value);
5478          } catch (error) {
5479            let e:business_error.BusinessError = error as business_error.BusinessError;
5480            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5481          }
5482        })
5483      Web({ src: 'www.example.com', controller: this.controller })
5484    }
5485  }
5486}
5487```
5488
5489### fetchCookieSync<sup>11+</sup>
5490
5491static fetchCookieSync(url: string, incognito?: boolean): string
5492
5493获取指定url对应cookie的值。
5494
5495**系统能力:** SystemCapability.Web.Webview.Core
5496
5497**参数:**
5498
5499| 参数名 | 类型   | 必填 | 说明                      |
5500| ------ | ------ | ---- | :------------------------ |
5501| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5502| incognito    | boolean | 否   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
5503
5504**返回值:**
5505
5506| 类型   | 说明                      |
5507| ------ | ------------------------- |
5508| string | 指定url对应的cookie的值。 |
5509
5510**错误码:**
5511
5512以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5513
5514| 错误码ID | 错误信息                                               |
5515| -------- | ------------------------------------------------------ |
5516| 17100002 | Invalid url.                                           |
5517
5518**示例:**
5519
5520```ts
5521// xxx.ets
5522import web_webview from '@ohos.web.webview'
5523import business_error from '@ohos.base'
5524
5525@Entry
5526@Component
5527struct WebComponent {
5528  controller: web_webview.WebviewController = new web_webview.WebviewController();
5529
5530  build() {
5531    Column() {
5532      Button('fetchCookieSync')
5533        .onClick(() => {
5534          try {
5535            let value = web_webview.WebCookieManager.fetchCookieSync('https://www.example.com');
5536            console.log("fetchCookieSync cookie = " + value);
5537          } catch (error) {
5538            let e:business_error.BusinessError = error as business_error.BusinessError;
5539            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5540          }
5541        })
5542      Web({ src: 'www.example.com', controller: this.controller })
5543    }
5544  }
5545}
5546```
5547
5548### fetchCookie<sup>11+</sup>
5549
5550static fetchCookie(url: string, callback: AsyncCallback\<string>): void
5551
5552异步callback方式获取指定url对应cookie的值。
5553
5554**系统能力:** SystemCapability.Web.Webview.Core
5555
5556**参数:**
5557
5558| 参数名 | 类型   | 必填 | 说明                      |
5559| ------ | ------ | ---- | :------------------------ |
5560| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5561| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie |
5562
5563**错误码:**
5564
5565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5566
5567| 错误码ID | 错误信息                                               |
5568| -------- | ------------------------------------------------------ |
5569| 401 | Invalid input parameter.                                           |
5570| 17100002 | Invalid url.                                           |
5571
5572**示例:**
5573
5574```ts
5575// xxx.ets
5576import web_webview from '@ohos.web.webview'
5577import business_error from '@ohos.base'
5578
5579@Entry
5580@Component
5581struct WebComponent {
5582  controller: web_webview.WebviewController = new web_webview.WebviewController();
5583
5584  build() {
5585    Column() {
5586      Button('fetchCookie')
5587        .onClick(() => {
5588          try {
5589            web_webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => {
5590              if (error) {
5591                let e:business_error.BusinessError = error as business_error.BusinessError;
5592                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5593                return;
5594              }
5595              if (cookie) {
5596                console.log('fetchCookie cookie = ' + cookie);
5597              }
5598            })
5599          } catch (error) {
5600            let e:business_error.BusinessError = error as business_error.BusinessError;
5601            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5602          }
5603        })
5604      Web({ src: 'www.example.com', controller: this.controller })
5605    }
5606  }
5607}
5608```
5609
5610### fetchCookie<sup>11+</sup>
5611
5612static fetchCookie(url: string): Promise\<string>
5613
5614以Promise方式异步获取指定url对应cookie的值。
5615
5616**系统能力:** SystemCapability.Web.Webview.Core
5617
5618**参数:**
5619
5620| 参数名 | 类型   | 必填 | 说明                      |
5621| ------ | ------ | ---- | :------------------------ |
5622| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5623
5624**返回值:**
5625
5626| 类型   | 说明                      |
5627| ------ | ------------------------- |
5628| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
5629
5630**错误码:**
5631
5632以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5633
5634| 错误码ID | 错误信息                                               |
5635| -------- | ------------------------------------------------------ |
5636| 401 | Invalid input parameter.                                           |
5637| 17100002 | Invalid url.                                           |
5638
5639**示例:**
5640
5641```ts
5642// xxx.ets
5643import web_webview from '@ohos.web.webview'
5644import business_error from '@ohos.base'
5645
5646@Entry
5647@Component
5648struct WebComponent {
5649  controller: web_webview.WebviewController = new web_webview.WebviewController();
5650
5651  build() {
5652    Column() {
5653      Button('fetchCookie')
5654        .onClick(() => {
5655          try {
5656            web_webview.WebCookieManager.fetchCookie('https://www.example.com')
5657              .then(cookie => {
5658                console.log("fetchCookie cookie = " + cookie);
5659              })
5660              .catch((error:business_error.BusinessError) => {
5661                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
5662              })
5663          } catch (error) {
5664            let e:business_error.BusinessError = error as business_error.BusinessError;
5665            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5666          }
5667        })
5668      Web({ src: 'www.example.com', controller: this.controller })
5669    }
5670  }
5671}
5672```
5673
5674
5675### setCookie<sup>(deprecated)</sup>
5676
5677static setCookie(url: string, value: string): void
5678
5679为指定url设置单个cookie的值。
5680
5681> **说明:**
5682>
5683> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代
5684
5685**系统能力:** SystemCapability.Web.Webview.Core
5686
5687**参数:**
5688
5689| 参数名 | 类型   | 必填 | 说明                      |
5690| ------ | ------ | ---- | :------------------------ |
5691| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
5692| value  | string | 是   | 要设置的cookie的值。      |
5693
5694**错误码:**
5695
5696以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5697
5698| 错误码ID | 错误信息                                               |
5699| -------- | ------------------------------------------------------ |
5700| 17100002 | Invalid url.                                           |
5701| 17100005 | Invalid cookie value.                                  |
5702
5703**示例:**
5704
5705```ts
5706// xxx.ets
5707import web_webview from '@ohos.web.webview'
5708import business_error from '@ohos.base'
5709
5710@Entry
5711@Component
5712struct WebComponent {
5713  controller: web_webview.WebviewController = new web_webview.WebviewController();
5714
5715  build() {
5716    Column() {
5717      Button('setCookie')
5718        .onClick(() => {
5719          try {
5720            web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
5721          } catch (error) {
5722            let e:business_error.BusinessError = error as business_error.BusinessError;
5723            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5724          }
5725        })
5726      Web({ src: 'www.example.com', controller: this.controller })
5727    }
5728  }
5729}
5730```
5731
5732### configCookieSync<sup>11+</sup>
5733
5734static configCookieSync(url: string, value: string, incognito?: boolean): void
5735
5736为指定url设置cookie的值。
5737
5738> **说明:**
5739>
5740>configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
5741>同步cookie的时机建议在webview组件加载之前完成。
5742
5743**系统能力:** SystemCapability.Web.Webview.Core
5744
5745**参数:**
5746
5747| 参数名 | 类型   | 必填 | 说明                      |
5748| ------ | ------ | ---- | :------------------------ |
5749| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
5750| value  | string | 是   | 要设置的cookie的值。      |
5751| incognito    | boolean | 否   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
5752
5753**错误码:**
5754
5755以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5756
5757| 错误码ID | 错误信息                                               |
5758| -------- | ------------------------------------------------------ |
5759| 17100002 | Invalid url.                                           |
5760| 17100005 | Invalid cookie value.                                  |
5761
5762**示例:**
5763
5764```ts
5765// xxx.ets
5766import web_webview from '@ohos.web.webview'
5767import business_error from '@ohos.base'
5768
5769@Entry
5770@Component
5771struct WebComponent {
5772  controller: web_webview.WebviewController = new web_webview.WebviewController();
5773
5774  build() {
5775    Column() {
5776      Button('configCookieSync')
5777        .onClick(() => {
5778          try {
5779            // 设置多个cookie值时用','隔开,设置单个cookie值时不需要。
5780            web_webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b,c=d,e=f');
5781          } catch (error) {
5782            let e:business_error.BusinessError = error as business_error.BusinessError;
5783            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5784          }
5785        })
5786      Web({ src: 'www.example.com', controller: this.controller })
5787    }
5788  }
5789}
5790```
5791
5792### configCookie<sup>11+</sup>
5793
5794static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void
5795
5796异步callback方式为指定url设置单个cookie的值。
5797
5798**系统能力:** SystemCapability.Web.Webview.Core
5799
5800**参数:**
5801
5802| 参数名 | 类型   | 必填 | 说明                      |
5803| ------ | ------ | ---- | :------------------------ |
5804| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5805| value  | string | 是   | 要设置的cookie的值。      |
5806| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 |
5807
5808**错误码:**
5809
5810以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5811
5812| 错误码ID | 错误信息                                               |
5813| -------- | ------------------------------------------------------ |
5814| 401      | Invalid input parameter.                               |
5815| 17100002 | Invalid url.                                           |
5816| 17100005 | Invalid cookie value.                                  |
5817
5818**示例:**
5819
5820```ts
5821// xxx.ets
5822import web_webview from '@ohos.web.webview'
5823import business_error from '@ohos.base'
5824
5825@Entry
5826@Component
5827struct WebComponent {
5828  controller: web_webview.WebviewController = new web_webview.WebviewController();
5829
5830  build() {
5831    Column() {
5832      Button('configCookie')
5833        .onClick(() => {
5834          try {
5835            web_webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => {
5836              if (error) {
5837                let e: business_error.BusinessError = error as business_error.BusinessError;
5838                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5839              }
5840            })
5841          } catch (error) {
5842            let e:business_error.BusinessError = error as business_error.BusinessError;
5843            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5844          }
5845        })
5846      Web({ src: 'www.example.com', controller: this.controller })
5847    }
5848  }
5849}
5850```
5851
5852### configCookie<sup>11+</sup>
5853
5854static configCookie(url: string, value: string): Promise\<void>
5855
5856以异步Promise方式为指定url设置单个cookie的值。
5857
5858**系统能力:** SystemCapability.Web.Webview.Core
5859
5860**参数:**
5861
5862| 参数名 | 类型   | 必填 | 说明                      |
5863| ------ | ------ | ---- | :------------------------ |
5864| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
5865| value  | string | 是   | 要设置的cookie的值。      |
5866
5867**返回值:**
5868
5869| 类型   | 说明                      |
5870| ------ | ------------------------- |
5871| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
5872
5873**错误码:**
5874
5875以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5876
5877| 错误码ID | 错误信息                                                |
5878| -------- | ------------------------------------------------------ |
5879| 401      | Invalid input parameter.                               |
5880| 17100002 | Invalid url.                                           |
5881| 17100005 | Invalid cookie value.                                  |
5882
5883**示例:**
5884
5885```ts
5886// xxx.ets
5887import web_webview from '@ohos.web.webview'
5888import business_error from '@ohos.base'
5889
5890@Entry
5891@Component
5892struct WebComponent {
5893  controller: web_webview.WebviewController = new web_webview.WebviewController();
5894
5895  build() {
5896    Column() {
5897      Button('configCookie')
5898        .onClick(() => {
5899          try {
5900            web_webview.WebCookieManager.configCookie('https://www.example.com', 'a=b')
5901              .then(() => {
5902                console.log('configCookie success!');
5903              })
5904              .catch((error:business_error.BusinessError) => {
5905                console.log('error: ' + JSON.stringify(error));
5906              })
5907          } catch (error) {
5908            let e:business_error.BusinessError = error as business_error.BusinessError;
5909            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5910          }
5911        })
5912      Web({ src: 'www.example.com', controller: this.controller })
5913    }
5914  }
5915}
5916```
5917
5918### saveCookieAsync
5919
5920static saveCookieAsync(callback: AsyncCallback\<void>): void
5921
5922将当前存在内存中的cookie异步保存到磁盘中。
5923
5924**系统能力:** SystemCapability.Web.Webview.Core
5925
5926**参数:**
5927
5928| 参数名   | 类型                   | 必填 | 说明                                               |
5929| -------- | ---------------------- | ---- | :------------------------------------------------- |
5930| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
5931
5932**示例:**
5933
5934```ts
5935// xxx.ets
5936import web_webview from '@ohos.web.webview'
5937import business_error from '@ohos.base'
5938
5939@Entry
5940@Component
5941struct WebComponent {
5942  controller: web_webview.WebviewController = new web_webview.WebviewController();
5943
5944  build() {
5945    Column() {
5946      Button('saveCookieAsync')
5947        .onClick(() => {
5948          try {
5949            web_webview.WebCookieManager.saveCookieAsync((error) => {
5950              if (error) {
5951                let e: business_error.BusinessError = error as business_error.BusinessError;
5952                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5953              }
5954            })
5955          } catch (error) {
5956            let e:business_error.BusinessError = error as business_error.BusinessError;
5957            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
5958          }
5959        })
5960      Web({ src: 'www.example.com', controller: this.controller })
5961    }
5962  }
5963}
5964```
5965
5966### saveCookieAsync
5967
5968static saveCookieAsync(): Promise\<void>
5969
5970将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
5971
5972**系统能力:** SystemCapability.Web.Webview.Core
5973
5974**返回值:**
5975
5976| 类型             | 说明                                      |
5977| ---------------- | ----------------------------------------- |
5978| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
5979
5980**示例:**
5981
5982```ts
5983// xxx.ets
5984import web_webview from '@ohos.web.webview'
5985import business_error from '@ohos.base'
5986
5987@Entry
5988@Component
5989struct WebComponent {
5990  controller: web_webview.WebviewController = new web_webview.WebviewController();
5991
5992  build() {
5993    Column() {
5994      Button('saveCookieAsync')
5995        .onClick(() => {
5996          try {
5997            web_webview.WebCookieManager.saveCookieAsync()
5998              .then(() => {
5999                console.log("saveCookieAsyncCallback success!");
6000              })
6001              .catch((error:business_error.BusinessError) => {
6002                console.error("error: " + error);
6003              });
6004          } catch (error) {
6005            let e:business_error.BusinessError = error as business_error.BusinessError;
6006            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6007          }
6008        })
6009      Web({ src: 'www.example.com', controller: this.controller })
6010    }
6011  }
6012}
6013```
6014
6015### putAcceptCookieEnabled
6016
6017static putAcceptCookieEnabled(accept: boolean): void
6018
6019设置WebCookieManager实例是否拥有发送和接收cookie的权限。
6020
6021**系统能力:** SystemCapability.Web.Webview.Core
6022
6023**参数:**
6024
6025| 参数名 | 类型    | 必填 | 说明                                 |
6026| ------ | ------- | ---- | :----------------------------------- |
6027| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限,默认为true。 |
6028
6029**示例:**
6030
6031```ts
6032// xxx.ets
6033import web_webview from '@ohos.web.webview'
6034import business_error from '@ohos.base'
6035
6036@Entry
6037@Component
6038struct WebComponent {
6039  controller: web_webview.WebviewController = new web_webview.WebviewController();
6040
6041  build() {
6042    Column() {
6043      Button('putAcceptCookieEnabled')
6044        .onClick(() => {
6045          try {
6046            web_webview.WebCookieManager.putAcceptCookieEnabled(false);
6047          } catch (error) {
6048            let e:business_error.BusinessError = error as business_error.BusinessError;
6049            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6050          }
6051        })
6052      Web({ src: 'www.example.com', controller: this.controller })
6053    }
6054  }
6055}
6056```
6057
6058### isCookieAllowed
6059
6060static isCookieAllowed(): boolean
6061
6062获取WebCookieManager实例是否拥有发送和接收cookie的权限。
6063
6064**系统能力:** SystemCapability.Web.Webview.Core
6065
6066**返回值:**
6067
6068| 类型    | 说明                             |
6069| ------- | -------------------------------- |
6070| boolean | 是否拥有发送和接收cookie的权限,默认为true。 |
6071
6072**示例:**
6073
6074```ts
6075// xxx.ets
6076import web_webview from '@ohos.web.webview'
6077
6078@Entry
6079@Component
6080struct WebComponent {
6081  controller: web_webview.WebviewController = new web_webview.WebviewController();
6082
6083  build() {
6084    Column() {
6085      Button('isCookieAllowed')
6086        .onClick(() => {
6087          let result = web_webview.WebCookieManager.isCookieAllowed();
6088          console.log("result: " + result);
6089        })
6090      Web({ src: 'www.example.com', controller: this.controller })
6091    }
6092  }
6093}
6094```
6095
6096### putAcceptThirdPartyCookieEnabled
6097
6098static putAcceptThirdPartyCookieEnabled(accept: boolean): void
6099
6100设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
6101
6102**系统能力:** SystemCapability.Web.Webview.Core
6103
6104**参数:**
6105
6106| 参数名 | 类型    | 必填 | 说明                                       |
6107| ------ | ------- | ---- | :----------------------------------------- |
6108| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 |
6109
6110**示例:**
6111
6112```ts
6113// xxx.ets
6114import web_webview from '@ohos.web.webview'
6115import business_error from '@ohos.base'
6116
6117@Entry
6118@Component
6119struct WebComponent {
6120  controller: web_webview.WebviewController = new web_webview.WebviewController();
6121
6122  build() {
6123    Column() {
6124      Button('putAcceptThirdPartyCookieEnabled')
6125        .onClick(() => {
6126          try {
6127            web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
6128          } catch (error) {
6129            let e:business_error.BusinessError = error as business_error.BusinessError;
6130            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6131          }
6132        })
6133      Web({ src: 'www.example.com', controller: this.controller })
6134    }
6135  }
6136}
6137```
6138
6139### isThirdPartyCookieAllowed
6140
6141static isThirdPartyCookieAllowed(): boolean
6142
6143获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
6144
6145**系统能力:** SystemCapability.Web.Webview.Core
6146
6147**返回值:**
6148
6149| 类型    | 说明                                   |
6150| ------- | -------------------------------------- |
6151| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 |
6152
6153**示例:**
6154
6155```ts
6156// xxx.ets
6157import web_webview from '@ohos.web.webview'
6158
6159@Entry
6160@Component
6161struct WebComponent {
6162  controller: web_webview.WebviewController = new web_webview.WebviewController();
6163
6164  build() {
6165    Column() {
6166      Button('isThirdPartyCookieAllowed')
6167        .onClick(() => {
6168          let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed();
6169          console.log("result: " + result);
6170        })
6171      Web({ src: 'www.example.com', controller: this.controller })
6172    }
6173  }
6174}
6175```
6176
6177### existCookie
6178
6179static existCookie(incognito?: boolean): boolean
6180
6181获取是否存在cookie。
6182
6183**系统能力:** SystemCapability.Web.Webview.Core
6184
6185**参数:**
6186
6187| 参数名 | 类型    | 必填 | 说明                                       |
6188| ------ | ------- | ---- | :----------------------------------------- |
6189| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 |
6190
6191**返回值:**
6192
6193| 类型    | 说明                                   |
6194| ------- | -------------------------------------- |
6195| boolean | true表示存在cookie,false表示不存在cookie。 |
6196
6197**示例:**
6198
6199```ts
6200// xxx.ets
6201import web_webview from '@ohos.web.webview'
6202
6203@Entry
6204@Component
6205struct WebComponent {
6206  controller: web_webview.WebviewController = new web_webview.WebviewController();
6207
6208  build() {
6209    Column() {
6210      Button('existCookie')
6211        .onClick(() => {
6212          let result = web_webview.WebCookieManager.existCookie();
6213          console.log("result: " + result);
6214        })
6215      Web({ src: 'www.example.com', controller: this.controller })
6216    }
6217  }
6218}
6219```
6220
6221### deleteEntireCookie<sup>(deprecated)</sup>
6222
6223static deleteEntireCookie(): void
6224
6225清除所有cookie。
6226
6227> **说明:**
6228>
6229> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代
6230
6231**系统能力:** SystemCapability.Web.Webview.Core
6232
6233**示例:**
6234
6235```ts
6236// xxx.ets
6237import web_webview from '@ohos.web.webview'
6238
6239@Entry
6240@Component
6241struct WebComponent {
6242  controller: web_webview.WebviewController = new web_webview.WebviewController();
6243
6244  build() {
6245    Column() {
6246      Button('deleteEntireCookie')
6247        .onClick(() => {
6248          web_webview.WebCookieManager.deleteEntireCookie();
6249        })
6250      Web({ src: 'www.example.com', controller: this.controller })
6251    }
6252  }
6253}
6254```
6255
6256### clearAllCookiesSync<sup>11+</sup>
6257
6258static clearAllCookiesSync(incognito?: boolean): void
6259
6260清除所有cookie。
6261
6262**系统能力:** SystemCapability.Web.Webview.Core
6263
6264**参数:**
6265
6266| 参数名 | 类型    | 必填 | 说明                                       |
6267| ------ | ------- | ---- | :----------------------------------------- |
6268| incognito    | boolean | 否   | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 |
6269
6270**示例:**
6271
6272```ts
6273// xxx.ets
6274import web_webview from '@ohos.web.webview'
6275
6276@Entry
6277@Component
6278struct WebComponent {
6279  controller: web_webview.WebviewController = new web_webview.WebviewController();
6280
6281  build() {
6282    Column() {
6283      Button('clearAllCookiesSync')
6284        .onClick(() => {
6285          web_webview.WebCookieManager.clearAllCookiesSync();
6286        })
6287      Web({ src: 'www.example.com', controller: this.controller })
6288    }
6289  }
6290}
6291```
6292
6293### clearAllCookies<sup>11+</sup>
6294
6295static clearAllCookies(callback: AsyncCallback\<void>): void
6296
6297异步callback方式清除所有cookie。
6298
6299**系统能力:** SystemCapability.Web.Webview.Core
6300
6301**参数:**
6302
6303| 参数名   | 类型                   | 必填 | 说明                                               |
6304| -------- | ---------------------- | ---- | :------------------------------------------------- |
6305| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有cookie是否成功。 |
6306
6307**示例:**
6308
6309```ts
6310// xxx.ets
6311import web_webview from '@ohos.web.webview'
6312import business_error from '@ohos.base'
6313
6314@Entry
6315@Component
6316struct WebComponent {
6317  controller: web_webview.WebviewController = new web_webview.WebviewController();
6318
6319  build() {
6320    Column() {
6321      Button('clearAllCookies')
6322        .onClick(() => {
6323          try {
6324            web_webview.WebCookieManager.clearAllCookies((error) => {
6325              if (error) {
6326                let e: business_error.BusinessError = error as business_error.BusinessError;
6327                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6328              }
6329            })
6330          } catch (error) {
6331            let e:business_error.BusinessError = error as business_error.BusinessError;
6332            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6333          }
6334        })
6335      Web({ src: 'www.example.com', controller: this.controller })
6336    }
6337  }
6338}
6339```
6340
6341### clearAllCookies<sup>11+</sup>
6342
6343static clearAllCookies(): Promise\<void>
6344
6345异步promise方式清除所有cookie。
6346
6347**系统能力:** SystemCapability.Web.Webview.Core
6348
6349**返回值:**
6350
6351| 类型             | 说明                                      |
6352| ---------------- | ----------------------------------------- |
6353| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 |
6354
6355**示例:**
6356
6357```ts
6358// xxx.ets
6359import web_webview from '@ohos.web.webview'
6360import business_error from '@ohos.base'
6361
6362@Entry
6363@Component
6364struct WebComponent {
6365  controller: web_webview.WebviewController = new web_webview.WebviewController();
6366
6367  build() {
6368    Column() {
6369      Button('clearAllCookies')
6370        .onClick(() => {
6371          try {
6372            web_webview.WebCookieManager.clearAllCookies()
6373              .then(() => {
6374                console.log("clearAllCookies success!");
6375              })
6376              .catch((error:business_error.BusinessError) => {
6377                console.error("error: " + error);
6378              });
6379          } catch (error) {
6380            let e:business_error.BusinessError = error as business_error.BusinessError;
6381            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6382          }
6383        })
6384      Web({ src: 'www.example.com', controller: this.controller })
6385    }
6386  }
6387}
6388```
6389
6390### deleteSessionCookie<sup>(deprecated)</sup>
6391
6392static deleteSessionCookie(): void
6393
6394清除所有会话cookie。
6395
6396> **说明:**
6397>
6398> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代
6399
6400**系统能力:** SystemCapability.Web.Webview.Core
6401
6402**示例:**
6403
6404```ts
6405// xxx.ets
6406import web_webview from '@ohos.web.webview'
6407
6408@Entry
6409@Component
6410struct WebComponent {
6411  controller: web_webview.WebviewController = new web_webview.WebviewController();
6412
6413  build() {
6414    Column() {
6415      Button('deleteSessionCookie')
6416        .onClick(() => {
6417          web_webview.WebCookieManager.deleteSessionCookie();
6418        })
6419      Web({ src: 'www.example.com', controller: this.controller })
6420    }
6421  }
6422}
6423```
6424
6425### clearSessionCookieSync<sup>11+</sup>
6426
6427static clearSessionCookieSync(): void
6428
6429清除所有会话cookie。
6430
6431**系统能力:** SystemCapability.Web.Webview.Core
6432
6433**示例:**
6434
6435```ts
6436// xxx.ets
6437import web_webview from '@ohos.web.webview'
6438
6439@Entry
6440@Component
6441struct WebComponent {
6442  controller: web_webview.WebviewController = new web_webview.WebviewController();
6443
6444  build() {
6445    Column() {
6446      Button('clearSessionCookieSync')
6447        .onClick(() => {
6448          web_webview.WebCookieManager.clearSessionCookieSync();
6449        })
6450      Web({ src: 'www.example.com', controller: this.controller })
6451    }
6452  }
6453}
6454```
6455
6456### clearSessionCookie<sup>11+</sup>
6457
6458static clearSessionCookie(callback: AsyncCallback\<void>): void
6459
6460异步callback方式清除所有会话cookie。
6461
6462**系统能力:** SystemCapability.Web.Webview.Core
6463
6464**参数:**
6465
6466| 参数名   | 类型                   | 必填 | 说明                                               |
6467| -------- | ---------------------- | ---- | :------------------------------------------------- |
6468| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有会话cookie是否成功。 |
6469
6470**示例:**
6471
6472```ts
6473// xxx.ets
6474import web_webview from '@ohos.web.webview'
6475import business_error from '@ohos.base'
6476
6477@Entry
6478@Component
6479struct WebComponent {
6480  controller: web_webview.WebviewController = new web_webview.WebviewController();
6481
6482  build() {
6483    Column() {
6484      Button('clearSessionCookie')
6485        .onClick(() => {
6486          try {
6487            web_webview.WebCookieManager.clearSessionCookie((error) => {
6488              if (error) {
6489                let e: business_error.BusinessError = error as business_error.BusinessError;
6490                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6491              }
6492            })
6493          } catch (error) {
6494            let e:business_error.BusinessError = error as business_error.BusinessError;
6495            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6496          }
6497        })
6498      Web({ src: 'www.example.com', controller: this.controller })
6499    }
6500  }
6501}
6502```
6503
6504### clearSessionCookie<sup>11+</sup>
6505
6506static clearSessionCookie(): Promise\<void>
6507
6508异步promise方式清除所有会话cookie。
6509
6510**系统能力:** SystemCapability.Web.Webview.Core
6511
6512**返回值:**
6513
6514| 类型             | 说明                                      |
6515| ---------------- | ----------------------------------------- |
6516| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 |
6517
6518**示例:**
6519
6520```ts
6521// xxx.ets
6522import web_webview from '@ohos.web.webview'
6523import business_error from '@ohos.base'
6524
6525@Entry
6526@Component
6527struct WebComponent {
6528  controller: web_webview.WebviewController = new web_webview.WebviewController();
6529
6530  build() {
6531    Column() {
6532      Button('clearSessionCookie')
6533        .onClick(() => {
6534          try {
6535            web_webview.WebCookieManager.clearSessionCookie()
6536              .then(() => {
6537                console.log("clearSessionCookie success!");
6538              })
6539              .catch((error:business_error.BusinessError) => {
6540                console.error("error: " + error);
6541              });
6542          } catch (error) {
6543            let e:business_error.BusinessError = error as business_error.BusinessError;
6544            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6545          }
6546        })
6547      Web({ src: 'www.example.com', controller: this.controller })
6548    }
6549  }
6550}
6551```
6552
6553## WebStorage
6554
6555通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
6556
6557> **说明:**
6558>
6559> 目前调用WebStorage下的方法,都需要先加载Web组件。
6560
6561### deleteOrigin
6562
6563static deleteOrigin(origin: string): void
6564
6565清除指定源所使用的存储。
6566
6567**系统能力:** SystemCapability.Web.Webview.Core
6568
6569**参数:**
6570
6571| 参数名 | 类型   | 必填 | 说明                     |
6572| ------ | ------ | ---- | ------------------------ |
6573| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
6574
6575**错误码:**
6576
6577以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6578
6579| 错误码ID | 错误信息                                               |
6580| -------- | ------------------------------------------------------ |
6581| 17100011 | Invalid origin.                             |
6582
6583**示例:**
6584
6585```ts
6586// xxx.ets
6587import web_webview from '@ohos.web.webview';
6588import business_error from '@ohos.base';
6589
6590@Entry
6591@Component
6592struct WebComponent {
6593  controller: web_webview.WebviewController = new web_webview.WebviewController();
6594  origin: string = "resource://rawfile/";
6595
6596  build() {
6597    Column() {
6598      Button('deleteOrigin')
6599        .onClick(() => {
6600          try {
6601            web_webview.WebStorage.deleteOrigin(this.origin);
6602          } catch (error) {
6603            let e: business_error.BusinessError = error as business_error.BusinessError;
6604            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6605          }
6606
6607        })
6608      Web({ src: $rawfile('index.html'), controller: this.controller })
6609        .databaseAccess(true)
6610    }
6611  }
6612}
6613```
6614
6615加载的html文件。
6616 ```html
6617  <!-- index.html -->
6618  <!DOCTYPE html>
6619  <html>
6620  <head>
6621    <meta charset="UTF-8">
6622    <title>test</title>
6623    <script type="text/javascript">
6624
6625      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
6626      var msg;
6627
6628      db.transaction(function(tx){
6629        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
6630        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
6631        msg = '<p>数据表已创建,且插入了两条数据。</p>';
6632
6633        document.querySelector('#status').innerHTML = msg;
6634      });
6635
6636      db.transaction(function(tx){
6637        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
6638          var len = results.rows.length,i;
6639          msg = "<p>查询记录条数:" + len + "</p>";
6640
6641          document.querySelector('#status').innerHTML += msg;
6642
6643              for(i = 0; i < len; i++){
6644                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
6645
6646          document.querySelector('#status').innerHTML += msg;
6647          }
6648        },null);
6649      });
6650
6651      </script>
6652  </head>
6653  <body>
6654  <div id="status" name="status">状态信息</div>
6655  </body>
6656  </html>
6657  ```
6658
6659### getOrigins
6660
6661static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void
6662
6663以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
6664
6665**系统能力:** SystemCapability.Web.Webview.Core
6666
6667**参数:**
6668
6669| 参数名   | 类型                                   | 必填 | 说明                                                   |
6670| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
6671| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
6672
6673**错误码:**
6674
6675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6676
6677| 错误码ID | 错误信息                                               |
6678| -------- | ------------------------------------------------------ |
6679| 17100012 | Invalid web storage origin.                             |
6680
6681**示例:**
6682
6683```ts
6684// xxx.ets
6685import web_webview from '@ohos.web.webview';
6686import business_error from '@ohos.base';
6687
6688@Entry
6689@Component
6690struct WebComponent {
6691  controller: web_webview.WebviewController = new web_webview.WebviewController();
6692
6693  build() {
6694    Column() {
6695      Button('getOrigins')
6696        .onClick(() => {
6697          try {
6698            web_webview.WebStorage.getOrigins((error, origins) => {
6699              if (error) {
6700                let e: business_error.BusinessError = error as business_error.BusinessError;
6701                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6702                return;
6703              }
6704              for (let i = 0; i < origins.length; i++) {
6705                console.log('origin: ' + origins[i].origin);
6706                console.log('usage: ' + origins[i].usage);
6707                console.log('quota: ' + origins[i].quota);
6708              }
6709            })
6710          } catch (error) {
6711            let e: business_error.BusinessError = error as business_error.BusinessError;
6712            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6713          }
6714
6715        })
6716      Web({ src: $rawfile('index.html'), controller: this.controller })
6717        .databaseAccess(true)
6718    }
6719  }
6720}
6721```
6722
6723加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
6724
6725### getOrigins
6726
6727static getOrigins(): Promise\<Array\<WebStorageOrigin>>
6728
6729以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
6730
6731**系统能力:** SystemCapability.Web.Webview.Core
6732
6733**返回值:**
6734
6735| 类型                             | 说明                                                         |
6736| -------------------------------- | ------------------------------------------------------------ |
6737| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
6738
6739**错误码:**
6740
6741以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6742
6743| 错误码ID | 错误信息                                               |
6744| -------- | ------------------------------------------------------ |
6745| 17100012 | Invalid web storage origin.                             |
6746
6747**示例:**
6748
6749```ts
6750// xxx.ets
6751import web_webview from '@ohos.web.webview';
6752import business_error from '@ohos.base';
6753
6754@Entry
6755@Component
6756struct WebComponent {
6757  controller: web_webview.WebviewController = new web_webview.WebviewController();
6758
6759  build() {
6760    Column() {
6761      Button('getOrigins')
6762        .onClick(() => {
6763          try {
6764            web_webview.WebStorage.getOrigins()
6765              .then(origins => {
6766                for (let i = 0; i < origins.length; i++) {
6767                  console.log('origin: ' + origins[i].origin);
6768                  console.log('usage: ' + origins[i].usage);
6769                  console.log('quota: ' + origins[i].quota);
6770                }
6771              })
6772              .catch((e : business_error.BusinessError) => {
6773                console.log('error: ' + JSON.stringify(e));
6774              })
6775          } catch (error) {
6776            let e: business_error.BusinessError = error as business_error.BusinessError;
6777            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6778          }
6779
6780        })
6781      Web({ src: $rawfile('index.html'), controller: this.controller })
6782        .databaseAccess(true)
6783    }
6784  }
6785}
6786```
6787
6788加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
6789
6790### getOriginQuota
6791
6792static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void
6793
6794使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
6795
6796**系统能力:** SystemCapability.Web.Webview.Core
6797
6798**参数:**
6799
6800| 参数名   | 类型                  | 必填 | 说明               |
6801| -------- | --------------------- | ---- | ------------------ |
6802| origin   | string                | 是   | 指定源的字符串索引 |
6803| callback | AsyncCallback\<number> | 是   | 指定源的存储配额   |
6804
6805**错误码:**
6806
6807以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6808
6809| 错误码ID | 错误信息                                               |
6810| -------- | ------------------------------------------------------ |
6811| 17100011 | Invalid origin.                             |
6812
6813**示例:**
6814
6815```ts
6816// xxx.ets
6817import web_webview from '@ohos.web.webview';
6818import business_error from '@ohos.base';
6819
6820@Entry
6821@Component
6822struct WebComponent {
6823  controller: web_webview.WebviewController = new web_webview.WebviewController();
6824  origin: string = "resource://rawfile/";
6825
6826  build() {
6827    Column() {
6828      Button('getOriginQuota')
6829        .onClick(() => {
6830          try {
6831            web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
6832              if (error) {
6833                let e: business_error.BusinessError = error as business_error.BusinessError;
6834                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6835                return;
6836              }
6837              console.log('quota: ' + quota);
6838            })
6839          } catch (error) {
6840            let e: business_error.BusinessError = error as business_error.BusinessError;
6841            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6842          }
6843
6844        })
6845      Web({ src: $rawfile('index.html'), controller: this.controller })
6846        .databaseAccess(true)
6847    }
6848  }
6849}
6850```
6851
6852加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
6853
6854### getOriginQuota
6855
6856static getOriginQuota(origin: string): Promise\<number>
6857
6858以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
6859
6860**系统能力:** SystemCapability.Web.Webview.Core
6861
6862**参数:**
6863
6864| 参数名 | 类型   | 必填 | 说明               |
6865| ------ | ------ | ---- | ------------------ |
6866| origin | string | 是   | 指定源的字符串索引 |
6867
6868**返回值:**
6869
6870| 类型            | 说明                                    |
6871| --------------- | --------------------------------------- |
6872| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
6873
6874**错误码:**
6875
6876以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6877
6878| 错误码ID | 错误信息                                               |
6879| -------- | ------------------------------------------------------ |
6880| 17100011 | Invalid origin.                             |
6881
6882**示例:**
6883
6884```ts
6885// xxx.ets
6886import web_webview from '@ohos.web.webview';
6887import business_error from '@ohos.base';
6888
6889@Entry
6890@Component
6891struct WebComponent {
6892  controller: web_webview.WebviewController = new web_webview.WebviewController();
6893  origin: string = "resource://rawfile/";
6894
6895  build() {
6896    Column() {
6897      Button('getOriginQuota')
6898        .onClick(() => {
6899          try {
6900            web_webview.WebStorage.getOriginQuota(this.origin)
6901              .then(quota => {
6902                console.log('quota: ' + quota);
6903              })
6904              .catch((e : business_error.BusinessError) => {
6905                console.log('error: ' + JSON.stringify(e));
6906              })
6907          } catch (error) {
6908            let e: business_error.BusinessError = error as business_error.BusinessError;
6909            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6910          }
6911
6912        })
6913      Web({ src: $rawfile('index.html'), controller: this.controller })
6914        .databaseAccess(true)
6915    }
6916  }
6917}
6918```
6919
6920加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
6921
6922### getOriginUsage
6923
6924static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void
6925
6926以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
6927
6928**系统能力:** SystemCapability.Web.Webview.Core
6929
6930**参数:**
6931
6932| 参数名   | 类型                  | 必填 | 说明               |
6933| -------- | --------------------- | ---- | ------------------ |
6934| origin   | string                | 是   | 指定源的字符串索引 |
6935| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
6936
6937**错误码:**
6938
6939以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6940
6941| 错误码ID | 错误信息                                               |
6942| -------- | ------------------------------------------------------ |
6943| 17100011 | Invalid origin.                             |
6944
6945**示例:**
6946
6947```ts
6948// xxx.ets
6949import web_webview from '@ohos.web.webview';
6950import business_error from '@ohos.base';
6951
6952@Entry
6953@Component
6954struct WebComponent {
6955  controller: web_webview.WebviewController = new web_webview.WebviewController();
6956  origin: string = "resource://rawfile/";
6957
6958  build() {
6959    Column() {
6960      Button('getOriginUsage')
6961        .onClick(() => {
6962          try {
6963            web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
6964              if (error) {
6965                let e: business_error.BusinessError = error as business_error.BusinessError;
6966                console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6967                return;
6968              }
6969              console.log('usage: ' + usage);
6970            })
6971          } catch (error) {
6972            let e: business_error.BusinessError = error as business_error.BusinessError;
6973            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
6974          }
6975
6976        })
6977      Web({ src: $rawfile('index.html'), controller: this.controller })
6978        .databaseAccess(true)
6979    }
6980  }
6981}
6982```
6983
6984加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
6985
6986### getOriginUsage
6987
6988static getOriginUsage(origin: string): Promise\<number>
6989
6990以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
6991
6992**系统能力:** SystemCapability.Web.Webview.Core
6993
6994**参数:**
6995
6996| 参数名 | 类型   | 必填 | 说明               |
6997| ------ | ------ | ---- | ------------------ |
6998| origin | string | 是   | 指定源的字符串索引 |
6999
7000**返回值:**
7001
7002| 类型            | 说明                                  |
7003| --------------- | ------------------------------------- |
7004| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
7005
7006**错误码:**
7007
7008以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7009
7010| 错误码ID | 错误信息                                              |
7011| -------- | ----------------------------------------------------- |
7012| 17100011 | Invalid origin.                            |
7013
7014**示例:**
7015
7016```ts
7017// xxx.ets
7018import web_webview from '@ohos.web.webview';
7019import business_error from '@ohos.base';
7020
7021@Entry
7022@Component
7023struct WebComponent {
7024  controller: web_webview.WebviewController = new web_webview.WebviewController();
7025  origin: string = "resource://rawfile/";
7026
7027  build() {
7028    Column() {
7029      Button('getOriginUsage')
7030        .onClick(() => {
7031          try {
7032            web_webview.WebStorage.getOriginUsage(this.origin)
7033              .then(usage => {
7034                console.log('usage: ' + usage);
7035              })
7036              .catch((e : business_error.BusinessError) => {
7037                console.log('error: ' + JSON.stringify(e));
7038              })
7039          } catch (error) {
7040            let e: business_error.BusinessError = error as business_error.BusinessError;
7041            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7042          }
7043
7044        })
7045      Web({ src: $rawfile('index.html'), controller: this.controller })
7046        .databaseAccess(true)
7047    }
7048  }
7049}
7050```
7051
7052加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
7053
7054### deleteAllData
7055
7056static deleteAllData(incognito?: boolean): void
7057
7058清除Web SQL数据库当前使用的所有存储。
7059
7060**系统能力:** SystemCapability.Web.Webview.Core
7061
7062**参数:**
7063
7064| 参数名 | 类型   | 必填 | 说明               |
7065| ------ | ------ | ---- | ------------------ |
7066| incognito<sup>11+</sup>    | boolean | 否   | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 |
7067
7068**示例:**
7069
7070```ts
7071// xxx.ets
7072import web_webview from '@ohos.web.webview';
7073import business_error from '@ohos.base';
7074
7075@Entry
7076@Component
7077struct WebComponent {
7078  controller: web_webview.WebviewController = new web_webview.WebviewController();
7079
7080  build() {
7081    Column() {
7082      Button('deleteAllData')
7083        .onClick(() => {
7084          try {
7085            web_webview.WebStorage.deleteAllData();
7086          } catch (error) {
7087            let e: business_error.BusinessError = error as business_error.BusinessError;
7088            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7089          }
7090        })
7091      Web({ src: $rawfile('index.html'), controller: this.controller })
7092        .databaseAccess(true)
7093    }
7094  }
7095}
7096```
7097
7098加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
7099
7100## WebDataBase
7101
7102web组件数据库管理对象。
7103
7104> **说明:**
7105>
7106> 目前调用WebDataBase下的方法,都需要先加载Web组件。
7107
7108### getHttpAuthCredentials
7109
7110static getHttpAuthCredentials(host: string, realm: string): Array\<string>
7111
7112检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
7113
7114**系统能力:** SystemCapability.Web.Webview.Core
7115
7116**参数:**
7117
7118| 参数名 | 类型   | 必填 | 说明                         |
7119| ------ | ------ | ---- | ---------------------------- |
7120| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
7121| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
7122
7123**返回值:**
7124
7125| 类型  | 说明                                         |
7126| ----- | -------------------------------------------- |
7127| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
7128
7129**示例:**
7130
7131```ts
7132// xxx.ets
7133import web_webview from '@ohos.web.webview';
7134import business_error from '@ohos.base';
7135
7136@Entry
7137@Component
7138struct WebComponent {
7139  controller: web_webview.WebviewController = new web_webview.WebviewController();
7140  host: string = "www.spincast.org";
7141  realm: string = "protected example";
7142  username_password: string[] = [];
7143
7144  build() {
7145    Column() {
7146      Button('getHttpAuthCredentials')
7147        .onClick(() => {
7148          try {
7149            this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
7150            console.log('num: ' + this.username_password.length);
7151          } catch (error) {
7152            let e: business_error.BusinessError = error as business_error.BusinessError;
7153            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7154          }
7155        })
7156      Web({ src: 'www.example.com', controller: this.controller })
7157    }
7158  }
7159}
7160```
7161
7162### saveHttpAuthCredentials
7163
7164static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
7165
7166保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
7167
7168**系统能力:** SystemCapability.Web.Webview.Core
7169
7170**参数:**
7171
7172| 参数名   | 类型   | 必填 | 说明                         |
7173| -------- | ------ | ---- | ---------------------------- |
7174| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
7175| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
7176| username | string | 是   | 用户名。                     |
7177| password | string | 是   | 密码。                       |
7178
7179**示例:**
7180
7181```ts
7182// xxx.ets
7183import web_webview from '@ohos.web.webview';
7184import business_error from '@ohos.base';
7185
7186@Entry
7187@Component
7188struct WebComponent {
7189  controller: web_webview.WebviewController = new web_webview.WebviewController();
7190  host: string = "www.spincast.org";
7191  realm: string = "protected example";
7192
7193  build() {
7194    Column() {
7195      Button('saveHttpAuthCredentials')
7196        .onClick(() => {
7197          try {
7198            web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
7199          } catch (error) {
7200            let e: business_error.BusinessError = error as business_error.BusinessError;
7201            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7202          }
7203        })
7204      Web({ src: 'www.example.com', controller: this.controller })
7205    }
7206  }
7207}
7208```
7209
7210### existHttpAuthCredentials
7211
7212static existHttpAuthCredentials(): boolean
7213
7214判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
7215
7216**系统能力:** SystemCapability.Web.Webview.Core
7217
7218**返回值:**
7219
7220| 类型    | 说明                                                         |
7221| ------- | ------------------------------------------------------------ |
7222| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
7223
7224**示例:**
7225
7226```ts
7227// xxx.ets
7228import web_webview from '@ohos.web.webview';
7229import business_error from '@ohos.base';
7230
7231@Entry
7232@Component
7233struct WebComponent {
7234  controller: web_webview.WebviewController = new web_webview.WebviewController();
7235
7236  build() {
7237    Column() {
7238      Button('existHttpAuthCredentials')
7239        .onClick(() => {
7240          try {
7241            let result = web_webview.WebDataBase.existHttpAuthCredentials();
7242          } catch (error) {
7243            let e: business_error.BusinessError = error as business_error.BusinessError;
7244            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7245          }
7246        })
7247      Web({ src: 'www.example.com', controller: this.controller })
7248    }
7249  }
7250}
7251```
7252
7253### deleteHttpAuthCredentials
7254
7255static deleteHttpAuthCredentials(): void
7256
7257清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
7258
7259**系统能力:** SystemCapability.Web.Webview.Core
7260
7261**示例:**
7262
7263```ts
7264// xxx.ets
7265import web_webview from '@ohos.web.webview';
7266import business_error from '@ohos.base';
7267
7268@Entry
7269@Component
7270struct WebComponent {
7271  controller: web_webview.WebviewController = new web_webview.WebviewController();
7272
7273  build() {
7274    Column() {
7275      Button('deleteHttpAuthCredentials')
7276        .onClick(() => {
7277          try {
7278            web_webview.WebDataBase.deleteHttpAuthCredentials();
7279          } catch (error) {
7280            let e: business_error.BusinessError = error as business_error.BusinessError;
7281            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7282          }
7283        })
7284      Web({ src: 'www.example.com', controller: this.controller })
7285    }
7286  }
7287}
7288```
7289
7290## GeolocationPermissions
7291
7292web组件地理位置权限管理对象。
7293
7294> **说明:**
7295>
7296> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
7297
7298### 需要权限
7299
7300访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。
7301
7302### allowGeolocation
7303
7304static allowGeolocation(origin: string, incognito?: boolean): void
7305
7306允许指定来源使用地理位置接口。
7307
7308**系统能力:** SystemCapability.Web.Webview.Core
7309
7310**参数:**
7311
7312| 参数名 | 类型   | 必填 | 说明               |
7313| ------ | ------ | ---- | ------------------ |
7314| origin | string | 是   |指定源的字符串索引 |
7315| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 |
7316
7317**错误码:**
7318
7319以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7320
7321| 错误码ID | 错误信息                                               |
7322| -------- | ------------------------------------------------------ |
7323| 17100011 | Invalid origin.                             |
7324
7325**示例:**
7326
7327```ts
7328// xxx.ets
7329import web_webview from '@ohos.web.webview';
7330import business_error from '@ohos.base';
7331
7332@Entry
7333@Component
7334struct WebComponent {
7335  controller: web_webview.WebviewController = new web_webview.WebviewController();
7336  origin: string = "file:///";
7337
7338  build() {
7339    Column() {
7340      Button('allowGeolocation')
7341        .onClick(() => {
7342          try {
7343            web_webview.GeolocationPermissions.allowGeolocation(this.origin);
7344          } catch (error) {
7345            let e: business_error.BusinessError = error as business_error.BusinessError;
7346            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7347          }
7348        })
7349      Web({ src: 'www.example.com', controller: this.controller })
7350    }
7351  }
7352}
7353```
7354
7355### deleteGeolocation
7356
7357static deleteGeolocation(origin: string, incognito?: boolean): void
7358
7359清除指定来源的地理位置权限状态。
7360
7361**系统能力:** SystemCapability.Web.Webview.Core
7362
7363**参数:**
7364
7365| 参数名 | 类型   | 必填 | 说明               |
7366| ------ | ------ | ---- | ------------------ |
7367| origin | string | 是   | 指定源的字符串索引 |
7368| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 |
7369
7370**错误码:**
7371
7372以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7373
7374| 错误码ID | 错误信息                                               |
7375| -------- | ------------------------------------------------------ |
7376| 17100011 | Invalid origin.                             |
7377
7378**示例:**
7379
7380```ts
7381// xxx.ets
7382import web_webview from '@ohos.web.webview';
7383import business_error from '@ohos.base';
7384
7385@Entry
7386@Component
7387struct WebComponent {
7388  controller: web_webview.WebviewController = new web_webview.WebviewController();
7389  origin: string = "file:///";
7390
7391  build() {
7392    Column() {
7393      Button('deleteGeolocation')
7394        .onClick(() => {
7395          try {
7396            web_webview.GeolocationPermissions.deleteGeolocation(this.origin);
7397          } catch (error) {
7398            let e: business_error.BusinessError = error as business_error.BusinessError;
7399            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7400          }
7401        })
7402      Web({ src: 'www.example.com', controller: this.controller })
7403    }
7404  }
7405}
7406```
7407
7408### getAccessibleGeolocation
7409
7410static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void
7411
7412以回调方式异步获取指定源的地理位置权限状态。
7413
7414**系统能力:** SystemCapability.Web.Webview.Core
7415
7416**参数:**
7417
7418| 参数名   | 类型                   | 必填 | 说明                                                         |
7419| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
7420| origin   | string                 | 是   | 指定源的字符串索引                                           |
7421| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
7422| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 |
7423
7424**错误码:**
7425
7426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7427
7428| 错误码ID | 错误信息                                               |
7429| -------- | ------------------------------------------------------ |
7430| 17100011 | Invalid origin.                             |
7431
7432**示例:**
7433
7434```ts
7435// xxx.ets
7436import web_webview from '@ohos.web.webview';
7437import business_error from '@ohos.base';
7438
7439@Entry
7440@Component
7441struct WebComponent {
7442  controller: web_webview.WebviewController = new web_webview.WebviewController();
7443  origin: string = "file:///";
7444
7445  build() {
7446    Column() {
7447      Button('getAccessibleGeolocation')
7448        .onClick(() => {
7449          try {
7450            web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
7451              if (error) {
7452                let e: business_error.BusinessError = error as business_error.BusinessError;
7453                console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${e.code},  Message: ${e.message}`);
7454                return;
7455              }
7456              console.log('getAccessibleGeolocationAsync result: ' + result);
7457            });
7458          } catch (error) {
7459            let e: business_error.BusinessError = error as business_error.BusinessError;
7460            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7461          }
7462        })
7463      Web({ src: 'www.example.com', controller: this.controller })
7464    }
7465  }
7466}
7467```
7468
7469### getAccessibleGeolocation
7470
7471static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean>
7472
7473以Promise方式异步获取指定源的地理位置权限状态。
7474
7475**系统能力:** SystemCapability.Web.Webview.Core
7476
7477**参数:**
7478
7479| 参数名 | 类型 | 必填 | 说明             |
7480| ------ | -------- | ---- | -------------------- |
7481| origin | string   | 是   | 指定源的字符串索引。 |
7482| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 |
7483
7484**返回值:**
7485
7486| 类型             | 说明                                                         |
7487| ---------------- | ------------------------------------------------------------ |
7488| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
7489
7490**错误码:**
7491
7492以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7493
7494| 错误码ID | 错误信息                                               |
7495| -------- | ------------------------------------------------------ |
7496| 17100011 | Invalid origin.                             |
7497
7498**示例:**
7499
7500```ts
7501// xxx.ets
7502import web_webview from '@ohos.web.webview';
7503import business_error from '@ohos.base';
7504
7505@Entry
7506@Component
7507struct WebComponent {
7508  controller: web_webview.WebviewController = new web_webview.WebviewController();
7509  origin: string = "file:///";
7510
7511  build() {
7512    Column() {
7513      Button('getAccessibleGeolocation')
7514        .onClick(() => {
7515          try {
7516            web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
7517              .then(result => {
7518                console.log('getAccessibleGeolocationPromise result: ' + result);
7519              }).catch((error : business_error.BusinessError) => {
7520              console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
7521            });
7522          } catch (error) {
7523            let e: business_error.BusinessError = error as business_error.BusinessError;
7524            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7525          }
7526        })
7527      Web({ src: 'www.example.com', controller: this.controller })
7528    }
7529  }
7530}
7531```
7532
7533### getStoredGeolocation
7534
7535static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void
7536
7537以回调方式异步获取已存储地理位置权限状态的所有源信息。
7538
7539**系统能力:** SystemCapability.Web.Webview.Core
7540
7541**参数:**
7542
7543| 参数名   | 类型                         | 必填 | 说明                                     |
7544| -------- | ---------------------------- | ---- | ---------------------------------------- |
7545| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
7546| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 |
7547
7548**示例:**
7549
7550```ts
7551// xxx.ets
7552import web_webview from '@ohos.web.webview';
7553import business_error from '@ohos.base';
7554
7555@Entry
7556@Component
7557struct WebComponent {
7558  controller: web_webview.WebviewController = new web_webview.WebviewController();
7559
7560  build() {
7561    Column() {
7562      Button('getStoredGeolocation')
7563        .onClick(() => {
7564          try {
7565            web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
7566              if (error) {
7567                let e: business_error.BusinessError = error as business_error.BusinessError;
7568                console.error(`getStoredGeolocationAsync error, ErrorCode: ${e.code},  Message: ${e.message}`);
7569                return;
7570              }
7571              let origins_str: string = origins.join();
7572              console.log('getStoredGeolocationAsync origins: ' + origins_str);
7573            });
7574          } catch (error) {
7575            let e: business_error.BusinessError = error as business_error.BusinessError;
7576            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7577          }
7578        })
7579      Web({ src: 'www.example.com', controller: this.controller })
7580    }
7581  }
7582}
7583```
7584
7585### getStoredGeolocation
7586
7587static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>>
7588
7589以Promise方式异步获取已存储地理位置权限状态的所有源信息。
7590
7591**系统能力:** SystemCapability.Web.Webview.Core
7592
7593**参数:**
7594
7595| 参数名   | 类型                         | 必填 | 说明                                     |
7596| -------- | ---------------------------- | ---- | ---------------------------------------- |
7597| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 |
7598
7599**返回值:**
7600
7601| 类型                   | 说明                                                      |
7602| ---------------------- | --------------------------------------------------------- |
7603| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
7604
7605**示例:**
7606
7607```ts
7608// xxx.ets
7609import web_webview from '@ohos.web.webview';
7610import business_error from '@ohos.base';
7611
7612@Entry
7613@Component
7614struct WebComponent {
7615  controller: web_webview.WebviewController = new web_webview.WebviewController();
7616
7617  build() {
7618    Column() {
7619      Button('getStoredGeolocation')
7620        .onClick(() => {
7621          try {
7622            web_webview.GeolocationPermissions.getStoredGeolocation()
7623              .then(origins => {
7624                let origins_str: string = origins.join();
7625                console.log('getStoredGeolocationPromise origins: ' + origins_str);
7626              }).catch((error : business_error.BusinessError) => {
7627              console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
7628            });
7629          } catch (error) {
7630            let e: business_error.BusinessError = error as business_error.BusinessError;
7631            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7632          }
7633        })
7634      Web({ src: 'www.example.com', controller: this.controller })
7635    }
7636  }
7637}
7638```
7639
7640### deleteAllGeolocation
7641
7642static deleteAllGeolocation(incognito?: boolean): void
7643
7644清除所有来源的地理位置权限状态。
7645
7646**系统能力:** SystemCapability.Web.Webview.Core
7647
7648**参数:**
7649
7650| 参数名   | 类型                         | 必填 | 说明                                     |
7651| -------- | ---------------------------- | ---- | ---------------------------------------- |
7652| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 |
7653
7654**示例:**
7655
7656```ts
7657// xxx.ets
7658import web_webview from '@ohos.web.webview';
7659import business_error from '@ohos.base';
7660
7661@Entry
7662@Component
7663struct WebComponent {
7664  controller: web_webview.WebviewController = new web_webview.WebviewController();
7665
7666  build() {
7667    Column() {
7668      Button('deleteAllGeolocation')
7669        .onClick(() => {
7670          try {
7671            web_webview.GeolocationPermissions.deleteAllGeolocation();
7672          } catch (error) {
7673            let e: business_error.BusinessError = error as business_error.BusinessError;
7674            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
7675          }
7676        })
7677      Web({ src: 'www.example.com', controller: this.controller })
7678    }
7679  }
7680}
7681```
7682## WebHeader
7683
7684Web组件返回的请求/响应头对象。
7685
7686**系统能力:** SystemCapability.Web.Webview.Core
7687
7688| 名称        | 类型   | 可读 | 可写 |说明                 |
7689| ----------- | ------ | -----|------|------------------- |
7690| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
7691| headerValue | string | 是 | 是 | 请求/响应头的value。 |
7692
7693## WebHitTestType
7694
7695[getHitTest](#gethittest)接口用于指示游标节点。
7696
7697**系统能力:** SystemCapability.Web.Webview.Core
7698
7699| 名称          | 值 | 说明                                      |
7700| ------------- | -- |----------------------------------------- |
7701| EditText      | 0 |可编辑的区域。                            |
7702| Email         | 1 |电子邮件地址。                            |
7703| HttpAnchor    | 2 |超链接,其中src为http。                     |
7704| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 |
7705| Img           | 4 |HTML::img标签。                           |
7706| Map           | 5 |地理地址。                                |
7707| Phone         | 6 |电话号码。                                |
7708| Unknown       | 7 |未知内容。                                |
7709
7710## SecurityLevel<sup>11+</sup>
7711
7712当前网页的安全级别。
7713
7714**系统能力:** SystemCapability.Web.Webview.Core
7715
7716| 名称          | 值 | 说明                                      |
7717| ------------- | -- |----------------------------------------- |
7718| NONE          | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。|
7719| SECURE        | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。|
7720| WARNING       | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。|
7721| DANGEROUS     | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 |
7722
7723##  HitTestValue
7724
7725提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。
7726
7727**系统能力:** SystemCapability.Web.Webview.Core
7728
7729| 名称 | 类型 | 可读 | 可写 | 说明|
7730| ---- | ---- | ---- | ---- |---- |
7731| type | [WebHitTestType](#webhittesttype) | 是 | 否 | 当前被点击区域的元素类型。|
7732| extra | string        | 是 | 否 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
7733
7734## WebMessage
7735
7736用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
7737
7738**系统能力:** SystemCapability.Web.Webview.Core
7739
7740| 类型       | 说明                                     |
7741| -------- | -------------------------------------- |
7742| string   | 字符串类型数据。 |
7743| ArrayBuffer   | 二进制类型数据。 |
7744
7745## JsMessageType<sup>10+</sup>
7746
7747[runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
7748
7749**系统能力:** SystemCapability.Web.Webview.Core
7750
7751| 名称         | 值 | 说明                              |
7752| ------------ | -- |--------------------------------- |
7753| NOT_SUPPORT  | 0 |不支持的数据类型。|
7754| STRING       | 1 |字符串类型。|
7755| NUMBER       | 2 |数值类型。|
7756| BOOLEAN      | 3 |布尔类型。|
7757| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
7758| ARRAY        | 5 |数组类型|
7759
7760## WebMessageType<sup>10+</sup>
7761
7762[webMessagePort](#webmessageport)接口所支持的数据类型。
7763
7764**系统能力:** SystemCapability.Web.Webview.Core
7765
7766| 名称         | 值 | 说明                            |
7767| ------------ | -- |------------------------------- |
7768| NOT_SUPPORT  | 0 |不支持的数据类型。|
7769| STRING       | 1 |字符串类型。|
7770| NUMBER       | 2 |数值类型。|
7771| BOOLEAN      | 3 |布尔类型。|
7772| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
7773| ARRAY        | 5 |数组类型。|
7774| ERROR        | 6 |错误类型。|
7775
7776## JsMessageExt<sup>10+</sup>
7777
7778[runJavaScirptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
7779
7780### getType<sup>10+</sup>
7781
7782getType(): JsMessageType
7783
7784获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7785
7786**系统能力:** SystemCapability.Web.Webview.Core
7787
7788**返回值:**
7789
7790| 类型           | 说明                                                      |
7791| --------------| --------------------------------------------------------- |
7792| [JsMessageType](#jsmessagetype10) | [runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
7793
7794### getString<sup>10+</sup>
7795
7796getString(): string
7797
7798获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7799
7800**系统能力:** SystemCapability.Web.Webview.Core
7801
7802**返回值:**
7803
7804| 类型           | 说明          |
7805| --------------| ------------- |
7806| string | 返回字符串类型的数据。 |
7807
7808**错误码:**
7809
7810以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7811
7812| 错误码ID | 错误信息                              |
7813| -------- | ------------------------------------- |
7814| 17100014 | The type does not match with the value of the result. |
7815
7816### getNumber<sup>10+</sup>
7817
7818getNumber(): number
7819
7820获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7821
7822**系统能力:** SystemCapability.Web.Webview.Core
7823
7824**返回值:**
7825
7826| 类型           | 说明          |
7827| --------------| ------------- |
7828| number | 返回数值类型的数据。 |
7829
7830**错误码:**
7831
7832以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7833
7834| 错误码ID | 错误信息                              |
7835| -------- | ------------------------------------- |
7836| 17100014 | The type does not match with the value of the result. |
7837
7838### getBoolean<sup>10+</sup>
7839
7840getBoolean(): boolean
7841
7842获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7843
7844**系统能力:** SystemCapability.Web.Webview.Core
7845
7846**返回值:**
7847
7848| 类型           | 说明          |
7849| --------------| ------------- |
7850| boolean | 返回布尔类型的数据。 |
7851
7852**错误码:**
7853
7854以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7855
7856| 错误码ID | 错误信息                              |
7857| -------- | ------------------------------------- |
7858| 17100014 | The type does not match with the value of the result. |
7859
7860### getArrayBuffer<sup>10+</sup>
7861
7862getArrayBuffer(): ArrayBuffer
7863
7864获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7865
7866**系统能力:** SystemCapability.Web.Webview.Core
7867
7868**返回值:**
7869
7870| 类型           | 说明          |
7871| --------------| ------------- |
7872| ArrayBuffer | 返回原始二进制数据。 |
7873
7874**错误码:**
7875
7876以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7877
7878| 错误码ID | 错误信息                              |
7879| -------- | ------------------------------------- |
7880| 17100014 | The type does not match with the value of the result. |
7881
7882### getArray<sup>10+</sup>
7883
7884getArray(): Array\<string | number | boolean\>
7885
7886获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
7887
7888**系统能力:** SystemCapability.Web.Webview.Core
7889
7890**返回值:**
7891
7892| 类型           | 说明          |
7893| --------------| ------------- |
7894| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
7895
7896**错误码:**
7897
7898以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7899
7900| 错误码ID | 错误信息                              |
7901| -------- | ------------------------------------- |
7902| 17100014 | The type does not match with the value of the result. |
7903
7904## WebMessageExt<sup>10+</sup>
7905
7906[webMessagePort](#webmessageport)接口接收、发送的的数据对象。
7907
7908### getType<sup>10+</sup>
7909
7910getType(): WebMessageType
7911
7912获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
7913
7914**系统能力:** SystemCapability.Web.Webview.Core
7915
7916**返回值:**
7917
7918| 类型           | 说明                                                      |
7919| --------------| --------------------------------------------------------- |
7920| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
7921
7922### getString<sup>10+</sup>
7923
7924getString(): string
7925
7926获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
7927
7928**系统能力:** SystemCapability.Web.Webview.Core
7929
7930**返回值:**
7931
7932| 类型           | 说明          |
7933| --------------| ------------- |
7934| string | 返回字符串类型的数据。 |
7935
7936**错误码:**
7937
7938以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7939
7940| 错误码ID | 错误信息                              |
7941| -------- | ------------------------------------- |
7942| 17100014 | The type does not match with the value of the web message. |
7943
7944### getNumber<sup>10+</sup>
7945
7946getNumber(): number
7947
7948获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
7949
7950**系统能力:** SystemCapability.Web.Webview.Core
7951
7952**返回值:**
7953
7954| 类型           | 说明          |
7955| --------------| ------------- |
7956| number | 返回数值类型的数据。 |
7957
7958**错误码:**
7959
7960以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7961
7962| 错误码ID | 错误信息                              |
7963| -------- | ------------------------------------- |
7964| 17100014 | The type does not match with the value of the web message. |
7965
7966### getBoolean<sup>10+</sup>
7967
7968getBoolean(): boolean
7969
7970获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
7971
7972**系统能力:** SystemCapability.Web.Webview.Core
7973
7974**返回值:**
7975
7976| 类型           | 说明          |
7977| --------------| ------------- |
7978| boolean | 返回布尔类型的数据。 |
7979
7980**错误码:**
7981
7982以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7983
7984| 错误码ID | 错误信息                              |
7985| -------- | ------------------------------------- |
7986| 17100014 | The type does not match with the value of the web message. |
7987
7988### getArrayBuffer<sup>10+</sup>
7989
7990getArrayBuffer(): ArrayBuffer
7991
7992获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
7993
7994**系统能力:** SystemCapability.Web.Webview.Core
7995
7996**返回值:**
7997
7998| 类型           | 说明          |
7999| --------------| ------------- |
8000| ArrayBuffer | 返回原始二进制数据。 |
8001
8002**错误码:**
8003
8004以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8005
8006| 错误码ID | 错误信息                              |
8007| -------- | ------------------------------------- |
8008| 17100014 | The type does not match with the value of the web message. |
8009
8010### getArray<sup>10+</sup>
8011
8012getArray(): Array\<string | number | boolean\>
8013
8014获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8015
8016**系统能力:** SystemCapability.Web.Webview.Core
8017
8018**返回值:**
8019
8020| 类型           | 说明          |
8021| --------------| ------------- |
8022| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
8023
8024**错误码:**
8025
8026以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8027
8028| 错误码ID | 错误信息                              |
8029| -------- | ------------------------------------- |
8030| 17100014 | The type does not match with the value of the web message. |
8031
8032### getError<sup>10+</sup>
8033
8034getError(): Error
8035
8036获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8037
8038**系统能力:** SystemCapability.Web.Webview.Core
8039
8040**返回值:**
8041
8042| 类型           | 说明          |
8043| --------------| ------------- |
8044| Error | 返回错误对象类型的数据。 |
8045
8046**错误码:**
8047
8048以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8049
8050| 错误码ID | 错误信息                              |
8051| -------- | ------------------------------------- |
8052| 17100014 | The type does not match with the value of the web message. |
8053
8054### setType<sup>10+</sup>
8055
8056setType(type: WebMessageType): void
8057
8058设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8059
8060**系统能力:** SystemCapability.Web.Webview.Core
8061
8062**参数:**
8063
8064| 参数名 | 类型   | 必填 | 说明                   |
8065| ------ | ------ | ---- | ---------------------- |
8066| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
8067
8068**错误码:**
8069
8070| 错误码ID | 错误信息                              |
8071| -------- | ------------------------------------- |
8072| 17100014 | The type does not match with the value of the web message. |
8073
8074### setString<sup>10+</sup>
8075
8076setString(message: string): void
8077
8078设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8079
8080**系统能力:** SystemCapability.Web.Webview.Core
8081
8082**参数:**
8083
8084| 参数名 | 类型   | 必填 | 说明                   |
8085| ------ | ------ | ---- | -------------------- |
8086| message  | string | 是   | 字符串类型数据。 |
8087
8088**错误码:**
8089
8090| 错误码ID | 错误信息                              |
8091| -------- | ------------------------------------- |
8092| 17100014 | The type does not match with the value of the web message. |
8093
8094### setNumber<sup>10+</sup>
8095
8096setNumber(message: number): void
8097
8098设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8099
8100**系统能力:** SystemCapability.Web.Webview.Core
8101
8102**参数:**
8103
8104| 参数名 | 类型   | 必填 | 说明                   |
8105| ------ | ------ | ---- | -------------------- |
8106| message  | number | 是   | 数值类型数据。 |
8107
8108**错误码:**
8109
8110| 错误码ID | 错误信息                              |
8111| -------- | ------------------------------------- |
8112| 17100014 | The type does not match with the value of the web message. |
8113
8114### setBoolean<sup>10+</sup>
8115
8116setBoolean(message: boolean): void
8117
8118设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8119
8120**系统能力:** SystemCapability.Web.Webview.Core
8121
8122**参数:**
8123
8124| 参数名 | 类型   | 必填 | 说明                   |
8125| ------ | ------ | ---- | -------------------- |
8126| message  | boolean | 是   | 布尔类型数据。 |
8127
8128**错误码:**
8129
8130| 错误码ID | 错误信息                              |
8131| -------- | ------------------------------------- |
8132| 17100014 | The type does not match with the value of the web message. |
8133
8134### setArrayBuffer<sup>10+</sup>
8135
8136setArrayBuffer(message: ArrayBuffer): void
8137
8138设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8139
8140**系统能力:** SystemCapability.Web.Webview.Core
8141
8142**参数:**
8143
8144| 参数名 | 类型   | 必填 | 说明                   |
8145| ------ | ------ | ---- | -------------------- |
8146| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
8147
8148**错误码:**
8149
8150以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8151
8152| 错误码ID | 错误信息                              |
8153| -------- | ------------------------------------- |
8154| 17100014 | The type does not match with the value of the web message. |
8155
8156### setArray<sup>10+</sup>
8157
8158setArray(message: Array\<string | number | boolean\>): void
8159
8160设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8161
8162**系统能力:** SystemCapability.Web.Webview.Core
8163
8164**参数:**
8165
8166| 参数名 | 类型   | 必填 | 说明                   |
8167| ------ | ------ | ---- | -------------------- |
8168| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
8169
8170**错误码:**
8171
8172以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8173
8174| 错误码ID | 错误信息                              |
8175| -------- | ------------------------------------- |
8176| 17100014 | The type does not match with the value of the web message. |
8177
8178### setError<sup>10+</sup>
8179
8180setError(message: Error): void
8181
8182设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
8183
8184**系统能力:** SystemCapability.Web.Webview.Core
8185
8186**参数:**
8187
8188| 参数名 | 类型   | 必填 | 说明                   |
8189| ------ | ------ | ---- | -------------------- |
8190| message  | Error | 是   | 错误对象类型数据。 |
8191
8192**错误码:**
8193
8194以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8195
8196| 错误码ID | 错误信息                              |
8197| -------- | ------------------------------------- |
8198| 17100014 | The type does not match with the value of the web message. |
8199
8200## WebStorageOrigin
8201
8202提供Web SQL数据库的使用信息。
8203
8204**系统能力:** SystemCapability.Web.Webview.Core
8205
8206| 名称   | 类型   | 可读 | 可写 | 说明 |
8207| ------ | ------ | ---- | ---- | ---- |
8208| origin | string | 是  | 否 | 指定源的字符串索引。 |
8209| usage  | number | 是  | 否 | 指定源的存储量。     |
8210| quota  | number | 是  | 否 | 指定源的存储配额。   |
8211
8212## BackForwardList
8213
8214当前Webview的历史信息列表。
8215
8216**系统能力:** SystemCapability.Web.Webview.Core
8217
8218| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
8219| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
8220| currentIndex | number | 是   | 否   | 当前在页面历史列表中的索引。                                 |
8221| size         | number | 是   | 否   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
8222
8223### getItemAtIndex
8224
8225getItemAtIndex(index: number): HistoryItem
8226
8227获取历史列表中指定索引的历史记录项信息。
8228
8229**系统能力:** SystemCapability.Web.Webview.Core
8230
8231**参数:**
8232
8233| 参数名 | 类型   | 必填 | 说明                   |
8234| ------ | ------ | ---- | ---------------------- |
8235| index  | number | 是   | 指定历史列表中的索引。 |
8236
8237**返回值:**
8238
8239| 类型                        | 说明         |
8240| --------------------------- | ------------ |
8241| [HistoryItem](#historyitem) | 历史记录项。 |
8242
8243**示例:**
8244
8245```ts
8246// xxx.ets
8247import web_webview from '@ohos.web.webview';
8248import image from "@ohos.multimedia.image";
8249import business_error from '@ohos.base';
8250
8251@Entry
8252@Component
8253struct WebComponent {
8254  controller: web_webview.WebviewController = new web_webview.WebviewController();
8255  @State icon: image.PixelMap | undefined = undefined;
8256
8257  build() {
8258    Column() {
8259      Button('getBackForwardEntries')
8260        .onClick(() => {
8261          try {
8262            let list = this.controller.getBackForwardEntries();
8263            let historyItem = list.getItemAtIndex(list.currentIndex);
8264            console.log("HistoryItem: " + JSON.stringify(historyItem));
8265            this.icon = historyItem.icon;
8266          } catch (error) {
8267            let e: business_error.BusinessError = error as business_error.BusinessError;
8268            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8269          }
8270        })
8271      Web({ src: 'www.example.com', controller: this.controller })
8272    }
8273  }
8274}
8275```
8276
8277## HistoryItem
8278
8279页面历史记录项。
8280
8281**系统能力:** SystemCapability.Web.Webview.Core
8282
8283| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
8284| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
8285| icon          | [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
8286| historyUrl    | string                                 | 是   | 否   | 历史记录项的url地址。        |
8287| historyRawUrl | string                                 | 是   | 否   | 历史记录项的原始url地址。    |
8288| title         | string                                 | 是   | 否   | 历史记录项的标题。           |
8289
8290## WebCustomScheme
8291
8292自定义协议配置。
8293
8294**系统能力:** SystemCapability.Web.Webview.Core
8295
8296| 名称           | 类型       | 可读 | 可写 | 说明                         |
8297| -------------- | --------- | ---- | ---- | ---------------------------- |
8298| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-'。        |
8299| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。    |
8300| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。           |
8301
8302## SecureDnsMode<sup>10+</sup>
8303
8304Web组件使用HTTPDNS的模式。
8305
8306**系统能力:** SystemCapability.Web.Webview.Core
8307
8308| 名称          | 值 | 说明                                      |
8309| ------------- | -- |----------------------------------------- |
8310| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
8311| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
8312| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|
8313
8314## WebDownloadState<sup>11+</sup>
8315
8316下载任务的状态。
8317
8318**系统能力:** SystemCapability.Web.Webview.Core
8319
8320| 名称          | 值 | 说明                                      |
8321| ------------- | -- |----------------------------------------- |
8322| IN_PROGRESS                                  | 0 |下载任务正在进行中。|
8323| COMPLETED                                 | 1 |下载任务已经完成。|
8324| CANCELED                          | 2 |下载任务已经被取消。|
8325| INTERRUPTED                          | 3 |下载任务被中断。|
8326| PENDING                          | 4 |下载任务等待开始。|
8327| PAUSED                          | 5 |下载任务已经被暂停。|
8328| UNKNOWN                          | 6 |下载任务未知状态。|
8329
8330## WebDownloadErrorCode<sup>11+</sup>
8331
8332下载任务的错误码。
8333
8334**系统能力:** SystemCapability.Web.Webview.Core
8335
8336| 名称          | 值 | 说明                                      |
8337| ------------- | -- |----------------------------------------- |
8338| ERROR_UNKNOWN                                  | 0 |未知的错误。|
8339| FILE_FAILED | 1 |  常规文件操作失败。|
8340| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。|
8341| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。|
8342| FILE_NAME_TOO_LONG | 5 | 文件名字过长。|
8343| FILE_TOO_LARGE | 6 | 文件太大。|
8344| FILE_TRANSIENT_ERROR | 10 |  出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。|
8345| FILE_BLOCKED | 11 |  由于某些本地策略,文件被阻止访问。|
8346| FILE_TOO_SHORT | 13 |  当尝试恢复下载时,发现文件不够长,可能该文件已不存在。|
8347| FILE_HASH_MISMATCH | 14 |  哈希不匹配。|
8348| FILE_SAME_AS_SOURCE | 15 |  文件已存在。|
8349| NETWORK_FAILED | 20 |  一般网络错误。|
8350| NETWORK_TIMEOUT | 21 | 网络超时。|
8351| NETWORK_DISCONNECTED | 22 | 网络断开连接。|
8352| NETWORK_SERVER_DOWN | 23 |  服务器关闭。|
8353| NETWORK_INVALID_REQUEST | 24 |  无效的网络请求,可能重定向到不支持的方案或无效的URL。|
8354| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。|
8355| SERVER_NO_RANGE | 31 |  服务器不支持范围请求。|
8356| SERVER_BAD_CONTENT | 33 |   服务器没有请求的数据。|
8357| SERVER_UNAUTHORIZED | 34 |  服务器不允许下载该文件。|
8358| SERVER_CERT_PROBLEM | 35 |  服务器证书错误。|
8359| SERVER_FORBIDDEN | 36 |  服务器访问被禁止。|
8360| SERVER_UNREACHABLE | 37 |  无法访问服务器。|
8361| SERVER_CONTENT_LENGTH_MISMATCH | 38 |  接收到的数据与内容长度不匹配。|
8362| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。|
8363| USER_CANCELED | 40 | 用户取消了下载。|
8364| USER_SHUTDOWN | 41 | 用户关闭了应用。|
8365| CRASH | 50 | 应用发生了崩溃。|
8366
8367## WebDownloadItem<sup>11+</sup>
8368
8369 表示下载任务,您可以使用此对象来操作相应的下载任务。
8370
8371> **说明:**
8372>
8373> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
8374
8375### getGuid<sup>11+</sup>
8376
8377getGuid(): string
8378
8379获取下载任务的唯一ID。
8380
8381**系统能力:** SystemCapability.Web.Webview.Core
8382
8383**返回值:**
8384
8385| 类型   | 说明                      |
8386| ------ | ------------------------- |
8387| string | 下载任务的唯一ID。 |
8388
8389**示例:**
8390
8391```ts
8392// xxx.ets
8393import web_webview from '@ohos.web.webview'
8394import business_error from '@ohos.base'
8395
8396@Entry
8397@Component
8398struct WebComponent {
8399  controller: web_webview.WebviewController = new web_webview.WebviewController();
8400  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8401
8402  build() {
8403    Column() {
8404      Button('setDownloadDelegate')
8405        .onClick(() => {
8406          try {
8407            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8408              console.log("will start a download.");
8409              // 传入一个下载路径,并开始下载。
8410              webDownloadItem.start("xxxxxxxx");
8411            })
8412            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8413              console.log("download update guid: " + webDownloadItem.getGuid());
8414            })
8415            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8416              console.log("download failed guid: " + webDownloadItem.getGuid());
8417            })
8418            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8419              console.log("download finish guid: " + webDownloadItem.getGuid());
8420            })
8421            this.controller.setDownloadDelegate(this.delegate);
8422          } catch (error) {
8423            let e:business_error.BusinessError = error as business_error.BusinessError;
8424            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8425          }
8426        })
8427      Button('startDownload')
8428        .onClick(() => {
8429          try {
8430            this.controller.startDownload('www.example.com');
8431          } catch (error) {
8432            let e:business_error.BusinessError = error as business_error.BusinessError;
8433            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8434          }
8435        })
8436      Web({ src: 'www.example.com', controller: this.controller })
8437    }
8438  }
8439}
8440```
8441
8442### getCurrentSpeed<sup>11+</sup>
8443
8444getCurrentSpeed(): number
8445
8446获取下载的速度,单位:字节每秒。
8447
8448**系统能力:** SystemCapability.Web.Webview.Core
8449
8450**返回值:**
8451
8452| 类型   | 说明                      |
8453| ------ | ------------------------- |
8454| number | 下载的速度(字节每秒)。 |
8455
8456**示例:**
8457
8458```ts
8459// xxx.ets
8460import web_webview from '@ohos.web.webview'
8461import business_error from '@ohos.base'
8462
8463@Entry
8464@Component
8465struct WebComponent {
8466  controller: web_webview.WebviewController = new web_webview.WebviewController();
8467  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8468
8469  build() {
8470    Column() {
8471      Button('setDownloadDelegate')
8472        .onClick(() => {
8473          try {
8474            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8475              console.log("will start a download.");
8476              // 传入一个下载路径,并开始下载。
8477              webDownloadItem.start("xxxxxxxx");
8478            })
8479            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8480              console.log("download update current speed: " + webDownloadItem.getCurrentSpeed());
8481            })
8482            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8483              console.log("download failed guid: " + webDownloadItem.getGuid());
8484            })
8485            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8486              console.log("download finish guid: " + webDownloadItem.getGuid());
8487            })
8488            this.controller.setDownloadDelegate(this.delegate);
8489          } catch (error) {
8490            let e:business_error.BusinessError = error as business_error.BusinessError;
8491            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8492          }
8493        })
8494      Button('startDownload')
8495        .onClick(() => {
8496          try {
8497            this.controller.startDownload('www.example.com');
8498          } catch (error) {
8499            let e:business_error.BusinessError = error as business_error.BusinessError;
8500            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8501          }
8502        })
8503      Web({ src: 'www.example.com', controller: this.controller })
8504    }
8505  }
8506}
8507```
8508
8509### getPercentComplete<sup>11+</sup>
8510
8511getPercentComplete(): number
8512
8513获取下载的进度,100代表下载完成。
8514
8515**系统能力:** SystemCapability.Web.Webview.Core
8516
8517**返回值:**
8518
8519| 类型   | 说明                      |
8520| ------ | ------------------------- |
8521| number | 下载完成的进度,100代表下载完成。 |
8522
8523**示例:**
8524
8525```ts
8526// xxx.ets
8527import web_webview from '@ohos.web.webview'
8528import business_error from '@ohos.base'
8529
8530@Entry
8531@Component
8532struct WebComponent {
8533  controller: web_webview.WebviewController = new web_webview.WebviewController();
8534  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8535
8536  build() {
8537    Column() {
8538      Button('setDownloadDelegate')
8539        .onClick(() => {
8540          try {
8541            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8542              console.log("will start a download.");
8543              // 传入一个下载路径,并开始下载。
8544              webDownloadItem.start("xxxxxxxx");
8545            })
8546            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8547              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
8548            })
8549            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8550              console.log("download failed guid: " + webDownloadItem.getGuid());
8551            })
8552            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8553              console.log("download finish guid: " + webDownloadItem.getGuid());
8554            })
8555            this.controller.setDownloadDelegate(this.delegate);
8556          } catch (error) {
8557            let e:business_error.BusinessError = error as business_error.BusinessError;
8558            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8559          }
8560        })
8561      Button('startDownload')
8562        .onClick(() => {
8563          try {
8564            this.controller.startDownload('www.example.com');
8565          } catch (error) {
8566            let e:business_error.BusinessError = error as business_error.BusinessError;
8567            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8568          }
8569        })
8570      Web({ src: 'www.example.com', controller: this.controller })
8571    }
8572  }
8573}
8574```
8575
8576### getTotalBytes<sup>11+</sup>
8577
8578getTotalBytes(): number
8579
8580获取待下载文件的总长度。
8581
8582**系统能力:** SystemCapability.Web.Webview.Core
8583
8584**返回值:**
8585
8586| 类型   | 说明                      |
8587| ------ | ------------------------- |
8588| number | 待下载文件的总长度。 |
8589
8590**示例:**
8591
8592```ts
8593// xxx.ets
8594import web_webview from '@ohos.web.webview'
8595import business_error from '@ohos.base'
8596
8597@Entry
8598@Component
8599struct WebComponent {
8600  controller: web_webview.WebviewController = new web_webview.WebviewController();
8601  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8602
8603  build() {
8604    Column() {
8605      Button('setDownloadDelegate')
8606        .onClick(() => {
8607          try {
8608            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8609              console.log("will start a download.");
8610              // 传入一个下载路径,并开始下载。
8611              webDownloadItem.start("xxxxxxxx");
8612            })
8613            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8614              console.log("download update total bytes: " + webDownloadItem.getTotalBytes());
8615            })
8616            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8617              console.log("download failed guid: " + webDownloadItem.getGuid());
8618            })
8619            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8620              console.log("download finish guid: " + webDownloadItem.getGuid());
8621            })
8622            this.controller.setDownloadDelegate(this.delegate);
8623          } catch (error) {
8624            let e:business_error.BusinessError = error as business_error.BusinessError;
8625            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8626          }
8627        })
8628      Button('startDownload')
8629        .onClick(() => {
8630          try {
8631            this.controller.startDownload('www.example.com');
8632          } catch (error) {
8633            let e:business_error.BusinessError = error as business_error.BusinessError;
8634            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8635          }
8636        })
8637      Web({ src: 'www.example.com', controller: this.controller })
8638    }
8639  }
8640}
8641```
8642
8643### getState<sup>11+</sup>
8644
8645getState(): WebDownloadState
8646
8647获取下载的状态。
8648
8649**系统能力:** SystemCapability.Web.Webview.Core
8650
8651**返回值:**
8652
8653| 类型   | 说明                      |
8654| ------ | ------------------------- |
8655| [WebDownloadState](#webdownloadstate11) | 下载的状态。 |
8656
8657**示例:**
8658
8659```ts
8660// xxx.ets
8661import web_webview from '@ohos.web.webview'
8662import business_error from '@ohos.base'
8663
8664@Entry
8665@Component
8666struct WebComponent {
8667  controller: web_webview.WebviewController = new web_webview.WebviewController();
8668  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8669
8670  build() {
8671    Column() {
8672      Button('setDownloadDelegate')
8673        .onClick(() => {
8674          try {
8675            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8676              console.log("will start a download.");
8677              // 传入一个下载路径,并开始下载。
8678              webDownloadItem.start("xxxxxxxx");
8679            })
8680            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8681              console.log("download update download state: " + webDownloadItem.getState());
8682            })
8683            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8684              console.log("download failed guid: " + webDownloadItem.getGuid());
8685            })
8686            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8687              console.log("download finish guid: " + webDownloadItem.getGuid());
8688            })
8689            this.controller.setDownloadDelegate(this.delegate);
8690          } catch (error) {
8691            let e:business_error.BusinessError = error as business_error.BusinessError;
8692            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8693          }
8694        })
8695      Button('startDownload')
8696        .onClick(() => {
8697          try {
8698            this.controller.startDownload('www.example.com');
8699          } catch (error) {
8700            let e:business_error.BusinessError = error as business_error.BusinessError;
8701            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8702          }
8703        })
8704      Web({ src: 'www.example.com', controller: this.controller })
8705    }
8706  }
8707}
8708```
8709
8710### getLastErrorCode<sup>11+</sup>
8711
8712getLastErrorCode(): WebDownloadErrorCode
8713
8714获取下载的错误码。
8715
8716**系统能力:** SystemCapability.Web.Webview.Core
8717
8718**返回值:**
8719
8720| 类型   | 说明                      |
8721| ------ | ------------------------- |
8722| number | 下载发生错误的时候的错误码。 |
8723
8724**示例:**
8725
8726```ts
8727// xxx.ets
8728import web_webview from '@ohos.web.webview'
8729import business_error from '@ohos.base'
8730
8731@Entry
8732@Component
8733struct WebComponent {
8734  controller: web_webview.WebviewController = new web_webview.WebviewController();
8735  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8736
8737  build() {
8738    Column() {
8739      Button('setDownloadDelegate')
8740        .onClick(() => {
8741          try {
8742            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8743              console.log("will start a download.");
8744              // 传入一个下载路径,并开始下载。
8745              webDownloadItem.start("xxxxxxxx");
8746            })
8747            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8748              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
8749            })
8750            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8751              console.log("download failed guid: " + webDownloadItem.getGuid());
8752              console.log("download error code: " + webDownloadItem.getLastErrorCode());
8753            })
8754            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8755              console.log("download finish guid: " + webDownloadItem.getGuid());
8756            })
8757            this.controller.setDownloadDelegate(this.delegate);
8758          } catch (error) {
8759            let e:business_error.BusinessError = error as business_error.BusinessError;
8760            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8761          }
8762        })
8763      Button('startDownload')
8764        .onClick(() => {
8765          try {
8766            this.controller.startDownload('www.example.com');
8767          } catch (error) {
8768            let e:business_error.BusinessError = error as business_error.BusinessError;
8769            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8770          }
8771        })
8772      Web({ src: 'www.example.com', controller: this.controller })
8773    }
8774  }
8775}
8776```
8777
8778### getMethod<sup>11+</sup>
8779
8780getMethod(): string
8781
8782获取下载任务的请求方式。
8783
8784**系统能力:** SystemCapability.Web.Webview.Core
8785
8786**返回值:**
8787
8788| 类型   | 说明                      |
8789| ------ | ------------------------- |
8790| string | 下载的请求方式。 |
8791
8792**示例:**
8793
8794```ts
8795// xxx.ets
8796import web_webview from '@ohos.web.webview'
8797import business_error from '@ohos.base'
8798
8799@Entry
8800@Component
8801struct WebComponent {
8802  controller: web_webview.WebviewController = new web_webview.WebviewController();
8803  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8804
8805  build() {
8806    Column() {
8807      Button('setDownloadDelegate')
8808        .onClick(() => {
8809          try {
8810            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8811              console.log("will start a download, method:" + webDownloadItem.getMethod());
8812              // 传入一个下载路径,并开始下载。
8813              webDownloadItem.start("xxxxxxxx");
8814            })
8815            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8816              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
8817            })
8818            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8819              console.log("download failed guid: " + webDownloadItem.getGuid());
8820            })
8821            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8822              console.log("download finish guid: " + webDownloadItem.getGuid());
8823            })
8824            this.controller.setDownloadDelegate(this.delegate);
8825          } catch (error) {
8826            let e:business_error.BusinessError = error as business_error.BusinessError;
8827            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8828          }
8829        })
8830      Button('startDownload')
8831        .onClick(() => {
8832          try {
8833            this.controller.startDownload('www.example.com');
8834          } catch (error) {
8835            let e:business_error.BusinessError = error as business_error.BusinessError;
8836            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8837          }
8838        })
8839      Web({ src: 'www.example.com', controller: this.controller })
8840    }
8841  }
8842}
8843```
8844
8845### getMimeType<sup>11+</sup>
8846
8847getMimeType(): string
8848
8849获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
8850
8851**系统能力:** SystemCapability.Web.Webview.Core
8852
8853**返回值:**
8854
8855| 类型   | 说明                      |
8856| ------ | ------------------------- |
8857| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
8858
8859**示例:**
8860
8861```ts
8862// xxx.ets
8863import web_webview from '@ohos.web.webview'
8864import business_error from '@ohos.base'
8865
8866@Entry
8867@Component
8868struct WebComponent {
8869  controller: web_webview.WebviewController = new web_webview.WebviewController();
8870  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8871
8872  build() {
8873    Column() {
8874      Button('setDownloadDelegate')
8875        .onClick(() => {
8876          try {
8877            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8878              console.log("will start a download, mime type:" + webDownloadItem.getMimeType());
8879              // 传入一个下载路径,并开始下载。
8880              webDownloadItem.start("xxxxxxxx");
8881            })
8882            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8883              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
8884            })
8885            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8886              console.log("download failed guid: " + webDownloadItem.getGuid());
8887            })
8888            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8889              console.log("download finish guid: " + webDownloadItem.getGuid());
8890            })
8891            this.controller.setDownloadDelegate(this.delegate);
8892          } catch (error) {
8893            let e:business_error.BusinessError = error as business_error.BusinessError;
8894            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8895          }
8896        })
8897      Button('startDownload')
8898        .onClick(() => {
8899          try {
8900            this.controller.startDownload('www.example.com');
8901          } catch (error) {
8902            let e:business_error.BusinessError = error as business_error.BusinessError;
8903            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8904          }
8905        })
8906      Web({ src: 'www.example.com', controller: this.controller })
8907    }
8908  }
8909}
8910```
8911
8912### getUrl<sup>11+</sup>
8913
8914getUrl(): string
8915
8916获取下载的请求地址。
8917
8918**系统能力:** SystemCapability.Web.Webview.Core
8919
8920**返回值:**
8921
8922| 类型   | 说明                      |
8923| ------ | ------------------------- |
8924| string | 下载的请求地址。 |
8925
8926**示例:**
8927
8928```ts
8929// xxx.ets
8930import web_webview from '@ohos.web.webview'
8931import business_error from '@ohos.base'
8932
8933@Entry
8934@Component
8935struct WebComponent {
8936  controller: web_webview.WebviewController = new web_webview.WebviewController();
8937  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
8938
8939  build() {
8940    Column() {
8941      Button('setDownloadDelegate')
8942        .onClick(() => {
8943          try {
8944            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
8945              console.log("will start a download, url:" + webDownloadItem.getUrl());
8946              // 传入一个下载路径,并开始下载。
8947              webDownloadItem.start("xxxxxxxx");
8948            })
8949            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
8950              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
8951            })
8952            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
8953              console.log("download failed guid: " + webDownloadItem.getGuid());
8954            })
8955            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
8956              console.log("download finish guid: " + webDownloadItem.getGuid());
8957            })
8958            this.controller.setDownloadDelegate(this.delegate);
8959          } catch (error) {
8960            let e:business_error.BusinessError = error as business_error.BusinessError;
8961            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8962          }
8963        })
8964      Button('startDownload')
8965        .onClick(() => {
8966          try {
8967            this.controller.startDownload('www.example.com');
8968          } catch (error) {
8969            let e:business_error.BusinessError = error as business_error.BusinessError;
8970            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
8971          }
8972        })
8973      Web({ src: 'www.example.com', controller: this.controller })
8974    }
8975  }
8976}
8977```
8978
8979### getSuggestedFileName<sup>11+</sup>
8980
8981getSuggestedFileName(): string
8982
8983获取下载的建议文件名。
8984
8985**系统能力:** SystemCapability.Web.Webview.Core
8986
8987**返回值:**
8988
8989| 类型   | 说明                      |
8990| ------ | ------------------------- |
8991| string | 下载的建议文件名。 |
8992
8993**示例:**
8994
8995```ts
8996// xxx.ets
8997import web_webview from '@ohos.web.webview'
8998import business_error from '@ohos.base'
8999
9000@Entry
9001@Component
9002struct WebComponent {
9003  controller: web_webview.WebviewController = new web_webview.WebviewController();
9004  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9005
9006  build() {
9007    Column() {
9008      Button('setDownloadDelegate')
9009        .onClick(() => {
9010          try {
9011            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9012              console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
9013              // 传入一个下载路径,并开始下载。
9014              webDownloadItem.start("xxxxxxxx");
9015            })
9016            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9017              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9018            })
9019            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9020              console.log("download failed guid: " + webDownloadItem.getGuid());
9021            })
9022            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9023              console.log("download finish guid: " + webDownloadItem.getGuid());
9024            })
9025            this.controller.setDownloadDelegate(this.delegate);
9026          } catch (error) {
9027            let e:business_error.BusinessError = error as business_error.BusinessError;
9028            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9029          }
9030        })
9031      Button('startDownload')
9032        .onClick(() => {
9033          try {
9034            this.controller.startDownload('www.example.com');
9035          } catch (error) {
9036            let e:business_error.BusinessError = error as business_error.BusinessError;
9037            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9038          }
9039        })
9040      Web({ src: 'www.example.com', controller: this.controller })
9041    }
9042  }
9043}
9044```
9045
9046### getReceivedBytes<sup>11+</sup>
9047
9048getReceivedBytes(): number
9049
9050获取已经接收的字节数。
9051
9052**系统能力:** SystemCapability.Web.Webview.Core
9053
9054**返回值:**
9055
9056| 类型   | 说明                      |
9057| ------ | ------------------------- |
9058| number | 已经接收的字节数。 |
9059
9060**示例:**
9061
9062```ts
9063// xxx.ets
9064import web_webview from '@ohos.web.webview'
9065import business_error from '@ohos.base'
9066
9067@Entry
9068@Component
9069struct WebComponent {
9070  controller: web_webview.WebviewController = new web_webview.WebviewController();
9071  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9072
9073  build() {
9074    Column() {
9075      Button('setDownloadDelegate')
9076        .onClick(() => {
9077          try {
9078            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9079              console.log("will start a download.");
9080              // 传入一个下载路径,并开始下载。
9081              webDownloadItem.start("xxxxxxxx");
9082            })
9083            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9084              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9085              console.log("download update received bytes: " + webDownloadItem.getReceivedBytes());
9086            })
9087            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9088              console.log("download failed guid: " + webDownloadItem.getGuid());
9089            })
9090            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9091              console.log("download finish guid: " + webDownloadItem.getGuid());
9092            })
9093            this.controller.setDownloadDelegate(this.delegate);
9094          } catch (error) {
9095            let e:business_error.BusinessError = error as business_error.BusinessError;
9096            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9097          }
9098        })
9099      Button('startDownload')
9100        .onClick(() => {
9101          try {
9102            this.controller.startDownload('www.example.com');
9103          } catch (error) {
9104            let e:business_error.BusinessError = error as business_error.BusinessError;
9105            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9106          }
9107        })
9108      Web({ src: 'www.example.com', controller: this.controller })
9109    }
9110  }
9111}
9112```
9113
9114### getFullPath<sup>11+</sup>
9115
9116getFullPath(): string
9117
9118获取下载文件在磁盘上的全路径。
9119
9120**系统能力:** SystemCapability.Web.Webview.Core
9121
9122**返回值:**
9123
9124| 类型   | 说明                      |
9125| ------ | ------------------------- |
9126| string | 下载文件在磁盘上的全路径。 |
9127
9128**示例:**
9129
9130```ts
9131// xxx.ets
9132import web_webview from '@ohos.web.webview'
9133import business_error from '@ohos.base'
9134
9135@Entry
9136@Component
9137struct WebComponent {
9138  controller: web_webview.WebviewController = new web_webview.WebviewController();
9139  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9140
9141  build() {
9142    Column() {
9143      Button('setDownloadDelegate')
9144        .onClick(() => {
9145          try {
9146            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9147              console.log("will start a download.");
9148              // 传入一个下载路径,并开始下载。
9149              webDownloadItem.start("xxxxxxxx");
9150            })
9151            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9152              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9153            })
9154            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9155              console.log("download failed guid: " + webDownloadItem.getGuid());
9156            })
9157            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9158              console.log("download finish guid: " + webDownloadItem.getGuid());
9159              console.log("download finish full path: " + webDownloadItem.getFullPath());
9160            })
9161            this.controller.setDownloadDelegate(this.delegate);
9162          } catch (error) {
9163            let e:business_error.BusinessError = error as business_error.BusinessError;
9164            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9165          }
9166        })
9167      Button('startDownload')
9168        .onClick(() => {
9169          try {
9170            this.controller.startDownload('www.example.com');
9171          } catch (error) {
9172            let e:business_error.BusinessError = error as business_error.BusinessError;
9173            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9174          }
9175        })
9176      Web({ src: 'www.example.com', controller: this.controller })
9177    }
9178  }
9179}
9180```
9181
9182### serialize<sup>11+</sup>
9183
9184serialize(): Uint8Array
9185
9186将失败的下载序列化到一个字节数组。
9187
9188**系统能力:** SystemCapability.Web.Webview.Core
9189
9190**返回值:**
9191
9192| 类型   | 说明                      |
9193| ------ | ------------------------- |
9194| Uint8Array | 失败的下载序列化后的字节数组。 |
9195
9196**示例:**
9197
9198```ts
9199// xxx.ets
9200import web_webview from '@ohos.web.webview'
9201import business_error from '@ohos.base'
9202
9203@Entry
9204@Component
9205struct WebComponent {
9206  controller: web_webview.WebviewController = new web_webview.WebviewController();
9207  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9208  failedData: Uint8Array = new Uint8Array();
9209
9210  build() {
9211    Column() {
9212      Button('setDownloadDelegate')
9213        .onClick(() => {
9214          try {
9215            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9216              console.log("will start a download.");
9217              // 传入一个下载路径,并开始下载。
9218              webDownloadItem.start("xxxxxxxx");
9219            })
9220            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9221              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9222            })
9223            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9224              console.log("download failed guid: " + webDownloadItem.getGuid());
9225              // 序列化失败的下载到一个字节数组。
9226              this.failedData = webDownloadItem.serialize();
9227            })
9228            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9229              console.log("download finish guid: " + webDownloadItem.getGuid());
9230            })
9231            this.controller.setDownloadDelegate(this.delegate);
9232          } catch (error) {
9233            let e:business_error.BusinessError = error as business_error.BusinessError;
9234            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9235          }
9236        })
9237      Button('startDownload')
9238        .onClick(() => {
9239          try {
9240            this.controller.startDownload('www.example.com');
9241          } catch (error) {
9242            let e:business_error.BusinessError = error as business_error.BusinessError;
9243            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9244          }
9245        })
9246      Web({ src: 'www.example.com', controller: this.controller })
9247    }
9248  }
9249}
9250```
9251
9252### deserialize<sup>11+</sup>
9253
9254static deserialize(serializedData: Uint8Array): WebDownloadItem
9255
9256将序列化后的字节数组反序列化为一个WebDownloadItem对象。
9257
9258**系统能力:** SystemCapability.Web.Webview.Core
9259
9260**参数:**
9261
9262| 参数名              | 类型    | 必填   |  说明 |
9263| ------------------ | ------- | ---- | ------------- |
9264| serializedData | Uint8Array | 是   | 序列化后的下载。|
9265
9266**返回值:**
9267
9268| 类型   | 说明                      |
9269| ------ | ------------------------- |
9270| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 |
9271
9272**示例:**
9273
9274```ts
9275// xxx.ets
9276import web_webview from '@ohos.web.webview'
9277import business_error from '@ohos.base'
9278
9279@Entry
9280@Component
9281struct WebComponent {
9282  controller: web_webview.WebviewController = new web_webview.WebviewController();
9283  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9284  failedData: Uint8Array = new Uint8Array();
9285
9286  build() {
9287    Column() {
9288      Button('setDownloadDelegate')
9289        .onClick(() => {
9290          try {
9291            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9292              console.log("will start a download.");
9293              // 传入一个下载路径,并开始下载。
9294              webDownloadItem.start("xxxxxxxx");
9295            })
9296            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9297              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9298            })
9299            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9300              console.log("download failed guid: " + webDownloadItem.getGuid());
9301              // 序列化失败的下载到一个字节数组。
9302              this.failedData = webDownloadItem.serialize();
9303            })
9304            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9305              console.log("download finish guid: " + webDownloadItem.getGuid());
9306            })
9307            this.controller.setDownloadDelegate(this.delegate);
9308          } catch (error) {
9309            let e:business_error.BusinessError = error as business_error.BusinessError;
9310            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9311          }
9312        })
9313      Button('startDownload')
9314        .onClick(() => {
9315          try {
9316            this.controller.startDownload('www.example.com');
9317          } catch (error) {
9318            let e:business_error.BusinessError = error as business_error.BusinessError;
9319            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9320          }
9321        })
9322      Button('resumeDownload')
9323        .onClick(() => {
9324          try {
9325            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9326          } catch (error) {
9327            let e:business_error.BusinessError = error as business_error.BusinessError;
9328            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9329          }
9330        })
9331      Web({ src: 'www.example.com', controller: this.controller })
9332    }
9333  }
9334}
9335```
9336
9337### start<sup>11+</sup>
9338
9339start(downloadPath: string): void
9340
9341开始一个下载,参数为下载文件的磁盘存储路径(包含文件名)。该接口需要在WebDownloadDelegate的onBeforeDownload回调中使用,如果在WebDownloadDelegate的onBeforeDownload中不调用start('xxx')该下载任务会一直处于PENDING状态。
9342
9343**系统能力:** SystemCapability.Web.Webview.Core
9344
9345**参数:**
9346
9347| 参数名 | 类型                   | 必填 | 说明                             |
9348| ------ | ---------------------- | ---- | ------------------------------|
9349| downloadPath   | string     | 是  | 下载文件的路径(包含文件名)。|
9350
9351**示例:**
9352
9353```ts
9354// xxx.ets
9355import web_webview from '@ohos.web.webview'
9356import business_error from '@ohos.base'
9357
9358@Entry
9359@Component
9360struct WebComponent {
9361  controller: web_webview.WebviewController = new web_webview.WebviewController();
9362  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9363  failedData: Uint8Array = new Uint8Array();
9364
9365  build() {
9366    Column() {
9367      Button('setDownloadDelegate')
9368        .onClick(() => {
9369          try {
9370            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9371              console.log("will start a download.");
9372              // 传入一个下载路径,并开始下载。
9373              webDownloadItem.start("xxxxxxxx");
9374            })
9375            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9376              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9377            })
9378            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9379              console.log("download failed guid: " + webDownloadItem.getGuid());
9380              // 序列化失败的下载到一个字节数组。
9381              this.failedData = webDownloadItem.serialize();
9382            })
9383            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9384              console.log("download finish guid: " + webDownloadItem.getGuid());
9385            })
9386            this.controller.setDownloadDelegate(this.delegate);
9387          } catch (error) {
9388            let e:business_error.BusinessError = error as business_error.BusinessError;
9389            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9390          }
9391        })
9392      Button('startDownload')
9393        .onClick(() => {
9394          try {
9395            this.controller.startDownload('www.example.com');
9396          } catch (error) {
9397            let e:business_error.BusinessError = error as business_error.BusinessError;
9398            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9399          }
9400        })
9401      Button('resumeDownload')
9402        .onClick(() => {
9403          try {
9404            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9405          } catch (error) {
9406            let e:business_error.BusinessError = error as business_error.BusinessError;
9407            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9408          }
9409        })
9410      Web({ src: 'www.example.com', controller: this.controller })
9411    }
9412  }
9413}
9414```
9415
9416### cancel<sup>11+</sup>
9417
9418cancel(): void
9419
9420取消一个正在下载的下载任务。
9421
9422**系统能力:** SystemCapability.Web.Webview.Core
9423
9424**示例:**
9425
9426```ts
9427// xxx.ets
9428import web_webview from '@ohos.web.webview'
9429import business_error from '@ohos.base'
9430
9431@Entry
9432@Component
9433struct WebComponent {
9434  controller: web_webview.WebviewController = new web_webview.WebviewController();
9435  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9436  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9437  failedData: Uint8Array = new Uint8Array();
9438
9439  build() {
9440    Column() {
9441      Button('setDownloadDelegate')
9442        .onClick(() => {
9443          try {
9444            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9445              console.log("will start a download.");
9446              // 传入一个下载路径,并开始下载。
9447              webDownloadItem.start("xxxxxxxx");
9448            })
9449            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9450              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9451              this.download = webDownloadItem;
9452            })
9453            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9454              console.log("download failed guid: " + webDownloadItem.getGuid());
9455              // 序列化失败的下载到一个字节数组。
9456              this.failedData = webDownloadItem.serialize();
9457            })
9458            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9459              console.log("download finish guid: " + webDownloadItem.getGuid());
9460            })
9461            this.controller.setDownloadDelegate(this.delegate);
9462          } catch (error) {
9463            let e:business_error.BusinessError = error as business_error.BusinessError;
9464            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9465          }
9466        })
9467      Button('startDownload')
9468        .onClick(() => {
9469          try {
9470            this.controller.startDownload('www.example.com');
9471          } catch (error) {
9472            let e:business_error.BusinessError = error as business_error.BusinessError;
9473            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9474          }
9475        })
9476      Button('resumeDownload')
9477        .onClick(() => {
9478          try {
9479            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9480          } catch (error) {
9481            let e:business_error.BusinessError = error as business_error.BusinessError;
9482            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9483          }
9484        })
9485      Button('cancel')
9486        .onClick(() => {
9487          try {
9488            this.download.cancel();
9489          } catch (error) {
9490            let e:business_error.BusinessError = error as business_error.BusinessError;
9491            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9492          }
9493        })
9494      Web({ src: 'www.example.com', controller: this.controller })
9495    }
9496  }
9497}
9498```
9499
9500### pause<sup>11+</sup>
9501
9502pause(): void
9503
9504暂停一个正在下载的下载任务。
9505
9506**系统能力:** SystemCapability.Web.Webview.Core
9507
9508**错误码:**
9509
9510以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
9511
9512| 错误码ID  | 错误信息                                                      |
9513| -------- | ------------------------------------------------------------ |
9514| 17100019 | The download has not been started yet. |
9515
9516**示例:**
9517
9518```ts
9519// xxx.ets
9520import web_webview from '@ohos.web.webview'
9521import business_error from '@ohos.base'
9522
9523@Entry
9524@Component
9525struct WebComponent {
9526  controller: web_webview.WebviewController = new web_webview.WebviewController();
9527  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9528  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9529  failedData: Uint8Array = new Uint8Array();
9530
9531  build() {
9532    Column() {
9533      Button('setDownloadDelegate')
9534        .onClick(() => {
9535          try {
9536            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9537              console.log("will start a download.");
9538              // 传入一个下载路径,并开始下载。
9539              webDownloadItem.start("xxxxxxxx");
9540            })
9541            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9542              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9543              this.download = webDownloadItem;
9544            })
9545            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9546              console.log("download failed guid: " + webDownloadItem.getGuid());
9547              // 序列化失败的下载到一个字节数组。
9548              this.failedData = webDownloadItem.serialize();
9549            })
9550            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9551              console.log("download finish guid: " + webDownloadItem.getGuid());
9552            })
9553            this.controller.setDownloadDelegate(this.delegate);
9554          } catch (error) {
9555            let e:business_error.BusinessError = error as business_error.BusinessError;
9556            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9557          }
9558        })
9559      Button('startDownload')
9560        .onClick(() => {
9561          try {
9562            this.controller.startDownload('www.example.com');
9563          } catch (error) {
9564            let e:business_error.BusinessError = error as business_error.BusinessError;
9565            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9566          }
9567        })
9568      Button('resumeDownload')
9569        .onClick(() => {
9570          try {
9571            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9572          } catch (error) {
9573            let e:business_error.BusinessError = error as business_error.BusinessError;
9574            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9575          }
9576        })
9577      Button('cancel')
9578        .onClick(() => {
9579          try {
9580            this.download.cancel();
9581          } catch (error) {
9582            let e:business_error.BusinessError = error as business_error.BusinessError;
9583            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9584          }
9585        })
9586        Button('pause')
9587        .onClick(() => {
9588          try {
9589            this.download.pause();
9590          } catch (error) {
9591            let e:business_error.BusinessError = error as business_error.BusinessError;
9592            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9593          }
9594        })
9595      Web({ src: 'www.example.com', controller: this.controller })
9596    }
9597  }
9598}
9599```
9600
9601### resume<sup>11+</sup>
9602
9603resume(): void
9604
9605恢复一个暂停的下载任务。
9606
9607**系统能力:** SystemCapability.Web.Webview.Core
9608
9609**错误码:**
9610
9611以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md).
9612
9613| 错误码ID  | 错误信息                                                      |
9614| -------- | ------------------------------------------------------------ |
9615| 17100016 | The download is not paused. |
9616
9617**示例:**
9618
9619```ts
9620// xxx.ets
9621import web_webview from '@ohos.web.webview'
9622import business_error from '@ohos.base'
9623
9624@Entry
9625@Component
9626struct WebComponent {
9627  controller: web_webview.WebviewController = new web_webview.WebviewController();
9628  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9629  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9630  failedData: Uint8Array = new Uint8Array();
9631
9632  build() {
9633    Column() {
9634      Button('setDownloadDelegate')
9635        .onClick(() => {
9636          try {
9637            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9638              console.log("will start a download.");
9639              // 传入一个下载路径,并开始下载。
9640              webDownloadItem.start("xxxxxxxx");
9641            })
9642            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9643              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9644              this.download = webDownloadItem;
9645            })
9646            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9647              console.log("download failed guid: " + webDownloadItem.getGuid());
9648              // 序列化失败的下载到一个字节数组。
9649              this.failedData = webDownloadItem.serialize();
9650            })
9651            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9652              console.log("download finish guid: " + webDownloadItem.getGuid());
9653            })
9654            this.controller.setDownloadDelegate(this.delegate);
9655          } catch (error) {
9656            let e:business_error.BusinessError = error as business_error.BusinessError;
9657            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9658          }
9659        })
9660      Button('startDownload')
9661        .onClick(() => {
9662          try {
9663            this.controller.startDownload('www.example.com');
9664          } catch (error) {
9665            let e:business_error.BusinessError = error as business_error.BusinessError;
9666            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9667          }
9668        })
9669      Button('resumeDownload')
9670        .onClick(() => {
9671          try {
9672            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9673          } catch (error) {
9674            let e:business_error.BusinessError = error as business_error.BusinessError;
9675            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9676          }
9677        })
9678      Button('cancel')
9679        .onClick(() => {
9680          try {
9681            this.download.cancel();
9682          } catch (error) {
9683            let e:business_error.BusinessError = error as business_error.BusinessError;
9684            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9685          }
9686        })
9687      Button('pause')
9688        .onClick(() => {
9689          try {
9690            this.download.pause();
9691          } catch (error) {
9692            let e:business_error.BusinessError = error as business_error.BusinessError;
9693            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9694          }
9695        })
9696      Button('resume')
9697        .onClick(() => {
9698          try {
9699            this.download.resume();
9700          } catch (error) {
9701            let e:business_error.BusinessError = error as business_error.BusinessError;
9702            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9703          }
9704        })
9705      Web({ src: 'www.example.com', controller: this.controller })
9706    }
9707  }
9708}
9709```
9710
9711## WebDownloadDelegate<sup>11+</sup>
9712
9713 下载任务的状态会通过该类的回调接口通知给用户。
9714
9715### onBeforeDownload<sup>11+</sup>
9716
9717onBeforeDownload(callback: Callback\<WebDownloadItem>): void
9718
9719下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。
9720
9721**系统能力:** SystemCapability.Web.Webview.Core
9722
9723**示例:**
9724
9725```ts
9726// xxx.ets
9727import web_webview from '@ohos.web.webview'
9728import business_error from '@ohos.base'
9729
9730@Entry
9731@Component
9732struct WebComponent {
9733  controller: web_webview.WebviewController = new web_webview.WebviewController();
9734  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9735  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9736  failedData: Uint8Array = new Uint8Array();
9737
9738  build() {
9739    Column() {
9740      Button('setDownloadDelegate')
9741        .onClick(() => {
9742          try {
9743            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9744              console.log("will start a download.");
9745              // 传入一个下载路径,并开始下载。
9746              webDownloadItem.start("xxxxxxxx");
9747            })
9748            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9749              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9750              this.download = webDownloadItem;
9751            })
9752            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9753              console.log("download failed guid: " + webDownloadItem.getGuid());
9754              // 序列化失败的下载到一个字节数组。
9755              this.failedData = webDownloadItem.serialize();
9756            })
9757            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9758              console.log("download finish guid: " + webDownloadItem.getGuid());
9759            })
9760            this.controller.setDownloadDelegate(this.delegate);
9761          } catch (error) {
9762            let e:business_error.BusinessError = error as business_error.BusinessError;
9763            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9764          }
9765        })
9766      Button('startDownload')
9767        .onClick(() => {
9768          try {
9769            this.controller.startDownload('www.example.com');
9770          } catch (error) {
9771            let e:business_error.BusinessError = error as business_error.BusinessError;
9772            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9773          }
9774        })
9775      Button('resumeDownload')
9776        .onClick(() => {
9777          try {
9778            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9779          } catch (error) {
9780            let e:business_error.BusinessError = error as business_error.BusinessError;
9781            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9782          }
9783        })
9784      Button('cancel')
9785        .onClick(() => {
9786          try {
9787            this.download.cancel();
9788          } catch (error) {
9789            let e:business_error.BusinessError = error as business_error.BusinessError;
9790            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9791          }
9792        })
9793      Button('pause')
9794        .onClick(() => {
9795          try {
9796            this.download.pause();
9797          } catch (error) {
9798            let e:business_error.BusinessError = error as business_error.BusinessError;
9799            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9800          }
9801        })
9802      Button('resume')
9803        .onClick(() => {
9804          try {
9805            this.download.resume();
9806          } catch (error) {
9807            let e:business_error.BusinessError = error as business_error.BusinessError;
9808            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9809          }
9810        })
9811      Web({ src: 'www.example.com', controller: this.controller })
9812    }
9813  }
9814}
9815```
9816
9817### onDownloadUpdated<sup>11+</sup>
9818
9819onDownloadUpdated(callback: Callback\<WebDownloadItem>): void
9820
9821下载过程中的回调,通过该回调的参数可以了解下载进度等信息。
9822
9823**系统能力:** SystemCapability.Web.Webview.Core
9824
9825**示例:**
9826
9827```ts
9828// xxx.ets
9829import web_webview from '@ohos.web.webview'
9830import business_error from '@ohos.base'
9831
9832@Entry
9833@Component
9834struct WebComponent {
9835  controller: web_webview.WebviewController = new web_webview.WebviewController();
9836  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9837  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9838  failedData: Uint8Array = new Uint8Array();
9839
9840  build() {
9841    Column() {
9842      Button('setDownloadDelegate')
9843        .onClick(() => {
9844          try {
9845            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9846              console.log("will start a download.");
9847              // 传入一个下载路径,并开始下载。
9848              webDownloadItem.start("xxxxxxxx");
9849            })
9850            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9851              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9852              this.download = webDownloadItem;
9853            })
9854            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9855              console.log("download failed guid: " + webDownloadItem.getGuid());
9856              // 序列化失败的下载到一个字节数组。
9857              this.failedData = webDownloadItem.serialize();
9858            })
9859            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9860              console.log("download finish guid: " + webDownloadItem.getGuid());
9861            })
9862            this.controller.setDownloadDelegate(this.delegate);
9863          } catch (error) {
9864            let e:business_error.BusinessError = error as business_error.BusinessError;
9865            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9866          }
9867        })
9868      Button('startDownload')
9869        .onClick(() => {
9870          try {
9871            this.controller.startDownload('www.example.com');
9872          } catch (error) {
9873            let e:business_error.BusinessError = error as business_error.BusinessError;
9874            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9875          }
9876        })
9877      Button('resumeDownload')
9878        .onClick(() => {
9879          try {
9880            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9881          } catch (error) {
9882            let e:business_error.BusinessError = error as business_error.BusinessError;
9883            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9884          }
9885        })
9886      Button('cancel')
9887        .onClick(() => {
9888          try {
9889            this.download.cancel();
9890          } catch (error) {
9891            let e:business_error.BusinessError = error as business_error.BusinessError;
9892            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9893          }
9894        })
9895      Button('pause')
9896        .onClick(() => {
9897          try {
9898            this.download.pause();
9899          } catch (error) {
9900            let e:business_error.BusinessError = error as business_error.BusinessError;
9901            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9902          }
9903        })
9904      Button('resume')
9905        .onClick(() => {
9906          try {
9907            this.download.resume();
9908          } catch (error) {
9909            let e:business_error.BusinessError = error as business_error.BusinessError;
9910            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9911          }
9912        })
9913      Web({ src: 'www.example.com', controller: this.controller })
9914    }
9915  }
9916}
9917```
9918
9919### onDownloadFinish<sup>11+</sup>
9920
9921onDownloadFinish(callback: Callback\<WebDownloadItem>): void
9922
9923下载完成的通知。
9924
9925**系统能力:** SystemCapability.Web.Webview.Core
9926
9927**示例:**
9928
9929```ts
9930// xxx.ets
9931import web_webview from '@ohos.web.webview'
9932import business_error from '@ohos.base'
9933
9934@Entry
9935@Component
9936struct WebComponent {
9937  controller: web_webview.WebviewController = new web_webview.WebviewController();
9938  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
9939  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
9940  failedData: Uint8Array = new Uint8Array();
9941
9942  build() {
9943    Column() {
9944      Button('setDownloadDelegate')
9945        .onClick(() => {
9946          try {
9947            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
9948              console.log("will start a download.");
9949              // 传入一个下载路径,并开始下载。
9950              webDownloadItem.start("xxxxxxxx");
9951            })
9952            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
9953              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
9954              this.download = webDownloadItem;
9955            })
9956            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
9957              console.log("download failed guid: " + webDownloadItem.getGuid());
9958              // 序列化失败的下载到一个字节数组。
9959              this.failedData = webDownloadItem.serialize();
9960            })
9961            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
9962              console.log("download finish guid: " + webDownloadItem.getGuid());
9963            })
9964            this.controller.setDownloadDelegate(this.delegate);
9965          } catch (error) {
9966            let e:business_error.BusinessError = error as business_error.BusinessError;
9967            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9968          }
9969        })
9970      Button('startDownload')
9971        .onClick(() => {
9972          try {
9973            this.controller.startDownload('www.example.com');
9974          } catch (error) {
9975            let e:business_error.BusinessError = error as business_error.BusinessError;
9976            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9977          }
9978        })
9979      Button('resumeDownload')
9980        .onClick(() => {
9981          try {
9982            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
9983          } catch (error) {
9984            let e:business_error.BusinessError = error as business_error.BusinessError;
9985            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9986          }
9987        })
9988      Button('cancel')
9989        .onClick(() => {
9990          try {
9991            this.download.cancel();
9992          } catch (error) {
9993            let e:business_error.BusinessError = error as business_error.BusinessError;
9994            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
9995          }
9996        })
9997      Button('pause')
9998        .onClick(() => {
9999          try {
10000            this.download.pause();
10001          } catch (error) {
10002            let e:business_error.BusinessError = error as business_error.BusinessError;
10003            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10004          }
10005        })
10006      Button('resume')
10007        .onClick(() => {
10008          try {
10009            this.download.resume();
10010          } catch (error) {
10011            let e:business_error.BusinessError = error as business_error.BusinessError;
10012            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10013          }
10014        })
10015      Web({ src: 'www.example.com', controller: this.controller })
10016    }
10017  }
10018}
10019```
10020
10021### onDownloadFailed<sup>11+</sup>
10022
10023onDownloadFailed(callback: Callback\<WebDownloadItem>): void
10024
10025下载失败的通知。
10026
10027**系统能力:** SystemCapability.Web.Webview.Core
10028
10029**示例:**
10030
10031```ts
10032// xxx.ets
10033import web_webview from '@ohos.web.webview'
10034import business_error from '@ohos.base'
10035
10036@Entry
10037@Component
10038struct WebComponent {
10039  controller: web_webview.WebviewController = new web_webview.WebviewController();
10040  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
10041  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
10042  failedData: Uint8Array = new Uint8Array();
10043
10044  build() {
10045    Column() {
10046      Button('setDownloadDelegate')
10047        .onClick(() => {
10048          try {
10049            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
10050              console.log("will start a download.");
10051              // 传入一个下载路径,并开始下载。
10052              webDownloadItem.start("xxxxxxxx");
10053            })
10054            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
10055              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
10056              this.download = webDownloadItem;
10057            })
10058            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
10059              console.log("download failed guid: " + webDownloadItem.getGuid());
10060              // 序列化失败的下载到一个字节数组。
10061              this.failedData = webDownloadItem.serialize();
10062            })
10063            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
10064              console.log("download finish guid: " + webDownloadItem.getGuid());
10065            })
10066            this.controller.setDownloadDelegate(this.delegate);
10067          } catch (error) {
10068            let e:business_error.BusinessError = error as business_error.BusinessError;
10069            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10070          }
10071        })
10072      Button('startDownload')
10073        .onClick(() => {
10074          try {
10075            this.controller.startDownload('www.example.com');
10076          } catch (error) {
10077            let e:business_error.BusinessError = error as business_error.BusinessError;
10078            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10079          }
10080        })
10081      Button('resumeDownload')
10082        .onClick(() => {
10083          try {
10084            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
10085          } catch (error) {
10086            let e:business_error.BusinessError = error as business_error.BusinessError;
10087            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10088          }
10089        })
10090      Button('cancel')
10091        .onClick(() => {
10092          try {
10093            this.download.cancel();
10094          } catch (error) {
10095            let e:business_error.BusinessError = error as business_error.BusinessError;
10096            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10097          }
10098        })
10099      Button('pause')
10100        .onClick(() => {
10101          try {
10102            this.download.pause();
10103          } catch (error) {
10104            let e:business_error.BusinessError = error as business_error.BusinessError;
10105            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10106          }
10107        })
10108      Button('resume')
10109        .onClick(() => {
10110          try {
10111            this.download.resume();
10112          } catch (error) {
10113            let e:business_error.BusinessError = error as business_error.BusinessError;
10114            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10115          }
10116        })
10117      Web({ src: 'www.example.com', controller: this.controller })
10118    }
10119  }
10120}
10121```
10122
10123## WebDownloadManager<sup>11+</sup>
10124
10125可以通过该类提供的接口来恢复失败的下载任务。
10126
10127### setDownloadDelegate<sup>11+</sup>
10128
10129static setDownloadDelegate(delegate: WebDownloadDelegate): void
10130
10131设置用于接收从WebDownloadManager触发的下载进度的委托。
10132
10133**系统能力:** SystemCapability.Web.Webview.Core
10134
10135**参数:**
10136
10137| 参数名          | 类型    |  必填  | 说明                                            |
10138| ---------------| ------- | ---- | ------------- |
10139| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
10140
10141**示例:**
10142
10143```ts
10144// xxx.ets
10145import web_webview from '@ohos.web.webview'
10146import business_error from '@ohos.base'
10147
10148@Entry
10149@Component
10150struct WebComponent {
10151  controller: web_webview.WebviewController = new web_webview.WebviewController();
10152  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
10153  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
10154  failedData: Uint8Array = new Uint8Array();
10155
10156  build() {
10157    Column() {
10158      Button('setDownloadDelegate')
10159        .onClick(() => {
10160          try {
10161            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
10162              console.log("will start a download.");
10163              // 传入一个下载路径,并开始下载。
10164              webDownloadItem.start("xxxxxxxx");
10165            })
10166            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
10167              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
10168              this.download = webDownloadItem;
10169            })
10170            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
10171              console.log("download failed guid: " + webDownloadItem.getGuid());
10172              // 序列化失败的下载到一个字节数组。
10173              this.failedData = webDownloadItem.serialize();
10174            })
10175            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
10176              console.log("download finish guid: " + webDownloadItem.getGuid());
10177            })
10178            this.controller.setDownloadDelegate(this.delegate);
10179          } catch (error) {
10180            let e:business_error.BusinessError = error as business_error.BusinessError;
10181            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10182          }
10183        })
10184      Button('startDownload')
10185        .onClick(() => {
10186          try {
10187            this.controller.startDownload('www.example.com');
10188          } catch (error) {
10189            let e:business_error.BusinessError = error as business_error.BusinessError;
10190            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10191          }
10192        })
10193      Button('resumeDownload')
10194        .onClick(() => {
10195          try {
10196            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
10197          } catch (error) {
10198            let e:business_error.BusinessError = error as business_error.BusinessError;
10199            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10200          }
10201        })
10202      Button('cancel')
10203        .onClick(() => {
10204          try {
10205            this.download.cancel();
10206          } catch (error) {
10207            let e:business_error.BusinessError = error as business_error.BusinessError;
10208            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10209          }
10210        })
10211      Button('pause')
10212        .onClick(() => {
10213          try {
10214            this.download.pause();
10215          } catch (error) {
10216            let e:business_error.BusinessError = error as business_error.BusinessError;
10217            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10218          }
10219        })
10220      Button('resume')
10221        .onClick(() => {
10222          try {
10223            this.download.resume();
10224          } catch (error) {
10225            let e:business_error.BusinessError = error as business_error.BusinessError;
10226            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10227          }
10228        })
10229      Web({ src: 'www.example.com', controller: this.controller })
10230    }
10231  }
10232}
10233```
10234
10235### resumeDownload<sup>11+</sup>
10236
10237static resumeDownload(webDownloadItem: WebDownloadItem): void
10238
10239设置用于接收从WebDownloadManager触发的下载进度的委托。
10240
10241**系统能力:** SystemCapability.Web.Webview.Core
10242
10243**参数:**
10244
10245| 参数名          | 类型    |  必填  | 说明                                            |
10246| ---------------| ------- | ---- | ------------- |
10247| webDownloadItem      | [WebDownloadItem](#webdownloaditem11)  | 是   | 待恢复的下载任务。 |
10248
10249**错误码:**
10250
10251以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10252
10253| 错误码ID | 错误信息                              |
10254| -------- | ------------------------------------- |
10255| 17100018 | No WebDownloadDelegate has been set yet. |
10256
10257**示例:**
10258
10259```ts
10260// xxx.ets
10261import web_webview from '@ohos.web.webview'
10262import business_error from '@ohos.base'
10263
10264@Entry
10265@Component
10266struct WebComponent {
10267  controller: web_webview.WebviewController = new web_webview.WebviewController();
10268  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();
10269  download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem();
10270  failedData: Uint8Array = new Uint8Array();
10271
10272  build() {
10273    Column() {
10274      Button('setDownloadDelegate')
10275        .onClick(() => {
10276          try {
10277            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
10278              console.log("will start a download.");
10279              // 传入一个下载路径,并开始下载。
10280              webDownloadItem.start("xxxxxxxx");
10281            })
10282            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
10283              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
10284              this.download = webDownloadItem;
10285            })
10286            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
10287              console.log("download failed guid: " + webDownloadItem.getGuid());
10288              // 序列化失败的下载到一个字节数组。
10289              this.failedData = webDownloadItem.serialize();
10290            })
10291            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
10292              console.log("download finish guid: " + webDownloadItem.getGuid());
10293            })
10294            this.controller.setDownloadDelegate(this.delegate);
10295          } catch (error) {
10296            let e:business_error.BusinessError = error as business_error.BusinessError;
10297            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10298          }
10299        })
10300      Button('startDownload')
10301        .onClick(() => {
10302          try {
10303            this.controller.startDownload('www.example.com');
10304          } catch (error) {
10305            let e:business_error.BusinessError = error as business_error.BusinessError;
10306            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10307          }
10308        })
10309      Button('resumeDownload')
10310        .onClick(() => {
10311          try {
10312            web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData));
10313          } catch (error) {
10314            let e:business_error.BusinessError = error as business_error.BusinessError;
10315            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10316          }
10317        })
10318      Button('cancel')
10319        .onClick(() => {
10320          try {
10321            this.download.cancel();
10322          } catch (error) {
10323            let e:business_error.BusinessError = error as business_error.BusinessError;
10324            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10325          }
10326        })
10327      Button('pause')
10328        .onClick(() => {
10329          try {
10330            this.download.pause();
10331          } catch (error) {
10332            let e:business_error.BusinessError = error as business_error.BusinessError;
10333            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10334          }
10335        })
10336      Button('resume')
10337        .onClick(() => {
10338          try {
10339            this.download.resume();
10340          } catch (error) {
10341            let e:business_error.BusinessError = error as business_error.BusinessError;
10342            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
10343          }
10344        })
10345      Web({ src: 'www.example.com', controller: this.controller })
10346    }
10347  }
10348}
10349```
10350