• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.web.webview (Webview)
2
3@ohos.web.webview提供web控制能力,[Web](ts-basic-components-web.md)组件提供网页显示的能力。
4
5> **说明:**
6>
7> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 示例效果请以真机运行为准,当前IDE预览器不支持。
10
11## 需要权限
12
13访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。
14
15## 导入模块
16
17```ts
18import { webview } from '@kit.ArkWeb';
19```
20
21## webview.once
22
23once(type: string, callback: Callback\<void\>): void
24
25订阅一次指定类型Web事件的回调,Web事件的类型目前仅支持"webInited",在Web引擎初始化完成时触发。
26
27当应用中开始加载第一个Web组件时,Web引擎初始化,且后续再在同一应用中继续加载其他Web组件时不会再触发once接口。当应用销毁最后一个Web组件时,若再加载第一个Web组件,应用重新进入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以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
41
42| 错误码ID | 错误信息                  |
43| -------- | ----------------------- |
44| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
45
46**示例:**
47
48```ts
49// xxx.ets
50import { webview } from '@kit.ArkWeb';
51
52webview.once("webInited", () => {
53  console.log("configCookieSync");
54  webview.WebCookieManager.configCookieSync("https://www.example.com", "a=b");
55})
56
57@Entry
58@Component
59struct WebComponent {
60  controller: webview.WebviewController = new webview.WebviewController();
61
62  build() {
63    Column() {
64      Web({ src: 'www.example.com', controller: this.controller })
65    }
66  }
67}
68```
69
70## WebMessagePort
71
72通过WebMessagePort可以进行消息的发送以及接收,发送[WebMessageType](#webmessagetype10)/[WebMessage](#webmessage)类型消息给HTML5侧。
73
74### 属性
75
76**系统能力:** SystemCapability.Web.Webview.Core
77
78| 名称         | 类型   | 可读 | 可写 | 说明                                              |
79| ------------ | ------ | ---- | ---- | ------------------------------------------------|
80| isExtentionType<sup>10+</sup> | boolean | 是   | 是 | 创建WebMessagePort时是否指定使用扩展增强接口,[postMessageEventExt](#postmessageeventext10)、[onMessageEventExt](#onmessageeventext10),默认false不使用。   |
81
82### postMessageEvent
83
84postMessageEvent(message: WebMessage): void
85
86发送[WebMessage](#webmessage)类型消息给HTML5侧,必须先调用[onMessageEvent](#onmessageevent),否则会发送失败。完整示例代码参考[postMessage](#postmessage)。
87
88**系统能力:** SystemCapability.Web.Webview.Core
89
90**参数:**
91
92| 参数名  | 类型   | 必填 | 说明           |
93| ------- | ------ | ---- | :------------- |
94| message | [WebMessage](#webmessage) | 是   | 要发送的消息。 |
95
96**错误码:**
97
98以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
99
100| 错误码ID | 错误信息                              |
101| -------- | ------------------------------------- |
102| 17100010 | Failed to post messages through the port. |
103| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
104
105**示例:**
106
107```ts
108// xxx.ets
109import { webview } from '@kit.ArkWeb';
110import { BusinessError } from '@kit.BasicServicesKit';
111
112@Entry
113@Component
114struct WebComponent {
115  controller: webview.WebviewController = new webview.WebviewController();
116  ports: webview.WebMessagePort[] = [];
117
118  build() {
119    Column() {
120      Button('postMessageEvent')
121        .onClick(() => {
122          try {
123            this.ports = this.controller.createWebMessagePorts();
124            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
125            this.ports[1].postMessageEvent("post message from ets to html5");
126          } catch (error) {
127            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
128          }
129        })
130      Web({ src: 'www.example.com', controller: this.controller })
131    }
132  }
133}
134```
135
136### onMessageEvent
137
138onMessageEvent(callback: (result: WebMessage) => void): void
139
140在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessage](#webmessage)类型消息。完整示例代码参考[postMessage](#postmessage)。
141
142**系统能力:** SystemCapability.Web.Webview.Core
143
144**参数:**
145
146| 参数名   | 类型     | 必填 | 说明                 |
147| -------- | -------- | ---- | :------------------- |
148| callback | (result: [WebMessage](#webmessage)) => void | 是   | 接收到的消息。 |
149
150**错误码:**
151
152以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
153
154| 错误码ID | 错误信息                                        |
155| -------- | ----------------------------------------------- |
156| 17100006 | Failed to register a message event for the port.|
157| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.|
158
159**示例:**
160
161```ts
162// xxx.ets
163import { webview } from '@kit.ArkWeb';
164import { BusinessError } from '@kit.BasicServicesKit';
165
166@Entry
167@Component
168struct WebComponent {
169  controller: webview.WebviewController = new webview.WebviewController();
170  ports: webview.WebMessagePort[] = [];
171
172  build() {
173    Column() {
174      Button('onMessageEvent')
175        .onClick(() => {
176          try {
177            this.ports = this.controller.createWebMessagePorts();
178            this.ports[1].onMessageEvent((msg) => {
179              if (typeof (msg) == "string") {
180                console.log("received string message from html5, string is:" + msg);
181              } else if (typeof (msg) == "object") {
182                if (msg instanceof ArrayBuffer) {
183                  console.log("received arraybuffer from html5, length is:" + msg.byteLength);
184                } else {
185                  console.log("not support");
186                }
187              } else {
188                console.log("not support");
189              }
190            })
191          } catch (error) {
192            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
193          }
194        })
195      Web({ src: 'www.example.com', controller: this.controller })
196    }
197  }
198}
199```
200
201### postMessageEventExt<sup>10+</sup>
202
203postMessageEventExt(message: WebMessageExt): void
204
205发送[WebMessageType](#webmessagetype10)类型消息给HTML5侧,必须先调用[onMessageEventExt](#onmessageeventext10),否则会发送失败。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
206
207**系统能力:** SystemCapability.Web.Webview.Core
208
209**参数:**
210
211| 参数名  | 类型   | 必填 | 说明           |
212| ------- | ------ | ---- | :------------- |
213| message | [WebMessageExt](#webmessageext10) | 是   | 要发送的消息。 |
214
215**错误码:**
216
217以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
218
219| 错误码ID | 错误信息                              |
220| -------- | ------------------------------------- |
221| 17100010 | Failed to post messages through the port. |
222| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
223
224### onMessageEventExt<sup>10+</sup>
225
226onMessageEventExt(callback: (result: WebMessageExt) => void): void
227
228在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessageType](#webmessagetype10)类型消息。
229
230**系统能力:** SystemCapability.Web.Webview.Core
231
232**参数:**
233
234| 参数名   | 类型     | 必填 | 说明                 |
235| -------- | -------- | ---- | :------------------- |
236| callback | (result: [WebMessageExt](#webmessageext10)) => void | 是   | 接收到的消息。 |
237
238**错误码:**
239
240以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
241
242| 错误码ID | 错误信息                                        |
243| -------- | ----------------------------------------------- |
244| 17100006 | Failed to register a message event for the port. |
245| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
246
247**示例:**
248
249```ts
250// xxx.ets
251import { webview } from '@kit.ArkWeb';
252import { BusinessError } from '@kit.BasicServicesKit';
253
254class TestObj {
255  test(str: string): ArrayBuffer {
256    let buf = new ArrayBuffer(str.length);
257    let buff = new Uint8Array(buf);
258
259    for (let i = 0; i < str.length; i++) {
260      buff[i] = str.charCodeAt(i);
261    }
262    return buf;
263  }
264}
265
266// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。
267@Entry
268@Component
269struct WebComponent {
270  controller: webview.WebviewController = new webview.WebviewController();
271  ports: webview.WebMessagePort[] = [];
272  nativePort: webview.WebMessagePort | null = null;
273  @State msg1: string = "";
274  @State msg2: string = "";
275  message: webview.WebMessageExt = new webview.WebMessageExt();
276  @State testObjtest: TestObj = new TestObj();
277
278  build() {
279    Column() {
280      Text(this.msg1).fontSize(16)
281      Text(this.msg2).fontSize(16)
282      Button('SendToH5 setString').margin({
283        right: 800,
284      })
285        .onClick(() => {
286          // 使用本侧端口发送消息给HTML5
287          try {
288            console.log("In ArkTS side send true start");
289            if (this.nativePort) {
290              this.message.setType(1);
291              this.message.setString("helloFromEts");
292              this.nativePort.postMessageEventExt(this.message);
293            }
294          }
295          catch (error) {
296            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
297          }
298        })
299        Button('SendToH5 setNumber').margin({
300        top: 10,
301        right: 800,
302      })
303        .onClick(() => {
304          // 使用本侧端口发送消息给HTML5
305          try {
306            console.log("In ArkTS side send true start");
307            if (this.nativePort) {
308              this.message.setType(2);
309              this.message.setNumber(12345);
310              this.nativePort.postMessageEventExt(this.message);
311            }
312          }
313          catch (error) {
314            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
315          }
316        })
317      Button('SendToH5 setBoolean').margin({
318        top: -90,
319      })
320        .onClick(() => {
321          // 使用本侧端口发送消息给HTML5
322          try {
323            console.log("In ArkTS side send true start");
324            if (this.nativePort) {
325              this.message.setType(3);
326              this.message.setBoolean(true);
327              this.nativePort.postMessageEventExt(this.message);
328            }
329          }
330          catch (error) {
331            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
332          }
333        })
334      Button('SendToH5 setArrayBuffer').margin({
335        top: 10,
336      })
337        .onClick(() => {
338          // 使用本侧端口发送消息给HTML5
339          try {
340            console.log("In ArkTS side send true start");
341            if (this.nativePort) {
342              this.message.setType(4);
343              this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test"));
344              this.nativePort.postMessageEventExt(this.message);
345            }
346          }
347          catch (error) {
348            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
349          }
350        })
351      Button('SendToH5 setArray').margin({
352        top: -90,
353        left: 800,
354      })
355        .onClick(() => {
356          // 使用本侧端口发送消息给HTML5
357          try {
358            console.log("In ArkTS side send true start");
359            if (this.nativePort) {
360              this.message.setType(5);
361              this.message.setArray([1, 2, 3]);
362              this.nativePort.postMessageEventExt(this.message);
363            }
364          }
365          catch (error) {
366            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
367          }
368        })
369      Button('SendToH5 setError').margin({
370        top: 10,
371        left: 800,
372      })
373        .onClick(() => {
374          // 使用本侧端口发送消息给HTML5
375          try {
376            console.log("In ArkTS side send true start");
377            throw new ReferenceError("ReferenceError");
378          }
379          catch (error) {
380            if (this.nativePort) {
381              this.message.setType(6);
382              this.message.setError(error);
383              this.nativePort.postMessageEventExt(this.message);
384            }
385            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
386          }
387        })
388
389      Web({ src: $rawfile('index.html'), controller: this.controller })
390        .onPageEnd(() => {
391          console.log("In ArkTS side message onPageEnd init message channel");
392          // 1. 创建消息端口
393          this.ports = this.controller.createWebMessagePorts(true);
394          // 2. 发送端口1到HTML5
395          this.controller.postMessage("init_web_messageport", [this.ports[1]], "*");
396          // 3. 保存端口0到本地
397          this.nativePort = this.ports[0];
398          // 4. 设置回调函数
399          this.nativePort.onMessageEventExt((result) => {
400            console.log("In ArkTS side got message");
401            try {
402              let type = result.getType();
403              console.log("In ArkTS side getType:" + type);
404              switch (type) {
405                case webview.WebMessageType.STRING: {
406                  this.msg1 = "result type:" + typeof (result.getString());
407                  this.msg2 = "result getString:" + ((result.getString()));
408                  break;
409                }
410                case webview.WebMessageType.NUMBER: {
411                  this.msg1 = "result type:" + typeof (result.getNumber());
412                  this.msg2 = "result getNumber:" + ((result.getNumber()));
413                  break;
414                }
415                case webview.WebMessageType.BOOLEAN: {
416                  this.msg1 = "result type:" + typeof (result.getBoolean());
417                  this.msg2 = "result getBoolean:" + ((result.getBoolean()));
418                  break;
419                }
420                case webview.WebMessageType.ARRAY_BUFFER: {
421                  this.msg1 = "result type:" + typeof (result.getArrayBuffer());
422                  this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
423                  break;
424                }
425                case webview.WebMessageType.ARRAY: {
426                  this.msg1 = "result type:" + typeof (result.getArray());
427                  this.msg2 = "result getArray:" + result.getArray();
428                  break;
429                }
430                case webview.WebMessageType.ERROR: {
431                  this.msg1 = "result type:" + typeof (result.getError());
432                  this.msg2 = "result getError:" + result.getError();
433                  break;
434                }
435                default: {
436                  this.msg1 = "default break, type:" + type;
437                  break;
438                }
439              }
440            }
441            catch (error) {
442              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
443            }
444          });
445        })
446    }
447  }
448}
449```
450
451加载的html文件。
452```html
453<!--index.html-->
454<!DOCTYPE html>
455<html lang="en-gb">
456<head>
457    <title>WebView MessagePort Demo</title>
458</head>
459
460<body>
461<h1>Html5 Send and Receive Message</h1>
462<h3 id="msg">Receive string:</h3>
463<h3 id="msg2">Receive arraybuffer:</h3>
464<div style="font-size: 10pt; text-align: center;">
465    <input type="button" value="Send String" onclick="postStringToApp();" /><br/>
466</div>
467</body>
468<script src="index.js"></script>
469</html>
470```
471
472```js
473//index.js
474var h5Port;
475window.addEventListener('message', function(event) {
476    if (event.data == 'init_web_messageport') {
477        if(event.ports[0] != null) {
478            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
479            h5Port.onmessage = function(event) {
480                console.log("hwd In html got message");
481                // 2. 接收ets侧发送过来的消息.
482                var result = event.data;
483                console.log("In html got message, typeof: ", typeof(result));
484                console.log("In html got message, result: ", (result));
485                if (typeof(result) == "string") {
486                    console.log("In html got message, String: ", result);
487                    document.getElementById("msg").innerHTML  =  "String:" + result;
488                } else if (typeof(result) == "number") {
489                  console.log("In html side got message, number: ", result);
490                    document.getElementById("msg").innerHTML = "Number:" + result;
491                } else if (typeof(result) == "boolean") {
492                    console.log("In html side got message, boolean: ", result);
493                    document.getElementById("msg").innerHTML = "Boolean:" + result;
494                } else if (typeof(result) == "object") {
495                    if (result instanceof ArrayBuffer) {
496                        document.getElementById("msg2").innerHTML  =  "ArrayBuffer:" + result.byteLength;
497                        console.log("In html got message, byteLength: ", result.byteLength);
498                    } else if (result instanceof Error) {
499                        console.log("In html error message, err:" + (result));
500                        console.log("In html error message, typeof err:" + typeof(result));
501                        document.getElementById("msg2").innerHTML  =  "Error:" + result.name + ", msg:" + result.message;
502                    } else if (result instanceof Array) {
503                        console.log("In html got message, Array");
504                        console.log("In html got message, Array length:" + result.length);
505                        console.log("In html got message, Array[0]:" + (result[0]));
506                        console.log("In html got message, typeof Array[0]:" + typeof(result[0]));
507                        document.getElementById("msg2").innerHTML  =  "Array len:" + result.length + ", value:" + result;
508                    } else {
509                        console.log("In html got message, not any instance of support type");
510                        document.getElementById("msg").innerHTML  = "not any instance of support type";
511                    }
512                } else {
513                    console.log("In html got message, not support type");
514                    document.getElementById("msg").innerHTML  = "not support type";
515                }
516            }
517            h5Port.onmessageerror = (event) => {
518                console.error(`hwd In html Error receiving message: ${event}`);
519            };
520        }
521    }
522})
523
524// 使用h5Port往ets侧发送String类型的消息.
525function postStringToApp() {
526    if (h5Port) {
527        console.log("In html send string message");
528        h5Port.postMessage("hello");
529        console.log("In html send string message end");
530    } else {
531        console.error("In html h5port is null, please init first");
532    }
533}
534```
535
536### close
537
538close(): void
539
540不需要发送消息时关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。
541
542**系统能力:** SystemCapability.Web.Webview.Core
543
544**示例:**
545
546```ts
547// xxx.ets
548import { webview } from '@kit.ArkWeb';
549import { BusinessError } from '@kit.BasicServicesKit';
550
551@Entry
552@Component
553struct WebComponent {
554  controller: webview.WebviewController = new webview.WebviewController();
555  msgPort: webview.WebMessagePort[] = [];
556
557  build() {
558    Column() {
559      // 先使用createWebMessagePorts创建端口。
560      Button('createWebMessagePorts')
561        .onClick(() => {
562          try {
563            this.msgPort = this.controller.createWebMessagePorts();
564            console.log("createWebMessagePorts size:" + this.msgPort.length)
565          } catch (error) {
566            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
567          }
568        })
569      Button('close')
570        .onClick(() => {
571          try {
572            if (this.msgPort && this.msgPort.length == 2) {
573              this.msgPort[1].close();
574            } else {
575              console.error("msgPort is null, Please initialize first");
576            }
577          } catch (error) {
578            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
579          }
580        })
581      Web({ src: 'www.example.com', controller: this.controller })
582    }
583  }
584}
585```
586
587## WebviewController
588
589通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
590
591### constructor<sup>11+</sup>
592
593constructor(webTag?: string)
594
595用于创建 WebviewController 对象的构造函数。
596
597> **说明:**
598>
599> 不传参:new webview.WebviewController()表示构造函数为空,不使用C API时不需要传参。
600>
601> 传参且参数是合法字符串:new webview.WebviewController("xxx"),用于开发者区分多实例,并调用对应实例下的方法。
602>
603> 传入参数为空:new webview.WebviewController("")或new webview.WebviewController(undefined),该场景下参数无意义,无法区分多个实例,直接返回undefined,需要开发者判断返回值是否正常。
604
605**系统能力:** SystemCapability.Web.Webview.Core
606
607**参数:**
608
609| 参数名     | 类型   | 必填 | 说明                               |
610| ---------- | ------ | ---- | -------------------------------- |
611| webTag   | string | 否   | 指定了 Web 组件的名称。 |
612
613**示例:**
614
615```ts
616// xxx.ets
617import { webview } from '@kit.ArkWeb';
618import { BusinessError } from '@kit.BasicServicesKit';
619
620class WebObj {
621  constructor() {
622  }
623
624  webTest(): string {
625    console.log('Web test');
626    return "Web test";
627  }
628
629  webString(): void {
630    console.log('Web test toString');
631  }
632}
633
634@Entry
635@Component
636struct WebComponent {
637  controller: webview.WebviewController = new webview.WebviewController()
638  @State webTestObj: WebObj = new WebObj();
639
640  build() {
641    Column() {
642      Button('refresh')
643        .onClick(() => {
644          try {
645            this.controller.refresh();
646          } catch (error) {
647            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
648          }
649        })
650      Button('deleteJavaScriptRegister')
651        .onClick(() => {
652          try {
653            this.controller.deleteJavaScriptRegister("objTestName");
654          } catch (error) {
655            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
656          }
657        })
658      Web({ src: '', controller: this.controller })
659        .javaScriptAccess(true)
660        .onControllerAttached(() => {
661          this.controller.loadUrl($rawfile("index.html"));
662          this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
663        })
664    }
665  }
666}
667```
668
669加载的html文件。
670```html
671<!-- index.html -->
672<!DOCTYPE html>
673<html>
674    <meta charset="utf-8">
675    <body>
676      <button type="button" onclick="htmlTest()">Click Me!</button>
677      <p id="demo"></p>
678      <p id="webDemo"></p>
679    </body>
680    <script type="text/javascript">
681    function htmlTest() {
682      // This function call expects to return "Web test"
683      let webStr = objTestName.webTest();
684      document.getElementById("webDemo").innerHTML=webStr;
685      console.log('objTestName.webTest result:'+ webStr)
686    }
687</script>
688</html>
689```
690
691### initializeWebEngine
692
693static initializeWebEngine(): void
694
695在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。
696
697> **说明:**
698>
699> - initializeWebEngine不支持在异步线程中调用,否则会造成崩溃。
700> - initializeWebEngine全局生效,在整个APP生命周期中调用一次即可,不需要重复调用。
701
702**系统能力:** SystemCapability.Web.Webview.Core
703
704**示例:**
705
706本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。
707
708```ts
709// xxx.ets
710import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
711import { webview } from '@kit.ArkWeb';
712
713export default class EntryAbility extends UIAbility {
714  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
715    console.log("EntryAbility onCreate")
716    webview.WebviewController.initializeWebEngine()
717    console.log("EntryAbility onCreate done")
718  }
719}
720```
721
722### setHttpDns<sup>10+</sup>
723
724static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void
725
726设置Web组件是否使用HTTPDNS解析dns。
727
728**系统能力:** SystemCapability.Web.Webview.Core
729
730**参数:**
731
732| 参数名              | 类型    | 必填   |  说明 |
733| ------------------ | ------- | ---- | ------------- |
734| secureDnsMode         |   [SecureDnsMode](#securednsmode10)   | 是   | 使用HTTPDNS的模式。|
735| secureDnsConfig       | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 |
736
737**错误码:**
738
739以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
740
741| 错误码ID | 错误信息                  |
742| -------- | ----------------------- |
743| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
744
745**示例:**
746
747```ts
748// xxx.ets
749import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
750import { webview } from '@kit.ArkWeb';
751import { BusinessError } from '@kit.BasicServicesKit';
752
753export default class EntryAbility extends UIAbility {
754  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
755    console.log("EntryAbility onCreate")
756    try {
757      webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, "https://example1.test")
758    } catch (error) {
759      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
760    }
761
762    AppStorage.setOrCreate("abilityWant", want);
763    console.log("EntryAbility onCreate done")
764  }
765}
766```
767
768### setWebDebuggingAccess
769
770static setWebDebuggingAccess(webDebuggingAccess: boolean): void
771
772设置是否启用网页调试功能,默认不开启。详情请参考[DevTools工具](../../web/web-debugging-with-devtools.md)。
773
774安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。
775
776**系统能力:** SystemCapability.Web.Webview.Core
777
778**参数:**
779
780| 参数名              | 类型    | 必填   |  说明 |
781| ------------------ | ------- | ---- | ------------- |
782| webDebuggingAccess | boolean | 是   | 设置是否启用网页调试功能。设置为true,表示启用网页调试功能。设置为false,表示不启用网页调试功能。 |
783
784**错误码:**
785
786以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
787
788| 错误码ID  | 错误信息                                                      |
789| -------- | ------------------------------------------------------------ |
790| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
791
792**示例:**
793
794```ts
795// xxx.ets
796import { webview } from '@kit.ArkWeb';
797import { BusinessError } from '@kit.BasicServicesKit';
798
799@Entry
800@Component
801struct WebComponent {
802  controller: webview.WebviewController = new webview.WebviewController();
803
804  aboutToAppear(): void {
805    try {
806      webview.WebviewController.setWebDebuggingAccess(true);
807    } catch (error) {
808      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
809    }
810  }
811
812  build() {
813    Column() {
814      Web({ src: 'www.example.com', controller: this.controller })
815    }
816  }
817}
818```
819
820### loadUrl
821
822loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void
823
824加载指定的URL。
825
826**系统能力:** SystemCapability.Web.Webview.Core
827
828**参数:**
829
830| 参数名  | 类型             | 必填 | 说明                  |
831| ------- | ---------------- | ---- | :-------------------- |
832| url     | string \| Resource | 是   | 需要加载的 URL。      |
833| headers | Array\<[WebHeader](#webheader)> | 否   | URL的附加HTTP请求头。 |
834
835**错误码:**
836
837以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
838
839| 错误码ID | 错误信息                                                     |
840| -------- | ------------------------------------------------------------ |
841| 17100001 | Init error. The WebviewController must be associated with a Web component. |
842| 17100002 | Invalid url.                                                 |
843| 17100003 | Invalid resource path or file type.                          |
844| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
845
846**示例:**
847
848```ts
849// xxx.ets
850import { webview } from '@kit.ArkWeb';
851import { BusinessError } from '@kit.BasicServicesKit';
852
853@Entry
854@Component
855struct WebComponent {
856  controller: webview.WebviewController = new webview.WebviewController();
857
858  build() {
859    Column() {
860      Button('loadUrl')
861        .onClick(() => {
862          try {
863            // 需要加载的URL是string类型。
864            this.controller.loadUrl('www.example.com');
865          } catch (error) {
866            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
867          }
868        })
869      Web({ src: 'www.example.com', controller: this.controller })
870    }
871  }
872}
873```
874
875```ts
876// xxx.ets
877import { webview } from '@kit.ArkWeb';
878import { BusinessError } from '@kit.BasicServicesKit';
879
880@Entry
881@Component
882struct WebComponent {
883  controller: webview.WebviewController = new webview.WebviewController();
884
885  build() {
886    Column() {
887      Button('loadUrl')
888        .onClick(() => {
889          try {
890            // 带参数headers。
891            this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]);
892          } catch (error) {
893            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
894          }
895        })
896      Web({ src: 'www.example.com', controller: this.controller })
897    }
898  }
899}
900```
901
902加载本地网页,加载本地资源文件有三种方式。
903
9041.$rawfile方式。
905```ts
906// xxx.ets
907import { webview } from '@kit.ArkWeb';
908import { BusinessError } from '@kit.BasicServicesKit';
909
910@Entry
911@Component
912struct WebComponent {
913  controller: webview.WebviewController = new webview.WebviewController();
914
915  build() {
916    Column() {
917      Button('loadUrl')
918        .onClick(() => {
919          try {
920            // 通过$rawfile加载本地资源文件。
921            this.controller.loadUrl($rawfile('index.html'));
922          } catch (error) {
923            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
924          }
925        })
926      Web({ src: 'www.example.com', controller: this.controller })
927    }
928  }
929}
930```
931
9322.resources协议,适用Webview加载带有"#"路由的链接。
933```ts
934// xxx.ets
935import { webview } from '@kit.ArkWeb';
936import { BusinessError } from '@kit.BasicServicesKit';
937
938@Entry
939@Component
940struct WebComponent {
941  controller: webview.WebviewController = new webview.WebviewController();
942
943  build() {
944    Column() {
945      Button('loadUrl')
946        .onClick(() => {
947          try {
948            // 通过resource协议加载本地资源文件。
949            this.controller.loadUrl("resource://rawfile/index.html");
950          } catch (error) {
951            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
952          }
953        })
954      Web({ src: 'www.example.com', controller: this.controller })
955    }
956  }
957}
958```
959
9603.通过沙箱路径加载本地文件,可以参考[web](../../web/web-page-loading-with-web-components.md#加载本地页面)加载沙箱路径的示例代码。
961
962加载的html文件。
963```html
964<!-- index.html -->
965<!DOCTYPE html>
966<html>
967  <body>
968    <p>Hello World</p>
969  </body>
970</html>
971```
972
973### loadData
974
975loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void
976
977加载指定的数据。
978
979baseUrl与historyUrl同时为空的情况下:
980
981encoding如果为非base64(包括空值),则假定数据对安全URL字符范围内的八位字节使用ASCII编码,对该范围外的八位字节使用URL的标准%xx十六进制编码。
982
983data数据必须使用base64编码或将内容中的任何#字符编码为%23。否则#将被视为内容的结尾而剩余的文本将被用作文档片段标识符。
984
985**系统能力:** SystemCapability.Web.Webview.Core
986
987**参数:**
988
989| 参数名     | 类型   | 必填 | 说明                                                         |
990| ---------- | ------ | ---- | ------------------------------------------------------------ |
991| data       | string | 是   | 按照"base64"或者"URL"编码后的一段字符串。                    |
992| mimeType   | string | 是   | 媒体类型(MIME)。                                           |
993| encoding   | string | 是   | 编码类型,具体为"base64"或者"URL"编码。                       |
994| baseUrl    | string | 否   | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。当加载大量html文件时,需设置为"data"。 |
995| historyUrl | string | 否   | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 |
996
997> **说明:**
998>
999> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。
1000> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。
1001> 若html中的富文本中带有注入#等特殊字符,建议将baseUrl和historyUrl两个参数的值设置为"空格"。
1002
1003**错误码:**
1004
1005以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1006
1007| 错误码ID | 错误信息                                                     |
1008| -------- | ------------------------------------------------------------ |
1009| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1010| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1011
1012**示例:**
1013
1014baseUrl与historyUrl同时为空。
1015```ts
1016// xxx.ets
1017import { webview } from '@kit.ArkWeb';
1018import { BusinessError } from '@kit.BasicServicesKit';
1019
1020@Entry
1021@Component
1022struct WebComponent {
1023  controller: webview.WebviewController = new webview.WebviewController();
1024
1025  build() {
1026    Column() {
1027      Button('loadData')
1028        .onClick(() => {
1029          try {
1030            this.controller.loadData(
1031              "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
1032              "text/html",
1033              // UTF-8为charset。
1034              "UTF-8"
1035            );
1036          } catch (error) {
1037            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1038          }
1039        })
1040      Web({ src: 'www.example.com', controller: this.controller })
1041    }
1042  }
1043}
1044```
1045
1046```ts
1047// xxx.ets
1048import { webview } from '@kit.ArkWeb';
1049import { BusinessError } from '@kit.BasicServicesKit';
1050
1051@Entry
1052@Component
1053struct WebComponent {
1054  controller: webview.WebviewController = new webview.WebviewController();
1055
1056  build() {
1057    Column() {
1058      Button('loadData')
1059        .onClick(() => {
1060          try {
1061            this.controller.loadData(
1062              // Coding tests通过base64编码后的字符串。
1063              "Q29kaW5nIHRlc3Rz",
1064              "text/html",
1065              "base64"
1066            );
1067          } catch (error) {
1068            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1069          }
1070        })
1071      Web({ src: 'www.example.com', controller: this.controller })
1072    }
1073  }
1074}
1075```
1076
1077加载本地资源
1078```ts
1079// xxx.ets
1080import { webview } from '@kit.ArkWeb';
1081import { BusinessError } from '@kit.BasicServicesKit';
1082
1083@Entry
1084@Component
1085struct WebComponent {
1086  controller: webview.WebviewController = new webview.WebviewController();
1087  updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>'
1088
1089  build() {
1090    Column() {
1091      Button('loadData')
1092        .onClick(() => {
1093          try {
1094            // UTF-8为charset。
1095            this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " ");
1096          } catch (error) {
1097            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1098          }
1099        })
1100      Web({ src: 'www.example.com', controller: this.controller })
1101    }
1102  }
1103}
1104```
1105
1106### accessForward
1107
1108accessForward(): boolean
1109
1110当前页面是否可前进,即当前页面是否有前进历史记录。
1111
1112可以结合使用[getBackForwardEntries](#getbackforwardentries)来获取当前WebView的历史信息列表,以及使用[accessStep](#accessstep)来判断是否可以按照给定的步数前进或后退。
1113
1114**系统能力:** SystemCapability.Web.Webview.Core
1115
1116**返回值:**
1117
1118| 类型    | 说明                              |
1119| ------- | --------------------------------- |
1120| boolean | 可以前进返回true,否则返回false。 |
1121
1122**错误码:**
1123
1124以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1125
1126| 错误码ID | 错误信息                                                     |
1127| -------- | ------------------------------------------------------------ |
1128| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1129
1130**示例:**
1131
1132```ts
1133// xxx.ets
1134import { webview } from '@kit.ArkWeb';
1135import { BusinessError } from '@kit.BasicServicesKit';
1136
1137@Entry
1138@Component
1139struct WebComponent {
1140  controller: webview.WebviewController = new webview.WebviewController();
1141
1142  build() {
1143    Column() {
1144      Button('accessForward')
1145        .onClick(() => {
1146          try {
1147            let result = this.controller.accessForward();
1148            console.log('result:' + result);
1149          } catch (error) {
1150            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1151          }
1152        })
1153      Web({ src: 'www.example.com', controller: this.controller })
1154    }
1155  }
1156}
1157```
1158
1159### forward
1160
1161forward(): void
1162
1163按照历史栈,前进一个页面。一般结合accessForward一起使用。
1164
1165**系统能力:** SystemCapability.Web.Webview.Core
1166
1167**错误码:**
1168
1169以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1170
1171| 错误码ID | 错误信息                                                     |
1172| -------- | ------------------------------------------------------------ |
1173| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1174
1175**示例:**
1176
1177```ts
1178// xxx.ets
1179import { webview } from '@kit.ArkWeb';
1180import { BusinessError } from '@kit.BasicServicesKit';
1181
1182@Entry
1183@Component
1184struct WebComponent {
1185  controller: webview.WebviewController = new webview.WebviewController();
1186
1187  build() {
1188    Column() {
1189      Button('forward')
1190        .onClick(() => {
1191          try {
1192            this.controller.forward();
1193          } catch (error) {
1194            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1195          }
1196        })
1197      Web({ src: 'www.example.com', controller: this.controller })
1198    }
1199  }
1200}
1201```
1202
1203### accessBackward
1204
1205accessBackward(): boolean
1206
1207当前页面是否可后退,即当前页面是否有返回历史记录。
1208
1209可以结合使用[getBackForwardEntries](#getbackforwardentries)来获取当前WebView的历史信息列表,以及使用[accessStep](#accessstep)来判断是否可以按照给定的步数前进或后退。
1210
1211> **说明:**
1212>
1213> 在Web组件首次加载过程中调用[setCustomUserAgent](#setcustomuseragent10),可能会导致在当前存在多个历史节点的情况下,获取的accessBackForward实际为false,即没有后退节点。建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。
1214>
1215> 该现象是由于在Web组件首次加载时,调用[setCustomUserAgent](#setcustomuseragent10)会导致组件重新加载并保持初始历史节点的状态。随后新增的节点将替换初始历史节点,不会生成新的历史节点,导致accessBackward为false。
1216
1217**系统能力:** SystemCapability.Web.Webview.Core
1218
1219**返回值:**
1220
1221| 类型    | 说明                             |
1222| ------- | -------------------------------- |
1223| boolean | 可以后退返回true,否则返回false。 |
1224
1225**错误码:**
1226
1227以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1228
1229| 错误码ID | 错误信息                                                     |
1230| -------- | ------------------------------------------------------------ |
1231| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1232
1233**示例:**
1234
1235```ts
1236// xxx.ets
1237import { webview } from '@kit.ArkWeb';
1238import { BusinessError } from '@kit.BasicServicesKit';
1239
1240@Entry
1241@Component
1242struct WebComponent {
1243  controller: webview.WebviewController = new webview.WebviewController();
1244
1245  build() {
1246    Column() {
1247      Button('accessBackward')
1248        .onClick(() => {
1249          try {
1250            let result = this.controller.accessBackward();
1251            console.log('result:' + result);
1252          } catch (error) {
1253            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1254          }
1255        })
1256      Web({ src: 'www.example.com', controller: this.controller })
1257    }
1258  }
1259}
1260```
1261
1262### backward
1263
1264backward(): void
1265
1266按照历史栈,后退一个页面。一般结合accessBackward一起使用。
1267
1268**系统能力:** SystemCapability.Web.Webview.Core
1269
1270**错误码:**
1271
1272以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1273
1274| 错误码ID | 错误信息                                                     |
1275| -------- | ------------------------------------------------------------ |
1276| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1277
1278**示例:**
1279
1280```ts
1281// xxx.ets
1282import { webview } from '@kit.ArkWeb';
1283import { BusinessError } from '@kit.BasicServicesKit';
1284
1285@Entry
1286@Component
1287struct WebComponent {
1288  controller: webview.WebviewController = new webview.WebviewController();
1289
1290  build() {
1291    Column() {
1292      Button('backward')
1293        .onClick(() => {
1294          try {
1295            this.controller.backward();
1296          } catch (error) {
1297            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1298          }
1299        })
1300      Web({ src: 'www.example.com', controller: this.controller })
1301    }
1302  }
1303}
1304```
1305
1306### onActive
1307
1308onActive(): void
1309
1310调用此接口通知Web组件进入前台激活状态。
1311<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。
1312
1313**系统能力:** SystemCapability.Web.Webview.Core
1314
1315**错误码:**
1316
1317以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1318
1319| 错误码ID | 错误信息                                                     |
1320| -------- | ------------------------------------------------------------ |
1321| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1322
1323**示例:**
1324
1325```ts
1326// xxx.ets
1327import { webview } from '@kit.ArkWeb';
1328import { BusinessError } from '@kit.BasicServicesKit';
1329
1330@Entry
1331@Component
1332struct WebComponent {
1333  controller: webview.WebviewController = new webview.WebviewController();
1334
1335  build() {
1336    Column() {
1337      Button('onActive')
1338        .onClick(() => {
1339          try {
1340            this.controller.onActive();
1341          } catch (error) {
1342            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1343          }
1344        })
1345      Web({ src: 'www.example.com', controller: this.controller })
1346    }
1347  }
1348}
1349```
1350
1351### onInactive
1352
1353onInactive(): void
1354
1355调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。
1356
1357此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。
1358
1359**系统能力:** SystemCapability.Web.Webview.Core
1360
1361**错误码:**
1362
1363以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1364
1365| 错误码ID | 错误信息                                                     |
1366| -------- | ------------------------------------------------------------ |
1367| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1368
1369**示例:**
1370
1371```ts
1372// xxx.ets
1373import { webview } from '@kit.ArkWeb';
1374import { BusinessError } from '@kit.BasicServicesKit';
1375
1376@Entry
1377@Component
1378struct WebComponent {
1379  controller: webview.WebviewController = new webview.WebviewController();
1380
1381  build() {
1382    Column() {
1383      Button('onInactive')
1384        .onClick(() => {
1385          try {
1386            this.controller.onInactive();
1387          } catch (error) {
1388            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1389          }
1390        })
1391      Web({ src: 'www.example.com', controller: this.controller })
1392    }
1393  }
1394}
1395```
1396
1397### refresh
1398refresh(): void
1399
1400调用此接口通知Web组件刷新网页。
1401
1402**系统能力:** SystemCapability.Web.Webview.Core
1403
1404**错误码:**
1405
1406以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1407
1408| 错误码ID | 错误信息                                                     |
1409| -------- | ------------------------------------------------------------ |
1410| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1411
1412**示例:**
1413
1414```ts
1415// xxx.ets
1416import { webview } from '@kit.ArkWeb';
1417import { BusinessError } from '@kit.BasicServicesKit';
1418
1419@Entry
1420@Component
1421struct WebComponent {
1422  controller: webview.WebviewController = new webview.WebviewController();
1423
1424  build() {
1425    Column() {
1426      Button('refresh')
1427        .onClick(() => {
1428          try {
1429            this.controller.refresh();
1430          } catch (error) {
1431            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1432          }
1433        })
1434      Web({ src: 'www.example.com', controller: this.controller })
1435    }
1436  }
1437}
1438```
1439
1440### accessStep
1441
1442accessStep(step: number): boolean
1443
1444当前页面是否可前进或者后退给定的step步。
1445
1446**系统能力:** SystemCapability.Web.Webview.Core
1447
1448**参数:**
1449
1450| 参数名 | 类型 | 必填 | 说明                                   |
1451| ------ | -------- | ---- | ------------------------------------------ |
1452| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1453
1454**返回值:**
1455
1456| 类型    | 说明               |
1457| ------- | ------------------ |
1458| boolean | 页面是否前进或后退,返回true表示可以前进或者后退,返回false表示不可以前进或后退。 |
1459
1460**错误码:**
1461
1462以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1463
1464| 错误码ID | 错误信息                                                     |
1465| -------- | ------------------------------------------------------------ |
1466| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1467| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1468
1469**示例:**
1470
1471```ts
1472// xxx.ets
1473import { webview } from '@kit.ArkWeb';
1474import { BusinessError } from '@kit.BasicServicesKit';
1475
1476@Entry
1477@Component
1478struct WebComponent {
1479  controller: webview.WebviewController = new webview.WebviewController();
1480  @State steps: number = 2;
1481
1482  build() {
1483    Column() {
1484      Button('accessStep')
1485        .onClick(() => {
1486          try {
1487            let result = this.controller.accessStep(this.steps);
1488            console.log('result:' + result);
1489          } catch (error) {
1490            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1491          }
1492        })
1493      Web({ src: 'www.example.com', controller: this.controller })
1494    }
1495  }
1496}
1497```
1498
1499### clearHistory
1500
1501clearHistory(): void
1502
1503删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。
1504
1505**系统能力:** SystemCapability.Web.Webview.Core
1506
1507**错误码:**
1508
1509以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1510
1511| 错误码ID | 错误信息                                                     |
1512| -------- | ------------------------------------------------------------ |
1513| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1514
1515**示例:**
1516
1517```ts
1518// xxx.ets
1519import { webview } from '@kit.ArkWeb';
1520import { BusinessError } from '@kit.BasicServicesKit';
1521
1522@Entry
1523@Component
1524struct WebComponent {
1525  controller: webview.WebviewController = new webview.WebviewController();
1526
1527  build() {
1528    Column() {
1529      Button('clearHistory')
1530        .onClick(() => {
1531          try {
1532            this.controller.clearHistory();
1533          } catch (error) {
1534            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1535          }
1536        })
1537      Web({ src: 'www.example.com', controller: this.controller })
1538    }
1539  }
1540}
1541```
1542
1543### getHitTest<sup>(deprecated)</sup>
1544
1545getHitTest(): WebHitTestType
1546
1547获取当前被点击区域的元素类型。
1548
1549> **说明:**
1550>
1551> 从API version11开始支持,从API version 18开始废弃。建议使用[getLastHitTest](#getlasthittest18)替代。
1552
1553**系统能力:** SystemCapability.Web.Webview.Core
1554
1555**返回值:**
1556
1557| 类型                                                         | 说明                   |
1558| ------------------------------------------------------------ | ---------------------- |
1559| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1560
1561**错误码:**
1562
1563以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1564
1565| 错误码ID | 错误信息                                                     |
1566| -------- | ------------------------------------------------------------ |
1567| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1568
1569**示例:**
1570
1571```ts
1572// xxx.ets
1573import { webview } from '@kit.ArkWeb';
1574import { BusinessError } from '@kit.BasicServicesKit';
1575
1576@Entry
1577@Component
1578struct WebComponent {
1579  controller: webview.WebviewController = new webview.WebviewController();
1580
1581  build() {
1582    Column() {
1583      Button('getHitTest')
1584        .onClick(() => {
1585          try {
1586            let hitTestType = this.controller.getHitTest();
1587            console.log("hitTestType: " + hitTestType);
1588          } catch (error) {
1589            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1590          }
1591        })
1592      Web({ src: 'www.example.com', controller: this.controller })
1593    }
1594  }
1595}
1596```
1597
1598### registerJavaScriptProxy
1599
1600registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void
1601
1602registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。
1603<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1604
1605> **说明:**
1606>
1607> - registerJavaScriptProxy需要和deleteJavaScriptRegister接口配合使用,防止内存泄漏。
1608> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。
1609> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。
1610> - 同一方法在同步与异步列表中重复注册,将默认异步调用。
1611> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。
1612> - 异步的作用在于:H5线程将异步JavaScript任务提交给ETS主线程后,无需等待任务执行完成并返回结果,H5线程即可继续执行后续任务。这在执行耗时较长的JavaScript任务或ETS线程较为拥堵的情况下,可以有效减少H5线程因JavaScript任务而被阻塞的情况。然而,异步JavaScript任务无法返回值,且任务执行的顺序无法保证,因此需要根据具体情境判断是否使用同步或异步方式。
1613
1614**系统能力:** SystemCapability.Web.Webview.Core
1615
1616**参数:**
1617
1618| 参数名     | 类型       | 必填 | 说明                                        |
1619| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1620| object     | object         | 是   | 参与注册的应用侧JavaScript对象。可以单独声明方法和属性,但无法同时进行注册与使用。对象只包含属性时,H5可以访问对象中的属性。对象只包含方法时,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)。 |
1621| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1622| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的同步方法。                       |
1623| asyncMethodList<sup>12+</sup> | Array\<string> | 否   | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。  |
1624| permission<sup>12+</sup> | string | 否   | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。|
1625
1626**错误码:**
1627
1628以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1629
1630| 错误码ID | 错误信息                                                     |
1631| -------- | ------------------------------------------------------------ |
1632| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1633| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1634
1635**示例:**
1636
1637```ts
1638// xxx.ets
1639import { webview } from '@kit.ArkWeb';
1640import { BusinessError } from '@kit.BasicServicesKit';
1641
1642class TestObj {
1643  constructor() {
1644  }
1645
1646  test(testStr: string): string {
1647    console.log('Web Component str' + testStr);
1648    return testStr;
1649  }
1650
1651  toString(): void {
1652    console.log('Web Component toString');
1653  }
1654
1655  testNumber(testNum: number): number {
1656    console.log('Web Component number' + testNum);
1657    return testNum;
1658  }
1659
1660  asyncTestBool(testBol: boolean): void {
1661    console.log('Web Component boolean' + testBol);
1662  }
1663}
1664
1665class WebObj {
1666  constructor() {
1667  }
1668
1669  webTest(): string {
1670    console.log('Web test');
1671    return "Web test";
1672  }
1673
1674  webString(): void {
1675    console.log('Web test toString');
1676  }
1677}
1678
1679class AsyncObj {
1680  constructor() {
1681  }
1682
1683  asyncTest(): void {
1684    console.log('Async test');
1685  }
1686
1687  asyncString(testStr: string): void {
1688    console.log('Web async string' + testStr);
1689  }
1690}
1691
1692@Entry
1693@Component
1694struct Index {
1695  controller: webview.WebviewController = new webview.WebviewController();
1696  @State testObjtest: TestObj = new TestObj();
1697  @State webTestObj: WebObj = new WebObj();
1698  @State asyncTestObj: AsyncObj = new AsyncObj();
1699
1700  build() {
1701    Column() {
1702      Button('refresh')
1703        .onClick(() => {
1704          try {
1705            this.controller.refresh();
1706          } catch (error) {
1707            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1708          }
1709        })
1710      Button('Register JavaScript To Window')
1711        .onClick(() => {
1712          try {
1713            // 同时注册同步和异步函数
1714            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]);
1715            // 仅注册同步函数
1716            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
1717            // 仅注册异步函数
1718            this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]);
1719          } catch (error) {
1720            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1721          }
1722        })
1723      Button('deleteJavaScriptRegister')
1724        .onClick(() => {
1725          try {
1726            this.controller.deleteJavaScriptRegister("objName");
1727            this.controller.deleteJavaScriptRegister("objTestName");
1728            this.controller.deleteJavaScriptRegister("objAsyncName");
1729          } catch (error) {
1730            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1731          }
1732        })
1733      Web({ src: $rawfile('index.html'), controller: this.controller })
1734        .javaScriptAccess(true)
1735    }
1736  }
1737}
1738```
1739
1740加载的html文件。
1741```html
1742<!-- index.html -->
1743<!DOCTYPE html>
1744<html>
1745    <meta charset="utf-8">
1746    <body>
1747      <button type="button" onclick="htmlTest()">Click Me!</button>
1748      <p id="demo"></p>
1749      <p id="webDemo"></p>
1750      <p id="asyncDemo"></p>
1751    </body>
1752    <script type="text/javascript">
1753    function htmlTest() {
1754      // This function call expects to return "ArkUI Web Component"
1755      let str=objName.test("webtest data");
1756      objName.testNumber(1);
1757      objName.asyncTestBool(true);
1758      document.getElementById("demo").innerHTML=str;
1759      console.log('objName.test result:'+ str)
1760
1761      // This function call expects to return "Web test"
1762      let webStr = objTestName.webTest();
1763      document.getElementById("webDemo").innerHTML=webStr;
1764      console.log('objTestName.webTest result:'+ webStr)
1765
1766      objAsyncName.asyncTest();
1767      objAsyncName.asyncString("async test data");
1768    }
1769</script>
1770</html>
1771```
1772更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。
1773
1774### runJavaScript
1775
1776runJavaScript(script: string, callback : AsyncCallback\<string>): void
1777
1778异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1779
1780**系统能力:** SystemCapability.Web.Webview.Core
1781
1782**参数:**
1783
1784| 参数名   | 类型                 | 必填 | 说明                         |
1785| -------- | -------------------- | ---- | ---------------------------- |
1786| script   | string                   | 是   | JavaScript脚本。                                             |
1787| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1788
1789**错误码:**
1790
1791以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1792
1793| 错误码ID | 错误信息                                                     |
1794| -------- | ------------------------------------------------------------ |
1795| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1796| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1797
1798**示例:**
1799
1800```ts
1801import { webview } from '@kit.ArkWeb';
1802import { BusinessError } from '@kit.BasicServicesKit';
1803
1804@Entry
1805@Component
1806struct WebComponent {
1807  controller: webview.WebviewController = new webview.WebviewController();
1808  @State webResult: string = '';
1809
1810  build() {
1811    Column() {
1812      Text(this.webResult).fontSize(20)
1813      Web({ src: $rawfile('index.html'), controller: this.controller })
1814        .javaScriptAccess(true)
1815        .onPageEnd(e => {
1816          try {
1817            this.controller.runJavaScript(
1818              'test()',
1819              (error, result) => {
1820                if (error) {
1821                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1822                  return;
1823                }
1824                if (result) {
1825                  this.webResult = result;
1826                  console.info(`The test() return value is: ${result}`);
1827                }
1828              });
1829            if (e) {
1830              console.info('url: ', e.url);
1831            }
1832          } catch (error) {
1833            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1834          }
1835        })
1836    }
1837  }
1838}
1839```
1840
1841加载的html文件。
1842```html
1843<!-- index.html -->
1844<!DOCTYPE html>
1845<html>
1846  <meta charset="utf-8">
1847  <body>
1848      Hello world!
1849  </body>
1850  <script type="text/javascript">
1851  function test() {
1852      console.log('Ark WebComponent')
1853      return "This value is from index.html"
1854  }
1855  </script>
1856</html>
1857```
1858
1859### runJavaScript
1860
1861runJavaScript(script: string): Promise\<string>
1862
1863异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1864
1865**系统能力:** SystemCapability.Web.Webview.Core
1866
1867**参数:**
1868
1869| 参数名 | 类型 | 必填 | 说明         |
1870| ------ | -------- | ---- | ---------------- |
1871| script | string   | 是   | JavaScript脚本。 |
1872
1873**返回值:**
1874
1875| 类型            | 说明                                                |
1876| --------------- | --------------------------------------------------- |
1877| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1878
1879**错误码:**
1880
1881以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1882
1883| 错误码ID | 错误信息                                                     |
1884| -------- | ------------------------------------------------------------ |
1885| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1886| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1887
1888**示例:**
1889
1890```ts
1891// xxx.ets
1892import { webview } from '@kit.ArkWeb';
1893import { BusinessError } from '@kit.BasicServicesKit';
1894
1895@Entry
1896@Component
1897struct WebComponent {
1898  controller: webview.WebviewController = new webview.WebviewController();
1899
1900  build() {
1901    Column() {
1902      Web({ src: $rawfile('index.html'), controller: this.controller })
1903        .javaScriptAccess(true)
1904        .onPageEnd(e => {
1905          try {
1906            this.controller.runJavaScript('test()')
1907              .then((result) => {
1908                console.log('result: ' + result);
1909              })
1910              .catch((error: BusinessError) => {
1911                console.error("error: " + error);
1912              })
1913            if (e) {
1914              console.info('url: ', e.url);
1915            }
1916          } catch (error) {
1917            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1918          }
1919        })
1920    }
1921  }
1922}
1923```
1924
1925加载的html文件。
1926```html
1927<!-- index.html -->
1928<!DOCTYPE html>
1929<html>
1930  <meta charset="utf-8">
1931  <body>
1932      Hello world!
1933  </body>
1934  <script type="text/javascript">
1935  function test() {
1936      console.log('Ark WebComponent')
1937      return "This value is from index.html"
1938  }
1939  </script>
1940</html>
1941```
1942
1943### runJavaScriptExt<sup>10+</sup>
1944
1945runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void
1946
1947异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1948
1949**系统能力:** SystemCapability.Web.Webview.Core
1950
1951**参数:**
1952
1953| 参数名   | 类型                 | 必填 | 说明                         |
1954| -------- | -------------------- | ---- | ---------------------------- |
1955| script   | string \| ArrayBuffer<sup>12+</sup>         | 是   | JavaScript脚本。 |
1956| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1957
1958**错误码:**
1959
1960以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1961
1962| 错误码ID | 错误信息                                                     |
1963| -------- | ------------------------------------------------------------ |
1964| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1965| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1966
1967**示例:**
1968
1969```ts
1970import { webview } from '@kit.ArkWeb';
1971import { BusinessError } from '@kit.BasicServicesKit';
1972
1973@Entry
1974@Component
1975struct WebComponent {
1976  controller: webview.WebviewController = new webview.WebviewController();
1977  @State msg1: string = '';
1978  @State msg2: string = '';
1979
1980  build() {
1981    Column() {
1982      Text(this.msg1).fontSize(20)
1983      Text(this.msg2).fontSize(20)
1984      Web({ src: $rawfile('index.html'), controller: this.controller })
1985        .javaScriptAccess(true)
1986        .onPageEnd(e => {
1987          try {
1988            this.controller.runJavaScriptExt(
1989              'test()',
1990              (error, result) => {
1991                if (error) {
1992                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
1993                  return;
1994                }
1995                if (result) {
1996                  try {
1997                    let type = result.getType();
1998                    switch (type) {
1999                      case webview.JsMessageType.STRING: {
2000                        this.msg1 = "result type:" + typeof (result.getString());
2001                        this.msg2 = "result getString:" + ((result.getString()));
2002                        break;
2003                      }
2004                      case webview.JsMessageType.NUMBER: {
2005                        this.msg1 = "result type:" + typeof (result.getNumber());
2006                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2007                        break;
2008                      }
2009                      case webview.JsMessageType.BOOLEAN: {
2010                        this.msg1 = "result type:" + typeof (result.getBoolean());
2011                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2012                        break;
2013                      }
2014                      case webview.JsMessageType.ARRAY_BUFFER: {
2015                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2016                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2017                        break;
2018                      }
2019                      case webview.JsMessageType.ARRAY: {
2020                        this.msg1 = "result type:" + typeof (result.getArray());
2021                        this.msg2 = "result getArray:" + result.getArray();
2022                        break;
2023                      }
2024                      default: {
2025                        this.msg1 = "default break, type:" + type;
2026                        break;
2027                      }
2028                    }
2029                  }
2030                  catch (resError) {
2031                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2032                  }
2033                }
2034              });
2035            if (e) {
2036              console.info('url: ', e.url);
2037            }
2038          } catch (error) {
2039            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2040          }
2041        })
2042    }
2043  }
2044}
2045```
2046
2047```ts
2048// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据。
2049import { webview } from '@kit.ArkWeb';
2050import { BusinessError } from '@kit.BasicServicesKit';
2051import { fileIo } from '@kit.CoreFileKit';
2052import { common } from '@kit.AbilityKit';
2053
2054@Entry
2055@Component
2056struct WebComponent {
2057  controller: webview.WebviewController = new webview.WebviewController();
2058  @State msg1: string = ''
2059  @State msg2: string = ''
2060
2061  build() {
2062    Column() {
2063      Text(this.msg1).fontSize(20)
2064      Text(this.msg2).fontSize(20)
2065      Button('runJavaScriptExt')
2066        .onClick(() => {
2067          try {
2068            let uiContext : UIContext = this.getUIContext();
2069            let context : Context | undefined = uiContext.getHostContext() as common.UIAbilityContext;
2070            let filePath = context!.filesDir + 'test.txt';
2071            // 新建并打开文件。
2072            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2073            // 写入一段内容至文件。
2074            fileIo.writeSync(file.fd, "test()");
2075            // 从文件中读取内容。
2076            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2077            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2078            // 关闭文件。
2079            fileIo.closeSync(file);
2080            this.controller.runJavaScriptExt(
2081              arrayBuffer,
2082              (error, result) => {
2083                if (error) {
2084                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
2085                  return;
2086                }
2087                if (result) {
2088                  try {
2089                    let type = result.getType();
2090                    switch (type) {
2091                      case webview.JsMessageType.STRING: {
2092                        this.msg1 = "result type:" + typeof (result.getString());
2093                        this.msg2 = "result getString:" + ((result.getString()));
2094                        break;
2095                      }
2096                      case webview.JsMessageType.NUMBER: {
2097                        this.msg1 = "result type:" + typeof (result.getNumber());
2098                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2099                        break;
2100                      }
2101                      case webview.JsMessageType.BOOLEAN: {
2102                        this.msg1 = "result type:" + typeof (result.getBoolean());
2103                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2104                        break;
2105                      }
2106                      case webview.JsMessageType.ARRAY_BUFFER: {
2107                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2108                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2109                        break;
2110                      }
2111                      case webview.JsMessageType.ARRAY: {
2112                        this.msg1 = "result type:" + typeof (result.getArray());
2113                        this.msg2 = "result getArray:" + result.getArray();
2114                        break;
2115                      }
2116                      default: {
2117                        this.msg1 = "default break, type:" + type;
2118                        break;
2119                      }
2120                    }
2121                  }
2122                  catch (resError) {
2123                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2124                  }
2125                }
2126              });
2127          } catch (error) {
2128            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2129          }
2130        })
2131      Web({ src: $rawfile('index.html'), controller: this.controller })
2132        .javaScriptAccess(true)
2133    }
2134  }
2135}
2136```
2137
2138加载的html文件。
2139```html
2140<!-- index.html -->
2141<!DOCTYPE html>
2142<html lang="en-gb">
2143<body>
2144<h1>run JavaScript Ext demo</h1>
2145</body>
2146<script type="text/javascript">
2147function test() {
2148  return "hello, world";
2149}
2150</script>
2151</html>
2152```
2153
2154### runJavaScriptExt<sup>10+</sup>
2155
2156runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt>
2157
2158异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
2159
2160**系统能力:** SystemCapability.Web.Webview.Core
2161
2162**参数:**
2163
2164| 参数名 | 类型 | 必填 | 说明         |
2165| ------ | -------- | ---- | ---------------- |
2166| script | string \| ArrayBuffer<sup>12+</sup> | 是   | JavaScript脚本。 |
2167
2168**返回值:**
2169
2170| 类型            | 说明                                                |
2171| --------------- | --------------------------------------------------- |
2172| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
2173
2174**错误码:**
2175
2176以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2177
2178| 错误码ID | 错误信息                                                     |
2179| -------- | ------------------------------------------------------------ |
2180| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2181| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2182
2183**示例:**
2184
2185```ts
2186// xxx.ets
2187import { webview } from '@kit.ArkWeb';
2188import { BusinessError } from '@kit.BasicServicesKit';
2189
2190@Entry
2191@Component
2192struct WebComponent {
2193  controller: webview.WebviewController = new webview.WebviewController();
2194  @State webResult: string = '';
2195  @State msg1: string = '';
2196  @State msg2: string = '';
2197
2198  build() {
2199    Column() {
2200      Text(this.webResult).fontSize(20)
2201      Text(this.msg1).fontSize(20)
2202      Text(this.msg2).fontSize(20)
2203      Web({ src: $rawfile('index.html'), controller: this.controller })
2204        .javaScriptAccess(true)
2205        .onPageEnd(() => {
2206          this.controller.runJavaScriptExt('test()')
2207            .then((result) => {
2208              try {
2209                let type = result.getType();
2210                switch (type) {
2211                  case webview.JsMessageType.STRING: {
2212                    this.msg1 = "result type:" + typeof (result.getString());
2213                    this.msg2 = "result getString:" + ((result.getString()));
2214                    break;
2215                  }
2216                  case webview.JsMessageType.NUMBER: {
2217                    this.msg1 = "result type:" + typeof (result.getNumber());
2218                    this.msg2 = "result getNumber:" + ((result.getNumber()));
2219                    break;
2220                  }
2221                  case webview.JsMessageType.BOOLEAN: {
2222                    this.msg1 = "result type:" + typeof (result.getBoolean());
2223                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2224                    break;
2225                  }
2226                  case webview.JsMessageType.ARRAY_BUFFER: {
2227                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2228                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2229                    break;
2230                  }
2231                  case webview.JsMessageType.ARRAY: {
2232                    this.msg1 = "result type:" + typeof (result.getArray());
2233                    this.msg2 = "result getArray:" + result.getArray();
2234                    break;
2235                  }
2236                  default: {
2237                    this.msg1 = "default break, type:" + type;
2238                    break;
2239                  }
2240                }
2241              }
2242              catch (resError) {
2243                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2244              }
2245            }).catch((error: BusinessError) => {
2246            console.error("error: " + error);
2247          })
2248        })
2249    }
2250  }
2251}
2252```
2253
2254```ts
2255// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据。
2256import { webview } from '@kit.ArkWeb';
2257import { BusinessError } from '@kit.BasicServicesKit';
2258import { fileIo } from '@kit.CoreFileKit';
2259import { common } from '@kit.AbilityKit';
2260
2261@Entry
2262@Component
2263struct WebComponent {
2264  controller: webview.WebviewController = new webview.WebviewController();
2265  @State msg1: string = '';
2266  @State msg2: string = '';
2267
2268  build() {
2269    Column() {
2270      Text(this.msg1).fontSize(20)
2271      Text(this.msg2).fontSize(20)
2272      Button('runJavaScriptExt')
2273        .onClick(() => {
2274          try {
2275            let uiContext : UIContext = this.getUIContext();
2276            let context : Context | undefined = uiContext.getHostContext() as common.UIAbilityContext;
2277            let filePath = context!.filesDir + 'test.txt';
2278            // 新建并打开文件。
2279            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2280            // 写入一段内容至文件。
2281            fileIo.writeSync(file.fd, "test()");
2282            // 从文件中读取内容。
2283            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2284            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2285            // 关闭文件。
2286            fileIo.closeSync(file);
2287            this.controller.runJavaScriptExt(arrayBuffer)
2288              .then((result) => {
2289                try {
2290                  let type = result.getType();
2291                  switch (type) {
2292                    case webview.JsMessageType.STRING: {
2293                      this.msg1 = "result type:" + typeof (result.getString());
2294                      this.msg2 = "result getString:" + ((result.getString()));
2295                      break;
2296                    }
2297                    case webview.JsMessageType.NUMBER: {
2298                      this.msg1 = "result type:" + typeof (result.getNumber());
2299                      this.msg2 = "result getNumber:" + ((result.getNumber()));
2300                      break;
2301                    }
2302                    case webview.JsMessageType.BOOLEAN: {
2303                      this.msg1 = "result type:" + typeof (result.getBoolean());
2304                      this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2305                      break;
2306                    }
2307                    case webview.JsMessageType.ARRAY_BUFFER: {
2308                      this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2309                      this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2310                      break;
2311                    }
2312                    case webview.JsMessageType.ARRAY: {
2313                      this.msg1 = "result type:" + typeof (result.getArray());
2314                      this.msg2 = "result getArray:" + result.getArray();
2315                      break;
2316                    }
2317                    default: {
2318                      this.msg1 = "default break, type:" + type;
2319                      break;
2320                    }
2321                  }
2322                }
2323                catch (resError) {
2324                  console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2325                }
2326              })
2327              .catch((error: BusinessError) => {
2328                console.error("error: " + error);
2329              })
2330          } catch (error) {
2331            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2332          }
2333        })
2334      Web({ src: $rawfile('index.html'), controller: this.controller })
2335        .javaScriptAccess(true)
2336    }
2337  }
2338}
2339```
2340
2341加载的html文件。
2342```html
2343<!-- index.html -->
2344<!DOCTYPE html>
2345<html lang="en-gb">
2346<body>
2347<h1>run JavaScript Ext demo</h1>
2348</body>
2349<script type="text/javascript">
2350function test() {
2351  return "hello, world";
2352}
2353</script>
2354</html>
2355```
2356
2357### deleteJavaScriptRegister
2358
2359deleteJavaScriptRegister(name: string): void
2360
2361删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
2362
2363**系统能力:** SystemCapability.Web.Webview.Core
2364
2365**参数:**
2366
2367| 参数名 | 类型 | 必填 | 说明  |
2368| ------ | -------- | ---- | ---- |
2369| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
2370
2371**错误码:**
2372
2373以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2374
2375| 错误码ID | 错误信息                                                     |
2376| -------- | ------------------------------------------------------------ |
2377| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2378| 17100008 | Failed to delete JavaScriptProxy because it does not exist.                               |
2379| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2380
2381**示例:**
2382
2383```ts
2384// xxx.ets
2385import { webview } from '@kit.ArkWeb';
2386import { BusinessError } from '@kit.BasicServicesKit';
2387
2388class TestObj {
2389  constructor() {
2390  }
2391
2392  test(): string {
2393    return "ArkUI Web Component";
2394  }
2395
2396  toString(): void {
2397    console.log('Web Component toString');
2398  }
2399}
2400
2401@Entry
2402@Component
2403struct WebComponent {
2404  controller: webview.WebviewController = new webview.WebviewController();
2405  @State testObjtest: TestObj = new TestObj();
2406  @State name: string = 'objName';
2407  build() {
2408    Column() {
2409      Button('refresh')
2410        .onClick(() => {
2411          try {
2412            this.controller.refresh();
2413          } catch (error) {
2414            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2415          }
2416        })
2417      Button('Register JavaScript To Window')
2418        .onClick(() => {
2419          try {
2420            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
2421          } catch (error) {
2422            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2423          }
2424        })
2425      Button('deleteJavaScriptRegister')
2426        .onClick(() => {
2427          try {
2428            this.controller.deleteJavaScriptRegister(this.name);
2429          } catch (error) {
2430            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2431          }
2432        })
2433      Web({ src: $rawfile('index.html'), controller: this.controller })
2434        .javaScriptAccess(true)
2435    }
2436  }
2437}
2438```
2439
2440加载的html文件。
2441```html
2442<!-- index.html -->
2443<!DOCTYPE html>
2444<html>
2445    <meta charset="utf-8">
2446    <body>
2447      <button type="button" onclick="htmlTest()">Click Me!</button>
2448      <p id="demo"></p>
2449    </body>
2450    <script type="text/javascript">
2451    function htmlTest() {
2452      let str=objName.test();
2453      document.getElementById("demo").innerHTML=str;
2454      console.log('objName.test result:'+ str)
2455    }
2456</script>
2457</html>
2458```
2459
2460### zoom
2461
2462zoom(factor: number): void
2463
2464调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。
2465
2466**系统能力:** SystemCapability.Web.Webview.Core
2467
2468**参数:**
2469
2470| 参数名 | 类型 | 必填 | 说明 |
2471| ------ | -------- | ---- | ------------------------------------------------------------ |
2472| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。<br>取值范围:(0,100]。 |
2473
2474**错误码:**
2475
2476以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2477
2478| 错误码ID | 错误信息                                                     |
2479| -------- | ------------------------------------------------------------ |
2480| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2481| 17100004 | Function not enabled.                                         |
2482| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2483
2484**示例:**
2485
2486```ts
2487// xxx.ets
2488import { webview } from '@kit.ArkWeb';
2489import { BusinessError } from '@kit.BasicServicesKit';
2490
2491@Entry
2492@Component
2493struct WebComponent {
2494  controller: webview.WebviewController = new webview.WebviewController();
2495  @State factor: number = 1;
2496
2497  build() {
2498    Column() {
2499      Button('zoom')
2500        .onClick(() => {
2501          try {
2502            this.controller.zoom(this.factor);
2503          } catch (error) {
2504            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2505          }
2506        })
2507      Web({ src: 'www.example.com', controller: this.controller })
2508        .zoomAccess(true)
2509    }
2510  }
2511}
2512```
2513
2514### searchAllAsync
2515
2516searchAllAsync(searchString: string): void
2517
2518异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。
2519
2520**系统能力:** SystemCapability.Web.Webview.Core
2521
2522**参数:**
2523
2524| 参数名       | 类型 | 必填 | 说明       |
2525| ------------ | -------- | ---- | -------------- |
2526| searchString | string   | 是   | 查找的关键字。 |
2527
2528**错误码:**
2529
2530以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2531
2532| 错误码ID | 错误信息                                                     |
2533| -------- | ------------------------------------------------------------ |
2534| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2535| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2536
2537**示例:**
2538
2539```ts
2540// xxx.ets
2541import { webview } from '@kit.ArkWeb';
2542import { BusinessError } from '@kit.BasicServicesKit';
2543
2544@Entry
2545@Component
2546struct WebComponent {
2547  controller: webview.WebviewController = new webview.WebviewController();
2548  @State searchString: string = "Hello World";
2549
2550  build() {
2551    Column() {
2552      Button('searchString')
2553        .onClick(() => {
2554          try {
2555            this.controller.searchAllAsync(this.searchString);
2556          } catch (error) {
2557            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2558          }
2559        })
2560      Web({ src: $rawfile('index.html'), controller: this.controller })
2561        .onSearchResultReceive(ret => {
2562          if (ret) {
2563            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2564              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2565          }
2566        })
2567    }
2568  }
2569}
2570```
2571
2572加载的html文件。
2573```html
2574<!-- index.html -->
2575<!DOCTYPE html>
2576<html>
2577  <body>
2578    <p>Hello World Highlight Hello World</p>
2579  </body>
2580</html>
2581```
2582
2583### clearMatches
2584
2585clearMatches(): void
2586
2587清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2588
2589**系统能力:** SystemCapability.Web.Webview.Core
2590
2591**错误码:**
2592
2593以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2594
2595| 错误码ID | 错误信息                                                     |
2596| -------- | ------------------------------------------------------------ |
2597| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2598
2599**示例:**
2600
2601```ts
2602// xxx.ets
2603import { webview } from '@kit.ArkWeb';
2604import { BusinessError } from '@kit.BasicServicesKit';
2605
2606@Entry
2607@Component
2608struct WebComponent {
2609  controller: webview.WebviewController = new webview.WebviewController();
2610
2611  build() {
2612    Column() {
2613      Button('clearMatches')
2614        .onClick(() => {
2615          try {
2616            this.controller.clearMatches();
2617          } catch (error) {
2618            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2619          }
2620        })
2621      Web({ src: $rawfile('index.html'), controller: this.controller })
2622    }
2623  }
2624}
2625```
2626
2627加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2628
2629### searchNext
2630
2631searchNext(forward: boolean): void
2632
2633滚动到下一个匹配的查找结果并高亮。
2634
2635**系统能力:** SystemCapability.Web.Webview.Core
2636
2637**参数:**
2638
2639| 参数名  | 类型 | 必填 | 说明               |
2640| ------- | -------- | ---- | ---------------------- |
2641| forward | boolean  | 是   | 从前向后或者逆向查找方式。true表示从前向后查找,false表示从后向前查找。 |
2642
2643**错误码:**
2644
2645以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2646
2647| 错误码ID | 错误信息                                                     |
2648| -------- | ------------------------------------------------------------ |
2649| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2650| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2651
2652**示例:**
2653
2654```ts
2655// xxx.ets
2656import { webview } from '@kit.ArkWeb';
2657import { BusinessError } from '@kit.BasicServicesKit';
2658
2659@Entry
2660@Component
2661struct WebComponent {
2662  controller: webview.WebviewController = new webview.WebviewController();
2663
2664  build() {
2665    Column() {
2666      Button('searchNext')
2667        .onClick(() => {
2668          try {
2669            this.controller.searchNext(true);
2670          } catch (error) {
2671            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2672          }
2673        })
2674      Web({ src: $rawfile('index.html'), controller: this.controller })
2675    }
2676  }
2677}
2678```
2679
2680加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2681
2682### clearSslCache
2683
2684clearSslCache(): void
2685
2686清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2687
2688**系统能力:** SystemCapability.Web.Webview.Core
2689
2690**错误码:**
2691
2692以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2693
2694| 错误码ID | 错误信息                                                     |
2695| -------- | ------------------------------------------------------------ |
2696| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2697
2698**示例:**
2699
2700```ts
2701// xxx.ets
2702import { webview } from '@kit.ArkWeb';
2703import { BusinessError } from '@kit.BasicServicesKit';
2704
2705@Entry
2706@Component
2707struct WebComponent {
2708  controller: webview.WebviewController = new webview.WebviewController();
2709
2710  build() {
2711    Column() {
2712      Button('clearSslCache')
2713        .onClick(() => {
2714          try {
2715            this.controller.clearSslCache();
2716          } catch (error) {
2717            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2718          }
2719        })
2720      Web({ src: 'www.example.com', controller: this.controller })
2721    }
2722  }
2723}
2724```
2725
2726### clearClientAuthenticationCache
2727
2728clearClientAuthenticationCache(): void
2729
2730清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2731
2732**系统能力:** SystemCapability.Web.Webview.Core
2733
2734**错误码:**
2735
2736以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2737
2738| 错误码ID | 错误信息                                                     |
2739| -------- | ------------------------------------------------------------ |
2740| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2741
2742**示例:**
2743
2744```ts
2745// xxx.ets
2746import { webview } from '@kit.ArkWeb';
2747import { BusinessError } from '@kit.BasicServicesKit';
2748
2749@Entry
2750@Component
2751struct WebComponent {
2752  controller: webview.WebviewController = new webview.WebviewController();
2753
2754  build() {
2755    Column() {
2756      Button('clearClientAuthenticationCache')
2757        .onClick(() => {
2758          try {
2759            this.controller.clearClientAuthenticationCache();
2760          } catch (error) {
2761            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2762          }
2763        })
2764      Web({ src: 'www.example.com', controller: this.controller })
2765    }
2766  }
2767}
2768```
2769
2770### createWebMessagePorts
2771
2772createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2773
2774创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2775
2776**系统能力:** SystemCapability.Web.Webview.Core
2777
2778**参数:**
2779
2780| 参数名 | 类型                   | 必填 | 说明                             |
2781| ------ | ---------------------- | ---- | :------------------------------|
2782| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 |
2783
2784**返回值:**
2785
2786| 类型                   | 说明              |
2787| ---------------------- | ----------------- |
2788| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 |
2789
2790**错误码:**
2791
2792以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2793
2794| 错误码ID | 错误信息                                                     |
2795| -------- | ------------------------------------------------------------ |
2796| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2797| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2798
2799**示例:**
2800
2801```ts
2802// xxx.ets
2803import { webview } from '@kit.ArkWeb';
2804import { BusinessError } from '@kit.BasicServicesKit';
2805
2806@Entry
2807@Component
2808struct WebComponent {
2809  controller: webview.WebviewController = new webview.WebviewController();
2810  ports: webview.WebMessagePort[] = [];
2811
2812  build() {
2813    Column() {
2814      Button('createWebMessagePorts')
2815        .onClick(() => {
2816          try {
2817            this.ports = this.controller.createWebMessagePorts();
2818            console.log("createWebMessagePorts size:" + this.ports.length);
2819          } catch (error) {
2820            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2821          }
2822        })
2823      Web({ src: 'www.example.com', controller: this.controller })
2824    }
2825  }
2826}
2827```
2828
2829### postMessage
2830
2831postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2832
2833发送Web消息端口到HTML。
2834
2835**系统能力:** SystemCapability.Web.Webview.Core
2836
2837**参数:**
2838
2839| 参数名 | 类型                   | 必填 | 说明                             |
2840| ------ | ---------------------- | ---- | :------------------------------- |
2841| name   | string                 | 是   | 要发送的消息名称。            |
2842| ports  | Array\<[WebMessagePort](#webmessageport)> | 是   | 要发送的消息端口。            |
2843| uri    | string                 | 是   | 接收该消息的URI。                |
2844
2845**错误码:**
2846
2847以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2848
2849| 错误码ID | 错误信息                                                     |
2850| -------- | ------------------------------------------------------------ |
2851| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2852| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2853
2854**示例:**
2855
2856```ts
2857// xxx.ets
2858import { webview } from '@kit.ArkWeb';
2859import { BusinessError } from '@kit.BasicServicesKit';
2860
2861@Entry
2862@Component
2863struct WebComponent {
2864  controller: webview.WebviewController = new webview.WebviewController();
2865  ports: webview.WebMessagePort[] = [];
2866  @State sendFromEts: string = 'Send this message from ets to HTML';
2867  @State receivedFromHtml: string = 'Display received message send from HTML';
2868
2869  build() {
2870    Column() {
2871      // 展示接收到的来自HTML的内容
2872      Text(this.receivedFromHtml)
2873      // 输入框的内容发送到html
2874      TextInput({ placeholder: 'Send this message from ets to HTML' })
2875        .onChange((value: string) => {
2876          this.sendFromEts = value;
2877        })
2878
2879      Button('postMessage')
2880        .onClick(() => {
2881          try {
2882            // 1、创建两个消息端口。
2883            this.ports = this.controller.createWebMessagePorts();
2884            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2885            this.ports[1].onMessageEvent((result: webview.WebMessage) => {
2886              let msg = 'Got msg from HTML:';
2887              if (typeof (result) == "string") {
2888                console.log("received string message from html5, string is:" + result);
2889                msg = msg + result;
2890              } else if (typeof (result) == "object") {
2891                if (result instanceof ArrayBuffer) {
2892                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2893                  msg = msg + "length is " + result.byteLength;
2894                } else {
2895                  console.log("not support");
2896                }
2897              } else {
2898                console.log("not support");
2899              }
2900              this.receivedFromHtml = msg;
2901            })
2902            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2903            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2904          } catch (error) {
2905            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2906          }
2907        })
2908
2909      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2910      Button('SendDataToHTML')
2911        .onClick(() => {
2912          try {
2913            if (this.ports && this.ports[1]) {
2914              this.ports[1].postMessageEvent(this.sendFromEts);
2915            } else {
2916              console.error(`ports is null, Please initialize first`);
2917            }
2918          } catch (error) {
2919            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2920          }
2921        })
2922      Web({ src: $rawfile('index.html'), controller: this.controller })
2923    }
2924  }
2925}
2926```
2927
2928加载的html文件。
2929```html
2930<!--index.html-->
2931<!DOCTYPE html>
2932<html>
2933<head>
2934    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2935    <title>WebView Message Port Demo</title>
2936</head>
2937
2938  <body>
2939    <h1>WebView Message Port Demo</h1>
2940    <div>
2941        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2942        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2943    </div>
2944    <p class="output">display received message send from ets</p>
2945  </body>
2946  <script src="xxx.js"></script>
2947</html>
2948```
2949
2950```js
2951//xxx.js
2952var h5Port;
2953var output = document.querySelector('.output');
2954window.addEventListener('message', function (event) {
2955    if (event.data == '__init_port__') {
2956        if (event.ports[0] != null) {
2957            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2958            h5Port.onmessage = function (event) {
2959              // 2. 接收ets侧发送过来的消息.
2960              var msg = 'Got message from ets:';
2961              var result = event.data;
2962              if (typeof(result) == "string") {
2963                console.log("received string message from html5, string is:" + result);
2964                msg = msg + result;
2965              } else if (typeof(result) == "object") {
2966                if (result instanceof ArrayBuffer) {
2967                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2968                  msg = msg + "length is " + result.byteLength;
2969                } else {
2970                  console.log("not support");
2971                }
2972              } else {
2973                console.log("not support");
2974              }
2975              output.innerHTML = msg;
2976            }
2977        }
2978    }
2979})
2980
2981// 3. 使用h5Port往ets侧发送消息.
2982function PostMsgToEts(data) {
2983    if (h5Port) {
2984      h5Port.postMessage(data);
2985    } else {
2986      console.error("h5Port is null, Please initialize first");
2987    }
2988}
2989```
2990
2991### requestFocus
2992
2993requestFocus(): void
2994
2995使当前web页面获取焦点。
2996
2997**系统能力:** SystemCapability.Web.Webview.Core
2998
2999**错误码:**
3000
3001以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3002
3003| 错误码ID | 错误信息                                                     |
3004| -------- | ------------------------------------------------------------ |
3005| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3006
3007**示例:**
3008
3009```ts
3010// xxx.ets
3011import { webview } from '@kit.ArkWeb';
3012import { BusinessError } from '@kit.BasicServicesKit';
3013
3014@Entry
3015@Component
3016struct WebComponent {
3017  controller: webview.WebviewController = new webview.WebviewController();
3018
3019  build() {
3020    Column() {
3021      Button('requestFocus')
3022        .onClick(() => {
3023          try {
3024            this.controller.requestFocus();
3025          } catch (error) {
3026            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3027          }
3028        });
3029      Web({ src: 'www.example.com', controller: this.controller })
3030    }
3031  }
3032}
3033```
3034
3035### zoomIn
3036
3037zoomIn(): void
3038
3039调用此接口将当前网页进行放大,比例为25%。
3040
3041**系统能力:** SystemCapability.Web.Webview.Core
3042
3043**错误码:**
3044
3045以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3046
3047| 错误码ID | 错误信息                                                     |
3048| -------- | ------------------------------------------------------------ |
3049| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3050| 17100004 | Function not enabled.                                         |
3051
3052**示例:**
3053
3054```ts
3055// xxx.ets
3056import { webview } from '@kit.ArkWeb';
3057import { BusinessError } from '@kit.BasicServicesKit';
3058
3059@Entry
3060@Component
3061struct WebComponent {
3062  controller: webview.WebviewController = new webview.WebviewController();
3063
3064  build() {
3065    Column() {
3066      Button('zoomIn')
3067        .onClick(() => {
3068          try {
3069            this.controller.zoomIn();
3070          } catch (error) {
3071            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3072          }
3073        })
3074      Web({ src: 'www.example.com', controller: this.controller })
3075    }
3076  }
3077}
3078```
3079
3080### zoomOut
3081
3082zoomOut(): void
3083
3084调用此接口将当前网页进行缩小,比例为20%。
3085
3086**系统能力:** SystemCapability.Web.Webview.Core
3087
3088**错误码:**
3089
3090以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3091
3092| 错误码ID | 错误信息                                                     |
3093| -------- | ------------------------------------------------------------ |
3094| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3095| 17100004 | Function not enabled.                                         |
3096
3097**示例:**
3098
3099```ts
3100// xxx.ets
3101import { webview } from '@kit.ArkWeb';
3102import { BusinessError } from '@kit.BasicServicesKit';
3103
3104@Entry
3105@Component
3106struct WebComponent {
3107  controller: webview.WebviewController = new webview.WebviewController();
3108
3109  build() {
3110    Column() {
3111      Button('zoomOut')
3112        .onClick(() => {
3113          try {
3114            this.controller.zoomOut();
3115          } catch (error) {
3116            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3117          }
3118        })
3119      Web({ src: 'www.example.com', controller: this.controller })
3120    }
3121  }
3122}
3123```
3124
3125### getHitTestValue<sup>(deprecated)</sup>
3126
3127getHitTestValue(): HitTestValue
3128
3129获取当前被点击区域的元素信息。
3130
3131> **说明:**
3132>
3133> 从API version11开始支持,从API version 18开始废弃。建议使用[getLastHitTest](#getlasthittest18)替代。
3134
3135**系统能力:** SystemCapability.Web.Webview.Core
3136
3137**返回值:**
3138
3139| 类型         | 说明                 |
3140| ------------ | -------------------- |
3141| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
3142
3143**错误码:**
3144
3145以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3146
3147| 错误码ID | 错误信息                                                     |
3148| -------- | ------------------------------------------------------------ |
3149| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3150
3151**示例:**
3152
3153```ts
3154// xxx.ets
3155import { webview } from '@kit.ArkWeb';
3156import { BusinessError } from '@kit.BasicServicesKit';
3157
3158@Entry
3159@Component
3160struct WebComponent {
3161  controller: webview.WebviewController = new webview.WebviewController();
3162
3163  build() {
3164    Column() {
3165      Button('getHitTestValue')
3166        .onClick(() => {
3167          try {
3168            let hitValue = this.controller.getHitTestValue();
3169            console.log("hitType: " + hitValue.type);
3170            console.log("extra: " + hitValue.extra);
3171          } catch (error) {
3172            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3173          }
3174        })
3175      Web({ src: 'www.example.com', controller: this.controller })
3176    }
3177  }
3178}
3179```
3180
3181### getWebId
3182
3183getWebId(): number
3184
3185获取当前Web组件的索引值,用于多个Web组件的管理。
3186
3187**系统能力:** SystemCapability.Web.Webview.Core
3188
3189**返回值:**
3190
3191| 类型   | 说明                  |
3192| ------ | --------------------- |
3193| number | 当前Web组件的索引值。 |
3194
3195**错误码:**
3196
3197以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3198
3199| 错误码ID | 错误信息                                                     |
3200| -------- | ------------------------------------------------------------ |
3201| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3202
3203**示例:**
3204
3205```ts
3206// xxx.ets
3207import { webview } from '@kit.ArkWeb';
3208import { BusinessError } from '@kit.BasicServicesKit';
3209
3210@Entry
3211@Component
3212struct WebComponent {
3213  controller: webview.WebviewController = new webview.WebviewController();
3214
3215  build() {
3216    Column() {
3217      Button('getWebId')
3218        .onClick(() => {
3219          try {
3220            let id = this.controller.getWebId();
3221            console.log("id: " + id);
3222          } catch (error) {
3223            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3224          }
3225        })
3226      Web({ src: 'www.example.com', controller: this.controller })
3227    }
3228  }
3229}
3230```
3231
3232### getUserAgent
3233
3234getUserAgent(): string
3235
3236获取当前默认用户代理。
3237
3238默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md)
3239
3240**系统能力:** SystemCapability.Web.Webview.Core
3241
3242**返回值:**
3243
3244| 类型   | 说明           |
3245| ------ | -------------- |
3246| string | 默认用户代理。 |
3247
3248**错误码:**
3249
3250以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3251
3252| 错误码ID | 错误信息                                                     |
3253| -------- | ------------------------------------------------------------ |
3254| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3255
3256**示例:**
3257
3258```ts
3259// xxx.ets
3260import { webview } from '@kit.ArkWeb';
3261import { BusinessError } from '@kit.BasicServicesKit';
3262
3263@Entry
3264@Component
3265struct WebComponent {
3266  controller: webview.WebviewController = new webview.WebviewController();
3267
3268  build() {
3269    Column() {
3270      Button('getUserAgent')
3271        .onClick(() => {
3272          try {
3273            let userAgent = this.controller.getUserAgent();
3274            console.log("userAgent: " + userAgent);
3275          } catch (error) {
3276            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3277          }
3278        })
3279      Web({ src: 'www.example.com', controller: this.controller })
3280    }
3281  }
3282}
3283```
3284
3285支持开发者基于默认的User-Agent去定制User-Agent。
3286```ts
3287// xxx.ets
3288import { webview } from '@kit.ArkWeb';
3289import { BusinessError } from '@kit.BasicServicesKit';
3290
3291@Entry
3292@Component
3293struct WebComponent {
3294  controller: webview.WebviewController = new webview.WebviewController();
3295  @State ua: string = "";
3296
3297  aboutToAppear(): void {
3298    webview.once('webInited', () => {
3299      try {
3300        // 应用侧用法示例,定制User-Agent。
3301        this.ua = this.controller.getUserAgent() + 'xxx';
3302        this.controller.setCustomUserAgent(this.ua);
3303      } catch (error) {
3304        console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3305      }
3306    })
3307  }
3308
3309  build() {
3310    Column() {
3311      Web({ src: 'www.example.com', controller: this.controller })
3312    }
3313  }
3314}
3315```
3316
3317### getTitle
3318
3319getTitle(): string
3320
3321获取当前网页的标题。
3322
3323**系统能力:** SystemCapability.Web.Webview.Core
3324
3325**返回值:**
3326
3327| 类型   | 说明                 |
3328| ------ | -------------------- |
3329| string | 当前网页的标题。 |
3330
3331**错误码:**
3332
3333以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3334
3335| 错误码ID | 错误信息                                                     |
3336| -------- | ------------------------------------------------------------ |
3337| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3338
3339**示例:**
3340
3341```ts
3342// xxx.ets
3343import { webview } from '@kit.ArkWeb';
3344import { BusinessError } from '@kit.BasicServicesKit';
3345
3346@Entry
3347@Component
3348struct WebComponent {
3349  controller: webview.WebviewController = new webview.WebviewController();
3350
3351  build() {
3352    Column() {
3353      Button('getTitle')
3354        .onClick(() => {
3355          try {
3356            let title = this.controller.getTitle();
3357            console.log("title: " + title);
3358          } catch (error) {
3359            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3360          }
3361        })
3362      Web({ src: 'www.example.com', controller: this.controller })
3363    }
3364  }
3365}
3366```
3367
3368### getPageHeight
3369
3370getPageHeight(): number
3371
3372获取当前网页的页面高度。
3373
3374**系统能力:** SystemCapability.Web.Webview.Core
3375
3376**返回值:**
3377
3378| 类型   | 说明                 |
3379| ------ | -------------------- |
3380| number | 当前网页的页面高度。单位:vp。 |
3381
3382**错误码:**
3383
3384以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3385
3386| 错误码ID | 错误信息                                                     |
3387| -------- | ------------------------------------------------------------ |
3388| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3389
3390**示例:**
3391
3392```ts
3393// xxx.ets
3394import { webview } from '@kit.ArkWeb';
3395import { BusinessError } from '@kit.BasicServicesKit';
3396
3397@Entry
3398@Component
3399struct WebComponent {
3400  controller: webview.WebviewController = new webview.WebviewController();
3401
3402  build() {
3403    Column() {
3404      Button('getPageHeight')
3405        .onClick(() => {
3406          try {
3407            let pageHeight = this.controller.getPageHeight();
3408            console.log("pageHeight : " + pageHeight);
3409          } catch (error) {
3410            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3411          }
3412        })
3413      Web({ src: 'www.example.com', controller: this.controller })
3414    }
3415  }
3416}
3417```
3418
3419### storeWebArchive
3420
3421storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
3422
3423以回调方式异步保存当前页面。
3424
3425**系统能力:** SystemCapability.Web.Webview.Core
3426
3427**参数:**
3428
3429| 参数名   | 类型              | 必填 | 说明                                                         |
3430| -------- | --------------------- | ---- | ------------------------------------------------------------ |
3431| baseName | string                | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3432| autoName | boolean               | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3433| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
3434
3435**错误码:**
3436
3437以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3438
3439| 错误码ID | 错误信息                                                     |
3440| -------- | ------------------------------------------------------------ |
3441| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3442| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3443| 17100003 | Invalid resource path or file type.                          |
3444
3445**示例:**
3446
3447```ts
3448// xxx.ets
3449import { webview } from '@kit.ArkWeb';
3450import { BusinessError } from '@kit.BasicServicesKit';
3451
3452@Entry
3453@Component
3454struct WebComponent {
3455  controller: webview.WebviewController = new webview.WebviewController();
3456
3457  build() {
3458    Column() {
3459      Button('storeWebArchive')
3460        .onClick(() => {
3461          try {
3462            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
3463              if (error) {
3464                console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3465                return;
3466              }
3467              if (filename != null) {
3468                console.info(`save web archive success: ${filename}`);
3469              }
3470            });
3471          } catch (error) {
3472            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3473          }
3474        })
3475      Web({ src: 'www.example.com', controller: this.controller })
3476    }
3477  }
3478}
3479```
3480
3481### storeWebArchive
3482
3483storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
3484
3485以Promise方式异步保存当前页面。
3486
3487**系统能力:** SystemCapability.Web.Webview.Core
3488
3489**参数:**
3490
3491| 参数名   | 类型 | 必填 | 说明                                                         |
3492| -------- | -------- | ---- | ------------------------------------------------------------ |
3493| baseName | string   | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3494| autoName | boolean  | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3495
3496**返回值:**
3497
3498| 类型            | 说明                                                  |
3499| --------------- | ----------------------------------------------------- |
3500| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
3501
3502**错误码:**
3503
3504以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3505
3506| 错误码ID | 错误信息                                                     |
3507| -------- | ------------------------------------------------------------ |
3508| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3509| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3510| 17100003 | Invalid resource path or file type.                          |
3511
3512**示例:**
3513
3514```ts
3515// xxx.ets
3516import { webview } from '@kit.ArkWeb';
3517import { BusinessError } from '@kit.BasicServicesKit';
3518
3519@Entry
3520@Component
3521struct WebComponent {
3522  controller: webview.WebviewController = new webview.WebviewController();
3523
3524  build() {
3525    Column() {
3526      Button('storeWebArchive')
3527        .onClick(() => {
3528          try {
3529            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3530              .then(filename => {
3531                if (filename != null) {
3532                  console.info(`save web archive success: ${filename}`)
3533                }
3534              })
3535              .catch((error: BusinessError) => {
3536                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
3537              })
3538          } catch (error) {
3539            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3540          }
3541        })
3542      Web({ src: 'www.example.com', controller: this.controller })
3543    }
3544  }
3545}
3546```
3547
3548### getUrl
3549
3550getUrl(): string
3551
3552获取当前页面的url地址。
3553
3554**系统能力:** SystemCapability.Web.Webview.Core
3555
3556**返回值:**
3557
3558| 类型   | 说明                |
3559| ------ | ------------------- |
3560| string | 当前页面的url地址。 |
3561
3562**错误码:**
3563
3564以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3565
3566| 错误码ID | 错误信息                                                     |
3567| -------- | ------------------------------------------------------------ |
3568| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3569
3570**示例:**
3571
3572```ts
3573// xxx.ets
3574import { webview } from '@kit.ArkWeb';
3575import { BusinessError } from '@kit.BasicServicesKit';
3576
3577@Entry
3578@Component
3579struct WebComponent {
3580  controller: webview.WebviewController = new webview.WebviewController();
3581
3582  build() {
3583    Column() {
3584      Button('getUrl')
3585        .onClick(() => {
3586          try {
3587            let url = this.controller.getUrl();
3588            console.log("url: " + url);
3589          } catch (error) {
3590            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3591          }
3592        })
3593      Web({ src: 'www.example.com', controller: this.controller })
3594    }
3595  }
3596}
3597```
3598
3599### stop
3600
3601stop(): void
3602
3603停止页面加载。
3604
3605**系统能力:** SystemCapability.Web.Webview.Core
3606
3607**错误码:**
3608
3609以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3610
3611| 错误码ID | 错误信息                                                     |
3612| -------- | ------------------------------------------------------------ |
3613| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3614
3615**示例:**
3616
3617```ts
3618// xxx.ets
3619import { webview } from '@kit.ArkWeb';
3620import { BusinessError } from '@kit.BasicServicesKit';
3621
3622@Entry
3623@Component
3624struct WebComponent {
3625  controller: webview.WebviewController = new webview.WebviewController();
3626
3627  build() {
3628    Column() {
3629      Button('stop')
3630        .onClick(() => {
3631          try {
3632            this.controller.stop();
3633          } catch (error) {
3634            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3635          }
3636        });
3637      Web({ src: 'www.example.com', controller: this.controller })
3638    }
3639  }
3640}
3641```
3642
3643### backOrForward
3644
3645backOrForward(step: number): void
3646
3647按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3648
3649前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3650
3651**系统能力:** SystemCapability.Web.Webview.Core
3652
3653**参数:**
3654
3655| 参数名 | 类型 | 必填 | 说明               |
3656| ------ | -------- | ---- | ---------------------- |
3657| step   | number   | 是   | 需要前进或后退的步长。 |
3658
3659**错误码:**
3660
3661以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3662
3663| 错误码ID | 错误信息                                                     |
3664| -------- | ------------------------------------------------------------ |
3665| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3666| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3667
3668**示例:**
3669
3670```ts
3671// xxx.ets
3672import { webview } from '@kit.ArkWeb';
3673import { BusinessError } from '@kit.BasicServicesKit';
3674
3675@Entry
3676@Component
3677struct WebComponent {
3678  controller: webview.WebviewController = new webview.WebviewController();
3679  @State step: number = -2;
3680
3681  build() {
3682    Column() {
3683      Button('backOrForward')
3684        .onClick(() => {
3685          try {
3686            this.controller.backOrForward(this.step);
3687          } catch (error) {
3688            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3689          }
3690        })
3691      Web({ src: 'www.example.com', controller: this.controller })
3692    }
3693  }
3694}
3695```
3696
3697### scrollTo
3698
3699scrollTo(x:number, y:number, duration?:number): void
3700
3701在指定时间内,将页面滚动到指定的绝对位置。
3702
3703**系统能力:** SystemCapability.Web.Webview.Core
3704
3705**参数:**
3706
3707| 参数名 | 类型 | 必填 | 说明               |
3708| ------ | -------- | ---- | ---------------------- |
3709| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 |
3710| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。|
3711| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3712
3713**错误码:**
3714
3715以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3716
3717| 错误码ID | 错误信息                                                     |
3718| -------- | ------------------------------------------------------------ |
3719| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3720| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3721
3722**示例:**
3723
3724```ts
3725// xxx.ets
3726import { webview } from '@kit.ArkWeb';
3727import { BusinessError } from '@kit.BasicServicesKit';
3728
3729@Entry
3730@Component
3731struct WebComponent {
3732  controller: webview.WebviewController = new webview.WebviewController();
3733
3734  build() {
3735    Column() {
3736      Button('scrollTo')
3737        .onClick(() => {
3738          try {
3739            this.controller.scrollTo(50, 50, 500);
3740          } catch (error) {
3741            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3742          }
3743        })
3744        Button('stopScroll')
3745        .onClick(() => {
3746          try {
3747            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3748          } catch (error) {
3749            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3750          }
3751        })
3752      Web({ src: $rawfile('index.html'), controller: this.controller })
3753    }
3754  }
3755}
3756```
3757
3758加载的html文件。
3759```html
3760<!--index.html-->
3761<!DOCTYPE html>
3762<html>
3763<head>
3764    <title>Demo</title>
3765    <style>
3766        body {
3767            width:2000px;
3768            height:2000px;
3769            padding-right:170px;
3770            padding-left:170px;
3771            border:5px solid blueviolet
3772        }
3773    </style>
3774</head>
3775<body>
3776Scroll Test
3777</body>
3778</html>
3779```
3780
3781### scrollBy
3782
3783scrollBy(deltaX:number, deltaY:number,duration?:number): void
3784
3785在指定时间内将页面滚动指定的偏移量。
3786
3787**系统能力:** SystemCapability.Web.Webview.Core
3788
3789**参数:**
3790
3791| 参数名 | 类型 | 必填 | 说明               |
3792| ------ | -------- | ---- | ---------------------- |
3793| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。单位:vp。 |
3794| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。单位:vp。 |
3795| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3796
3797**错误码:**
3798
3799以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3800
3801| 错误码ID | 错误信息                                                     |
3802| -------- | ------------------------------------------------------------ |
3803| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3804| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3805
3806> **说明:**
3807>
3808> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。
3809
3810**示例:**
3811
3812```ts
3813// xxx.ets
3814import { webview } from '@kit.ArkWeb';
3815import { BusinessError } from '@kit.BasicServicesKit';
3816
3817@Entry
3818@Component
3819struct WebComponent {
3820  controller: webview.WebviewController = new webview.WebviewController();
3821
3822  build() {
3823    Column() {
3824      Button('scrollBy')
3825        .onClick(() => {
3826          try {
3827            this.controller.scrollBy(50, 50, 500);
3828          } catch (error) {
3829            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3830          }
3831        })
3832      Button('stopScroll')
3833        .onClick(() => {
3834          try {
3835            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3836          } catch (error) {
3837            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3838          }
3839        })
3840      Web({ src: $rawfile('index.html'), controller: this.controller })
3841    }
3842  }
3843}
3844```
3845
3846加载的html文件。
3847```html
3848<!--index.html-->
3849<!DOCTYPE html>
3850<html>
3851<head>
3852    <title>Demo</title>
3853    <style>
3854        body {
3855            width:2000px;
3856            height:2000px;
3857            padding-right:170px;
3858            padding-left:170px;
3859            border:5px solid blueviolet
3860        }
3861    </style>
3862</head>
3863<body>
3864Scroll Test
3865</body>
3866</html>
3867```
3868### scrollByWithResult<sup>12+</sup>
3869
3870scrollByWithResult(deltaX: number, deltaY: number): boolean
3871
3872将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。
3873
3874**系统能力:** SystemCapability.Web.Webview.Core
3875
3876**参数:**
3877
3878| 参数名 | 类型 | 必填 | 说明               |
3879| ------ | -------- | ---- | ---------------------- |
3880| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3881| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3882
3883**返回值:**
3884
3885| 类型    | 说明                                     |
3886| ------- | --------------------------------------- |
3887| boolean | true表示当前网页可以滑动,false表示当前网页不可以滑动。默认为false。|
3888
3889**错误码:**
3890
3891以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3892
3893| 错误码ID | 错误信息                                                     |
3894| -------- | ------------------------------------------------------------ |
3895| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3896| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3897
3898> **说明:**
3899>
3900> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。
3901> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。
3902> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。
3903> - 此接口不保证滑动帧率性能。
3904
3905**示例:**
3906
3907```ts
3908// xxx.ets
3909import { webview } from '@kit.ArkWeb';
3910import { BusinessError } from '@kit.BasicServicesKit';
3911
3912@Entry
3913@Component
3914struct WebComponent {
3915  controller: webview.WebviewController = new webview.WebviewController();
3916
3917  build() {
3918    Column() {
3919      Button('scrollByWithResult')
3920        .onClick(() => {
3921          try {
3922          let result = this.controller.scrollByWithResult(50, 50);
3923          console.log("original result: " + result);
3924          } catch (error) {
3925            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3926          }
3927        })
3928      Web({ src: $rawfile('index.html'), controller: this.controller })
3929    }
3930  }
3931}
3932```
3933
3934加载的html文件。
3935```html
3936<!--index.html-->
3937<!DOCTYPE html>
3938<html>
3939<head>
3940    <title>Demo</title>
3941    <style>
3942        body {
3943            width:2000px;
3944            height:2000px;
3945            padding-right:170px;
3946            padding-left:170px;
3947            border:5px solid blueviolet
3948        }
3949    </style>
3950</head>
3951<body>
3952Scroll Test
3953</body>
3954</html>
3955```
3956### slideScroll
3957
3958slideScroll(vx:number, vy:number): void
3959
3960按照指定速度模拟对页面的轻扫滚动动作。
3961
3962**系统能力:** SystemCapability.Web.Webview.Core
3963
3964**参数:**
3965
3966| 参数名 | 类型 | 必填 | 说明               |
3967| ------ | -------- | ---- | ---------------------- |
3968| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 |
3969| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 |
3970
3971**错误码:**
3972
3973以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3974
3975| 错误码ID | 错误信息                                                     |
3976| -------- | ------------------------------------------------------------ |
3977| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3978| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3979
3980**示例:**
3981
3982```ts
3983// xxx.ets
3984import { webview } from '@kit.ArkWeb';
3985import { BusinessError } from '@kit.BasicServicesKit';
3986
3987@Entry
3988@Component
3989struct WebComponent {
3990  controller: webview.WebviewController = new webview.WebviewController();
3991
3992  build() {
3993    Column() {
3994      Button('slideScroll')
3995        .onClick(() => {
3996          try {
3997            this.controller.slideScroll(500, 500);
3998          } catch (error) {
3999            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4000          }
4001        })
4002      Web({ src: $rawfile('index.html'), controller: this.controller })
4003    }
4004  }
4005}
4006```
4007
4008加载的html文件。
4009```html
4010<!--index.html-->
4011<!DOCTYPE html>
4012<html>
4013<head>
4014    <title>Demo</title>
4015    <style>
4016        body {
4017            width:3000px;
4018            height:3000px;
4019            padding-right:170px;
4020            padding-left:170px;
4021            border:5px solid blueviolet
4022        }
4023    </style>
4024</head>
4025<body>
4026Scroll Test
4027</body>
4028</html>
4029```
4030
4031### getOriginalUrl
4032
4033getOriginalUrl(): string
4034
4035获取当前页面的原始url地址。
4036风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
4037
4038**系统能力:** SystemCapability.Web.Webview.Core
4039
4040**返回值:**
4041
4042| 类型   | 说明                    |
4043| ------ | ----------------------- |
4044| string | 当前页面的原始url地址。 |
4045
4046**错误码:**
4047
4048以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4049
4050| 错误码ID | 错误信息                                                     |
4051| -------- | ------------------------------------------------------------ |
4052| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4053
4054**示例:**
4055
4056```ts
4057// xxx.ets
4058import { webview } from '@kit.ArkWeb';
4059import { BusinessError } from '@kit.BasicServicesKit';
4060
4061@Entry
4062@Component
4063struct WebComponent {
4064  controller: webview.WebviewController = new webview.WebviewController();
4065
4066  build() {
4067    Column() {
4068      Button('getOrgUrl')
4069        .onClick(() => {
4070          try {
4071            let url = this.controller.getOriginalUrl();
4072            console.log("original url: " + url);
4073          } catch (error) {
4074            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4075          }
4076        })
4077      Web({ src: 'www.example.com', controller: this.controller })
4078    }
4079  }
4080}
4081```
4082
4083### getFavicon
4084
4085getFavicon(): image.PixelMap
4086
4087获取页面的favicon图标。
4088
4089**系统能力:** SystemCapability.Web.Webview.Core
4090
4091**返回值:**
4092
4093| 类型                                   | 说明                            |
4094| -------------------------------------- | ------------------------------- |
4095| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
4096
4097**错误码:**
4098
4099以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4100
4101| 错误码ID | 错误信息                                                     |
4102| -------- | ------------------------------------------------------------ |
4103| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4104
4105**示例:**
4106
4107```ts
4108// xxx.ets
4109import { webview } from '@kit.ArkWeb';
4110import { BusinessError } from '@kit.BasicServicesKit';
4111import { image } from '@kit.ImageKit';
4112
4113@Entry
4114@Component
4115struct WebComponent {
4116  controller: webview.WebviewController = new webview.WebviewController();
4117  @State pixelmap: image.PixelMap | undefined = undefined;
4118
4119  build() {
4120    Column() {
4121      Button('getFavicon')
4122        .onClick(() => {
4123          try {
4124            this.pixelmap = this.controller.getFavicon();
4125          } catch (error) {
4126            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4127          }
4128        })
4129      Web({ src: 'www.example.com', controller: this.controller })
4130    }
4131  }
4132}
4133```
4134
4135### setNetworkAvailable
4136
4137setNetworkAvailable(enable: boolean): void
4138
4139设置JavaScript中的window.navigator.onLine属性。
4140
4141**系统能力:** SystemCapability.Web.Webview.Core
4142
4143**参数:**
4144
4145| 参数名 | 类型    | 必填 | 说明                              |
4146| ------ | ------- | ---- | --------------------------------- |
4147| enable | boolean | 是   | 是否使能window.navigator.onLine,默认为true,表示开启JavaScript中的window.navigator.onLine属性。 |
4148
4149**错误码:**
4150
4151以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4152
4153| 错误码ID | 错误信息                                                     |
4154| -------- | ------------------------------------------------------------ |
4155| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4156| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4157
4158**示例:**
4159
4160```ts
4161// xxx.ets
4162import { webview } from '@kit.ArkWeb';
4163import { BusinessError } from '@kit.BasicServicesKit';
4164
4165@Entry
4166@Component
4167struct WebComponent {
4168  controller: webview.WebviewController = new webview.WebviewController();
4169
4170  build() {
4171    Column() {
4172      Button('setNetworkAvailable')
4173        .onClick(() => {
4174          try {
4175            this.controller.setNetworkAvailable(true);
4176          } catch (error) {
4177            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4178          }
4179        })
4180      Web({ src: $rawfile('index.html'), controller: this.controller })
4181    }
4182  }
4183}
4184```
4185
4186加载的html文件。
4187```html
4188<!-- index.html -->
4189<!DOCTYPE html>
4190<html>
4191<body>
4192<h1>online 属性</h1>
4193<p id="demo"></p>
4194<button onclick="func()">click</button>
4195<script>
4196    let online = navigator.onLine;
4197    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4198
4199    function func(){
4200      var online = navigator.onLine;
4201      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4202    }
4203</script>
4204</body>
4205</html>
4206```
4207
4208### hasImage
4209
4210hasImage(callback: AsyncCallback\<boolean>): void
4211
4212通过Callback方式异步查找当前页面是否存在图像。
4213
4214**系统能力:** SystemCapability.Web.Webview.Core
4215
4216**参数:**
4217
4218| 参数名   | 类型                    | 必填 | 说明                       |
4219| -------- | ----------------------- | ---- | -------------------------- |
4220| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。<br> true:存在图像;false:不存在图像。 |
4221
4222**错误码:**
4223
4224以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4225
4226| 错误码ID | 错误信息                                                     |
4227| -------- | ------------------------------------------------------------ |
4228| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4229| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4230
4231**示例:**
4232
4233```ts
4234// xxx.ets
4235import { webview } from '@kit.ArkWeb';
4236import { BusinessError } from '@kit.BasicServicesKit';
4237
4238@Entry
4239@Component
4240struct WebComponent {
4241  controller: webview.WebviewController = new webview.WebviewController();
4242
4243  build() {
4244    Column() {
4245      Button('hasImageCb')
4246        .onClick(() => {
4247          try {
4248            this.controller.hasImage((error, data) => {
4249              if (error) {
4250                console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4251                return;
4252              }
4253              console.info("hasImage: " + data);
4254            });
4255          } catch (error) {
4256            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4257          }
4258        })
4259      Web({ src: 'www.example.com', controller: this.controller })
4260    }
4261  }
4262}
4263```
4264
4265### hasImage
4266
4267hasImage(): Promise\<boolean>
4268
4269通过Promise方式异步查找当前页面是否存在图像。
4270
4271**系统能力:** SystemCapability.Web.Webview.Core
4272
4273**返回值:**
4274
4275| 类型              | 说明                                    |
4276| ----------------- | --------------------------------------- |
4277| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。<br>true:存在图像;false:不存在图像。 |
4278
4279**错误码:**
4280
4281以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4282
4283| 错误码ID | 错误信息                                                     |
4284| -------- | ------------------------------------------------------------ |
4285| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4286| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
4287
4288**示例:**
4289
4290```ts
4291// xxx.ets
4292import { webview } from '@kit.ArkWeb';
4293import { BusinessError } from '@kit.BasicServicesKit';
4294
4295@Entry
4296@Component
4297struct WebComponent {
4298  controller: webview.WebviewController = new webview.WebviewController();
4299
4300  build() {
4301    Column() {
4302      Button('hasImagePm')
4303        .onClick(() => {
4304          try {
4305            this.controller.hasImage().then((data) => {
4306              console.info('hasImage: ' + data);
4307            }).catch((error: BusinessError) => {
4308              console.error("error: " + error);
4309            })
4310          } catch (error) {
4311            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4312          }
4313        })
4314      Web({ src: 'www.example.com', controller: this.controller })
4315    }
4316  }
4317}
4318```
4319
4320### removeCache
4321
4322removeCache(clearRom: boolean): void
4323
4324清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
4325
4326> **说明:**
4327>
4328> 可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。
4329
4330**系统能力:** SystemCapability.Web.Webview.Core
4331
4332**参数:**
4333
4334| 参数名   | 类型    | 必填 | 说明                                                     |
4335| -------- | ------- | ---- | -------------------------------------------------------- |
4336| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
4337
4338**错误码:**
4339
4340以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4341
4342| 错误码ID | 错误信息                                                     |
4343| -------- | ------------------------------------------------------------ |
4344| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4345| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4346
4347**示例:**
4348
4349```ts
4350// xxx.ets
4351import { webview } from '@kit.ArkWeb';
4352import { BusinessError } from '@kit.BasicServicesKit';
4353
4354@Entry
4355@Component
4356struct WebComponent {
4357  controller: webview.WebviewController = new webview.WebviewController();
4358
4359  build() {
4360    Column() {
4361      Button('removeCache')
4362        .onClick(() => {
4363          try {
4364            this.controller.removeCache(false);
4365          } catch (error) {
4366            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4367          }
4368        })
4369      Web({ src: 'www.example.com', controller: this.controller })
4370    }
4371  }
4372}
4373```
4374
4375### removeAllCache<sup>18+</sup>
4376
4377static removeAllCache(clearRom: boolean): void
4378
4379清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
4380
4381> **说明:**
4382>
4383> 可以通过在data/app/el2/100/base/\<applicationPackageName\>/cache/web/目录下查看webview的缓存。
4384
4385**系统能力:** SystemCapability.Web.Webview.Core
4386
4387**参数:**
4388
4389| 参数名   | 类型    | 必填 | 说明                                                     |
4390| -------- | ------- | ---- | -------------------------------------------------------- |
4391| clearRom | boolean | 是   | 设置为true时同时清除ROM和RAM中的缓存,设置为false时只清除RAM中的缓存。 |
4392
4393**错误码:**
4394
4395以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4396
4397| 错误码ID | 错误信息                                                     |
4398| -------- | ------------------------------------------------------------ |
4399| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4400
4401**示例:**
4402
4403```ts
4404// xxx.ets
4405import { webview } from '@kit.ArkWeb';
4406import { BusinessError } from '@kit.BasicServicesKit';
4407
4408@Entry
4409@Component
4410struct WebComponent {
4411  controller: webview.WebviewController = new webview.WebviewController();
4412
4413  build() {
4414    Column() {
4415      Button('removeAllCache')
4416        .onClick(() => {
4417          try {
4418            webview.WebviewController.removeAllCache(false);
4419          } catch (error) {
4420            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4421          }
4422        })
4423      Web({ src: 'www.example.com', controller: this.controller })
4424    }
4425  }
4426}
4427```
4428
4429### pageUp
4430
4431pageUp(top: boolean): void
4432
4433将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
4434
4435**系统能力:** SystemCapability.Web.Webview.Core
4436
4437**参数:**
4438
4439| 参数名 | 类型    | 必填 | 说明                                                         |
4440| ------ | ------- | ---- | ------------------------------------------------------------ |
4441| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
4442
4443**错误码:**
4444
4445以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4446
4447| 错误码ID | 错误信息                                                     |
4448| -------- | ------------------------------------------------------------ |
4449| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4450| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4451
4452**示例:**
4453
4454```ts
4455// xxx.ets
4456import { webview } from '@kit.ArkWeb';
4457import { BusinessError } from '@kit.BasicServicesKit';
4458
4459@Entry
4460@Component
4461struct WebComponent {
4462  controller: webview.WebviewController = new webview.WebviewController();
4463
4464  build() {
4465    Column() {
4466      Button('pageUp')
4467        .onClick(() => {
4468          try {
4469            this.controller.pageUp(false);
4470          } catch (error) {
4471            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4472          }
4473        })
4474      Web({ src: 'www.example.com', controller: this.controller })
4475    }
4476  }
4477}
4478```
4479
4480### pageDown
4481
4482pageDown(bottom: boolean): void
4483
4484将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
4485
4486**系统能力:** SystemCapability.Web.Webview.Core
4487
4488**参数:**
4489
4490| 参数名 | 类型    | 必填 | 说明                                                         |
4491| ------ | ------- | ---- | ------------------------------------------------------------ |
4492| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
4493
4494**错误码:**
4495
4496以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4497
4498| 错误码ID | 错误信息                                                     |
4499| -------- | ------------------------------------------------------------ |
4500| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4501| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4502
4503**示例:**
4504
4505```ts
4506// xxx.ets
4507import { webview } from '@kit.ArkWeb';
4508import { BusinessError } from '@kit.BasicServicesKit';
4509
4510@Entry
4511@Component
4512struct WebComponent {
4513  controller: webview.WebviewController = new webview.WebviewController();
4514
4515  build() {
4516    Column() {
4517      Button('pageDown')
4518        .onClick(() => {
4519          try {
4520            this.controller.pageDown(false);
4521          } catch (error) {
4522            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4523          }
4524        })
4525      Web({ src: 'www.example.com', controller: this.controller })
4526    }
4527  }
4528}
4529```
4530
4531### getBackForwardEntries
4532
4533getBackForwardEntries(): BackForwardList
4534
4535获取当前Webview的历史信息列表。
4536
4537**系统能力:** SystemCapability.Web.Webview.Core
4538
4539**返回值:**
4540
4541| 类型                                | 说明                        |
4542| ----------------------------------- | --------------------------- |
4543| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
4544
4545**错误码:**
4546
4547以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4548
4549| 错误码ID | 错误信息                                                     |
4550| -------- | ------------------------------------------------------------ |
4551| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4552
4553**示例:**
4554
4555```ts
4556// xxx.ets
4557import { webview } from '@kit.ArkWeb';
4558import { BusinessError } from '@kit.BasicServicesKit';
4559
4560@Entry
4561@Component
4562struct WebComponent {
4563  controller: webview.WebviewController = new webview.WebviewController();
4564
4565  build() {
4566    Column() {
4567      Button('getBackForwardEntries')
4568        .onClick(() => {
4569          try {
4570            let list = this.controller.getBackForwardEntries()
4571          } catch (error) {
4572            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4573          }
4574        })
4575      Web({ src: 'www.example.com', controller: this.controller })
4576    }
4577  }
4578}
4579```
4580
4581### serializeWebState
4582
4583serializeWebState(): Uint8Array
4584
4585将当前Webview的页面状态历史记录信息序列化。
4586
4587**系统能力:** SystemCapability.Web.Webview.Core
4588
4589**返回值:**
4590
4591| 类型       | 说明                                          |
4592| ---------- | --------------------------------------------- |
4593| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
4594
4595**错误码:**
4596
4597以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4598
4599| 错误码ID | 错误信息                                                     |
4600| -------- | ------------------------------------------------------------ |
4601| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4602
4603**示例:**
4604
46051.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4606```ts
4607// xxx.ets
4608import { webview } from '@kit.ArkWeb';
4609import { BusinessError } from '@kit.BasicServicesKit';
4610import { fileIo } from '@kit.CoreFileKit';
4611
4612@Entry
4613@Component
4614struct WebComponent {
4615  controller: webview.WebviewController = new webview.WebviewController();
4616
4617  build() {
4618    Column() {
4619      Button('serializeWebState')
4620        .onClick(() => {
4621          try {
4622            let state = this.controller.serializeWebState();
4623            let path:string | undefined = AppStorage.get("cacheDir");
4624            if (path) {
4625              path += '/WebState';
4626              // 以同步方法打开文件。
4627              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
4628              fileIo.writeSync(file.fd, state.buffer);
4629              fileIo.closeSync(file.fd);
4630            }
4631          } catch (error) {
4632            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4633          }
4634        })
4635      Web({ src: 'www.example.com', controller: this.controller })
4636    }
4637  }
4638}
4639```
4640
46412.修改EntryAbility.ets4642获取应用缓存文件路径。
4643```ts
4644// xxx.ets
4645import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4646
4647export default class EntryAbility extends UIAbility {
4648    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4649        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4650        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4651    }
4652}
4653```
4654
4655### restoreWebState
4656
4657restoreWebState(state: Uint8Array): void
4658
4659当前Webview从序列化数据中恢复页面状态历史记录。
4660
4661如果state过大,可能会导致异常。建议state大于512k时,放弃恢复页面状态历史记录。
4662
4663**系统能力:** SystemCapability.Web.Webview.Core
4664
4665**参数:**
4666
4667| 参数名 | 类型       | 必填 | 说明                         |
4668| ------ | ---------- | ---- | ---------------------------- |
4669| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
4670
4671**错误码:**
4672
4673以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4674
4675| 错误码ID | 错误信息                                                     |
4676| -------- | ------------------------------------------------------------ |
4677| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4678| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4679
4680**示例:**
4681
46821.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4683```ts
4684// xxx.ets
4685import { webview } from '@kit.ArkWeb';
4686import { BusinessError } from '@kit.BasicServicesKit';
4687import { fileIo } from '@kit.CoreFileKit';
4688
4689@Entry
4690@Component
4691struct WebComponent {
4692  controller: webview.WebviewController = new webview.WebviewController();
4693
4694  build() {
4695    Column() {
4696      Button('RestoreWebState')
4697        .onClick(() => {
4698          try {
4699            let path: string | undefined = AppStorage.get("cacheDir");
4700            if (path) {
4701              path += '/WebState';
4702              // 以同步方法打开文件。
4703              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE);
4704              let stat = fileIo.statSync(path);
4705              let size = stat.size;
4706              let buf = new ArrayBuffer(size);
4707              fileIo.read(file.fd, buf, (err, readLen) => {
4708                if (err) {
4709                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4710                } else {
4711                  console.info("read file data succeed");
4712                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4713                  fileIo.closeSync(file);
4714                }
4715              });
4716            }
4717          } catch (error) {
4718            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4719          }
4720        })
4721      Web({ src: 'www.example.com', controller: this.controller })
4722    }
4723  }
4724}
4725```
4726
47272.修改EntryAbility.ets4728获取应用缓存文件路径。
4729```ts
4730// xxx.ets
4731import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4732
4733export default class EntryAbility extends UIAbility {
4734  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4735    // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4736    AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4737  }
4738}
4739```
4740
4741### customizeSchemes
4742
4743static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4744
4745对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。
4746
4747**系统能力:** SystemCapability.Web.Webview.Core
4748
4749**参数:**
4750
4751| 参数名   | 类型    | 必填 | 说明                      |
4752| -------- | ------- | ---- | -------------------------------------- |
4753| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4754
4755**错误码:**
4756
4757以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4758
4759| 错误码ID | 错误信息                                                     |
4760| -------- | ------------------------------------------------------------ |
4761|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
4762| 17100020 | Failed to register custom schemes. |
4763
4764**示例:**
4765
4766```ts
4767// xxx.ets
4768import { webview } from '@kit.ArkWeb';
4769import { BusinessError } from '@kit.BasicServicesKit';
4770
4771@Entry
4772@Component
4773struct WebComponent {
4774  controller: webview.WebviewController = new webview.WebviewController();
4775  responseWeb: WebResourceResponse = new WebResourceResponse();
4776  scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true };
4777  scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true };
4778  scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true };
4779
4780  aboutToAppear(): void {
4781    try {
4782      webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]);
4783    } catch (error) {
4784      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4785    }
4786  }
4787
4788  build() {
4789    Column() {
4790      Web({ src: 'www.example.com', controller: this.controller })
4791        .onInterceptRequest((event) => {
4792          if (event) {
4793            console.log('url:' + event.request.getRequestUrl());
4794          }
4795          return this.responseWeb;
4796        })
4797    }
4798  }
4799}
4800```
4801
4802### getCertificate<sup>10+</sup>
4803
4804getCertificate(): Promise<Array<cert.X509Cert>>
4805
4806获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4807
4808**系统能力:** SystemCapability.Web.Webview.Core
4809
4810**返回值:**
4811
4812| 类型       | 说明                                          |
4813| ---------- | --------------------------------------------- |
4814| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4815
4816**错误码:**
4817
4818以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4819
4820| 错误码ID | 错误信息                                                     |
4821| -------- | ------------------------------------------------------------ |
4822| 17100001 | Init error. The WebviewController must be associated with a web component. |
4823
4824**示例:**
4825
4826```ts
4827// xxx.ets
4828import { webview } from '@kit.ArkWeb';
4829import { BusinessError } from '@kit.BasicServicesKit';
4830import { cert } from '@kit.DeviceCertificateKit';
4831
4832function Uint8ArrayToString(dataArray: Uint8Array) {
4833  let dataString = '';
4834  for (let i = 0; i < dataArray.length; i++) {
4835    dataString += String.fromCharCode(dataArray[i]);
4836  }
4837  return dataString;
4838}
4839
4840function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4841  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4842  for (let i = 0; i < x509CertArray.length; i++) {
4843    res += ', index = ' + i + ', issuer name = '
4844      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4845      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4846      + x509CertArray[i].getNotBeforeTime()
4847      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4848  }
4849  return res;
4850}
4851
4852@Entry
4853@Component
4854struct Index {
4855  // outputStr在UI界面显示调试信息
4856  @State outputStr: string = '';
4857  webviewCtl: webview.WebviewController = new webview.WebviewController();
4858
4859  build() {
4860    Row() {
4861      Column() {
4862        List({ space: 20, initialIndex: 0 }) {
4863          ListItem() {
4864            Button() {
4865              Text('load bad ssl')
4866                .fontSize(10)
4867                .fontWeight(FontWeight.Bold)
4868            }
4869            .type(ButtonType.Capsule)
4870            .onClick(() => {
4871              // 加载一个过期的证书网站,查看获取到的证书信息
4872              this.webviewCtl.loadUrl('https://expired.badssl.com');
4873            })
4874            .height(50)
4875          }
4876
4877          ListItem() {
4878            Button() {
4879              Text('load example')
4880                .fontSize(10)
4881                .fontWeight(FontWeight.Bold)
4882            }
4883            .type(ButtonType.Capsule)
4884            .onClick(() => {
4885              // 加载一个https网站,查看网站的证书信息
4886              this.webviewCtl.loadUrl('https://www.example.com');
4887            })
4888            .height(50)
4889          }
4890
4891          ListItem() {
4892            Button() {
4893              Text('getCertificate Promise')
4894                .fontSize(10)
4895                .fontWeight(FontWeight.Bold)
4896            }
4897            .type(ButtonType.Capsule)
4898            .onClick(() => {
4899              try {
4900                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4901                  this.outputStr = ParseX509CertInfo(x509CertArray);
4902                })
4903              } catch (error) {
4904                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4905              }
4906            })
4907            .height(50)
4908          }
4909
4910          ListItem() {
4911            Button() {
4912              Text('getCertificate AsyncCallback')
4913                .fontSize(10)
4914                .fontWeight(FontWeight.Bold)
4915            }
4916            .type(ButtonType.Capsule)
4917            .onClick(() => {
4918              try {
4919                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
4920                  if (error) {
4921                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4922                  } else {
4923                    this.outputStr = ParseX509CertInfo(x509CertArray);
4924                  }
4925                })
4926              } catch (error) {
4927                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4928              }
4929            })
4930            .height(50)
4931          }
4932        }
4933        .listDirection(Axis.Horizontal)
4934        .height('10%')
4935
4936        Text(this.outputStr)
4937          .width('100%')
4938          .fontSize(10)
4939
4940        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4941          .fileAccess(true)
4942          .javaScriptAccess(true)
4943          .domStorageAccess(true)
4944          .onlineImageAccess(true)
4945          .onPageEnd((e) => {
4946            if (e) {
4947              this.outputStr = 'onPageEnd : url = ' + e.url;
4948            }
4949          })
4950          .onSslErrorEventReceive((e) => {
4951            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4952            e.handler.handleConfirm();
4953          })
4954          .width('100%')
4955          .height('70%')
4956      }
4957      .height('100%')
4958    }
4959  }
4960}
4961```
4962
4963### getCertificate<sup>10+</sup>
4964
4965getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4966
4967获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。
4968
4969**系统能力:** SystemCapability.Web.Webview.Core
4970
4971**参数:**
4972
4973| 参数名   | 类型                         | 必填 | 说明                                     |
4974| -------- | ---------------------------- | ---- | ---------------------------------------- |
4975| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4976
4977**错误码:**
4978
4979以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4980
4981| 错误码ID | 错误信息                                                     |
4982| -------- | ------------------------------------------------------------ |
4983| 17100001 | Init error. The WebviewController must be associated with a web component. |
4984| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4985
4986**示例:**
4987
4988```ts
4989// xxx.ets
4990import { webview } from '@kit.ArkWeb';
4991import { BusinessError } from '@kit.BasicServicesKit';
4992import { cert } from '@kit.DeviceCertificateKit';
4993
4994function Uint8ArrayToString(dataArray: Uint8Array) {
4995  let dataString = '';
4996  for (let i = 0; i < dataArray.length; i++) {
4997    dataString += String.fromCharCode(dataArray[i]);
4998  }
4999  return dataString;
5000}
5001
5002function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
5003  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
5004  for (let i = 0; i < x509CertArray.length; i++) {
5005    res += ', index = ' + i + ', issuer name = '
5006      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
5007      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
5008      + x509CertArray[i].getNotBeforeTime()
5009      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
5010  }
5011  return res;
5012}
5013
5014@Entry
5015@Component
5016struct Index {
5017  // outputStr在UI界面显示调试信息
5018  @State outputStr: string = '';
5019  webviewCtl: webview.WebviewController = new webview.WebviewController();
5020
5021  build() {
5022    Row() {
5023      Column() {
5024        List({ space: 20, initialIndex: 0 }) {
5025          ListItem() {
5026            Button() {
5027              Text('load bad ssl')
5028                .fontSize(10)
5029                .fontWeight(FontWeight.Bold)
5030            }
5031            .type(ButtonType.Capsule)
5032            .onClick(() => {
5033              // 加载一个过期的证书网站,查看获取到的证书信息
5034              this.webviewCtl.loadUrl('https://expired.badssl.com');
5035            })
5036            .height(50)
5037          }
5038
5039          ListItem() {
5040            Button() {
5041              Text('load example')
5042                .fontSize(10)
5043                .fontWeight(FontWeight.Bold)
5044            }
5045            .type(ButtonType.Capsule)
5046            .onClick(() => {
5047              // 加载一个https网站,查看网站的证书信息
5048              this.webviewCtl.loadUrl('https://www.example.com');
5049            })
5050            .height(50)
5051          }
5052
5053          ListItem() {
5054            Button() {
5055              Text('getCertificate Promise')
5056                .fontSize(10)
5057                .fontWeight(FontWeight.Bold)
5058            }
5059            .type(ButtonType.Capsule)
5060            .onClick(() => {
5061              try {
5062                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
5063                  this.outputStr = ParseX509CertInfo(x509CertArray);
5064                })
5065              } catch (error) {
5066                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
5067              }
5068            })
5069            .height(50)
5070          }
5071
5072          ListItem() {
5073            Button() {
5074              Text('getCertificate AsyncCallback')
5075                .fontSize(10)
5076                .fontWeight(FontWeight.Bold)
5077            }
5078            .type(ButtonType.Capsule)
5079            .onClick(() => {
5080              try {
5081                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
5082                  if (error) {
5083                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
5084                  } else {
5085                    this.outputStr = ParseX509CertInfo(x509CertArray);
5086                  }
5087                })
5088              } catch (error) {
5089                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
5090              }
5091            })
5092            .height(50)
5093          }
5094        }
5095        .listDirection(Axis.Horizontal)
5096        .height('10%')
5097
5098        Text(this.outputStr)
5099          .width('100%')
5100          .fontSize(10)
5101
5102        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
5103          .fileAccess(true)
5104          .javaScriptAccess(true)
5105          .domStorageAccess(true)
5106          .onlineImageAccess(true)
5107          .onPageEnd((e) => {
5108            if (e) {
5109              this.outputStr = 'onPageEnd : url = ' + e.url;
5110            }
5111          })
5112          .onSslErrorEventReceive((e) => {
5113            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
5114            e.handler.handleConfirm();
5115          })
5116          .width('100%')
5117          .height('70%')
5118      }
5119      .height('100%')
5120    }
5121  }
5122}
5123```
5124
5125### setAudioMuted<sup>10+</sup>
5126
5127setAudioMuted(mute: boolean): void
5128
5129设置网页静音。
5130
5131**系统能力:** SystemCapability.Web.Webview.Core
5132
5133**参数:**
5134
5135| 参数名   | 类型    | 必填 | 说明                      |
5136| -------- | ------- | ---- | -------------------------------------- |
5137| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
5138
5139**错误码:**
5140
5141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5142
5143| 错误码ID | 错误信息                                                     |
5144| -------- | ------------------------------------------------------------ |
5145| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5146| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5147
5148**示例:**
5149
5150```ts
5151// xxx.ets
5152import { webview } from '@kit.ArkWeb';
5153
5154@Entry
5155@Component
5156struct WebComponent {
5157  controller: webview.WebviewController = new webview.WebviewController();
5158  @State muted: boolean = false;
5159
5160  build() {
5161    Column() {
5162      Button("Toggle Mute")
5163        .onClick(event => {
5164          if (event) {
5165            this.muted = !this.muted;
5166            this.controller.setAudioMuted(this.muted);
5167          }
5168        })
5169      Web({ src: 'www.example.com', controller: this.controller })
5170    }
5171  }
5172}
5173```
5174
5175### prefetchPage<sup>10+</sup>
5176
5177prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
5178
5179在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
5180
5181> **说明:**
5182>
5183> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。
5184
5185**系统能力:** SystemCapability.Web.Webview.Core
5186
5187**参数:**
5188
5189| 参数名             | 类型                             | 必填  | 说明                      |
5190| ------------------| --------------------------------| ---- | ------------- |
5191| url               | string                          | 是    | 预加载的url。|
5192| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
5193
5194**错误码:**
5195
5196以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5197
5198| 错误码ID  | 错误信息                                                      |
5199| -------- | ------------------------------------------------------------ |
5200| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5201| 17100002 | Invalid url.                                                 |
5202
5203**示例:**
5204
5205```ts
5206// xxx.ets
5207import { webview } from '@kit.ArkWeb';
5208import { BusinessError } from '@kit.BasicServicesKit';
5209
5210@Entry
5211@Component
5212struct WebComponent {
5213  controller: webview.WebviewController = new webview.WebviewController();
5214
5215  build() {
5216    Column() {
5217      Button('prefetchPopularPage')
5218        .onClick(() => {
5219          try {
5220            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
5221            this.controller.prefetchPage('https://www.example.com');
5222          } catch (error) {
5223            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5224          }
5225        })
5226      // 需要将'www.example1.com'替换成一个真实的网站地址。
5227      Web({ src: 'www.example1.com', controller: this.controller })
5228    }
5229  }
5230}
5231```
5232
5233### prefetchResource<sup>12+</sup>
5234
5235static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void
5236
5237根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。
5238
5239**系统能力:**  SystemCapability.Web.Webview.Core
5240
5241**参数:**
5242
5243| 参数名             | 类型                             |  必填  | 说明                                                              |
5244| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ |
5245| request           | [RequestInfo](#requestinfo12)   | 是   | 预获取请求的信息。                                                      |
5246| additionalHeaders | Array\<[WebHeader](#webheader)> | 否   | 预获取请求的附加HTTP请求头。                                             |
5247| cacheKey          | string                          | 否   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5248| cacheValidTime    | number                          | 否   | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。          |
5249
5250**错误码:**
5251
5252以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5253
5254| 错误码ID  | 错误信息                                                      |
5255| -------- | ------------------------------------------------------------ |
5256| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
5257| 17100002 | Invalid url.                                                 |
5258
5259**示例:**
5260
5261```ts
5262// xxx.ets
5263import { webview } from '@kit.ArkWeb';
5264import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5265
5266export default class EntryAbility extends UIAbility {
5267  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5268    console.log("EntryAbility onCreate");
5269    webview.WebviewController.initializeWebEngine();
5270    // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5271    webview.WebviewController.prefetchResource(
5272      {
5273        url: "https://www.example1.com/post?e=f&g=h",
5274        method: "POST",
5275        formData: "a=x&b=y",
5276      },
5277      [{
5278        headerKey: "c",
5279        headerValue: "z",
5280      },],
5281      "KeyX", 500);
5282    AppStorage.setOrCreate("abilityWant", want);
5283    console.log("EntryAbility onCreate done");
5284  }
5285}
5286```
5287
5288### clearPrefetchedResource<sup>12+</sup>
5289
5290static clearPrefetchedResource(cacheKeyList: Array\<string>): void
5291
5292根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。
5293
5294**系统能力:**  SystemCapability.Web.Webview.Core
5295
5296**参数:**
5297
5298| 参数名             | 类型        | 必填  | 说明                                                                       |
5299| ------------------| ----------- | ---- | ------------------------------------------------------------------------- |
5300| cacheKeyList      | Array\<string>      | 是   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5301
5302**示例:**
5303
5304```ts
5305// xxx.ets
5306import { webview } from '@kit.ArkWeb';
5307
5308@Entry
5309@Component
5310struct WebComponent {
5311  controller: webview.WebviewController = new webview.WebviewController();
5312
5313  build() {
5314    Column() {
5315      Web({ src: "https://www.example.com/", controller: this.controller })
5316        .onAppear(() => {
5317          // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5318          webview.WebviewController.prefetchResource(
5319            {
5320              url: "https://www.example1.com/post?e=f&g=h",
5321              method: "POST",
5322              formData: "a=x&b=y",
5323            },
5324            [{
5325              headerKey: "c",
5326              headerValue: "z",
5327            },],
5328            "KeyX", 500);
5329        })
5330        .onPageEnd(() => {
5331          // 清除后续不再使用的预获取缓存。
5332          webview.WebviewController.clearPrefetchedResource(["KeyX",]);
5333        })
5334    }
5335  }
5336}
5337```
5338
5339### prepareForPageLoad<sup>10+</sup>
5340
5341static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
5342
5343预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
5344
5345**系统能力:**  SystemCapability.Web.Webview.Core
5346
5347**参数:**
5348
5349| 参数名          | 类型    |  必填  | 说明                                            |
5350| ---------------| ------- | ---- | ------------- |
5351| url            | string  | 是   | 预连接的url。|
5352| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
5353| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
5354
5355**错误码:**
5356
5357以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5358
5359| 错误码ID  | 错误信息                                                      |
5360| -------- | ------------------------------------------------------------ |
5361| 17100002 | Invalid url.                                                 |
5362| 171000013| The number of preconnect sockets is invalid.                                                 |
5363
5364**示例:**
5365
5366```ts
5367// xxx.ets
5368import { webview } from '@kit.ArkWeb';
5369import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5370
5371export default class EntryAbility extends UIAbility {
5372  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5373    console.log("EntryAbility onCreate");
5374    webview.WebviewController.initializeWebEngine();
5375    // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
5376    webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
5377    AppStorage.setOrCreate("abilityWant", want);
5378    console.log("EntryAbility onCreate done");
5379  }
5380}
5381```
5382
5383### setCustomUserAgent<sup>10+</sup>
5384
5385setCustomUserAgent(userAgent: string): void
5386
5387设置自定义用户代理,会覆盖系统的用户代理。
5388
5389当Web组件src设置了url时,建议在onControllerAttached回调事件中设置User-Agent,设置方式请参考示例。不建议将User-Agent设置在onLoadIntercept回调事件中,会概率性出现设置失败。
5390
5391当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置User-Agent,再通过loadUrl加载具体页面。
5392
5393默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md)
5394
5395> **说明:**
5396>
5397>当Web组件src设置了url,且未在onControllerAttached回调事件中设置User-Agent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置User-Agent不符的异常现象。
5398
5399**系统能力:**  SystemCapability.Web.Webview.Core
5400
5401**参数:**
5402
5403| 参数名          | 类型    |  必填  | 说明                                            |
5404| ---------------| ------- | ---- | ------------- |
5405| userAgent      | string  | 是   | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 |
5406
5407**错误码:**
5408
5409以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5410
5411| 错误码ID  | 错误信息                                                      |
5412| -------- | ------------------------------------------------------------ |
5413| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5414| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5415
5416**示例:**
5417
5418```ts
5419// xxx.ets
5420import { webview } from '@kit.ArkWeb';
5421import { BusinessError } from '@kit.BasicServicesKit';
5422
5423@Entry
5424@Component
5425struct WebComponent {
5426  controller: webview.WebviewController = new webview.WebviewController();
5427  @State customUserAgent: string = ' DemoApp';
5428
5429  build() {
5430    Column() {
5431      Web({ src: 'www.example.com', controller: this.controller })
5432      .onControllerAttached(() => {
5433        console.log("onControllerAttached");
5434        try {
5435          let userAgent = this.controller.getUserAgent() + this.customUserAgent;
5436          this.controller.setCustomUserAgent(userAgent);
5437        } catch (error) {
5438          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5439        }
5440      })
5441    }
5442  }
5443}
5444```
5445
5446### setDownloadDelegate<sup>11+</sup>
5447
5448setDownloadDelegate(delegate: WebDownloadDelegate): void
5449
5450为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。
5451
5452**系统能力:**  SystemCapability.Web.Webview.Core
5453
5454**参数:**
5455
5456| 参数名          | 类型    |  必填  | 说明                                            |
5457| ---------------| ------- | ---- | ------------- |
5458| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
5459
5460**错误码:**
5461
5462以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5463
5464| 错误码ID  | 错误信息                                                      |
5465| -------- | ------------------------------------------------------------ |
5466| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5467
5468**示例:**
5469
5470```ts
5471// xxx.ets
5472import { webview } from '@kit.ArkWeb';
5473import { BusinessError } from '@kit.BasicServicesKit';
5474
5475@Entry
5476@Component
5477struct WebComponent {
5478  controller: webview.WebviewController = new webview.WebviewController();
5479  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5480
5481  build() {
5482    Column() {
5483      Button('setDownloadDelegate')
5484        .onClick(() => {
5485          try {
5486            this.controller.setDownloadDelegate(this.delegate);
5487          } catch (error) {
5488            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5489          }
5490        })
5491      Web({ src: 'www.example.com', controller: this.controller })
5492    }
5493  }
5494}
5495```
5496
5497### startDownload<sup>11+</sup>
5498
5499startDownload(url: string): void
5500
5501使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。
5502
5503**系统能力:**  SystemCapability.Web.Webview.Core
5504
5505**参数:**
5506
5507| 参数名          | 类型    |  必填  | 说明                                            |
5508| ---------------| ------- | ---- | ------------- |
5509| url      | string  | 是   | 下载地址。 |
5510
5511**错误码:**
5512
5513以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5514
5515| 错误码ID  | 错误信息                                                      |
5516| -------- | ------------------------------------------------------------ |
5517| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5518| 17100002 | Invalid url. |
5519
5520**示例:**
5521
5522```ts
5523// xxx.ets
5524import { webview } from '@kit.ArkWeb';
5525import { BusinessError } from '@kit.BasicServicesKit';
5526
5527@Entry
5528@Component
5529struct WebComponent {
5530  controller: webview.WebviewController = new webview.WebviewController();
5531  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5532
5533  build() {
5534    Column() {
5535      Button('setDownloadDelegate')
5536        .onClick(() => {
5537          try {
5538            this.controller.setDownloadDelegate(this.delegate);
5539          } catch (error) {
5540            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5541          }
5542        })
5543      Button('startDownload')
5544        .onClick(() => {
5545          try {
5546            this.controller.startDownload('https://www.example.com');
5547          } catch (error) {
5548            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5549          }
5550        })
5551      Web({ src: 'www.example.com', controller: this.controller })
5552    }
5553  }
5554}
5555```
5556
5557### getCustomUserAgent<sup>10+</sup>
5558
5559getCustomUserAgent(): string
5560
5561获取自定义用户代理。
5562
5563默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md)
5564
5565**系统能力:**  SystemCapability.Web.Webview.Core
5566
5567**返回值:**
5568
5569| 类型   | 说明                      |
5570| ------ | ------------------------- |
5571| string | 用户自定义代理信息。 |
5572
5573**错误码:**
5574
5575以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5576
5577| 错误码ID  | 错误信息                                                      |
5578| -------- | ------------------------------------------------------------ |
5579| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5580
5581**示例:**
5582
5583```ts
5584// xxx.ets
5585import { webview } from '@kit.ArkWeb';
5586import { BusinessError } from '@kit.BasicServicesKit';
5587
5588@Entry
5589@Component
5590struct WebComponent {
5591  controller: webview.WebviewController = new webview.WebviewController();
5592  @State userAgent: string = '';
5593
5594  build() {
5595    Column() {
5596      Button('getCustomUserAgent')
5597        .onClick(() => {
5598          try {
5599            this.userAgent = this.controller.getCustomUserAgent();
5600            console.log("userAgent: " + this.userAgent);
5601          } catch (error) {
5602            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5603          }
5604        })
5605      Web({ src: 'www.example.com', controller: this.controller })
5606    }
5607  }
5608}
5609```
5610
5611### setConnectionTimeout<sup>11+</sup>
5612
5613static setConnectionTimeout(timeout: number): void
5614
5615设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。
5616
5617**系统能力:** SystemCapability.Web.Webview.Core
5618
5619**参数:**
5620
5621| 参数名          | 类型    |  必填  | 说明                                            |
5622| ---------------| ------- | ---- | ------------- |
5623| timeout        | number  | 是   | socket连接超时时间,以秒为单位,必须为大于0的整数。 |
5624
5625**错误码:**
5626
5627以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5628
5629| 错误码ID | 错误信息                                                     |
5630| -------- | ------------------------------------------------------------ |
5631| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
5632
5633**示例:**
5634
5635```ts
5636// xxx.ets
5637import { webview } from '@kit.ArkWeb';
5638import { BusinessError } from '@kit.BasicServicesKit';
5639
5640@Entry
5641@Component
5642struct WebComponent {
5643  controller: webview.WebviewController = new webview.WebviewController();
5644
5645  build() {
5646    Column() {
5647      Button('setConnectionTimeout')
5648        .onClick(() => {
5649          try {
5650            webview.WebviewController.setConnectionTimeout(5);
5651            console.log("setConnectionTimeout: 5s");
5652          } catch (error) {
5653            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5654          }
5655        })
5656      Web({ src: 'www.example.com', controller: this.controller })
5657        .onErrorReceive((event) => {
5658          if (event) {
5659            console.log('getErrorInfo:' + event.error.getErrorInfo());
5660            console.log('getErrorCode:' + event.error.getErrorCode());
5661          }
5662        })
5663    }
5664  }
5665}
5666```
5667
5668### warmupServiceWorker<sup>12+</sup>
5669
5670static warmupServiceWorker(url: string): void
5671
5672预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。
5673
5674**系统能力:**  SystemCapability.Web.Webview.Core
5675
5676**参数:**
5677
5678| 参数名          | 类型    |  必填  | 说明                                            |
5679| ---------------| ------- | ---- | ------------- |
5680| url            | string  | 是   | 需要预热ServiceWorker的url。|
5681
5682**错误码:**
5683
5684以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5685
5686| 错误码ID  | 错误信息                                                      |
5687| -------- | ------------------------------------------------------------ |
5688| 17100002 | Invalid url.                                                 |
5689
5690**示例:**
5691
5692```ts
5693// xxx.ts
5694import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5695import { hilog } from '@kit.PerformanceAnalysisKit';
5696import { window } from '@kit.ArkUI';
5697import { webview } from '@kit.ArkWeb';
5698
5699export default class EntryAbility extends UIAbility {
5700    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5701        console.log("EntryAbility onCreate");
5702        webview.WebviewController.initializeWebEngine();
5703        webview.WebviewController.warmupServiceWorker("https://www.example.com");
5704        AppStorage.setOrCreate("abilityWant", want);
5705    }
5706}
5707```
5708
5709### enableSafeBrowsing<sup>11+</sup>
5710
5711enableSafeBrowsing(enable: boolean): void
5712
5713<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。
5714本功能默认不生效,OpenHarmony只提供恶意网址拦截页WebUI,网址风险检测以及显示WebUI的功能由Vendor实现。推荐在WebContentsObserver中监听跳转[DidStartNavigation](https://gitee.com/openharmony-tpc/chromium_src/blob/master/content/public/browser/web_contents_observer.h#:~:text=virtual%20void-,DidStartNavigation)、[DidRedirectNavigation](https://gitee.com/openharmony-tpc/chromium_src/blob/master/content/public/browser/web_contents_observer.h#:~:text=virtual%20void-,DidRedirectNavigation)进行检测。
5715<!--RP1End-->
5716
5717**系统能力:** SystemCapability.Web.Webview.Core
5718
5719**参数:**
5720
5721| 参数名   | 类型    |  必填  | 说明                       |
5722| --------| ------- | ---- | ---------------------------|
5723|  enable | boolean | 是   | 是否启用检查网站安全风险的功能。<br>true表示启用检查网站安全风险的功能,false表示不启用检查网站安全风险的功能。<br>默认值:false。 |
5724
5725**错误码:**
5726
5727以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5728
5729| 错误码ID | 错误信息                  |
5730| -------- | ----------------------- |
5731| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5732
5733**示例:**
5734
5735```ts
5736// xxx.ets
5737import { webview } from '@kit.ArkWeb';
5738import { BusinessError } from '@kit.BasicServicesKit';
5739
5740@Entry
5741@Component
5742struct WebComponent {
5743  controller: webview.WebviewController = new webview.WebviewController();
5744
5745  build() {
5746    Column() {
5747      Button('enableSafeBrowsing')
5748        .onClick(() => {
5749          try {
5750            this.controller.enableSafeBrowsing(true);
5751            console.log("enableSafeBrowsing: true");
5752          } catch (error) {
5753            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5754          }
5755        })
5756      Web({ src: 'www.example.com', controller: this.controller })
5757    }
5758  }
5759}
5760```
5761
5762### isSafeBrowsingEnabled<sup>11+</sup>
5763
5764isSafeBrowsingEnabled(): boolean
5765
5766获取当前网页是否启用了检查网站安全风险。
5767
5768**系统能力:** SystemCapability.Web.Webview.Core
5769
5770**返回值:**
5771
5772| 类型    | 说明                                     |
5773| ------- | --------------------------------------- |
5774| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false,表示未启用。|
5775
5776**示例:**
5777
5778```ts
5779// xxx.ets
5780import { webview } from '@kit.ArkWeb';
5781
5782@Entry
5783@Component
5784struct WebComponent {
5785  controller: webview.WebviewController = new webview.WebviewController();
5786
5787  build() {
5788    Column() {
5789      Button('isSafeBrowsingEnabled')
5790        .onClick(() => {
5791          let result = this.controller.isSafeBrowsingEnabled();
5792          console.log("result: " + result);
5793        })
5794      Web({ src: 'www.example.com', controller: this.controller })
5795    }
5796  }
5797}
5798```
5799
5800### enableIntelligentTrackingPrevention<sup>12+</sup>
5801
5802enableIntelligentTrackingPrevention(enable: boolean): void
5803
5804启用智能防跟踪功能,默认该功能未启用。
5805
5806**系统能力:** SystemCapability.Web.Webview.Core
5807
5808**参数:**
5809
5810| 参数名   | 类型    |  必填  | 说明                       |
5811| --------| ------- | ---- | ---------------------------|
5812|  enable | boolean | 是   | 是否启用智能防跟踪功能。<br>true表示启用启用智能防跟踪功能,false表示不启用启用智能防跟踪功能。<br>默认值:false。 |
5813
5814**错误码:**
5815
5816> **说明:**
5817>
5818> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。
5819
5820以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5821
5822| 错误码ID | 错误信息                  |
5823| -------- | ----------------------- |
5824| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5825|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5826|  801 | Capability not supported. |
5827
5828**示例:**
5829
5830```ts
5831// xxx.ets
5832import { webview } from '@kit.ArkWeb';
5833import { BusinessError } from '@kit.BasicServicesKit';
5834
5835@Entry
5836@Component
5837struct WebComponent {
5838  controller: webview.WebviewController = new webview.WebviewController();
5839
5840  build() {
5841    Column() {
5842      Button('enableIntelligentTrackingPrevention')
5843        .onClick(() => {
5844          try {
5845            this.controller.enableIntelligentTrackingPrevention(true);
5846            console.log("enableIntelligentTrackingPrevention: true");
5847          } catch (error) {
5848            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5849          }
5850        })
5851      Web({ src: 'www.example.com', controller: this.controller })
5852    }
5853  }
5854}
5855```
5856
5857### isIntelligentTrackingPreventionEnabled<sup>12+</sup>
5858
5859isIntelligentTrackingPreventionEnabled(): boolean
5860
5861获取当前Web是否启用了智能防跟踪功能。
5862
5863**系统能力:** SystemCapability.Web.Webview.Core
5864
5865**返回值:**
5866
5867| 类型    | 说明                                     |
5868| ------- | --------------------------------------- |
5869| boolean | 当前Web是否启用了智能防跟踪功能,默认为false,表示未启用。|
5870
5871**错误码:**
5872
5873> **说明:**
5874>
5875> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。
5876
5877以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5878
5879| 错误码ID | 错误信息                  |
5880| -------- | ----------------------- |
5881| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5882|  801 | Capability not supported. |
5883
5884**示例:**
5885
5886```ts
5887// xxx.ets
5888import { webview } from '@kit.ArkWeb';
5889import { BusinessError } from '@kit.BasicServicesKit';
5890
5891@Entry
5892@Component
5893struct WebComponent {
5894  controller: webview.WebviewController = new webview.WebviewController();
5895
5896  build() {
5897    Column() {
5898      Button('isIntelligentTrackingPreventionEnabled')
5899        .onClick(() => {
5900          try {
5901            let result = this.controller.isIntelligentTrackingPreventionEnabled();
5902            console.log("result: " + result);
5903          } catch (error) {
5904            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5905          }
5906        })
5907      Web({ src: 'www.example.com', controller: this.controller })
5908    }
5909  }
5910}
5911```
5912
5913### addIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5914
5915static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5916
5917添加智能防跟踪功能绕过的域名列表。
5918
5919**系统能力:** SystemCapability.Web.Webview.Core
5920
5921**参数:**
5922
5923| 参数名       | 类型           | 必填  | 说明                      |
5924| ----------- | ------------- | ---- | ------------------------ |
5925| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5926
5927**错误码:**
5928
5929> **说明:**
5930>
5931> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。
5932
5933以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5934
5935| 错误码ID  | 错误信息                  |
5936| -------- | ------------------------ |
5937|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5938|  801     | Capability not supported. |
5939
5940**示例:**
5941
5942```ts
5943// xxx.ets
5944import { webview } from '@kit.ArkWeb';
5945import { BusinessError } from '@kit.BasicServicesKit';
5946
5947@Entry
5948@Component
5949struct WebComponent {
5950  controller: webview.WebviewController = new webview.WebviewController();
5951
5952  build() {
5953    Column() {
5954      Button('addIntelligentTrackingPreventionBypassingList')
5955        .onClick(() => {
5956          try {
5957            let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"];
5958            webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);
5959          } catch (error) {
5960            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5961          }
5962        })
5963      Web({ src: 'www.example.com', controller: this.controller })
5964    }
5965  }
5966}
5967```
5968
5969### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5970
5971static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5972
5973删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。
5974
5975**系统能力:** SystemCapability.Web.Webview.Core
5976
5977**参数:**
5978
5979| 参数名       | 类型           | 必填  | 说明                      |
5980| ----------- | ------------- | ---- | ------------------------ |
5981| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5982
5983**错误码:**
5984
5985> **说明:**
5986>
5987> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。
5988
5989以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5990
5991| 错误码ID  | 错误信息                  |
5992| -------- | ------------------------ |
5993|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5994|  801     | Capability not supported. |
5995
5996**示例:**
5997
5998```ts
5999// xxx.ets
6000import { webview } from '@kit.ArkWeb';
6001import { BusinessError } from '@kit.BasicServicesKit';
6002
6003@Entry
6004@Component
6005struct WebComponent {
6006  controller: webview.WebviewController = new webview.WebviewController();
6007
6008  build() {
6009    Column() {
6010      Button('removeIntelligentTrackingPreventionBypassingList')
6011        .onClick(() => {
6012          try {
6013            let hostList = ["www.test1.com", "www.test2.com"];
6014            webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);
6015          } catch (error) {
6016            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6017          }
6018        })
6019      Web({ src: 'www.example.com', controller: this.controller })
6020    }
6021  }
6022}
6023```
6024
6025### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup>
6026
6027static clearIntelligentTrackingPreventionBypassingList(): void
6028
6029删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。
6030
6031**系统能力:** SystemCapability.Web.Webview.Core
6032
6033**错误码:**
6034
6035> **说明:**
6036>
6037> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。
6038
6039以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6040
6041| 错误码ID  | 错误信息                  |
6042| -------- | ------------------------ |
6043|  801     | Capability not supported. |
6044
6045**示例:**
6046
6047```ts
6048// xxx.ets
6049import { webview } from '@kit.ArkWeb';
6050
6051@Entry
6052@Component
6053struct WebComponent {
6054  controller: webview.WebviewController = new webview.WebviewController();
6055
6056  build() {
6057    Column() {
6058      Button('clearIntelligentTrackingPreventionBypassingList')
6059        .onClick(() => {
6060          webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();
6061      })
6062      Web({ src: 'www.example.com', controller: this.controller })
6063    }
6064  }
6065}
6066```
6067
6068### getDefaultUserAgent<sup>14+</sup>
6069
6070static getDefaultUserAgent(): string
6071
6072获取默认用户代理。
6073
6074此接口只允许在UI线程调用。
6075
6076默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md)
6077
6078**系统能力:** SystemCapability.Web.Webview.Core
6079
6080**示例:**
6081
6082```ts
6083// xxx.ets
6084import { webview } from '@kit.ArkWeb';
6085import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
6086
6087export default class EntryAbility extends UIAbility {
6088  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
6089    console.log("EntryAbility onCreate");
6090    webview.WebviewController.initializeWebEngine();
6091    let defaultUserAgent = webview.WebviewController.getDefaultUserAgent();
6092    console.log("defaultUserAgent: " + defaultUserAgent);
6093  }
6094}
6095```
6096
6097### enableAdsBlock<sup>12+</sup>
6098
6099enableAdsBlock(enable: boolean): void
6100
6101启用广告过滤功能,默认该功能未启用。
6102
6103**系统能力:** SystemCapability.Web.Webview.Core
6104
6105**参数:**
6106
6107| 参数名   | 类型    |  必填  | 说明                       |
6108| --------| ------- | ---- | ---------------------------|
6109|  enable | boolean | 是   | 是否启用广告过滤功能,默认为false,表示未启用。 |
6110
6111**错误码:**
6112
6113> **说明:**
6114>
6115> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
6116
6117以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6118
6119| 错误码ID | 错误信息                  |
6120| -------- | ----------------------- |
6121| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6122|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
6123|  801 | Capability not supported. |
6124
6125**示例:**
6126
6127```ts
6128// xxx.ets
6129import { webview } from '@kit.ArkWeb';
6130import { BusinessError } from '@kit.BasicServicesKit';
6131
6132@Entry
6133@Component
6134struct WebComponent {
6135  controller: webview.WebviewController = new webview.WebviewController();
6136
6137  build() {
6138    Column() {
6139      Button('enableAdsBlock')
6140        .onClick(() => {
6141          try {
6142            this.controller.enableAdsBlock(true);
6143            console.log("enableAdsBlock: true")
6144          } catch (error) {
6145            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6146          }
6147        })
6148      Web({ src: 'www.example.com', controller: this.controller })
6149    }
6150  }
6151}
6152```
6153
6154### isAdsBlockEnabled<sup>12+</sup>
6155
6156isAdsBlockEnabled() : boolean
6157
6158查询广告过滤功能是否开启,默认该功能未启用。
6159
6160**系统能力:** SystemCapability.Web.Webview.Core
6161
6162**返回值:**
6163
6164| 类型                                                         | 说明                   |
6165| ------------------------------------------------------------ | ---------------------- |
6166| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 |
6167
6168**错误码:**
6169
6170> **说明:**
6171>
6172> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
6173
6174以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6175
6176| 错误码ID | 错误信息                  |
6177| -------- | ----------------------- |
6178|  801 | Capability not supported. |
6179
6180**示例:**
6181
6182```ts
6183// xxx.ets
6184import { webview } from '@kit.ArkWeb';
6185import { BusinessError } from '@kit.BasicServicesKit';
6186
6187@Entry
6188@Component
6189struct WebComponent {
6190  controller: webview.WebviewController = new webview.WebviewController();
6191
6192  build() {
6193    Column() {
6194      Button('isAdsBlockEnabled')
6195        .onClick(() => {
6196          try {
6197            let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled();
6198            console.log("isAdsBlockEnabled:", isAdsBlockEnabled);
6199          } catch (error) {
6200            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6201          }
6202        })
6203      Web({ src: 'www.example.com', controller: this.controller })
6204    }
6205  }
6206}
6207```
6208
6209### isAdsBlockEnabledForCurPage<sup>12+</sup>
6210
6211isAdsBlockEnabledForCurPage() : boolean
6212
6213查询当前网页是否开启广告过滤功能。
6214当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。
6215
6216**系统能力:** SystemCapability.Web.Webview.Core
6217
6218**返回值:**
6219
6220| 类型                                                         | 说明                   |
6221| ------------------------------------------------------------ | ---------------------- |
6222| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 |
6223
6224**错误码:**
6225
6226> **说明:**
6227>
6228> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
6229
6230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6231
6232| 错误码ID | 错误信息                  |
6233| -------- | ----------------------- |
6234|  801 | Capability not supported. |
6235
6236**示例:**
6237
6238```ts
6239// xxx.ets
6240import { webview } from '@kit.ArkWeb';
6241import { BusinessError } from '@kit.BasicServicesKit';
6242
6243@Entry
6244@Component
6245struct WebComponent {
6246  controller: webview.WebviewController = new webview.WebviewController();
6247
6248  build() {
6249    Column() {
6250      Button('isAdsBlockEnabledForCurPage')
6251        .onClick(() => {
6252          try {
6253            let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage();
6254            console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage);
6255          } catch (error) {
6256            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6257          }
6258        })
6259      Web({ src: 'www.example.com', controller: this.controller })
6260    }
6261  }
6262}
6263```
6264
6265### setRenderProcessMode<sup>12+</sup>
6266
6267static setRenderProcessMode(mode: RenderProcessMode): void
6268
6269设置ArkWeb渲染子进程模式。
6270
6271**系统能力:** SystemCapability.Web.Webview.Core
6272
6273**参数:**
6274
6275| 参数名       | 类型           | 必填  | 说明                      |
6276| ----------- | ------------- | ---- | ------------------------ |
6277| mode        | [RenderProcessMode](#renderprocessmode12)| 是   | 渲染子进程模式。可以先调用[getRenderProcessMode()](#getrenderprocessmode12)查看当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。 |
6278
6279**错误码:**
6280
6281以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6282
6283| 错误码ID  | 错误信息                  |
6284| -------- | ------------------------ |
6285|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6286
6287**示例:**
6288
6289```ts
6290// xxx.ets
6291import { webview } from '@kit.ArkWeb';
6292import { BusinessError } from '@kit.BasicServicesKit';
6293
6294@Entry
6295@Component
6296struct WebComponent {
6297  controller: webview.WebviewController = new webview.WebviewController();
6298
6299  build() {
6300    Column() {
6301      Button('setRenderProcessMode')
6302        .onClick(() => {
6303          try {
6304            webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE);
6305          } catch (error) {
6306            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6307          }
6308        })
6309      Web({ src: 'www.example.com', controller: this.controller })
6310    }
6311  }
6312}
6313```
6314### getRenderProcessMode<sup>12+</sup>
6315
6316static getRenderProcessMode(): RenderProcessMode
6317
6318查询ArkWeb的渲染子进程模式。
6319
6320**系统能力:** SystemCapability.Web.Webview.Core
6321
6322**返回值:**
6323
6324| 类型                                      | 说明                                                         |
6325| ----------------------------------------- | ------------------------------------------------------------ |
6326| [RenderProcessMode](#renderprocessmode12) | 渲染子进程模式类型。调用[getRenderProcessMode()](#getrenderprocessmode12)获取当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。 |
6327
6328
6329**示例:**
6330
6331```ts
6332// xxx.ets
6333import { webview } from '@kit.ArkWeb';
6334
6335@Entry
6336@Component
6337struct WebComponent {
6338  controller: webview.WebviewController = new webview.WebviewController();
6339
6340  build() {
6341    Column() {
6342      Button('getRenderProcessMode')
6343        .onClick(() => {
6344          let mode = webview.WebviewController.getRenderProcessMode();
6345          console.log("getRenderProcessMode: " + mode);
6346        })
6347      Web({ src: 'www.example.com', controller: this.controller })
6348    }
6349  }
6350}
6351```
6352
6353### terminateRenderProcess<sup>12+</sup>
6354
6355terminateRenderProcess(): boolean
6356
6357销毁渲染进程。
6358
6359调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。
6360
6361**系统能力:** SystemCapability.Web.Webview.Core
6362
6363**返回值:**
6364
6365| 类型                                                         | 说明                   |
6366| ------------------------------------------------------------ | ---------------------- |
6367| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。|
6368
6369**错误码:**
6370
6371以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6372
6373| 错误码ID  | 错误信息                                                      |
6374| -------- | ------------------------------------------------------------ |
6375| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6376
6377**示例:**
6378
6379```ts
6380// xxx.ets
6381import { webview } from '@kit.ArkWeb';
6382
6383@Entry
6384@Component
6385struct WebComponent {
6386  controller: webview.WebviewController = new webview.WebviewController();
6387
6388  build() {
6389    Column() {
6390      Button('terminateRenderProcess')
6391        .onClick(() => {
6392          let result = this.controller.terminateRenderProcess();
6393          console.log("terminateRenderProcess result: " + result);
6394        })
6395      Web({ src: 'www.example.com', controller: this.controller })
6396    }
6397  }
6398}
6399```
6400
6401### postUrl<sup>11+</sup>
6402
6403postUrl(url: string, postData: ArrayBuffer): void
6404
6405使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。
6406
6407**系统能力:** SystemCapability.Web.Webview.Core
6408
6409**参数:**
6410
6411| 参数名  | 类型             | 必填 | 说明                  |
6412| ------- | ---------------- | ---- | :-------------------- |
6413| url     | string | 是   | 需要加载的 URL。      |
6414| postData | ArrayBuffer | 是   | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。|
6415
6416**错误码:**
6417
6418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6419
6420| 错误码ID | 错误信息                                                     |
6421| -------- | ------------------------------------------------------------ |
6422| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6423| 17100002 | Invalid url.                                                 |
6424| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6425
6426**示例:**
6427
6428```ts
6429// xxx.ets
6430import { webview } from '@kit.ArkWeb';
6431import { BusinessError } from '@kit.BasicServicesKit';
6432
6433class TestObj {
6434  constructor() {
6435  }
6436
6437  test(str: string): ArrayBuffer {
6438    let buf = new ArrayBuffer(str.length);
6439    let buff = new Uint8Array(buf);
6440
6441    for (let i = 0; i < str.length; i++) {
6442      buff[i] = str.charCodeAt(i);
6443    }
6444    return buf;
6445  }
6446}
6447
6448@Entry
6449@Component
6450struct WebComponent {
6451  controller: webview.WebviewController = new webview.WebviewController();
6452  @State testObjtest: TestObj = new TestObj();
6453
6454  build() {
6455    Column() {
6456      Button('postUrl')
6457        .onClick(() => {
6458          try {
6459            // 数据转化为ArrayBuffer类型。
6460            let postData = this.testObjtest.test("Name=test&Password=test");
6461            this.controller.postUrl('www.example.com', postData);
6462          } catch (error) {
6463            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6464          }
6465        })
6466      Web({ src: '', controller: this.controller })
6467    }
6468  }
6469}
6470```
6471
6472### createWebPrintDocumentAdapter<sup>11+</sup>
6473
6474createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter
6475
6476创建web相关打印功能。
6477
6478**系统能力:** SystemCapability.Web.Webview.Core
6479
6480**参数:**
6481
6482| 参数名  | 类型    | 必填 | 说明                  |
6483| ------- | ------ | ---- | :-------------------- |
6484| jobName | string | 是   | 需要打印的文件名。      |
6485
6486**返回值:**
6487
6488| 类型                 | 说明                      |
6489| -------------------- | ------------------------- |
6490| print.printDocumentAdapter | 返回打印文档的适配器。 |
6491
6492**错误码:**
6493
6494以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6495
6496| 错误码ID | 错误信息                                                                    |
6497| -------- | -------------------------------------------------------------------------- |
6498| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6499| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6500
6501**示例:**
6502
6503```ts
6504// xxx.ets
6505import { webview } from '@kit.ArkWeb';
6506import { BusinessError, print } from '@kit.BasicServicesKit';
6507
6508@Entry
6509@Component
6510struct WebComponent {
6511  controller: webview.WebviewController = new webview.WebviewController();
6512
6513  build() {
6514    Column() {
6515      Button('createWebPrintDocumentAdapter')
6516        .onClick(() => {
6517          try {
6518            let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf');
6519            print.print('example_jobid', webPrintDocadapter, null, this.getUIContext().getHostContext());
6520          } catch (error) {
6521            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6522          }
6523        })
6524      Web({ src: 'www.example.com', controller: this.controller })
6525    }
6526  }
6527}
6528```
6529### isIncognitoMode<sup>11+</sup>
6530
6531isIncognitoMode(): boolean
6532
6533查询当前是否是隐私模式的Webview。
6534
6535**系统能力:** SystemCapability.Web.Webview.Core
6536
6537**返回值:**
6538
6539| 类型                 | 说明                      |
6540| -------------------- | ------------------------- |
6541| boolean              | 返回是否是隐私模式的Webview,默认为false,表示未开启隐私模式。 |
6542
6543**错误码:**
6544
6545以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6546
6547| 错误码ID | 错误信息                                                                    |
6548| -------- | -------------------------------------------------------------------------- |
6549| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6550
6551**示例:**
6552
6553```ts
6554// xxx.ets
6555import { webview } from '@kit.ArkWeb';
6556import { BusinessError } from '@kit.BasicServicesKit';
6557
6558@Entry
6559@Component
6560struct WebComponent {
6561  controller: webview.WebviewController = new webview.WebviewController();
6562
6563  build() {
6564    Column() {
6565      Button('isIncognitoMode')
6566        .onClick(() => {
6567          try {
6568            let result = this.controller.isIncognitoMode();
6569            console.log('isIncognitoMode' + result);
6570          } catch (error) {
6571            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6572          }
6573        })
6574      Web({ src: 'www.example.com', controller: this.controller })
6575    }
6576  }
6577}
6578```
6579
6580### getSecurityLevel<sup>11+</sup>
6581
6582getSecurityLevel(): SecurityLevel
6583
6584获取当前网页的安全级别。
6585
6586**系统能力:** SystemCapability.Web.Webview.Core
6587
6588**返回值:**
6589
6590| 类型                                | 说明                        |
6591| ----------------------------------- | --------------------------- |
6592| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 |
6593
6594**错误码:**
6595
6596以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6597
6598| 错误码ID | 错误信息                                                     |
6599| -------- | ------------------------------------------------------------ |
6600| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6601
6602**示例:**
6603
6604```ts
6605import { webview } from '@kit.ArkWeb';
6606
6607@Entry
6608@Component
6609struct WebComponent {
6610  controller: webview.WebviewController = new webview.WebviewController();
6611
6612  build() {
6613    Column() {
6614      Web({ src: 'www.example.com', controller: this.controller })
6615        .onPageEnd((event) => {
6616          if (event) {
6617            let securityLevel = this.controller.getSecurityLevel();
6618            console.info('securityLevel: ', securityLevel);
6619          }
6620        })
6621    }
6622  }
6623}
6624```
6625
6626### setScrollable<sup>12+</sup>
6627
6628setScrollable(enable: boolean, type?: ScrollType): void
6629
6630设置网页是否允许滚动。
6631
6632**系统能力:** SystemCapability.Web.Webview.Core
6633
6634**参数:**
6635
6636| 参数名 | 类型 | 必填 | 说明               |
6637| ------ | -------- | ---- | ---------------------- |
6638| enable     | boolean   | 是   | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 |
6639| type       | [ScrollType](#scrolltype12) |  否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。|
6640
6641**错误码:**
6642
6643以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6644
6645| 错误码ID | 错误信息                                                     |
6646| -------- | ------------------------------------------------------------ |
6647| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
6648| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6649
6650**示例:**
6651
6652```ts
6653// xxx.ets
6654import { webview } from '@kit.ArkWeb';
6655import { BusinessError } from '@kit.BasicServicesKit';
6656
6657@Entry
6658@Component
6659struct WebComponent {
6660  controller: webview.WebviewController = new webview.WebviewController();
6661
6662  build() {
6663    Column() {
6664      Button('setScrollable')
6665        .onClick(() => {
6666          try {
6667            this.controller.setScrollable(true);
6668          } catch (error) {
6669            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6670          }
6671        })
6672      Web({ src: 'www.example.com', controller: this.controller })
6673    }
6674  }
6675}
6676```
6677
6678### getScrollable<sup>12+</sup>
6679
6680getScrollable(): boolean
6681
6682获取当前网页是否允许滚动。
6683
6684**系统能力:** SystemCapability.Web.Webview.Core
6685
6686**返回值:**
6687
6688| 类型   | 说明           |
6689| ------ | -------------- |
6690| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 |
6691
6692**错误码:**
6693
6694以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6695
6696| 错误码ID | 错误信息                                                     |
6697| -------- | ------------------------------------------------------------ |
6698| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6699
6700**示例:**
6701
6702```ts
6703// xxx.ets
6704import { webview } from '@kit.ArkWeb';
6705import { BusinessError } from '@kit.BasicServicesKit';
6706
6707@Entry
6708@Component
6709struct WebComponent {
6710  controller: webview.WebviewController = new webview.WebviewController();
6711
6712  build() {
6713    Column() {
6714      Button('getScrollable')
6715        .onClick(() => {
6716          try {
6717            let scrollEnabled = this.controller.getScrollable();
6718            console.log("scrollEnabled: " + scrollEnabled);
6719          } catch (error) {
6720            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6721          }
6722        })
6723      Web({ src: 'www.example.com', controller: this.controller })
6724    }
6725  }
6726}
6727```
6728
6729### setPrintBackground<sup>12+</sup>
6730
6731setPrintBackground(enable: boolean): void
6732
6733设置是否打印网页背景。
6734
6735**系统能力:** SystemCapability.Web.Webview.Core
6736
6737**参数:**
6738
6739| 参数名   | 类型    | 必填 | 说明                      |
6740| -------- | ------- | ---- | -------------------------------------- |
6741| enable | boolean | 是   | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 |
6742
6743**错误码:**
6744
6745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6746
6747| 错误码ID | 错误信息                                                     |
6748| -------- | ------------------------------------------------------------ |
6749| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6750| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6751
6752**示例:**
6753
6754```ts
6755import { webview } from '@kit.ArkWeb';
6756import { BusinessError } from '@kit.BasicServicesKit';
6757
6758@Entry
6759@Component
6760struct WebComponent {
6761  controller: webview.WebviewController = new webview.WebviewController();
6762
6763  build() {
6764    Column() {
6765      Button('setPrintBackground')
6766        .onClick(() => {
6767          try {
6768            this.controller.setPrintBackground(false);
6769          } catch (error) {
6770            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6771          }
6772        })
6773      Web({ src: 'www.example.com', controller: this.controller })
6774    }
6775  }
6776}
6777```
6778
6779### getPrintBackground<sup>12+</sup>
6780
6781getPrintBackground(): boolean
6782
6783查询webview是否打印网页背景。
6784
6785**系统能力:** SystemCapability.Web.Webview.Core
6786
6787**返回值:**
6788
6789| 类型                 | 说明                      |
6790| -------------------- | ------------------------- |
6791| boolean              | 返回Webview是否打印网页背景。<br>true:打印网页背景;false:不打印网页背景。 |
6792
6793**错误码:**
6794
6795以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6796
6797| 错误码ID | 错误信息                                                     |
6798| -------- | ------------------------------------------------------------ |
6799| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6800
6801**示例:**
6802
6803```ts
6804import { webview } from '@kit.ArkWeb';
6805import { BusinessError } from '@kit.BasicServicesKit';
6806
6807@Entry
6808@Component
6809struct WebComponent {
6810  controller: webview.WebviewController = new webview.WebviewController();
6811
6812  build() {
6813    Column() {
6814      Button('setPrintBackground')
6815        .onClick(() => {
6816          try {
6817            let enable = this.controller.getPrintBackground();
6818            console.log("getPrintBackground: " + enable);
6819          } catch (error) {
6820            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6821          }
6822        })
6823      Web({ src: 'www.example.com', controller: this.controller })
6824    }
6825  }
6826}
6827```
6828
6829### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>
6830
6831getLastJavascriptProxyCallingFrameUrl(): string
6832
6833通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。
6834
6835**系统能力:** SystemCapability.Web.Webview.Core
6836
6837**错误码:**
6838
6839以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6840
6841| 错误码ID | 错误信息                                                     |
6842| -------- | ------------------------------------------------------------ |
6843| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6844
6845**示例:**
6846
6847```ts
6848// xxx.ets
6849import { webview } from '@kit.ArkWeb';
6850import { BusinessError } from '@kit.BasicServicesKit';
6851
6852class TestObj {
6853  mycontroller: webview.WebviewController;
6854
6855  constructor(controller: webview.WebviewController) {
6856    this.mycontroller = controller;
6857  }
6858
6859  test(testStr: string): string {
6860    console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6861    return testStr;
6862  }
6863
6864  toString(): void {
6865    console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6866  }
6867
6868  testNumber(testNum: number): number {
6869    console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6870    return testNum;
6871  }
6872
6873  testBool(testBol: boolean): boolean {
6874    console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6875    return testBol;
6876  }
6877}
6878
6879class WebObj {
6880  mycontroller: webview.WebviewController;
6881
6882  constructor(controller: webview.WebviewController) {
6883    this.mycontroller = controller;
6884  }
6885
6886  webTest(): string {
6887    console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6888    return "Web test";
6889  }
6890
6891  webString(): void {
6892    console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6893  }
6894}
6895
6896@Entry
6897@Component
6898struct Index {
6899  controller: webview.WebviewController = new webview.WebviewController();
6900  @State testObjtest: TestObj = new TestObj(this.controller);
6901  @State webTestObj: WebObj = new WebObj(this.controller);
6902
6903  build() {
6904    Column() {
6905      Button('refresh')
6906        .onClick(() => {
6907          try {
6908            this.controller.refresh();
6909          } catch (error) {
6910            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6911          }
6912        })
6913      Button('Register JavaScript To Window')
6914        .onClick(() => {
6915          try {
6916            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
6917            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
6918          } catch (error) {
6919            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6920          }
6921        })
6922      Button('deleteJavaScriptRegister')
6923        .onClick(() => {
6924          try {
6925            this.controller.deleteJavaScriptRegister("objName");
6926            this.controller.deleteJavaScriptRegister("objTestName");
6927          } catch (error) {
6928            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6929          }
6930        })
6931      Web({ src: $rawfile('index.html'), controller: this.controller })
6932        .javaScriptAccess(true)
6933    }
6934  }
6935}
6936```
6937
6938加载的html文件。
6939```html
6940<!-- index.html -->
6941<!DOCTYPE html>
6942<html>
6943    <meta charset="utf-8">
6944    <body>
6945      <button type="button" onclick="htmlTest()">Click Me!</button>
6946      <p id="demo"></p>
6947      <p id="webDemo"></p>
6948    </body>
6949    <script type="text/javascript">
6950    function htmlTest() {
6951      // This function call expects to return "ArkUI Web Component"
6952      let str=objName.test("webtest data");
6953      objName.testNumber(1);
6954      objName.testBool(true);
6955      document.getElementById("demo").innerHTML=str;
6956      console.log('objName.test result:'+ str)
6957
6958      // This function call expects to return "Web test"
6959      let webStr = objTestName.webTest();
6960      document.getElementById("webDemo").innerHTML=webStr;
6961      console.log('objTestName.webTest result:'+ webStr)
6962    }
6963</script>
6964</html>
6965```
6966
6967### pauseAllTimers<sup>12+</sup>
6968
6969pauseAllTimers(): void
6970
6971暂停所有WebView的定时器。
6972
6973**系统能力:** SystemCapability.Web.Webview.Core
6974
6975**错误码:**
6976
6977以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6978
6979| 错误码ID | 错误信息                                                     |
6980| -------- | ------------------------------------------------------------ |
6981| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6982
6983**示例:**
6984
6985```ts
6986import { webview } from '@kit.ArkWeb';
6987import { BusinessError } from '@kit.BasicServicesKit';
6988
6989@Entry
6990@Component
6991struct WebComponent {
6992  controller: webview.WebviewController = new webview.WebviewController();
6993
6994  build() {
6995    Column() {
6996      Row() {
6997        Button('PauseAllTimers')
6998          .onClick(() => {
6999            try {
7000              webview.WebviewController.pauseAllTimers();
7001            } catch (error) {
7002              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7003            }
7004          })
7005      }
7006      Web({ src: $rawfile("index.html"), controller: this.controller })
7007    }
7008  }
7009}
7010```
7011加载的html文件。
7012
7013```html
7014<!DOCTYPE html>
7015<html>
7016    <body>
7017        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
7018        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
7019        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
7020    </body>
7021</html>
7022<script>
7023    var timer = null;
7024    var num = 0;
7025
7026    function startTimer() {
7027        timer = setInterval(function() {
7028            document.getElementById("show_num").value = ++num;
7029        }, 1000);
7030    }
7031</script>
7032```
7033
7034### resumeAllTimers<sup>12+</sup>
7035
7036resumeAllTimers(): void
7037
7038恢复从pauseAllTimers()接口中被暂停的所有的定时器。
7039
7040**系统能力:** SystemCapability.Web.Webview.Core
7041
7042**错误码:**
7043
7044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7045
7046| 错误码ID | 错误信息                                                     |
7047| -------- | ------------------------------------------------------------ |
7048| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7049
7050**示例:**
7051
7052```ts
7053import { webview } from '@kit.ArkWeb';
7054import { BusinessError } from '@kit.BasicServicesKit';
7055
7056@Entry
7057@Component
7058struct WebComponent {
7059  controller: webview.WebviewController = new webview.WebviewController();
7060
7061  build() {
7062    Column() {
7063      Row() {
7064        Button('ResumeAllTimers')
7065          .onClick(() => {
7066            try {
7067              webview.WebviewController.resumeAllTimers();
7068            } catch (error) {
7069              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7070            }
7071          })
7072        Button('PauseAllTimers')
7073          .onClick(() => {
7074            try {
7075              webview.WebviewController.pauseAllTimers();
7076            } catch (error) {
7077              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7078            }
7079          })
7080      }
7081      Web({ src: $rawfile("index.html"), controller: this.controller })
7082    }
7083  }
7084}
7085```
7086加载的html文件。
7087
7088```html
7089<!DOCTYPE html>
7090<html>
7091    <body>
7092        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
7093        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
7094        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
7095    </body>
7096</html>
7097<script>
7098    var timer = null;
7099    var num = 0;
7100
7101    function startTimer() {
7102        timer = setInterval(function() {
7103            document.getElementById("show_num").value = ++num;
7104        }, 1000);
7105    }
7106
7107    function resetTimer() {
7108        clearInterval(timer);
7109        document.getElementById("show_num").value = 0;
7110        num = 0;
7111    }
7112</script>
7113```
7114
7115### stopAllMedia<sup>12+</sup>
7116
7117stopAllMedia(): void
7118
7119控制网页所有音视频停止。
7120
7121**系统能力:** SystemCapability.Web.Webview.Core
7122
7123**错误码:**
7124
7125以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7126
7127| 错误码ID | 错误信息                                                     |
7128| -------- | ------------------------------------------------------------ |
7129| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7130
7131**示例:**
7132
7133```ts
7134// xxx.ets
7135import { webview } from '@kit.ArkWeb';
7136import { BusinessError } from '@kit.BasicServicesKit';
7137
7138@Entry
7139@Component
7140struct WebComponent {
7141  controller: webview.WebviewController = new webview.WebviewController();
7142
7143  build() {
7144    Column() {
7145      Button('stopAllMedia')
7146        .onClick(() => {
7147          try {
7148            this.controller.stopAllMedia();
7149          } catch (error) {
7150            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7151          }
7152        })
7153      Web({ src: 'www.example.com', controller: this.controller })
7154    }
7155  }
7156}
7157```
7158
7159### pauseAllMedia<sup>12+</sup>
7160
7161pauseAllMedia(): void
7162
7163控制网页所有音视频暂停。
7164
7165**系统能力:** SystemCapability.Web.Webview.Core
7166
7167**错误码:**
7168
7169以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7170
7171| 错误码ID | 错误信息                                                     |
7172| -------- | ------------------------------------------------------------ |
7173| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7174
7175**示例:**
7176
7177```ts
7178// xxx.ets
7179import { webview } from '@kit.ArkWeb';
7180import { BusinessError } from '@kit.BasicServicesKit';
7181
7182@Entry
7183@Component
7184struct WebComponent {
7185  controller: webview.WebviewController = new webview.WebviewController();
7186
7187  build() {
7188    Column() {
7189      Button('pauseAllMedia')
7190        .onClick(() => {
7191          try {
7192            this.controller.pauseAllMedia();
7193          } catch (error) {
7194            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7195          }
7196        })
7197      Web({ src: 'www.example.com', controller: this.controller })
7198    }
7199  }
7200}
7201```
7202
7203### resumeAllMedia<sup>12+</sup>
7204
7205resumeAllMedia(): void
7206
7207控制网页被pauseAllMedia接口暂停的音视频继续播放。
7208
7209**系统能力:** SystemCapability.Web.Webview.Core
7210
7211**错误码:**
7212
7213以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7214
7215| 错误码ID | 错误信息                                                     |
7216| -------- | ------------------------------------------------------------ |
7217| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7218
7219**示例:**
7220
7221```ts
7222// xxx.ets
7223import { webview } from '@kit.ArkWeb';
7224import { BusinessError } from '@kit.BasicServicesKit';
7225
7226@Entry
7227@Component
7228struct WebComponent {
7229  controller: webview.WebviewController = new webview.WebviewController();
7230
7231  build() {
7232    Column() {
7233      Button('resumeAllMedia')
7234        .onClick(() => {
7235          try {
7236            this.controller.resumeAllMedia();
7237          } catch (error) {
7238            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7239          }
7240        })
7241      Web({ src: 'www.example.com', controller: this.controller })
7242    }
7243  }
7244}
7245```
7246
7247### closeAllMediaPresentations<sup>12+</sup>
7248
7249closeAllMediaPresentations(): void
7250
7251控制网页所有全屏视频关闭。
7252
7253**系统能力:** SystemCapability.Web.Webview.Core
7254
7255**错误码:**
7256
7257以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7258
7259| 错误码ID | 错误信息                                                     |
7260| -------- | ------------------------------------------------------------ |
7261| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7262
7263**示例:**
7264
7265```ts
7266// xxx.ets
7267import { webview } from '@kit.ArkWeb';
7268import { BusinessError } from '@kit.BasicServicesKit';
7269
7270@Entry
7271@Component
7272struct WebComponent {
7273  controller: webview.WebviewController = new webview.WebviewController();
7274
7275  build() {
7276    Column() {
7277      Button('closeAllMediaPresentations')
7278        .onClick(() => {
7279          try {
7280            this.controller.closeAllMediaPresentations();
7281          } catch (error) {
7282            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7283          }
7284        })
7285      Web({ src: 'www.example.com', controller: this.controller })
7286    }
7287  }
7288}
7289```
7290
7291### getMediaPlaybackState<sup>12+</sup>
7292
7293getMediaPlaybackState(): MediaPlaybackState
7294
7295查询当前所有音视频播控状态。
7296
7297**系统能力:** SystemCapability.Web.Webview.Core
7298
7299**返回值:**
7300
7301| 类型                                        | 说明                                                      |
7302| ------------------------------------------- | --------------------------------------------------------- |
7303| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 |
7304
7305**错误码:**
7306
7307以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7308
7309| 错误码ID | 错误信息                                                     |
7310| -------- | ------------------------------------------------------------ |
7311| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7312
7313**示例:**
7314
7315```ts
7316// xxx.ets
7317import { webview } from '@kit.ArkWeb';
7318import { BusinessError } from '@kit.BasicServicesKit';
7319
7320@Entry
7321@Component
7322struct WebComponent {
7323  controller: webview.WebviewController = new webview.WebviewController();
7324
7325  build() {
7326    Column() {
7327      Button('getMediaPlaybackState')
7328        .onClick(() => {
7329          try {
7330            console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState());
7331          } catch (error) {
7332            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7333          }
7334        })
7335      Web({ src: 'www.example.com', controller: this.controller })
7336    }
7337  }
7338}
7339```
7340
7341### setWebSchemeHandler<sup>12+</sup>
7342
7343setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7344
7345为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。
7346
7347**系统能力:** SystemCapability.Web.Webview.Core
7348
7349**参数:**
7350
7351| 参数名 | 类型   | 必填 | 说明                      |
7352| ------ | ------ | ---- | :------------------------ |
7353| scheme    | string | 是   | 要拦截的协议。 |
7354| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7355
7356**错误码:**
7357
7358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7359
7360| 错误码ID | 错误信息                                                     |
7361| -------- | ------------------------------------------------------------ |
7362| 401      | Parameter error. Possible causes: 1. Incorrect parameter types.                                    |
7363| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7364
7365**示例:**
7366
7367```ts
7368// xxx.ets
7369import { webview } from '@kit.ArkWeb';
7370import { BusinessError } from '@kit.BasicServicesKit';
7371
7372@Entry
7373@Component
7374struct WebComponent {
7375  controller: webview.WebviewController = new webview.WebviewController();
7376  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7377
7378  build() {
7379    Column() {
7380      Button('setWebSchemeHandler')
7381        .onClick(() => {
7382          try {
7383            this.controller.setWebSchemeHandler('http', this.schemeHandler);
7384          } catch (error) {
7385            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7386          }
7387        })
7388      Web({ src: 'www.example.com', controller: this.controller })
7389    }
7390  }
7391}
7392```
7393
7394### clearWebSchemeHandler<sup>12+</sup>
7395
7396clearWebSchemeHandler(): void
7397
7398清除当前Web组件设置的所有WebSchemeHandler。
7399
7400**系统能力:** SystemCapability.Web.Webview.Core
7401
7402**错误码:**
7403
7404以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7405
7406| 错误码ID | 错误信息                                                     |
7407| -------- | ------------------------------------------------------------ |
7408| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7409
7410**示例:**
7411
7412```ts
7413// xxx.ets
7414import { webview } from '@kit.ArkWeb';
7415import { BusinessError } from '@kit.BasicServicesKit';
7416
7417@Entry
7418@Component
7419struct WebComponent {
7420  controller: webview.WebviewController = new webview.WebviewController();
7421
7422  build() {
7423    Column() {
7424      Button('clearWebSchemeHandler')
7425        .onClick(() => {
7426          try {
7427            this.controller.clearWebSchemeHandler();
7428          } catch (error) {
7429            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7430          }
7431        })
7432      Web({ src: 'www.example.com', controller: this.controller })
7433    }
7434  }
7435}
7436```
7437
7438### setServiceWorkerWebSchemeHandler<sup>12+</sup>
7439
7440setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7441
7442为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。
7443
7444**系统能力:** SystemCapability.Web.Webview.Core
7445
7446**参数:**
7447
7448| 参数名 | 类型   | 必填 | 说明                      |
7449| ------ | ------ | ---- | :------------------------ |
7450| scheme    | string | 是   | 要拦截的协议。 |
7451| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7452
7453**错误码:**
7454
7455以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7456
7457| 错误码ID | 错误信息                                                     |
7458| -------- | ------------------------------------------------------------ |
7459| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
7460
7461**示例:**
7462
7463```ts
7464// xxx.ets
7465import { webview } from '@kit.ArkWeb';
7466import { BusinessError } from '@kit.BasicServicesKit';
7467
7468@Entry
7469@Component
7470struct WebComponent {
7471  controller: webview.WebviewController = new webview.WebviewController();
7472  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7473
7474  build() {
7475    Column() {
7476      Button('setWebSchemeHandler')
7477        .onClick(() => {
7478          try {
7479            webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler);
7480          } catch (error) {
7481            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7482          }
7483        })
7484      Web({ src: 'www.example.com', controller: this.controller })
7485    }
7486  }
7487}
7488```
7489
7490### clearServiceWorkerWebSchemeHandler<sup>12+</sup>
7491
7492clearServiceWorkerWebSchemeHandler(): void
7493
7494清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。
7495
7496**系统能力:** SystemCapability.Web.Webview.Core
7497
7498**示例:**
7499
7500```ts
7501// xxx.ets
7502import { webview } from '@kit.ArkWeb';
7503
7504@Entry
7505@Component
7506struct WebComponent {
7507  controller: webview.WebviewController = new webview.WebviewController();
7508
7509  build() {
7510    Column() {
7511      Button('clearServiceWorkerWebSchemeHandler')
7512        .onClick(() => {
7513          webview.WebviewController.clearServiceWorkerWebSchemeHandler();
7514        })
7515      Web({ src: 'www.example.com', controller: this.controller })
7516    }
7517  }
7518}
7519```
7520
7521### startCamera<sup>12+</sup>
7522
7523startCamera(): void
7524
7525开启当前网页摄像头捕获。
7526
7527**系统能力:** SystemCapability.Web.Webview.Core
7528
7529**错误码:**
7530
7531以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7532
7533| 错误码ID | 错误信息                                                     |
7534| -------- | ------------------------------------------------------------ |
7535| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7536
7537**示例:**
7538```ts
7539// xxx.ets
7540import { webview } from '@kit.ArkWeb';
7541import { BusinessError } from '@kit.BasicServicesKit';
7542import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
7543
7544let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
7545
7546@Entry
7547@Component
7548struct WebComponent {
7549  controller: webview.WebviewController = new webview.WebviewController();
7550  uiContext: UIContext = this.getUIContext();
7551
7552  aboutToAppear(): void {
7553    let context: Context | undefined = this.uiContext.getHostContext() as common.UIAbilityContext;
7554    atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
7555      console.info('data:' + JSON.stringify(data));
7556      console.info('data permissions:' + data.permissions);
7557      console.info('data authResults:' + data.authResults);
7558    })
7559  }
7560
7561  build() {
7562    Column() {
7563      Button("startCamera").onClick(() => {
7564        try {
7565          this.controller.startCamera();
7566        } catch (error) {
7567          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7568        }
7569      })
7570      Button("stopCamera").onClick(() => {
7571        try {
7572          this.controller.stopCamera();
7573        } catch (error) {
7574          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7575        }
7576      })
7577      Button("closeCamera").onClick(() => {
7578        try {
7579          this.controller.closeCamera();
7580        } catch (error) {
7581          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7582        }
7583      })
7584      Web({ src: $rawfile('index.html'), controller: this.controller })
7585        .onPermissionRequest((event) => {
7586          if (event) {
7587            this.uiContext.showAlertDialog({
7588              title: 'title',
7589              message: 'text',
7590              primaryButton: {
7591                value: 'deny',
7592                action: () => {
7593                  event.request.deny();
7594                }
7595              },
7596              secondaryButton: {
7597                value: 'onConfirm',
7598                action: () => {
7599                  event.request.grant(event.request.getAccessibleResource());
7600                }
7601              },
7602              cancel: () => {
7603                event.request.deny();
7604              }
7605            })
7606          }
7607        })
7608    }
7609  }
7610}
7611```
7612加载的html文件。
7613 ```html
7614<!-- index.html -->
7615<!DOCTYPE html>
7616<html>
7617  <head>
7618    <meta charset="UTF-8">
7619  </head>
7620  <body>
7621    <video id="video" width="400px" height="400px" autoplay="autoplay">
7622    </video>
7623    <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" />
7624    <script>
7625      function getMedia() {
7626        let constraints = {
7627          video: {
7628            width: 500,
7629            height: 500
7630          },
7631          audio: true
7632        }
7633        let video = document.getElementById("video");
7634        let promise = navigator.mediaDevices.getUserMedia(constraints);
7635        promise.then(function(MediaStream) {
7636          video.srcObject = MediaStream;
7637          video.play();
7638        })
7639      }
7640    </script>
7641  </body>
7642</html>
7643 ```
7644
7645### stopCamera<sup>12+</sup>
7646
7647stopCamera(): void
7648
7649停止当前网页摄像头捕获。
7650
7651**系统能力:** SystemCapability.Web.Webview.Core
7652
7653**错误码:**
7654
7655以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7656
7657| 错误码ID | 错误信息                                                     |
7658| -------- | ------------------------------------------------------------ |
7659| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7660
7661**示例:**
7662
7663完整示例代码参考[startCamera](#startcamera12)。
7664
7665### closeCamera<sup>12+</sup>
7666
7667closeCamera(): void
7668
7669关闭当前网页摄像头捕获。
7670
7671**系统能力:** SystemCapability.Web.Webview.Core
7672
7673**错误码:**
7674
7675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7676
7677| 错误码ID | 错误信息                                                     |
7678| -------- | ------------------------------------------------------------ |
7679| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7680
7681**示例:**
7682
7683完整示例代码参考[startCamera](#startcamera12)。
7684
7685### precompileJavaScript<sup>12+</sup>
7686
7687precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\>
7688
7689预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。
7690接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。
7691
7692**系统能力:** SystemCapability.Web.Webview.Core
7693
7694**参数:**
7695
7696| 参数名  | 类型    | 必填 | 说明                  |
7697| ------- | ------ | ---- | :-------------------- |
7698| url | string | 是   | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。      |
7699| script | string \| Uint8Array | 是   | 本地JavaScript的文本内容。内容不能为空。      |
7700| cacheOptions | [CacheOptions](#cacheoptions12) | 是   | 用于控制字节码缓存更新。      |
7701
7702**返回值:**
7703
7704| 类型                                | 说明                        |
7705| ----------------------------------- | --------------------------- |
7706| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 |
7707
7708**错误码:**
7709
7710以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7711
7712| 错误码ID | 错误信息                                                     |
7713| -------- | ------------------------------------------------------------ |
7714| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
7715| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7716
7717**示例:**
7718
7719接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例:
7720
77211. 首先,在EntryAbility中将UIContext存到localStorage中。
7722
7723   ```ts
7724   // EntryAbility.ets
7725   import { UIAbility } from '@kit.AbilityKit';
7726   import { window } from '@kit.ArkUI';
7727
7728   const localStorage: LocalStorage = new LocalStorage('uiContext');
7729
7730   export default class EntryAbility extends UIAbility {
7731     storage: LocalStorage = localStorage;
7732
7733     onWindowStageCreate(windowStage: window.WindowStage) {
7734       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
7735         if (err.code) {
7736           return;
7737         }
7738
7739         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
7740       });
7741     }
7742   }
7743   ```
7744
77452. 编写动态组件所需基础代码。
7746
7747   ```ts
7748   // DynamicComponent.ets
7749   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
7750
7751   export interface BuilderData {
7752     url: string;
7753     controller: WebviewController;
7754     context: UIContext;
7755   }
7756
7757   let storage : LocalStorage | undefined = undefined;
7758
7759   export class NodeControllerImpl extends NodeController {
7760     private rootNode: BuilderNode<BuilderData[]> | null = null;
7761     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
7762
7763     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>, context: UIContext) {
7764       storage = context.getSharedLocalStorage();
7765       super();
7766       this.wrappedBuilder = wrappedBuilder;
7767     }
7768
7769     makeNode(): FrameNode | null {
7770       if (this.rootNode != null) {
7771         return this.rootNode.getFrameNode();
7772       }
7773       return null;
7774     }
7775
7776     initWeb(url: string, controller: WebviewController) {
7777       if(this.rootNode != null) {
7778         return;
7779       }
7780
7781       const uiContext: UIContext = storage!.get<UIContext>("uiContext") as UIContext;
7782       if (!uiContext) {
7783         return;
7784       }
7785       this.rootNode = new BuilderNode(uiContext);
7786       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
7787     }
7788   }
7789
7790   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
7791     const baseNode = new NodeControllerImpl(wrappedBuilder, data.context);
7792     baseNode.initWeb(data.url, data.controller);
7793     return baseNode;
7794   }
7795   ```
7796
77973. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。
7798
7799   <!--code_no_check-->
7800   ```ts
7801   // PrecompileWebview.ets
7802   import { BuilderData } from "./DynamicComponent";
7803   import { Config, configs } from "./PrecompileConfig";
7804
7805   @Builder
7806   function WebBuilder(data: BuilderData) {
7807     Web({ src: data.url, controller: data.controller })
7808       .onControllerAttached(() => {
7809         precompile(data.controller, configs, data.context);
7810       })
7811       .fileAccess(true)
7812   }
7813
7814   export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7815
7816   export const precompile = async (controller: WebviewController, configs: Array<Config>, context: UIContext) => {
7817     for (const config of configs) {
7818       let content = await readRawFile(config.localPath, context);
7819
7820       try {
7821         controller.precompileJavaScript(config.url, content, config.options)
7822           .then(errCode => {
7823             console.error("precompile successfully! " + errCode);
7824           }).catch((errCode: number) => {
7825             console.error("precompile failed. " + errCode);
7826         });
7827       } catch (err) {
7828         console.error("precompile failed. " + err.code + " " + err.message);
7829       }
7830     }
7831   }
7832
7833   async function readRawFile(path: string, context: UIContext) {
7834     try {
7835       return await context.getHostContext()!.resourceManager.getRawFileContent(path);;
7836     } catch (err) {
7837       return new Uint8Array(0);
7838     }
7839   }
7840   ```
7841
7842JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。
7843
78444. 编写业务用组件代码。
7845
7846   <!--code_no_check-->
7847   ```ts
7848   // BusinessWebview.ets
7849   import { BuilderData } from "./DynamicComponent";
7850
7851   @Builder
7852   function WebBuilder(data: BuilderData) {
7853     // 此处组件可根据业务需要自行扩展
7854     Web({ src: data.url, controller: data.controller })
7855       .cacheMode(CacheMode.Default)
7856   }
7857
7858   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7859   ```
7860
78615. 编写资源配置信息。
7862
7863   ```ts
7864   // PrecompileConfig.ets
7865   import { webview } from '@kit.ArkWeb'
7866
7867   export interface Config {
7868     url:  string,
7869     localPath: string, // 本地资源路径
7870     options: webview.CacheOptions
7871   }
7872
7873   export let configs: Array<Config> = [
7874     {
7875       url: "https://www.example.com/example.js",
7876       localPath: "example.js",
7877       options: {
7878         responseHeaders: [
7879           { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="},
7880           { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"}
7881         ]
7882       }
7883     }
7884   ]
7885   ```
7886
78876. 在页面中使用。
7888
7889   <!--code_no_check-->
7890   ```ts
7891   // Index.ets
7892   import { webview } from '@kit.ArkWeb';
7893   import { NodeController } from '@kit.ArkUI';
7894   import { createNode } from "./DynamicComponent"
7895   import { precompileWebview } from "./PrecompileWebview"
7896   import { businessWebview } from "./BusinessWebview"
7897
7898   @Entry
7899   @Component
7900   struct Index {
7901     @State precompileNode: NodeController | undefined = undefined;
7902     precompileController: webview.WebviewController = new webview.WebviewController();
7903
7904     @State businessNode: NodeController | undefined = undefined;
7905     businessController: webview.WebviewController = new webview.WebviewController();
7906
7907     aboutToAppear(): void {
7908       // 初始化用于注入本地资源的Web组件
7909       this.precompileNode = createNode(precompileWebview,
7910         { url: "https://www.example.com/empty.html", controller: this.precompileController, context: this.getUIContext()});
7911     }
7912
7913     build() {
7914       Column() {
7915         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
7916         Button("加载页面")
7917           .onClick(() => {
7918             this.businessNode = createNode(businessWebview, {
7919               url:  "https://www.example.com/business.html",
7920               controller: this.businessController,
7921               context: this.getUIContext()
7922             });
7923           })
7924         // 用于业务的Web组件
7925         NodeContainer(this.businessNode);
7926       }
7927     }
7928   }
7929   ```
7930
7931当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。
7932
7933### onCreateNativeMediaPlayer<sup>12+</sup>
7934
7935onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void
7936
7937注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。
7938如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。
7939
7940**系统能力:** SystemCapability.Web.Webview.Core
7941
7942**参数:**
7943
7944| 参数名 | 类型 | 必填 | 说明 |
7945|--------|------|------|------|
7946| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 |
7947
7948**示例:**
7949
7950```ts
7951// xxx.ets
7952import { webview } from '@kit.ArkWeb';
7953
7954class ActualNativeMediaPlayerListener {
7955  handler: webview.NativeMediaPlayerHandler;
7956
7957  constructor(handler: webview.NativeMediaPlayerHandler) {
7958    this.handler = handler;
7959  }
7960
7961  onPlaying() {
7962    // 本地播放器开始播放。
7963    this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING);
7964  }
7965  onPaused() {
7966    // 本地播放器暂停播放。
7967    this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED);
7968  }
7969  onSeeking() {
7970    // 本地播放器开始执行跳转到目标时间点。
7971    this.handler.handleSeeking();
7972  }
7973  onSeekDone() {
7974    // 本地播放器 seek 完成。
7975    this.handler.handleSeekFinished();
7976  }
7977  onEnded() {
7978    // 本地播放器播放完成。
7979    this.handler.handleEnded();
7980  }
7981  onVolumeChanged() {
7982    // 获取本地播放器的音量。
7983    let volume: number = getVolume();
7984    this.handler.handleVolumeChanged(volume);
7985  }
7986  onCurrentPlayingTimeUpdate() {
7987    // 更新播放时间。
7988    let currentTime: number = getCurrentPlayingTime();
7989    // 将时间单位换算成秒。
7990    let currentTimeInSeconds = convertToSeconds(currentTime);
7991    this.handler.handleTimeUpdate(currentTimeInSeconds);
7992  }
7993  onBufferedChanged() {
7994    // 缓存发生了变化。
7995    // 获取本地播放器的缓存时长。
7996    let bufferedEndTime: number = getCurrentBufferedTime();
7997    // 将时间单位换算成秒。
7998    let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime);
7999    this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds);
8000
8001    // 检查缓存状态。
8002    // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。
8003    let lastReadyState: webview.ReadyState = getLastReadyState();
8004    let currentReadyState:  webview.ReadyState = getCurrentReadyState();
8005    if (lastReadyState != currentReadyState) {
8006      this.handler.handleReadyStateChanged(currentReadyState);
8007    }
8008  }
8009  onEnterFullscreen() {
8010    // 本地播放器进入了全屏状态。
8011    let isFullscreen: boolean = true;
8012    this.handler.handleFullscreenChanged(isFullscreen);
8013  }
8014  onExitFullscreen() {
8015    // 本地播放器退出了全屏状态。
8016    let isFullscreen: boolean = false;
8017    this.handler.handleFullscreenChanged(isFullscreen);
8018  }
8019  onUpdateVideoSize(width: number, height: number) {
8020    // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。
8021    this.handler.handleVideoSizeChanged(width, height);
8022  }
8023  onDurationChanged(duration: number) {
8024    // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。
8025    this.handler.handleDurationChanged(duration);
8026  }
8027  onError(error: webview.MediaError, errorMessage: string) {
8028    // 本地播放器出错了,通知 ArkWeb 内核。
8029    this.handler.handleError(error, errorMessage);
8030  }
8031  onNetworkStateChanged(state: webview.NetworkState) {
8032    // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。
8033    this.handler.handleNetworkStateChanged(state);
8034  }
8035  onPlaybackRateChanged(playbackRate: number) {
8036    // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。
8037    this.handler.handlePlaybackRateChanged(playbackRate);
8038  }
8039  onMutedChanged(muted: boolean) {
8040    // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。
8041    this.handler.handleMutedChanged(muted);
8042  }
8043
8044  // ... 监听本地播放器其他的状态 ...
8045}
8046
8047class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge {
8048  constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) {
8049    // 1. 创建一个本地播放器的状态监听。
8050    let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler);
8051    // 2. 创建一个本地播放器。
8052    // 3. 监听该本地播放器。
8053    // ...
8054  }
8055
8056  updateRect(x: number, y: number, width: number, height: number) {
8057    // <video> 标签的位置和大小发生了变化。
8058    // 根据该信息变化,作出相应的改变。
8059  }
8060
8061  play() {
8062    // 启动本地播放器播放。
8063  }
8064
8065  pause() {
8066    // 暂停本地播放器播放。
8067  }
8068
8069  seek(targetTime: number) {
8070    // 本地播放器跳转到指定的时间点。
8071  }
8072
8073  release() {
8074    // 销毁本地播放器。
8075  }
8076
8077  setVolume(volume: number) {
8078    // ArkWeb 内核要求调整本地播放器的音量。
8079    // 设置本地播放器的音量。
8080  }
8081
8082  setMuted(muted: boolean) {
8083    // 将本地播放器静音或取消静音。
8084  }
8085
8086  setPlaybackRate(playbackRate: number) {
8087    // 调整本地播放器的播放速度。
8088  }
8089
8090  enterFullscreen() {
8091    // 将本地播放器设置为全屏播放。
8092  }
8093
8094  exitFullscreen() {
8095    // 将本地播放器退出全屏播放。
8096  }
8097
8098  resumePlayer() {
8099    // 重新创建应用内播放器。
8100    // 恢复应用内播放器的状态信息。
8101  }
8102
8103  suspendPlayer(type: webview.SuspendType) {
8104    // 记录应用内播放器的状态信息。
8105    // 销毁应用内播放器。
8106  }
8107}
8108
8109@Entry
8110@Component
8111struct WebComponent {
8112  controller: webview.WebviewController = new webview.WebviewController()
8113  build() {
8114    Column() {
8115      Web({ src: 'www.example.com', controller: this.controller })
8116        .enableNativeMediaPlayer({enable: true, shouldOverlay: false})
8117        .onPageBegin((event) => {
8118          this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => {
8119            if (!shouldHandle(mediaInfo)) {
8120              // 本地播放器不接管该媒体。
8121              // ArkWeb 内核将用自己的播放器来播放该媒体。
8122              return null;
8123            }
8124            let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo);
8125            return nativePlayer;
8126          });
8127        })
8128    }
8129  }
8130}
8131
8132// stub
8133function getVolume() {
8134  return 1;
8135}
8136function getCurrentPlayingTime() {
8137  return 1;
8138}
8139function getCurrentBufferedTime() {
8140  return 1;
8141}
8142function convertToSeconds(input: number) {
8143  return input;
8144}
8145function getLastReadyState() {
8146  return webview.ReadyState.HAVE_NOTHING;
8147}
8148function getCurrentReadyState() {
8149  return webview.ReadyState.HAVE_NOTHING;
8150}
8151function shouldHandle(mediaInfo: webview.MediaInfo) {
8152  return true;
8153}
8154```
8155
8156### enableWholeWebPageDrawing<sup>12+</sup>
8157
8158static enableWholeWebPageDrawing(): void
8159
8160设置开启网页全量绘制能力。仅在web初始化时设置。
8161
8162**系统能力:** SystemCapability.Web.Webview.Core
8163
8164**示例:**
8165
8166```ts
8167// xxx.ets
8168import { webview } from '@kit.ArkWeb';
8169import { BusinessError } from '@kit.BasicServicesKit';
8170
8171@Entry
8172@Component
8173struct WebComponent {
8174  controller: webview.WebviewController = new webview.WebviewController();
8175
8176  aboutToAppear(): void {
8177    try {
8178      webview.WebviewController.enableWholeWebPageDrawing();
8179    } catch (error) {
8180      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8181    }
8182  }
8183
8184  build() {
8185    Column() {
8186      Web({ src: 'www.example.com', controller: this.controller })
8187    }
8188  }
8189}
8190```
8191
8192### webPageSnapshot<sup>12+</sup>
8193
8194webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void
8195
8196获取网页全量绘制结果。
8197
8198**系统能力:** SystemCapability.Web.Webview.Core
8199
8200**参数:**
8201
8202| 参数名       | 类型           | 必填  | 说明                      |
8203| ----------- | ------------- | ---- | ------------------------ |
8204| info        | [SnapshotInfo](#snapshotinfo12)| 是   | 全量绘制结果入参。 |
8205| callback        | [SnapshotResult](#snapshotresult12)| 是   | 全量绘制回调结果。 |
8206
8207**示例:**
8208
8209```ts
8210// xxx.ets
8211import { webview } from '@kit.ArkWeb';
8212import { BusinessError } from '@kit.BasicServicesKit';
8213
8214@Entry
8215@Component
8216struct WebComponent {
8217  controller: webview.WebviewController = new webview.WebviewController();
8218
8219  build() {
8220    Column() {
8221      Button('webPageSnapshot')
8222        .onClick(() => {
8223          try {
8224            this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => {
8225              if (error) {
8226                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8227                return;
8228              }
8229              if (result) {
8230                console.info(`return value is:${result}`);
8231                //开发者可以根据需要处理返回结果
8232              }
8233            });
8234          } catch (error) {
8235            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8236          }
8237        })
8238      Web({ src: 'www.example.com', controller: this.controller })
8239    }
8240  }
8241}
8242```
8243
8244### injectOfflineResources<sup>12+</sup>
8245
8246injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void
8247
8248将本地离线资源注入到内存缓存中,以提升页面首次启动速度。
8249内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。
8250正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。
8251资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。
8252以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。
8253当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。
8254
8255**系统能力:** SystemCapability.Web.Webview.Core
8256
8257**参数:**
8258
8259| 参数名  | 类型    | 必填 | 说明                  |
8260| ------- | ------ | ---- | :-------------------- |
8261| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是   | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。      |
8262
8263**错误码:**
8264
8265以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8266
8267| 错误码ID | 错误信息                                                     |
8268| -------- | ------------------------------------------------------------ |
8269| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
8270| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8271| 17100002 | Invalid url.                                                 |
8272
8273**示例:**
8274
8275接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例:
82761. 首先,在EntryAbility中将UIContext存到localStorage中。
8277
8278   ```ts
8279   // EntryAbility.ets
8280   import { UIAbility } from '@kit.AbilityKit';
8281   import { window } from '@kit.ArkUI';
8282
8283   const localStorage: LocalStorage = new LocalStorage('uiContext');
8284
8285   export default class EntryAbility extends UIAbility {
8286     storage: LocalStorage = localStorage;
8287
8288     onWindowStageCreate(windowStage: window.WindowStage) {
8289       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
8290         if (err.code) {
8291           return;
8292         }
8293
8294         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
8295       });
8296     }
8297   }
8298   ```
8299
83002. 编写动态组件所需基础代码。
8301
8302   ```ts
8303   // DynamicComponent.ets
8304   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
8305
8306   export interface BuilderData {
8307     url: string;
8308     controller: WebviewController;
8309     context: UIContext;
8310   }
8311
8312   let storage : LocalStorage | undefined = undefined;
8313
8314   export class NodeControllerImpl extends NodeController {
8315     private rootNode: BuilderNode<BuilderData[]> | null = null;
8316     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
8317
8318     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>, context: UIContext) {
8319       storage = context.getSharedLocalStorage();
8320       super();
8321       this.wrappedBuilder = wrappedBuilder;
8322     }
8323
8324     makeNode(): FrameNode | null {
8325       if (this.rootNode != null) {
8326         return this.rootNode.getFrameNode();
8327       }
8328       return null;
8329     }
8330
8331     initWeb(url: string, controller: WebviewController) {
8332       if(this.rootNode != null) {
8333         return;
8334       }
8335
8336       const uiContext: UIContext = storage!.get<UIContext>("uiContext") as UIContext;
8337       if (!uiContext) {
8338         return;
8339       }
8340       this.rootNode = new BuilderNode(uiContext);
8341       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
8342     }
8343   }
8344
8345   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
8346     const baseNode = new NodeControllerImpl(wrappedBuilder, data.context);
8347     baseNode.initWeb(data.url, data.controller);
8348     return baseNode;
8349   }
8350   ```
8351
83523. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。
8353
8354   <!--code_no_check-->
8355   ```ts
8356   // InjectWebview.ets
8357   import { webview } from '@kit.ArkWeb';
8358   import { resourceConfigs } from "./Resource";
8359   import { BuilderData } from "./DynamicComponent";
8360
8361   @Builder
8362   function WebBuilder(data: BuilderData) {
8363     Web({ src: data.url, controller: data.controller })
8364       .onControllerAttached(async () => {
8365         try {
8366           data.controller.injectOfflineResources(await getData (data.context));
8367         } catch (err) {
8368           console.error("error: " + err.code + " " + err.message);
8369         }
8370       })
8371       .fileAccess(true)
8372   }
8373
8374   export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8375
8376   export async function getData(context: UIContext) {
8377     const resourceMapArr: Array<webview.OfflineResourceMap> = [];
8378
8379     // 读取配置,从rawfile目录中读取文件内容
8380     for (let config of resourceConfigs) {
8381       let buf: Uint8Array = new Uint8Array(0);
8382       if (config.localPath) {
8383         buf = await readRawFile(config.localPath, context);
8384       }
8385
8386       resourceMapArr.push({
8387         urlList: config.urlList,
8388         resource: buf,
8389         responseHeaders: config.responseHeaders,
8390         type: config.type,
8391       })
8392     }
8393
8394     return resourceMapArr;
8395   }
8396
8397   export async function readRawFile(url: string, context: UIContext) {
8398     try {
8399       return await context.getHostContext()!.resourceManager.getRawFileContent(url);
8400     } catch (err) {
8401       return new Uint8Array(0);
8402     }
8403   }
8404   ```
8405
84064. 编写业务用组件代码。
8407
8408   <!--code_no_check-->
8409   ```ts
8410   // BusinessWebview.ets
8411   import { BuilderData } from "./DynamicComponent";
8412
8413   @Builder
8414   function WebBuilder(data: BuilderData) {
8415     // 此处组件可根据业务需要自行扩展
8416     Web({ src: data.url, controller: data.controller })
8417       .cacheMode(CacheMode.Default)
8418   }
8419
8420   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8421   ```
8422
84235. 编写资源配置信息。
8424
8425   ```ts
8426   // Resource.ets
8427   import { webview } from '@kit.ArkWeb';
8428
8429   export interface ResourceConfig {
8430     urlList: Array<string>,
8431     type: webview.OfflineResourceType,
8432     responseHeaders: Array<Header>,
8433     localPath: string, // 本地资源存放在rawfile目录下的路径
8434   }
8435
8436   export const resourceConfigs: Array<ResourceConfig> = [
8437     {
8438       localPath: "example.png",
8439       urlList: [
8440         "https://www.example.com/",
8441         "https://www.example.com/path1/example.png",
8442         "https://www.example.com/path2/example.png",
8443       ],
8444       type: webview.OfflineResourceType.IMAGE,
8445       responseHeaders: [
8446         { headerKey: "Cache-Control", headerValue: "max-age=1000" },
8447         { headerKey: "Content-Type", headerValue: "image/png" },
8448       ]
8449     },
8450     {
8451       localPath: "example.js",
8452       urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址
8453         "https://www.example.com/example.js",
8454       ],
8455       type: webview.OfflineResourceType.CLASSIC_JS,
8456       responseHeaders: [
8457         // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头
8458         { headerKey: "Cross-Origin", headerValue:"anonymous" }
8459       ]
8460     },
8461   ];
8462   ```
8463
84646. 在页面中使用。
8465   <!--code_no_check-->
8466   ```ts
8467   // Index.ets
8468   import { webview } from '@kit.ArkWeb';
8469   import { NodeController } from '@kit.ArkUI';
8470   import { createNode } from "./DynamicComponent"
8471   import { injectWebview } from "./InjectWebview"
8472   import { businessWebview } from "./BusinessWebview"
8473
8474   @Entry
8475   @Component
8476   struct Index {
8477     @State injectNode: NodeController | undefined = undefined;
8478     injectController: webview.WebviewController = new webview.WebviewController();
8479
8480     @State businessNode: NodeController | undefined = undefined;
8481     businessController: webview.WebviewController = new webview.WebviewController();
8482
8483     aboutToAppear(): void {
8484       // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可
8485       this.injectNode = createNode(injectWebview,
8486           { url: "https://www.example.com/empty.html", controller: this.injectController, context: this.getUIContext()});
8487     }
8488
8489     build() {
8490       Column() {
8491         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
8492         Button("加载页面")
8493           .onClick(() => {
8494             this.businessNode = createNode(businessWebview, {
8495               url: "https://www.example.com/business.html",
8496               controller: this.businessController,
8497               context: this.getUIContext()
8498             });
8499           })
8500         // 用于业务的Web组件
8501         NodeContainer(this.businessNode);
8502       }
8503     }
8504   }
8505   ```
8506
85077. 加载的HTML网页示例。
8508
8509   ```HTML
8510   <!DOCTYPE html>
8511   <html lang="en">
8512   <head></head>
8513   <body>
8514     <img src="https://www.example.com/path1/request.png" />
8515     <img src="https://www.example.com/path2/request.png" />
8516     <script src="https://www.example.com/example.js" crossorigin="anonymous"></script>
8517   </body>
8518   </html>
8519   ```
8520
8521### setHostIP<sup>12+</sup>
8522
8523static setHostIP(hostName: string, address: string, aliveTime: number): void
8524
8525设置主机域名解析后的IP地址。
8526
8527**系统能力:** SystemCapability.Web.Webview.Core
8528
8529**参数:**
8530
8531| 参数名    | 类型 | 必填 | 说明                             |
8532| --------- | -------- | ---- | ------------------------------------ |
8533| hostName  | string   | 是   | 要添加DNS记录的主机域名。            |
8534| address   | string   | 是   | 主机域名解析地址(支持IPv4,IPv6)。 |
8535| aliveTime | number   | 是   | 缓存有效时间(秒)。                 |
8536
8537**错误码:**
8538
8539以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8540
8541| 错误码ID | 错误信息                 |
8542| -------- | ------------------------ |
8543| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8544
8545**示例:**
8546
8547请参考[clearHostIP](#clearhostip12)。
8548
8549### clearHostIP<sup>12+</sup>
8550
8551static clearHostIP(hostName: string): void
8552
8553清除指定主机域名解析后的IP地址。
8554
8555**系统能力:** SystemCapability.Web.Webview.Core
8556
8557**参数:**
8558
8559| 参数名   | 类型 | 必填 | 说明                  |
8560| -------- | -------- | ---- | ------------------------- |
8561| hostName | string   | 是   | 要清除DNS记录的主机域名。 |
8562
8563**错误码:**
8564
8565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8566
8567| 错误码ID | 错误信息                 |
8568| -------- | ------------------------ |
8569| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8570
8571**示例:**
8572
8573```ts
8574// xxx.ets
8575import { webview } from '@kit.ArkWeb';
8576import { BusinessError } from '@kit.BasicServicesKit';
8577
8578@Entry
8579@Component
8580struct WebComponent {
8581  controller: webview.WebviewController = new webview.WebviewController();
8582
8583  build() {
8584    Column() {
8585      // url加载前设置生效.
8586      Button('setHostIP')
8587        .onClick(() => {
8588          try {
8589            webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30);
8590          } catch (error) {
8591            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8592          }
8593        })
8594      Button('clearHostIP')
8595        .onClick(() => {
8596          try {
8597            webview.WebviewController.clearHostIP('www.example.com');
8598          } catch (error) {
8599            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8600          }
8601        })
8602      Web({ src: 'www.example.com', controller: this.controller })
8603    }
8604  }
8605}
8606```
8607
8608### getSurfaceId<sup>12+</sup>
8609
8610getSurfaceId(): string
8611
8612获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。
8613
8614**系统能力:** SystemCapability.Web.Webview.Core
8615
8616**返回值:**
8617
8618| 类型   | 说明                |
8619| ------ | ------------------- |
8620| string | ArkWeb持有Surface的ID。 |
8621
8622**示例:**
8623
8624```ts
8625// xxx.ets
8626import { webview } from '@kit.ArkWeb';
8627import { image } from '@kit.ImageKit';
8628import { BusinessError } from '@kit.BasicServicesKit';
8629
8630@Entry
8631@Component
8632struct Example{
8633  controller: webview.WebviewController = new webview.WebviewController();
8634
8635  @State imagePixelMap: image.PixelMap | undefined = undefined;
8636
8637  build(){
8638    Column(){
8639      Button("截图")
8640        .onClick(()=>{
8641          try {
8642            let surfaceId = this.controller.getSurfaceId();
8643            console.log("surfaceId: " + surfaceId);
8644            if(surfaceId.length != 0) {
8645              let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}}
8646              this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region)
8647            }
8648          } catch (error) {
8649            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8650          }
8651        })
8652      Image(this.imagePixelMap)
8653        .height(100)
8654      Web({src: 'www.example.com', controller: this.controller})
8655    }
8656  }
8657}
8658```
8659
8660### setUrlTrustList<sup>12+</sup>
8661
8662setUrlTrustList(urlTrustList: string): void
8663
8664设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。
8665
8666**系统能力:** SystemCapability.Web.Webview.Core
8667
8668**参数:**
8669
8670| 参数名  | 类型    | 必填 | 说明                  |
8671| ------- | ------ | ---- | :-------------------- |
8672| urlTrustList | string | 是   | url白名单列表,使用json格式配置,最大支持10MB。<br/>白名单设置接口为覆盖方式,多次调用接口时,以最后一次设置为准。<br/>当本参数为空字符串时,表示取消白名单,放行所有url的访问。<br/>json格式示例:<br/>{<br>&nbsp;&nbsp;"UrlPermissionList":&nbsp;[<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"scheme":&nbsp;"https",<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"host":&nbsp;"www\.example1.com",<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"port":&nbsp;443,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"path":&nbsp;"pathA/pathB"<br/>&nbsp;&nbsp;&nbsp;&nbsp;},<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"scheme":&nbsp;"http",<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"host":&nbsp;"www\.example2.com",<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"port":&nbsp;80,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"path":&nbsp;"test1/test2/test3"<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;]<br/>} |
8673
8674**白名单json格式参数**
8675| 字段   | 参数类型 | 必填 | 参数描述                  |
8676| -------- | -------- | ---- | ------------------------- |
8677| scheme | string   | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 |
8678| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 |
8679| port | number | 否 | 可选字段,不设置即不匹配该项。 |
8680| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。|
8681
8682**错误码:**
8683
8684以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8685
8686| 错误码ID | 错误信息                                                     |
8687| -------- | ------------------------------------------------------------ |
8688| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed.                                     |
8689| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8690
8691**示例:**
8692  ```ts
8693  // xxx.ets
8694  import { webview } from '@kit.ArkWeb';
8695  import { BusinessError } from '@kit.BasicServicesKit';
8696
8697  @Entry
8698  @Component
8699  struct WebComponent {
8700    controller: webview.WebviewController = new webview.WebviewController();
8701    urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}"
8702
8703    build() {
8704      Column() {
8705        Button('Setting the trustlist')
8706          .onClick(() => {
8707            try {
8708              // 设置白名单,只允许访问trust网页
8709              this.controller.setUrlTrustList(this.urltrustList);
8710            } catch (error) {
8711              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8712            }
8713          })
8714        Button('Cancel the trustlist.')
8715          .onClick(() => {
8716            try {
8717              // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问
8718              this.controller.setUrlTrustList("");
8719            } catch (error) {
8720              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8721            }
8722          })
8723        Button('Access the trust web')
8724          .onClick(() => {
8725            try {
8726              // 白名单生效,可以访问trust网页
8727              this.controller.loadUrl('http://trust.example.com/test');
8728            } catch (error) {
8729              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8730            }
8731          })
8732        Button('Access the untrust web')
8733          .onClick(() => {
8734            try {
8735              // 白名单生效,此时不可以访问untrust网页,并弹出错误页
8736              this.controller.loadUrl('http://untrust.example.com/test');
8737            } catch (error) {
8738              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8739            }
8740          })
8741        Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => {
8742          try {
8743            // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页
8744            this.controller.setUrlTrustList(this.urltrustList);
8745          } catch (error) {
8746            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8747          }
8748        })
8749      }
8750    }
8751  }
8752  ```
8753
8754### setPathAllowingUniversalAccess<sup>12+</sup>
8755
8756setPathAllowingUniversalAccess(pathList: Array\<string\>): void
8757
8758设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileaccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一:
8759
87601.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8761
8762* /data/storage/el2/base/files/example
8763* /data/storage/el2/base/haps/entry/files/example
8764
87652.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8766
8767* /data/storage/el1/bundle/entry/resource/resfile
8768* /data/storage/el1/bundle/entry/resource/resfile/example
8769
8770当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileaccess)的行为为准。
8771
8772**系统能力:** SystemCapability.Web.Webview.Core
8773
8774**参数:**
8775
8776| 参数名   | 类型 | 必填 | 说明                  |
8777| -------- | -------- | ---- | ------------------------- |
8778| pathList | Array\<string\>   | 是   | 路径列表 |
8779
8780**错误码:**
8781
8782以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8783
8784| 错误码ID | 错误信息                 |
8785| -------- | ------------------------ |
8786| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8787| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8788
8789**示例:**
8790
8791```ts
8792// xxx.ets
8793import { webview } from '@kit.ArkWeb';
8794import { BusinessError } from '@kit.BasicServicesKit';
8795
8796@Entry
8797@Component
8798struct WebComponent {
8799  controller: WebviewController = new webview.WebviewController();
8800  uiContext: UIContext = this.getUIContext();
8801
8802  build() {
8803    Row() {
8804      Web({ src: "", controller: this.controller })
8805        .onControllerAttached(() => {
8806          try {
8807            // 设置允许可以跨域访问的路径列表
8808            this.controller.setPathAllowingUniversalAccess([
8809              this.uiContext.getHostContext()!.resourceDir,
8810              this.uiContext.getHostContext()!.filesDir + "/example"
8811            ])
8812            this.controller.loadUrl("file://" + this.getUIContext().getHostContext()!.resourceDir + "/index.html")
8813          } catch (error) {
8814            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8815          }
8816        })
8817        .javaScriptAccess(true)
8818        .fileAccess(true)
8819        .domStorageAccess(true)
8820    }
8821  }
8822}
8823
8824```
8825
8826加载的html文件,位于应用资源目录resource/resfile/index.html8827```html
8828<!-- index.html -->
8829<!DOCTYPE html>
8830<html lang="en">
8831
8832<head>
8833    <meta charset="utf-8">
8834    <title>Demo</title>
8835    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
8836    <script>
8837		function getFile() {
8838			var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js";
8839			var xmlHttpReq = new XMLHttpRequest();
8840			xmlHttpReq.onreadystatechange = function(){
8841			    console.log("readyState:" + xmlHttpReq.readyState);
8842			    console.log("status:" + xmlHttpReq.status);
8843				if(xmlHttpReq.readyState == 4){
8844				    if (xmlHttpReq.status == 200) {
8845                // 如果ets侧正确设置路径列表,则此处能正常获取资源
8846				        const element = document.getElementById('text');
8847                        element.textContent = "load " + file + " success";
8848				    } else {
8849                // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误
8850				        const element = document.getElementById('text');
8851                        element.textContent = "load " + file + " failed";
8852				    }
8853				}
8854			}
8855			xmlHttpReq.open("GET", file);
8856			xmlHttpReq.send(null);
8857		}
8858
8859    </script>
8860</head>
8861
8862<body>
8863<div class="page">
8864    <button id="example" onclick="getFile()">stealFile</button>
8865</div>
8866<div id="text"></div>
8867</body>
8868
8869</html>
8870```
8871
8872html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/resfile/js/script.js8873<!--code_no_check-->
8874```javascript
8875const body = document.body;
8876const element = document.createElement('div');
8877element.textContent = 'success';
8878body.appendChild(element);
8879```
8880
8881### enableBackForwardCache<sup>12+</sup>
8882
8883static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void
8884
8885开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。
8886
8887需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。
8888
8889**系统能力:**  SystemCapability.Web.Webview.Core
8890
8891**参数:**
8892
8893| 参数名          | 类型    |  必填  | 说明                                            |
8894| ---------------| ------- | ---- | ------------- |
8895| features     |  [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是   | 允许使用特定的页面进入前进后退缓存中。|
8896
8897**示例:**
8898
8899```ts
8900// EntryAbility.ets
8901import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
8902import { hilog } from '@kit.PerformanceAnalysisKit';
8903import { window } from '@kit.ArkUI';
8904import { webview } from '@kit.ArkWeb';
8905
8906export default class EntryAbility extends UIAbility {
8907    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
8908        let features = new webview.BackForwardCacheSupportedFeatures();
8909        features.nativeEmbed = true;
8910        features.mediaTakeOver = true;
8911        // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和
8912        // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。
8913        webview.WebviewController.enableBackForwardCache(features);
8914        webview.WebviewController.initializeWebEngine();
8915        AppStorage.setOrCreate("abilityWant", want);
8916    }
8917}
8918```
8919
8920### setBackForwardCacheOptions<sup>12+</sup>
8921
8922setBackForwardCacheOptions(options: BackForwardCacheOptions): void
8923
8924可以设置Web组件中前进后退缓存的相关选项。
8925
8926**系统能力:**  SystemCapability.Web.Webview.Core
8927
8928**参数:**
8929
8930| 参数名          | 类型    |  必填  | 说明                                            |
8931| ---------------| ------- | ---- | ------------- |
8932| options     |  [BackForwardCacheOptions](#backforwardcacheoptions12) | 是   | 用来控制Web组件前进后退缓存相关选项。|
8933
8934**错误码:**
8935
8936以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8937
8938| 错误码ID | 错误信息                                                     |
8939| -------- | ------------------------------------------------------------ |
8940| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8941
8942**示例:**
8943
8944```ts
8945// xxx.ts
8946import { webview } from '@kit.ArkWeb';
8947
8948@Entry
8949@Component
8950struct Index {
8951  controller: webview.WebviewController = new webview.WebviewController();
8952
8953  build() {
8954    Column() {
8955      Row() {
8956        Button("Add options").onClick((event: ClickEvent) => {
8957          let options = new webview.BackForwardCacheOptions();
8958          options.size = 3;
8959          options.timeToLive = 10;
8960          this.controller.setBackForwardCacheOptions(options);
8961        })
8962        Button("Backward").onClick((event: ClickEvent) => {
8963          this.controller.backward();
8964        })
8965        Button("Forward").onClick((event: ClickEvent) => {
8966          this.controller.forward();
8967        })
8968      }
8969      Web({ src: "https://www.example.com", controller: this.controller })
8970    }
8971    .height('100%')
8972    .width('100%')
8973  }
8974}
8975```
8976
8977### trimMemoryByPressureLevel<sup>14+</sup>
8978
8979trimMemoryByPressureLevel(level: PressureLevel): void
8980
8981根据指定的内存压力等级,主动清理Web组件占用的缓存。
8982
8983**系统能力:** SystemCapability.Web.Webview.Core
8984
8985**参数:**
8986
8987| 参数名  | 类型    | 必填 | 说明                  |
8988| ------- | ------ | ---- | :-------------------- |
8989| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。|
8990
8991**错误码:**
8992
8993以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8994
8995| 错误码ID | 错误信息                                                     |
8996| -------- | ------------------------------------------------------------ |
8997| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8998
8999**示例:**
9000```ts
9001// xxx.ets
9002import { webview } from '@kit.ArkWeb';
9003import { BusinessError } from '@kit.BasicServicesKit';
9004
9005@Entry
9006@Component
9007struct WebComponent {
9008  controller: WebviewController = new webview.WebviewController();
9009  build() {
9010    Column() {
9011      Row() {
9012        Button('trim_Memory')
9013          .onClick(() => {
9014            try {
9015              // 设置当前内存压力等级为适中,释放少量内存
9016              webview.WebviewController.trimMemoryByPressureLevel(
9017                webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE);
9018            } catch (error) {
9019              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9020            }
9021          })
9022      }.height('10%')
9023      Web({ src: 'www.example.com', controller: this.controller })
9024    }
9025  }
9026}
9027```
9028
9029### createPdf<sup>14+</sup>
9030
9031createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void
9032
9033异步callback方式获取指定网页的数据流。
9034
9035**系统能力:** SystemCapability.Web.Webview.Core
9036
9037**参数:**
9038
9039| 参数名        | 类型                                    | 必填 | 说明                    |
9040| ------------- | --------------------------------------- | ---- | ----------------------- |
9041| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。       |
9042| callback      | AsyncCallback<[PdfData](#pdfdata14)>    | 是   | 回调返回网页PDF数据流。 |
9043
9044**错误码:**
9045
9046以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9047
9048| 错误码ID | 错误信息                                                     |
9049| -------- | ------------------------------------------------------------ |
9050| 401      | Invalid input parameter.  |
9051| 17100001 | Init error. The WebviewController must be associated with a Web component. |
9052
9053**示例**:
9054
9055```ts
9056import { fileIo as fs } from '@kit.CoreFileKit';
9057import { webview } from '@kit.ArkWeb';
9058import { BusinessError } from '@kit.BasicServicesKit';
9059import { common } from '@kit.AbilityKit';
9060
9061@Entry
9062@Component
9063struct Index {
9064  controller: webview.WebviewController = new webview.WebviewController();
9065  pdfConfig: webview.PdfConfiguration = {
9066    width: 8.27,
9067    height: 11.69,
9068    marginTop: 0,
9069    marginBottom: 0,
9070    marginRight: 0,
9071    marginLeft: 0,
9072    shouldPrintBackground: true
9073  }
9074
9075  build() {
9076    Column() {
9077      Button('SavePDF')
9078        .onClick(() => {
9079          this.controller.createPdf(
9080            this.pdfConfig,
9081            (error, result: webview.PdfData) => {
9082              try {
9083                // 获取组件上下文
9084                let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
9085                // 获取沙箱路径,设置pdf文件名
9086                let filePath = context.filesDir + "/test.pdf";
9087                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
9088                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
9089                  console.info("createPDF write data to file succeed and size is:" + writeLen);
9090                }).catch((err: BusinessError) => {
9091                  console.error("createPDF write data to file failed with error message: " + err.message +
9092                    ", error code: " + err.code);
9093                }).finally(() => {
9094                  fs.closeSync(file);
9095                });
9096              } catch (resError) {
9097                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9098              }
9099            });
9100        })
9101      Web({ src: "www.example.com", controller: this.controller })
9102    }
9103  }
9104}
9105```
9106
9107### createPdf<sup>14+</sup>
9108
9109createPdf(configuration: PdfConfiguration): Promise\<PdfData\>
9110
9111以Promise方式异步获取指定网页的数据流。
9112
9113**系统能力:** SystemCapability.Web.Webview.Core
9114
9115**参数:**
9116
9117| 参数名        | 类型                                    | 必填 | 说明              |
9118| ------------- | --------------------------------------- | ---- | ----------------- |
9119| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。 |
9120
9121**返回值:**
9122
9123| 类型                           | 说明                          |
9124| ------------------------------ | ----------------------------- |
9125| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 |
9126
9127**错误码:**
9128
9129以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9130
9131| 错误码ID | 错误信息                                                     |
9132| -------- | ------------------------------------------------------------ |
9133| 401      | Invalid input parameter. |
9134| 17100001 | Init error. The WebviewController must be associated with a Web component. |
9135
9136**示例**:
9137
9138```ts
9139import { fileIo as fs } from '@kit.CoreFileKit';
9140import { webview } from '@kit.ArkWeb';
9141import { BusinessError } from '@kit.BasicServicesKit';
9142import { common } from '@kit.AbilityKit';
9143
9144@Entry
9145@Component
9146struct Index {
9147  controller: webview.WebviewController = new webview.WebviewController();
9148  pdfConfig: webview.PdfConfiguration = {
9149    width: 8.27,
9150    height: 11.69,
9151    marginTop: 0,
9152    marginBottom: 0,
9153    marginRight: 0,
9154    marginLeft: 0,
9155    shouldPrintBackground: true
9156  }
9157
9158  build() {
9159    Column() {
9160      Button('SavePDF')
9161        .onClick(() => {
9162          this.controller.createPdf(this.pdfConfig)
9163            .then((result: webview.PdfData) => {
9164              try {
9165                // 获取组件上下文
9166                let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
9167                // 获取沙箱路径,设置pdf文件名
9168                let filePath = context.filesDir + "/test.pdf";
9169                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
9170                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
9171                  console.info("createPDF write data to file succeed and size is:" + writeLen);
9172                }).catch((err: BusinessError) => {
9173                  console.error("createPDF write data to file failed with error message: " + err.message +
9174                    ", error code: " + err.code);
9175                }).finally(() => {
9176                  fs.closeSync(file);
9177                });
9178              } catch (resError) {
9179                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
9180              }
9181            })
9182        })
9183      Web({ src: "www.example.com", controller: this.controller })
9184    }
9185  }
9186}
9187```
9188
9189### getScrollOffset<sup>13+</sup>
9190
9191getScrollOffset(): ScrollOffset
9192
9193获取网页当前的滚动偏移量。
9194
9195**系统能力:** SystemCapability.Web.Webview.Core
9196
9197**返回值**
9198
9199| 类型                            | 说明                   |
9200| :------------------------------ | ---------------------- |
9201| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 |
9202
9203**示例:**
9204
9205```ts
9206import { webview } from '@kit.ArkWeb';
9207
9208@Entry
9209@Component
9210struct WebComponent {
9211  @State testTitle: string = 'webScroll'
9212  controller: webview.WebviewController = new webview.WebviewController();
9213  @State controllerX: number =-100;
9214  @State controllerY: number =-100;
9215  @State mode: OverScrollMode = OverScrollMode.ALWAYS;
9216
9217  build() {
9218    Column() {
9219      Row() {
9220        Text(this.testTitle)
9221          .fontSize(30)
9222          .fontWeight(FontWeight.Bold)
9223          .margin(5)
9224      }
9225      Column() {
9226        Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`)
9227      }
9228      .margin({ top: 10, bottom: 10 })
9229      Web({ src: $rawfile("scrollByTo.html"), controller: this.controller })
9230        .key("web_01")
9231        .overScrollMode(this.mode)
9232        .onTouch(() => {
9233          this.controllerX = this.controller.getScrollOffset().x;
9234          this.controllerY = this.controller.getScrollOffset().y;
9235          let componentInfo = this.getUIContext().getComponentUtils().getRectangleById("web_01");
9236          let webHeight = this.getUIContext().px2vp(componentInfo.size.height);
9237          let pageHeight = this.controller.getPageHeight();
9238          if (this.controllerY < 0) {
9239            // case1:网页向下过滚动时,可直接使用ScrollOffset.y
9240            console.log(`get downwards overscroll offsetY = ${this.controllerY}`);
9241          } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) {
9242            // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量
9243            console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`);
9244          } else {
9245            // case3:网页未发生过滚动时,可直接使用ScrollOffset.y
9246            console.log(`get scroll offsetY = ${this.controllerY}`);
9247          }
9248        })
9249        .height(600)
9250    }
9251    .width('100%')
9252    .height('100%')
9253  }
9254}
9255```
9256
9257### getLastHitTest<sup>18+</sup>
9258
9259getLastHitTest(): HitTestValue
9260
9261获取上一次被点击区域的元素信息。
9262
9263**系统能力:** SystemCapability.Web.Webview.Core
9264
9265**返回值:**
9266
9267| 类型         | 说明                 |
9268| ------------ | -------------------- |
9269| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
9270
9271**错误码:**
9272
9273以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9274
9275| 错误码ID | 错误信息                                                     |
9276| -------- | ------------------------------------------------------------ |
9277| 17100001 | Init error. The WebviewController must be associated with a Web component. |
9278
9279**示例:**
9280
9281```ts
9282// xxx.ets
9283import { webview } from '@kit.ArkWeb';
9284import { BusinessError } from '@kit.BasicServicesKit';
9285
9286@Entry
9287@Component
9288struct WebComponent {
9289  controller: webview.WebviewController = new webview.WebviewController();
9290
9291  build() {
9292    Column() {
9293      Button('getLastHitTest')
9294        .onClick(() => {
9295          try {
9296            let hitValue = this.controller.getLastHitTest();
9297            console.log("hitType: " + hitValue.type);
9298            console.log("extra: " + hitValue.extra);
9299          } catch (error) {
9300            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9301          }
9302        })
9303      Web({ src: 'www.example.com', controller: this.controller })
9304    }
9305  }
9306}
9307```
9308
9309## WebCookieManager
9310
9311通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。
9312
9313### getCookie<sup>(deprecated)</sup>
9314
9315static getCookie(url: string): string
9316
9317获取指定url对应cookie的值。
9318
9319> **说明:**
9320>
9321> 从API version 9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代
9322
9323**系统能力:** SystemCapability.Web.Webview.Core
9324
9325**参数:**
9326
9327| 参数名 | 类型   | 必填 | 说明                      |
9328| ------ | ------ | ---- | :------------------------ |
9329| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9330
9331**返回值:**
9332
9333| 类型   | 说明                      |
9334| ------ | ------------------------- |
9335| string | 指定url对应的cookie的值。 |
9336
9337**错误码:**
9338
9339以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9340
9341| 错误码ID | 错误信息                                               |
9342| -------- | ------------------------------------------------------ |
9343| 17100002 | Invalid url.                                           |
9344| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9345
9346**示例:**
9347
9348```ts
9349// xxx.ets
9350import { webview } from '@kit.ArkWeb';
9351import { BusinessError } from '@kit.BasicServicesKit';
9352
9353@Entry
9354@Component
9355struct WebComponent {
9356  controller: webview.WebviewController = new webview.WebviewController();
9357
9358  build() {
9359    Column() {
9360      Button('getCookie')
9361        .onClick(() => {
9362          try {
9363            let value = webview.WebCookieManager.getCookie('https://www.example.com');
9364            console.log("value: " + value);
9365          } catch (error) {
9366            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9367          }
9368        })
9369      Web({ src: 'www.example.com', controller: this.controller })
9370    }
9371  }
9372}
9373```
9374
9375### fetchCookieSync<sup>11+</sup>
9376
9377static fetchCookieSync(url: string, incognito?: boolean): string
9378
9379获取指定url对应cookie的值。
9380
9381> **说明:**
9382>
9383> 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。
9384>
9385> 为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。
9386>
9387> fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。
9388
9389**系统能力:** SystemCapability.Web.Webview.Core
9390
9391**参数:**
9392
9393| 参数名 | 类型   | 必填 | 说明                      |
9394| ------ | ------ | ---- | :------------------------ |
9395| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9396| incognito    | boolean | 否   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9397
9398**返回值:**
9399
9400| 类型   | 说明                      |
9401| ------ | ------------------------- |
9402| string | 指定url对应的cookie的值。 |
9403
9404**错误码:**
9405
9406以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9407
9408| 错误码ID | 错误信息                                               |
9409| -------- | ------------------------------------------------------ |
9410| 17100002 | Invalid url.                                           |
9411| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9412
9413**示例:**
9414
9415```ts
9416// xxx.ets
9417import { webview } from '@kit.ArkWeb';
9418import { BusinessError } from '@kit.BasicServicesKit';
9419
9420@Entry
9421@Component
9422struct WebComponent {
9423  controller: webview.WebviewController = new webview.WebviewController();
9424
9425  build() {
9426    Column() {
9427      Button('fetchCookieSync')
9428        .onClick(() => {
9429          try {
9430            let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com');
9431            console.log("fetchCookieSync cookie = " + value);
9432          } catch (error) {
9433            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9434          }
9435        })
9436      Web({ src: 'www.example.com', controller: this.controller })
9437    }
9438  }
9439}
9440```
9441
9442### fetchCookie<sup>11+</sup>
9443
9444static fetchCookie(url: string, callback: AsyncCallback\<string>): void
9445
9446异步callback方式获取指定url对应cookie的值。
9447
9448**系统能力:** SystemCapability.Web.Webview.Core
9449
9450**参数:**
9451
9452| 参数名 | 类型   | 必填 | 说明                      |
9453| ------ | ------ | ---- | :------------------------ |
9454| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9455| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie |
9456
9457**错误码:**
9458
9459以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9460
9461| 错误码ID | 错误信息                                               |
9462| -------- | ------------------------------------------------------ |
9463| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9464| 17100002 | Invalid url.                                           |
9465
9466**示例:**
9467
9468```ts
9469// xxx.ets
9470import { webview } from '@kit.ArkWeb';
9471import { BusinessError } from '@kit.BasicServicesKit';
9472
9473@Entry
9474@Component
9475struct WebComponent {
9476  controller: webview.WebviewController = new webview.WebviewController();
9477
9478  build() {
9479    Column() {
9480      Button('fetchCookie')
9481        .onClick(() => {
9482          try {
9483            webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => {
9484              if (error) {
9485                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9486                return;
9487              }
9488              if (cookie) {
9489                console.log('fetchCookie cookie = ' + cookie);
9490              }
9491            })
9492          } catch (error) {
9493            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9494          }
9495        })
9496      Web({ src: 'www.example.com', controller: this.controller })
9497    }
9498  }
9499}
9500```
9501
9502### fetchCookie<sup>11+</sup>
9503
9504static fetchCookie(url: string): Promise\<string>
9505
9506以Promise方式异步获取指定url对应cookie的值。
9507
9508**系统能力:** SystemCapability.Web.Webview.Core
9509
9510**参数:**
9511
9512| 参数名 | 类型   | 必填 | 说明                      |
9513| ------ | ------ | ---- | :------------------------ |
9514| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9515
9516**返回值:**
9517
9518| 类型   | 说明                      |
9519| ------ | ------------------------- |
9520| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9521
9522**错误码:**
9523
9524以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9525
9526| 错误码ID | 错误信息                                               |
9527| -------- | ------------------------------------------------------ |
9528| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9529| 17100002 | Invalid url.                                           |
9530
9531**示例:**
9532
9533```ts
9534// xxx.ets
9535import { webview } from '@kit.ArkWeb';
9536import { BusinessError } from '@kit.BasicServicesKit';
9537
9538@Entry
9539@Component
9540struct WebComponent {
9541  controller: webview.WebviewController = new webview.WebviewController();
9542
9543  build() {
9544    Column() {
9545      Button('fetchCookie')
9546        .onClick(() => {
9547          try {
9548            webview.WebCookieManager.fetchCookie('https://www.example.com')
9549              .then(cookie => {
9550                console.log("fetchCookie cookie = " + cookie);
9551              })
9552              .catch((error: BusinessError) => {
9553                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9554              })
9555          } catch (error) {
9556            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9557          }
9558        })
9559      Web({ src: 'www.example.com', controller: this.controller })
9560    }
9561  }
9562}
9563```
9564
9565### fetchCookie<sup>14+</sup>
9566
9567static fetchCookie(url: string, incognito: boolean): Promise\<string>
9568
9569以Promise方式异步获取指定url对应cookie的值。
9570
9571**系统能力:** SystemCapability.Web.Webview.Core
9572
9573**参数:**
9574
9575| 参数名 | 类型   | 必填 | 说明                      |
9576| ------ | ------ | ---- | :------------------------ |
9577| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9578| incognito    | boolean | 是   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9579
9580**返回值:**
9581
9582| 类型   | 说明                      |
9583| ------ | ------------------------- |
9584| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9585
9586**错误码:**
9587
9588以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9589
9590| 错误码ID | 错误信息                                               |
9591| -------- | ------------------------------------------------------ |
9592| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9593| 17100002 | Invalid url.                                           |
9594
9595**示例:**
9596
9597```ts
9598// xxx.ets
9599import { webview } from '@kit.ArkWeb';
9600import { BusinessError } from '@kit.BasicServicesKit';
9601
9602@Entry
9603@Component
9604struct WebComponent {
9605  controller: webview.WebviewController = new webview.WebviewController();
9606
9607  build() {
9608    Column() {
9609      Button('fetchCookie')
9610        .onClick(() => {
9611          try {
9612            webview.WebCookieManager.fetchCookie('https://www.example.com', false)
9613              .then(cookie => {
9614                console.log("fetchCookie cookie = " + cookie);
9615              })
9616              .catch((error: BusinessError) => {
9617                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9618              })
9619          } catch (error) {
9620            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9621          }
9622        })
9623      Web({ src: 'www.example.com', controller: this.controller })
9624    }
9625  }
9626}
9627```
9628
9629### setCookie<sup>(deprecated)</sup>
9630
9631static setCookie(url: string, value: string): void
9632
9633为指定url设置单个cookie的值。
9634
9635> **说明:**
9636>
9637> 从API version 9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代
9638
9639**系统能力:** SystemCapability.Web.Webview.Core
9640
9641**参数:**
9642
9643| 参数名 | 类型   | 必填 | 说明                      |
9644| ------ | ------ | ---- | :------------------------ |
9645| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9646| value  | string | 是   | 要设置的cookie的值。      |
9647
9648**错误码:**
9649
9650以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9651
9652| 错误码ID | 错误信息                                               |
9653| -------- | ------------------------------------------------------ |
9654| 17100002 | Invalid url.                                           |
9655| 17100005 | Invalid cookie value.                                  |
9656| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9657
9658**示例:**
9659
9660```ts
9661// xxx.ets
9662import { webview } from '@kit.ArkWeb';
9663import { BusinessError } from '@kit.BasicServicesKit';
9664
9665@Entry
9666@Component
9667struct WebComponent {
9668  controller: webview.WebviewController = new webview.WebviewController();
9669
9670  build() {
9671    Column() {
9672      Button('setCookie')
9673        .onClick(() => {
9674          try {
9675            webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
9676          } catch (error) {
9677            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9678          }
9679        })
9680      Web({ src: 'www.example.com', controller: this.controller })
9681    }
9682  }
9683}
9684```
9685
9686### configCookieSync<sup>11+</sup>
9687
9688static configCookieSync(url: string, value: string, incognito?: boolean): void
9689
9690为指定url设置单个cookie的值。
9691
9692> **说明:**
9693>
9694> configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
9695>
9696> 同步cookie的时机建议在Web组件加载之前完成。
9697>
9698> 若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。
9699
9700**系统能力:** SystemCapability.Web.Webview.Core
9701
9702**参数:**
9703
9704| 参数名 | 类型   | 必填 | 说明                      |
9705| ------ | ------ | ---- | :------------------------ |
9706| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9707| value  | string | 是   | 要设置的cookie的值。      |
9708| incognito    | boolean | 否   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9709
9710**错误码:**
9711
9712以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9713
9714| 错误码ID | 错误信息                                               |
9715| -------- | ------------------------------------------------------ |
9716| 17100002 | Invalid url.                                           |
9717| 17100005 | Invalid cookie value.                                  |
9718| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9719
9720**示例:**
9721
9722```ts
9723// xxx.ets
9724import { webview } from '@kit.ArkWeb';
9725import { BusinessError } from '@kit.BasicServicesKit';
9726
9727@Entry
9728@Component
9729struct WebComponent {
9730  controller: webview.WebviewController = new webview.WebviewController();
9731
9732  build() {
9733    Column() {
9734      Button('configCookieSync')
9735        .onClick(() => {
9736          try {
9737            // configCookieSync每次仅支持设置单个cookie值。
9738            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b');
9739          } catch (error) {
9740            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9741          }
9742        })
9743      Web({ src: 'www.example.com', controller: this.controller })
9744    }
9745  }
9746}
9747```
9748
9749### configCookieSync<sup>14+</sup>
9750
9751static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void
9752
9753为指定url设置cookie的值。
9754
9755**系统能力:** SystemCapability.Web.Webview.Core
9756
9757**参数:**
9758
9759| 参数名 | 类型   | 必填 | 说明                      |
9760| ------ | ------ | ---- | :------------------------ |
9761| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9762| value  | string | 是   | 要设置的cookie的值。      |
9763| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9764| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9765
9766**错误码:**
9767
9768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9769
9770| 错误码ID | 错误信息                                               |
9771| -------- | ------------------------------------------------------ |
9772| 17100002 | Invalid url.                                           |
9773| 17100005 | Invalid cookie value.                                  |
9774| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9775
9776**示例:**
9777
9778```ts
9779// xxx.ets
9780import { webview } from '@kit.ArkWeb';
9781import { BusinessError } from '@kit.BasicServicesKit';
9782
9783@Entry
9784@Component
9785struct WebComponent {
9786  controller: webview.WebviewController = new webview.WebviewController();
9787
9788  build() {
9789    Column() {
9790      Button('configCookieSync')
9791        .onClick(() => {
9792          try {
9793            // 仅支持设置单个cookie值。
9794            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false);
9795          } catch (error) {
9796            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9797          }
9798        })
9799      Web({ src: 'www.example.com', controller: this.controller })
9800    }
9801  }
9802}
9803```
9804
9805### configCookie<sup>11+</sup>
9806
9807static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void
9808
9809异步callback方式为指定url设置单个cookie的值。
9810
9811**系统能力:** SystemCapability.Web.Webview.Core
9812
9813**参数:**
9814
9815| 参数名 | 类型   | 必填 | 说明                      |
9816| ------ | ------ | ---- | :------------------------ |
9817| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9818| value  | string | 是   | 要设置的cookie的值。      |
9819| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 |
9820
9821**错误码:**
9822
9823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9824
9825| 错误码ID | 错误信息                                               |
9826| -------- | ------------------------------------------------------ |
9827| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9828| 17100002 | Invalid url.                                           |
9829| 17100005 | Invalid cookie value.                                  |
9830
9831**示例:**
9832
9833```ts
9834// xxx.ets
9835import { webview } from '@kit.ArkWeb';
9836import { BusinessError } from '@kit.BasicServicesKit';
9837
9838@Entry
9839@Component
9840struct WebComponent {
9841  controller: webview.WebviewController = new webview.WebviewController();
9842
9843  build() {
9844    Column() {
9845      Button('configCookie')
9846        .onClick(() => {
9847          try {
9848            webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => {
9849              if (error) {
9850                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9851              }
9852            })
9853          } catch (error) {
9854            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9855          }
9856        })
9857      Web({ src: 'www.example.com', controller: this.controller })
9858    }
9859  }
9860}
9861```
9862
9863### configCookie<sup>11+</sup>
9864
9865static configCookie(url: string, value: string): Promise\<void>
9866
9867以异步Promise方式为指定url设置单个cookie的值。
9868
9869**系统能力:** SystemCapability.Web.Webview.Core
9870
9871**参数:**
9872
9873| 参数名 | 类型   | 必填 | 说明                      |
9874| ------ | ------ | ---- | :------------------------ |
9875| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9876| value  | string | 是   | 要设置的cookie的值。      |
9877
9878**返回值:**
9879
9880| 类型   | 说明                      |
9881| ------ | ------------------------- |
9882| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9883
9884**错误码:**
9885
9886以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9887
9888| 错误码ID | 错误信息                                                |
9889| -------- | ------------------------------------------------------ |
9890| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9891| 17100002 | Invalid url.                                           |
9892| 17100005 | Invalid cookie value.                                  |
9893
9894**示例:**
9895
9896```ts
9897// xxx.ets
9898import { webview } from '@kit.ArkWeb';
9899import { BusinessError } from '@kit.BasicServicesKit';
9900
9901@Entry
9902@Component
9903struct WebComponent {
9904  controller: webview.WebviewController = new webview.WebviewController();
9905
9906  build() {
9907    Column() {
9908      Button('configCookie')
9909        .onClick(() => {
9910          try {
9911            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b')
9912              .then(() => {
9913                console.log('configCookie success!');
9914              })
9915              .catch((error: BusinessError) => {
9916                console.log('error: ' + JSON.stringify(error));
9917              })
9918          } catch (error) {
9919            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9920          }
9921        })
9922      Web({ src: 'www.example.com', controller: this.controller })
9923    }
9924  }
9925}
9926```
9927
9928### configCookie<sup>14+</sup>
9929
9930static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void>
9931
9932以异步Promise方式为指定url设置单个cookie的值。
9933
9934**系统能力:** SystemCapability.Web.Webview.Core
9935
9936**参数:**
9937
9938| 参数名 | 类型   | 必填 | 说明                      |
9939| ------ | ------ | ---- | :------------------------ |
9940| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9941| value  | string | 是   | 要设置的cookie的值。      |
9942| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9943| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9944
9945**返回值:**
9946
9947| 类型   | 说明                      |
9948| ------ | ------------------------- |
9949| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9950
9951**错误码:**
9952
9953以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9954
9955| 错误码ID | 错误信息                                                |
9956| -------- | ------------------------------------------------------ |
9957| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9958| 17100002 | Invalid url.                                           |
9959| 17100005 | Invalid cookie value.                                  |
9960
9961**示例:**
9962
9963```ts
9964// xxx.ets
9965import { webview } from '@kit.ArkWeb';
9966import { BusinessError } from '@kit.BasicServicesKit';
9967
9968@Entry
9969@Component
9970struct WebComponent {
9971  controller: webview.WebviewController = new webview.WebviewController();
9972
9973  build() {
9974    Column() {
9975      Button('configCookie')
9976        .onClick(() => {
9977          try {
9978            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false)
9979              .then(() => {
9980                console.log('configCookie success!');
9981              })
9982              .catch((error: BusinessError) => {
9983                console.log('error: ' + JSON.stringify(error));
9984              })
9985          } catch (error) {
9986            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9987          }
9988        })
9989      Web({ src: 'www.example.com', controller: this.controller })
9990    }
9991  }
9992}
9993```
9994
9995### saveCookieSync<sup>15+</sup>
9996
9997static saveCookieSync(): void
9998
9999将当前存在内存中的cookie同步保存到磁盘中。
10000
10001**系统能力:** SystemCapability.Web.Webview.Core
10002
10003> **说明:**
10004>
10005> saveCookieSync用于强制将需要持久化的cookies写入磁盘。默认情况下,2in1和Tablet设备不会持久化session cookie。
10006
10007**示例:**
10008
10009```ts
10010// xxx.ets
10011import { webview } from '@kit.ArkWeb';
10012import { BusinessError } from '@kit.BasicServicesKit';
10013
10014@Entry
10015@Component
10016struct WebComponent {
10017  controller: webview.WebviewController = new webview.WebviewController();
10018
10019  build() {
10020    Column() {
10021      Button('saveCookieSync')
10022        .onClick(() => {
10023          try {
10024            webview.WebCookieManager.saveCookieSync();
10025          } catch (error) {
10026            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10027          }
10028        })
10029      Web({ src: 'www.example.com', controller: this.controller })
10030    }
10031  }
10032}
10033```
10034
10035### saveCookieAsync
10036
10037static saveCookieAsync(callback: AsyncCallback\<void>): void
10038
10039将当前存在内存中的cookie异步保存到磁盘中。
10040
10041**系统能力:** SystemCapability.Web.Webview.Core
10042
10043**参数:**
10044
10045| 参数名   | 类型                   | 必填 | 说明                                               |
10046| -------- | ---------------------- | ---- | :------------------------------------------------- |
10047| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
10048
10049**错误码:**
10050
10051以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10052
10053| 错误码ID | 错误信息                                                |
10054| -------- | ------------------------------------------------------ |
10055| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10056
10057**示例:**
10058
10059```ts
10060// xxx.ets
10061import { webview } from '@kit.ArkWeb';
10062import { BusinessError } from '@kit.BasicServicesKit';
10063
10064@Entry
10065@Component
10066struct WebComponent {
10067  controller: webview.WebviewController = new webview.WebviewController();
10068
10069  build() {
10070    Column() {
10071      Button('saveCookieAsync')
10072        .onClick(() => {
10073          try {
10074            webview.WebCookieManager.saveCookieAsync((error) => {
10075              if (error) {
10076                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10077              }
10078            })
10079          } catch (error) {
10080            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10081          }
10082        })
10083      Web({ src: 'www.example.com', controller: this.controller })
10084    }
10085  }
10086}
10087```
10088
10089### saveCookieAsync
10090
10091static saveCookieAsync(): Promise\<void>
10092
10093将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
10094
10095**系统能力:** SystemCapability.Web.Webview.Core
10096
10097**返回值:**
10098
10099| 类型             | 说明                                      |
10100| ---------------- | ----------------------------------------- |
10101| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
10102
10103**错误码:**
10104
10105以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10106
10107| 错误码ID | 错误信息                                                |
10108| -------- | ------------------------------------------------------ |
10109| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10110
10111**示例:**
10112
10113```ts
10114// xxx.ets
10115import { webview } from '@kit.ArkWeb';
10116import { BusinessError } from '@kit.BasicServicesKit';
10117
10118@Entry
10119@Component
10120struct WebComponent {
10121  controller: webview.WebviewController = new webview.WebviewController();
10122
10123  build() {
10124    Column() {
10125      Button('saveCookieAsync')
10126        .onClick(() => {
10127          try {
10128            webview.WebCookieManager.saveCookieAsync()
10129              .then(() => {
10130                console.log("saveCookieAsyncCallback success!");
10131              })
10132              .catch((error: BusinessError) => {
10133                console.error("error: " + error);
10134              });
10135          } catch (error) {
10136            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10137          }
10138        })
10139      Web({ src: 'www.example.com', controller: this.controller })
10140    }
10141  }
10142}
10143```
10144
10145### putAcceptCookieEnabled
10146
10147static putAcceptCookieEnabled(accept: boolean): void
10148
10149设置WebCookieManager实例是否拥有发送和接收cookie的权限。
10150
10151**系统能力:** SystemCapability.Web.Webview.Core
10152
10153**参数:**
10154
10155| 参数名 | 类型    | 必填 | 说明                                 |
10156| ------ | ------- | ---- | :----------------------------------- |
10157| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限,默认为true,表示拥有发送和接收cookie的权限。 |
10158
10159**错误码:**
10160
10161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10162
10163| 错误码ID | 错误信息                                                |
10164| -------- | ------------------------------------------------------ |
10165| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10166
10167**示例:**
10168
10169```ts
10170// xxx.ets
10171import { webview } from '@kit.ArkWeb';
10172import { BusinessError } from '@kit.BasicServicesKit';
10173
10174@Entry
10175@Component
10176struct WebComponent {
10177  controller: webview.WebviewController = new webview.WebviewController();
10178
10179  build() {
10180    Column() {
10181      Button('putAcceptCookieEnabled')
10182        .onClick(() => {
10183          try {
10184            webview.WebCookieManager.putAcceptCookieEnabled(false);
10185          } catch (error) {
10186            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10187          }
10188        })
10189      Web({ src: 'www.example.com', controller: this.controller })
10190    }
10191  }
10192}
10193```
10194
10195### isCookieAllowed
10196
10197static isCookieAllowed(): boolean
10198
10199获取WebCookieManager实例是否拥有发送和接收cookie的权限。
10200
10201**系统能力:** SystemCapability.Web.Webview.Core
10202
10203**返回值:**
10204
10205| 类型    | 说明                             |
10206| ------- | -------------------------------- |
10207| boolean | 是否拥有发送和接收cookie的权限,默认为true,表示拥有发送和接收cookie的权限。 |
10208
10209**示例:**
10210
10211```ts
10212// xxx.ets
10213import { webview } from '@kit.ArkWeb';
10214
10215@Entry
10216@Component
10217struct WebComponent {
10218  controller: webview.WebviewController = new webview.WebviewController();
10219
10220  build() {
10221    Column() {
10222      Button('isCookieAllowed')
10223        .onClick(() => {
10224          let result = webview.WebCookieManager.isCookieAllowed();
10225          console.log("result: " + result);
10226        })
10227      Web({ src: 'www.example.com', controller: this.controller })
10228    }
10229  }
10230}
10231```
10232
10233### putAcceptThirdPartyCookieEnabled
10234
10235static putAcceptThirdPartyCookieEnabled(accept: boolean): void
10236
10237设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
10238
10239**系统能力:** SystemCapability.Web.Webview.Core
10240
10241**参数:**
10242
10243| 参数名 | 类型    | 必填 | 说明                                       |
10244| ------ | ------- | ---- | :----------------------------------------- |
10245| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限。<br>true表示设置拥有发送和接收第三方cookie的权限,false表示设置无发送和接收第三方cookie的权限。<br>默认值:false。 |
10246
10247**错误码:**
10248
10249以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10250
10251| 错误码ID | 错误信息                                                |
10252| -------- | ------------------------------------------------------ |
10253| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10254
10255**示例:**
10256
10257```ts
10258// xxx.ets
10259import { webview } from '@kit.ArkWeb';
10260import { BusinessError } from '@kit.BasicServicesKit';
10261
10262@Entry
10263@Component
10264struct WebComponent {
10265  controller: webview.WebviewController = new webview.WebviewController();
10266
10267  build() {
10268    Column() {
10269      Button('putAcceptThirdPartyCookieEnabled')
10270        .onClick(() => {
10271          try {
10272            webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
10273          } catch (error) {
10274            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10275          }
10276        })
10277      Web({ src: 'www.example.com', controller: this.controller })
10278    }
10279  }
10280}
10281```
10282
10283### isThirdPartyCookieAllowed
10284
10285static isThirdPartyCookieAllowed(): boolean
10286
10287获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
10288
10289**系统能力:** SystemCapability.Web.Webview.Core
10290
10291**返回值:**
10292
10293| 类型    | 说明                                   |
10294| ------- | -------------------------------------- |
10295| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false,表示未拥有发送和接收第三方cookie的权限。 |
10296
10297**示例:**
10298
10299```ts
10300// xxx.ets
10301import { webview } from '@kit.ArkWeb';
10302
10303@Entry
10304@Component
10305struct WebComponent {
10306  controller: webview.WebviewController = new webview.WebviewController();
10307
10308  build() {
10309    Column() {
10310      Button('isThirdPartyCookieAllowed')
10311        .onClick(() => {
10312          let result = webview.WebCookieManager.isThirdPartyCookieAllowed();
10313          console.log("result: " + result);
10314        })
10315      Web({ src: 'www.example.com', controller: this.controller })
10316    }
10317  }
10318}
10319```
10320
10321### existCookie
10322
10323static existCookie(incognito?: boolean): boolean
10324
10325获取是否存在cookie。
10326
10327**系统能力:** SystemCapability.Web.Webview.Core
10328
10329**参数:**
10330
10331| 参数名 | 类型    | 必填 | 说明                                       |
10332| ------ | ------- | ---- | :----------------------------------------- |
10333| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 |
10334
10335**返回值:**
10336
10337| 类型    | 说明                                   |
10338| ------- | -------------------------------------- |
10339| boolean | true表示存在cookie,false表示不存在cookie。 |
10340
10341**示例:**
10342
10343```ts
10344// xxx.ets
10345import { webview } from '@kit.ArkWeb';
10346
10347@Entry
10348@Component
10349struct WebComponent {
10350  controller: webview.WebviewController = new webview.WebviewController();
10351
10352  build() {
10353    Column() {
10354      Button('existCookie')
10355        .onClick(() => {
10356          let result = webview.WebCookieManager.existCookie();
10357          console.log("result: " + result);
10358        })
10359      Web({ src: 'www.example.com', controller: this.controller })
10360    }
10361  }
10362}
10363```
10364
10365### deleteEntireCookie<sup>(deprecated)</sup>
10366
10367static deleteEntireCookie(): void
10368
10369清除所有cookie。
10370
10371> **说明:**
10372>
10373> 从API version 9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代
10374
10375**系统能力:** SystemCapability.Web.Webview.Core
10376
10377**示例:**
10378
10379```ts
10380// xxx.ets
10381import { webview } from '@kit.ArkWeb';
10382
10383@Entry
10384@Component
10385struct WebComponent {
10386  controller: webview.WebviewController = new webview.WebviewController();
10387
10388  build() {
10389    Column() {
10390      Button('deleteEntireCookie')
10391        .onClick(() => {
10392          webview.WebCookieManager.deleteEntireCookie();
10393        })
10394      Web({ src: 'www.example.com', controller: this.controller })
10395    }
10396  }
10397}
10398```
10399
10400### clearAllCookiesSync<sup>11+</sup>
10401
10402static clearAllCookiesSync(incognito?: boolean): void
10403
10404清除所有cookie。
10405
10406**系统能力:** SystemCapability.Web.Webview.Core
10407
10408**参数:**
10409
10410| 参数名 | 类型    | 必填 | 说明                                       |
10411| ------ | ------- | ---- | :----------------------------------------- |
10412| incognito    | boolean | 否   | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 |
10413
10414**示例:**
10415
10416```ts
10417// xxx.ets
10418import { webview } from '@kit.ArkWeb';
10419
10420@Entry
10421@Component
10422struct WebComponent {
10423  controller: webview.WebviewController = new webview.WebviewController();
10424
10425  build() {
10426    Column() {
10427      Button('clearAllCookiesSync')
10428        .onClick(() => {
10429          webview.WebCookieManager.clearAllCookiesSync();
10430        })
10431      Web({ src: 'www.example.com', controller: this.controller })
10432    }
10433  }
10434}
10435```
10436
10437### clearAllCookies<sup>11+</sup>
10438
10439static clearAllCookies(callback: AsyncCallback\<void>): void
10440
10441异步callback方式清除所有cookie。
10442
10443**系统能力:** SystemCapability.Web.Webview.Core
10444
10445**参数:**
10446
10447| 参数名   | 类型                   | 必填 | 说明                                               |
10448| -------- | ---------------------- | ---- | :------------------------------------------------- |
10449| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有cookie是否成功。 |
10450
10451**错误码:**
10452
10453以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10454
10455| 错误码ID | 错误信息                                                |
10456| -------- | ------------------------------------------------------ |
10457| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10458
10459**示例:**
10460
10461```ts
10462// xxx.ets
10463import { webview } from '@kit.ArkWeb';
10464import { BusinessError } from '@kit.BasicServicesKit';
10465
10466@Entry
10467@Component
10468struct WebComponent {
10469  controller: webview.WebviewController = new webview.WebviewController();
10470
10471  build() {
10472    Column() {
10473      Button('clearAllCookies')
10474        .onClick(() => {
10475          try {
10476            webview.WebCookieManager.clearAllCookies((error) => {
10477              if (error) {
10478                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10479              }
10480            })
10481          } catch (error) {
10482            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10483          }
10484        })
10485      Web({ src: 'www.example.com', controller: this.controller })
10486    }
10487  }
10488}
10489```
10490
10491### clearAllCookies<sup>11+</sup>
10492
10493static clearAllCookies(): Promise\<void>
10494
10495异步promise方式清除所有cookie。
10496
10497**系统能力:** SystemCapability.Web.Webview.Core
10498
10499**返回值:**
10500
10501| 类型             | 说明                                      |
10502| ---------------- | ----------------------------------------- |
10503| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 |
10504
10505**错误码:**
10506
10507以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10508
10509| 错误码ID | 错误信息                                                |
10510| -------- | ------------------------------------------------------ |
10511| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10512
10513**示例:**
10514
10515```ts
10516// xxx.ets
10517import { webview } from '@kit.ArkWeb';
10518import { BusinessError } from '@kit.BasicServicesKit';
10519
10520@Entry
10521@Component
10522struct WebComponent {
10523  controller: webview.WebviewController = new webview.WebviewController();
10524
10525  build() {
10526    Column() {
10527      Button('clearAllCookies')
10528        .onClick(() => {
10529          try {
10530            webview.WebCookieManager.clearAllCookies()
10531              .then(() => {
10532                console.log("clearAllCookies success!");
10533              })
10534              .catch((error: BusinessError) => {
10535                console.error("error: " + error);
10536              });
10537          } catch (error) {
10538            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10539          }
10540        })
10541      Web({ src: 'www.example.com', controller: this.controller })
10542    }
10543  }
10544}
10545```
10546
10547### deleteSessionCookie<sup>(deprecated)</sup>
10548
10549static deleteSessionCookie(): void
10550
10551清除所有会话cookie。
10552
10553> **说明:**
10554>
10555> 从API version 9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代
10556
10557**系统能力:** SystemCapability.Web.Webview.Core
10558
10559**示例:**
10560
10561```ts
10562// xxx.ets
10563import { webview } from '@kit.ArkWeb';
10564
10565@Entry
10566@Component
10567struct WebComponent {
10568  controller: webview.WebviewController = new webview.WebviewController();
10569
10570  build() {
10571    Column() {
10572      Button('deleteSessionCookie')
10573        .onClick(() => {
10574          webview.WebCookieManager.deleteSessionCookie();
10575        })
10576      Web({ src: 'www.example.com', controller: this.controller })
10577    }
10578  }
10579}
10580```
10581
10582### clearSessionCookieSync<sup>11+</sup>
10583
10584static clearSessionCookieSync(): void
10585
10586清除所有会话cookie。
10587
10588**系统能力:** SystemCapability.Web.Webview.Core
10589
10590**示例:**
10591
10592```ts
10593// xxx.ets
10594import { webview } from '@kit.ArkWeb';
10595
10596@Entry
10597@Component
10598struct WebComponent {
10599  controller: webview.WebviewController = new webview.WebviewController();
10600
10601  build() {
10602    Column() {
10603      Button('clearSessionCookieSync')
10604        .onClick(() => {
10605          webview.WebCookieManager.clearSessionCookieSync();
10606        })
10607      Web({ src: 'www.example.com', controller: this.controller })
10608    }
10609  }
10610}
10611```
10612
10613### clearSessionCookie<sup>11+</sup>
10614
10615static clearSessionCookie(callback: AsyncCallback\<void>): void
10616
10617异步callback方式清除所有会话cookie。
10618
10619**系统能力:** SystemCapability.Web.Webview.Core
10620
10621**参数:**
10622
10623| 参数名   | 类型                   | 必填 | 说明                                               |
10624| -------- | ---------------------- | ---- | :------------------------------------------------- |
10625| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有会话cookie是否成功。 |
10626
10627**错误码:**
10628
10629以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10630
10631| 错误码ID | 错误信息                                                |
10632| -------- | ------------------------------------------------------ |
10633| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10634
10635**示例:**
10636
10637```ts
10638// xxx.ets
10639import { webview } from '@kit.ArkWeb';
10640import { BusinessError } from '@kit.BasicServicesKit';
10641
10642@Entry
10643@Component
10644struct WebComponent {
10645  controller: webview.WebviewController = new webview.WebviewController();
10646
10647  build() {
10648    Column() {
10649      Button('clearSessionCookie')
10650        .onClick(() => {
10651          try {
10652            webview.WebCookieManager.clearSessionCookie((error) => {
10653              if (error) {
10654                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10655              }
10656            })
10657          } catch (error) {
10658            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10659          }
10660        })
10661      Web({ src: 'www.example.com', controller: this.controller })
10662    }
10663  }
10664}
10665```
10666
10667### clearSessionCookie<sup>11+</sup>
10668
10669static clearSessionCookie(): Promise\<void>
10670
10671异步promise方式清除所有会话cookie。
10672
10673**系统能力:** SystemCapability.Web.Webview.Core
10674
10675**返回值:**
10676
10677| 类型             | 说明                                      |
10678| ---------------- | ----------------------------------------- |
10679| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 |
10680
10681**错误码:**
10682
10683以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10684
10685| 错误码ID | 错误信息                                                |
10686| -------- | ------------------------------------------------------ |
10687| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10688
10689**示例:**
10690
10691```ts
10692// xxx.ets
10693import { webview } from '@kit.ArkWeb';
10694import { BusinessError } from '@kit.BasicServicesKit';
10695
10696@Entry
10697@Component
10698struct WebComponent {
10699  controller: webview.WebviewController = new webview.WebviewController();
10700
10701  build() {
10702    Column() {
10703      Button('clearSessionCookie')
10704        .onClick(() => {
10705          try {
10706            webview.WebCookieManager.clearSessionCookie()
10707              .then(() => {
10708                console.log("clearSessionCookie success!");
10709              })
10710              .catch((error: BusinessError) => {
10711                console.error("error: " + error);
10712              });
10713          } catch (error) {
10714            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10715          }
10716        })
10717      Web({ src: 'www.example.com', controller: this.controller })
10718    }
10719  }
10720}
10721```
10722
10723## WebStorage
10724
10725通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
10726
10727> **说明:**
10728>
10729> 目前调用WebStorage下的方法,都需要先加载Web组件。
10730
10731### deleteOrigin
10732
10733static deleteOrigin(origin: string): void
10734
10735清除指定源所使用的存储。
10736
10737**系统能力:** SystemCapability.Web.Webview.Core
10738
10739**参数:**
10740
10741| 参数名 | 类型   | 必填 | 说明                     |
10742| ------ | ------ | ---- | ------------------------ |
10743| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
10744
10745**错误码:**
10746
10747以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10748
10749| 错误码ID | 错误信息                                               |
10750| -------- | ------------------------------------------------------ |
10751| 17100011 | Invalid origin.                             |
10752| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10753
10754**示例:**
10755
10756```ts
10757// xxx.ets
10758import { webview } from '@kit.ArkWeb';
10759import { BusinessError } from '@kit.BasicServicesKit';
10760
10761@Entry
10762@Component
10763struct WebComponent {
10764  controller: webview.WebviewController = new webview.WebviewController();
10765  origin: string = "resource://rawfile/";
10766
10767  build() {
10768    Column() {
10769      Button('deleteOrigin')
10770        .onClick(() => {
10771          try {
10772            webview.WebStorage.deleteOrigin(this.origin);
10773          } catch (error) {
10774            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10775          }
10776
10777        })
10778      Web({ src: $rawfile('index.html'), controller: this.controller })
10779        .databaseAccess(true)
10780    }
10781  }
10782}
10783```
10784
10785加载的html文件。
10786 ```html
10787  <!-- index.html -->
10788  <!DOCTYPE html>
10789  <html>
10790  <head>
10791    <meta charset="UTF-8">
10792    <title>test</title>
10793    <script type="text/javascript">
10794
10795      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
10796      var msg;
10797
10798      db.transaction(function(tx){
10799        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
10800        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
10801        msg = '<p>数据表已创建,且插入了两条数据。</p>';
10802
10803        document.querySelector('#status').innerHTML = msg;
10804      });
10805
10806      db.transaction(function(tx){
10807        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
10808          var len = results.rows.length,i;
10809          msg = "<p>查询记录条数:" + len + "</p>";
10810
10811          document.querySelector('#status').innerHTML += msg;
10812
10813              for(i = 0; i < len; i++){
10814                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
10815
10816          document.querySelector('#status').innerHTML += msg;
10817          }
10818        },null);
10819      });
10820
10821      </script>
10822  </head>
10823  <body>
10824  <div id="status" name="status">状态信息</div>
10825  </body>
10826  </html>
10827 ```
10828
10829### getOrigins
10830
10831static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void
10832
10833以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
10834
10835**系统能力:** SystemCapability.Web.Webview.Core
10836
10837**参数:**
10838
10839| 参数名   | 类型                                   | 必填 | 说明                                                   |
10840| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
10841| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10842
10843**错误码:**
10844
10845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10846
10847| 错误码ID | 错误信息                                               |
10848| -------- | ------------------------------------------------------ |
10849| 17100012 | Invalid web storage origin.                             |
10850| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10851
10852**示例:**
10853
10854```ts
10855// xxx.ets
10856import { webview } from '@kit.ArkWeb';
10857import { BusinessError } from '@kit.BasicServicesKit';
10858
10859@Entry
10860@Component
10861struct WebComponent {
10862  controller: webview.WebviewController = new webview.WebviewController();
10863
10864  build() {
10865    Column() {
10866      Button('getOrigins')
10867        .onClick(() => {
10868          try {
10869            webview.WebStorage.getOrigins((error, origins) => {
10870              if (error) {
10871                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10872                return;
10873              }
10874              for (let i = 0; i < origins.length; i++) {
10875                console.log('origin: ' + origins[i].origin);
10876                console.log('usage: ' + origins[i].usage);
10877                console.log('quota: ' + origins[i].quota);
10878              }
10879            })
10880          } catch (error) {
10881            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10882          }
10883
10884        })
10885      Web({ src: $rawfile('index.html'), controller: this.controller })
10886        .databaseAccess(true)
10887    }
10888  }
10889}
10890```
10891
10892加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10893
10894### getOrigins
10895
10896static getOrigins(): Promise\<Array\<WebStorageOrigin>>
10897
10898以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
10899
10900**系统能力:** SystemCapability.Web.Webview.Core
10901
10902**返回值:**
10903
10904| 类型                             | 说明                                                         |
10905| -------------------------------- | ------------------------------------------------------------ |
10906| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10907
10908**错误码:**
10909
10910以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10911
10912| 错误码ID | 错误信息                                               |
10913| -------- | ------------------------------------------------------ |
10914| 17100012 | Invalid web storage origin.                             |
10915| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10916
10917**示例:**
10918
10919```ts
10920// xxx.ets
10921import { webview } from '@kit.ArkWeb';
10922import { BusinessError } from '@kit.BasicServicesKit';
10923
10924@Entry
10925@Component
10926struct WebComponent {
10927  controller: webview.WebviewController = new webview.WebviewController();
10928
10929  build() {
10930    Column() {
10931      Button('getOrigins')
10932        .onClick(() => {
10933          try {
10934            webview.WebStorage.getOrigins()
10935              .then(origins => {
10936                for (let i = 0; i < origins.length; i++) {
10937                  console.log('origin: ' + origins[i].origin);
10938                  console.log('usage: ' + origins[i].usage);
10939                  console.log('quota: ' + origins[i].quota);
10940                }
10941              })
10942              .catch((e: BusinessError) => {
10943                console.log('error: ' + JSON.stringify(e));
10944              })
10945          } catch (error) {
10946            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10947          }
10948
10949        })
10950      Web({ src: $rawfile('index.html'), controller: this.controller })
10951        .databaseAccess(true)
10952    }
10953  }
10954}
10955```
10956
10957加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10958
10959### getOriginQuota
10960
10961static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void
10962
10963使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10964
10965**系统能力:** SystemCapability.Web.Webview.Core
10966
10967**参数:**
10968
10969| 参数名   | 类型                  | 必填 | 说明               |
10970| -------- | --------------------- | ---- | ------------------ |
10971| origin   | string                | 是   | 指定源的字符串索引。 |
10972| callback | AsyncCallback\<number> | 是   | 指定源的存储配额。<br>number是long型整数,范围为(-2,147,483,648)~(2,147,483,647)。   |
10973
10974**错误码:**
10975
10976以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10977
10978| 错误码ID | 错误信息                                               |
10979| -------- | ------------------------------------------------------ |
10980| 17100011 | Invalid origin.                             |
10981| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10982
10983**示例:**
10984
10985```ts
10986// xxx.ets
10987import { webview } from '@kit.ArkWeb';
10988import { BusinessError } from '@kit.BasicServicesKit';
10989
10990@Entry
10991@Component
10992struct WebComponent {
10993  controller: webview.WebviewController = new webview.WebviewController();
10994  origin: string = "resource://rawfile/";
10995
10996  build() {
10997    Column() {
10998      Button('getOriginQuota')
10999        .onClick(() => {
11000          try {
11001            webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
11002              if (error) {
11003                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11004                return;
11005              }
11006              console.log('quota: ' + quota);
11007            })
11008          } catch (error) {
11009            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11010          }
11011
11012        })
11013      Web({ src: $rawfile('index.html'), controller: this.controller })
11014        .databaseAccess(true)
11015    }
11016  }
11017}
11018```
11019
11020加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
11021
11022### getOriginQuota
11023
11024static getOriginQuota(origin: string): Promise\<number>
11025
11026以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
11027
11028**系统能力:** SystemCapability.Web.Webview.Core
11029
11030**参数:**
11031
11032| 参数名 | 类型   | 必填 | 说明               |
11033| ------ | ------ | ---- | ------------------ |
11034| origin | string | 是   | 指定源的字符串索引 |
11035
11036**返回值:**
11037
11038| 类型            | 说明                                    |
11039| --------------- | --------------------------------------- |
11040| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
11041
11042**错误码:**
11043
11044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11045
11046| 错误码ID | 错误信息                                               |
11047| -------- | ------------------------------------------------------ |
11048| 17100011 | Invalid origin.                             |
11049| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11050
11051**示例:**
11052
11053```ts
11054// xxx.ets
11055import { webview } from '@kit.ArkWeb';
11056import { BusinessError } from '@kit.BasicServicesKit';
11057
11058@Entry
11059@Component
11060struct WebComponent {
11061  controller: webview.WebviewController = new webview.WebviewController();
11062  origin: string = "resource://rawfile/";
11063
11064  build() {
11065    Column() {
11066      Button('getOriginQuota')
11067        .onClick(() => {
11068          try {
11069            webview.WebStorage.getOriginQuota(this.origin)
11070              .then(quota => {
11071                console.log('quota: ' + quota);
11072              })
11073              .catch((e: BusinessError) => {
11074                console.log('error: ' + JSON.stringify(e));
11075              })
11076          } catch (error) {
11077            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11078          }
11079
11080        })
11081      Web({ src: $rawfile('index.html'), controller: this.controller })
11082        .databaseAccess(true)
11083    }
11084  }
11085}
11086```
11087
11088加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
11089
11090### getOriginUsage
11091
11092static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void
11093
11094以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
11095
11096**系统能力:** SystemCapability.Web.Webview.Core
11097
11098**参数:**
11099
11100| 参数名   | 类型                  | 必填 | 说明               |
11101| -------- | --------------------- | ---- | ------------------ |
11102| origin   | string                | 是   | 指定源的字符串索引 |
11103| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
11104
11105**错误码:**
11106
11107以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11108
11109| 错误码ID | 错误信息                                               |
11110| -------- | ------------------------------------------------------ |
11111| 17100011 | Invalid origin.                             |
11112| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11113
11114**示例:**
11115
11116```ts
11117// xxx.ets
11118import { webview } from '@kit.ArkWeb';
11119import { BusinessError } from '@kit.BasicServicesKit';
11120
11121@Entry
11122@Component
11123struct WebComponent {
11124  controller: webview.WebviewController = new webview.WebviewController();
11125  origin: string = "resource://rawfile/";
11126
11127  build() {
11128    Column() {
11129      Button('getOriginUsage')
11130        .onClick(() => {
11131          try {
11132            webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
11133              if (error) {
11134                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11135                return;
11136              }
11137              console.log('usage: ' + usage);
11138            })
11139          } catch (error) {
11140            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11141          }
11142
11143        })
11144      Web({ src: $rawfile('index.html'), controller: this.controller })
11145        .databaseAccess(true)
11146    }
11147  }
11148}
11149```
11150
11151加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
11152
11153### getOriginUsage
11154
11155static getOriginUsage(origin: string): Promise\<number>
11156
11157以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
11158
11159**系统能力:** SystemCapability.Web.Webview.Core
11160
11161**参数:**
11162
11163| 参数名 | 类型   | 必填 | 说明               |
11164| ------ | ------ | ---- | ------------------ |
11165| origin | string | 是   | 指定源的字符串索引 |
11166
11167**返回值:**
11168
11169| 类型            | 说明                                  |
11170| --------------- | ------------------------------------- |
11171| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
11172
11173**错误码:**
11174
11175以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11176
11177| 错误码ID | 错误信息                                              |
11178| -------- | ----------------------------------------------------- |
11179| 17100011 | Invalid origin.                            |
11180| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11181
11182**示例:**
11183
11184```ts
11185// xxx.ets
11186import { webview } from '@kit.ArkWeb';
11187import { BusinessError } from '@kit.BasicServicesKit';
11188
11189@Entry
11190@Component
11191struct WebComponent {
11192  controller: webview.WebviewController = new webview.WebviewController();
11193  origin: string = "resource://rawfile/";
11194
11195  build() {
11196    Column() {
11197      Button('getOriginUsage')
11198        .onClick(() => {
11199          try {
11200            webview.WebStorage.getOriginUsage(this.origin)
11201              .then(usage => {
11202                console.log('usage: ' + usage);
11203              }).catch((e: BusinessError) => {
11204              console.error('error: ' + JSON.stringify(e));
11205            })
11206          } catch (error) {
11207            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11208          }
11209        })
11210      Web({ src: $rawfile('index.html'), controller: this.controller })
11211        .databaseAccess(true)
11212    }
11213  }
11214}
11215```
11216
11217加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
11218
11219### deleteAllData
11220
11221static deleteAllData(incognito?: boolean): void
11222
11223清除Web SQL数据库当前使用的所有存储。
11224
11225**系统能力:** SystemCapability.Web.Webview.Core
11226
11227**参数:**
11228
11229| 参数名 | 类型   | 必填 | 说明               |
11230| ------ | ------ | ---- | ------------------ |
11231| incognito<sup>11+</sup>    | boolean | 否   | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 |
11232
11233**示例:**
11234
11235```ts
11236// xxx.ets
11237import { webview } from '@kit.ArkWeb';
11238import { BusinessError } from '@kit.BasicServicesKit';
11239
11240@Entry
11241@Component
11242struct WebComponent {
11243  controller: webview.WebviewController = new webview.WebviewController();
11244
11245  build() {
11246    Column() {
11247      Button('deleteAllData')
11248        .onClick(() => {
11249          try {
11250            webview.WebStorage.deleteAllData();
11251          } catch (error) {
11252            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11253          }
11254        })
11255      Web({ src: $rawfile('index.html'), controller: this.controller })
11256        .databaseAccess(true)
11257    }
11258  }
11259}
11260```
11261
11262加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
11263
11264## WebDataBase
11265
11266Web组件数据库管理对象。
11267
11268> **说明:**
11269>
11270> 目前调用WebDataBase下的方法,都需要先加载Web组件。
11271
11272### getHttpAuthCredentials
11273
11274static getHttpAuthCredentials(host: string, realm: string): Array\<string>
11275
11276检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11277
11278**系统能力:** SystemCapability.Web.Webview.Core
11279
11280**参数:**
11281
11282| 参数名 | 类型   | 必填 | 说明                         |
11283| ------ | ------ | ---- | ---------------------------- |
11284| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
11285| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
11286
11287**返回值:**
11288
11289| 类型  | 说明                                         |
11290| ----- | -------------------------------------------- |
11291| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
11292
11293**错误码:**
11294
11295以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11296
11297| 错误码ID | 错误信息                                                |
11298| -------- | ------------------------------------------------------ |
11299| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11300
11301**示例:**
11302
11303```ts
11304// xxx.ets
11305import { webview } from '@kit.ArkWeb';
11306import { BusinessError } from '@kit.BasicServicesKit';
11307
11308@Entry
11309@Component
11310struct WebComponent {
11311  controller: webview.WebviewController = new webview.WebviewController();
11312  host: string = "www.spincast.org";
11313  realm: string = "protected example";
11314  username_password: string[] = [];
11315
11316  build() {
11317    Column() {
11318      Button('getHttpAuthCredentials')
11319        .onClick(() => {
11320          try {
11321            this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
11322            console.log('num: ' + this.username_password.length);
11323          } catch (error) {
11324            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11325          }
11326        })
11327      Web({ src: 'www.example.com', controller: this.controller })
11328    }
11329  }
11330}
11331```
11332
11333### saveHttpAuthCredentials
11334
11335static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
11336
11337保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11338
11339**系统能力:** SystemCapability.Web.Webview.Core
11340
11341**参数:**
11342
11343| 参数名   | 类型   | 必填 | 说明                         |
11344| -------- | ------ | ---- | ---------------------------- |
11345| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
11346| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
11347| username | string | 是   | 用户名。                     |
11348| password | string | 是   | 密码。                       |
11349
11350**错误码:**
11351
11352以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11353
11354| 错误码ID | 错误信息                                                |
11355| -------- | ------------------------------------------------------ |
11356| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11357
11358**示例:**
11359
11360```ts
11361// xxx.ets
11362import { webview } from '@kit.ArkWeb';
11363import { BusinessError } from '@kit.BasicServicesKit';
11364
11365@Entry
11366@Component
11367struct WebComponent {
11368  controller: webview.WebviewController = new webview.WebviewController();
11369  host: string = "www.spincast.org";
11370  realm: string = "protected example";
11371
11372  build() {
11373    Column() {
11374      Button('saveHttpAuthCredentials')
11375        .onClick(() => {
11376          try {
11377            webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
11378          } catch (error) {
11379            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11380          }
11381        })
11382      Web({ src: 'www.example.com', controller: this.controller })
11383    }
11384  }
11385}
11386```
11387
11388### existHttpAuthCredentials
11389
11390static existHttpAuthCredentials(): boolean
11391
11392判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
11393
11394**系统能力:** SystemCapability.Web.Webview.Core
11395
11396**返回值:**
11397
11398| 类型    | 说明                                                         |
11399| ------- | ------------------------------------------------------------ |
11400| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
11401
11402**示例:**
11403
11404```ts
11405// xxx.ets
11406import { webview } from '@kit.ArkWeb';
11407import { BusinessError } from '@kit.BasicServicesKit';
11408
11409@Entry
11410@Component
11411struct WebComponent {
11412  controller: webview.WebviewController = new webview.WebviewController();
11413
11414  build() {
11415    Column() {
11416      Button('existHttpAuthCredentials')
11417        .onClick(() => {
11418          try {
11419            let result = webview.WebDataBase.existHttpAuthCredentials();
11420          } catch (error) {
11421            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11422          }
11423        })
11424      Web({ src: 'www.example.com', controller: this.controller })
11425    }
11426  }
11427}
11428```
11429
11430### deleteHttpAuthCredentials
11431
11432static deleteHttpAuthCredentials(): void
11433
11434清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
11435
11436**系统能力:** SystemCapability.Web.Webview.Core
11437
11438**示例:**
11439
11440```ts
11441// xxx.ets
11442import { webview } from '@kit.ArkWeb';
11443import { BusinessError } from '@kit.BasicServicesKit';
11444
11445@Entry
11446@Component
11447struct WebComponent {
11448  controller: webview.WebviewController = new webview.WebviewController();
11449
11450  build() {
11451    Column() {
11452      Button('deleteHttpAuthCredentials')
11453        .onClick(() => {
11454          try {
11455            webview.WebDataBase.deleteHttpAuthCredentials();
11456          } catch (error) {
11457            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11458          }
11459        })
11460      Web({ src: 'www.example.com', controller: this.controller })
11461    }
11462  }
11463}
11464```
11465
11466## GeolocationPermissions
11467
11468Web组件地理位置权限管理对象。
11469
11470> **说明:**
11471>
11472> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
11473
11474### 需要权限
11475
11476访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。
11477
11478### allowGeolocation
11479
11480static allowGeolocation(origin: string, incognito?: boolean): void
11481
11482允许指定来源使用地理位置接口。
11483
11484**系统能力:** SystemCapability.Web.Webview.Core
11485
11486**参数:**
11487
11488| 参数名 | 类型   | 必填 | 说明               |
11489| ------ | ------ | ---- | ------------------ |
11490| origin | string | 是   |指定源的字符串索引 |
11491| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 |
11492
11493**错误码:**
11494
11495以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11496
11497| 错误码ID | 错误信息                                               |
11498| -------- | ------------------------------------------------------ |
11499| 17100011 | Invalid origin.                             |
11500| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11501
11502**示例:**
11503
11504```ts
11505// xxx.ets
11506import { webview } from '@kit.ArkWeb';
11507import { BusinessError } from '@kit.BasicServicesKit';
11508
11509@Entry
11510@Component
11511struct WebComponent {
11512  controller: webview.WebviewController = new webview.WebviewController();
11513  origin: string = "file:///";
11514
11515  build() {
11516    Column() {
11517      Button('allowGeolocation')
11518        .onClick(() => {
11519          try {
11520            webview.GeolocationPermissions.allowGeolocation(this.origin);
11521          } catch (error) {
11522            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11523          }
11524        })
11525      Web({ src: 'www.example.com', controller: this.controller })
11526    }
11527  }
11528}
11529```
11530
11531### deleteGeolocation
11532
11533static deleteGeolocation(origin: string, incognito?: boolean): void
11534
11535清除指定来源的地理位置权限状态。
11536
11537**系统能力:** SystemCapability.Web.Webview.Core
11538
11539**参数:**
11540
11541| 参数名 | 类型   | 必填 | 说明               |
11542| ------ | ------ | ---- | ------------------ |
11543| origin | string | 是   | 指定源的字符串索引 |
11544| incognito<sup>11+</sup>   | boolean | 否   | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 |
11545
11546**错误码:**
11547
11548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11549
11550| 错误码ID | 错误信息                                               |
11551| -------- | ------------------------------------------------------ |
11552| 17100011 | Invalid origin.                             |
11553| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11554
11555**示例:**
11556
11557```ts
11558// xxx.ets
11559import { webview } from '@kit.ArkWeb';
11560import { BusinessError } from '@kit.BasicServicesKit';
11561
11562@Entry
11563@Component
11564struct WebComponent {
11565  controller: webview.WebviewController = new webview.WebviewController();
11566  origin: string = "file:///";
11567
11568  build() {
11569    Column() {
11570      Button('deleteGeolocation')
11571        .onClick(() => {
11572          try {
11573            webview.GeolocationPermissions.deleteGeolocation(this.origin);
11574          } catch (error) {
11575            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11576          }
11577        })
11578      Web({ src: 'www.example.com', controller: this.controller })
11579    }
11580  }
11581}
11582```
11583
11584### getAccessibleGeolocation
11585
11586static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void
11587
11588以回调方式异步获取指定源的地理位置权限状态。
11589
11590**系统能力:** SystemCapability.Web.Webview.Core
11591
11592**参数:**
11593
11594| 参数名   | 类型                   | 必填 | 说明                                                         |
11595| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
11596| origin   | string                 | 是   | 指定源的字符串索引                                           |
11597| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11598| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 |
11599
11600**错误码:**
11601
11602以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11603
11604| 错误码ID | 错误信息                                               |
11605| -------- | ------------------------------------------------------ |
11606| 17100011 | Invalid origin.                             |
11607| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11608
11609**示例:**
11610
11611```ts
11612// xxx.ets
11613import { webview } from '@kit.ArkWeb';
11614import { BusinessError } from '@kit.BasicServicesKit';
11615
11616@Entry
11617@Component
11618struct WebComponent {
11619  controller: webview.WebviewController = new webview.WebviewController();
11620  origin: string = "file:///";
11621
11622  build() {
11623    Column() {
11624      Button('getAccessibleGeolocation')
11625        .onClick(() => {
11626          try {
11627            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
11628              if (error) {
11629                console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11630                return;
11631              }
11632              console.log('getAccessibleGeolocationAsync result: ' + result);
11633            });
11634          } catch (error) {
11635            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11636          }
11637        })
11638      Web({ src: 'www.example.com', controller: this.controller })
11639    }
11640  }
11641}
11642```
11643
11644### getAccessibleGeolocation
11645
11646static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean>
11647
11648以Promise方式异步获取指定源的地理位置权限状态。
11649
11650**系统能力:** SystemCapability.Web.Webview.Core
11651
11652**参数:**
11653
11654| 参数名 | 类型 | 必填 | 说明             |
11655| ------ | -------- | ---- | -------------------- |
11656| origin | string   | 是   | 指定源的字符串索引。 |
11657| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 |
11658
11659**返回值:**
11660
11661| 类型             | 说明                                                         |
11662| ---------------- | ------------------------------------------------------------ |
11663| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11664
11665**错误码:**
11666
11667以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11668
11669| 错误码ID | 错误信息                                               |
11670| -------- | ------------------------------------------------------ |
11671| 17100011 | Invalid origin.                             |
11672| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11673
11674**示例:**
11675
11676```ts
11677// xxx.ets
11678import { webview } from '@kit.ArkWeb';
11679import { BusinessError } from '@kit.BasicServicesKit';
11680
11681@Entry
11682@Component
11683struct WebComponent {
11684  controller: webview.WebviewController = new webview.WebviewController();
11685  origin: string = "file:///";
11686
11687  build() {
11688    Column() {
11689      Button('getAccessibleGeolocation')
11690        .onClick(() => {
11691          try {
11692            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
11693              .then(result => {
11694                console.log('getAccessibleGeolocationPromise result: ' + result);
11695              }).catch((error: BusinessError) => {
11696              console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11697            });
11698          } catch (error) {
11699            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11700          }
11701        })
11702      Web({ src: 'www.example.com', controller: this.controller })
11703    }
11704  }
11705}
11706```
11707
11708### getStoredGeolocation
11709
11710static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void
11711
11712以回调方式异步获取已存储地理位置权限状态的所有源信息。
11713
11714**系统能力:** SystemCapability.Web.Webview.Core
11715
11716**参数:**
11717
11718| 参数名   | 类型                         | 必填 | 说明                                     |
11719| -------- | ---------------------------- | ---- | ---------------------------------------- |
11720| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
11721| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 |
11722
11723**错误码:**
11724
11725以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11726
11727| 错误码ID | 错误信息                                                |
11728| -------- | ------------------------------------------------------ |
11729| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11730
11731**示例:**
11732
11733```ts
11734// xxx.ets
11735import { webview } from '@kit.ArkWeb';
11736import { BusinessError } from '@kit.BasicServicesKit';
11737
11738@Entry
11739@Component
11740struct WebComponent {
11741  controller: webview.WebviewController = new webview.WebviewController();
11742
11743  build() {
11744    Column() {
11745      Button('getStoredGeolocation')
11746        .onClick(() => {
11747          try {
11748            webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
11749              if (error) {
11750                console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11751                return;
11752              }
11753              let origins_str: string = origins.join();
11754              console.log('getStoredGeolocationAsync origins: ' + origins_str);
11755            });
11756          } catch (error) {
11757            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11758          }
11759        })
11760      Web({ src: 'www.example.com', controller: this.controller })
11761    }
11762  }
11763}
11764```
11765
11766### getStoredGeolocation
11767
11768static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>>
11769
11770以Promise方式异步获取已存储地理位置权限状态的所有源信息。
11771
11772**系统能力:** SystemCapability.Web.Webview.Core
11773
11774**参数:**
11775
11776| 参数名   | 类型                         | 必填 | 说明                                     |
11777| -------- | ---------------------------- | ---- | ---------------------------------------- |
11778| incognito<sup>11+</sup>   | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 |
11779
11780**返回值:**
11781
11782| 类型                   | 说明                                                      |
11783| ---------------------- | --------------------------------------------------------- |
11784| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
11785
11786**错误码:**
11787
11788以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11789
11790| 错误码ID | 错误信息                                                |
11791| -------- | ------------------------------------------------------ |
11792| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11793
11794**示例:**
11795
11796```ts
11797// xxx.ets
11798import { webview } from '@kit.ArkWeb';
11799import { BusinessError } from '@kit.BasicServicesKit';
11800
11801@Entry
11802@Component
11803struct WebComponent {
11804  controller: webview.WebviewController = new webview.WebviewController();
11805
11806  build() {
11807    Column() {
11808      Button('getStoredGeolocation')
11809        .onClick(() => {
11810          try {
11811            webview.GeolocationPermissions.getStoredGeolocation()
11812              .then(origins => {
11813                let origins_str: string = origins.join();
11814                console.log('getStoredGeolocationPromise origins: ' + origins_str);
11815              }).catch((error: BusinessError) => {
11816              console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11817            });
11818          } catch (error) {
11819            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11820          }
11821        })
11822      Web({ src: 'www.example.com', controller: this.controller })
11823    }
11824  }
11825}
11826```
11827
11828### deleteAllGeolocation
11829
11830static deleteAllGeolocation(incognito?: boolean): void
11831
11832清除所有来源的地理位置权限状态。
11833
11834**系统能力:** SystemCapability.Web.Webview.Core
11835
11836**参数:**
11837
11838| 参数名   | 类型                         | 必填 | 说明                                     |
11839| -------- | ---------------------------- | ---- | ---------------------------------------- |
11840| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 |
11841
11842**示例:**
11843
11844```ts
11845// xxx.ets
11846import { webview } from '@kit.ArkWeb';
11847import { BusinessError } from '@kit.BasicServicesKit';
11848
11849@Entry
11850@Component
11851struct WebComponent {
11852  controller: webview.WebviewController = new webview.WebviewController();
11853
11854  build() {
11855    Column() {
11856      Button('deleteAllGeolocation')
11857        .onClick(() => {
11858          try {
11859            webview.GeolocationPermissions.deleteAllGeolocation();
11860          } catch (error) {
11861            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11862          }
11863        })
11864      Web({ src: 'www.example.com', controller: this.controller })
11865    }
11866  }
11867}
11868```
11869## WebHeader
11870
11871Web组件返回的请求/响应头对象。
11872
11873**系统能力:** SystemCapability.Web.Webview.Core
11874
11875| 名称        | 类型   | 可读 | 可写 |说明                 |
11876| ----------- | ------ | -----|------|------------------- |
11877| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
11878| headerValue | string | 是 | 是 | 请求/响应头的value。 |
11879
11880## RequestInfo<sup>12+</sup>
11881
11882Web组件发送的资源请求信息。
11883
11884**系统能力:**: SystemCapability.Web.Webview.Core
11885
11886| 名称      | 类型   | 可读 | 可写 |说明        |
11887| ---------| ------ | -----|------|--------  |
11888| url      | string | 是 | 是 | 请求的链接。    |
11889| method   | string | 是 | 是 | 请求的方法。    |
11890| formData | string | 是 | 是 | 请求的表单数据。 |
11891
11892## WebHitTestType
11893
11894[getLastHitTest](#getlasthittest18)接口用于指示游标节点。
11895
11896**系统能力:** SystemCapability.Web.Webview.Core
11897
11898| 名称          | 值 | 说明                                      |
11899| ------------- | -- |----------------------------------------- |
11900| EditText      | 0 |可编辑的区域。                            |
11901| Email         | 1 |电子邮件地址。                            |
11902| HttpAnchor    | 2 |超链接,其中src为http。                     |
11903| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 |
11904| Img           | 4 |HTML::img标签。                           |
11905| Map           | 5 |地理地址。                                |
11906| Phone         | 6 |电话号码。                                |
11907| Unknown       | 7 |未知内容。                                |
11908
11909## SecurityLevel<sup>11+</sup>
11910
11911当前网页的安全级别。
11912
11913**系统能力:** SystemCapability.Web.Webview.Core
11914
11915| 名称          | 值 | 说明                                      |
11916| ------------- | -- |----------------------------------------- |
11917| NONE          | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。|
11918| SECURE        | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。|
11919| WARNING       | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。|
11920| DANGEROUS     | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 |
11921
11922##  HitTestValue
11923
11924提供点击区域的元素信息。示例代码参考[getLastHitTest](#getlasthittest18)。
11925
11926**系统能力:** SystemCapability.Web.Webview.Core
11927
11928| 名称 | 类型 | 可读 | 可写 | 说明|
11929| ---- | ---- | ---- | ---- |---- |
11930| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。|
11931| extra | string        | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
11932
11933## WebMessage
11934
11935type WebMessage = ArrayBuffer | string
11936
11937用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
11938
11939**系统能力:** SystemCapability.Web.Webview.Core
11940
11941| 类型       | 说明                                     |
11942| -------- | -------------------------------------- |
11943| string   | 字符串类型数据。 |
11944| ArrayBuffer   | 二进制类型数据。 |
11945
11946## JsMessageType<sup>10+</sup>
11947
11948[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
11949
11950**系统能力:** SystemCapability.Web.Webview.Core
11951
11952| 名称         | 值 | 说明                              |
11953| ------------ | -- |--------------------------------- |
11954| NOT_SUPPORT  | 0 |不支持的数据类型。|
11955| STRING       | 1 |字符串类型。|
11956| NUMBER       | 2 |数值类型。|
11957| BOOLEAN      | 3 |布尔类型。|
11958| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11959| ARRAY        | 5 |数组类型|
11960
11961## WebMessageType<sup>10+</sup>
11962
11963[webMessagePort](#webmessageport)接口所支持的数据类型。
11964
11965**系统能力:** SystemCapability.Web.Webview.Core
11966
11967| 名称         | 值 | 说明                            |
11968| ------------ | -- |------------------------------- |
11969| NOT_SUPPORT  | 0 |不支持的数据类型。|
11970| STRING       | 1 |字符串类型。|
11971| NUMBER       | 2 |数值类型。|
11972| BOOLEAN      | 3 |布尔类型。|
11973| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11974| ARRAY        | 5 |数组类型。|
11975| ERROR        | 6 |错误类型。|
11976
11977## MediaPlaybackState<sup>12+</sup>
11978
11979当前网页的播控状态。
11980
11981**系统能力:** SystemCapability.Web.Webview.Core
11982
11983| 名称    | 值   | 说明               |
11984| ------- | ---- | ------------------ |
11985| NONE    | 0    | 页面无音视频启播。 |
11986| PLAYING | 1    | 页面音视频播放中。 |
11987| PAUSED  | 2    | 页面音视频暂停。   |
11988| STOPPED | 3    | 页面音视频停止。   |
11989
11990## RenderProcessMode<sup>12+</sup>
11991
11992ArkWeb渲染子进程模式类型。
11993
11994**系统能力:** SystemCapability.Web.Webview.Core
11995
11996| 名称          | 值 | 说明                                      |
11997| ------------- | -- |----------------------------------------- |
11998| SINGLE        | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。|
11999| MULTIPLE      | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。|
12000
12001
12002## JsMessageExt<sup>10+</sup>
12003
12004[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
12005
12006### getType<sup>10+</sup>
12007
12008getType(): JsMessageType
12009
12010获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12011
12012**系统能力:** SystemCapability.Web.Webview.Core
12013
12014**返回值:**
12015
12016| 类型           | 说明                                                      |
12017| --------------| --------------------------------------------------------- |
12018| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
12019
12020### getString<sup>10+</sup>
12021
12022getString(): string
12023
12024获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12025
12026**系统能力:** SystemCapability.Web.Webview.Core
12027
12028**返回值:**
12029
12030| 类型           | 说明          |
12031| --------------| ------------- |
12032| string | 返回字符串类型的数据。 |
12033
12034**错误码:**
12035
12036以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12037
12038| 错误码ID | 错误信息                              |
12039| -------- | ------------------------------------- |
12040| 17100014 | The type and value of the message do not match. |
12041
12042### getNumber<sup>10+</sup>
12043
12044getNumber(): number
12045
12046获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12047
12048**系统能力:** SystemCapability.Web.Webview.Core
12049
12050**返回值:**
12051
12052| 类型           | 说明          |
12053| --------------| ------------- |
12054| number | 返回数值类型的数据。 |
12055
12056**错误码:**
12057
12058以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12059
12060| 错误码ID | 错误信息                              |
12061| -------- | ------------------------------------- |
12062| 17100014 | The type and value of the message do not match. |
12063
12064### getBoolean<sup>10+</sup>
12065
12066getBoolean(): boolean
12067
12068获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12069
12070**系统能力:** SystemCapability.Web.Webview.Core
12071
12072**返回值:**
12073
12074| 类型           | 说明          |
12075| --------------| ------------- |
12076| boolean | 返回布尔类型的数据。 |
12077
12078**错误码:**
12079
12080以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12081
12082| 错误码ID | 错误信息                              |
12083| -------- | ------------------------------------- |
12084| 17100014 | The type and value of the message do not match. |
12085
12086### getArrayBuffer<sup>10+</sup>
12087
12088getArrayBuffer(): ArrayBuffer
12089
12090获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12091
12092**系统能力:** SystemCapability.Web.Webview.Core
12093
12094**返回值:**
12095
12096| 类型           | 说明          |
12097| --------------| ------------- |
12098| ArrayBuffer | 返回原始二进制数据。 |
12099
12100**错误码:**
12101
12102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12103
12104| 错误码ID | 错误信息                              |
12105| -------- | ------------------------------------- |
12106| 17100014 | The type and value of the message do not match. |
12107
12108### getArray<sup>10+</sup>
12109
12110getArray(): Array\<string | number | boolean\>
12111
12112获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
12113
12114**系统能力:** SystemCapability.Web.Webview.Core
12115
12116**返回值:**
12117
12118| 类型           | 说明          |
12119| --------------| ------------- |
12120| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
12121
12122**错误码:**
12123
12124以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12125
12126| 错误码ID | 错误信息                              |
12127| -------- | ------------------------------------- |
12128| 17100014 | The type and value of the message do not match. |
12129
12130## WebMessageExt<sup>10+</sup>
12131
12132[webMessagePort](#webmessageport)接口接收、发送的数据对象。
12133
12134### getType<sup>10+</sup>
12135
12136getType(): WebMessageType
12137
12138获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12139
12140**系统能力:** SystemCapability.Web.Webview.Core
12141
12142**返回值:**
12143
12144| 类型           | 说明                                                      |
12145| --------------| --------------------------------------------------------- |
12146| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
12147
12148### getString<sup>10+</sup>
12149
12150getString(): string
12151
12152获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12153
12154**系统能力:** SystemCapability.Web.Webview.Core
12155
12156**返回值:**
12157
12158| 类型           | 说明          |
12159| --------------| ------------- |
12160| string | 返回字符串类型的数据。 |
12161
12162**错误码:**
12163
12164以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12165
12166| 错误码ID | 错误信息                              |
12167| -------- | ------------------------------------- |
12168| 17100014 | The type and value of the message do not match. |
12169
12170### getNumber<sup>10+</sup>
12171
12172getNumber(): number
12173
12174获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12175
12176**系统能力:** SystemCapability.Web.Webview.Core
12177
12178**返回值:**
12179
12180| 类型           | 说明          |
12181| --------------| ------------- |
12182| number | 返回数值类型的数据。 |
12183
12184**错误码:**
12185
12186以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12187
12188| 错误码ID | 错误信息                              |
12189| -------- | ------------------------------------- |
12190| 17100014 | The type and value of the message do not match. |
12191
12192### getBoolean<sup>10+</sup>
12193
12194getBoolean(): boolean
12195
12196获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12197
12198**系统能力:** SystemCapability.Web.Webview.Core
12199
12200**返回值:**
12201
12202| 类型           | 说明          |
12203| --------------| ------------- |
12204| boolean | 返回布尔类型的数据。 |
12205
12206**错误码:**
12207
12208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12209
12210| 错误码ID | 错误信息                              |
12211| -------- | ------------------------------------- |
12212| 17100014 | The type and value of the message do not match. |
12213
12214### getArrayBuffer<sup>10+</sup>
12215
12216getArrayBuffer(): ArrayBuffer
12217
12218获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12219
12220**系统能力:** SystemCapability.Web.Webview.Core
12221
12222**返回值:**
12223
12224| 类型           | 说明          |
12225| --------------| ------------- |
12226| ArrayBuffer | 返回原始二进制数据。 |
12227
12228**错误码:**
12229
12230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12231
12232| 错误码ID | 错误信息                              |
12233| -------- | ------------------------------------- |
12234| 17100014 | The type and value of the message do not match. |
12235
12236### getArray<sup>10+</sup>
12237
12238getArray(): Array\<string | number | boolean\>
12239
12240获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12241
12242**系统能力:** SystemCapability.Web.Webview.Core
12243
12244**返回值:**
12245
12246| 类型           | 说明          |
12247| --------------| ------------- |
12248| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
12249
12250**错误码:**
12251
12252以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12253
12254| 错误码ID | 错误信息                              |
12255| -------- | ------------------------------------- |
12256| 17100014 | The type and value of the message do not match. |
12257
12258### getError<sup>10+</sup>
12259
12260getError(): Error
12261
12262获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12263
12264**系统能力:** SystemCapability.Web.Webview.Core
12265
12266**返回值:**
12267
12268| 类型           | 说明          |
12269| --------------| ------------- |
12270| Error | 返回错误对象类型的数据。 |
12271
12272**错误码:**
12273
12274以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12275
12276| 错误码ID | 错误信息                              |
12277| -------- | ------------------------------------- |
12278| 17100014 | The type and value of the message do not match. |
12279
12280### setType<sup>10+</sup>
12281
12282setType(type: WebMessageType): void
12283
12284设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12285
12286**系统能力:** SystemCapability.Web.Webview.Core
12287
12288**参数:**
12289
12290| 参数名 | 类型   | 必填 | 说明                   |
12291| ------ | ------ | ---- | ---------------------- |
12292| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
12293
12294**错误码:**
12295
12296| 错误码ID | 错误信息                              |
12297| -------- | ------------------------------------- |
12298| 17100014 | The type and value of the message do not match. |
12299| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12300
12301### setString<sup>10+</sup>
12302
12303setString(message: string): void
12304
12305设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12306
12307**系统能力:** SystemCapability.Web.Webview.Core
12308
12309**参数:**
12310
12311| 参数名 | 类型   | 必填 | 说明                   |
12312| ------ | ------ | ---- | -------------------- |
12313| message  | string | 是   | 字符串类型数据。 |
12314
12315**错误码:**
12316
12317| 错误码ID | 错误信息                              |
12318| -------- | ------------------------------------- |
12319| 17100014 | The type and value of the message do not match. |
12320| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12321
12322### setNumber<sup>10+</sup>
12323
12324setNumber(message: number): void
12325
12326设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12327
12328**系统能力:** SystemCapability.Web.Webview.Core
12329
12330**参数:**
12331
12332| 参数名 | 类型   | 必填 | 说明                   |
12333| ------ | ------ | ---- | -------------------- |
12334| message  | number | 是   | 数值类型数据。 |
12335
12336**错误码:**
12337
12338| 错误码ID | 错误信息                              |
12339| -------- | ------------------------------------- |
12340| 17100014 | The type and value of the message do not match. |
12341| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12342
12343### setBoolean<sup>10+</sup>
12344
12345setBoolean(message: boolean): void
12346
12347设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12348
12349**系统能力:** SystemCapability.Web.Webview.Core
12350
12351**参数:**
12352
12353| 参数名 | 类型   | 必填 | 说明                   |
12354| ------ | ------ | ---- | -------------------- |
12355| message  | boolean | 是   | 布尔类型数据。 |
12356
12357**错误码:**
12358
12359| 错误码ID | 错误信息                              |
12360| -------- | ------------------------------------- |
12361| 17100014 | The type and value of the message do not match. |
12362| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12363
12364### setArrayBuffer<sup>10+</sup>
12365
12366setArrayBuffer(message: ArrayBuffer): void
12367
12368设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12369
12370**系统能力:** SystemCapability.Web.Webview.Core
12371
12372**参数:**
12373
12374| 参数名 | 类型   | 必填 | 说明                   |
12375| ------ | ------ | ---- | -------------------- |
12376| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
12377
12378**错误码:**
12379
12380以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12381
12382| 错误码ID | 错误信息                              |
12383| -------- | ------------------------------------- |
12384| 17100014 | The type and value of the message do not match. |
12385| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12386
12387### setArray<sup>10+</sup>
12388
12389setArray(message: Array\<string | number | boolean\>): void
12390
12391设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12392
12393**系统能力:** SystemCapability.Web.Webview.Core
12394
12395**参数:**
12396
12397| 参数名 | 类型   | 必填 | 说明                   |
12398| ------ | ------ | ---- | -------------------- |
12399| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
12400
12401**错误码:**
12402
12403以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12404
12405| 错误码ID | 错误信息                              |
12406| -------- | ------------------------------------- |
12407| 17100014 | The type and value of the message do not match. |
12408| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12409
12410### setError<sup>10+</sup>
12411
12412setError(message: Error): void
12413
12414设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12415
12416**系统能力:** SystemCapability.Web.Webview.Core
12417
12418**参数:**
12419
12420| 参数名 | 类型   | 必填 | 说明                   |
12421| ------ | ------ | ---- | -------------------- |
12422| message  | Error | 是   | 错误对象类型数据。 |
12423
12424**错误码:**
12425
12426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12427
12428| 错误码ID | 错误信息                              |
12429| -------- | ------------------------------------- |
12430| 17100014 | The type and value of the message do not match. |
12431| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12432
12433## WebStorageOrigin
12434
12435提供Web SQL数据库的使用信息。
12436
12437**系统能力:** SystemCapability.Web.Webview.Core
12438
12439| 名称   | 类型   | 可读 | 可写 | 说明 |
12440| ------ | ------ | ---- | ---- | ---- |
12441| origin | string | 是  | 是 | 指定源的字符串索引。 |
12442| usage  | number | 是  | 是 | 指定源的存储量。     |
12443| quota  | number | 是  | 是 | 指定源的存储配额。   |
12444
12445## BackForwardList
12446
12447当前Webview的历史信息列表。
12448
12449**系统能力:** SystemCapability.Web.Webview.Core
12450
12451| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
12452| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
12453| currentIndex | number | 是   | 是   | 当前在页面历史列表中的索引。                                 |
12454| size         | number | 是   | 是   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
12455
12456### getItemAtIndex
12457
12458getItemAtIndex(index: number): HistoryItem
12459
12460获取历史列表中指定索引的历史记录项信息。
12461
12462**系统能力:** SystemCapability.Web.Webview.Core
12463
12464**参数:**
12465
12466| 参数名 | 类型   | 必填 | 说明                   |
12467| ------ | ------ | ---- | ---------------------- |
12468| index  | number | 是   | 指定历史列表中的索引。 |
12469
12470**返回值:**
12471
12472| 类型                        | 说明         |
12473| --------------------------- | ------------ |
12474| [HistoryItem](#historyitem) | 历史记录项。 |
12475
12476**错误码:**
12477
12478以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12479
12480| 错误码ID | 错误信息                                                |
12481| -------- | ------------------------------------------------------ |
12482| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12483
12484**示例:**
12485
12486```ts
12487// xxx.ets
12488import { webview } from '@kit.ArkWeb';
12489import { BusinessError } from '@kit.BasicServicesKit';
12490import { image } from '@kit.ImageKit';
12491
12492@Entry
12493@Component
12494struct WebComponent {
12495  controller: webview.WebviewController = new webview.WebviewController();
12496  @State icon: image.PixelMap | undefined = undefined;
12497
12498  build() {
12499    Column() {
12500      Button('getBackForwardEntries')
12501        .onClick(() => {
12502          try {
12503            let list = this.controller.getBackForwardEntries();
12504            let historyItem = list.getItemAtIndex(list.currentIndex);
12505            console.log("HistoryItem: " + JSON.stringify(historyItem));
12506            this.icon = historyItem.icon;
12507          } catch (error) {
12508            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12509          }
12510        })
12511      Web({ src: 'www.example.com', controller: this.controller })
12512    }
12513  }
12514}
12515```
12516
12517## HistoryItem
12518
12519页面历史记录项。
12520
12521**系统能力:** SystemCapability.Web.Webview.Core
12522
12523| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
12524| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
12525| icon          | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
12526| historyUrl    | string                                 | 是   | 是   | 历史记录项的url地址。        |
12527| historyRawUrl | string                                 | 是   | 是   | 历史记录项的原始url地址。    |
12528| title         | string                                 | 是   | 是   | 历史记录项的标题。           |
12529
12530## WebCustomScheme
12531
12532自定义协议配置。
12533
12534**系统能力:** SystemCapability.Web.Webview.Core
12535
12536| 名称           | 类型       | 可读 | 可写 | 说明                         |
12537| -------------- | --------- | ---- | ---- | ---------------------------- |
12538| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。        |
12539| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。<br>true表示支持跨域请求,false表示不支持跨域请求。<br>默认值:true。    |
12540| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。<br>true表示支持fetch请求,false表示不支持fetch请求。<br>默认值:true。           |
12541| isStandard<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。<br>true表示设置了该选项的scheme将作为标准scheme进行处理,false表示设置了该选项的scheme不作为标准scheme进行处理。<br>默认值:true。           |
12542| isLocal<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与“file”协议相同的安全规则来处理。<br>true表示设置了该选项的scheme将使用与“file”协议相同的安全规则来处理,false表示设置了该选项的scheme不使用与“file”协议相同的安全规则来处理。<br>默认值:true。           |
12543| isDisplayIsolated<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。<br>true表示设置了该选项的scheme的内容只能从相同scheme的其他内容中显示或访问,false表示设置了该选项的scheme的内容不是只能从相同scheme的其他内容中显示或访问。<br>默认值:true。           |
12544| isSecure<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。true表示设置了该选项的scheme将使用与应用于“https”的安全规则相同的安全规则来处理,false表示设置了该选项的scheme不使用与应用于“https”的安全规则相同的安全规则来处理。<br>默认值:true。           |
12545| isCspBypassing<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。<br>true表示设置了该选项的scheme可以绕过内容安全策略(CSP)检查,false表示设置了该选项的scheme不可以绕过内容安全策略(CSP)检查。<br>默认值:true。<br>在大多数情况下,当设置isStandard为true时,不应设置此值。         |
12546| isCodeCacheSupported<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的js资源是否支持生成code cache。<br>true表示设置了该选项的scheme的js资源支持生成code,false表示设置了该选项的scheme的js资源不支持生成code。<br>默认值:false。         |
12547
12548## SecureDnsMode<sup>10+</sup>
12549
12550Web组件使用HTTPDNS的模式。
12551
12552**系统能力:** SystemCapability.Web.Webview.Core
12553
12554| 名称          | 值 | 说明                                      |
12555| ------------- | -- |----------------------------------------- |
12556| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
12557| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
12558| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|
12559
12560## WebDownloadState<sup>11+</sup>
12561
12562下载任务的状态。
12563
12564**系统能力:** SystemCapability.Web.Webview.Core
12565
12566| 名称          | 值 | 说明                                      |
12567| ------------- | -- |----------------------------------------- |
12568| IN_PROGRESS                                  | 0 |下载任务正在进行中。|
12569| COMPLETED                                 | 1 |下载任务已经完成。|
12570| CANCELED                          | 2 |下载任务已经被取消。|
12571| INTERRUPTED                          | 3 |下载任务被中断。|
12572| PENDING                          | 4 |下载任务等待开始。|
12573| PAUSED                          | 5 |下载任务已经被暂停。|
12574| UNKNOWN                          | 6 |下载任务未知状态。|
12575
12576## WebDownloadErrorCode<sup>11+</sup>
12577
12578下载任务的错误码。
12579
12580**系统能力:** SystemCapability.Web.Webview.Core
12581
12582| 名称          | 值 | 说明                                      |
12583| ------------- | -- |----------------------------------------- |
12584| ERROR_UNKNOWN                                  | 0 |未知的错误。|
12585| FILE_FAILED | 1 |  常规文件操作失败。|
12586| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。|
12587| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。|
12588| FILE_NAME_TOO_LONG | 5 | 文件名字过长。|
12589| FILE_TOO_LARGE | 6 | 文件太大。|
12590| FILE_TRANSIENT_ERROR | 10 |  出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。|
12591| FILE_BLOCKED | 11 |  由于某些本地策略,文件被阻止访问。|
12592| FILE_TOO_SHORT | 13 |  当尝试恢复下载时,发现文件不够长,可能该文件已不存在。|
12593| FILE_HASH_MISMATCH | 14 |  哈希不匹配。|
12594| FILE_SAME_AS_SOURCE | 15 |  文件已存在。|
12595| NETWORK_FAILED | 20 |  一般网络错误。|
12596| NETWORK_TIMEOUT | 21 | 网络超时。|
12597| NETWORK_DISCONNECTED | 22 | 网络断开连接。|
12598| NETWORK_SERVER_DOWN | 23 |  服务器关闭。|
12599| NETWORK_INVALID_REQUEST | 24 |  无效的网络请求,可能重定向到不支持的方案或无效的URL。|
12600| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。|
12601| SERVER_NO_RANGE | 31 |  服务器不支持范围请求。|
12602| SERVER_BAD_CONTENT | 33 |   服务器没有请求的数据。|
12603| SERVER_UNAUTHORIZED | 34 |  服务器不允许下载该文件。|
12604| SERVER_CERT_PROBLEM | 35 |  服务器证书错误。|
12605| SERVER_FORBIDDEN | 36 |  服务器访问被禁止。|
12606| SERVER_UNREACHABLE | 37 |  无法访问服务器。|
12607| SERVER_CONTENT_LENGTH_MISMATCH | 38 |  接收到的数据与内容长度不匹配。|
12608| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。|
12609| USER_CANCELED | 40 | 用户取消了下载。|
12610| USER_SHUTDOWN | 41 | 用户关闭了应用。|
12611| CRASH | 50 | 应用发生了崩溃。|
12612
12613## WebDownloadItem<sup>11+</sup>
12614
12615 表示下载任务,您可以使用此对象来操作相应的下载任务。
12616
12617> **说明:**
12618>
12619> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
12620
12621### getGuid<sup>11+</sup>
12622
12623getGuid(): string
12624
12625获取下载任务的唯一ID。
12626
12627**系统能力:** SystemCapability.Web.Webview.Core
12628
12629**返回值:**
12630
12631| 类型   | 说明                      |
12632| ------ | ------------------------- |
12633| string | 下载任务的唯一ID。 |
12634
12635**示例:**
12636
12637```ts
12638// xxx.ets
12639import { webview } from '@kit.ArkWeb';
12640import { BusinessError } from '@kit.BasicServicesKit';
12641
12642@Entry
12643@Component
12644struct WebComponent {
12645  controller: webview.WebviewController = new webview.WebviewController();
12646  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12647
12648  build() {
12649    Column() {
12650      Button('setDownloadDelegate')
12651        .onClick(() => {
12652          try {
12653            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12654              console.log("will start a download.");
12655              // 传入一个下载路径,并开始下载。
12656              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12657            })
12658            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12659              console.log("download update guid: " + webDownloadItem.getGuid());
12660            })
12661            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12662              console.log("download failed guid: " + webDownloadItem.getGuid());
12663            })
12664            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12665              console.log("download finish guid: " + webDownloadItem.getGuid());
12666            })
12667            this.controller.setDownloadDelegate(this.delegate);
12668          } catch (error) {
12669            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12670          }
12671        })
12672      Button('startDownload')
12673        .onClick(() => {
12674          try {
12675            this.controller.startDownload('https://www.example.com');
12676          } catch (error) {
12677            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12678          }
12679        })
12680      Web({ src: 'www.example.com', controller: this.controller })
12681    }
12682  }
12683}
12684```
12685
12686### getCurrentSpeed<sup>11+</sup>
12687
12688getCurrentSpeed(): number
12689
12690获取下载的速度,单位:字节每秒。
12691
12692**系统能力:** SystemCapability.Web.Webview.Core
12693
12694**返回值:**
12695
12696| 类型   | 说明                      |
12697| ------ | ------------------------- |
12698| number | 下载的速度(字节每秒)。 |
12699
12700**示例:**
12701
12702```ts
12703// xxx.ets
12704import { webview } from '@kit.ArkWeb';
12705import { BusinessError } from '@kit.BasicServicesKit';
12706
12707@Entry
12708@Component
12709struct WebComponent {
12710  controller: webview.WebviewController = new webview.WebviewController();
12711  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12712
12713  build() {
12714    Column() {
12715      Button('setDownloadDelegate')
12716        .onClick(() => {
12717          try {
12718            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12719              console.log("will start a download.");
12720              // 传入一个下载路径,并开始下载。
12721              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12722            })
12723            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12724              console.log("download update current speed: " + webDownloadItem.getCurrentSpeed());
12725            })
12726            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12727              console.log("download failed guid: " + webDownloadItem.getGuid());
12728            })
12729            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12730              console.log("download finish guid: " + webDownloadItem.getGuid());
12731            })
12732            this.controller.setDownloadDelegate(this.delegate);
12733          } catch (error) {
12734            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12735          }
12736        })
12737      Button('startDownload')
12738        .onClick(() => {
12739          try {
12740            this.controller.startDownload('https://www.example.com');
12741          } catch (error) {
12742            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12743          }
12744        })
12745      Web({ src: 'www.example.com', controller: this.controller })
12746    }
12747  }
12748}
12749```
12750
12751### getPercentComplete<sup>11+</sup>
12752
12753getPercentComplete(): number
12754
12755获取下载的进度,100代表下载完成。
12756
12757**系统能力:** SystemCapability.Web.Webview.Core
12758
12759**返回值:**
12760
12761| 类型   | 说明                      |
12762| ------ | ------------------------- |
12763| number | 下载完成的进度,100代表下载完成。 |
12764
12765**示例:**
12766
12767```ts
12768// xxx.ets
12769import { webview } from '@kit.ArkWeb';
12770import { BusinessError } from '@kit.BasicServicesKit';
12771
12772@Entry
12773@Component
12774struct WebComponent {
12775  controller: webview.WebviewController = new webview.WebviewController();
12776  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12777
12778  build() {
12779    Column() {
12780      Button('setDownloadDelegate')
12781        .onClick(() => {
12782          try {
12783            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12784              console.log("will start a download.");
12785              // 传入一个下载路径,并开始下载。
12786              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12787            })
12788            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12789              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12790            })
12791            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12792              console.log("download failed guid: " + webDownloadItem.getGuid());
12793            })
12794            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12795              console.log("download finish guid: " + webDownloadItem.getGuid());
12796            })
12797            this.controller.setDownloadDelegate(this.delegate);
12798          } catch (error) {
12799            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12800          }
12801        })
12802      Button('startDownload')
12803        .onClick(() => {
12804          try {
12805            this.controller.startDownload('https://www.example.com');
12806          } catch (error) {
12807            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12808          }
12809        })
12810      Web({ src: 'www.example.com', controller: this.controller })
12811    }
12812  }
12813}
12814```
12815
12816### getTotalBytes<sup>11+</sup>
12817
12818getTotalBytes(): number
12819
12820获取待下载文件的总长度。
12821
12822**系统能力:** SystemCapability.Web.Webview.Core
12823
12824**返回值:**
12825
12826| 类型   | 说明                      |
12827| ------ | ------------------------- |
12828| number | 待下载文件的总长度。 |
12829
12830**示例:**
12831
12832```ts
12833// xxx.ets
12834import { webview } from '@kit.ArkWeb';
12835import { BusinessError } from '@kit.BasicServicesKit';
12836
12837@Entry
12838@Component
12839struct WebComponent {
12840  controller: webview.WebviewController = new webview.WebviewController();
12841  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12842
12843  build() {
12844    Column() {
12845      Button('setDownloadDelegate')
12846        .onClick(() => {
12847          try {
12848            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12849              console.log("will start a download.");
12850              // 传入一个下载路径,并开始下载。
12851              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12852            })
12853            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12854              console.log("download update total bytes: " + webDownloadItem.getTotalBytes());
12855            })
12856            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12857              console.log("download failed guid: " + webDownloadItem.getGuid());
12858            })
12859            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12860              console.log("download finish guid: " + webDownloadItem.getGuid());
12861            })
12862            this.controller.setDownloadDelegate(this.delegate);
12863          } catch (error) {
12864            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12865          }
12866        })
12867      Button('startDownload')
12868        .onClick(() => {
12869          try {
12870            this.controller.startDownload('https://www.example.com');
12871          } catch (error) {
12872            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12873          }
12874        })
12875      Web({ src: 'www.example.com', controller: this.controller })
12876    }
12877  }
12878}
12879```
12880
12881### getState<sup>11+</sup>
12882
12883getState(): WebDownloadState
12884
12885获取下载的状态。
12886
12887**系统能力:** SystemCapability.Web.Webview.Core
12888
12889**返回值:**
12890
12891| 类型   | 说明                      |
12892| ------ | ------------------------- |
12893| [WebDownloadState](#webdownloadstate11) | 下载的状态。 |
12894
12895**示例:**
12896
12897```ts
12898// xxx.ets
12899import { webview } from '@kit.ArkWeb';
12900import { BusinessError } from '@kit.BasicServicesKit';
12901
12902@Entry
12903@Component
12904struct WebComponent {
12905  controller: webview.WebviewController = new webview.WebviewController();
12906  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12907
12908  build() {
12909    Column() {
12910      Button('setDownloadDelegate')
12911        .onClick(() => {
12912          try {
12913            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12914              console.log("will start a download.");
12915              // 传入一个下载路径,并开始下载。
12916              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12917            })
12918            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12919              console.log("download update download state: " + webDownloadItem.getState());
12920            })
12921            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12922              console.log("download failed guid: " + webDownloadItem.getGuid());
12923            })
12924            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12925              console.log("download finish guid: " + webDownloadItem.getGuid());
12926            })
12927            this.controller.setDownloadDelegate(this.delegate);
12928          } catch (error) {
12929            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12930          }
12931        })
12932      Button('startDownload')
12933        .onClick(() => {
12934          try {
12935            this.controller.startDownload('https://www.example.com');
12936          } catch (error) {
12937            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12938          }
12939        })
12940      Web({ src: 'www.example.com', controller: this.controller })
12941    }
12942  }
12943}
12944```
12945
12946### getLastErrorCode<sup>11+</sup>
12947
12948getLastErrorCode(): WebDownloadErrorCode
12949
12950获取下载的错误码。
12951
12952**系统能力:** SystemCapability.Web.Webview.Core
12953
12954**返回值:**
12955
12956| 类型   | 说明                      |
12957| ------ | ------------------------- |
12958| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 |
12959
12960**示例:**
12961
12962```ts
12963// xxx.ets
12964import { webview } from '@kit.ArkWeb';
12965import { BusinessError } from '@kit.BasicServicesKit';
12966
12967@Entry
12968@Component
12969struct WebComponent {
12970  controller: webview.WebviewController = new webview.WebviewController();
12971  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12972
12973  build() {
12974    Column() {
12975      Button('setDownloadDelegate')
12976        .onClick(() => {
12977          try {
12978            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12979              console.log("will start a download.");
12980              // 传入一个下载路径,并开始下载。
12981              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12982            })
12983            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12984              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12985            })
12986            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12987              console.log("download failed guid: " + webDownloadItem.getGuid());
12988              console.log("download error code: " + webDownloadItem.getLastErrorCode());
12989            })
12990            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12991              console.log("download finish guid: " + webDownloadItem.getGuid());
12992            })
12993            this.controller.setDownloadDelegate(this.delegate);
12994          } catch (error) {
12995            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12996          }
12997        })
12998      Button('startDownload')
12999        .onClick(() => {
13000          try {
13001            this.controller.startDownload('https://www.example.com');
13002          } catch (error) {
13003            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13004          }
13005        })
13006      Web({ src: 'www.example.com', controller: this.controller })
13007    }
13008  }
13009}
13010```
13011
13012### getMethod<sup>11+</sup>
13013
13014getMethod(): string
13015
13016获取下载任务的请求方式。
13017
13018**系统能力:** SystemCapability.Web.Webview.Core
13019
13020**返回值:**
13021
13022| 类型   | 说明                      |
13023| ------ | ------------------------- |
13024| string | 下载的请求方式。 |
13025
13026**示例:**
13027
13028```ts
13029// xxx.ets
13030import { webview } from '@kit.ArkWeb';
13031import { BusinessError } from '@kit.BasicServicesKit';
13032
13033@Entry
13034@Component
13035struct WebComponent {
13036  controller: webview.WebviewController = new webview.WebviewController();
13037  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13038
13039  build() {
13040    Column() {
13041      Button('setDownloadDelegate')
13042        .onClick(() => {
13043          try {
13044            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13045              console.log("will start a download, method:" + webDownloadItem.getMethod());
13046              // 传入一个下载路径,并开始下载。
13047              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13048            })
13049            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13050              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13051            })
13052            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13053              console.log("download failed guid: " + webDownloadItem.getGuid());
13054            })
13055            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13056              console.log("download finish guid: " + webDownloadItem.getGuid());
13057            })
13058            this.controller.setDownloadDelegate(this.delegate);
13059          } catch (error) {
13060            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13061          }
13062        })
13063      Button('startDownload')
13064        .onClick(() => {
13065          try {
13066            this.controller.startDownload('https://www.example.com');
13067          } catch (error) {
13068            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13069          }
13070        })
13071      Web({ src: 'www.example.com', controller: this.controller })
13072    }
13073  }
13074}
13075```
13076
13077### getMimeType<sup>11+</sup>
13078
13079getMimeType(): string
13080
13081获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
13082
13083**系统能力:** SystemCapability.Web.Webview.Core
13084
13085**返回值:**
13086
13087| 类型   | 说明                      |
13088| ------ | ------------------------- |
13089| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
13090
13091**示例:**
13092
13093```ts
13094// xxx.ets
13095import { webview } from '@kit.ArkWeb';
13096import { BusinessError } from '@kit.BasicServicesKit';
13097
13098@Entry
13099@Component
13100struct WebComponent {
13101  controller: webview.WebviewController = new webview.WebviewController();
13102  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13103
13104  build() {
13105    Column() {
13106      Button('setDownloadDelegate')
13107        .onClick(() => {
13108          try {
13109            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13110              console.log("will start a download, mime type:" + webDownloadItem.getMimeType());
13111              // 传入一个下载路径,并开始下载。
13112              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13113            })
13114            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13115              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13116            })
13117            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13118              console.log("download failed guid: " + webDownloadItem.getGuid());
13119            })
13120            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13121              console.log("download finish guid: " + webDownloadItem.getGuid());
13122            })
13123            this.controller.setDownloadDelegate(this.delegate);
13124          } catch (error) {
13125            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13126          }
13127        })
13128      Button('startDownload')
13129        .onClick(() => {
13130          try {
13131            this.controller.startDownload('https://www.example.com');
13132          } catch (error) {
13133            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13134          }
13135        })
13136      Web({ src: 'www.example.com', controller: this.controller })
13137    }
13138  }
13139}
13140```
13141
13142### getUrl<sup>11+</sup>
13143
13144getUrl(): string
13145
13146获取下载的请求地址。
13147
13148**系统能力:** SystemCapability.Web.Webview.Core
13149
13150**返回值:**
13151
13152| 类型   | 说明                      |
13153| ------ | ------------------------- |
13154| string | 下载的请求地址。 |
13155
13156**示例:**
13157
13158```ts
13159// xxx.ets
13160import { webview } from '@kit.ArkWeb';
13161import { BusinessError } from '@kit.BasicServicesKit';
13162
13163@Entry
13164@Component
13165struct WebComponent {
13166  controller: webview.WebviewController = new webview.WebviewController();
13167  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13168
13169  build() {
13170    Column() {
13171      Button('setDownloadDelegate')
13172        .onClick(() => {
13173          try {
13174            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13175              console.log("will start a download, url:" + webDownloadItem.getUrl());
13176              // 传入一个下载路径,并开始下载。
13177              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13178            })
13179            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13180              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13181            })
13182            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13183              console.log("download failed guid: " + webDownloadItem.getGuid());
13184            })
13185            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13186              console.log("download finish guid: " + webDownloadItem.getGuid());
13187            })
13188            this.controller.setDownloadDelegate(this.delegate);
13189          } catch (error) {
13190            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13191          }
13192        })
13193      Button('startDownload')
13194        .onClick(() => {
13195          try {
13196            this.controller.startDownload('https://www.example.com');
13197          } catch (error) {
13198            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13199          }
13200        })
13201      Web({ src: 'www.example.com', controller: this.controller })
13202    }
13203  }
13204}
13205```
13206
13207### getSuggestedFileName<sup>11+</sup>
13208
13209getSuggestedFileName(): string
13210
13211获取下载的建议文件名。
13212
13213**系统能力:** SystemCapability.Web.Webview.Core
13214
13215**返回值:**
13216
13217| 类型   | 说明                      |
13218| ------ | ------------------------- |
13219| string | 下载的建议文件名。 |
13220
13221**示例:**
13222
13223```ts
13224// xxx.ets
13225import { webview } from '@kit.ArkWeb';
13226import { BusinessError } from '@kit.BasicServicesKit';
13227
13228@Entry
13229@Component
13230struct WebComponent {
13231  controller: webview.WebviewController = new webview.WebviewController();
13232  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13233
13234  build() {
13235    Column() {
13236      Button('setDownloadDelegate')
13237        .onClick(() => {
13238          try {
13239            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13240              console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
13241              // 传入一个下载路径,并开始下载。
13242              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13243            })
13244            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13245              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13246            })
13247            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13248              console.log("download failed guid: " + webDownloadItem.getGuid());
13249            })
13250            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13251              console.log("download finish guid: " + webDownloadItem.getGuid());
13252            })
13253            this.controller.setDownloadDelegate(this.delegate);
13254          } catch (error) {
13255            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13256          }
13257        })
13258      Button('startDownload')
13259        .onClick(() => {
13260          try {
13261            this.controller.startDownload('https://www.example.com');
13262          } catch (error) {
13263            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13264          }
13265        })
13266      Web({ src: 'www.example.com', controller: this.controller })
13267    }
13268  }
13269}
13270```
13271
13272### getReceivedBytes<sup>11+</sup>
13273
13274getReceivedBytes(): number
13275
13276获取已经接收的字节数。
13277
13278**系统能力:** SystemCapability.Web.Webview.Core
13279
13280**返回值:**
13281
13282| 类型   | 说明                      |
13283| ------ | ------------------------- |
13284| number | 已经接收的字节数。 |
13285
13286**示例:**
13287
13288```ts
13289// xxx.ets
13290import { webview } from '@kit.ArkWeb';
13291import { BusinessError } from '@kit.BasicServicesKit';
13292
13293@Entry
13294@Component
13295struct WebComponent {
13296  controller: webview.WebviewController = new webview.WebviewController();
13297  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13298
13299  build() {
13300    Column() {
13301      Button('setDownloadDelegate')
13302        .onClick(() => {
13303          try {
13304            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13305              console.log("will start a download.");
13306              // 传入一个下载路径,并开始下载。
13307              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13308            })
13309            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13310              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13311              console.log("download update received bytes: " + webDownloadItem.getReceivedBytes());
13312            })
13313            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13314              console.log("download failed guid: " + webDownloadItem.getGuid());
13315            })
13316            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13317              console.log("download finish guid: " + webDownloadItem.getGuid());
13318            })
13319            this.controller.setDownloadDelegate(this.delegate);
13320          } catch (error) {
13321            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13322          }
13323        })
13324      Button('startDownload')
13325        .onClick(() => {
13326          try {
13327            this.controller.startDownload('https://www.example.com');
13328          } catch (error) {
13329            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13330          }
13331        })
13332      Web({ src: 'www.example.com', controller: this.controller })
13333    }
13334  }
13335}
13336```
13337
13338### getFullPath<sup>11+</sup>
13339
13340getFullPath(): string
13341
13342获取下载文件在磁盘上的全路径。
13343
13344**系统能力:** SystemCapability.Web.Webview.Core
13345
13346**返回值:**
13347
13348| 类型   | 说明                      |
13349| ------ | ------------------------- |
13350| string | 下载文件在磁盘上的全路径。 |
13351
13352**示例:**
13353
13354```ts
13355// xxx.ets
13356import { webview } from '@kit.ArkWeb';
13357import { BusinessError } from '@kit.BasicServicesKit';
13358
13359@Entry
13360@Component
13361struct WebComponent {
13362  controller: webview.WebviewController = new webview.WebviewController();
13363  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13364
13365  build() {
13366    Column() {
13367      Button('setDownloadDelegate')
13368        .onClick(() => {
13369          try {
13370            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13371              console.log("will start a download.");
13372              // 传入一个下载路径,并开始下载。
13373              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13374            })
13375            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13376              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13377            })
13378            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13379              console.log("download failed guid: " + webDownloadItem.getGuid());
13380            })
13381            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13382              console.log("download finish guid: " + webDownloadItem.getGuid());
13383              console.log("download finish full path: " + webDownloadItem.getFullPath());
13384            })
13385            this.controller.setDownloadDelegate(this.delegate);
13386          } catch (error) {
13387            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13388          }
13389        })
13390      Button('startDownload')
13391        .onClick(() => {
13392          try {
13393            this.controller.startDownload('https://www.example.com');
13394          } catch (error) {
13395            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13396          }
13397        })
13398      Web({ src: 'www.example.com', controller: this.controller })
13399    }
13400  }
13401}
13402```
13403
13404### serialize<sup>11+</sup>
13405
13406serialize(): Uint8Array
13407
13408将失败的下载序列化到一个字节数组。
13409
13410**系统能力:** SystemCapability.Web.Webview.Core
13411
13412**返回值:**
13413
13414| 类型   | 说明                      |
13415| ------ | ------------------------- |
13416| Uint8Array | 失败的下载序列化后的字节数组。 |
13417
13418**示例:**
13419
13420```ts
13421// xxx.ets
13422import { webview } from '@kit.ArkWeb';
13423import { BusinessError } from '@kit.BasicServicesKit';
13424
13425@Entry
13426@Component
13427struct WebComponent {
13428  controller: webview.WebviewController = new webview.WebviewController();
13429  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13430  failedData: Uint8Array = new Uint8Array();
13431
13432  build() {
13433    Column() {
13434      Button('setDownloadDelegate')
13435        .onClick(() => {
13436          try {
13437            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13438              console.log("will start a download.");
13439              // 传入一个下载路径,并开始下载。
13440              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13441            })
13442            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13443              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13444            })
13445            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13446              console.log("download failed guid: " + webDownloadItem.getGuid());
13447              // 序列化失败的下载到一个字节数组。
13448              this.failedData = webDownloadItem.serialize();
13449            })
13450            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13451              console.log("download finish guid: " + webDownloadItem.getGuid());
13452            })
13453            this.controller.setDownloadDelegate(this.delegate);
13454          } catch (error) {
13455            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13456          }
13457        })
13458      Button('startDownload')
13459        .onClick(() => {
13460          try {
13461            this.controller.startDownload('https://www.example.com');
13462          } catch (error) {
13463            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13464          }
13465        })
13466      Web({ src: 'www.example.com', controller: this.controller })
13467    }
13468  }
13469}
13470```
13471
13472### deserialize<sup>11+</sup>
13473
13474static deserialize(serializedData: Uint8Array): WebDownloadItem
13475
13476将序列化后的字节数组反序列化为一个WebDownloadItem对象。
13477
13478**系统能力:** SystemCapability.Web.Webview.Core
13479
13480**参数:**
13481
13482| 参数名              | 类型    | 必填   |  说明 |
13483| ------------------ | ------- | ---- | ------------- |
13484| serializedData | Uint8Array | 是   | 序列化后的下载。|
13485
13486**返回值:**
13487
13488| 类型   | 说明                      |
13489| ------ | ------------------------- |
13490| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 |
13491
13492**错误码:**
13493
13494以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13495
13496| 错误码ID | 错误信息                                                     |
13497| -------- | ------------------------------------------------------------ |
13498| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13499
13500**示例:**
13501
13502```ts
13503// xxx.ets
13504import { webview } from '@kit.ArkWeb';
13505import { BusinessError } from '@kit.BasicServicesKit';
13506
13507@Entry
13508@Component
13509struct WebComponent {
13510  controller: webview.WebviewController = new webview.WebviewController();
13511  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13512  failedData: Uint8Array = new Uint8Array();
13513
13514  build() {
13515    Column() {
13516      Button('setDownloadDelegate')
13517        .onClick(() => {
13518          try {
13519            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13520              console.log("will start a download.");
13521              // 传入一个下载路径,并开始下载。
13522              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13523            })
13524            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13525              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13526            })
13527            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13528              console.log("download failed guid: " + webDownloadItem.getGuid());
13529              // 序列化失败的下载到一个字节数组。
13530              this.failedData = webDownloadItem.serialize();
13531            })
13532            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13533              console.log("download finish guid: " + webDownloadItem.getGuid());
13534            })
13535            this.controller.setDownloadDelegate(this.delegate);
13536          } catch (error) {
13537            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13538          }
13539        })
13540      Button('startDownload')
13541        .onClick(() => {
13542          try {
13543            this.controller.startDownload('https://www.example.com');
13544          } catch (error) {
13545            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13546          }
13547        })
13548      Button('resumeDownload')
13549        .onClick(() => {
13550          try {
13551            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13552          } catch (error) {
13553            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13554          }
13555        })
13556      Web({ src: 'www.example.com', controller: this.controller })
13557    }
13558  }
13559}
13560```
13561
13562### start<sup>11+</sup>
13563
13564start(downloadPath: string): void
13565
13566开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。
13567
13568> **说明:**
13569>
13570>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。
13571
13572**系统能力:** SystemCapability.Web.Webview.Core
13573
13574**参数:**
13575
13576| 参数名 | 类型                   | 必填 | 说明                             |
13577| ------ | ---------------------- | ---- | ------------------------------|
13578| downloadPath   | string     | 是  | 下载文件的路径(包含文件名),路径长度与文件管理中长度一致,最长255字符。|
13579
13580**错误码:**
13581
13582以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13583
13584| 错误码ID | 错误信息                                                     |
13585| -------- | ------------------------------------------------------------ |
13586| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13587
13588**示例:**
13589
13590```ts
13591// xxx.ets
13592import { webview } from '@kit.ArkWeb';
13593import { BusinessError } from '@kit.BasicServicesKit';
13594
13595@Entry
13596@Component
13597struct WebComponent {
13598  controller: webview.WebviewController = new webview.WebviewController();
13599  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13600  failedData: Uint8Array = new Uint8Array();
13601
13602  build() {
13603    Column() {
13604      Button('setDownloadDelegate')
13605        .onClick(() => {
13606          try {
13607            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13608              console.log("will start a download.");
13609              // 传入一个下载路径,并开始下载。
13610              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13611            })
13612            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13613              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13614            })
13615            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13616              console.log("download failed guid: " + webDownloadItem.getGuid());
13617              // 序列化失败的下载到一个字节数组。
13618              this.failedData = webDownloadItem.serialize();
13619            })
13620            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13621              console.log("download finish guid: " + webDownloadItem.getGuid());
13622            })
13623            this.controller.setDownloadDelegate(this.delegate);
13624          } catch (error) {
13625            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13626          }
13627        })
13628      Button('startDownload')
13629        .onClick(() => {
13630          try {
13631            this.controller.startDownload('https://www.example.com');
13632          } catch (error) {
13633            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13634          }
13635        })
13636      Button('resumeDownload')
13637        .onClick(() => {
13638          try {
13639            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13640          } catch (error) {
13641            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13642          }
13643        })
13644      Web({ src: 'www.example.com', controller: this.controller })
13645    }
13646  }
13647}
13648```
13649
13650### cancel<sup>11+</sup>
13651
13652cancel(): void
13653
13654取消一个正在下载的下载任务。
13655
13656**系统能力:** SystemCapability.Web.Webview.Core
13657
13658**示例:**
13659
13660```ts
13661// xxx.ets
13662import { webview } from '@kit.ArkWeb';
13663import { BusinessError } from '@kit.BasicServicesKit';
13664
13665@Entry
13666@Component
13667struct WebComponent {
13668  controller: webview.WebviewController = new webview.WebviewController();
13669  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13670  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13671  failedData: Uint8Array = new Uint8Array();
13672
13673  build() {
13674    Column() {
13675      Button('setDownloadDelegate')
13676        .onClick(() => {
13677          try {
13678            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13679              console.log("will start a download.");
13680              // 传入一个下载路径,并开始下载。
13681              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13682            })
13683            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13684              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13685              this.download = webDownloadItem;
13686            })
13687            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13688              console.log("download failed guid: " + webDownloadItem.getGuid());
13689              // 序列化失败的下载到一个字节数组。
13690              this.failedData = webDownloadItem.serialize();
13691            })
13692            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13693              console.log("download finish guid: " + webDownloadItem.getGuid());
13694            })
13695            this.controller.setDownloadDelegate(this.delegate);
13696          } catch (error) {
13697            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13698          }
13699        })
13700      Button('startDownload')
13701        .onClick(() => {
13702          try {
13703            this.controller.startDownload('https://www.example.com');
13704          } catch (error) {
13705            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13706          }
13707        })
13708      Button('resumeDownload')
13709        .onClick(() => {
13710          try {
13711            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13712          } catch (error) {
13713            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13714          }
13715        })
13716      Button('cancel')
13717        .onClick(() => {
13718          try {
13719            this.download.cancel();
13720          } catch (error) {
13721            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13722          }
13723        })
13724      Web({ src: 'www.example.com', controller: this.controller })
13725    }
13726  }
13727}
13728```
13729
13730### pause<sup>11+</sup>
13731
13732pause(): void
13733
13734暂停一个正在下载的下载任务。
13735
13736**系统能力:** SystemCapability.Web.Webview.Core
13737
13738**错误码:**
13739
13740以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13741
13742| 错误码ID  | 错误信息                                                      |
13743| -------- | ------------------------------------------------------------ |
13744| 17100019 | The download task is not started yet. |
13745
13746**示例:**
13747
13748```ts
13749// xxx.ets
13750import { webview } from '@kit.ArkWeb';
13751import { BusinessError } from '@kit.BasicServicesKit';
13752
13753@Entry
13754@Component
13755struct WebComponent {
13756  controller: webview.WebviewController = new webview.WebviewController();
13757  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13758  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13759  failedData: Uint8Array = new Uint8Array();
13760
13761  build() {
13762    Column() {
13763      Button('setDownloadDelegate')
13764        .onClick(() => {
13765          try {
13766            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13767              console.log("will start a download.");
13768              // 传入一个下载路径,并开始下载。
13769              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13770            })
13771            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13772              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13773              this.download = webDownloadItem;
13774            })
13775            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13776              console.log("download failed guid: " + webDownloadItem.getGuid());
13777              // 序列化失败的下载到一个字节数组。
13778              this.failedData = webDownloadItem.serialize();
13779            })
13780            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13781              console.log("download finish guid: " + webDownloadItem.getGuid());
13782            })
13783            this.controller.setDownloadDelegate(this.delegate);
13784          } catch (error) {
13785            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13786          }
13787        })
13788      Button('startDownload')
13789        .onClick(() => {
13790          try {
13791            this.controller.startDownload('https://www.example.com');
13792          } catch (error) {
13793            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13794          }
13795        })
13796      Button('resumeDownload')
13797        .onClick(() => {
13798          try {
13799            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13800          } catch (error) {
13801            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13802          }
13803        })
13804      Button('cancel')
13805        .onClick(() => {
13806          try {
13807            this.download.cancel();
13808          } catch (error) {
13809            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13810          }
13811        })
13812      Button('pause')
13813        .onClick(() => {
13814          try {
13815            this.download.pause();
13816          } catch (error) {
13817            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13818          }
13819        })
13820      Web({ src: 'www.example.com', controller: this.controller })
13821    }
13822  }
13823}
13824```
13825
13826### resume<sup>11+</sup>
13827
13828resume(): void
13829
13830恢复一个暂停的下载任务。
13831
13832**系统能力:** SystemCapability.Web.Webview.Core
13833
13834**错误码:**
13835
13836以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13837
13838| 错误码ID  | 错误信息                                                      |
13839| -------- | ------------------------------------------------------------ |
13840| 17100016 | The download task is not paused. |
13841
13842**示例:**
13843
13844```ts
13845// xxx.ets
13846import { webview } from '@kit.ArkWeb';
13847import { BusinessError } from '@kit.BasicServicesKit';
13848
13849@Entry
13850@Component
13851struct WebComponent {
13852  controller: webview.WebviewController = new webview.WebviewController();
13853  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13854  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13855  failedData: Uint8Array = new Uint8Array();
13856
13857  build() {
13858    Column() {
13859      Button('setDownloadDelegate')
13860        .onClick(() => {
13861          try {
13862            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13863              console.log("will start a download.");
13864              // 传入一个下载路径,并开始下载。
13865              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13866            })
13867            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13868              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13869              this.download = webDownloadItem;
13870            })
13871            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13872              console.log("download failed guid: " + webDownloadItem.getGuid());
13873              // 序列化失败的下载到一个字节数组。
13874              this.failedData = webDownloadItem.serialize();
13875            })
13876            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13877              console.log("download finish guid: " + webDownloadItem.getGuid());
13878            })
13879            this.controller.setDownloadDelegate(this.delegate);
13880          } catch (error) {
13881            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13882          }
13883        })
13884      Button('startDownload')
13885        .onClick(() => {
13886          try {
13887            this.controller.startDownload('https://www.example.com');
13888          } catch (error) {
13889            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13890          }
13891        })
13892      Button('resumeDownload')
13893        .onClick(() => {
13894          try {
13895            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13896          } catch (error) {
13897            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13898          }
13899        })
13900      Button('cancel')
13901        .onClick(() => {
13902          try {
13903            this.download.cancel();
13904          } catch (error) {
13905            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13906          }
13907        })
13908      Button('pause')
13909        .onClick(() => {
13910          try {
13911            this.download.pause();
13912          } catch (error) {
13913            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13914          }
13915        })
13916      Button('resume')
13917        .onClick(() => {
13918          try {
13919            this.download.resume();
13920          } catch (error) {
13921            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13922          }
13923        })
13924      Web({ src: 'www.example.com', controller: this.controller })
13925    }
13926  }
13927}
13928```
13929
13930## WebDownloadDelegate<sup>11+</sup>
13931
13932 下载任务的状态会通过该类的回调接口通知给用户。
13933
13934### onBeforeDownload<sup>11+</sup>
13935
13936onBeforeDownload(callback: Callback\<WebDownloadItem>): void
13937
13938下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。
13939
13940> **说明:**
13941>
13942>处于PENDING状态的下载任务会首先将文件保存至临时目录。在调用WebDownloadItem.start并指定目标路径后,临时文件将被重命名为目标文件名,未完成下载的部分会在调用WebDownloadItem.start并指定目标路径后直接下载到目标路径。若希望避免在调用WebDownloadItem.start前生成临时文件,可先通过WebDownloadItem.cancel来取消当前的下载任务,之后再使用WebDownloadManager.resumeDownload来恢复被取消的下载任务。
13943
13944**系统能力:** SystemCapability.Web.Webview.Core
13945
13946**参数:**
13947
13948| 参数名  | 类型   | 必填 | 说明           |
13949| ------- | ------ | ---- | :------------- |
13950| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 触发下载的回调。 |
13951
13952**示例:**
13953
13954```ts
13955// xxx.ets
13956import { webview } from '@kit.ArkWeb';
13957import { BusinessError } from '@kit.BasicServicesKit';
13958
13959@Entry
13960@Component
13961struct WebComponent {
13962  controller: webview.WebviewController = new webview.WebviewController();
13963  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13964  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13965  failedData: Uint8Array = new Uint8Array();
13966
13967  build() {
13968    Column() {
13969      Button('setDownloadDelegate')
13970        .onClick(() => {
13971          try {
13972            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13973              console.log("will start a download.");
13974              // 传入一个下载路径,并开始下载。
13975              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13976            })
13977            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13978              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13979              this.download = webDownloadItem;
13980            })
13981            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13982              console.log("download failed guid: " + webDownloadItem.getGuid());
13983              // 序列化失败的下载到一个字节数组。
13984              this.failedData = webDownloadItem.serialize();
13985            })
13986            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13987              console.log("download finish guid: " + webDownloadItem.getGuid());
13988            })
13989            this.controller.setDownloadDelegate(this.delegate);
13990          } catch (error) {
13991            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13992          }
13993        })
13994      Button('startDownload')
13995        .onClick(() => {
13996          try {
13997            this.controller.startDownload('https://www.example.com');
13998          } catch (error) {
13999            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14000          }
14001        })
14002      Button('resumeDownload')
14003        .onClick(() => {
14004          try {
14005            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14006          } catch (error) {
14007            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14008          }
14009        })
14010      Button('cancel')
14011        .onClick(() => {
14012          try {
14013            this.download.cancel();
14014          } catch (error) {
14015            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14016          }
14017        })
14018      Button('pause')
14019        .onClick(() => {
14020          try {
14021            this.download.pause();
14022          } catch (error) {
14023            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14024          }
14025        })
14026      Button('resume')
14027        .onClick(() => {
14028          try {
14029            this.download.resume();
14030          } catch (error) {
14031            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14032          }
14033        })
14034      Web({ src: 'www.example.com', controller: this.controller })
14035    }
14036  }
14037}
14038```
14039
14040### onDownloadUpdated<sup>11+</sup>
14041
14042onDownloadUpdated(callback: Callback\<WebDownloadItem>): void
14043
14044下载过程中的回调,通过该回调的参数可以了解下载进度等信息。
14045
14046**系统能力:** SystemCapability.Web.Webview.Core
14047
14048**参数:**
14049
14050| 参数名  | 类型   | 必填 | 说明           |
14051| ------- | ------ | ---- | :------------- |
14052| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已更新。 |
14053
14054**示例:**
14055
14056```ts
14057// xxx.ets
14058import { webview } from '@kit.ArkWeb';
14059import { BusinessError } from '@kit.BasicServicesKit';
14060
14061@Entry
14062@Component
14063struct WebComponent {
14064  controller: webview.WebviewController = new webview.WebviewController();
14065  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14066  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14067  failedData: Uint8Array = new Uint8Array();
14068
14069  build() {
14070    Column() {
14071      Button('setDownloadDelegate')
14072        .onClick(() => {
14073          try {
14074            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14075              console.log("will start a download.");
14076              // 传入一个下载路径,并开始下载。
14077              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14078            })
14079            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14080              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14081              this.download = webDownloadItem;
14082            })
14083            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14084              console.log("download failed guid: " + webDownloadItem.getGuid());
14085              // 序列化失败的下载到一个字节数组。
14086              this.failedData = webDownloadItem.serialize();
14087            })
14088            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14089              console.log("download finish guid: " + webDownloadItem.getGuid());
14090            })
14091            this.controller.setDownloadDelegate(this.delegate);
14092          } catch (error) {
14093            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14094          }
14095        })
14096      Button('startDownload')
14097        .onClick(() => {
14098          try {
14099            this.controller.startDownload('https://www.example.com');
14100          } catch (error) {
14101            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14102          }
14103        })
14104      Button('resumeDownload')
14105        .onClick(() => {
14106          try {
14107            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14108          } catch (error) {
14109            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14110          }
14111        })
14112      Button('cancel')
14113        .onClick(() => {
14114          try {
14115            this.download.cancel();
14116          } catch (error) {
14117            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14118          }
14119        })
14120      Button('pause')
14121        .onClick(() => {
14122          try {
14123            this.download.pause();
14124          } catch (error) {
14125            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14126          }
14127        })
14128      Button('resume')
14129        .onClick(() => {
14130          try {
14131            this.download.resume();
14132          } catch (error) {
14133            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14134          }
14135        })
14136      Web({ src: 'www.example.com', controller: this.controller })
14137    }
14138  }
14139}
14140```
14141
14142### onDownloadFinish<sup>11+</sup>
14143
14144onDownloadFinish(callback: Callback\<WebDownloadItem>): void
14145
14146下载完成的通知。
14147
14148**系统能力:** SystemCapability.Web.Webview.Core
14149
14150**参数:**
14151
14152| 参数名  | 类型   | 必填 | 说明           |
14153| ------- | ------ | ---- | :------------- |
14154| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已完成。 |
14155
14156**示例:**
14157
14158```ts
14159// xxx.ets
14160import { webview } from '@kit.ArkWeb';
14161import { BusinessError } from '@kit.BasicServicesKit';
14162
14163@Entry
14164@Component
14165struct WebComponent {
14166  controller: webview.WebviewController = new webview.WebviewController();
14167  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14168  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14169  failedData: Uint8Array = new Uint8Array();
14170
14171  build() {
14172    Column() {
14173      Button('setDownloadDelegate')
14174        .onClick(() => {
14175          try {
14176            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14177              console.log("will start a download.");
14178              // 传入一个下载路径,并开始下载。
14179              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14180            })
14181            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14182              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14183              this.download = webDownloadItem;
14184            })
14185            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14186              console.log("download failed guid: " + webDownloadItem.getGuid());
14187              // 序列化失败的下载到一个字节数组。
14188              this.failedData = webDownloadItem.serialize();
14189            })
14190            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14191              console.log("download finish guid: " + webDownloadItem.getGuid());
14192            })
14193            this.controller.setDownloadDelegate(this.delegate);
14194          } catch (error) {
14195            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14196          }
14197        })
14198      Button('startDownload')
14199        .onClick(() => {
14200          try {
14201            this.controller.startDownload('https://www.example.com');
14202          } catch (error) {
14203            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14204          }
14205        })
14206      Button('resumeDownload')
14207        .onClick(() => {
14208          try {
14209            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14210          } catch (error) {
14211            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14212          }
14213        })
14214      Button('cancel')
14215        .onClick(() => {
14216          try {
14217            this.download.cancel();
14218          } catch (error) {
14219            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14220          }
14221        })
14222      Button('pause')
14223        .onClick(() => {
14224          try {
14225            this.download.pause();
14226          } catch (error) {
14227            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14228          }
14229        })
14230      Button('resume')
14231        .onClick(() => {
14232          try {
14233            this.download.resume();
14234          } catch (error) {
14235            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14236          }
14237        })
14238      Web({ src: 'www.example.com', controller: this.controller })
14239    }
14240  }
14241}
14242```
14243
14244### onDownloadFailed<sup>11+</sup>
14245
14246onDownloadFailed(callback: Callback\<WebDownloadItem>): void
14247
14248下载失败的通知。
14249
14250**系统能力:** SystemCapability.Web.Webview.Core
14251
14252**参数:**
14253
14254| 参数名  | 类型   | 必填 | 说明           |
14255| ------- | ------ | ---- | :------------- |
14256| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载回调失败。 |
14257
14258**示例:**
14259
14260```ts
14261// xxx.ets
14262import { webview } from '@kit.ArkWeb';
14263import { BusinessError } from '@kit.BasicServicesKit';
14264
14265@Entry
14266@Component
14267struct WebComponent {
14268  controller: webview.WebviewController = new webview.WebviewController();
14269  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14270  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14271  failedData: Uint8Array = new Uint8Array();
14272
14273  build() {
14274    Column() {
14275      Button('setDownloadDelegate')
14276        .onClick(() => {
14277          try {
14278            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14279              console.log("will start a download.");
14280              // 传入一个下载路径,并开始下载。
14281              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14282            })
14283            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14284              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14285              this.download = webDownloadItem;
14286            })
14287            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14288              console.log("download failed guid: " + webDownloadItem.getGuid());
14289              // 序列化失败的下载到一个字节数组。
14290              this.failedData = webDownloadItem.serialize();
14291            })
14292            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14293              console.log("download finish guid: " + webDownloadItem.getGuid());
14294            })
14295            this.controller.setDownloadDelegate(this.delegate);
14296          } catch (error) {
14297            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14298          }
14299        })
14300      Button('startDownload')
14301        .onClick(() => {
14302          try {
14303            this.controller.startDownload('https://www.example.com');
14304          } catch (error) {
14305            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14306          }
14307        })
14308      Button('resumeDownload')
14309        .onClick(() => {
14310          try {
14311            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14312          } catch (error) {
14313            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14314          }
14315        })
14316      Button('cancel')
14317        .onClick(() => {
14318          try {
14319            this.download.cancel();
14320          } catch (error) {
14321            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14322          }
14323        })
14324      Button('pause')
14325        .onClick(() => {
14326          try {
14327            this.download.pause();
14328          } catch (error) {
14329            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14330          }
14331        })
14332      Button('resume')
14333        .onClick(() => {
14334          try {
14335            this.download.resume();
14336          } catch (error) {
14337            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14338          }
14339        })
14340      Web({ src: 'www.example.com', controller: this.controller })
14341    }
14342  }
14343}
14344```
14345
14346## WebDownloadManager<sup>11+</sup>
14347
14348可以通过该类提供的接口来恢复失败的下载任务。
14349
14350### setDownloadDelegate<sup>11+</sup>
14351
14352static setDownloadDelegate(delegate: WebDownloadDelegate): void
14353
14354设置用于接收从WebDownloadManager触发的下载进度的委托。
14355
14356**系统能力:** SystemCapability.Web.Webview.Core
14357
14358**参数:**
14359
14360| 参数名          | 类型    |  必填  | 说明                                            |
14361| ---------------| ------- | ---- | ------------- |
14362| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
14363
14364**示例:**
14365
14366```ts
14367// xxx.ets
14368import { webview } from '@kit.ArkWeb';
14369import { BusinessError } from '@kit.BasicServicesKit';
14370
14371@Entry
14372@Component
14373struct WebComponent {
14374  controller: webview.WebviewController = new webview.WebviewController();
14375  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14376  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14377  failedData: Uint8Array = new Uint8Array();
14378
14379  build() {
14380    Column() {
14381      Button('setDownloadDelegate')
14382        .onClick(() => {
14383          try {
14384            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14385              console.log("will start a download.");
14386              // 传入一个下载路径,并开始下载。
14387              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14388            })
14389            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14390              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14391              this.download = webDownloadItem;
14392            })
14393            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14394              console.log("download failed guid: " + webDownloadItem.getGuid());
14395              // 序列化失败的下载到一个字节数组。
14396              this.failedData = webDownloadItem.serialize();
14397            })
14398            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14399              console.log("download finish guid: " + webDownloadItem.getGuid());
14400            })
14401            this.controller.setDownloadDelegate(this.delegate);
14402            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14403          } catch (error) {
14404            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14405          }
14406        })
14407      Button('startDownload')
14408        .onClick(() => {
14409          try {
14410            this.controller.startDownload('https://www.example.com');
14411          } catch (error) {
14412            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14413          }
14414        })
14415      Button('resumeDownload')
14416        .onClick(() => {
14417          try {
14418            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14419          } catch (error) {
14420            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14421          }
14422        })
14423      Button('cancel')
14424        .onClick(() => {
14425          try {
14426            this.download.cancel();
14427          } catch (error) {
14428            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14429          }
14430        })
14431      Button('pause')
14432        .onClick(() => {
14433          try {
14434            this.download.pause();
14435          } catch (error) {
14436            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14437          }
14438        })
14439      Button('resume')
14440        .onClick(() => {
14441          try {
14442            this.download.resume();
14443          } catch (error) {
14444            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14445          }
14446        })
14447      Web({ src: 'www.example.com', controller: this.controller })
14448    }
14449  }
14450}
14451```
14452
14453### resumeDownload<sup>11+</sup>
14454
14455static resumeDownload(webDownloadItem: WebDownloadItem): void
14456
14457恢复一个失败的下载任务。
14458
14459**系统能力:** SystemCapability.Web.Webview.Core
14460
14461**参数:**
14462
14463| 参数名          | 类型    |  必填  | 说明                                            |
14464| ---------------| ------- | ---- | ------------- |
14465| webDownloadItem      | [WebDownloadItem](#webdownloaditem11)  | 是   | 待恢复的下载任务。 |
14466
14467**错误码:**
14468
14469以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14470
14471| 错误码ID | 错误信息                              |
14472| -------- | ------------------------------------- |
14473| 17100018 | No WebDownloadDelegate has been set yet. |
14474
14475**示例:**
14476
14477```ts
14478// xxx.ets
14479import { webview } from '@kit.ArkWeb';
14480import { BusinessError } from '@kit.BasicServicesKit';
14481
14482@Entry
14483@Component
14484struct WebComponent {
14485  controller: webview.WebviewController = new webview.WebviewController();
14486  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14487  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14488  failedData: Uint8Array = new Uint8Array();
14489
14490  build() {
14491    Column() {
14492      Button('setDownloadDelegate')
14493        .onClick(() => {
14494          try {
14495            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14496              console.log("will start a download.");
14497              // 传入一个下载路径,并开始下载。
14498              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14499            })
14500            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14501              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14502              this.download = webDownloadItem;
14503            })
14504            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14505              console.log("download failed guid: " + webDownloadItem.getGuid());
14506              // 序列化失败的下载到一个字节数组。
14507              this.failedData = webDownloadItem.serialize();
14508            })
14509            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14510              console.log("download finish guid: " + webDownloadItem.getGuid());
14511            })
14512            this.controller.setDownloadDelegate(this.delegate);
14513            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14514          } catch (error) {
14515            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14516          }
14517        })
14518      Button('startDownload')
14519        .onClick(() => {
14520          try {
14521            this.controller.startDownload('https://www.example.com');
14522          } catch (error) {
14523            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14524          }
14525        })
14526      Button('resumeDownload')
14527        .onClick(() => {
14528          try {
14529            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14530          } catch (error) {
14531            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14532          }
14533        })
14534      Button('cancel')
14535        .onClick(() => {
14536          try {
14537            this.download.cancel();
14538          } catch (error) {
14539            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14540          }
14541        })
14542      Button('pause')
14543        .onClick(() => {
14544          try {
14545            this.download.pause();
14546          } catch (error) {
14547            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14548          }
14549        })
14550      Button('resume')
14551        .onClick(() => {
14552          try {
14553            this.download.resume();
14554          } catch (error) {
14555            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14556          }
14557        })
14558      Web({ src: 'www.example.com', controller: this.controller })
14559    }
14560  }
14561}
14562```
14563
14564## ProxySchemeFilter<sup>15+</sup>
14565
14566使用代理的请求的scheme信息。
14567
14568**系统能力:** SystemCapability.Web.Webview.Core
14569
14570| 名称          | 值 | 说明                                      |
14571| ------------- | -- |----------------------------------------- |
14572| MATCH_ALL_SCHEMES | 0 |所有的scheme都会使用代理。|
14573| MATCH_HTTP        | 1 |HTTP请求会使用代理。|
14574| MATCH_HTTPS       | 2 |HTTPS请求会使用代理。|
14575
14576## ProxyConfig<sup>15+</sup>
14577
14578可以通过该类提供的接口对代理进行配置。
14579
14580### insertProxyRule<sup>15+</sup>
14581
14582insertProxyRule(proxyRule: string, schemeFilter?: ProxySchemeFilter): void
14583
14584插入一条代理规则,与schemeFilter匹配的URL都会使用指定代理。如果schemeFilter为空,所有URL都将使用指定代理。
14585
14586**系统能力:** SystemCapability.Web.Webview.Core
14587
14588**参数:**
14589
14590| 参数名          | 类型     |  必填  | 说明           |
14591| ---------------| ------- | ---- | ------------- |
14592| proxyRule      | string  | 是   | URL要使用的代理。 |
14593| schemeFilter   | [ProxySchemeFilter](#proxyschemefilter15)  | 否   | 与schemeFilter匹配的URL会使用代理。默认值:MATCH_ALL_SCHEMES |
14594
14595**错误码:**
14596
14597以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14598
14599| 错误码ID | 错误信息                              |
14600| -------- | ------------------------------------- |
14601|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14602
14603**示例:**
14604
14605完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14606
14607### insertDirectRule<sup>15+</sup>
14608
14609insertDirectRule(schemeFilter?: ProxySchemeFilter): void
14610
14611插入一条代理规则,指明符合schemeFilter条件的URL将直接连接到服务器。
14612
14613**系统能力:** SystemCapability.Web.Webview.Core
14614
14615**参数:**
14616
14617| 参数名          | 类型     |  必填  | 说明           |
14618| ---------------| ------- | ---- | ------------- |
14619| schemeFilter   | [ProxySchemeFilter](#proxyschemefilter15)  | 否   | 与schemeFilter匹配的URL会直接与服务器相连。默认值:MATCH_ALL_SCHEMES |
14620
14621**错误码:**
14622
14623以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14624
14625| 错误码ID | 错误信息                              |
14626| -------- | ------------------------------------- |
14627|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14628
14629**示例:**
14630
14631完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14632
14633### insertBypassRule<sup>15+</sup>
14634
14635insertBypassRule(bypassRule: string): void
14636
14637插入一条bypass规则,指明哪些URL应该绕过代理并直接连接到服务器。
14638
14639**系统能力:** SystemCapability.Web.Webview.Core
14640
14641**参数:**
14642
14643| 参数名          | 类型     |  必填  | 说明           |
14644| ---------------| ------- | ---- | ------------- |
14645| bypassRule     | string  | 是   | 与bypassRule匹配的URL会绕过代理。 |
14646
14647**错误码:**
14648
14649以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14650
14651| 错误码ID | 错误信息                              |
14652| -------- | ------------------------------------- |
14653|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
14654
14655**示例:**
14656
14657完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14658
14659### bypassHostnamesWithoutPeriod<sup>15+</sup>
14660
14661bypassHostnamesWithoutPeriod(): void
14662
14663没有点字符的域名将跳过代理并直接连接到服务器。
14664
14665**系统能力:** SystemCapability.Web.Webview.Core
14666
14667**示例:**
14668
14669完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14670
14671### clearImplicitRules<sup>15+</sup>
14672
14673clearImplicitRules(): void
14674
14675默认情况下,如果某些主机名是本地IP地址或localhost地址,它们会绕过代理。调用此函数以覆盖默认行为,并强制将localhost或本地IP地址通过代理发送。
14676
14677**系统能力:** SystemCapability.Web.Webview.Core
14678
14679**示例:**
14680
14681完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14682
14683### enableReverseBypass<sup>15+</sup>
14684
14685enableReverseBypass(reverse: boolean): void
14686
14687反转bypass规则。
14688
14689**系统能力:** SystemCapability.Web.Webview.Core
14690
14691**参数:**
14692
14693| 参数名          | 类型     |  必填  | 说明           |
14694| ---------------| ------- | ---- | ------------- |
14695| reverse     | boolean  | 是   | 参数值默认是false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 |
14696
14697**错误码:**
14698
14699以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14700
14701| 错误码ID | 错误信息                              |
14702| -------- | ------------------------------------- |
14703|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14704
14705**示例:**
14706
14707完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14708
14709### getBypassRules<sup>15+</sup>
14710
14711getBypassRules(): Array\<string\>
14712
14713获取不使用代理的URL列表。
14714
14715**系统能力:** SystemCapability.Web.Webview.Core
14716
14717**返回值:**
14718
14719| 类型   | 说明                      |
14720| ------ | ------------------------- |
14721| Array\<string\> | 不使用代理的URL列表。 |
14722
14723**示例:**
14724
14725完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14726
14727### getProxyRules<sup>15+</sup>
14728
14729getProxyRules(): Array\<ProxyRule\>
14730
14731获取代理规则。
14732
14733**系统能力:** SystemCapability.Web.Webview.Core
14734
14735**返回值:**
14736
14737| 类型   | 说明                      |
14738| ------ | ------------------------- |
14739| Array\<[ProxyRule](#proxyrule15)\> | 代理规则。 |
14740
14741**示例:**
14742
14743完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14744
14745### isReverseBypassEnabled<sup>15+</sup>
14746
14747isReverseBypassEnabled(): boolean
14748
14749获取[enableReverseBypass](#enablereversebypass15)的参数值,详见[enableReverseBypass](#enablereversebypass15)。
14750
14751**系统能力:** SystemCapability.Web.Webview.Core
14752
14753**返回值:**
14754
14755| 类型   | 说明                      |
14756| ------ | ------------------------- |
14757| boolean | [enableReverseBypass](#enablereversebypass15)的参数值。参数值为false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 |
14758
14759**示例:**
14760
14761完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14762
14763
14764## ProxyRule<sup>15+</sup>
14765
14766[insertProxyRule](#insertproxyrule15)中使用的代理规则。
14767
14768### getSchemeFilter<sup>15+</sup>
14769
14770getSchemeFilter(): ProxySchemeFilter
14771
14772获取代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。
14773
14774**系统能力:** SystemCapability.Web.Webview.Core
14775
14776**返回值:**
14777
14778| 类型   | 说明                      |
14779| ------ | ------------------------- |
14780| [ProxySchemeFilter](#proxyschemefilter15) | 代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。 |
14781
14782**示例:**
14783
14784完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14785
14786### getUrl<sup>15+</sup>
14787
14788getUrl(): string
14789
14790获取代理规则中的代理的URL信息。
14791
14792**系统能力:** SystemCapability.Web.Webview.Core
14793
14794**返回值:**
14795
14796| 类型   | 说明                      |
14797| ------ | ------------------------- |
14798| string | 代理规则中的代理的Url信息。 |
14799
14800**示例:**
14801
14802完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14803
14804## OnProxyConfigChangeCallback<sup>15+</sup>
14805
14806type OnProxyConfigChangeCallback = () => void
14807
14808回调函数,回调成功表示代理设置成功。
14809
14810**系统能力:** SystemCapability.Web.Webview.Core
14811
14812**示例:**
14813
14814完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14815
14816## ProxyController<sup>15+</sup>
14817
14818此类用于为应用程序设置代理。
14819
14820### applyProxyOverride<sup>15+</sup>
14821
14822static applyProxyOverride(proxyConfig: ProxyConfig, callback: OnProxyConfigChangeCallback): void
14823
14824设置应用中所有Web使用的代理配置,与[insertBypassRule](#insertbypassrule15)中插入的bypass规则匹配的URL将不会使用代理,而是直接向URL指定的源地址发起请求。代理设置成功后,不保证网络连接后会立即使用新的代理设置,在加载页面之前请等待监听器触发,这个监听器将在UI线程上被调用。
14825
14826**系统能力:** SystemCapability.Web.Webview.Core
14827
14828**参数:**
14829
14830| 参数名          | 类型     |  必填  | 说明           |
14831| ---------------| ------- | ---- | ------------- |
14832| proxyConfig     | [ProxyConfig](#proxyconfig15)  | 是   | 对代理的配置。 |
14833| callback     | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15)   | 是   | 代理设置成功的回调。 |
14834
14835**错误码:**
14836
14837以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14838
14839| 错误码ID | 错误信息                              |
14840| -------- | ------------------------------------- |
14841|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
14842
14843**示例:**
14844
14845完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14846
14847### removeProxyOverride<sup>15+</sup>
14848
14849static removeProxyOverride(callback: OnProxyConfigChangeCallback): void
14850
14851移除代理配置。移除代理配置后,不保证网络连接后会立即使用新的代理设置,在加载页面之前等待监听器,这个监听器将在UI线程上被调用。
14852
14853**系统能力:** SystemCapability.Web.Webview.Core
14854
14855**参数:**
14856
14857| 参数名          | 类型     |  必填  | 说明           |
14858| ---------------| ------- | ---- | ------------- |
14859| callback     | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15)   | 是   | 代理设置成功的回调。 |
14860
14861**错误码:**
14862
14863以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14864
14865| 错误码ID | 错误信息                              |
14866| -------- | ------------------------------------- |
14867|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14868
14869**示例:**
14870
14871```ts
14872// xxx.ets
14873import { webview } from '@kit.ArkWeb';
14874import { BusinessError } from '@kit.BasicServicesKit';
14875
14876@Entry
14877@Component
14878struct WebComponent {
14879  controller: webview.WebviewController = new webview.WebviewController();
14880  proxyRules: webview.ProxyRule[] = [];
14881
14882  build() {
14883    Row() {
14884      Column() {
14885        Button("applyProxyOverride").onClick(()=>{
14886          let proxyConfig:webview.ProxyConfig = new webview.ProxyConfig();
14887          //优先使用第一个代理配置https://proxy.XXX.com
14888          //代理失败后会回落到直连服务器insertDirectRule
14889          try {
14890            proxyConfig.insertProxyRule("https://proxy.XXX.com", webview.ProxySchemeFilter.MATCH_ALL_SCHEMES);
14891          } catch (error) {
14892            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14893          }
14894          try {
14895            proxyConfig.insertDirectRule(webview.ProxySchemeFilter.MATCH_HTTP);
14896          } catch (error) {
14897            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14898          }
14899          try {
14900            proxyConfig.insertBypassRule("*.example.com");
14901          } catch (error) {
14902            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14903          }
14904          proxyConfig.clearImplicitRules();
14905          proxyConfig.bypassHostnamesWithoutPeriod();
14906          try {
14907            proxyConfig.enableReverseBypass(true);
14908          } catch (error) {
14909            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14910          }
14911          let bypassRules = proxyConfig.getBypassRules();
14912          for (let i = 0; i < bypassRules.length; i++) {
14913            console.log("bypassRules: " + bypassRules[i]);
14914          }
14915          this.proxyRules = proxyConfig.getProxyRules();
14916          for (let i = 0; i < this.proxyRules.length; i++) {
14917            console.log("SchemeFiletr: " + this.proxyRules[i].getSchemeFilter());
14918            console.log("Url: " + this.proxyRules[i].getUrl());
14919          }
14920          let isReverseBypassRule = proxyConfig.isReverseBypassEnabled();
14921          console.log("isReverseBypassRules: " + isReverseBypassRule);
14922          try {
14923            webview.ProxyController.applyProxyOverride(proxyConfig, () => {
14924              console.log("PROXYCONTROLLER proxy changed");
14925            });
14926          } catch (error) {
14927            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14928          }
14929        })
14930        Button("loadUrl-https").onClick(()=>{
14931          this.controller.loadUrl("https://www.example.com")
14932        })
14933        Button("loadUrl-http").onClick(()=>{
14934          this.controller.loadUrl("http://www.example.com")
14935        })
14936        Button("removeProxyOverride").onClick(()=>{
14937          try {
14938          webview.ProxyController.removeProxyOverride(() => {
14939            console.log("PROXYCONTROLLER proxy changed");
14940          });
14941          } catch (error) {
14942            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14943          }
14944        })
14945        Web({ src: 'www.example.com', controller: this.controller})
14946      }
14947      .width('100%')
14948    }
14949    .height('100%')
14950  }
14951}
14952
14953```
14954
14955## WebHttpBodyStream<sup>12+</sup>
14956
14957POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。
14958
14959### initialize<sup>12+</sup>
14960
14961initialize(): Promise\<void\>
14962
14963初始化WebHttpBodyStream。
14964
14965**系统能力:** SystemCapability.Web.Webview.Core
14966
14967**返回值:**
14968
14969| 类型   | 说明                      |
14970| ------ | ------------------------- |
14971| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 |
14972
14973**错误码:**
14974
14975以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14976
14977| 错误码ID | 错误信息                              |
14978| -------- | ------------------------------------- |
14979| 17100022 | Failed to initialize the HTTP body stream. |
14980
14981**示例:**
14982
14983```ts
14984// xxx.ets
14985import { webview } from '@kit.ArkWeb';
14986import { BusinessError } from '@kit.BasicServicesKit';
14987import { buffer } from '@kit.ArkTS';
14988import { WebNetErrorList } from '@ohos.web.netErrorList'
14989
14990@Entry
14991@Component
14992struct WebComponent {
14993  controller: webview.WebviewController = new webview.WebviewController();
14994  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14995  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
14996
14997  build() {
14998    Column() {
14999      Button('postUrl')
15000        .onClick(() => {
15001          try {
15002            let postData = buffer.from(this.htmlData);
15003            this.controller.postUrl('https://www.example.com', postData.buffer);
15004          } catch (error) {
15005            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15006          }
15007        })
15008      Web({ src: 'https://www.example.com', controller: this.controller })
15009        .onControllerAttached(() => {
15010          try {
15011            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
15012              console.log("[schemeHandler] onRequestStart");
15013              try {
15014                let stream = request.getHttpBodyStream();
15015                if (stream) {
15016                  stream.initialize().then(() => {
15017                    if (!stream) {
15018                      return;
15019                    }
15020                    console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize());
15021                    console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
15022                    console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked());
15023                    console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
15024                    console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory());
15025                    stream.read(stream.getSize()).then((buffer) => {
15026                      if (!stream) {
15027                        return;
15028                      }
15029                      console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength);
15030                      console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
15031                      console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
15032                    }).catch((error: BusinessError) => {
15033                      console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
15034                    })
15035                  }).catch((error: BusinessError) => {
15036                    console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
15037                  })
15038                } else {
15039                  console.log("[schemeHandler] onRequestStart has no http body stream");
15040                }
15041              } catch (error) {
15042                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15043              }
15044
15045              return false;
15046            })
15047
15048            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
15049              console.log("[schemeHandler] onRequestStop");
15050            });
15051
15052            this.controller.setWebSchemeHandler('https', this.schemeHandler);
15053          } catch (error) {
15054            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15055          }
15056        })
15057        .javaScriptAccess(true)
15058        .domStorageAccess(true)
15059    }
15060  }
15061}
15062
15063```
15064
15065### read<sup>12+</sup>
15066
15067read(size: number): Promise\<ArrayBuffer\>
15068
15069读取WebHttpBodyStream中的数据。
15070
15071**系统能力:** SystemCapability.Web.Webview.Core
15072
15073**参数:**
15074
15075| 参数名   | 类型    |  必填  | 说明                       |
15076| --------| ------- | ---- | ---------------------------|
15077|  size | number | 是   | 读取WebHttpBodyStream中的字节数。 |
15078
15079**返回值:**
15080
15081| 类型   | 说明                      |
15082| ------ | ------------------------- |
15083| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 |
15084
15085**错误码:**
15086
15087以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15088
15089| 错误码ID | 错误信息                              |
15090| -------- | ------------------------------------- |
15091|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
15092
15093**示例:**
15094
15095完整示例代码参考[initialize](#initialize12)。
15096
15097### getSize<sup>12+</sup>
15098
15099getSize(): number
15100
15101获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。
15102
15103**系统能力:** SystemCapability.Web.Webview.Core
15104
15105**返回值:**
15106
15107| 类型   | 说明                      |
15108| ------ | ------------------------- |
15109| number | 获取WebHttpBodyStream中的数据大小。 |
15110
15111**示例:**
15112
15113完整示例代码参考[initialize](#initialize12)。
15114
15115### getPosition<sup>12+</sup>
15116
15117getPosition(): number
15118
15119读取WebHttpBodyStream中当前的读取位置。
15120
15121**系统能力:** SystemCapability.Web.Webview.Core
15122
15123**返回值:**
15124
15125| 类型   | 说明                      |
15126| ------ | ------------------------- |
15127| number | WebHttpBodyStream中当前的读取位置。 |
15128
15129**示例:**
15130
15131完整示例代码参考[initialize](#initialize12)。
15132
15133### isChunked<sup>12+</sup>
15134
15135isChunked(): boolean
15136
15137WebHttpBodyStream是否采用分块传输。
15138
15139**系统能力:** SystemCapability.Web.Webview.Core
15140
15141**返回值:**
15142
15143| 类型   | 说明                      |
15144| ------ | ------------------------- |
15145| boolean | WebHttpBodyStream是否采用分块传输。 |
15146
15147**示例:**
15148
15149完整示例代码参考[initialize](#initialize12)。
15150
15151### isEof<sup>12+</sup>
15152
15153isEof(): boolean
15154
15155判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。
15156
15157**系统能力:** SystemCapability.Web.Webview.Core
15158
15159**返回值:**
15160
15161| 类型   | 说明                      |
15162| ------ | ------------------------- |
15163| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 |
15164
15165**示例:**
15166
15167完整示例代码参考[initialize](#initialize12)。
15168
15169### isInMemory<sup>12+</sup>
15170
15171isInMemory(): boolean
15172
15173判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。
15174
15175**系统能力:** SystemCapability.Web.Webview.Core
15176
15177**返回值:**
15178
15179| 类型   | 说明                      |
15180| ------ | ------------------------- |
15181| boolean | WebHttpBodyStream中的上传数据是否在内存中。 |
15182
15183**示例:**
15184
15185完整示例代码参考[initialize](#initialize12)。
15186
15187## WebSchemeHandlerRequest<sup>12+</sup>
15188
15189通过WebSchemeHandler拦截到的请求。
15190
15191### getHeader<sup>12+</sup>
15192
15193getHeader(): Array\<WebHeader\>
15194
15195获取资源请求头信息。
15196
15197**系统能力:** SystemCapability.Web.Webview.Core
15198
15199**返回值:**
15200
15201| 类型                         | 说明         |
15202| -------------------------- | ---------- |
15203| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 |
15204
15205**示例:**
15206
15207完整示例代码参考[onRequestStart](#onrequeststart12)。
15208
15209### getRequestUrl<sup>12+</sup>
15210
15211getRequestUrl(): string
15212
15213获取资源请求的URL信息。
15214
15215**系统能力:** SystemCapability.Web.Webview.Core
15216
15217**返回值:**
15218
15219| 类型     | 说明            |
15220| ------ | ------------- |
15221| string | 返回资源请求的URL信息。 |
15222
15223**示例:**
15224
15225完整示例代码参考[onRequestStart](#onrequeststart12)。
15226
15227### getRequestMethod<sup>12+</sup>
15228
15229getRequestMethod(): string
15230
15231获取请求方法。
15232
15233**系统能力:** SystemCapability.Web.Webview.Core
15234
15235**返回值:**
15236
15237| 类型     | 说明            |
15238| ------ | ------------- |
15239| string | 返回请求方法。 |
15240
15241**示例:**
15242
15243完整示例代码参考[onRequestStart](#onrequeststart12)。
15244
15245### getReferrer<sup>12+</sup>
15246
15247getReferrer(): string
15248
15249获取referrer。
15250
15251**系统能力:** SystemCapability.Web.Webview.Core
15252
15253**返回值:**
15254
15255| 类型     | 说明            |
15256| ------ | ------------- |
15257| string | 获取到的referrer。 |
15258
15259**示例:**
15260
15261完整示例代码参考[onRequestStart](#onrequeststart12)。
15262
15263### isMainFrame<sup>12+</sup>
15264
15265isMainFrame(): boolean
15266
15267判断资源请求是否为主frame。
15268
15269**系统能力:** SystemCapability.Web.Webview.Core
15270
15271**返回值:**
15272
15273| 类型     | 说明            |
15274| ------ | ------------- |
15275| boolean | 判断资源请求是否为主frame。 |
15276
15277**示例:**
15278
15279完整示例代码参考[onRequestStart](#onrequeststart12)。
15280
15281### hasGesture<sup>12+</sup>
15282
15283hasGesture(): boolean
15284
15285获取资源请求是否与手势(如点击)相关联。
15286
15287**系统能力:** SystemCapability.Web.Webview.Core
15288
15289**返回值:**
15290
15291| 类型     | 说明            |
15292| ------ | ------------- |
15293| boolean | 返回资源请求是否与手势(如点击)相关联。 |
15294
15295**示例:**
15296
15297完整示例代码参考[onRequestStart](#onrequeststart12)。
15298
15299### getHttpBodyStream<sup>12+</sup>
15300
15301getHttpBodyStream(): WebHttpBodyStream | null
15302
15303获取资源请求中的WebHttpBodyStream。
15304
15305**系统能力:** SystemCapability.Web.Webview.Core
15306
15307**返回值:**
15308
15309| 类型     | 说明            |
15310| ------ | ------------- |
15311| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 |
15312
15313**示例:**
15314
15315完整示例代码参考[onRequestStart](#onrequeststart12)。
15316
15317### getRequestResourceType<sup>12+</sup>
15318
15319getRequestResourceType(): WebResourceType
15320
15321获取资源请求的资源类型。
15322
15323**系统能力:** SystemCapability.Web.Webview.Core
15324
15325**返回值:**
15326
15327| 类型     | 说明            |
15328| ------ | ------------- |
15329| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 |
15330
15331**示例:**
15332
15333完整示例代码参考[onRequestStart](#onrequeststart12)。
15334
15335### getFrameUrl<sup>12+</sup>
15336
15337getFrameUrl(): string
15338
15339获取触发此请求的Frame的URL。
15340
15341**系统能力:** SystemCapability.Web.Webview.Core
15342
15343**返回值:**
15344
15345| 类型     | 说明            |
15346| ------ | ------------- |
15347| string | 返回触发此请求的Frame的URL。 |
15348
15349**示例:**
15350
15351完整示例代码参考[onRequestStart](#onrequeststart12)。
15352
15353## WebSchemeHandlerResponse<sup>12+</sup>
15354
15355请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。
15356
15357### constructor<sup>12+</sup>
15358
15359constructor()
15360
15361Response的构造函数。
15362
15363**系统能力:** SystemCapability.Web.Webview.Core
15364
15365**示例:**
15366
15367```ts
15368// xxx.ets
15369import { webview } from '@kit.ArkWeb';
15370import { BusinessError } from '@kit.BasicServicesKit';
15371import { WebNetErrorList } from '@ohos.web.netErrorList';
15372
15373@Entry
15374@Component
15375struct WebComponent {
15376  controller: webview.WebviewController = new webview.WebviewController();
15377  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15378
15379  build() {
15380    Column() {
15381      Button('response').onClick(() => {
15382        let response = new webview.WebSchemeHandlerResponse();
15383        try {
15384          response.setUrl("http://www.example.com")
15385          response.setStatus(200)
15386          response.setStatusText("OK")
15387          response.setMimeType("text/html")
15388          response.setEncoding("utf-8")
15389          response.setHeaderByName("header1", "value1", false)
15390          response.setNetErrorCode(WebNetErrorList.NET_OK)
15391          console.log("[schemeHandler] getUrl:" + response.getUrl())
15392          console.log("[schemeHandler] getStatus:" + response.getStatus())
15393          console.log("[schemeHandler] getStatusText:" + response.getStatusText())
15394          console.log("[schemeHandler] getMimeType:" + response.getMimeType())
15395          console.log("[schemeHandler] getEncoding:" + response.getEncoding())
15396          console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1"))
15397          console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode())
15398
15399        } catch (error) {
15400          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15401        }
15402      })
15403      Web({ src: 'https://www.example.com', controller: this.controller })
15404    }
15405  }
15406}
15407
15408```
15409
15410### setUrl<sup>12+</sup>
15411
15412setUrl(url: string): void
15413
15414给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。
15415
15416**系统能力:** SystemCapability.Web.Webview.Core
15417
15418**参数:**
15419
15420| 参数名   | 类型    |  必填  | 说明                       |
15421| --------| ------- | ---- | ---------------------------|
15422|  url | string | 是   | 即将要跳转的URL。 |
15423
15424**示例:**
15425
15426示例完整示例代码参考[constructor](#constructor12)。
15427
15428**错误码:**
15429
15430以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15431
15432| 错误码ID | 错误信息                  |
15433| -------- | ----------------------- |
15434|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15435
15436### setNetErrorCode<sup>12+</sup>
15437
15438setNetErrorCode(code: WebNetErrorList): void
15439
15440给当前的Response设置网络错误码。
15441
15442**系统能力:** SystemCapability.Web.Webview.Core
15443
15444**参数:**
15445
15446| 参数名   | 类型    |  必填  | 说明                       |
15447| --------| ------- | ---- | ---------------------------|
15448|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15449
15450**错误码:**
15451
15452以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15453
15454| 错误码ID | 错误信息                  |
15455| -------- | ----------------------- |
15456|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
15457
15458**示例:**
15459
15460示例完整示例代码参考[constructor](#constructor12)。
15461
15462### setStatus<sup>12+</sup>
15463
15464setStatus(code: number): void
15465
15466给当前的Response设置HTTP状态码。
15467
15468**系统能力:** SystemCapability.Web.Webview.Core
15469
15470**参数:**
15471
15472| 参数名   | 类型    |  必填  | 说明                       |
15473| --------| ------- | ---- | ---------------------------|
15474|  code | number | 是   | Http状态码。 |
15475
15476**错误码:**
15477
15478以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15479
15480| 错误码ID | 错误信息                  |
15481| -------- | ----------------------- |
15482|  401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15483
15484**示例:**
15485
15486示例完整示例代码参考[constructor](#constructor12)。
15487
15488### setStatusText<sup>12+</sup>
15489
15490setStatusText(text: string): void
15491
15492给当前的Response设置状态文本。
15493
15494**系统能力:** SystemCapability.Web.Webview.Core
15495
15496**参数:**
15497
15498| 参数名   | 类型    |  必填  | 说明                       |
15499| --------| ------- | ---- | ---------------------------|
15500|  text | string | 是   | 状态文本。 |
15501
15502**错误码:**
15503
15504以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15505
15506| 错误码ID | 错误信息                  |
15507| -------- | ----------------------- |
15508|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15509
15510**示例:**
15511
15512示例完整示例代码参考[constructor](#constructor12)。
15513
15514### setMimeType<sup>12+</sup>
15515
15516setMimeType(type: string): void
15517
15518给当前的Response设置媒体类型。
15519
15520**系统能力:** SystemCapability.Web.Webview.Core
15521
15522**参数:**
15523
15524| 参数名   | 类型    |  必填  | 说明                       |
15525| --------| ------- | ---- | ---------------------------|
15526|  type | string | 是   | 媒体类型。 |
15527
15528**错误码:**
15529
15530以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15531
15532| 错误码ID | 错误信息                  |
15533| -------- | ----------------------- |
15534|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15535
15536**示例:**
15537
15538示例完整示例代码参考[constructor](#constructor12)。
15539
15540### setEncoding<sup>12+</sup>
15541
15542setEncoding(encoding: string): void
15543
15544给当前的Response设置字符集。
15545
15546**系统能力:** SystemCapability.Web.Webview.Core
15547
15548**参数:**
15549
15550| 参数名   | 类型    |  必填  | 说明                       |
15551| --------| ------- | ---- | ---------------------------|
15552|  encoding | string | 是   | 字符集。 |
15553
15554**错误码:**
15555
15556以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15557
15558| 错误码ID | 错误信息                  |
15559| -------- | ----------------------- |
15560|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15561
15562**示例:**
15563
15564示例完整示例代码参考[constructor](#constructor12)。
15565
15566### setHeaderByName<sup>12+</sup>
15567
15568setHeaderByName(name: string, value: string, overwrite: boolean): void
15569
15570给当前的Response设置头信息。
15571
15572**系统能力:** SystemCapability.Web.Webview.Core
15573
15574**参数:**
15575
15576| 参数名   | 类型    |  必填  | 说明                       |
15577| --------| ------- | ---- | ---------------------------|
15578|  name | string | 是   | 头部(header)的名称。 |
15579|  value | string | 是   | 头部(header)的值。 |
15580|  overwrite | boolean | 是   | 如果为true,将覆盖现有的头部,否则不覆盖。 |
15581
15582**错误码:**
15583
15584以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15585
15586| 错误码ID | 错误信息                  |
15587| -------- | ----------------------- |
15588|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
15589
15590**示例:**
15591
15592示例完整示例代码参考[constructor](#constructor12)。
15593
15594### getUrl<sup>12+</sup>
15595
15596getUrl(): string
15597
15598获取重定向或由于HSTS而更改后的URL。
15599风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
15600
15601**系统能力:** SystemCapability.Web.Webview.Core
15602
15603**返回值:**
15604
15605| 类型    | 说明                                     |
15606| ------- | --------------------------------------- |
15607| string | 获取经过重定向或由于HSTS而更改后的URL。|
15608
15609**示例:**
15610
15611示例完整示例代码参考[constructor](#constructor12)。
15612
15613### getNetErrorCode<sup>12+</sup>
15614
15615getNetErrorCode(): WebNetErrorList
15616
15617获取Response的网络错误码。
15618
15619**系统能力:** SystemCapability.Web.Webview.Core
15620
15621**返回值:**
15622
15623| 类型    | 说明                                     |
15624| ------- | --------------------------------------- |
15625| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。|
15626
15627**示例:**
15628
15629示例完整示例代码参考[constructor](#constructor12)。
15630
15631### getStatus<sup>12+</sup>
15632
15633getStatus(): number
15634
15635获取Response的Http状态码。
15636
15637**系统能力:** SystemCapability.Web.Webview.Core
15638
15639**返回值:**
15640
15641| 类型    | 说明                                     |
15642| ------- | --------------------------------------- |
15643| number | 获取Response的Http状态码。|
15644
15645**示例:**
15646
15647示例完整示例代码参考[constructor](#constructor12)。
15648
15649### getStatusText<sup>12+</sup>
15650
15651getStatusText(): string
15652
15653获取Response的状态文本。
15654
15655**系统能力:** SystemCapability.Web.Webview.Core
15656
15657**返回值:**
15658
15659| 类型    | 说明                                     |
15660| ------- | --------------------------------------- |
15661| string | 状态文本。|
15662
15663**示例:**
15664
15665示例完整示例代码参考[constructor](#constructor12)。
15666
15667### getMimeType<sup>12+</sup>
15668
15669getMimeType(): string
15670
15671获取Response的媒体类型。
15672
15673**系统能力:** SystemCapability.Web.Webview.Core
15674
15675**返回值:**
15676
15677| 类型    | 说明                                     |
15678| ------- | --------------------------------------- |
15679| string | 媒体类型。|
15680
15681**示例:**
15682
15683示例完整示例代码参考[constructor](#constructor12)。
15684
15685### getEncoding<sup>12+</sup>
15686
15687getEncoding(): string
15688
15689获取Response的字符集。
15690
15691**系统能力:** SystemCapability.Web.Webview.Core
15692
15693**返回值:**
15694
15695| 类型    | 说明                                     |
15696| ------- | --------------------------------------- |
15697| string | 字符集。|
15698
15699**示例:**
15700
15701示例完整示例代码参考[constructor](#constructor12)。
15702
15703### getHeaderByName<sup>12+</sup>
15704
15705getHeaderByName(name: string): string
15706
15707获取Response的字符集。
15708
15709**系统能力:** SystemCapability.Web.Webview.Core
15710
15711**参数:**
15712
15713| 参数名  | 类型             | 必填 | 说明                  |
15714| ------- | ---------------- | ---- | -------------------- |
15715| name     | string | 是   | 头部(header)的名称。      |
15716
15717
15718**返回值:**
15719
15720| 类型    | 说明                                     |
15721| ------- | --------------------------------------- |
15722| string | 头部(header)的值。|
15723
15724**示例:**
15725
15726示例完整示例代码参考[constructor](#constructor12)。
15727
15728## WebResourceHandler<sup>12+</sup>
15729
15730通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。
15731
15732### didReceiveResponse<sup>12+</sup>
15733
15734didReceiveResponse(response: WebSchemeHandlerResponse): void
15735
15736将构造的响应头传递给被拦截的请求。
15737
15738**系统能力:** SystemCapability.Web.Webview.Core
15739
15740**参数:**
15741
15742| 参数名          | 类型    |  必填  | 说明                                            |
15743| ---------------| ------- | ---- | ------------- |
15744| response      | [WebSchemeHandlerResponse](#webschemehandlerresponse12)  | 是   | 该拦截请求的响应。 |
15745
15746**错误码:**
15747
15748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15749
15750| 错误码ID | 错误信息                              |
15751| -------- | ------------------------------------- |
15752|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15753| 17100021 | The resource handler is invalid. |
15754
15755**示例:**
15756
15757示例请参考[OnRequestStart](#onrequeststart12)。
15758
15759### didReceiveResponseBody<sup>12+</sup>
15760
15761didReceiveResponseBody(data: ArrayBuffer): void
15762
15763将构造的响应体传递给被拦截的请求。
15764
15765**系统能力:** SystemCapability.Web.Webview.Core
15766
15767**参数:**
15768
15769| 参数名          | 类型    |  必填  | 说明                                            |
15770| ---------------| ------- | ---- | ------------- |
15771| data      | ArrayBuffer  | 是   | 响应体数据。 |
15772
15773**错误码:**
15774
15775以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15776
15777| 错误码ID | 错误信息                              |
15778| -------- | ------------------------------------- |
15779|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15780| 17100021 | The resource handler is invalid. |
15781
15782**示例:**
15783
15784示例请参考[OnRequestStart](#onrequeststart12)。
15785
15786### didFinish<sup>12+</sup>
15787
15788didFinish(): void
15789
15790通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15791
15792**系统能力:** SystemCapability.Web.Webview.Core
15793
15794**错误码:**
15795
15796以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15797
15798| 错误码ID | 错误信息                              |
15799| -------- | ------------------------------------- |
15800| 17100021 | The resource handler is invalid. |
15801
15802**示例:**
15803
15804示例请参考[OnRequestStart](#onrequeststart12)。
15805
15806### didFail<sup>12+</sup>
15807
15808didFail(code: WebNetErrorList): void
15809
15810通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15811
15812**系统能力:** SystemCapability.Web.Webview.Core
15813
15814**参数:**
15815
15816| 参数名   | 类型    |  必填  | 说明                       |
15817| --------| ------- | ---- | ---------------------------|
15818|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15819
15820**错误码:**
15821
15822以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15823
15824| 错误码ID | 错误信息                              |
15825| -------- | ------------------------------------- |
15826| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15827| 17100021 | The resource handler is invalid. |
15828
15829**系统能力:** SystemCapability.Web.Webview.Core
15830
15831**示例:**
15832
15833示例请参考[OnRequestStart](#onrequeststart12)。
15834
15835## WebSchemeHandler<sup>12+</sup>
15836
15837用于拦截指定scheme的请求的拦截器。
15838
15839### onRequestStart<sup>12+</sup>
15840
15841onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void
15842
15843当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。
15844
15845**系统能力:** SystemCapability.Web.Webview.Core
15846
15847**参数**:
15848
15849| 参数名   | 类型                 | 必填 | 说明       |
15850| -------- | -------------------- | ---- | ---------- |
15851| callback   | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 |
15852
15853**错误码:**
15854
15855以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15856
15857| 错误码ID | 错误信息                              |
15858| -------- | ------------------------------------- |
15859| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
15860
15861**示例:**
15862
15863```ts
15864// xxx.ets
15865import { webview } from '@kit.ArkWeb';
15866import { BusinessError } from '@kit.BasicServicesKit';
15867import { buffer } from '@kit.ArkTS';
15868import { WebNetErrorList } from '@ohos.web.netErrorList';
15869
15870@Entry
15871@Component
15872struct WebComponent {
15873  controller: webview.WebviewController = new webview.WebviewController();
15874  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15875  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
15876
15877  build() {
15878    Column() {
15879      Web({ src: 'https://www.example.com', controller: this.controller })
15880        .onControllerAttached(() => {
15881          try {
15882            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
15883              console.log("[schemeHandler] onRequestStart");
15884              try {
15885                console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl());
15886                console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod());
15887                console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer());
15888                console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame());
15889                console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture());
15890                console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length);
15891                console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType());
15892                console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl());
15893                let header = request.getHeader();
15894                for (let i = 0; i < header.length; i++) {
15895                  console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue);
15896                }
15897                let stream = request.getHttpBodyStream();
15898                if (stream) {
15899                  console.log("[schemeHandler] onRequestStart has http body stream");
15900                } else {
15901                  console.log("[schemeHandler] onRequestStart has no http body stream");
15902                }
15903              } catch (error) {
15904                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15905              }
15906
15907              if (request.getRequestUrl().endsWith("example.com")) {
15908                return false;
15909              }
15910
15911              let response = new webview.WebSchemeHandlerResponse();
15912              try {
15913                response.setNetErrorCode(WebNetErrorList.NET_OK);
15914                response.setStatus(200);
15915                response.setStatusText("OK");
15916                response.setMimeType("text/html");
15917                response.setEncoding("utf-8");
15918                response.setHeaderByName("header1", "value1", false);
15919              } catch (error) {
15920                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15921              }
15922
15923              // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。
15924              let buf = buffer.from(this.htmlData)
15925              try {
15926                if (buf.length == 0) {
15927                  console.log("[schemeHandler] length 0");
15928                  resourceHandler.didReceiveResponse(response);
15929                  // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail
15930                  resourceHandler.didFail(WebNetErrorList.ERR_FAILED);
15931                } else {
15932                  console.log("[schemeHandler] length 1");
15933                  resourceHandler.didReceiveResponse(response);
15934                  resourceHandler.didReceiveResponseBody(buf.buffer);
15935                  resourceHandler.didFinish();
15936                }
15937              } catch (error) {
15938                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15939              }
15940              return true;
15941            })
15942
15943            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
15944              console.log("[schemeHandler] onRequestStop");
15945            });
15946
15947            this.controller.setWebSchemeHandler('https', this.schemeHandler);
15948          } catch (error) {
15949            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15950          }
15951        })
15952        .javaScriptAccess(true)
15953        .domStorageAccess(true)
15954    }
15955  }
15956}
15957```
15958### onRequestStop<sup>12+</sup>
15959
15960onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void
15961
15962当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点:
15963
159641.WebResourceHandler调用didFail或者didFinish。
15965
159662.此请求因为其他原因中断。
15967
15968**系统能力:** SystemCapability.Web.Webview.Core
15969
15970**参数**:
15971
15972| 参数名   | 类型                 | 必填 | 说明       |
15973| -------- | -------------------- | ---- | ---------- |
15974| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是   | 对应请求结束的回调函数。 |
15975
15976**错误码:**
15977
15978以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15979
15980| 错误码ID | 错误信息                              |
15981| -------- | ------------------------------------- |
15982| 401 | Invalid input parameter. |
15983
15984**示例:**
15985
15986完整示例代码参考[onRequestStart](#onrequeststart12)。
15987
15988## CacheOptions<sup>12+</sup>
15989
15990Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。
15991
15992**系统能力:** SystemCapability.Web.Webview.Core
15993
15994| 名称        | 类型   | 可读 | 可写 |说明                 |
15995| ----------- | ------ | -----|------|------------------- |
15996| responseHeaders   | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。   |
15997
15998## PlaybackStatus<sup>12+</sup>
15999
16000[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。
16001
16002**系统能力:** SystemCapability.Web.Webview.Core
16003
16004| 名称 | 值 | 说明 |
16005|------|----|------|
16006| PAUSED  | 0 | 播放状态为播放状态。 |
16007| PLAYING | 1 | 播放状态为暂停状态。 |
16008
16009## NetworkState<sup>12+<sup>
16010
16011播放器的网络状态。
16012
16013**系统能力:** SystemCapability.Web.Webview.Core
16014
16015| 名称 | 值 | 说明 |
16016|------|----|------|
16017| EMPTY         | 0 | 播放器还没有开始下载数据。 |
16018| IDLE          | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 |
16019| LOADING       | 2 | 播放器正在下载媒体数据。 |
16020| NETWORK_ERROR | 3 | 发生了网络错误。 |
16021
16022## ReadyState<sup>12+<sup>
16023
16024播放器的缓存状态。
16025
16026**系统能力:** SystemCapability.Web.Webview.Core
16027
16028| 名称 | 值 | 说明 |
16029|------|----|------|
16030| HAVE_NOTHING      | 0 | 没有缓存。 |
16031| HAVE_METADATA     | 1 | 只缓存了媒体元数据。 |
16032| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 |
16033| HAVE_FUTURE_DATA  | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 |
16034| HAVE_ENOUGH_DATA  | 4 | 缓存了足够的数据,保证播放流畅。 |
16035
16036## MediaError<sup>12+<sup>
16037
16038播放器的错误类型。
16039
16040**系统能力:** SystemCapability.Web.Webview.Core
16041
16042| 名称 | 值 | 说明 |
16043|------|----|------|
16044| NETWORK_ERROR | 1 | 网络错误。 |
16045| FORMAT_ERROR  | 2 | 媒体格式错误。 |
16046| DECODE_ERROR  | 3 | 解码错误。 |
16047
16048## NativeMediaPlayerHandler<sup>12+<sup>
16049
16050[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。
16051应用通过该对象,将播放器的状态报告给ArkWeb内核。
16052
16053### handleStatusChanged<sup>12+<sup>
16054
16055handleStatusChanged(status: PlaybackStatus): void
16056
16057当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。
16058
16059**系统能力:** SystemCapability.Web.Webview.Core
16060
16061**参数:**
16062
16063| 参数名 | 类型 | 必填 | 说明 |
16064|--------|------|------|------|
16065| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 |
16066
16067**示例:**
16068
16069完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16070
16071### handleVolumeChanged<sup>12+<sup>
16072
16073handleVolumeChanged(volume: number): void
16074
16075当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。
16076
16077**系统能力:** SystemCapability.Web.Webview.Core
16078
16079**参数:**
16080
16081| 参数名 | 类型 | 必填 | 说明 |
16082|--------|------|------|------|
16083| volume | number | 是 | 播放器的音量。 |
16084
16085**示例:**
16086
16087完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16088
16089### handleMutedChanged<sup>12+<sup>
16090
16091handleMutedChanged(muted: boolean): void
16092
16093当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。
16094
16095**系统能力:** SystemCapability.Web.Webview.Core
16096
16097**参数:**
16098
16099| 参数名 | 类型 | 必填 | 说明 |
16100|--------|------|------|------|
16101| muted | boolean | 是 | 当前播放器是否静音。<br>true表示当前播放器静音,false表示当前播放器未静音。 |
16102
16103**示例:**
16104
16105完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16106
16107### handlePlaybackRateChanged<sup>12+<sup>
16108
16109handlePlaybackRateChanged(playbackRate: number): void
16110
16111当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。
16112
16113**系统能力:** SystemCapability.Web.Webview.Core
16114
16115**参数:**
16116
16117| 参数名 | 类型 | 必填 | 说明 |
16118|--------|------|------|------|
16119| playbackRate | number | 是 | 播放速率。 |
16120
16121**示例:**
16122
16123完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16124
16125### handleDurationChanged<sup>12+<sup>
16126
16127handleDurationChanged(duration: number): void
16128
16129当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。
16130
16131**系统能力:** SystemCapability.Web.Webview.Core
16132
16133**参数:**
16134
16135| 参数名 | 类型 | 必填 | 说明 |
16136|--------|------|------|------|
16137| duration | number | 是 | 媒体的总时长。单位: 秒 。 |
16138
16139**示例:**
16140
16141完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16142
16143### handleTimeUpdate<sup>12+<sup>
16144
16145handleTimeUpdate(currentPlayTime: number): void
16146
16147当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。
16148
16149**系统能力:** SystemCapability.Web.Webview.Core
16150
16151**参数:**
16152
16153| 参数名 | 类型 | 必填 | 说明 |
16154|--------|------|------|------|
16155| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。  |
16156
16157**示例:**
16158
16159完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16160
16161### handleBufferedEndTimeChanged<sup>12+<sup>
16162
16163handleBufferedEndTimeChanged(bufferedEndTime: number): void
16164
16165当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。
16166
16167**系统能力:** SystemCapability.Web.Webview.Core
16168
16169**参数:**
16170
16171| 参数名 | 类型 | 必填 | 说明 |
16172|--------|------|------|------|
16173| bufferedEndTime | number | 是 | 媒体缓冲的时长。 |
16174
16175**示例:**
16176
16177完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16178
16179### handleEnded<sup>12+<sup>
16180
16181handleEnded(): void
16182
16183当媒体播放结束时,调用该方法通知给 ArkWeb 内核。
16184
16185**系统能力:** SystemCapability.Web.Webview.Core
16186
16187**示例:**
16188
16189完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16190
16191### handleNetworkStateChanged<sup>12+<sup>
16192
16193handleNetworkStateChanged(state: NetworkState): void
16194
16195当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。
16196
16197**系统能力:** SystemCapability.Web.Webview.Core
16198
16199**参数:**
16200
16201| 参数名 | 类型 | 必填 | 说明 |
16202|--------|------|------|------|
16203| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 |
16204
16205**示例:**
16206
16207完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16208
16209### handleReadyStateChanged<sup>12+<sup>
16210
16211handleReadyStateChanged(state: ReadyState): void
16212
16213当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。
16214
16215**系统能力:** SystemCapability.Web.Webview.Core
16216
16217**参数:**
16218
16219| 参数名 | 类型 | 必填 | 说明 |
16220|--------|------|------|------|
16221| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 |
16222
16223**示例:**
16224
16225完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16226
16227### handleFullscreenChanged<sup>12+<sup>
16228
16229handleFullscreenChanged(fullscreen: boolean): void
16230
16231当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。
16232
16233**系统能力:** SystemCapability.Web.Webview.Core
16234
16235**参数:**
16236
16237| 参数名 | 类型 | 必填 | 说明 |
16238|--------|------|------|------|
16239| fullscreen | boolean | 是 | 是否全屏。<br>true表示全屏,false表示未全屏。 |
16240
16241**示例:**
16242
16243完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16244
16245### handleSeeking<sup>12+<sup>
16246
16247handleSeeking(): void
16248
16249当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。
16250
16251**系统能力:** SystemCapability.Web.Webview.Core
16252
16253**示例:**
16254
16255完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16256
16257### handleSeekFinished<sup>12+<sup>
16258
16259handleSeekFinished(): void
16260
16261当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。
16262
16263**系统能力:** SystemCapability.Web.Webview.Core
16264
16265**示例:**
16266
16267完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16268
16269### handleError<sup>12+<sup>
16270
16271handleError(error: MediaError, errorMessage: string): void
16272
16273当播放器发生错误时, 调用该方法通知 ArkWeb 内核。
16274
16275**系统能力:** SystemCapability.Web.Webview.Core
16276
16277**参数:**
16278
16279| 参数名 | 类型 | 必填 | 说明 |
16280|--------|------|------|------|
16281| error | [MediaError](#mediaerror12) | 是 | 错误类型。 |
16282| errorMessage | string | 是 | 错误的详细描述。 |
16283
16284**示例:**
16285
16286完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16287
16288### handleVideoSizeChanged<sup>12+<sup>
16289
16290handleVideoSizeChanged(width: number, height: number): void
16291
16292当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。
16293
16294**系统能力:** SystemCapability.Web.Webview.Core
16295
16296**参数:**
16297
16298| 参数名 | 类型 | 必填 | 说明 |
16299|--------|------|------|------|
16300| width  | number | 是 | 视频的宽。 |
16301| height | number | 是 | 视频的高。 |
16302
16303**示例:**
16304
16305完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16306
16307## SuspendType<sup>12+<sup>
16308
16309表示播放器的挂起类型。
16310
16311**系统能力:** SystemCapability.Web.Webview.Core
16312
16313| 名称 | 值 | 说明 |
16314|------|----|------|
16315| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 |
16316| ENTER_BACKGROUND         | 1 | 页面进后台。 |
16317| AUTO_CLEANUP             | 2 | 系统自动清理。 |
16318
16319## NativeMediaPlayerBridge<sup>12+<sup>
16320
16321[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。
16322接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。
16323ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。
16324
16325### updateRect<sup>12+<sup>
16326
16327updateRect(x: number, y: number, width: number, height: number): void
16328
16329更新 surface 位置信息。
16330
16331**系统能力:** SystemCapability.Web.Webview.Core
16332
16333**参数:**
16334
16335| 参数名 | 类型 | 必填 | 说明 |
16336|--------|------|------|------|
16337| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 |
16338| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 |
16339| width  | number | 是 | surface 的宽度。 |
16340| height | number | 是 | surface 的高度。 |
16341
16342**示例:**
16343
16344完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16345
16346### play<sup>12+<sup>
16347
16348play(): void
16349
16350播放视频。
16351
16352**系统能力:** SystemCapability.Web.Webview.Core
16353
16354**示例:**
16355
16356完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16357
16358### pause<sup>12+<sup>
16359
16360pause(): void
16361
16362暂停播放。
16363
16364**系统能力:** SystemCapability.Web.Webview.Core
16365
16366**示例:**
16367
16368完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16369
16370### seek<sup>12+<sup>
16371
16372seek(targetTime: number): void
16373
16374播放跳转到某个时间点。
16375
16376**系统能力:** SystemCapability.Web.Webview.Core
16377
16378**参数:**
16379
16380| 参数名 | 类型 | 必填 | 说明 |
16381|--------|------|------|------|
16382| targetTime | number | 是 | 单位: 秒。 |
16383
16384**示例:**
16385
16386完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16387
16388### setVolume<sup>12+<sup>
16389
16390setVolume(volume: number): void
16391
16392设置播放器音量值。
16393取值范围: [0, 1.0]
16394
16395**参数:**
16396
16397| 参数名 | 类型 | 必填 | 说明 |
16398|--------|------|------|------|
16399| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 |
16400
16401**系统能力:** SystemCapability.Web.Webview.Core
16402
16403**示例:**
16404
16405完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16406
16407### setMuted<sup>12+<sup>
16408
16409setMuted(muted: boolean): void
16410
16411设置静音状态。
16412
16413**系统能力:** SystemCapability.Web.Webview.Core
16414
16415**参数:**
16416
16417| 参数名 | 类型 | 必填 | 说明 |
16418|--------|------|------|------|
16419| muted | boolean | 是 | 是否静音。<br>true表示静音,false表示未静音。 |
16420
16421**示例:**
16422
16423完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16424
16425### setPlaybackRate<sup>12+<sup>
16426
16427setPlaybackRate(playbackRate: number): void
16428
16429设置播放速度。
16430取值范围: [0, 10.0]
16431
16432**系统能力:** SystemCapability.Web.Webview.Core
16433
16434**参数:**
16435
16436| 参数名 | 类型 | 必填 | 说明 |
16437|--------|------|------|------|
16438| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 |
16439
16440**示例:**
16441
16442完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16443
16444### release<sup>12+<sup>
16445
16446release(): void
16447
16448销毁播放器。
16449
16450**系统能力:** SystemCapability.Web.Webview.Core
16451
16452**示例:**
16453
16454完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16455
16456### enterFullscreen<sup>12+<sup>
16457
16458enterFullscreen(): void
16459
16460播放器进入全屏。
16461
16462**系统能力:** SystemCapability.Web.Webview.Core
16463
16464**示例:**
16465
16466完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16467
16468### exitFullscreen<sup>12+<sup>
16469
16470exitFullscreen(): void
16471
16472播放器退出全屏。
16473
16474**系统能力:** SystemCapability.Web.Webview.Core
16475
16476**示例:**
16477
16478完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16479
16480### resumePlayer<sup>12+<sup>
16481
16482resumePlayer?(): void
16483
16484通知应用重建应用内播放器,并恢复应用内播放器的状态信息。
16485
16486**系统能力:** SystemCapability.Web.Webview.Core
16487
16488**示例:**
16489
16490完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16491
16492### suspendPlayer<sup>12+<sup>
16493
16494suspendPlayer?(type: SuspendType): void
16495
16496通知应用销毁应用内播放器,并保存应用内播放器的状态信息。
16497
16498**系统能力:** SystemCapability.Web.Webview.Core
16499
16500**参数:**
16501
16502| 参数名 | 类型 | 必填 | 说明 |
16503|--------|------|------|------|
16504| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。|
16505
16506**示例:**
16507
16508完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16509
16510## MediaType<sup>12+<sup>
16511
16512表示媒体类型。
16513
16514**系统能力:** SystemCapability.Web.Webview.Core
16515
16516| 名称 | 值 | 说明 |
16517|------|----|------|
16518| VIDEO | 0 | 视频。 |
16519| AUDIO | 1 | 音频。 |
16520
16521## SourceType<sup>12+<sup>
16522
16523表示媒体源的类型。
16524
16525**系统能力:** SystemCapability.Web.Webview.Core
16526
16527| 名称 | 值 | 说明 |
16528|------|----|------|
16529| URL | 0 | 媒体源的类型是 URL 。 |
16530| MSE | 1 | 媒体源的类型是 blob 。 |
16531
16532## MediaSourceInfo<sup>12+<sup>
16533
16534表示媒体源的信息。
16535
16536**系统能力:** SystemCapability.Web.Webview.Core
16537
16538| 名称 | 类型 | 必填 | 说明 |
16539|------|------|------|------|
16540| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 |
16541| source | string | 是 | 媒体源地址。 |
16542| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 |
16543
16544## NativeMediaPlayerSurfaceInfo<sup>12+<sup>
16545
16546[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。
16547
16548**系统能力:** SystemCapability.Web.Webview.Core
16549
16550| 名称 | 类型 | 必填 | 说明 |
16551|------|------|------|------|
16552| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 |
16553| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 |
16554
16555## Preload<sup>12+<sup>
16556
16557播放器预加载媒体数据。
16558
16559**系统能力:** SystemCapability.Web.Webview.Core
16560
16561| 名称 | 值 | 说明 |
16562|------|----|------|
16563| NONE     | 0 | 不预加载。 |
16564| METADATA | 1 | 只预加载媒体的元数据。 |
16565| AUTO     | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 |
16566
16567## MediaInfo<sup>12+<sup>
16568
16569[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。
16570包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。
16571
16572**系统能力:** SystemCapability.Web.Webview.Core
16573
16574| 名称 | 类型 | 必填 | 说明 |
16575|------|------|------|------|
16576| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。|
16577| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 |
16578| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 |
16579| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 |
16580| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。<br>true表示有,false表示没有。 |
16581| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 |
16582| muted | boolean | 是 | 是否要求静音播放。<br>true表示静音播放,false表示未静音播放。 |
16583| posterUrl | string | 是 | 海报的地址。 |
16584| preload | [Preload](#preload12) | 是 | 是否需要预加载。 |
16585| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 |
16586| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 |
16587
16588
16589## CreateNativeMediaPlayerCallback<sup>12+<sup>
16590
16591type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge
16592
16593[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。
16594一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。
16595
16596**系统能力:** SystemCapability.Web.Webview.Core
16597
16598**参数:**
16599
16600| 参数名 | 类型 | 必填 | 说明 |
16601|--------|------|------|------|
16602| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 |
16603| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 |
16604
16605**返回值:**
16606
16607| 类型 | 说明 |
16608|------|------|
16609| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 |
16610
16611**示例:**
16612
16613完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16614
16615## OfflineResourceMap<sup>12+</sup>
16616
16617本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。
16618
16619**系统能力:** SystemCapability.Web.Webview.Core
16620
16621| 名称        | 类型   | 可读 | 可写 |说明                 |
16622| ----------- | ------ | -----|------|------------------- |
16623| urlList | Array\<string\> | 是   | 是   | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。      |
16624| resource | Uint8Array | 是   | 是   | 本地离线资源的内容。      |
16625| responseHeaders | Array<[WebHeader](#webheader)> | 是   | 是   | 资源对应的HTTP响应头。其中提供的Cache-Control或Expires响应头将被用于控制资源在内存缓存中的有效期。如果不提供,默认的有效期为86400秒,即1天。其中提供的Content-Type响应头将被用于定义资源的MIMEType,MODULE_JS必须提供有效的MIMEType,其他类型可不提供,无默认值,不符合标准的MIMEType会导致内存缓存失效。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。      |
16626| type | [OfflineResourceType](#offlineresourcetype12) | 是   | 是   | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。      |
16627
16628## OfflineResourceType<sup>12+</sup>
16629
16630[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。
16631
16632**系统能力:** SystemCapability.Web.Webview.Core
16633
16634| 名称         | 值 | 说明                              |
16635| ------------ | -- |--------------------------------- |
16636| IMAGE  | 0 | 图片类型的资源。 |
16637| CSS       | 1 | CSS类型的资源。|
16638| CLASSIC_JS       | 2 | 通过<script src="" /\>标签加载的Javascript资源。|
16639| MODULE_JS      | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。|
16640
16641## WebResourceType<sup>12+</sup>
16642
16643资源请求的资源类型。
16644
16645**系统能力:** SystemCapability.Web.Webview.Core
16646
16647| 名称         | 值 | 说明                              |
16648| ------------ | -- |--------------------------------- |
16649| MAIN_FRAME | 0 | 顶层页面。 |
16650| SUB_FRAME | 1 | Frame或Iframe。 |
16651| STYLE_SHEET | 2 | CSS样式表。 |
16652| SCRIPT | 3 | 外部脚本。 |
16653| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 |
16654| FONT_RESOURCE | 5 | 字体。 |
16655| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 |
16656| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 |
16657| MEDIA | 8 | 媒体资源。 |
16658| WORKER | 9 | 专用工作线程的主资源。 |
16659| SHARED_WORKER | 10 | 共享工作线程的主资源。 |
16660| PREFETCH | 11 | 明确的预取请求。 |
16661| FAVICON | 12 | 网站图标。 |
16662| XHR | 13 | XMLHttpRequest。 |
16663| PING | 14 | <a ping\>/sendBeacon的Ping请求。 |
16664| SERVICE_WORKER | 15 | service worker的主资源。 |
16665| CSP_REPORT | 16 | 内容安全策略违规报告。 |
16666| PLUGIN_RESOURCE | 17 | 插件请求的资源。 |
16667| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 |
16668| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 |
16669
16670## RectEvent<sup>12+<sup>
16671
16672矩形定义。
16673
16674**系统能力:** SystemCapability.Web.Webview.Core
16675
16676| 名称           | 类型       | 可读 | 可写 | 说明                         |
16677| -------------- | --------- | ---- | ---- | ---------------------------- |
16678| x  | number   | 是   | 是   | 矩形区域左上角x坐标。    |
16679| y  | number   | 是   | 是   | 矩形区域左上角y坐标。    |
16680| width  | number   | 是   | 是   | 矩形的宽度。    |
16681| height  | number   | 是   | 是   | 矩形的高度。    |
16682
16683## BackForwardCacheSupportedFeatures<sup>12+<sup>
16684
16685选择性允许使用以下特性的页面进入前进后退缓存。完整示例代码参考[enableBackForwardCache](#enablebackforwardcache12)。
16686
16687**系统能力:** SystemCapability.Web.Webview.Core
16688
16689| 名称 | 类型 | 必填 | 说明 |
16690|------|------|------|------|
16691| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存。<br>如果设置为允许,需要维护为同层渲染元素创建的系统控件的生命周期,避免造成泄漏。<br>true:允许,false:不允许。<br>默认值:false。 |
16692| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存。<br>如果设置为允许,需要维护为视频元素创建的系统控件的生命周期,避免造成泄漏。<br>true:允许,false:不允许。<br>默认值:false。|
16693
16694### constructor<sup>12+</sup>
16695
16696constructor()
16697
16698BackForwardCacheOptions的构造函数。
16699
16700**系统能力:** SystemCapability.Web.Webview.Core
16701
16702## BackForwardCacheOptions<sup>12+<sup>
16703
16704前进后退缓存相关设置对象,用来控制Web组件前进后退缓存相关选项。完整示例代码参考[BackForwardCacheOptions](#backforwardcacheoptions12)。
16705
16706**系统能力:** SystemCapability.Web.Webview.Core
16707
16708| 名称 | 类型 | 必填 | 说明 |
16709|------|------|------|------|
16710| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 |
16711| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。|
16712
16713### constructor<sup>12+</sup>
16714
16715constructor()
16716
16717BackForwardCacheOptions的构造函数。
16718
16719**系统能力:** SystemCapability.Web.Webview.Core
16720
16721## AdsBlockManager<sup>12+</sup>
16722
16723通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。
16724
16725### setAdsBlockRules<sup>12+</sup>
16726
16727static setAdsBlockRules(rulesFile: string, replace: boolean): void
16728
16729向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。
16730
16731> **说明:**
16732>
16733> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。
16734
16735**系统能力:** SystemCapability.Web.Webview.Core
16736
16737**参数:**
16738
16739| 参数名     | 类型   | 必填 | 说明                               |
16740| ---------- | ------ | ---- | -------------------------------- |
16741| rulesFile | string | 是   | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 |
16742| replace   | boolean | 是   | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 |
16743
16744**错误码:**
16745
16746> **说明:**
16747>
16748> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
16749
16750以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16751
16752| 错误码ID | 错误信息                  |
16753| -------- | ----------------------- |
16754|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16755|  801 | Capability not supported. |
16756
16757**示例:**
16758
16759```ts
16760// xxx.ets
16761import { webview } from '@kit.ArkWeb';
16762import { picker, fileUri } from '@kit.CoreFileKit';
16763
16764// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中
16765@Entry
16766@Component
16767struct WebComponent {
16768  controller: webview.WebviewController = new webview.WebviewController();
16769
16770  build() {
16771    Row() {
16772      Flex() {
16773        Button({ type: ButtonType.Capsule }) {
16774          Text("setAdsBlockRules")
16775        }
16776        .onClick(() => {
16777          try {
16778            let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions();
16779            let documentPicker: ESObject = new picker.DocumentViewPicker();
16780            documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => {
16781              if (documentSelectResult && documentSelectResult.length > 0) {
16782                let fileRealPath = new fileUri.FileUri(documentSelectResult[0]);
16783                console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath);
16784                webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true);
16785              }
16786            })
16787          } catch (err) {
16788            console.error('DocumentViewPicker.select failed with err:' + err);
16789          }
16790        })
16791      }
16792    }
16793  }
16794}
16795```
16796
16797### addAdsBlockDisallowedList<sup>12+</sup>
16798
16799static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16800
16801向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。
16802
16803> **说明:**
16804>
16805> 此接口设置的域名不会持久化,应用重启需要重新设置。
16806>
16807> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。
16808
16809**系统能力:** SystemCapability.Web.Webview.Core
16810
16811**参数:**
16812
16813| 参数名     | 类型   | 必填 | 说明                               |
16814| ---------- | ------ | ---- | -------------------------------- |
16815| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16816
16817**错误码:**
16818
16819> **说明:**
16820>
16821> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
16822
16823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16824
16825| 错误码ID | 错误信息                  |
16826| -------- | ----------------------- |
16827|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16828|  801 | Capability not supported. |
16829
16830**示例:**
16831
16832```ts
16833// xxx.ets
16834import { webview } from '@kit.ArkWeb';
16835
16836// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16837@Entry
16838@Component
16839struct WebComponent {
16840  main_url: string = 'https://www.example.com';
16841  text_input_controller: TextInputController = new TextInputController();
16842  controller: webview.WebviewController = new webview.WebviewController();
16843  @State input_text: string = 'https://www.example.com';
16844
16845  build() {
16846    Column() {
16847      Row() {
16848        Flex() {
16849          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16850            .id("input_url")
16851            .height(40)
16852            .margin(5)
16853            .borderColor(Color.Blue)
16854            .onChange((value: string) => {
16855              this.input_text = value;
16856            })
16857
16858          Button({type: ButtonType.Capsule}) { Text("Go") }
16859          .onClick(() => {
16860            this.controller.loadUrl(this.input_text);
16861          })
16862
16863          Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") }
16864          .onClick(() => {
16865            let arrDomainSuffixes = new Array<string>();
16866            arrDomainSuffixes.push('example.com');
16867            arrDomainSuffixes.push('abcdefg.cn');
16868            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes);
16869          })
16870        }
16871      }
16872      Web({ src: this.main_url, controller: this.controller })
16873        .onControllerAttached(()=>{
16874          this.controller.enableAdsBlock(true);
16875        })
16876    }
16877  }
16878}
16879```
16880
16881### removeAdsBlockDisallowedList<sup>12+</sup>
16882
16883static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16884
16885从AdsBlockManager的DisallowedList中删除一组域名。
16886
16887> **说明:**
16888>
16889> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16890
16891**系统能力:** SystemCapability.Web.Webview.Core
16892
16893**参数:**
16894
16895| 参数名     | 类型   | 必填 | 说明                               |
16896| ---------- | ------ | ---- | -------------------------------- |
16897| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16898
16899**错误码:**
16900
16901> **说明:**
16902>
16903> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
16904
16905以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16906
16907| 错误码ID | 错误信息                  |
16908| -------- | ----------------------- |
16909|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16910|  801 | Capability not supported. |
16911
16912**示例:**
16913
16914```ts
16915// xxx.ets
16916import { webview } from '@kit.ArkWeb';
16917
16918// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16919@Entry
16920@Component
16921struct WebComponent {
16922  main_url: string = 'https://www.example.com';
16923  text_input_controller: TextInputController = new TextInputController();
16924  controller: webview.WebviewController = new webview.WebviewController();
16925  @State input_text: string = 'https://www.example.com';
16926
16927  build() {
16928    Column() {
16929      Row() {
16930        Flex() {
16931          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16932            .id("input_url")
16933            .height(40)
16934            .margin(5)
16935            .borderColor(Color.Blue)
16936            .onChange((value: string) => {
16937              this.input_text = value;
16938            })
16939
16940          Button({type: ButtonType.Capsule}) { Text("Go") }
16941          .onClick(() => {
16942            this.controller.loadUrl(this.input_text);
16943          })
16944
16945          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") }
16946          .onClick(() => {
16947            let arrDomainSuffixes = new Array<string>();
16948            arrDomainSuffixes.push('example.com');
16949            arrDomainSuffixes.push('abcdefg.cn');
16950            webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes);
16951          })
16952        }
16953      }
16954      Web({ src: this.main_url, controller: this.controller })
16955        .onControllerAttached(()=>{
16956          this.controller.enableAdsBlock(true);
16957        })
16958    }
16959  }
16960}
16961```
16962
16963### clearAdsBlockDisallowedList<sup>12+</sup>
16964
16965static clearAdsBlockDisallowedList(): void
16966
16967清空AdsBlockManager的DisallowedList。
16968
16969**系统能力:** SystemCapability.Web.Webview.Core
16970
16971**错误码:**
16972
16973> **说明:**
16974>
16975> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
16976
16977以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16978
16979| 错误码ID | 错误信息                  |
16980| -------- | ----------------------- |
16981|  801 | Capability not supported. |
16982
16983**示例:**
16984
16985```ts
16986// xxx.ets
16987import { webview } from '@kit.ArkWeb';
16988
16989@Entry
16990@Component
16991struct WebComponent {
16992  main_url: string = 'https://www.example.com';
16993  text_input_controller: TextInputController = new TextInputController();
16994  controller: webview.WebviewController = new webview.WebviewController();
16995  @State input_text: string = 'https://www.example.com';
16996
16997  build() {
16998    Column() {
16999      Row() {
17000        Flex() {
17001          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
17002            .id("input_url")
17003            .height(40)
17004            .margin(5)
17005            .borderColor(Color.Blue)
17006            .onChange((value: string) => {
17007              this.input_text = value;
17008            })
17009
17010          Button({type: ButtonType.Capsule}) { Text("Go") }
17011          .onClick(() => {
17012            this.controller.loadUrl(this.input_text);
17013          })
17014
17015          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") }
17016          .onClick(() => {
17017            webview.AdsBlockManager.clearAdsBlockDisallowedList();
17018          })
17019        }
17020      }
17021      Web({ src: this.main_url, controller: this.controller })
17022        .onControllerAttached(()=>{
17023          this.controller.enableAdsBlock(true);
17024        })
17025    }
17026  }
17027}
17028```
17029
17030### addAdsBlockAllowedList<sup>12+</sup>
17031
17032static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
17033
17034向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。
17035
17036> **说明:**
17037>
17038> 此接口设置的域名不会持久化,应用重启需要重新设置。
17039>
17040> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。
17041
17042**系统能力:** SystemCapability.Web.Webview.Core
17043
17044**参数:**
17045
17046| 参数名     | 类型   | 必填 | 说明                               |
17047| ---------- | ------ | ---- | -------------------------------- |
17048| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
17049
17050**错误码:**
17051
17052> **说明:**
17053>
17054> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
17055
17056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
17057
17058| 错误码ID | 错误信息                  |
17059| -------- | ----------------------- |
17060|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
17061|  801 | Capability not supported. |
17062
17063**示例:**
17064
17065```ts
17066// xxx.ets
17067import { webview } from '@kit.ArkWeb';
17068
17069// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
17070@Entry
17071@Component
17072struct WebComponent {
17073  main_url: string = 'https://www.example.com';
17074  text_input_controller: TextInputController = new TextInputController();
17075  controller: webview.WebviewController = new webview.WebviewController();
17076  @State input_text: string = 'https://www.example.com';
17077
17078  build() {
17079    Column() {
17080      Row() {
17081        Flex() {
17082          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
17083            .id("input_url")
17084            .height(40)
17085            .margin(5)
17086            .borderColor(Color.Blue)
17087            .onChange((value: string) => {
17088              this.input_text = value;
17089            })
17090
17091          Button({type: ButtonType.Capsule}) { Text("Go") }
17092          .onClick(() => {
17093            this.controller.loadUrl(this.input_text);
17094          })
17095
17096          Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") }
17097          .onClick(() => {
17098            let arrDisallowDomainSuffixes = new Array<string>();
17099            arrDisallowDomainSuffixes.push('example.com');
17100            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes);
17101
17102            let arrAllowedDomainSuffixes = new Array<string>();
17103            arrAllowedDomainSuffixes.push('news.example.com');
17104            webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes);
17105          })
17106        }
17107      }
17108      Web({ src: this.main_url, controller: this.controller })
17109        .onControllerAttached(()=>{
17110          this.controller.enableAdsBlock(true)
17111        })
17112    }
17113  }
17114}
17115```
17116
17117### removeAdsBlockAllowedList<sup>12+</sup>
17118
17119static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
17120
17121从AdsBlockManager的AllowedList中删除一组域名。
17122
17123> **说明:**
17124>
17125> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
17126
17127**系统能力:** SystemCapability.Web.Webview.Core
17128
17129**参数:**
17130
17131| 参数名     | 类型   | 必填 | 说明                               |
17132| ---------- | ------ | ---- | -------------------------------- |
17133| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
17134
17135**错误码:**
17136
17137> **说明:**
17138>
17139> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
17140
17141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
17142
17143| 错误码ID | 错误信息                  |
17144| -------- | ----------------------- |
17145|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
17146|  801 | Capability not supported. |
17147
17148**示例:**
17149
17150```ts
17151// xxx.ets
17152import { webview } from '@kit.ArkWeb';
17153
17154// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
17155@Entry
17156@Component
17157struct WebComponent {
17158  main_url: string = 'https://www.example.com';
17159  text_input_controller: TextInputController = new TextInputController();
17160  controller: webview.WebviewController = new webview.WebviewController();
17161  @State input_text: string = 'https://www.example.com';
17162
17163  build() {
17164    Column() {
17165      Row() {
17166        Flex() {
17167          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
17168            .id("input_url")
17169            .height(40)
17170            .margin(5)
17171            .borderColor(Color.Blue)
17172            .onChange((value: string) => {
17173              this.input_text = value;
17174            })
17175
17176          Button({type: ButtonType.Capsule}) { Text("Go") }
17177          .onClick(() => {
17178            this.controller.loadUrl(this.input_text);
17179          })
17180
17181          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") }
17182          .onClick(() => {
17183            let arrDomainSuffixes = new Array<string>();
17184            arrDomainSuffixes.push('example.com');
17185            arrDomainSuffixes.push('abcdefg.cn');
17186            webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes);
17187          })
17188        }
17189      }
17190      Web({ src: this.main_url, controller: this.controller })
17191        .onControllerAttached(()=>{
17192          this.controller.enableAdsBlock(true);
17193        })
17194    }
17195  }
17196}
17197```
17198
17199### clearAdsBlockAllowedList<sup>12+</sup>
17200
17201static clearAdsBlockAllowedList(): void
17202
17203清空AdsBlockManager的AllowedList。
17204
17205**系统能力:** SystemCapability.Web.Webview.Core
17206
17207**错误码:**
17208
17209> **说明:**
17210>
17211> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。
17212
17213以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
17214
17215| 错误码ID | 错误信息                  |
17216| -------- | ----------------------- |
17217|  801 | Capability not supported. |
17218
17219**示例:**
17220
17221```ts
17222// xxx.ets
17223import { webview } from '@kit.ArkWeb';
17224
17225@Entry
17226@Component
17227struct WebComponent {
17228  main_url: string = 'https://www.example.com';
17229  text_input_controller: TextInputController = new TextInputController();
17230  controller: webview.WebviewController = new webview.WebviewController();
17231  @State input_text: string = 'https://www.example.com';
17232
17233
17234  build() {
17235    Column() {
17236      Row() {
17237        Flex() {
17238          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
17239            .id("input_url")
17240            .height(40)
17241            .margin(5)
17242            .borderColor(Color.Blue)
17243            .onChange((value: string) => {
17244              this.input_text = value;
17245            })
17246
17247          Button({type: ButtonType.Capsule}) { Text("Go") }
17248          .onClick(() => {
17249            this.controller.loadUrl(this.input_text);
17250          })
17251
17252          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") }
17253          .onClick(() => {
17254            webview.AdsBlockManager.clearAdsBlockAllowedList();
17255          })
17256        }
17257      }
17258      Web({ src: this.main_url, controller: this.controller })
17259      .onControllerAttached(()=>{
17260        this.controller.enableAdsBlock(true);
17261      })
17262    }
17263  }
17264}
17265```
17266
17267## SnapshotInfo<sup>12+</sup>
17268
17269获取全量绘制结果入参。
17270
17271**系统能力:** SystemCapability.Web.Webview.Core
17272
17273| 名称 | 类型 |  必填 | 说明 |
17274|------|------|------|------|
17275| id | string | 否 | snapshot的id。|
17276| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions)  | 否 | web绘制的尺寸,最多支持16000px * 16000px, 长度单位支持px、vp、%,需保持不同参数传入长度单位一致, 默认单位vp,超过规格时返回最大规格。(示例:width:'100px', height:'200px'。或者 width:'20%', height'30%'。只写数字时单位为vp。)|
17277
17278## SnapshotResult<sup>12+</sup>
17279
17280全量绘制回调结果。
17281
17282**系统能力:** SystemCapability.Web.Webview.Core
17283
17284| 名称 | 类型 | 必填 |  说明 |
17285|------|------|--|---------|
17286| id | string | 否 | snapshot的id。|
17287| status | boolean | 否 |  snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。|
17288| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions)   | 否 | web绘制的真实尺寸,number类型,单位vp。|
17289| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。|
17290
17291> **说明:**
17292>
17293> 仅支持对渲染进程上的资源进行截图:静态图片和文本。
17294> 不支持动态视频,如果页面有视频则截图时会显示该视频的占位图片。
17295
17296## ScrollType<sup>12+</sup>
17297
17298Scroll滚动类型,用于[setScrollable](#setscrollable12)。
17299
17300**系统能力:** SystemCapability.Web.Webview.Core
17301
17302| 名称         | 值 | 说明                              |
17303| ------------ | -- |--------------------------------- |
17304| EVENT  | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。|
17305
17306## PressureLevel<sup>14+</sup>
17307
17308内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。
17309
17310**系统能力:** SystemCapability.Web.Webview.Core
17311
17312| 名称 | 值 | 说明 |
17313| ------------------------------- | - | ---------- |
17314| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 |
17315| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 |
17316
17317##  PdfConfiguration<sup>14+</sup>
17318
17319createPdf函数输入参数。
17320
17321> **说明:**
17322>
17323> 英寸与像素之间转换公式:像素 = 96 * 英寸。
17324
17325**系统能力:** SystemCapability.Web.Webview.Core
17326
17327| 名称                  | 类型    | 必填 | 说明                                                         |
17328| --------------------- | ------- | ---- | ------------------------------------------------------------ |
17329| width                 | number  | 是   | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。   |
17330| height                | number  | 是   | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。  |
17331| scale                 | number  | 否   | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 |
17332| marginTop             | number  | 是   | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17333| marginBottom          | number  | 是   | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17334| marginRight           | number  | 是   | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17335| marginLeft            | number  | 是   | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17336| shouldPrintBackground | boolean | 否   | true表示打印背景颜色,false表示不打印背景颜色。默认值:false。                            |
17337
17338## PdfData<sup>14+</sup>
17339
17340createPdf函数输出数据流类。
17341
17342> **说明:**
17343>
17344> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。
17345
17346### pdfArrayBuffer<sup>14+</sup>
17347
17348pdfArrayBuffer(): Uint8Array
17349
17350获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。
17351
17352**系统能力:** SystemCapability.Web.Webview.Core
17353
17354**返回值:**
17355
17356| 类型       | 说明     |
17357| ---------- | -------- |
17358| Uint8Array | 数据流。 |
17359
17360## ScrollOffset<sup>13+</sup>
17361
17362网页当前的滚动偏移量。
17363
17364**系统能力:** SystemCapability.Web.Webview.Core
17365
17366| 名称 | 类型   | 可读 | 可写 | 说明                                                         |
17367| ---- | ------ | ---- | ---- | ------------------------------------------------------------ |
17368| x    | number | 是   | 是   | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 |
17369| y    | number | 是   | 是   | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 |
17370