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## 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 | 是   | 设置是否启用网页调试功能。|
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](ts-basic-components-web.md#web)加载沙箱路径的示例代码。
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**系统能力:** SystemCapability.Web.Webview.Core
1212
1213**返回值:**
1214
1215| 类型    | 说明                             |
1216| ------- | -------------------------------- |
1217| boolean | 可以后退返回true,否则返回false。 |
1218
1219**错误码:**
1220
1221以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1222
1223| 错误码ID | 错误信息                                                     |
1224| -------- | ------------------------------------------------------------ |
1225| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1226
1227**示例:**
1228
1229```ts
1230// xxx.ets
1231import { webview } from '@kit.ArkWeb';
1232import { BusinessError } from '@kit.BasicServicesKit';
1233
1234@Entry
1235@Component
1236struct WebComponent {
1237  controller: webview.WebviewController = new webview.WebviewController();
1238
1239  build() {
1240    Column() {
1241      Button('accessBackward')
1242        .onClick(() => {
1243          try {
1244            let result = this.controller.accessBackward();
1245            console.log('result:' + result);
1246          } catch (error) {
1247            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1248          }
1249        })
1250      Web({ src: 'www.example.com', controller: this.controller })
1251    }
1252  }
1253}
1254```
1255
1256### backward
1257
1258backward(): void
1259
1260按照历史栈,后退一个页面。一般结合accessBackward一起使用。
1261
1262**系统能力:** SystemCapability.Web.Webview.Core
1263
1264**错误码:**
1265
1266以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1267
1268| 错误码ID | 错误信息                                                     |
1269| -------- | ------------------------------------------------------------ |
1270| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1271
1272**示例:**
1273
1274```ts
1275// xxx.ets
1276import { webview } from '@kit.ArkWeb';
1277import { BusinessError } from '@kit.BasicServicesKit';
1278
1279@Entry
1280@Component
1281struct WebComponent {
1282  controller: webview.WebviewController = new webview.WebviewController();
1283
1284  build() {
1285    Column() {
1286      Button('backward')
1287        .onClick(() => {
1288          try {
1289            this.controller.backward();
1290          } catch (error) {
1291            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1292          }
1293        })
1294      Web({ src: 'www.example.com', controller: this.controller })
1295    }
1296  }
1297}
1298```
1299
1300### onActive
1301
1302onActive(): void
1303
1304调用此接口通知Web组件进入前台激活状态。
1305<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。
1306
1307**系统能力:** SystemCapability.Web.Webview.Core
1308
1309**错误码:**
1310
1311以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1312
1313| 错误码ID | 错误信息                                                     |
1314| -------- | ------------------------------------------------------------ |
1315| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1316
1317**示例:**
1318
1319```ts
1320// xxx.ets
1321import { webview } from '@kit.ArkWeb';
1322import { BusinessError } from '@kit.BasicServicesKit';
1323
1324@Entry
1325@Component
1326struct WebComponent {
1327  controller: webview.WebviewController = new webview.WebviewController();
1328
1329  build() {
1330    Column() {
1331      Button('onActive')
1332        .onClick(() => {
1333          try {
1334            this.controller.onActive();
1335          } catch (error) {
1336            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1337          }
1338        })
1339      Web({ src: 'www.example.com', controller: this.controller })
1340    }
1341  }
1342}
1343```
1344
1345### onInactive
1346
1347onInactive(): void
1348
1349调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。
1350
1351此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。
1352
1353**系统能力:** SystemCapability.Web.Webview.Core
1354
1355**错误码:**
1356
1357以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1358
1359| 错误码ID | 错误信息                                                     |
1360| -------- | ------------------------------------------------------------ |
1361| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1362
1363**示例:**
1364
1365```ts
1366// xxx.ets
1367import { webview } from '@kit.ArkWeb';
1368import { BusinessError } from '@kit.BasicServicesKit';
1369
1370@Entry
1371@Component
1372struct WebComponent {
1373  controller: webview.WebviewController = new webview.WebviewController();
1374
1375  build() {
1376    Column() {
1377      Button('onInactive')
1378        .onClick(() => {
1379          try {
1380            this.controller.onInactive();
1381          } catch (error) {
1382            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1383          }
1384        })
1385      Web({ src: 'www.example.com', controller: this.controller })
1386    }
1387  }
1388}
1389```
1390
1391### refresh
1392refresh(): void
1393
1394调用此接口通知Web组件刷新网页。
1395
1396**系统能力:** SystemCapability.Web.Webview.Core
1397
1398**错误码:**
1399
1400以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1401
1402| 错误码ID | 错误信息                                                     |
1403| -------- | ------------------------------------------------------------ |
1404| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1405
1406**示例:**
1407
1408```ts
1409// xxx.ets
1410import { webview } from '@kit.ArkWeb';
1411import { BusinessError } from '@kit.BasicServicesKit';
1412
1413@Entry
1414@Component
1415struct WebComponent {
1416  controller: webview.WebviewController = new webview.WebviewController();
1417
1418  build() {
1419    Column() {
1420      Button('refresh')
1421        .onClick(() => {
1422          try {
1423            this.controller.refresh();
1424          } catch (error) {
1425            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1426          }
1427        })
1428      Web({ src: 'www.example.com', controller: this.controller })
1429    }
1430  }
1431}
1432```
1433
1434### accessStep
1435
1436accessStep(step: number): boolean
1437
1438当前页面是否可前进或者后退给定的step步。
1439
1440**系统能力:** SystemCapability.Web.Webview.Core
1441
1442**参数:**
1443
1444| 参数名 | 类型 | 必填 | 说明                                   |
1445| ------ | -------- | ---- | ------------------------------------------ |
1446| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1447
1448**返回值:**
1449
1450| 类型    | 说明               |
1451| ------- | ------------------ |
1452| boolean | 页面是否前进或后退 |
1453
1454**错误码:**
1455
1456以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1457
1458| 错误码ID | 错误信息                                                     |
1459| -------- | ------------------------------------------------------------ |
1460| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1461| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1462
1463**示例:**
1464
1465```ts
1466// xxx.ets
1467import { webview } from '@kit.ArkWeb';
1468import { BusinessError } from '@kit.BasicServicesKit';
1469
1470@Entry
1471@Component
1472struct WebComponent {
1473  controller: webview.WebviewController = new webview.WebviewController();
1474  @State steps: number = 2;
1475
1476  build() {
1477    Column() {
1478      Button('accessStep')
1479        .onClick(() => {
1480          try {
1481            let result = this.controller.accessStep(this.steps);
1482            console.log('result:' + result);
1483          } catch (error) {
1484            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1485          }
1486        })
1487      Web({ src: 'www.example.com', controller: this.controller })
1488    }
1489  }
1490}
1491```
1492
1493### clearHistory
1494
1495clearHistory(): void
1496
1497删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。
1498
1499**系统能力:** SystemCapability.Web.Webview.Core
1500
1501**错误码:**
1502
1503以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1504
1505| 错误码ID | 错误信息                                                     |
1506| -------- | ------------------------------------------------------------ |
1507| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1508
1509**示例:**
1510
1511```ts
1512// xxx.ets
1513import { webview } from '@kit.ArkWeb';
1514import { BusinessError } from '@kit.BasicServicesKit';
1515
1516@Entry
1517@Component
1518struct WebComponent {
1519  controller: webview.WebviewController = new webview.WebviewController();
1520
1521  build() {
1522    Column() {
1523      Button('clearHistory')
1524        .onClick(() => {
1525          try {
1526            this.controller.clearHistory();
1527          } catch (error) {
1528            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1529          }
1530        })
1531      Web({ src: 'www.example.com', controller: this.controller })
1532    }
1533  }
1534}
1535```
1536
1537### getHitTest
1538
1539getHitTest(): WebHitTestType
1540
1541获取当前被点击区域的元素类型。
1542
1543**系统能力:** SystemCapability.Web.Webview.Core
1544
1545**返回值:**
1546
1547| 类型                                                         | 说明                   |
1548| ------------------------------------------------------------ | ---------------------- |
1549| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1550
1551**错误码:**
1552
1553以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1554
1555| 错误码ID | 错误信息                                                     |
1556| -------- | ------------------------------------------------------------ |
1557| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1558
1559**示例:**
1560
1561```ts
1562// xxx.ets
1563import { webview } from '@kit.ArkWeb';
1564import { BusinessError } from '@kit.BasicServicesKit';
1565
1566@Entry
1567@Component
1568struct WebComponent {
1569  controller: webview.WebviewController = new webview.WebviewController();
1570
1571  build() {
1572    Column() {
1573      Button('getHitTest')
1574        .onClick(() => {
1575          try {
1576            let hitTestType = this.controller.getHitTest();
1577            console.log("hitTestType: " + hitTestType);
1578          } catch (error) {
1579            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1580          }
1581        })
1582      Web({ src: 'www.example.com', controller: this.controller })
1583    }
1584  }
1585}
1586```
1587
1588### registerJavaScriptProxy
1589
1590registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void
1591
1592registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。
1593<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1594
1595> **说明:**
1596>
1597> - registerJavaScriptProxy需要和deleteJavaScriptRegister接口配合使用,防止内存泄漏。
1598> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。
1599> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。
1600> - 同一方法在同步与异步列表中重复注册,将默认异步调用。
1601> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。
1602
1603**系统能力:** SystemCapability.Web.Webview.Core
1604
1605**参数:**
1606
1607| 参数名     | 类型       | 必填 | 说明                                        |
1608| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1609| 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)。 |
1610| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1611| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的同步方法。                       |
1612| asyncMethodList<sup>12+</sup> | Array\<string> | 否   | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。  |
1613| permission<sup>12+</sup> | string | 否   | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。|
1614
1615**错误码:**
1616
1617以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1618
1619| 错误码ID | 错误信息                                                     |
1620| -------- | ------------------------------------------------------------ |
1621| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1622| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1623
1624**示例:**
1625
1626```ts
1627// xxx.ets
1628import { webview } from '@kit.ArkWeb';
1629import { BusinessError } from '@kit.BasicServicesKit';
1630
1631class TestObj {
1632  constructor() {
1633  }
1634
1635  test(testStr:string): string {
1636    console.log('Web Component str' + testStr);
1637    return testStr;
1638  }
1639
1640  toString(): void {
1641    console.log('Web Component toString');
1642  }
1643
1644  testNumber(testNum:number): number {
1645    console.log('Web Component number' + testNum);
1646    return testNum;
1647  }
1648
1649  asyncTestBool(testBol:boolean): void {
1650    console.log('Web Component boolean' + testBol);
1651  }
1652}
1653
1654class WebObj {
1655  constructor() {
1656  }
1657
1658  webTest(): string {
1659    console.log('Web test');
1660    return "Web test";
1661  }
1662
1663  webString(): void {
1664    console.log('Web test toString');
1665  }
1666}
1667
1668class AsyncObj {
1669  constructor() {
1670  }
1671
1672  asyncTest(): void {
1673    console.log('Async test');
1674  }
1675
1676  asyncString(testStr:string): void {
1677    console.log('Web async string' + testStr);
1678  }
1679}
1680
1681@Entry
1682@Component
1683struct Index {
1684  controller: webview.WebviewController = new webview.WebviewController();
1685  @State testObjtest: TestObj = new TestObj();
1686  @State webTestObj: WebObj = new WebObj();
1687  @State asyncTestObj: AsyncObj = new AsyncObj();
1688
1689  build() {
1690    Column() {
1691      Button('refresh')
1692        .onClick(() => {
1693          try {
1694            this.controller.refresh();
1695          } catch (error) {
1696            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1697          }
1698        })
1699      Button('Register JavaScript To Window')
1700        .onClick(() => {
1701          try {
1702            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]);
1703            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
1704            this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]);
1705          } catch (error) {
1706            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1707          }
1708        })
1709      Button('deleteJavaScriptRegister')
1710        .onClick(() => {
1711          try {
1712            this.controller.deleteJavaScriptRegister("objName");
1713            this.controller.deleteJavaScriptRegister("objTestName");
1714            this.controller.deleteJavaScriptRegister("objAsyncName");
1715          } catch (error) {
1716            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1717          }
1718        })
1719      Web({ src: $rawfile('index.html'), controller: this.controller })
1720        .javaScriptAccess(true)
1721    }
1722  }
1723}
1724```
1725
1726加载的html文件。
1727```html
1728<!-- index.html -->
1729<!DOCTYPE html>
1730<html>
1731    <meta charset="utf-8">
1732    <body>
1733      <button type="button" onclick="htmlTest()">Click Me!</button>
1734      <p id="demo"></p>
1735      <p id="webDemo"></p>
1736      <p id="asyncDemo"></p>
1737    </body>
1738    <script type="text/javascript">
1739    function htmlTest() {
1740      // This function call expects to return "ArkUI Web Component"
1741      let str=objName.test("webtest data");
1742      objName.testNumber(1);
1743      objName.asyncTestBool(true);
1744      document.getElementById("demo").innerHTML=str;
1745      console.log('objName.test result:'+ str)
1746
1747      // This function call expects to return "Web test"
1748      let webStr = objTestName.webTest();
1749      document.getElementById("webDemo").innerHTML=webStr;
1750      console.log('objTestName.webTest result:'+ webStr)
1751
1752      objAsyncName.asyncTest();
1753      objAsyncName.asyncString("async test data");
1754    }
1755</script>
1756</html>
1757```
1758更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。
1759
1760### runJavaScript
1761
1762runJavaScript(script: string, callback : AsyncCallback\<string>): void
1763
1764异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1765
1766> **说明:**
1767>
1768> 离屏组件不会触发runJavaScript接口。
1769
1770**系统能力:** SystemCapability.Web.Webview.Core
1771
1772**参数:**
1773
1774| 参数名   | 类型                 | 必填 | 说明                         |
1775| -------- | -------------------- | ---- | ---------------------------- |
1776| script   | string                   | 是   | JavaScript脚本。                                             |
1777| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1778
1779**错误码:**
1780
1781以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1782
1783| 错误码ID | 错误信息                                                     |
1784| -------- | ------------------------------------------------------------ |
1785| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1786| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1787
1788**示例:**
1789
1790```ts
1791import { webview } from '@kit.ArkWeb';
1792import { BusinessError } from '@kit.BasicServicesKit';
1793
1794@Entry
1795@Component
1796struct WebComponent {
1797  controller: webview.WebviewController = new webview.WebviewController();
1798  @State webResult: string = '';
1799
1800  build() {
1801    Column() {
1802      Text(this.webResult).fontSize(20)
1803      Web({ src: $rawfile('index.html'), controller: this.controller })
1804        .javaScriptAccess(true)
1805        .onPageEnd(e => {
1806          try {
1807            this.controller.runJavaScript(
1808              'test()',
1809              (error, result) => {
1810                if (error) {
1811                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1812                  return;
1813                }
1814                if (result) {
1815                  this.webResult = result;
1816                  console.info(`The test() return value is: ${result}`);
1817                }
1818              });
1819            if (e) {
1820              console.info('url: ', e.url);
1821            }
1822          } catch (error) {
1823            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1824          }
1825        })
1826    }
1827  }
1828}
1829```
1830
1831加载的html文件。
1832```html
1833<!-- index.html -->
1834<!DOCTYPE html>
1835<html>
1836  <meta charset="utf-8">
1837  <body>
1838      Hello world!
1839  </body>
1840  <script type="text/javascript">
1841  function test() {
1842      console.log('Ark WebComponent')
1843      return "This value is from index.html"
1844  }
1845  </script>
1846</html>
1847```
1848
1849### runJavaScript
1850
1851runJavaScript(script: string): Promise\<string>
1852
1853异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1854
1855**系统能力:** SystemCapability.Web.Webview.Core
1856
1857**参数:**
1858
1859| 参数名 | 类型 | 必填 | 说明         |
1860| ------ | -------- | ---- | ---------------- |
1861| script | string   | 是   | JavaScript脚本。 |
1862
1863**返回值:**
1864
1865| 类型            | 说明                                                |
1866| --------------- | --------------------------------------------------- |
1867| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1868
1869**错误码:**
1870
1871以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1872
1873| 错误码ID | 错误信息                                                     |
1874| -------- | ------------------------------------------------------------ |
1875| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1876| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1877
1878**示例:**
1879
1880```ts
1881// xxx.ets
1882import { webview } from '@kit.ArkWeb';
1883import { BusinessError } from '@kit.BasicServicesKit';
1884
1885@Entry
1886@Component
1887struct WebComponent {
1888  controller: webview.WebviewController = new webview.WebviewController();
1889
1890  build() {
1891    Column() {
1892      Web({ src: $rawfile('index.html'), controller: this.controller })
1893        .javaScriptAccess(true)
1894        .onPageEnd(e => {
1895          try {
1896            this.controller.runJavaScript('test()')
1897              .then((result) => {
1898                console.log('result: ' + result);
1899              })
1900              .catch((error: BusinessError) => {
1901                console.error("error: " + error);
1902              })
1903            if (e) {
1904              console.info('url: ', e.url);
1905            }
1906          } catch (error) {
1907            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1908          }
1909        })
1910    }
1911  }
1912}
1913```
1914
1915加载的html文件。
1916```html
1917<!-- index.html -->
1918<!DOCTYPE html>
1919<html>
1920  <meta charset="utf-8">
1921  <body>
1922      Hello world!
1923  </body>
1924  <script type="text/javascript">
1925  function test() {
1926      console.log('Ark WebComponent')
1927      return "This value is from index.html"
1928  }
1929  </script>
1930</html>
1931```
1932
1933### runJavaScriptExt<sup>10+</sup>
1934
1935runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void
1936
1937异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1938
1939**系统能力:** SystemCapability.Web.Webview.Core
1940
1941**参数:**
1942
1943| 参数名   | 类型                 | 必填 | 说明                         |
1944| -------- | -------------------- | ---- | ---------------------------- |
1945| script   | string \| ArrayBuffer<sup>12+</sup>         | 是   | JavaScript脚本。 |
1946| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1947
1948**错误码:**
1949
1950以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1951
1952| 错误码ID | 错误信息                                                     |
1953| -------- | ------------------------------------------------------------ |
1954| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1955| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1956
1957**示例:**
1958
1959```ts
1960import { webview } from '@kit.ArkWeb';
1961import { BusinessError } from '@kit.BasicServicesKit';
1962
1963@Entry
1964@Component
1965struct WebComponent {
1966  controller: webview.WebviewController = new webview.WebviewController();
1967  @State msg1: string = '';
1968  @State msg2: string = '';
1969
1970  build() {
1971    Column() {
1972      Text(this.msg1).fontSize(20)
1973      Text(this.msg2).fontSize(20)
1974      Web({ src: $rawfile('index.html'), controller: this.controller })
1975        .javaScriptAccess(true)
1976        .onPageEnd(e => {
1977          try {
1978            this.controller.runJavaScriptExt(
1979              'test()',
1980              (error, result) => {
1981                if (error) {
1982                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
1983                  return;
1984                }
1985                if (result) {
1986                  try {
1987                    let type = result.getType();
1988                    switch (type) {
1989                      case webview.JsMessageType.STRING: {
1990                        this.msg1 = "result type:" + typeof (result.getString());
1991                        this.msg2 = "result getString:" + ((result.getString()));
1992                        break;
1993                      }
1994                      case webview.JsMessageType.NUMBER: {
1995                        this.msg1 = "result type:" + typeof (result.getNumber());
1996                        this.msg2 = "result getNumber:" + ((result.getNumber()));
1997                        break;
1998                      }
1999                      case webview.JsMessageType.BOOLEAN: {
2000                        this.msg1 = "result type:" + typeof (result.getBoolean());
2001                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2002                        break;
2003                      }
2004                      case webview.JsMessageType.ARRAY_BUFFER: {
2005                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2006                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2007                        break;
2008                      }
2009                      case webview.JsMessageType.ARRAY: {
2010                        this.msg1 = "result type:" + typeof (result.getArray());
2011                        this.msg2 = "result getArray:" + result.getArray();
2012                        break;
2013                      }
2014                      default: {
2015                        this.msg1 = "default break, type:" + type;
2016                        break;
2017                      }
2018                    }
2019                  }
2020                  catch (resError) {
2021                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2022                  }
2023                }
2024              });
2025            if (e) {
2026              console.info('url: ', e.url);
2027            }
2028          } catch (error) {
2029            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2030          }
2031        })
2032    }
2033  }
2034}
2035```
2036
2037```ts
2038// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2039import { webview } from '@kit.ArkWeb';
2040import { BusinessError } from '@kit.BasicServicesKit';
2041import { fileIo } from '@kit.CoreFileKit';
2042import { common } from '@kit.AbilityKit';
2043
2044@Entry
2045@Component
2046struct WebComponent {
2047  controller: webview.WebviewController = new webview.WebviewController();
2048  @State msg1: string = ''
2049  @State msg2: string = ''
2050
2051  build() {
2052    Column() {
2053      Text(this.msg1).fontSize(20)
2054      Text(this.msg2).fontSize(20)
2055      Button('runJavaScriptExt')
2056        .onClick(() => {
2057          try {
2058            let context = getContext(this) as common.UIAbilityContext;
2059            let filePath = context.filesDir + 'test.txt';
2060            // 新建并打开文件
2061            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2062            // 写入一段内容至文件
2063            fileIo.writeSync(file.fd, "test()");
2064            // 从文件中读取内容
2065            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2066            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2067            // 关闭文件
2068            fileIo.closeSync(file);
2069            this.controller.runJavaScriptExt(
2070              arrayBuffer,
2071              (error, result) => {
2072                if (error) {
2073                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
2074                  return;
2075                }
2076                if (result) {
2077                  try {
2078                    let type = result.getType();
2079                    switch (type) {
2080                      case webview.JsMessageType.STRING: {
2081                        this.msg1 = "result type:" + typeof (result.getString());
2082                        this.msg2 = "result getString:" + ((result.getString()));
2083                        break;
2084                      }
2085                      case webview.JsMessageType.NUMBER: {
2086                        this.msg1 = "result type:" + typeof (result.getNumber());
2087                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2088                        break;
2089                      }
2090                      case webview.JsMessageType.BOOLEAN: {
2091                        this.msg1 = "result type:" + typeof (result.getBoolean());
2092                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2093                        break;
2094                      }
2095                      case webview.JsMessageType.ARRAY_BUFFER: {
2096                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2097                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2098                        break;
2099                      }
2100                      case webview.JsMessageType.ARRAY: {
2101                        this.msg1 = "result type:" + typeof (result.getArray());
2102                        this.msg2 = "result getArray:" + result.getArray();
2103                        break;
2104                      }
2105                      default: {
2106                        this.msg1 = "default break, type:" + type;
2107                        break;
2108                      }
2109                    }
2110                  }
2111                  catch (resError) {
2112                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2113                  }
2114                }
2115              });
2116          } catch (error) {
2117            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2118          }
2119        })
2120      Web({ src: $rawfile('index.html'), controller: this.controller })
2121        .javaScriptAccess(true)
2122    }
2123  }
2124}
2125```
2126
2127加载的html文件。
2128```html
2129<!-- index.html -->
2130<!DOCTYPE html>
2131<html lang="en-gb">
2132<body>
2133<h1>run JavaScript Ext demo</h1>
2134</body>
2135<script type="text/javascript">
2136function test() {
2137  return "hello, world";
2138}
2139</script>
2140</html>
2141```
2142
2143### runJavaScriptExt<sup>10+</sup>
2144
2145runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt>
2146
2147异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
2148
2149**系统能力:** SystemCapability.Web.Webview.Core
2150
2151**参数:**
2152
2153| 参数名 | 类型 | 必填 | 说明         |
2154| ------ | -------- | ---- | ---------------- |
2155| script | string \| ArrayBuffer<sup>12+</sup> | 是   | JavaScript脚本。 |
2156
2157**返回值:**
2158
2159| 类型            | 说明                                                |
2160| --------------- | --------------------------------------------------- |
2161| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
2162
2163**错误码:**
2164
2165以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2166
2167| 错误码ID | 错误信息                                                     |
2168| -------- | ------------------------------------------------------------ |
2169| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2170| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2171
2172**示例:**
2173
2174```ts
2175// xxx.ets
2176import { webview } from '@kit.ArkWeb';
2177import { BusinessError } from '@kit.BasicServicesKit';
2178
2179@Entry
2180@Component
2181struct WebComponent {
2182  controller: webview.WebviewController = new webview.WebviewController();
2183  @State webResult: string = '';
2184  @State msg1: string = '';
2185  @State msg2: string = '';
2186
2187  build() {
2188    Column() {
2189      Text(this.webResult).fontSize(20)
2190      Text(this.msg1).fontSize(20)
2191      Text(this.msg2).fontSize(20)
2192      Web({ src: $rawfile('index.html'), controller: this.controller })
2193        .javaScriptAccess(true)
2194        .onPageEnd(() => {
2195          this.controller.runJavaScriptExt('test()')
2196            .then((result) => {
2197              try {
2198                let type = result.getType();
2199                switch (type) {
2200                  case webview.JsMessageType.STRING: {
2201                    this.msg1 = "result type:" + typeof (result.getString());
2202                    this.msg2 = "result getString:" + ((result.getString()));
2203                    break;
2204                  }
2205                  case webview.JsMessageType.NUMBER: {
2206                    this.msg1 = "result type:" + typeof (result.getNumber());
2207                    this.msg2 = "result getNumber:" + ((result.getNumber()));
2208                    break;
2209                  }
2210                  case webview.JsMessageType.BOOLEAN: {
2211                    this.msg1 = "result type:" + typeof (result.getBoolean());
2212                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2213                    break;
2214                  }
2215                  case webview.JsMessageType.ARRAY_BUFFER: {
2216                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2217                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2218                    break;
2219                  }
2220                  case webview.JsMessageType.ARRAY: {
2221                    this.msg1 = "result type:" + typeof (result.getArray());
2222                    this.msg2 = "result getArray:" + result.getArray();
2223                    break;
2224                  }
2225                  default: {
2226                    this.msg1 = "default break, type:" + type;
2227                    break;
2228                  }
2229                }
2230              }
2231              catch (resError) {
2232                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2233              }
2234            }).catch((error: BusinessError) => {
2235            console.error("error: " + error);
2236          })
2237        })
2238    }
2239  }
2240}
2241```
2242
2243```ts
2244// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2245import { webview } from '@kit.ArkWeb';
2246import { BusinessError } from '@kit.BasicServicesKit';
2247import { fileIo } from '@kit.CoreFileKit';
2248import { common } from '@kit.AbilityKit';
2249
2250@Entry
2251@Component
2252struct WebComponent {
2253  controller: webview.WebviewController = new webview.WebviewController();
2254  @State msg1: string = '';
2255  @State msg2: string = '';
2256
2257  build() {
2258    Column() {
2259      Text(this.msg1).fontSize(20)
2260      Text(this.msg2).fontSize(20)
2261      Button('runJavaScriptExt')
2262        .onClick(() => {
2263          try {
2264            let context = getContext(this) as common.UIAbilityContext;
2265            let filePath = context.filesDir + 'test.txt';
2266            // 新建并打开文件
2267            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2268            // 写入一段内容至文件
2269            fileIo.writeSync(file.fd, "test()");
2270            // 从文件中读取内容
2271            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2272            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2273            // 关闭文件
2274            fileIo.closeSync(file);
2275            this.controller.runJavaScriptExt(arrayBuffer)
2276              .then((result) => {
2277                try {
2278                  let type = result.getType();
2279                  switch (type) {
2280                    case webview.JsMessageType.STRING: {
2281                      this.msg1 = "result type:" + typeof (result.getString());
2282                      this.msg2 = "result getString:" + ((result.getString()));
2283                      break;
2284                    }
2285                    case webview.JsMessageType.NUMBER: {
2286                      this.msg1 = "result type:" + typeof (result.getNumber());
2287                      this.msg2 = "result getNumber:" + ((result.getNumber()));
2288                      break;
2289                    }
2290                    case webview.JsMessageType.BOOLEAN: {
2291                      this.msg1 = "result type:" + typeof (result.getBoolean());
2292                      this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2293                      break;
2294                    }
2295                    case webview.JsMessageType.ARRAY_BUFFER: {
2296                      this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2297                      this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2298                      break;
2299                    }
2300                    case webview.JsMessageType.ARRAY: {
2301                      this.msg1 = "result type:" + typeof (result.getArray());
2302                      this.msg2 = "result getArray:" + result.getArray();
2303                      break;
2304                    }
2305                    default: {
2306                      this.msg1 = "default break, type:" + type;
2307                      break;
2308                    }
2309                  }
2310                }
2311                catch (resError) {
2312                  console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2313                }
2314              })
2315              .catch((error: BusinessError) => {
2316                console.error("error: " + error);
2317              })
2318          } catch (error) {
2319            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2320          }
2321        })
2322      Web({ src: $rawfile('index.html'), controller: this.controller })
2323        .javaScriptAccess(true)
2324    }
2325  }
2326}
2327```
2328
2329加载的html文件。
2330```html
2331<!-- index.html -->
2332<!DOCTYPE html>
2333<html lang="en-gb">
2334<body>
2335<h1>run JavaScript Ext demo</h1>
2336</body>
2337<script type="text/javascript">
2338function test() {
2339  return "hello, world";
2340}
2341</script>
2342</html>
2343```
2344
2345### deleteJavaScriptRegister
2346
2347deleteJavaScriptRegister(name: string): void
2348
2349删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
2350
2351**系统能力:** SystemCapability.Web.Webview.Core
2352
2353**参数:**
2354
2355| 参数名 | 类型 | 必填 | 说明  |
2356| ------ | -------- | ---- | ---- |
2357| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
2358
2359**错误码:**
2360
2361以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2362
2363| 错误码ID | 错误信息                                                     |
2364| -------- | ------------------------------------------------------------ |
2365| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2366| 17100008 | Failed to delete JavaScriptProxy because it does not exist.                               |
2367| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2368
2369**示例:**
2370
2371```ts
2372// xxx.ets
2373import { webview } from '@kit.ArkWeb';
2374import { BusinessError } from '@kit.BasicServicesKit';
2375
2376class TestObj {
2377  constructor() {
2378  }
2379
2380  test(): string {
2381    return "ArkUI Web Component";
2382  }
2383
2384  toString(): void {
2385    console.log('Web Component toString');
2386  }
2387}
2388
2389@Entry
2390@Component
2391struct WebComponent {
2392  controller: webview.WebviewController = new webview.WebviewController();
2393  @State testObjtest: TestObj = new TestObj();
2394  @State name: string = 'objName';
2395  build() {
2396    Column() {
2397      Button('refresh')
2398        .onClick(() => {
2399          try {
2400            this.controller.refresh();
2401          } catch (error) {
2402            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2403          }
2404        })
2405      Button('Register JavaScript To Window')
2406        .onClick(() => {
2407          try {
2408            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
2409          } catch (error) {
2410            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2411          }
2412        })
2413      Button('deleteJavaScriptRegister')
2414        .onClick(() => {
2415          try {
2416            this.controller.deleteJavaScriptRegister(this.name);
2417          } catch (error) {
2418            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2419          }
2420        })
2421      Web({ src: $rawfile('index.html'), controller: this.controller })
2422        .javaScriptAccess(true)
2423    }
2424  }
2425}
2426```
2427
2428加载的html文件。
2429```html
2430<!-- index.html -->
2431<!DOCTYPE html>
2432<html>
2433    <meta charset="utf-8">
2434    <body>
2435      <button type="button" onclick="htmlTest()">Click Me!</button>
2436      <p id="demo"></p>
2437    </body>
2438    <script type="text/javascript">
2439    function htmlTest() {
2440      let str=objName.test();
2441      document.getElementById("demo").innerHTML=str;
2442      console.log('objName.test result:'+ str)
2443    }
2444</script>
2445</html>
2446```
2447
2448### zoom
2449
2450zoom(factor: number): void
2451
2452调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。
2453
2454**系统能力:** SystemCapability.Web.Webview.Core
2455
2456**参数:**
2457
2458| 参数名 | 类型 | 必填 | 说明 |
2459| ------ | -------- | ---- | ------------------------------------------------------------ |
2460| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 |
2461
2462**错误码:**
2463
2464以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2465
2466| 错误码ID | 错误信息                                                     |
2467| -------- | ------------------------------------------------------------ |
2468| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2469| 17100004 | Function not enabled.                                         |
2470| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2471
2472**示例:**
2473
2474```ts
2475// xxx.ets
2476import { webview } from '@kit.ArkWeb';
2477import { BusinessError } from '@kit.BasicServicesKit';
2478
2479@Entry
2480@Component
2481struct WebComponent {
2482  controller: webview.WebviewController = new webview.WebviewController();
2483  @State factor: number = 1;
2484
2485  build() {
2486    Column() {
2487      Button('zoom')
2488        .onClick(() => {
2489          try {
2490            this.controller.zoom(this.factor);
2491          } catch (error) {
2492            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2493          }
2494        })
2495      Web({ src: 'www.example.com', controller: this.controller })
2496        .zoomAccess(true)
2497    }
2498  }
2499}
2500```
2501
2502### searchAllAsync
2503
2504searchAllAsync(searchString: string): void
2505
2506异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。
2507
2508**系统能力:** SystemCapability.Web.Webview.Core
2509
2510**参数:**
2511
2512| 参数名       | 类型 | 必填 | 说明       |
2513| ------------ | -------- | ---- | -------------- |
2514| searchString | string   | 是   | 查找的关键字。 |
2515
2516**错误码:**
2517
2518以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2519
2520| 错误码ID | 错误信息                                                     |
2521| -------- | ------------------------------------------------------------ |
2522| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2523| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2524
2525**示例:**
2526
2527```ts
2528// xxx.ets
2529import { webview } from '@kit.ArkWeb';
2530import { BusinessError } from '@kit.BasicServicesKit';
2531
2532@Entry
2533@Component
2534struct WebComponent {
2535  controller: webview.WebviewController = new webview.WebviewController();
2536  @State searchString: string = "Hello World";
2537
2538  build() {
2539    Column() {
2540      Button('searchString')
2541        .onClick(() => {
2542          try {
2543            this.controller.searchAllAsync(this.searchString);
2544          } catch (error) {
2545            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2546          }
2547        })
2548      Web({ src: $rawfile('index.html'), controller: this.controller })
2549        .onSearchResultReceive(ret => {
2550          if (ret) {
2551            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2552              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2553          }
2554        })
2555    }
2556  }
2557}
2558```
2559
2560加载的html文件。
2561```html
2562<!-- index.html -->
2563<!DOCTYPE html>
2564<html>
2565  <body>
2566    <p>Hello World Highlight Hello World</p>
2567  </body>
2568</html>
2569```
2570
2571### clearMatches
2572
2573clearMatches(): void
2574
2575清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2576
2577**系统能力:** SystemCapability.Web.Webview.Core
2578
2579**错误码:**
2580
2581以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2582
2583| 错误码ID | 错误信息                                                     |
2584| -------- | ------------------------------------------------------------ |
2585| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2586
2587**示例:**
2588
2589```ts
2590// xxx.ets
2591import { webview } from '@kit.ArkWeb';
2592import { BusinessError } from '@kit.BasicServicesKit';
2593
2594@Entry
2595@Component
2596struct WebComponent {
2597  controller: webview.WebviewController = new webview.WebviewController();
2598
2599  build() {
2600    Column() {
2601      Button('clearMatches')
2602        .onClick(() => {
2603          try {
2604            this.controller.clearMatches();
2605          } catch (error) {
2606            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2607          }
2608        })
2609      Web({ src: $rawfile('index.html'), controller: this.controller })
2610    }
2611  }
2612}
2613```
2614
2615加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2616
2617### searchNext
2618
2619searchNext(forward: boolean): void
2620
2621滚动到下一个匹配的查找结果并高亮。
2622
2623**系统能力:** SystemCapability.Web.Webview.Core
2624
2625**参数:**
2626
2627| 参数名  | 类型 | 必填 | 说明               |
2628| ------- | -------- | ---- | ---------------------- |
2629| forward | boolean  | 是   | 从前向后或者逆向查找。 |
2630
2631**错误码:**
2632
2633以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2634
2635| 错误码ID | 错误信息                                                     |
2636| -------- | ------------------------------------------------------------ |
2637| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2638| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2639
2640**示例:**
2641
2642```ts
2643// xxx.ets
2644import { webview } from '@kit.ArkWeb';
2645import { BusinessError } from '@kit.BasicServicesKit';
2646
2647@Entry
2648@Component
2649struct WebComponent {
2650  controller: webview.WebviewController = new webview.WebviewController();
2651
2652  build() {
2653    Column() {
2654      Button('searchNext')
2655        .onClick(() => {
2656          try {
2657            this.controller.searchNext(true);
2658          } catch (error) {
2659            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2660          }
2661        })
2662      Web({ src: $rawfile('index.html'), controller: this.controller })
2663    }
2664  }
2665}
2666```
2667
2668加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2669
2670### clearSslCache
2671
2672clearSslCache(): void
2673
2674清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2675
2676**系统能力:** SystemCapability.Web.Webview.Core
2677
2678**错误码:**
2679
2680以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2681
2682| 错误码ID | 错误信息                                                     |
2683| -------- | ------------------------------------------------------------ |
2684| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2685
2686**示例:**
2687
2688```ts
2689// xxx.ets
2690import { webview } from '@kit.ArkWeb';
2691import { BusinessError } from '@kit.BasicServicesKit';
2692
2693@Entry
2694@Component
2695struct WebComponent {
2696  controller: webview.WebviewController = new webview.WebviewController();
2697
2698  build() {
2699    Column() {
2700      Button('clearSslCache')
2701        .onClick(() => {
2702          try {
2703            this.controller.clearSslCache();
2704          } catch (error) {
2705            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2706          }
2707        })
2708      Web({ src: 'www.example.com', controller: this.controller })
2709    }
2710  }
2711}
2712```
2713
2714### clearClientAuthenticationCache
2715
2716clearClientAuthenticationCache(): void
2717
2718清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2719
2720**系统能力:** SystemCapability.Web.Webview.Core
2721
2722**错误码:**
2723
2724以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2725
2726| 错误码ID | 错误信息                                                     |
2727| -------- | ------------------------------------------------------------ |
2728| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2729
2730**示例:**
2731
2732```ts
2733// xxx.ets
2734import { webview } from '@kit.ArkWeb';
2735import { BusinessError } from '@kit.BasicServicesKit';
2736
2737@Entry
2738@Component
2739struct WebComponent {
2740  controller: webview.WebviewController = new webview.WebviewController();
2741
2742  build() {
2743    Column() {
2744      Button('clearClientAuthenticationCache')
2745        .onClick(() => {
2746          try {
2747            this.controller.clearClientAuthenticationCache();
2748          } catch (error) {
2749            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2750          }
2751        })
2752      Web({ src: 'www.example.com', controller: this.controller })
2753    }
2754  }
2755}
2756```
2757
2758### createWebMessagePorts
2759
2760createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2761
2762创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2763
2764**系统能力:** SystemCapability.Web.Webview.Core
2765
2766**参数:**
2767
2768| 参数名 | 类型                   | 必填 | 说明                             |
2769| ------ | ---------------------- | ---- | :------------------------------|
2770| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 |
2771
2772**返回值:**
2773
2774| 类型                   | 说明              |
2775| ---------------------- | ----------------- |
2776| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 |
2777
2778**错误码:**
2779
2780以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2781
2782| 错误码ID | 错误信息                                                     |
2783| -------- | ------------------------------------------------------------ |
2784| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2785| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2786
2787**示例:**
2788
2789```ts
2790// xxx.ets
2791import { webview } from '@kit.ArkWeb';
2792import { BusinessError } from '@kit.BasicServicesKit';
2793
2794@Entry
2795@Component
2796struct WebComponent {
2797  controller: webview.WebviewController = new webview.WebviewController();
2798  ports: webview.WebMessagePort[] = [];
2799
2800  build() {
2801    Column() {
2802      Button('createWebMessagePorts')
2803        .onClick(() => {
2804          try {
2805            this.ports = this.controller.createWebMessagePorts();
2806            console.log("createWebMessagePorts size:" + this.ports.length);
2807          } catch (error) {
2808            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2809          }
2810        })
2811      Web({ src: 'www.example.com', controller: this.controller })
2812    }
2813  }
2814}
2815```
2816
2817### postMessage
2818
2819postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2820
2821发送Web消息端口到HTML。
2822
2823**系统能力:** SystemCapability.Web.Webview.Core
2824
2825**参数:**
2826
2827| 参数名 | 类型                   | 必填 | 说明                             |
2828| ------ | ---------------------- | ---- | :------------------------------- |
2829| name   | string                 | 是   | 要发送的消息名称。            |
2830| ports  | Array\<[WebMessagePort](#webmessageport)> | 是   | 要发送的消息端口。            |
2831| uri    | string                 | 是   | 接收该消息的URI。                |
2832
2833**错误码:**
2834
2835以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2836
2837| 错误码ID | 错误信息                                                     |
2838| -------- | ------------------------------------------------------------ |
2839| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2840| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2841
2842**示例:**
2843
2844```ts
2845// xxx.ets
2846import { webview } from '@kit.ArkWeb';
2847import { BusinessError } from '@kit.BasicServicesKit';
2848
2849@Entry
2850@Component
2851struct WebComponent {
2852  controller: webview.WebviewController = new webview.WebviewController();
2853  ports: webview.WebMessagePort[] = [];
2854  @State sendFromEts: string = 'Send this message from ets to HTML';
2855  @State receivedFromHtml: string = 'Display received message send from HTML';
2856
2857  build() {
2858    Column() {
2859      // 展示接收到的来自HTML的内容
2860      Text(this.receivedFromHtml)
2861      // 输入框的内容发送到html
2862      TextInput({ placeholder: 'Send this message from ets to HTML' })
2863        .onChange((value: string) => {
2864          this.sendFromEts = value;
2865        })
2866
2867      Button('postMessage')
2868        .onClick(() => {
2869          try {
2870            // 1、创建两个消息端口。
2871            this.ports = this.controller.createWebMessagePorts();
2872            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2873            this.ports[1].onMessageEvent((result: webview.WebMessage) => {
2874              let msg = 'Got msg from HTML:';
2875              if (typeof (result) == "string") {
2876                console.log("received string message from html5, string is:" + result);
2877                msg = msg + result;
2878              } else if (typeof (result) == "object") {
2879                if (result instanceof ArrayBuffer) {
2880                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2881                  msg = msg + "length is " + result.byteLength;
2882                } else {
2883                  console.log("not support");
2884                }
2885              } else {
2886                console.log("not support");
2887              }
2888              this.receivedFromHtml = msg;
2889            })
2890            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2891            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2892          } catch (error) {
2893            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2894          }
2895        })
2896
2897      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2898      Button('SendDataToHTML')
2899        .onClick(() => {
2900          try {
2901            if (this.ports && this.ports[1]) {
2902              this.ports[1].postMessageEvent(this.sendFromEts);
2903            } else {
2904              console.error(`ports is null, Please initialize first`);
2905            }
2906          } catch (error) {
2907            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2908          }
2909        })
2910      Web({ src: $rawfile('index.html'), controller: this.controller })
2911    }
2912  }
2913}
2914```
2915
2916加载的html文件。
2917```html
2918<!--index.html-->
2919<!DOCTYPE html>
2920<html>
2921<head>
2922    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2923    <title>WebView Message Port Demo</title>
2924</head>
2925
2926  <body>
2927    <h1>WebView Message Port Demo</h1>
2928    <div>
2929        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2930        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2931    </div>
2932    <p class="output">display received message send from ets</p>
2933  </body>
2934  <script src="xxx.js"></script>
2935</html>
2936```
2937
2938```js
2939//xxx.js
2940var h5Port;
2941var output = document.querySelector('.output');
2942window.addEventListener('message', function (event) {
2943    if (event.data == '__init_port__') {
2944        if (event.ports[0] != null) {
2945            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2946            h5Port.onmessage = function (event) {
2947              // 2. 接收ets侧发送过来的消息.
2948              var msg = 'Got message from ets:';
2949              var result = event.data;
2950              if (typeof(result) == "string") {
2951                console.log("received string message from html5, string is:" + result);
2952                msg = msg + result;
2953              } else if (typeof(result) == "object") {
2954                if (result instanceof ArrayBuffer) {
2955                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2956                  msg = msg + "length is " + result.byteLength;
2957                } else {
2958                  console.log("not support");
2959                }
2960              } else {
2961                console.log("not support");
2962              }
2963              output.innerHTML = msg;
2964            }
2965        }
2966    }
2967})
2968
2969// 3. 使用h5Port往ets侧发送消息.
2970function PostMsgToEts(data) {
2971    if (h5Port) {
2972      h5Port.postMessage(data);
2973    } else {
2974      console.error("h5Port is null, Please initialize first");
2975    }
2976}
2977```
2978
2979### requestFocus
2980
2981requestFocus(): void
2982
2983使当前web页面获取焦点。
2984
2985**系统能力:** SystemCapability.Web.Webview.Core
2986
2987**错误码:**
2988
2989以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2990
2991| 错误码ID | 错误信息                                                     |
2992| -------- | ------------------------------------------------------------ |
2993| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2994
2995**示例:**
2996
2997```ts
2998// xxx.ets
2999import { webview } from '@kit.ArkWeb';
3000import { BusinessError } from '@kit.BasicServicesKit';
3001
3002@Entry
3003@Component
3004struct WebComponent {
3005  controller: webview.WebviewController = new webview.WebviewController();
3006
3007  build() {
3008    Column() {
3009      Button('requestFocus')
3010        .onClick(() => {
3011          try {
3012            this.controller.requestFocus();
3013          } catch (error) {
3014            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3015          }
3016        });
3017      Web({ src: 'www.example.com', controller: this.controller })
3018    }
3019  }
3020}
3021```
3022
3023### zoomIn
3024
3025zoomIn(): void
3026
3027调用此接口将当前网页进行放大,比例为20%。
3028
3029**系统能力:** SystemCapability.Web.Webview.Core
3030
3031**错误码:**
3032
3033以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3034
3035| 错误码ID | 错误信息                                                     |
3036| -------- | ------------------------------------------------------------ |
3037| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3038| 17100004 | Function not enabled.                                         |
3039
3040**示例:**
3041
3042```ts
3043// xxx.ets
3044import { webview } from '@kit.ArkWeb';
3045import { BusinessError } from '@kit.BasicServicesKit';
3046
3047@Entry
3048@Component
3049struct WebComponent {
3050  controller: webview.WebviewController = new webview.WebviewController();
3051
3052  build() {
3053    Column() {
3054      Button('zoomIn')
3055        .onClick(() => {
3056          try {
3057            this.controller.zoomIn();
3058          } catch (error) {
3059            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3060          }
3061        })
3062      Web({ src: 'www.example.com', controller: this.controller })
3063    }
3064  }
3065}
3066```
3067
3068### zoomOut
3069
3070zoomOut(): void
3071
3072调用此接口将当前网页进行缩小,比例为20%。
3073
3074**系统能力:** SystemCapability.Web.Webview.Core
3075
3076**错误码:**
3077
3078以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3079
3080| 错误码ID | 错误信息                                                     |
3081| -------- | ------------------------------------------------------------ |
3082| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3083| 17100004 | Function not enabled.                                         |
3084
3085**示例:**
3086
3087```ts
3088// xxx.ets
3089import { webview } from '@kit.ArkWeb';
3090import { BusinessError } from '@kit.BasicServicesKit';
3091
3092@Entry
3093@Component
3094struct WebComponent {
3095  controller: webview.WebviewController = new webview.WebviewController();
3096
3097  build() {
3098    Column() {
3099      Button('zoomOut')
3100        .onClick(() => {
3101          try {
3102            this.controller.zoomOut();
3103          } catch (error) {
3104            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3105          }
3106        })
3107      Web({ src: 'www.example.com', controller: this.controller })
3108    }
3109  }
3110}
3111```
3112
3113### getHitTestValue
3114
3115getHitTestValue(): HitTestValue
3116
3117获取当前被点击区域的元素信息。
3118
3119**系统能力:** SystemCapability.Web.Webview.Core
3120
3121**返回值:**
3122
3123| 类型         | 说明                 |
3124| ------------ | -------------------- |
3125| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
3126
3127**错误码:**
3128
3129以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3130
3131| 错误码ID | 错误信息                                                     |
3132| -------- | ------------------------------------------------------------ |
3133| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3134
3135**示例:**
3136
3137```ts
3138// xxx.ets
3139import { webview } from '@kit.ArkWeb';
3140import { BusinessError } from '@kit.BasicServicesKit';
3141
3142@Entry
3143@Component
3144struct WebComponent {
3145  controller: webview.WebviewController = new webview.WebviewController();
3146
3147  build() {
3148    Column() {
3149      Button('getHitTestValue')
3150        .onClick(() => {
3151          try {
3152            let hitValue = this.controller.getHitTestValue();
3153            console.log("hitType: " + hitValue.type);
3154            console.log("extra: " + hitValue.extra);
3155          } catch (error) {
3156            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3157          }
3158        })
3159      Web({ src: 'www.example.com', controller: this.controller })
3160    }
3161  }
3162}
3163```
3164
3165### getWebId
3166
3167getWebId(): number
3168
3169获取当前Web组件的索引值,用于多个Web组件的管理。
3170
3171**系统能力:** SystemCapability.Web.Webview.Core
3172
3173**返回值:**
3174
3175| 类型   | 说明                  |
3176| ------ | --------------------- |
3177| number | 当前Web组件的索引值。 |
3178
3179**错误码:**
3180
3181以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3182
3183| 错误码ID | 错误信息                                                     |
3184| -------- | ------------------------------------------------------------ |
3185| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3186
3187**示例:**
3188
3189```ts
3190// xxx.ets
3191import { webview } from '@kit.ArkWeb';
3192import { BusinessError } from '@kit.BasicServicesKit';
3193
3194@Entry
3195@Component
3196struct WebComponent {
3197  controller: webview.WebviewController = new webview.WebviewController();
3198
3199  build() {
3200    Column() {
3201      Button('getWebId')
3202        .onClick(() => {
3203          try {
3204            let id = this.controller.getWebId();
3205            console.log("id: " + id);
3206          } catch (error) {
3207            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3208          }
3209        })
3210      Web({ src: 'www.example.com', controller: this.controller })
3211    }
3212  }
3213}
3214```
3215
3216### getUserAgent
3217
3218getUserAgent(): string
3219
3220获取当前默认用户代理。
3221
3222默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
3223
3224**系统能力:** SystemCapability.Web.Webview.Core
3225
3226**返回值:**
3227
3228| 类型   | 说明           |
3229| ------ | -------------- |
3230| string | 默认用户代理。 |
3231
3232**错误码:**
3233
3234以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3235
3236| 错误码ID | 错误信息                                                     |
3237| -------- | ------------------------------------------------------------ |
3238| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3239
3240**示例:**
3241
3242```ts
3243// xxx.ets
3244import { webview } from '@kit.ArkWeb';
3245import { BusinessError } from '@kit.BasicServicesKit';
3246
3247@Entry
3248@Component
3249struct WebComponent {
3250  controller: webview.WebviewController = new webview.WebviewController();
3251
3252  build() {
3253    Column() {
3254      Button('getUserAgent')
3255        .onClick(() => {
3256          try {
3257            let userAgent = this.controller.getUserAgent();
3258            console.log("userAgent: " + userAgent);
3259          } catch (error) {
3260            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3261          }
3262        })
3263      Web({ src: 'www.example.com', controller: this.controller })
3264    }
3265  }
3266}
3267```
3268
3269支持开发者基于默认的UserAgent去定制UserAgent。
3270```ts
3271// xxx.ets
3272import { webview } from '@kit.ArkWeb';
3273import { BusinessError } from '@kit.BasicServicesKit';
3274
3275@Entry
3276@Component
3277struct WebComponent {
3278  controller: webview.WebviewController = new webview.WebviewController();
3279  @State ua: string = "";
3280
3281  aboutToAppear(): void {
3282    webview.once('webInited', () => {
3283      try {
3284        // 应用侧用法示例,定制UserAgent。
3285        this.ua = this.controller.getUserAgent() + 'xxx';
3286        this.controller.setCustomUserAgent(this.ua);
3287      } catch (error) {
3288        console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3289      }
3290    })
3291  }
3292
3293  build() {
3294    Column() {
3295      Web({ src: 'www.example.com', controller: this.controller })
3296    }
3297  }
3298}
3299```
3300
3301### getTitle
3302
3303getTitle(): string
3304
3305获取当前网页的标题。
3306
3307**系统能力:** SystemCapability.Web.Webview.Core
3308
3309**返回值:**
3310
3311| 类型   | 说明                 |
3312| ------ | -------------------- |
3313| string | 当前网页的标题。 |
3314
3315**错误码:**
3316
3317以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3318
3319| 错误码ID | 错误信息                                                     |
3320| -------- | ------------------------------------------------------------ |
3321| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3322
3323**示例:**
3324
3325```ts
3326// xxx.ets
3327import { webview } from '@kit.ArkWeb';
3328import { BusinessError } from '@kit.BasicServicesKit';
3329
3330@Entry
3331@Component
3332struct WebComponent {
3333  controller: webview.WebviewController = new webview.WebviewController();
3334
3335  build() {
3336    Column() {
3337      Button('getTitle')
3338        .onClick(() => {
3339          try {
3340            let title = this.controller.getTitle();
3341            console.log("title: " + title);
3342          } catch (error) {
3343            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3344          }
3345        })
3346      Web({ src: 'www.example.com', controller: this.controller })
3347    }
3348  }
3349}
3350```
3351
3352### getPageHeight
3353
3354getPageHeight(): number
3355
3356获取当前网页的页面高度。
3357
3358**系统能力:** SystemCapability.Web.Webview.Core
3359
3360**返回值:**
3361
3362| 类型   | 说明                 |
3363| ------ | -------------------- |
3364| number | 当前网页的页面高度。单位:vp。 |
3365
3366**错误码:**
3367
3368以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3369
3370| 错误码ID | 错误信息                                                     |
3371| -------- | ------------------------------------------------------------ |
3372| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3373
3374**示例:**
3375
3376```ts
3377// xxx.ets
3378import { webview } from '@kit.ArkWeb';
3379import { BusinessError } from '@kit.BasicServicesKit';
3380
3381@Entry
3382@Component
3383struct WebComponent {
3384  controller: webview.WebviewController = new webview.WebviewController();
3385
3386  build() {
3387    Column() {
3388      Button('getPageHeight')
3389        .onClick(() => {
3390          try {
3391            let pageHeight = this.controller.getPageHeight();
3392            console.log("pageHeight : " + pageHeight);
3393          } catch (error) {
3394            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3395          }
3396        })
3397      Web({ src: 'www.example.com', controller: this.controller })
3398    }
3399  }
3400}
3401```
3402
3403### storeWebArchive
3404
3405storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
3406
3407以回调方式异步保存当前页面。
3408
3409**系统能力:** SystemCapability.Web.Webview.Core
3410
3411**参数:**
3412
3413| 参数名   | 类型              | 必填 | 说明                                                         |
3414| -------- | --------------------- | ---- | ------------------------------------------------------------ |
3415| baseName | string                | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3416| autoName | boolean               | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3417| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
3418
3419**错误码:**
3420
3421以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3422
3423| 错误码ID | 错误信息                                                     |
3424| -------- | ------------------------------------------------------------ |
3425| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3426| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3427| 17100003 | Invalid resource path or file type.                          |
3428
3429**示例:**
3430
3431```ts
3432// xxx.ets
3433import { webview } from '@kit.ArkWeb';
3434import { BusinessError } from '@kit.BasicServicesKit';
3435
3436@Entry
3437@Component
3438struct WebComponent {
3439  controller: webview.WebviewController = new webview.WebviewController();
3440
3441  build() {
3442    Column() {
3443      Button('storeWebArchive')
3444        .onClick(() => {
3445          try {
3446            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
3447              if (error) {
3448                console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3449                return;
3450              }
3451              if (filename != null) {
3452                console.info(`save web archive success: ${filename}`);
3453              }
3454            });
3455          } catch (error) {
3456            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3457          }
3458        })
3459      Web({ src: 'www.example.com', controller: this.controller })
3460    }
3461  }
3462}
3463```
3464
3465### storeWebArchive
3466
3467storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
3468
3469以Promise方式异步保存当前页面。
3470
3471**系统能力:** SystemCapability.Web.Webview.Core
3472
3473**参数:**
3474
3475| 参数名   | 类型 | 必填 | 说明                                                         |
3476| -------- | -------- | ---- | ------------------------------------------------------------ |
3477| baseName | string   | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3478| autoName | boolean  | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3479
3480**返回值:**
3481
3482| 类型            | 说明                                                  |
3483| --------------- | ----------------------------------------------------- |
3484| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
3485
3486**错误码:**
3487
3488以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3489
3490| 错误码ID | 错误信息                                                     |
3491| -------- | ------------------------------------------------------------ |
3492| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3493| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3494| 17100003 | Invalid resource path or file type.                          |
3495
3496**示例:**
3497
3498```ts
3499// xxx.ets
3500import { webview } from '@kit.ArkWeb';
3501import { BusinessError } from '@kit.BasicServicesKit';
3502
3503@Entry
3504@Component
3505struct WebComponent {
3506  controller: webview.WebviewController = new webview.WebviewController();
3507
3508  build() {
3509    Column() {
3510      Button('storeWebArchive')
3511        .onClick(() => {
3512          try {
3513            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3514              .then(filename => {
3515                if (filename != null) {
3516                  console.info(`save web archive success: ${filename}`)
3517                }
3518              })
3519              .catch((error: BusinessError) => {
3520                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
3521              })
3522          } catch (error) {
3523            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3524          }
3525        })
3526      Web({ src: 'www.example.com', controller: this.controller })
3527    }
3528  }
3529}
3530```
3531
3532### getUrl
3533
3534getUrl(): string
3535
3536获取当前页面的url地址。
3537
3538**系统能力:** SystemCapability.Web.Webview.Core
3539
3540**返回值:**
3541
3542| 类型   | 说明                |
3543| ------ | ------------------- |
3544| string | 当前页面的url地址。 |
3545
3546**错误码:**
3547
3548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3549
3550| 错误码ID | 错误信息                                                     |
3551| -------- | ------------------------------------------------------------ |
3552| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3553
3554**示例:**
3555
3556```ts
3557// xxx.ets
3558import { webview } from '@kit.ArkWeb';
3559import { BusinessError } from '@kit.BasicServicesKit';
3560
3561@Entry
3562@Component
3563struct WebComponent {
3564  controller: webview.WebviewController = new webview.WebviewController();
3565
3566  build() {
3567    Column() {
3568      Button('getUrl')
3569        .onClick(() => {
3570          try {
3571            let url = this.controller.getUrl();
3572            console.log("url: " + url);
3573          } catch (error) {
3574            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3575          }
3576        })
3577      Web({ src: 'www.example.com', controller: this.controller })
3578    }
3579  }
3580}
3581```
3582
3583### stop
3584
3585stop(): void
3586
3587停止页面加载。
3588
3589**系统能力:** SystemCapability.Web.Webview.Core
3590
3591**错误码:**
3592
3593以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3594
3595| 错误码ID | 错误信息                                                     |
3596| -------- | ------------------------------------------------------------ |
3597| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3598
3599**示例:**
3600
3601```ts
3602// xxx.ets
3603import { webview } from '@kit.ArkWeb';
3604import { BusinessError } from '@kit.BasicServicesKit';
3605
3606@Entry
3607@Component
3608struct WebComponent {
3609  controller: webview.WebviewController = new webview.WebviewController();
3610
3611  build() {
3612    Column() {
3613      Button('stop')
3614        .onClick(() => {
3615          try {
3616            this.controller.stop();
3617          } catch (error) {
3618            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3619          }
3620        });
3621      Web({ src: 'www.example.com', controller: this.controller })
3622    }
3623  }
3624}
3625```
3626
3627### backOrForward
3628
3629backOrForward(step: number): void
3630
3631按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3632
3633前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3634
3635**系统能力:** SystemCapability.Web.Webview.Core
3636
3637**参数:**
3638
3639| 参数名 | 类型 | 必填 | 说明               |
3640| ------ | -------- | ---- | ---------------------- |
3641| step   | number   | 是   | 需要前进或后退的步长。 |
3642
3643**错误码:**
3644
3645以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3646
3647| 错误码ID | 错误信息                                                     |
3648| -------- | ------------------------------------------------------------ |
3649| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3650| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3651
3652**示例:**
3653
3654```ts
3655// xxx.ets
3656import { webview } from '@kit.ArkWeb';
3657import { BusinessError } from '@kit.BasicServicesKit';
3658
3659@Entry
3660@Component
3661struct WebComponent {
3662  controller: webview.WebviewController = new webview.WebviewController();
3663  @State step: number = -2;
3664
3665  build() {
3666    Column() {
3667      Button('backOrForward')
3668        .onClick(() => {
3669          try {
3670            this.controller.backOrForward(this.step);
3671          } catch (error) {
3672            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3673          }
3674        })
3675      Web({ src: 'www.example.com', controller: this.controller })
3676    }
3677  }
3678}
3679```
3680
3681### scrollTo
3682
3683scrollTo(x:number, y:number, duration?:number): void
3684
3685在指定时间内,将页面滚动到指定的绝对位置。
3686
3687**系统能力:** SystemCapability.Web.Webview.Core
3688
3689**参数:**
3690
3691| 参数名 | 类型 | 必填 | 说明               |
3692| ------ | -------- | ---- | ---------------------- |
3693| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 |
3694| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。|
3695| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3696
3697**错误码:**
3698
3699以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3700
3701| 错误码ID | 错误信息                                                     |
3702| -------- | ------------------------------------------------------------ |
3703| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3704| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3705
3706**示例:**
3707
3708```ts
3709// xxx.ets
3710import { webview } from '@kit.ArkWeb';
3711import { BusinessError } from '@kit.BasicServicesKit';
3712
3713@Entry
3714@Component
3715struct WebComponent {
3716  controller: webview.WebviewController = new webview.WebviewController();
3717
3718  build() {
3719    Column() {
3720      Button('scrollTo')
3721        .onClick(() => {
3722          try {
3723            this.controller.scrollTo(50, 50, 500);
3724          } catch (error) {
3725            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3726          }
3727        })
3728        Button('stopScroll')
3729        .onClick(() => {
3730          try {
3731            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3732          } catch (error) {
3733            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3734          }
3735        })
3736      Web({ src: $rawfile('index.html'), controller: this.controller })
3737    }
3738  }
3739}
3740```
3741
3742加载的html文件。
3743```html
3744<!--index.html-->
3745<!DOCTYPE html>
3746<html>
3747<head>
3748    <title>Demo</title>
3749    <style>
3750        body {
3751            width:2000px;
3752            height:2000px;
3753            padding-right:170px;
3754            padding-left:170px;
3755            border:5px solid blueviolet
3756        }
3757    </style>
3758</head>
3759<body>
3760Scroll Test
3761</body>
3762</html>
3763```
3764
3765### scrollBy
3766
3767scrollBy(deltaX:number, deltaY:number,duration?:number): void
3768
3769在指定时间内将页面滚动指定的偏移量。
3770
3771**系统能力:** SystemCapability.Web.Webview.Core
3772
3773**参数:**
3774
3775| 参数名 | 类型 | 必填 | 说明               |
3776| ------ | -------- | ---- | ---------------------- |
3777| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。单位:vp。 |
3778| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。单位:vp。 |
3779| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3780
3781**错误码:**
3782
3783以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3784
3785| 错误码ID | 错误信息                                                     |
3786| -------- | ------------------------------------------------------------ |
3787| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3788| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3789
3790> **说明:**
3791>
3792> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。
3793
3794**示例:**
3795
3796```ts
3797// xxx.ets
3798import { webview } from '@kit.ArkWeb';
3799import { BusinessError } from '@kit.BasicServicesKit';
3800
3801@Entry
3802@Component
3803struct WebComponent {
3804  controller: webview.WebviewController = new webview.WebviewController();
3805
3806  build() {
3807    Column() {
3808      Button('scrollBy')
3809        .onClick(() => {
3810          try {
3811            this.controller.scrollBy(50, 50, 500);
3812          } catch (error) {
3813            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3814          }
3815        })
3816      Button('stopScroll')
3817        .onClick(() => {
3818          try {
3819            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3820          } catch (error) {
3821            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3822          }
3823        })
3824      Web({ src: $rawfile('index.html'), controller: this.controller })
3825    }
3826  }
3827}
3828```
3829
3830加载的html文件。
3831```html
3832<!--index.html-->
3833<!DOCTYPE html>
3834<html>
3835<head>
3836    <title>Demo</title>
3837    <style>
3838        body {
3839            width:2000px;
3840            height:2000px;
3841            padding-right:170px;
3842            padding-left:170px;
3843            border:5px solid blueviolet
3844        }
3845    </style>
3846</head>
3847<body>
3848Scroll Test
3849</body>
3850</html>
3851```
3852### scrollByWithResult<sup>12+</sup>
3853
3854scrollByWithResult(deltaX: number, deltaY: number): boolean
3855
3856将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。
3857
3858**系统能力:** SystemCapability.Web.Webview.Core
3859
3860**参数:**
3861
3862| 参数名 | 类型 | 必填 | 说明               |
3863| ------ | -------- | ---- | ---------------------- |
3864| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3865| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3866
3867**返回值:**
3868
3869| 类型    | 说明                                     |
3870| ------- | --------------------------------------- |
3871| boolean | 当前网页是否可以滑动,默认为false。|
3872
3873**错误码:**
3874
3875以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3876
3877| 错误码ID | 错误信息                                                     |
3878| -------- | ------------------------------------------------------------ |
3879| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3880| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3881
3882> **说明:**
3883>
3884> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。
3885> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。
3886> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。
3887> - 此接口不保证滑动帧率性能。
3888
3889**示例:**
3890
3891```ts
3892// xxx.ets
3893import { webview } from '@kit.ArkWeb';
3894import { BusinessError } from '@kit.BasicServicesKit';
3895
3896@Entry
3897@Component
3898struct WebComponent {
3899  controller: webview.WebviewController = new webview.WebviewController();
3900
3901  build() {
3902    Column() {
3903      Button('scrollByWithResult')
3904        .onClick(() => {
3905          try {
3906          let result = this.controller.scrollByWithResult(50, 50);
3907          console.log("original result: " + result);
3908          } catch (error) {
3909            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3910          }
3911        })
3912      Web({ src: $rawfile('index.html'), controller: this.controller })
3913    }
3914  }
3915}
3916```
3917
3918加载的html文件。
3919```html
3920<!--index.html-->
3921<!DOCTYPE html>
3922<html>
3923<head>
3924    <title>Demo</title>
3925    <style>
3926        body {
3927            width:2000px;
3928            height:2000px;
3929            padding-right:170px;
3930            padding-left:170px;
3931            border:5px solid blueviolet
3932        }
3933    </style>
3934</head>
3935<body>
3936Scroll Test
3937</body>
3938</html>
3939```
3940### slideScroll
3941
3942slideScroll(vx:number, vy:number): void
3943
3944按照指定速度模拟对页面的轻扫滚动动作。
3945
3946**系统能力:** SystemCapability.Web.Webview.Core
3947
3948**参数:**
3949
3950| 参数名 | 类型 | 必填 | 说明               |
3951| ------ | -------- | ---- | ---------------------- |
3952| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 |
3953| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 |
3954
3955**错误码:**
3956
3957以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3958
3959| 错误码ID | 错误信息                                                     |
3960| -------- | ------------------------------------------------------------ |
3961| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3962| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3963
3964**示例:**
3965
3966```ts
3967// xxx.ets
3968import { webview } from '@kit.ArkWeb';
3969import { BusinessError } from '@kit.BasicServicesKit';
3970
3971@Entry
3972@Component
3973struct WebComponent {
3974  controller: webview.WebviewController = new webview.WebviewController();
3975
3976  build() {
3977    Column() {
3978      Button('slideScroll')
3979        .onClick(() => {
3980          try {
3981            this.controller.slideScroll(500, 500);
3982          } catch (error) {
3983            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3984          }
3985        })
3986      Web({ src: $rawfile('index.html'), controller: this.controller })
3987    }
3988  }
3989}
3990```
3991
3992加载的html文件。
3993```html
3994<!--index.html-->
3995<!DOCTYPE html>
3996<html>
3997<head>
3998    <title>Demo</title>
3999    <style>
4000        body {
4001            width:3000px;
4002            height:3000px;
4003            padding-right:170px;
4004            padding-left:170px;
4005            border:5px solid blueviolet
4006        }
4007    </style>
4008</head>
4009<body>
4010Scroll Test
4011</body>
4012</html>
4013```
4014
4015### getOriginalUrl
4016
4017getOriginalUrl(): string
4018
4019获取当前页面的原始url地址。
4020风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
4021
4022**系统能力:** SystemCapability.Web.Webview.Core
4023
4024**返回值:**
4025
4026| 类型   | 说明                    |
4027| ------ | ----------------------- |
4028| string | 当前页面的原始url地址。 |
4029
4030**错误码:**
4031
4032以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4033
4034| 错误码ID | 错误信息                                                     |
4035| -------- | ------------------------------------------------------------ |
4036| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4037
4038**示例:**
4039
4040```ts
4041// xxx.ets
4042import { webview } from '@kit.ArkWeb';
4043import { BusinessError } from '@kit.BasicServicesKit';
4044
4045@Entry
4046@Component
4047struct WebComponent {
4048  controller: webview.WebviewController = new webview.WebviewController();
4049
4050  build() {
4051    Column() {
4052      Button('getOrgUrl')
4053        .onClick(() => {
4054          try {
4055            let url = this.controller.getOriginalUrl();
4056            console.log("original url: " + url);
4057          } catch (error) {
4058            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4059          }
4060        })
4061      Web({ src: 'www.example.com', controller: this.controller })
4062    }
4063  }
4064}
4065```
4066
4067### getFavicon
4068
4069getFavicon(): image.PixelMap
4070
4071获取页面的favicon图标。
4072
4073**系统能力:** SystemCapability.Web.Webview.Core
4074
4075**返回值:**
4076
4077| 类型                                   | 说明                            |
4078| -------------------------------------- | ------------------------------- |
4079| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
4080
4081**错误码:**
4082
4083以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4084
4085| 错误码ID | 错误信息                                                     |
4086| -------- | ------------------------------------------------------------ |
4087| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4088
4089**示例:**
4090
4091```ts
4092// xxx.ets
4093import { webview } from '@kit.ArkWeb';
4094import { BusinessError } from '@kit.BasicServicesKit';
4095import { image } from '@kit.ImageKit';
4096
4097@Entry
4098@Component
4099struct WebComponent {
4100  controller: webview.WebviewController = new webview.WebviewController();
4101  @State pixelmap: image.PixelMap | undefined = undefined;
4102
4103  build() {
4104    Column() {
4105      Button('getFavicon')
4106        .onClick(() => {
4107          try {
4108            this.pixelmap = this.controller.getFavicon();
4109          } catch (error) {
4110            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4111          }
4112        })
4113      Web({ src: 'www.example.com', controller: this.controller })
4114    }
4115  }
4116}
4117```
4118
4119### setNetworkAvailable
4120
4121setNetworkAvailable(enable: boolean): void
4122
4123设置JavaScript中的window.navigator.onLine属性。
4124
4125**系统能力:** SystemCapability.Web.Webview.Core
4126
4127**参数:**
4128
4129| 参数名 | 类型    | 必填 | 说明                              |
4130| ------ | ------- | ---- | --------------------------------- |
4131| enable | boolean | 是   | 是否使能window.navigator.onLine。 |
4132
4133**错误码:**
4134
4135以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4136
4137| 错误码ID | 错误信息                                                     |
4138| -------- | ------------------------------------------------------------ |
4139| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4140| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4141
4142**示例:**
4143
4144```ts
4145// xxx.ets
4146import { webview } from '@kit.ArkWeb';
4147import { BusinessError } from '@kit.BasicServicesKit';
4148
4149@Entry
4150@Component
4151struct WebComponent {
4152  controller: webview.WebviewController = new webview.WebviewController();
4153
4154  build() {
4155    Column() {
4156      Button('setNetworkAvailable')
4157        .onClick(() => {
4158          try {
4159            this.controller.setNetworkAvailable(true);
4160          } catch (error) {
4161            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4162          }
4163        })
4164      Web({ src: $rawfile('index.html'), controller: this.controller })
4165    }
4166  }
4167}
4168```
4169
4170加载的html文件。
4171```html
4172<!-- index.html -->
4173<!DOCTYPE html>
4174<html>
4175<body>
4176<h1>online 属性</h1>
4177<p id="demo"></p>
4178<button onclick="func()">click</button>
4179<script>
4180    let online = navigator.onLine;
4181    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4182
4183    function func(){
4184      var online = navigator.onLine;
4185      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4186    }
4187</script>
4188</body>
4189</html>
4190```
4191
4192### hasImage
4193
4194hasImage(callback: AsyncCallback\<boolean>): void
4195
4196通过Callback方式异步查找当前页面是否存在图像。
4197
4198**系统能力:** SystemCapability.Web.Webview.Core
4199
4200**参数:**
4201
4202| 参数名   | 类型                    | 必填 | 说明                       |
4203| -------- | ----------------------- | ---- | -------------------------- |
4204| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。 |
4205
4206**错误码:**
4207
4208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4209
4210| 错误码ID | 错误信息                                                     |
4211| -------- | ------------------------------------------------------------ |
4212| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4213| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4214
4215**示例:**
4216
4217```ts
4218// xxx.ets
4219import { webview } from '@kit.ArkWeb';
4220import { BusinessError } from '@kit.BasicServicesKit';
4221
4222@Entry
4223@Component
4224struct WebComponent {
4225  controller: webview.WebviewController = new webview.WebviewController();
4226
4227  build() {
4228    Column() {
4229      Button('hasImageCb')
4230        .onClick(() => {
4231          try {
4232            this.controller.hasImage((error, data) => {
4233              if (error) {
4234                console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4235                return;
4236              }
4237              console.info("hasImage: " + data);
4238            });
4239          } catch (error) {
4240            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4241          }
4242        })
4243      Web({ src: 'www.example.com', controller: this.controller })
4244    }
4245  }
4246}
4247```
4248
4249### hasImage
4250
4251hasImage(): Promise\<boolean>
4252
4253通过Promise方式异步查找当前页面是否存在图像。
4254
4255**系统能力:** SystemCapability.Web.Webview.Core
4256
4257**返回值:**
4258
4259| 类型              | 说明                                    |
4260| ----------------- | --------------------------------------- |
4261| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 |
4262
4263**错误码:**
4264
4265以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4266
4267| 错误码ID | 错误信息                                                     |
4268| -------- | ------------------------------------------------------------ |
4269| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4270| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
4271
4272**示例:**
4273
4274```ts
4275// xxx.ets
4276import { webview } from '@kit.ArkWeb';
4277import { BusinessError } from '@kit.BasicServicesKit';
4278
4279@Entry
4280@Component
4281struct WebComponent {
4282  controller: webview.WebviewController = new webview.WebviewController();
4283
4284  build() {
4285    Column() {
4286      Button('hasImagePm')
4287        .onClick(() => {
4288          try {
4289            this.controller.hasImage().then((data) => {
4290              console.info('hasImage: ' + data);
4291            }).catch((error: BusinessError) => {
4292              console.error("error: " + error);
4293            })
4294          } catch (error) {
4295            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4296          }
4297        })
4298      Web({ src: 'www.example.com', controller: this.controller })
4299    }
4300  }
4301}
4302```
4303
4304### removeCache
4305
4306removeCache(clearRom: boolean): void
4307
4308清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
4309
4310> **说明:**
4311>
4312> 可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。
4313
4314**系统能力:** SystemCapability.Web.Webview.Core
4315
4316**参数:**
4317
4318| 参数名   | 类型    | 必填 | 说明                                                     |
4319| -------- | ------- | ---- | -------------------------------------------------------- |
4320| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
4321
4322**错误码:**
4323
4324以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4325
4326| 错误码ID | 错误信息                                                     |
4327| -------- | ------------------------------------------------------------ |
4328| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4329| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4330
4331**示例:**
4332
4333```ts
4334// xxx.ets
4335import { webview } from '@kit.ArkWeb';
4336import { BusinessError } from '@kit.BasicServicesKit';
4337
4338@Entry
4339@Component
4340struct WebComponent {
4341  controller: webview.WebviewController = new webview.WebviewController();
4342
4343  build() {
4344    Column() {
4345      Button('removeCache')
4346        .onClick(() => {
4347          try {
4348            this.controller.removeCache(false);
4349          } catch (error) {
4350            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4351          }
4352        })
4353      Web({ src: 'www.example.com', controller: this.controller })
4354    }
4355  }
4356}
4357```
4358
4359### pageUp
4360
4361pageUp(top: boolean): void
4362
4363将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
4364
4365**系统能力:** SystemCapability.Web.Webview.Core
4366
4367**参数:**
4368
4369| 参数名 | 类型    | 必填 | 说明                                                         |
4370| ------ | ------- | ---- | ------------------------------------------------------------ |
4371| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
4372
4373**错误码:**
4374
4375以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4376
4377| 错误码ID | 错误信息                                                     |
4378| -------- | ------------------------------------------------------------ |
4379| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4380| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4381
4382**示例:**
4383
4384```ts
4385// xxx.ets
4386import { webview } from '@kit.ArkWeb';
4387import { BusinessError } from '@kit.BasicServicesKit';
4388
4389@Entry
4390@Component
4391struct WebComponent {
4392  controller: webview.WebviewController = new webview.WebviewController();
4393
4394  build() {
4395    Column() {
4396      Button('pageUp')
4397        .onClick(() => {
4398          try {
4399            this.controller.pageUp(false);
4400          } catch (error) {
4401            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4402          }
4403        })
4404      Web({ src: 'www.example.com', controller: this.controller })
4405    }
4406  }
4407}
4408```
4409
4410### pageDown
4411
4412pageDown(bottom: boolean): void
4413
4414将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
4415
4416**系统能力:** SystemCapability.Web.Webview.Core
4417
4418**参数:**
4419
4420| 参数名 | 类型    | 必填 | 说明                                                         |
4421| ------ | ------- | ---- | ------------------------------------------------------------ |
4422| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
4423
4424**错误码:**
4425
4426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4427
4428| 错误码ID | 错误信息                                                     |
4429| -------- | ------------------------------------------------------------ |
4430| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4431| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4432
4433**示例:**
4434
4435```ts
4436// xxx.ets
4437import { webview } from '@kit.ArkWeb';
4438import { BusinessError } from '@kit.BasicServicesKit';
4439
4440@Entry
4441@Component
4442struct WebComponent {
4443  controller: webview.WebviewController = new webview.WebviewController();
4444
4445  build() {
4446    Column() {
4447      Button('pageDown')
4448        .onClick(() => {
4449          try {
4450            this.controller.pageDown(false);
4451          } catch (error) {
4452            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4453          }
4454        })
4455      Web({ src: 'www.example.com', controller: this.controller })
4456    }
4457  }
4458}
4459```
4460
4461### getBackForwardEntries
4462
4463getBackForwardEntries(): BackForwardList
4464
4465获取当前Webview的历史信息列表。
4466
4467**系统能力:** SystemCapability.Web.Webview.Core
4468
4469**返回值:**
4470
4471| 类型                                | 说明                        |
4472| ----------------------------------- | --------------------------- |
4473| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
4474
4475**错误码:**
4476
4477以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4478
4479| 错误码ID | 错误信息                                                     |
4480| -------- | ------------------------------------------------------------ |
4481| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4482
4483**示例:**
4484
4485```ts
4486// xxx.ets
4487import { webview } from '@kit.ArkWeb';
4488import { BusinessError } from '@kit.BasicServicesKit';
4489
4490@Entry
4491@Component
4492struct WebComponent {
4493  controller: webview.WebviewController = new webview.WebviewController();
4494
4495  build() {
4496    Column() {
4497      Button('getBackForwardEntries')
4498        .onClick(() => {
4499          try {
4500            let list = this.controller.getBackForwardEntries()
4501          } catch (error) {
4502            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4503          }
4504        })
4505      Web({ src: 'www.example.com', controller: this.controller })
4506    }
4507  }
4508}
4509```
4510
4511### serializeWebState
4512
4513serializeWebState(): Uint8Array
4514
4515将当前Webview的页面状态历史记录信息序列化。
4516
4517**系统能力:** SystemCapability.Web.Webview.Core
4518
4519**返回值:**
4520
4521| 类型       | 说明                                          |
4522| ---------- | --------------------------------------------- |
4523| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
4524
4525**错误码:**
4526
4527以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4528
4529| 错误码ID | 错误信息                                                     |
4530| -------- | ------------------------------------------------------------ |
4531| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4532
4533**示例:**
4534
45351.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4536```ts
4537// xxx.ets
4538import { webview } from '@kit.ArkWeb';
4539import { BusinessError } from '@kit.BasicServicesKit';
4540import { fileIo } from '@kit.CoreFileKit';
4541
4542@Entry
4543@Component
4544struct WebComponent {
4545  controller: webview.WebviewController = new webview.WebviewController();
4546
4547  build() {
4548    Column() {
4549      Button('serializeWebState')
4550        .onClick(() => {
4551          try {
4552            let state = this.controller.serializeWebState();
4553            let path:string | undefined = AppStorage.get("cacheDir");
4554            if (path) {
4555              path += '/WebState';
4556              // 以同步方法打开文件。
4557              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
4558              fileIo.writeSync(file.fd, state.buffer);
4559              fileIo.closeSync(file.fd);
4560            }
4561          } catch (error) {
4562            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4563          }
4564        })
4565      Web({ src: 'www.example.com', controller: this.controller })
4566    }
4567  }
4568}
4569```
4570
45712.修改EntryAbility.ets4572获取应用缓存文件路径。
4573```ts
4574// xxx.ets
4575import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4576
4577export default class EntryAbility extends UIAbility {
4578    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4579        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4580        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4581    }
4582}
4583```
4584
4585### restoreWebState
4586
4587restoreWebState(state: Uint8Array): void
4588
4589当前Webview从序列化数据中恢复页面状态历史记录。
4590
4591如果state过大,可能会导致异常。建议state大于512k时,放弃恢复页面状态历史记录。
4592
4593**系统能力:** SystemCapability.Web.Webview.Core
4594
4595**参数:**
4596
4597| 参数名 | 类型       | 必填 | 说明                         |
4598| ------ | ---------- | ---- | ---------------------------- |
4599| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
4600
4601**错误码:**
4602
4603以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4604
4605| 错误码ID | 错误信息                                                     |
4606| -------- | ------------------------------------------------------------ |
4607| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4608| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4609
4610**示例:**
4611
46121.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4613```ts
4614// xxx.ets
4615import { webview } from '@kit.ArkWeb';
4616import { BusinessError } from '@kit.BasicServicesKit';
4617import { fileIo } from '@kit.CoreFileKit';
4618
4619@Entry
4620@Component
4621struct WebComponent {
4622  controller: webview.WebviewController = new webview.WebviewController();
4623
4624  build() {
4625    Column() {
4626      Button('RestoreWebState')
4627        .onClick(() => {
4628          try {
4629            let path: string | undefined = AppStorage.get("cacheDir");
4630            if (path) {
4631              path += '/WebState';
4632              // 以同步方法打开文件。
4633              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE);
4634              let stat = fileIo.statSync(path);
4635              let size = stat.size;
4636              let buf = new ArrayBuffer(size);
4637              fileIo.read(file.fd, buf, (err, readLen) => {
4638                if (err) {
4639                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4640                } else {
4641                  console.info("read file data succeed");
4642                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4643                  fileIo.closeSync(file);
4644                }
4645              });
4646            }
4647          } catch (error) {
4648            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4649          }
4650        })
4651      Web({ src: 'www.example.com', controller: this.controller })
4652    }
4653  }
4654}
4655```
4656
46572.修改EntryAbility.ets4658获取应用缓存文件路径。
4659```ts
4660// xxx.ets
4661import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4662
4663export default class EntryAbility extends UIAbility {
4664  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4665    // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4666    AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4667  }
4668}
4669```
4670
4671### customizeSchemes
4672
4673static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4674
4675对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。
4676
4677**系统能力:** SystemCapability.Web.Webview.Core
4678
4679**参数:**
4680
4681| 参数名   | 类型    | 必填 | 说明                      |
4682| -------- | ------- | ---- | -------------------------------------- |
4683| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4684
4685**错误码:**
4686
4687以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4688
4689| 错误码ID | 错误信息                                                     |
4690| -------- | ------------------------------------------------------------ |
4691|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
4692| 17100020 | Failed to register custom schemes. |
4693
4694**示例:**
4695
4696```ts
4697// xxx.ets
4698import { webview } from '@kit.ArkWeb';
4699import { BusinessError } from '@kit.BasicServicesKit';
4700
4701@Entry
4702@Component
4703struct WebComponent {
4704  controller: webview.WebviewController = new webview.WebviewController();
4705  responseWeb: WebResourceResponse = new WebResourceResponse();
4706  scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true };
4707  scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true };
4708  scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true };
4709
4710  aboutToAppear(): void {
4711    try {
4712      webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]);
4713    } catch (error) {
4714      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4715    }
4716  }
4717
4718  build() {
4719    Column() {
4720      Web({ src: 'www.example.com', controller: this.controller })
4721        .onInterceptRequest((event) => {
4722          if (event) {
4723            console.log('url:' + event.request.getRequestUrl());
4724          }
4725          return this.responseWeb;
4726        })
4727    }
4728  }
4729}
4730```
4731
4732### getCertificate<sup>10+</sup>
4733
4734getCertificate(): Promise<Array<cert.X509Cert>>
4735
4736获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4737
4738**系统能力:** SystemCapability.Web.Webview.Core
4739
4740**返回值:**
4741
4742| 类型       | 说明                                          |
4743| ---------- | --------------------------------------------- |
4744| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4745
4746**错误码:**
4747
4748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4749
4750| 错误码ID | 错误信息                                                     |
4751| -------- | ------------------------------------------------------------ |
4752| 17100001 | Init error. The WebviewController must be associated with a web component. |
4753
4754**示例:**
4755
4756```ts
4757// xxx.ets
4758import { webview } from '@kit.ArkWeb';
4759import { BusinessError } from '@kit.BasicServicesKit';
4760import { cert } from '@kit.DeviceCertificateKit';
4761
4762function Uint8ArrayToString(dataArray: Uint8Array) {
4763  let dataString = '';
4764  for (let i = 0; i < dataArray.length; i++) {
4765    dataString += String.fromCharCode(dataArray[i]);
4766  }
4767  return dataString;
4768}
4769
4770function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4771  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4772  for (let i = 0; i < x509CertArray.length; i++) {
4773    res += ', index = ' + i + ', issuer name = '
4774      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4775      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4776      + x509CertArray[i].getNotBeforeTime()
4777      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4778  }
4779  return res;
4780}
4781
4782@Entry
4783@Component
4784struct Index {
4785  // outputStr在UI界面显示调试信息
4786  @State outputStr: string = '';
4787  webviewCtl: webview.WebviewController = new webview.WebviewController();
4788
4789  build() {
4790    Row() {
4791      Column() {
4792        List({ space: 20, initialIndex: 0 }) {
4793          ListItem() {
4794            Button() {
4795              Text('load bad ssl')
4796                .fontSize(10)
4797                .fontWeight(FontWeight.Bold)
4798            }
4799            .type(ButtonType.Capsule)
4800            .onClick(() => {
4801              // 加载一个过期的证书网站,查看获取到的证书信息
4802              this.webviewCtl.loadUrl('https://expired.badssl.com');
4803            })
4804            .height(50)
4805          }
4806
4807          ListItem() {
4808            Button() {
4809              Text('load example')
4810                .fontSize(10)
4811                .fontWeight(FontWeight.Bold)
4812            }
4813            .type(ButtonType.Capsule)
4814            .onClick(() => {
4815              // 加载一个https网站,查看网站的证书信息
4816              this.webviewCtl.loadUrl('https://www.example.com');
4817            })
4818            .height(50)
4819          }
4820
4821          ListItem() {
4822            Button() {
4823              Text('getCertificate Promise')
4824                .fontSize(10)
4825                .fontWeight(FontWeight.Bold)
4826            }
4827            .type(ButtonType.Capsule)
4828            .onClick(() => {
4829              try {
4830                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4831                  this.outputStr = ParseX509CertInfo(x509CertArray);
4832                })
4833              } catch (error) {
4834                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4835              }
4836            })
4837            .height(50)
4838          }
4839
4840          ListItem() {
4841            Button() {
4842              Text('getCertificate AsyncCallback')
4843                .fontSize(10)
4844                .fontWeight(FontWeight.Bold)
4845            }
4846            .type(ButtonType.Capsule)
4847            .onClick(() => {
4848              try {
4849                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
4850                  if (error) {
4851                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4852                  } else {
4853                    this.outputStr = ParseX509CertInfo(x509CertArray);
4854                  }
4855                })
4856              } catch (error) {
4857                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4858              }
4859            })
4860            .height(50)
4861          }
4862        }
4863        .listDirection(Axis.Horizontal)
4864        .height('10%')
4865
4866        Text(this.outputStr)
4867          .width('100%')
4868          .fontSize(10)
4869
4870        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4871          .fileAccess(true)
4872          .javaScriptAccess(true)
4873          .domStorageAccess(true)
4874          .onlineImageAccess(true)
4875          .onPageEnd((e) => {
4876            if (e) {
4877              this.outputStr = 'onPageEnd : url = ' + e.url;
4878            }
4879          })
4880          .onSslErrorEventReceive((e) => {
4881            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4882            e.handler.handleConfirm();
4883          })
4884          .width('100%')
4885          .height('70%')
4886      }
4887      .height('100%')
4888    }
4889  }
4890}
4891```
4892
4893### getCertificate<sup>10+</sup>
4894
4895getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4896
4897获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。
4898
4899**系统能力:** SystemCapability.Web.Webview.Core
4900
4901**参数:**
4902
4903| 参数名   | 类型                         | 必填 | 说明                                     |
4904| -------- | ---------------------------- | ---- | ---------------------------------------- |
4905| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4906
4907**错误码:**
4908
4909以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4910
4911| 错误码ID | 错误信息                                                     |
4912| -------- | ------------------------------------------------------------ |
4913| 17100001 | Init error. The WebviewController must be associated with a web component. |
4914| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4915
4916**示例:**
4917
4918```ts
4919// xxx.ets
4920import { webview } from '@kit.ArkWeb';
4921import { BusinessError } from '@kit.BasicServicesKit';
4922import { cert } from '@kit.DeviceCertificateKit';
4923
4924function Uint8ArrayToString(dataArray: Uint8Array) {
4925  let dataString = '';
4926  for (let i = 0; i < dataArray.length; i++) {
4927    dataString += String.fromCharCode(dataArray[i]);
4928  }
4929  return dataString;
4930}
4931
4932function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4933  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4934  for (let i = 0; i < x509CertArray.length; i++) {
4935    res += ', index = ' + i + ', issuer name = '
4936      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4937      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4938      + x509CertArray[i].getNotBeforeTime()
4939      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4940  }
4941  return res;
4942}
4943
4944@Entry
4945@Component
4946struct Index {
4947  // outputStr在UI界面显示调试信息
4948  @State outputStr: string = '';
4949  webviewCtl: webview.WebviewController = new webview.WebviewController();
4950
4951  build() {
4952    Row() {
4953      Column() {
4954        List({ space: 20, initialIndex: 0 }) {
4955          ListItem() {
4956            Button() {
4957              Text('load bad ssl')
4958                .fontSize(10)
4959                .fontWeight(FontWeight.Bold)
4960            }
4961            .type(ButtonType.Capsule)
4962            .onClick(() => {
4963              // 加载一个过期的证书网站,查看获取到的证书信息
4964              this.webviewCtl.loadUrl('https://expired.badssl.com');
4965            })
4966            .height(50)
4967          }
4968
4969          ListItem() {
4970            Button() {
4971              Text('load example')
4972                .fontSize(10)
4973                .fontWeight(FontWeight.Bold)
4974            }
4975            .type(ButtonType.Capsule)
4976            .onClick(() => {
4977              // 加载一个https网站,查看网站的证书信息
4978              this.webviewCtl.loadUrl('https://www.example.com');
4979            })
4980            .height(50)
4981          }
4982
4983          ListItem() {
4984            Button() {
4985              Text('getCertificate Promise')
4986                .fontSize(10)
4987                .fontWeight(FontWeight.Bold)
4988            }
4989            .type(ButtonType.Capsule)
4990            .onClick(() => {
4991              try {
4992                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4993                  this.outputStr = ParseX509CertInfo(x509CertArray);
4994                })
4995              } catch (error) {
4996                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4997              }
4998            })
4999            .height(50)
5000          }
5001
5002          ListItem() {
5003            Button() {
5004              Text('getCertificate AsyncCallback')
5005                .fontSize(10)
5006                .fontWeight(FontWeight.Bold)
5007            }
5008            .type(ButtonType.Capsule)
5009            .onClick(() => {
5010              try {
5011                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
5012                  if (error) {
5013                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
5014                  } else {
5015                    this.outputStr = ParseX509CertInfo(x509CertArray);
5016                  }
5017                })
5018              } catch (error) {
5019                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
5020              }
5021            })
5022            .height(50)
5023          }
5024        }
5025        .listDirection(Axis.Horizontal)
5026        .height('10%')
5027
5028        Text(this.outputStr)
5029          .width('100%')
5030          .fontSize(10)
5031
5032        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
5033          .fileAccess(true)
5034          .javaScriptAccess(true)
5035          .domStorageAccess(true)
5036          .onlineImageAccess(true)
5037          .onPageEnd((e) => {
5038            if (e) {
5039              this.outputStr = 'onPageEnd : url = ' + e.url;
5040            }
5041          })
5042          .onSslErrorEventReceive((e) => {
5043            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
5044            e.handler.handleConfirm();
5045          })
5046          .width('100%')
5047          .height('70%')
5048      }
5049      .height('100%')
5050    }
5051  }
5052}
5053```
5054
5055### setAudioMuted<sup>10+</sup>
5056
5057setAudioMuted(mute: boolean): void
5058
5059设置网页静音。
5060
5061**系统能力:** SystemCapability.Web.Webview.Core
5062
5063**参数:**
5064
5065| 参数名   | 类型    | 必填 | 说明                      |
5066| -------- | ------- | ---- | -------------------------------------- |
5067| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
5068
5069**错误码:**
5070
5071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5072
5073| 错误码ID | 错误信息                                                     |
5074| -------- | ------------------------------------------------------------ |
5075| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5076| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5077
5078**示例:**
5079
5080```ts
5081// xxx.ets
5082import { webview } from '@kit.ArkWeb';
5083
5084@Entry
5085@Component
5086struct WebComponent {
5087  controller: webview.WebviewController = new webview.WebviewController();
5088  @State muted: boolean = false;
5089
5090  build() {
5091    Column() {
5092      Button("Toggle Mute")
5093        .onClick(event => {
5094          if (event) {
5095            this.muted = !this.muted;
5096            this.controller.setAudioMuted(this.muted);
5097          }
5098        })
5099      Web({ src: 'www.example.com', controller: this.controller })
5100    }
5101  }
5102}
5103```
5104
5105### prefetchPage<sup>10+</sup>
5106
5107prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
5108
5109在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
5110
5111> **说明:**
5112>
5113> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。
5114
5115**系统能力:** SystemCapability.Web.Webview.Core
5116
5117**参数:**
5118
5119| 参数名             | 类型                             | 必填  | 说明                      |
5120| ------------------| --------------------------------| ---- | ------------- |
5121| url               | string                          | 是    | 预加载的url。|
5122| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
5123
5124**错误码:**
5125
5126以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5127
5128| 错误码ID  | 错误信息                                                      |
5129| -------- | ------------------------------------------------------------ |
5130| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5131| 17100002 | Invalid url.                                                 |
5132
5133**示例:**
5134
5135```ts
5136// xxx.ets
5137import { webview } from '@kit.ArkWeb';
5138import { BusinessError } from '@kit.BasicServicesKit';
5139
5140@Entry
5141@Component
5142struct WebComponent {
5143  controller: webview.WebviewController = new webview.WebviewController();
5144
5145  build() {
5146    Column() {
5147      Button('prefetchPopularPage')
5148        .onClick(() => {
5149          try {
5150            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
5151            this.controller.prefetchPage('https://www.example.com');
5152          } catch (error) {
5153            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5154          }
5155        })
5156      // 需要将'www.example1.com'替换成一个真实的网站地址。
5157      Web({ src: 'www.example1.com', controller: this.controller })
5158    }
5159  }
5160}
5161```
5162
5163### prefetchResource<sup>12+</sup>
5164
5165static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void
5166
5167根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。
5168
5169**系统能力:**  SystemCapability.Web.Webview.Core
5170
5171**参数:**
5172
5173| 参数名             | 类型                             |  必填  | 说明                                                              |
5174| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ |
5175| request           | [RequestInfo](#requestinfo12)   | 是   | 预获取请求的信息。                                                      |
5176| additionalHeaders | Array\<[WebHeader](#webheader)> | 否   | 预获取请求的附加HTTP请求头。                                             |
5177| cacheKey          | string                          | 否   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5178| cacheValidTime    | number                          | 否   | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。          |
5179
5180**错误码:**
5181
5182以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5183
5184| 错误码ID  | 错误信息                                                      |
5185| -------- | ------------------------------------------------------------ |
5186| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
5187| 17100002 | Invalid url.                                                 |
5188
5189**示例:**
5190
5191```ts
5192// xxx.ets
5193import { webview } from '@kit.ArkWeb';
5194import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5195
5196export default class EntryAbility extends UIAbility {
5197  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5198    console.log("EntryAbility onCreate");
5199    webview.WebviewController.initializeWebEngine();
5200    // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5201    webview.WebviewController.prefetchResource(
5202      {url:"https://www.example1.com/post?e=f&g=h",
5203        method:"POST",
5204        formData:"a=x&b=y",},
5205      [{headerKey:"c",
5206        headerValue:"z",},],
5207      "KeyX", 500);
5208    AppStorage.setOrCreate("abilityWant", want);
5209    console.log("EntryAbility onCreate done");
5210  }
5211}
5212```
5213
5214### clearPrefetchedResource<sup>12+</sup>
5215
5216static clearPrefetchedResource(cacheKeyList: Array\<string>): void
5217
5218根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。
5219
5220**系统能力:**  SystemCapability.Web.Webview.Core
5221
5222**参数:**
5223
5224| 参数名             | 类型        | 必填  | 说明                                                                       |
5225| ------------------| ----------- | ---- | ------------------------------------------------------------------------- |
5226| cacheKeyList      | Array\<string>      | 是   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5227
5228**示例:**
5229
5230```ts
5231// xxx.ets
5232import { webview } from '@kit.ArkWeb';
5233
5234@Entry
5235@Component
5236struct WebComponent {
5237  controller: webview.WebviewController = new webview.WebviewController();
5238  build() {
5239    Column() {
5240      Web({ src: "https://www.example.com/", controller: this.controller})
5241        .onAppear(() => {
5242          // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5243          webview.WebviewController.prefetchResource(
5244            {url:"https://www.example1.com/post?e=f&g=h",
5245              method:"POST",
5246              formData:"a=x&b=y",},
5247            [{headerKey:"c",
5248              headerValue:"z",},],
5249            "KeyX", 500);
5250        })
5251        .onPageEnd(() => {
5252          // 清除后续不再使用的预获取缓存。
5253          webview.WebviewController.clearPrefetchedResource(["KeyX",]);
5254        })
5255    }
5256  }
5257}
5258```
5259
5260### prepareForPageLoad<sup>10+</sup>
5261
5262static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
5263
5264预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
5265
5266**系统能力:**  SystemCapability.Web.Webview.Core
5267
5268**参数:**
5269
5270| 参数名          | 类型    |  必填  | 说明                                            |
5271| ---------------| ------- | ---- | ------------- |
5272| url            | string  | 是   | 预连接的url。|
5273| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
5274| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
5275
5276**错误码:**
5277
5278以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5279
5280| 错误码ID  | 错误信息                                                      |
5281| -------- | ------------------------------------------------------------ |
5282| 17100002 | Invalid url.                                                 |
5283| 171000013| The number of preconnect sockets is invalid.                                                 |
5284
5285**示例:**
5286
5287```ts
5288// xxx.ets
5289import { webview } from '@kit.ArkWeb';
5290import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5291
5292export default class EntryAbility extends UIAbility {
5293  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5294    console.log("EntryAbility onCreate");
5295    webview.WebviewController.initializeWebEngine();
5296    // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
5297    webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
5298    AppStorage.setOrCreate("abilityWant", want);
5299    console.log("EntryAbility onCreate done");
5300  }
5301}
5302```
5303
5304### setCustomUserAgent<sup>10+</sup>
5305
5306setCustomUserAgent(userAgent: string): void
5307
5308设置自定义用户代理,会覆盖系统的用户代理。
5309
5310当Web组件src设置了url时,建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。
5311
5312当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。
5313
5314默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5315
5316> **说明:**
5317>
5318>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。
5319
5320**系统能力:**  SystemCapability.Web.Webview.Core
5321
5322**参数:**
5323
5324| 参数名          | 类型    |  必填  | 说明                                            |
5325| ---------------| ------- | ---- | ------------- |
5326| userAgent      | string  | 是   | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 |
5327
5328**错误码:**
5329
5330以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5331
5332| 错误码ID  | 错误信息                                                      |
5333| -------- | ------------------------------------------------------------ |
5334| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5335| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5336
5337**示例:**
5338
5339```ts
5340// xxx.ets
5341import { webview } from '@kit.ArkWeb';
5342import { BusinessError } from '@kit.BasicServicesKit';
5343
5344@Entry
5345@Component
5346struct WebComponent {
5347  controller: webview.WebviewController = new webview.WebviewController();
5348  @State customUserAgent: string = ' DemoApp';
5349
5350  build() {
5351    Column() {
5352      Web({ src: 'www.example.com', controller: this.controller })
5353      .onControllerAttached(() => {
5354        console.log("onControllerAttached");
5355        try {
5356          let userAgent = this.controller.getUserAgent() + this.customUserAgent;
5357          this.controller.setCustomUserAgent(userAgent);
5358        } catch (error) {
5359          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5360        }
5361      })
5362    }
5363  }
5364}
5365```
5366
5367### setDownloadDelegate<sup>11+</sup>
5368
5369setDownloadDelegate(delegate: WebDownloadDelegate): void
5370
5371为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。
5372
5373**系统能力:**  SystemCapability.Web.Webview.Core
5374
5375**参数:**
5376
5377| 参数名          | 类型    |  必填  | 说明                                            |
5378| ---------------| ------- | ---- | ------------- |
5379| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
5380
5381**错误码:**
5382
5383以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5384
5385| 错误码ID  | 错误信息                                                      |
5386| -------- | ------------------------------------------------------------ |
5387| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5388
5389**示例:**
5390
5391```ts
5392// xxx.ets
5393import { webview } from '@kit.ArkWeb';
5394import { BusinessError } from '@kit.BasicServicesKit';
5395
5396@Entry
5397@Component
5398struct WebComponent {
5399  controller: webview.WebviewController = new webview.WebviewController();
5400  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5401
5402  build() {
5403    Column() {
5404      Button('setDownloadDelegate')
5405        .onClick(() => {
5406          try {
5407            this.controller.setDownloadDelegate(this.delegate);
5408          } catch (error) {
5409            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5410          }
5411        })
5412      Web({ src: 'www.example.com', controller: this.controller })
5413    }
5414  }
5415}
5416```
5417
5418### startDownload<sup>11+</sup>
5419
5420startDownload(url: string): void
5421
5422使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。
5423
5424**系统能力:**  SystemCapability.Web.Webview.Core
5425
5426**参数:**
5427
5428| 参数名          | 类型    |  必填  | 说明                                            |
5429| ---------------| ------- | ---- | ------------- |
5430| url      | string  | 是   | 下载地址。 |
5431
5432**错误码:**
5433
5434以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5435
5436| 错误码ID  | 错误信息                                                      |
5437| -------- | ------------------------------------------------------------ |
5438| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5439| 17100002 | Invalid url. |
5440
5441**示例:**
5442
5443```ts
5444// xxx.ets
5445import { webview } from '@kit.ArkWeb';
5446import { BusinessError } from '@kit.BasicServicesKit';
5447
5448@Entry
5449@Component
5450struct WebComponent {
5451  controller: webview.WebviewController = new webview.WebviewController();
5452  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5453
5454  build() {
5455    Column() {
5456      Button('setDownloadDelegate')
5457        .onClick(() => {
5458          try {
5459            this.controller.setDownloadDelegate(this.delegate);
5460          } catch (error) {
5461            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5462          }
5463        })
5464      Button('startDownload')
5465        .onClick(() => {
5466          try {
5467            this.controller.startDownload('https://www.example.com');
5468          } catch (error) {
5469            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5470          }
5471        })
5472      Web({ src: 'www.example.com', controller: this.controller })
5473    }
5474  }
5475}
5476```
5477
5478### getCustomUserAgent<sup>10+</sup>
5479
5480getCustomUserAgent(): string
5481
5482获取自定义用户代理。
5483
5484默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5485
5486**系统能力:**  SystemCapability.Web.Webview.Core
5487
5488**返回值:**
5489
5490| 类型   | 说明                      |
5491| ------ | ------------------------- |
5492| string | 用户自定义代理信息。 |
5493
5494**错误码:**
5495
5496以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5497
5498| 错误码ID  | 错误信息                                                      |
5499| -------- | ------------------------------------------------------------ |
5500| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5501
5502**示例:**
5503
5504```ts
5505// xxx.ets
5506import { webview } from '@kit.ArkWeb';
5507import { BusinessError } from '@kit.BasicServicesKit';
5508
5509@Entry
5510@Component
5511struct WebComponent {
5512  controller: webview.WebviewController = new webview.WebviewController();
5513  @State userAgent: string = '';
5514
5515  build() {
5516    Column() {
5517      Button('getCustomUserAgent')
5518        .onClick(() => {
5519          try {
5520            this.userAgent = this.controller.getCustomUserAgent();
5521            console.log("userAgent: " + this.userAgent);
5522          } catch (error) {
5523            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5524          }
5525        })
5526      Web({ src: 'www.example.com', controller: this.controller })
5527    }
5528  }
5529}
5530```
5531
5532### setConnectionTimeout<sup>11+</sup>
5533
5534static setConnectionTimeout(timeout: number): void
5535
5536设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。
5537
5538**系统能力:** SystemCapability.Web.Webview.Core
5539
5540**参数:**
5541
5542| 参数名          | 类型    |  必填  | 说明                                            |
5543| ---------------| ------- | ---- | ------------- |
5544| timeout        | number  | 是   | socket连接超时时间,以秒为单位,socket必须为大于0的整数。 |
5545
5546**错误码:**
5547
5548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5549
5550| 错误码ID | 错误信息                                                     |
5551| -------- | ------------------------------------------------------------ |
5552| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
5553
5554**示例:**
5555
5556```ts
5557// xxx.ets
5558import { webview } from '@kit.ArkWeb';
5559import { BusinessError } from '@kit.BasicServicesKit';
5560
5561@Entry
5562@Component
5563struct WebComponent {
5564  controller: webview.WebviewController = new webview.WebviewController();
5565
5566  build() {
5567    Column() {
5568      Button('setConnectionTimeout')
5569        .onClick(() => {
5570          try {
5571            webview.WebviewController.setConnectionTimeout(5);
5572            console.log("setConnectionTimeout: 5s");
5573          } catch (error) {
5574            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5575          }
5576        })
5577      Web({ src: 'www.example.com', controller: this.controller })
5578        .onErrorReceive((event) => {
5579          if (event) {
5580            console.log('getErrorInfo:' + event.error.getErrorInfo());
5581            console.log('getErrorCode:' + event.error.getErrorCode());
5582          }
5583        })
5584    }
5585  }
5586}
5587```
5588
5589### warmupServiceWorker<sup>12+</sup>
5590
5591static warmupServiceWorker(url: string): void
5592
5593预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。
5594
5595**系统能力:**  SystemCapability.Web.Webview.Core
5596
5597**参数:**
5598
5599| 参数名          | 类型    |  必填  | 说明                                            |
5600| ---------------| ------- | ---- | ------------- |
5601| url            | string  | 是   | 需要预热ServiceWorker的url。|
5602
5603**错误码:**
5604
5605以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5606
5607| 错误码ID  | 错误信息                                                      |
5608| -------- | ------------------------------------------------------------ |
5609| 17100002 | Invalid url.                                                 |
5610
5611**示例:**
5612
5613```ts
5614// xxx.ts
5615import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5616import { hilog } from '@kit.PerformanceAnalysisKit';
5617import { window } from '@kit.ArkUI';
5618import { webview } from '@kit.ArkWeb';
5619
5620export default class EntryAbility extends UIAbility {
5621    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5622        console.log("EntryAbility onCreate");
5623        webview.WebviewController.initializeWebEngine();
5624        webview.WebviewController.warmupServiceWorker("https://www.example.com");
5625        AppStorage.setOrCreate("abilityWant", want);
5626    }
5627}
5628```
5629
5630### enableSafeBrowsing<sup>11+</sup>
5631
5632enableSafeBrowsing(enable: boolean): void
5633
5634<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。
5635本功能默认不生效,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)进行检测。
5636<!--RP1End-->
5637
5638**系统能力:** SystemCapability.Web.Webview.Core
5639
5640**参数:**
5641
5642| 参数名   | 类型    |  必填  | 说明                       |
5643| --------| ------- | ---- | ---------------------------|
5644|  enable | boolean | 是   | 是否启用检查网站安全风险的功能。 |
5645
5646**错误码:**
5647
5648以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5649
5650| 错误码ID | 错误信息                  |
5651| -------- | ----------------------- |
5652| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5653
5654**示例:**
5655
5656```ts
5657// xxx.ets
5658import { webview } from '@kit.ArkWeb';
5659import { BusinessError } from '@kit.BasicServicesKit';
5660
5661@Entry
5662@Component
5663struct WebComponent {
5664  controller: webview.WebviewController = new webview.WebviewController();
5665
5666  build() {
5667    Column() {
5668      Button('enableSafeBrowsing')
5669        .onClick(() => {
5670          try {
5671            this.controller.enableSafeBrowsing(true);
5672            console.log("enableSafeBrowsing: true");
5673          } catch (error) {
5674            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5675          }
5676        })
5677      Web({ src: 'www.example.com', controller: this.controller })
5678    }
5679  }
5680}
5681```
5682
5683### isSafeBrowsingEnabled<sup>11+</sup>
5684
5685isSafeBrowsingEnabled(): boolean
5686
5687获取当前网页是否启用了检查网站安全风险。
5688
5689**系统能力:** SystemCapability.Web.Webview.Core
5690
5691**返回值:**
5692
5693| 类型    | 说明                                     |
5694| ------- | --------------------------------------- |
5695| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。|
5696
5697**示例:**
5698
5699```ts
5700// xxx.ets
5701import { webview } from '@kit.ArkWeb';
5702
5703@Entry
5704@Component
5705struct WebComponent {
5706  controller: webview.WebviewController = new webview.WebviewController();
5707
5708  build() {
5709    Column() {
5710      Button('isSafeBrowsingEnabled')
5711        .onClick(() => {
5712          let result = this.controller.isSafeBrowsingEnabled();
5713          console.log("result: " + result);
5714        })
5715      Web({ src: 'www.example.com', controller: this.controller })
5716    }
5717  }
5718}
5719```
5720
5721### enableIntelligentTrackingPrevention<sup>12+</sup>
5722
5723enableIntelligentTrackingPrevention(enable: boolean): void
5724
5725启用智能防跟踪功能,默认该功能未启用。
5726
5727**系统能力:** SystemCapability.Web.Webview.Core
5728
5729**参数:**
5730
5731| 参数名   | 类型    |  必填  | 说明                       |
5732| --------| ------- | ---- | ---------------------------|
5733|  enable | boolean | 是   | 是否启用智能防跟踪功能。 |
5734
5735**错误码:**
5736
5737以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5738
5739| 错误码ID | 错误信息                  |
5740| -------- | ----------------------- |
5741| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5742|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5743
5744**示例:**
5745
5746```ts
5747// xxx.ets
5748import { webview } from '@kit.ArkWeb';
5749import { BusinessError } from '@kit.BasicServicesKit';
5750
5751@Entry
5752@Component
5753struct WebComponent {
5754  controller: webview.WebviewController = new webview.WebviewController();
5755
5756  build() {
5757    Column() {
5758      Button('enableIntelligentTrackingPrevention')
5759        .onClick(() => {
5760          try {
5761            this.controller.enableIntelligentTrackingPrevention(true);
5762            console.log("enableIntelligentTrackingPrevention: true");
5763          } catch (error) {
5764            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5765          }
5766        })
5767      Web({ src: 'www.example.com', controller: this.controller })
5768    }
5769  }
5770}
5771```
5772
5773### isIntelligentTrackingPreventionEnabled<sup>12+</sup>
5774
5775isIntelligentTrackingPreventionEnabled(): boolean
5776
5777获取当前Web是否启用了智能防跟踪功能。
5778
5779**系统能力:** SystemCapability.Web.Webview.Core
5780
5781**返回值:**
5782
5783| 类型    | 说明                                     |
5784| ------- | --------------------------------------- |
5785| boolean | 当前Web是否启用了智能防跟踪功能,默认为false。|
5786
5787**错误码:**
5788
5789以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5790
5791| 错误码ID | 错误信息                  |
5792| -------- | ----------------------- |
5793| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5794
5795**示例:**
5796
5797```ts
5798// xxx.ets
5799import { webview } from '@kit.ArkWeb';
5800import { BusinessError } from '@kit.BasicServicesKit';
5801
5802@Entry
5803@Component
5804struct WebComponent {
5805  controller: webview.WebviewController = new webview.WebviewController();
5806
5807  build() {
5808    Column() {
5809      Button('isIntelligentTrackingPreventionEnabled')
5810        .onClick(() => {
5811          try {
5812            let result = this.controller.isIntelligentTrackingPreventionEnabled();
5813            console.log("result: " + result);
5814          } catch (error) {
5815            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5816          }
5817        })
5818      Web({ src: 'www.example.com', controller: this.controller })
5819    }
5820  }
5821}
5822```
5823
5824### addIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5825
5826static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5827
5828添加智能防跟踪功能绕过的域名列表。
5829
5830**系统能力:** SystemCapability.Web.Webview.Core
5831
5832**参数:**
5833
5834| 参数名       | 类型           | 必填  | 说明                      |
5835| ----------- | ------------- | ---- | ------------------------ |
5836| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5837
5838**错误码:**
5839
5840以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5841
5842| 错误码ID  | 错误信息                  |
5843| -------- | ------------------------ |
5844|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5845
5846**示例:**
5847
5848```ts
5849// xxx.ets
5850import { webview } from '@kit.ArkWeb';
5851import { BusinessError } from '@kit.BasicServicesKit';
5852
5853@Entry
5854@Component
5855struct WebComponent {
5856  controller: webview.WebviewController = new webview.WebviewController();
5857
5858  build() {
5859    Column() {
5860      Button('addIntelligentTrackingPreventionBypassingList')
5861        .onClick(() => {
5862          try {
5863            let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"];
5864            webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);
5865          } catch (error) {
5866            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5867          }
5868        })
5869      Web({ src: 'www.example.com', controller: this.controller })
5870    }
5871  }
5872}
5873```
5874
5875### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5876
5877static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5878
5879删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。
5880
5881**系统能力:** SystemCapability.Web.Webview.Core
5882
5883**参数:**
5884
5885| 参数名       | 类型           | 必填  | 说明                      |
5886| ----------- | ------------- | ---- | ------------------------ |
5887| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5888
5889**错误码:**
5890
5891以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5892
5893| 错误码ID  | 错误信息                  |
5894| -------- | ------------------------ |
5895|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5896
5897**示例:**
5898
5899```ts
5900// xxx.ets
5901import { webview } from '@kit.ArkWeb';
5902import { BusinessError } from '@kit.BasicServicesKit';
5903
5904@Entry
5905@Component
5906struct WebComponent {
5907  controller: webview.WebviewController = new webview.WebviewController();
5908
5909  build() {
5910    Column() {
5911      Button('removeIntelligentTrackingPreventionBypassingList')
5912        .onClick(() => {
5913          try {
5914            let hostList = ["www.test1.com", "www.test2.com"];
5915            webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);
5916          } catch (error) {
5917            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5918          }
5919        })
5920      Web({ src: 'www.example.com', controller: this.controller })
5921    }
5922  }
5923}
5924```
5925
5926### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5927
5928static clearIntelligentTrackingPreventionBypassingList(): void
5929
5930删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。
5931
5932**系统能力:** SystemCapability.Web.Webview.Core
5933
5934**示例:**
5935
5936```ts
5937// xxx.ets
5938import { webview } from '@kit.ArkWeb';
5939
5940@Entry
5941@Component
5942struct WebComponent {
5943  controller: webview.WebviewController = new webview.WebviewController();
5944
5945  build() {
5946    Column() {
5947      Button('clearIntelligentTrackingPreventionBypassingList')
5948        .onClick(() => {
5949          webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();
5950      })
5951      Web({ src: 'www.example.com', controller: this.controller })
5952    }
5953  }
5954}
5955```
5956
5957### getDefaultUserAgent<sup>14+</sup>
5958
5959static getDefaultUserAgent(): string
5960
5961获取默认用户代理。
5962
5963此接口只允许在UI线程调用。
5964
5965**系统能力:** SystemCapability.Web.Webview.Core
5966
5967**示例:**
5968
5969```ts
5970// xxx.ets
5971import { webview } from '@kit.ArkWeb';
5972import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5973
5974export default class EntryAbility extends UIAbility {
5975  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5976    console.log("EntryAbility onCreate");
5977    webview.WebviewController.initializeWebEngine();
5978    let defaultUserAgent = webview.WebviewController.getDefaultUserAgent();
5979    console.log("defaultUserAgent: " + defaultUserAgent);
5980  }
5981}
5982```
5983
5984### enableAdsBlock<sup>12+</sup>
5985
5986enableAdsBlock(enable: boolean): void
5987
5988启用广告过滤功能,默认该功能未启用。
5989
5990**系统能力:** SystemCapability.Web.Webview.Core
5991
5992**参数:**
5993
5994| 参数名   | 类型    |  必填  | 说明                       |
5995| --------| ------- | ---- | ---------------------------|
5996|  enable | boolean | 是   | 是否启用广告过滤功能。 |
5997
5998**错误码:**
5999
6000以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6001
6002| 错误码ID | 错误信息                  |
6003| -------- | ----------------------- |
6004| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6005|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
6006
6007**示例:**
6008
6009```ts
6010// xxx.ets
6011import { webview } from '@kit.ArkWeb';
6012import { BusinessError } from '@kit.BasicServicesKit';
6013
6014@Entry
6015@Component
6016struct WebComponent {
6017  controller: webview.WebviewController = new webview.WebviewController();
6018
6019  build() {
6020    Column() {
6021      Button('enableAdsBlock')
6022        .onClick(() => {
6023          try {
6024            this.controller.enableAdsBlock(true);
6025            console.log("enableAdsBlock: true")
6026          } catch (error) {
6027            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6028          }
6029        })
6030      Web({ src: 'www.example.com', controller: this.controller })
6031    }
6032  }
6033}
6034```
6035
6036### isAdsBlockEnabled<sup>12+</sup>
6037
6038isAdsBlockEnabled() : boolean
6039
6040查询广告过滤功能是否开启,默认该功能未启用。
6041
6042**系统能力:** SystemCapability.Web.Webview.Core
6043
6044**返回值:**
6045
6046| 类型                                                         | 说明                   |
6047| ------------------------------------------------------------ | ---------------------- |
6048| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 |
6049
6050**示例:**
6051
6052```ts
6053// xxx.ets
6054import { webview } from '@kit.ArkWeb';
6055import { BusinessError } from '@kit.BasicServicesKit';
6056
6057@Entry
6058@Component
6059struct WebComponent {
6060  controller: webview.WebviewController = new webview.WebviewController();
6061
6062  build() {
6063    Column() {
6064      Button('isAdsBlockEnabled')
6065        .onClick(() => {
6066          try {
6067            let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled();
6068            console.log("isAdsBlockEnabled:", isAdsBlockEnabled);
6069          } catch (error) {
6070            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6071          }
6072        })
6073      Web({ src: 'www.example.com', controller: this.controller })
6074    }
6075  }
6076}
6077```
6078
6079### isAdsBlockEnabledForCurPage<sup>12+</sup>
6080
6081isAdsBlockEnabledForCurPage() : boolean
6082
6083查询当前网页是否开启广告过滤功能。
6084当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。
6085
6086**系统能力:** SystemCapability.Web.Webview.Core
6087
6088**返回值:**
6089
6090| 类型                                                         | 说明                   |
6091| ------------------------------------------------------------ | ---------------------- |
6092| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 |
6093
6094**示例:**
6095
6096```ts
6097// xxx.ets
6098import { webview } from '@kit.ArkWeb';
6099import { BusinessError } from '@kit.BasicServicesKit';
6100
6101@Entry
6102@Component
6103struct WebComponent {
6104  controller: webview.WebviewController = new webview.WebviewController();
6105
6106  build() {
6107    Column() {
6108      Button('isAdsBlockEnabledForCurPage')
6109        .onClick(() => {
6110          try {
6111            let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage();
6112            console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage);
6113          } catch (error) {
6114            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6115          }
6116        })
6117      Web({ src: 'www.example.com', controller: this.controller })
6118    }
6119  }
6120}
6121```
6122
6123### setRenderProcessMode<sup>12+</sup>
6124
6125static setRenderProcessMode(mode: RenderProcessMode): void
6126
6127设置ArkWeb渲染子进程模式。
6128
6129**系统能力:** SystemCapability.Web.Webview.Core
6130
6131**参数:**
6132
6133| 参数名       | 类型           | 必填  | 说明                      |
6134| ----------- | ------------- | ---- | ------------------------ |
6135| mode        | [RenderProcessMode](#renderprocessmode12)| 是   | 渲染子进程模式。可以先调用[getRenderProcessMode()](#getrenderprocessmode12)查看当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。 |
6136
6137**错误码:**
6138
6139以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6140
6141| 错误码ID  | 错误信息                  |
6142| -------- | ------------------------ |
6143|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6144
6145**示例:**
6146
6147```ts
6148// xxx.ets
6149import { webview } from '@kit.ArkWeb';
6150import { BusinessError } from '@kit.BasicServicesKit';
6151
6152@Entry
6153@Component
6154struct WebComponent {
6155  controller: webview.WebviewController = new webview.WebviewController();
6156
6157  build() {
6158    Column() {
6159      Button('setRenderProcessMode')
6160        .onClick(() => {
6161          try {
6162            webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE);
6163          } catch (error) {
6164            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6165          }
6166        })
6167      Web({ src: 'www.example.com', controller: this.controller })
6168    }
6169  }
6170}
6171```
6172### getRenderProcessMode<sup>12+</sup>
6173
6174static getRenderProcessMode(): RenderProcessMode
6175
6176查询ArkWeb的渲染子进程模式。
6177
6178**系统能力:** SystemCapability.Web.Webview.Core
6179
6180**返回值:**
6181
6182| 类型                                      | 说明                                                         |
6183| ----------------------------------------- | ------------------------------------------------------------ |
6184| [RenderProcessMode](#renderprocessmode12) | 渲染子进程模式类型。调用[getRenderProcessMode()](#getrenderprocessmode12)获取当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。 |
6185
6186
6187**示例:**
6188
6189```ts
6190// xxx.ets
6191import { webview } from '@kit.ArkWeb';
6192
6193@Entry
6194@Component
6195struct WebComponent {
6196  controller: webview.WebviewController = new webview.WebviewController();
6197
6198  build() {
6199    Column() {
6200      Button('getRenderProcessMode')
6201        .onClick(() => {
6202          let mode = webview.WebviewController.getRenderProcessMode();
6203          console.log("getRenderProcessMode: " + mode);
6204        })
6205      Web({ src: 'www.example.com', controller: this.controller })
6206    }
6207  }
6208}
6209```
6210
6211### terminateRenderProcess<sup>12+</sup>
6212
6213terminateRenderProcess(): boolean
6214
6215销毁渲染进程。
6216
6217调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。
6218
6219**系统能力:** SystemCapability.Web.Webview.Core
6220
6221**返回值:**
6222
6223| 类型                                                         | 说明                   |
6224| ------------------------------------------------------------ | ---------------------- |
6225| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。|
6226
6227**错误码:**
6228
6229以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6230
6231| 错误码ID  | 错误信息                                                      |
6232| -------- | ------------------------------------------------------------ |
6233| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6234
6235**示例:**
6236
6237```ts
6238// xxx.ets
6239import { webview } from '@kit.ArkWeb';
6240
6241@Entry
6242@Component
6243struct WebComponent {
6244  controller: webview.WebviewController = new webview.WebviewController();
6245
6246  build() {
6247    Column() {
6248      Button('terminateRenderProcess')
6249        .onClick(() => {
6250          let result = this.controller.terminateRenderProcess();
6251          console.log("terminateRenderProcess result: " + result);
6252        })
6253      Web({ src: 'www.example.com', controller: this.controller })
6254    }
6255  }
6256}
6257```
6258
6259### postUrl<sup>11+</sup>
6260
6261postUrl(url: string, postData: ArrayBuffer): void
6262
6263使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。
6264
6265**系统能力:** SystemCapability.Web.Webview.Core
6266
6267**参数:**
6268
6269| 参数名  | 类型             | 必填 | 说明                  |
6270| ------- | ---------------- | ---- | :-------------------- |
6271| url     | string | 是   | 需要加载的 URL。      |
6272| postData | ArrayBuffer | 是   | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。|
6273
6274**错误码:**
6275
6276以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6277
6278| 错误码ID | 错误信息                                                     |
6279| -------- | ------------------------------------------------------------ |
6280| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6281| 17100002 | Invalid url.                                                 |
6282| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6283
6284**示例:**
6285
6286```ts
6287// xxx.ets
6288import { webview } from '@kit.ArkWeb';
6289import { BusinessError } from '@kit.BasicServicesKit';
6290
6291class TestObj {
6292  constructor() {
6293  }
6294
6295  test(str: string): ArrayBuffer {
6296    let buf = new ArrayBuffer(str.length);
6297    let buff = new Uint8Array(buf);
6298
6299    for (let i = 0; i < str.length; i++) {
6300      buff[i] = str.charCodeAt(i);
6301    }
6302    return buf;
6303  }
6304}
6305
6306@Entry
6307@Component
6308struct WebComponent {
6309  controller: webview.WebviewController = new webview.WebviewController();
6310  @State testObjtest: TestObj = new TestObj();
6311
6312  build() {
6313    Column() {
6314      Button('postUrl')
6315        .onClick(() => {
6316          try {
6317            // 数据转化为ArrayBuffer类型。
6318            let postData = this.testObjtest.test("Name=test&Password=test");
6319            this.controller.postUrl('www.example.com', postData);
6320          } catch (error) {
6321            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6322          }
6323        })
6324      Web({ src: '', controller: this.controller })
6325    }
6326  }
6327}
6328```
6329
6330### createWebPrintDocumentAdapter<sup>11+</sup>
6331
6332createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter
6333
6334创建web相关打印功能。
6335
6336**系统能力:** SystemCapability.Web.Webview.Core
6337
6338**参数:**
6339
6340| 参数名  | 类型    | 必填 | 说明                  |
6341| ------- | ------ | ---- | :-------------------- |
6342| jobName | string | 是   | 需要打印的文件名。      |
6343
6344**返回值:**
6345
6346| 类型                 | 说明                      |
6347| -------------------- | ------------------------- |
6348| print.printDocumentAdapter | 返回打印文档的适配器。 |
6349
6350**错误码:**
6351
6352以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6353
6354| 错误码ID | 错误信息                                                                    |
6355| -------- | -------------------------------------------------------------------------- |
6356| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6357| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6358
6359**示例:**
6360
6361```ts
6362// xxx.ets
6363import { webview } from '@kit.ArkWeb';
6364import { BusinessError, print } from '@kit.BasicServicesKit';
6365
6366@Entry
6367@Component
6368struct WebComponent {
6369  controller: webview.WebviewController = new webview.WebviewController();
6370
6371  build() {
6372    Column() {
6373      Button('createWebPrintDocumentAdapter')
6374        .onClick(() => {
6375          try {
6376            let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf');
6377            print.print('example_jobid', webPrintDocadapter, null, getContext());
6378          } catch (error) {
6379            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6380          }
6381        })
6382      Web({ src: 'www.example.com', controller: this.controller })
6383    }
6384  }
6385}
6386```
6387### isIncognitoMode<sup>11+</sup>
6388
6389isIncognitoMode(): boolean
6390
6391查询当前是否是隐私模式的Webview。
6392
6393**系统能力:** SystemCapability.Web.Webview.Core
6394
6395**返回值:**
6396
6397| 类型                 | 说明                      |
6398| -------------------- | ------------------------- |
6399| boolean              | 返回是否是隐私模式的Webview。 |
6400
6401**错误码:**
6402
6403以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6404
6405| 错误码ID | 错误信息                                                                    |
6406| -------- | -------------------------------------------------------------------------- |
6407| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6408
6409**示例:**
6410
6411```ts
6412// xxx.ets
6413import { webview } from '@kit.ArkWeb';
6414import { BusinessError } from '@kit.BasicServicesKit';
6415
6416@Entry
6417@Component
6418struct WebComponent {
6419  controller: webview.WebviewController = new webview.WebviewController();
6420
6421  build() {
6422    Column() {
6423      Button('isIncognitoMode')
6424        .onClick(() => {
6425          try {
6426            let result = this.controller.isIncognitoMode();
6427            console.log('isIncognitoMode' + result);
6428          } catch (error) {
6429            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6430          }
6431        })
6432      Web({ src: 'www.example.com', controller: this.controller })
6433    }
6434  }
6435}
6436```
6437
6438### getSecurityLevel<sup>11+</sup>
6439
6440getSecurityLevel(): SecurityLevel
6441
6442获取当前网页的安全级别。
6443
6444**系统能力:** SystemCapability.Web.Webview.Core
6445
6446**返回值:**
6447
6448| 类型                                | 说明                        |
6449| ----------------------------------- | --------------------------- |
6450| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 |
6451
6452**错误码:**
6453
6454以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6455
6456| 错误码ID | 错误信息                                                     |
6457| -------- | ------------------------------------------------------------ |
6458| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6459
6460**示例:**
6461
6462```ts
6463import { webview } from '@kit.ArkWeb';
6464
6465@Entry
6466@Component
6467struct WebComponent {
6468  controller: webview.WebviewController = new webview.WebviewController();
6469
6470  build() {
6471    Column() {
6472      Web({ src: 'www.example.com', controller: this.controller })
6473        .onPageEnd((event) => {
6474          if (event) {
6475            let securityLevel = this.controller.getSecurityLevel();
6476            console.info('securityLevel: ', securityLevel);
6477          }
6478        })
6479    }
6480  }
6481}
6482```
6483
6484### setScrollable<sup>12+</sup>
6485
6486setScrollable(enable: boolean, type?: ScrollType): void
6487
6488设置网页是否允许滚动。
6489
6490**系统能力:** SystemCapability.Web.Webview.Core
6491
6492**参数:**
6493
6494| 参数名 | 类型 | 必填 | 说明               |
6495| ------ | -------- | ---- | ---------------------- |
6496| enable     | boolean   | 是   | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 |
6497| type       | [ScrollType](#scrolltype12) |  否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。|
6498
6499**错误码:**
6500
6501以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6502
6503| 错误码ID | 错误信息                                                     |
6504| -------- | ------------------------------------------------------------ |
6505| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
6506| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6507
6508**示例:**
6509
6510```ts
6511// xxx.ets
6512import { webview } from '@kit.ArkWeb';
6513import { BusinessError } from '@kit.BasicServicesKit';
6514
6515@Entry
6516@Component
6517struct WebComponent {
6518  controller: webview.WebviewController = new webview.WebviewController();
6519
6520  build() {
6521    Column() {
6522      Button('setScrollable')
6523        .onClick(() => {
6524          try {
6525            this.controller.setScrollable(true);
6526          } catch (error) {
6527            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6528          }
6529        })
6530      Web({ src: 'www.example.com', controller: this.controller })
6531    }
6532  }
6533}
6534```
6535
6536### getScrollable<sup>12+</sup>
6537
6538getScrollable(): boolean
6539
6540获取当前网页是否允许滚动。
6541
6542**系统能力:** SystemCapability.Web.Webview.Core
6543
6544**返回值:**
6545
6546| 类型   | 说明           |
6547| ------ | -------------- |
6548| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 |
6549
6550**错误码:**
6551
6552以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6553
6554| 错误码ID | 错误信息                                                     |
6555| -------- | ------------------------------------------------------------ |
6556| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6557
6558**示例:**
6559
6560```ts
6561// xxx.ets
6562import { webview } from '@kit.ArkWeb';
6563import { BusinessError } from '@kit.BasicServicesKit';
6564
6565@Entry
6566@Component
6567struct WebComponent {
6568  controller: webview.WebviewController = new webview.WebviewController();
6569
6570  build() {
6571    Column() {
6572      Button('getScrollable')
6573        .onClick(() => {
6574          try {
6575            let scrollEnabled = this.controller.getScrollable();
6576            console.log("scrollEnabled: " + scrollEnabled);
6577          } catch (error) {
6578            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6579          }
6580        })
6581      Web({ src: 'www.example.com', controller: this.controller })
6582    }
6583  }
6584}
6585```
6586
6587### setPrintBackground<sup>12+</sup>
6588
6589setPrintBackground(enable: boolean): void
6590
6591设置是否打印网页背景。
6592
6593**系统能力:** SystemCapability.Web.Webview.Core
6594
6595**参数:**
6596
6597| 参数名   | 类型    | 必填 | 说明                      |
6598| -------- | ------- | ---- | -------------------------------------- |
6599| enable | boolean | 是   | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 |
6600
6601**错误码:**
6602
6603以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6604
6605| 错误码ID | 错误信息                                                     |
6606| -------- | ------------------------------------------------------------ |
6607| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6608| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6609
6610**示例:**
6611
6612```ts
6613import { webview } from '@kit.ArkWeb';
6614import { BusinessError } from '@kit.BasicServicesKit';
6615
6616@Entry
6617@Component
6618struct WebComponent {
6619  controller: webview.WebviewController = new webview.WebviewController();
6620
6621  build() {
6622    Column() {
6623      Button('setPrintBackground')
6624        .onClick(() => {
6625          try {
6626            this.controller.setPrintBackground(false);
6627          } catch (error) {
6628            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6629          }
6630        })
6631      Web({ src: 'www.example.com', controller: this.controller })
6632    }
6633  }
6634}
6635```
6636
6637### getPrintBackground<sup>12+</sup>
6638
6639getPrintBackground(): boolean
6640
6641查询webview是否打印网页背景。
6642
6643**系统能力:** SystemCapability.Web.Webview.Core
6644
6645**返回值:**
6646
6647| 类型                 | 说明                      |
6648| -------------------- | ------------------------- |
6649| boolean              | 返回Webview是否打印网页背景。 |
6650
6651**错误码:**
6652
6653以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6654
6655| 错误码ID | 错误信息                                                     |
6656| -------- | ------------------------------------------------------------ |
6657| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6658
6659**示例:**
6660
6661```ts
6662import { webview } from '@kit.ArkWeb';
6663import { BusinessError } from '@kit.BasicServicesKit';
6664
6665@Entry
6666@Component
6667struct WebComponent {
6668  controller: webview.WebviewController = new webview.WebviewController();
6669
6670  build() {
6671    Column() {
6672      Button('setPrintBackground')
6673        .onClick(() => {
6674          try {
6675            let enable = this.controller.getPrintBackground();
6676            console.log("getPrintBackground: " + enable);
6677          } catch (error) {
6678            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6679          }
6680        })
6681      Web({ src: 'www.example.com', controller: this.controller })
6682    }
6683  }
6684}
6685```
6686
6687### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>
6688
6689getLastJavascriptProxyCallingFrameUrl(): string
6690
6691通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。
6692
6693**系统能力:** SystemCapability.Web.Webview.Core
6694
6695**错误码:**
6696
6697以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6698
6699| 错误码ID | 错误信息                                                     |
6700| -------- | ------------------------------------------------------------ |
6701| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6702
6703**示例:**
6704
6705```ts
6706// xxx.ets
6707import { webview } from '@kit.ArkWeb';
6708import { BusinessError } from '@kit.BasicServicesKit';
6709
6710class TestObj {
6711  mycontroller: webview.WebviewController;
6712
6713  constructor(controller: webview.WebviewController) {
6714    this.mycontroller = controller;
6715  }
6716
6717  test(testStr: string): string {
6718    console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6719    return testStr;
6720  }
6721
6722  toString(): void {
6723    console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6724  }
6725
6726  testNumber(testNum: number): number {
6727    console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6728    return testNum;
6729  }
6730
6731  testBool(testBol: boolean): boolean {
6732    console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6733    return testBol;
6734  }
6735}
6736
6737class WebObj {
6738  mycontroller: webview.WebviewController;
6739
6740  constructor(controller: webview.WebviewController) {
6741    this.mycontroller = controller;
6742  }
6743
6744  webTest(): string {
6745    console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6746    return "Web test";
6747  }
6748
6749  webString(): void {
6750    console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6751  }
6752}
6753
6754@Entry
6755@Component
6756struct Index {
6757  controller: webview.WebviewController = new webview.WebviewController();
6758  @State testObjtest: TestObj = new TestObj(this.controller);
6759  @State webTestObj: WebObj = new WebObj(this.controller);
6760
6761  build() {
6762    Column() {
6763      Button('refresh')
6764        .onClick(() => {
6765          try {
6766            this.controller.refresh();
6767          } catch (error) {
6768            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6769          }
6770        })
6771      Button('Register JavaScript To Window')
6772        .onClick(() => {
6773          try {
6774            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
6775            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
6776          } catch (error) {
6777            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6778          }
6779        })
6780      Button('deleteJavaScriptRegister')
6781        .onClick(() => {
6782          try {
6783            this.controller.deleteJavaScriptRegister("objName");
6784            this.controller.deleteJavaScriptRegister("objTestName");
6785          } catch (error) {
6786            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6787          }
6788        })
6789      Web({ src: $rawfile('index.html'), controller: this.controller })
6790        .javaScriptAccess(true)
6791    }
6792  }
6793}
6794```
6795
6796加载的html文件。
6797```html
6798<!-- index.html -->
6799<!DOCTYPE html>
6800<html>
6801    <meta charset="utf-8">
6802    <body>
6803      <button type="button" onclick="htmlTest()">Click Me!</button>
6804      <p id="demo"></p>
6805      <p id="webDemo"></p>
6806    </body>
6807    <script type="text/javascript">
6808    function htmlTest() {
6809      // This function call expects to return "ArkUI Web Component"
6810      let str=objName.test("webtest data");
6811      objName.testNumber(1);
6812      objName.testBool(true);
6813      document.getElementById("demo").innerHTML=str;
6814      console.log('objName.test result:'+ str)
6815
6816      // This function call expects to return "Web test"
6817      let webStr = objTestName.webTest();
6818      document.getElementById("webDemo").innerHTML=webStr;
6819      console.log('objTestName.webTest result:'+ webStr)
6820    }
6821</script>
6822</html>
6823```
6824
6825### pauseAllTimers<sup>12+</sup>
6826
6827pauseAllTimers(): void
6828
6829暂停所有WebView的定时器。
6830
6831**系统能力:** SystemCapability.Web.Webview.Core
6832
6833**错误码:**
6834
6835以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6836
6837| 错误码ID | 错误信息                                                     |
6838| -------- | ------------------------------------------------------------ |
6839| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6840
6841**示例:**
6842
6843```ts
6844import { webview } from '@kit.ArkWeb';
6845import { BusinessError } from '@kit.BasicServicesKit';
6846
6847@Entry
6848@Component
6849struct WebComponent {
6850  controller: webview.WebviewController = new webview.WebviewController();
6851
6852  build() {
6853    Column() {
6854      Row() {
6855        Button('PauseAllTimers')
6856          .onClick(() => {
6857            try {
6858              webview.WebviewController.pauseAllTimers();
6859            } catch (error) {
6860              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6861            }
6862          })
6863      }
6864      Web({ src: $rawfile("index.html"), controller: this.controller })
6865    }
6866  }
6867}
6868```
6869加载的html文件。
6870
6871```html
6872<!DOCTYPE html>
6873<html>
6874    <body>
6875        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6876        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6877        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6878    </body>
6879</html>
6880<script>
6881    var timer = null;
6882    var num = 0;
6883
6884    function startTimer() {
6885        timer = setInterval(function() {
6886            document.getElementById("show_num").value = ++num;
6887        }, 1000);
6888    }
6889</script>
6890```
6891
6892### resumeAllTimers<sup>12+</sup>
6893
6894resumeAllTimers(): void
6895
6896恢复从pauseAllTimers()接口中被暂停的所有的定时器。
6897
6898**系统能力:** SystemCapability.Web.Webview.Core
6899
6900**错误码:**
6901
6902以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6903
6904| 错误码ID | 错误信息                                                     |
6905| -------- | ------------------------------------------------------------ |
6906| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6907
6908**示例:**
6909
6910```ts
6911import { webview } from '@kit.ArkWeb';
6912import { BusinessError } from '@kit.BasicServicesKit';
6913
6914@Entry
6915@Component
6916struct WebComponent {
6917  controller: webview.WebviewController = new webview.WebviewController();
6918
6919  build() {
6920    Column() {
6921      Row() {
6922        Button('ResumeAllTimers')
6923          .onClick(() => {
6924            try {
6925              webview.WebviewController.resumeAllTimers();
6926            } catch (error) {
6927              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6928            }
6929          })
6930        Button('PauseAllTimers')
6931          .onClick(() => {
6932            try {
6933              webview.WebviewController.pauseAllTimers();
6934            } catch (error) {
6935              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6936            }
6937          })
6938      }
6939      Web({ src: $rawfile("index.html"), controller: this.controller })
6940    }
6941  }
6942}
6943```
6944加载的html文件。
6945
6946```html
6947<!DOCTYPE html>
6948<html>
6949    <body>
6950        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6951        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6952        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6953    </body>
6954</html>
6955<script>
6956    var timer = null;
6957    var num = 0;
6958
6959    function startTimer() {
6960        timer = setInterval(function() {
6961            document.getElementById("show_num").value = ++num;
6962        }, 1000);
6963    }
6964
6965    function resetTimer() {
6966        clearInterval(timer);
6967        document.getElementById("show_num").value = 0;
6968        num = 0;
6969    }
6970</script>
6971```
6972
6973### stopAllMedia<sup>12+</sup>
6974
6975stopAllMedia(): void
6976
6977控制网页所有音视频停止。
6978
6979**系统能力:** SystemCapability.Web.Webview.Core
6980
6981**错误码:**
6982
6983以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6984
6985| 错误码ID | 错误信息                                                     |
6986| -------- | ------------------------------------------------------------ |
6987| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6988
6989**示例:**
6990
6991```ts
6992// xxx.ets
6993import { webview } from '@kit.ArkWeb';
6994import { BusinessError } from '@kit.BasicServicesKit';
6995
6996@Entry
6997@Component
6998struct WebComponent {
6999  controller: webview.WebviewController = new webview.WebviewController();
7000
7001  build() {
7002    Column() {
7003      Button('stopAllMedia')
7004        .onClick(() => {
7005          try {
7006            this.controller.stopAllMedia();
7007          } catch (error) {
7008            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7009          }
7010        })
7011      Web({ src: 'www.example.com', controller: this.controller })
7012    }
7013  }
7014}
7015```
7016
7017### pauseAllMedia<sup>12+</sup>
7018
7019pauseAllMedia(): void
7020
7021控制网页所有音视频暂停。
7022
7023**系统能力:** SystemCapability.Web.Webview.Core
7024
7025**错误码:**
7026
7027以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7028
7029| 错误码ID | 错误信息                                                     |
7030| -------- | ------------------------------------------------------------ |
7031| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7032
7033**示例:**
7034
7035```ts
7036// xxx.ets
7037import { webview } from '@kit.ArkWeb';
7038import { BusinessError } from '@kit.BasicServicesKit';
7039
7040@Entry
7041@Component
7042struct WebComponent {
7043  controller: webview.WebviewController = new webview.WebviewController();
7044
7045  build() {
7046    Column() {
7047      Button('pauseAllMedia')
7048        .onClick(() => {
7049          try {
7050            this.controller.pauseAllMedia();
7051          } catch (error) {
7052            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7053          }
7054        })
7055      Web({ src: 'www.example.com', controller: this.controller })
7056    }
7057  }
7058}
7059```
7060
7061### resumeAllMedia<sup>12+</sup>
7062
7063resumeAllMedia(): void
7064
7065控制网页被pauseAllMedia接口暂停的音视频继续播放。
7066
7067**系统能力:** SystemCapability.Web.Webview.Core
7068
7069**错误码:**
7070
7071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7072
7073| 错误码ID | 错误信息                                                     |
7074| -------- | ------------------------------------------------------------ |
7075| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7076
7077**示例:**
7078
7079```ts
7080// xxx.ets
7081import { webview } from '@kit.ArkWeb';
7082import { BusinessError } from '@kit.BasicServicesKit';
7083
7084@Entry
7085@Component
7086struct WebComponent {
7087  controller: webview.WebviewController = new webview.WebviewController();
7088
7089  build() {
7090    Column() {
7091      Button('resumeAllMedia')
7092        .onClick(() => {
7093          try {
7094            this.controller.resumeAllMedia();
7095          } catch (error) {
7096            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7097          }
7098        })
7099      Web({ src: 'www.example.com', controller: this.controller })
7100    }
7101  }
7102}
7103```
7104
7105### closeAllMediaPresentations<sup>12+</sup>
7106
7107closeAllMediaPresentations(): void
7108
7109控制网页所有全屏视频关闭。
7110
7111**系统能力:** SystemCapability.Web.Webview.Core
7112
7113**错误码:**
7114
7115以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7116
7117| 错误码ID | 错误信息                                                     |
7118| -------- | ------------------------------------------------------------ |
7119| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7120
7121**示例:**
7122
7123```ts
7124// xxx.ets
7125import { webview } from '@kit.ArkWeb';
7126import { BusinessError } from '@kit.BasicServicesKit';
7127
7128@Entry
7129@Component
7130struct WebComponent {
7131  controller: webview.WebviewController = new webview.WebviewController();
7132
7133  build() {
7134    Column() {
7135      Button('closeAllMediaPresentations')
7136        .onClick(() => {
7137          try {
7138            this.controller.closeAllMediaPresentations();
7139          } catch (error) {
7140            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7141          }
7142        })
7143      Web({ src: 'www.example.com', controller: this.controller })
7144    }
7145  }
7146}
7147```
7148
7149### getMediaPlaybackState<sup>12+</sup>
7150
7151getMediaPlaybackState(): MediaPlaybackState
7152
7153查询当前所有音视频播控状态。
7154
7155**系统能力:** SystemCapability.Web.Webview.Core
7156
7157**返回值:**
7158
7159| 类型                                        | 说明                                                      |
7160| ------------------------------------------- | --------------------------------------------------------- |
7161| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 |
7162
7163**错误码:**
7164
7165以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7166
7167| 错误码ID | 错误信息                                                     |
7168| -------- | ------------------------------------------------------------ |
7169| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7170
7171**示例:**
7172
7173```ts
7174// xxx.ets
7175import { webview } from '@kit.ArkWeb';
7176import { BusinessError } from '@kit.BasicServicesKit';
7177
7178@Entry
7179@Component
7180struct WebComponent {
7181  controller: webview.WebviewController = new webview.WebviewController();
7182
7183  build() {
7184    Column() {
7185      Button('getMediaPlaybackState')
7186        .onClick(() => {
7187          try {
7188            console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState());
7189          } catch (error) {
7190            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7191          }
7192        })
7193      Web({ src: 'www.example.com', controller: this.controller })
7194    }
7195  }
7196}
7197```
7198
7199### setWebSchemeHandler<sup>12+</sup>
7200
7201setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7202
7203为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。
7204
7205**系统能力:** SystemCapability.Web.Webview.Core
7206
7207**参数:**
7208
7209| 参数名 | 类型   | 必填 | 说明                      |
7210| ------ | ------ | ---- | :------------------------ |
7211| scheme    | string | 是   | 要拦截的协议。 |
7212| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7213
7214**错误码:**
7215
7216以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7217
7218| 错误码ID | 错误信息                                                     |
7219| -------- | ------------------------------------------------------------ |
7220| 401      | Parameter error. Possible causes: 1. Incorrect parameter types.                                    |
7221| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7222
7223**示例:**
7224
7225```ts
7226// xxx.ets
7227import { webview } from '@kit.ArkWeb';
7228import { BusinessError } from '@kit.BasicServicesKit';
7229
7230@Entry
7231@Component
7232struct WebComponent {
7233  controller: webview.WebviewController = new webview.WebviewController();
7234  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7235
7236  build() {
7237    Column() {
7238      Button('setWebSchemeHandler')
7239        .onClick(() => {
7240          try {
7241            this.controller.setWebSchemeHandler('http', this.schemeHandler);
7242          } catch (error) {
7243            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7244          }
7245        })
7246      Web({ src: 'www.example.com', controller: this.controller })
7247    }
7248  }
7249}
7250```
7251
7252### clearWebSchemeHandler<sup>12+</sup>
7253
7254clearWebSchemeHandler(): void
7255
7256清除当前Web组件设置的所有WebSchemeHandler。
7257
7258**系统能力:** SystemCapability.Web.Webview.Core
7259
7260**错误码:**
7261
7262以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7263
7264| 错误码ID | 错误信息                                                     |
7265| -------- | ------------------------------------------------------------ |
7266| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7267
7268**示例:**
7269
7270```ts
7271// xxx.ets
7272import { webview } from '@kit.ArkWeb';
7273import { BusinessError } from '@kit.BasicServicesKit';
7274
7275@Entry
7276@Component
7277struct WebComponent {
7278  controller: webview.WebviewController = new webview.WebviewController();
7279
7280  build() {
7281    Column() {
7282      Button('clearWebSchemeHandler')
7283        .onClick(() => {
7284          try {
7285            this.controller.clearWebSchemeHandler();
7286          } catch (error) {
7287            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7288          }
7289        })
7290      Web({ src: 'www.example.com', controller: this.controller })
7291    }
7292  }
7293}
7294```
7295
7296### setServiceWorkerWebSchemeHandler<sup>12+</sup>
7297
7298setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7299
7300为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。
7301
7302**系统能力:** SystemCapability.Web.Webview.Core
7303
7304**参数:**
7305
7306| 参数名 | 类型   | 必填 | 说明                      |
7307| ------ | ------ | ---- | :------------------------ |
7308| scheme    | string | 是   | 要拦截的协议。 |
7309| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7310
7311**错误码:**
7312
7313以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7314
7315| 错误码ID | 错误信息                                                     |
7316| -------- | ------------------------------------------------------------ |
7317| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
7318
7319**示例:**
7320
7321```ts
7322// xxx.ets
7323import { webview } from '@kit.ArkWeb';
7324import { BusinessError } from '@kit.BasicServicesKit';
7325
7326@Entry
7327@Component
7328struct WebComponent {
7329  controller: webview.WebviewController = new webview.WebviewController();
7330  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7331
7332  build() {
7333    Column() {
7334      Button('setWebSchemeHandler')
7335        .onClick(() => {
7336          try {
7337            webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler);
7338          } catch (error) {
7339            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7340          }
7341        })
7342      Web({ src: 'www.example.com', controller: this.controller })
7343    }
7344  }
7345}
7346```
7347
7348### clearServiceWorkerWebSchemeHandler<sup>12+</sup>
7349
7350clearServiceWorkerWebSchemeHandler(): void
7351
7352清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。
7353
7354**系统能力:** SystemCapability.Web.Webview.Core
7355
7356**示例:**
7357
7358```ts
7359// xxx.ets
7360import { webview } from '@kit.ArkWeb';
7361
7362@Entry
7363@Component
7364struct WebComponent {
7365  controller: webview.WebviewController = new webview.WebviewController();
7366
7367  build() {
7368    Column() {
7369      Button('clearServiceWorkerWebSchemeHandler')
7370        .onClick(() => {
7371          webview.WebviewController.clearServiceWorkerWebSchemeHandler();
7372        })
7373      Web({ src: 'www.example.com', controller: this.controller })
7374    }
7375  }
7376}
7377```
7378
7379### startCamera<sup>12+</sup>
7380
7381startCamera(): void
7382
7383开启当前网页摄像头捕获。
7384
7385**系统能力:** SystemCapability.Web.Webview.Core
7386
7387**错误码:**
7388
7389以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7390
7391| 错误码ID | 错误信息                                                     |
7392| -------- | ------------------------------------------------------------ |
7393| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7394
7395**示例:**
7396```ts
7397// xxx.ets
7398import { webview } from '@kit.ArkWeb';
7399import { BusinessError } from '@kit.BasicServicesKit';
7400import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
7401
7402let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
7403try {
7404  let context: Context = getContext(this) as common.UIAbilityContext;
7405  atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
7406    console.info('data:' + JSON.stringify(data));
7407    console.info('data permissions:' + data.permissions);
7408    console.info('data authResults:' + data.authResults);
7409  })
7410} catch (error) {
7411  console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7412}
7413
7414@Entry
7415@Component
7416struct WebComponent {
7417  controller: webview.WebviewController = new webview.WebviewController();
7418
7419  build() {
7420    Column() {
7421      Button("startCamera").onClick(() => {
7422        try {
7423          this.controller.startCamera();
7424        } catch (error) {
7425          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7426        }
7427      })
7428      Button("stopCamera").onClick(() => {
7429        try {
7430          this.controller.stopCamera();
7431        } catch (error) {
7432          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7433        }
7434      })
7435      Button("closeCamera").onClick(() => {
7436        try {
7437          this.controller.closeCamera();
7438        } catch (error) {
7439          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7440        }
7441      })
7442      Web({ src: $rawfile('index.html'), controller: this.controller })
7443        .onPermissionRequest((event) => {
7444          if (event) {
7445            AlertDialog.show({
7446              title: 'title',
7447              message: 'text',
7448              primaryButton: {
7449                value: 'deny',
7450                action: () => {
7451                  event.request.deny();
7452                }
7453              },
7454              secondaryButton: {
7455                value: 'onConfirm',
7456                action: () => {
7457                  event.request.grant(event.request.getAccessibleResource());
7458                }
7459              },
7460              cancel: () => {
7461                event.request.deny();
7462              }
7463            })
7464          }
7465        })
7466    }
7467  }
7468}
7469
7470```
7471加载的html文件。
7472 ```html
7473<!-- index.html -->
7474<!DOCTYPE html>
7475<html>
7476  <head>
7477    <meta charset="UTF-8">
7478  </head>
7479  <body>
7480    <video id="video" width="400px" height="400px" autoplay="autoplay">
7481    </video>
7482    <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" />
7483    <script>
7484      function getMedia() {
7485        let constraints = {
7486          video: {
7487            width: 500,
7488            height: 500
7489          },
7490          audio: true
7491        }
7492        let video = document.getElementById("video");
7493        let promise = navigator.mediaDevices.getUserMedia(constraints);
7494        promise.then(function(MediaStream) {
7495          video.srcObject = MediaStream;
7496          video.play();
7497        })
7498      }
7499    </script>
7500  </body>
7501</html>
7502 ```
7503
7504### stopCamera<sup>12+</sup>
7505
7506stopCamera(): void
7507
7508停止当前网页摄像头捕获。
7509
7510**系统能力:** SystemCapability.Web.Webview.Core
7511
7512**错误码:**
7513
7514以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7515
7516| 错误码ID | 错误信息                                                     |
7517| -------- | ------------------------------------------------------------ |
7518| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7519
7520**示例:**
7521
7522完整示例代码参考[startCamera](#startcamera12)。
7523
7524### closeCamera<sup>12+</sup>
7525
7526closeCamera(): void
7527
7528关闭当前网页摄像头捕获。
7529
7530**系统能力:** SystemCapability.Web.Webview.Core
7531
7532**错误码:**
7533
7534以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7535
7536| 错误码ID | 错误信息                                                     |
7537| -------- | ------------------------------------------------------------ |
7538| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7539
7540**示例:**
7541
7542完整示例代码参考[startCamera](#startcamera12)。
7543
7544### precompileJavaScript<sup>12+</sup>
7545
7546precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\>
7547
7548预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。
7549接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。
7550
7551**系统能力:** SystemCapability.Web.Webview.Core
7552
7553**参数:**
7554
7555| 参数名  | 类型    | 必填 | 说明                  |
7556| ------- | ------ | ---- | :-------------------- |
7557| url | string | 是   | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。      |
7558| script | string \| Uint8Array | 是   | 本地JavaScript的文本内容。内容不能为空。      |
7559| cacheOptions | [CacheOptions](#cacheoptions12) | 是   | 用于控制字节码缓存更新。      |
7560
7561**返回值:**
7562
7563| 类型                                | 说明                        |
7564| ----------------------------------- | --------------------------- |
7565| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 |
7566
7567**错误码:**
7568
7569以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7570
7571| 错误码ID | 错误信息                                                     |
7572| -------- | ------------------------------------------------------------ |
7573| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
7574| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7575
7576**示例:**
7577
7578接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例:
7579
75801. 首先,在EntryAbility中将UIContext存到localStorage中。
7581
7582   ```ts
7583   // EntryAbility.ets
7584   import { UIAbility } from '@kit.AbilityKit';
7585   import { window } from '@kit.ArkUI';
7586
7587   const localStorage: LocalStorage = new LocalStorage('uiContext');
7588
7589   export default class EntryAbility extends UIAbility {
7590     storage: LocalStorage = localStorage;
7591
7592     onWindowStageCreate(windowStage: window.WindowStage) {
7593       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
7594         if (err.code) {
7595           return;
7596         }
7597
7598         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
7599       });
7600     }
7601   }
7602   ```
7603
76042. 编写动态组件所需基础代码。
7605
7606   ```ts
7607   // DynamicComponent.ets
7608   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
7609
7610   export interface BuilderData {
7611     url: string;
7612     controller: WebviewController;
7613   }
7614
7615   const storage = LocalStorage.getShared();
7616
7617   export class NodeControllerImpl extends NodeController {
7618     private rootNode: BuilderNode<BuilderData[]> | null = null;
7619     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
7620
7621     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
7622       super();
7623       this.wrappedBuilder = wrappedBuilder;
7624     }
7625
7626     makeNode(): FrameNode | null {
7627       if (this.rootNode != null) {
7628         return this.rootNode.getFrameNode();
7629       }
7630       return null;
7631     }
7632
7633     initWeb(url: string, controller: WebviewController) {
7634       if(this.rootNode != null) {
7635         return;
7636       }
7637
7638       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
7639       if (!uiContext) {
7640         return;
7641       }
7642       this.rootNode = new BuilderNode(uiContext);
7643       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
7644     }
7645   }
7646
7647   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
7648     const baseNode = new NodeControllerImpl(wrappedBuilder);
7649     baseNode.initWeb(data.url, data.controller);
7650     return baseNode;
7651   }
7652   ```
7653
76543. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。
7655
7656   <!--code_no_check-->
7657   ```ts
7658   // PrecompileWebview.ets
7659   import { BuilderData } from "./DynamicComponent";
7660   import { Config, configs } from "./PrecompileConfig";
7661
7662   @Builder
7663   function WebBuilder(data: BuilderData) {
7664     Web({ src: data.url, controller: data.controller })
7665       .onControllerAttached(() => {
7666         precompile(data.controller, configs);
7667       })
7668       .fileAccess(true)
7669   }
7670
7671   export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7672
7673   export const precompile = async (controller: WebviewController, configs: Array<Config>) => {
7674     for (const config of configs) {
7675       let content = await readRawFile(config.localPath);
7676
7677       try {
7678         controller.precompileJavaScript(config.url, content, config.options)
7679           .then(errCode => {
7680             console.error("precompile successfully! " + errCode);
7681           }).catch((errCode: number) => {
7682             console.error("precompile failed. " + errCode);
7683         });
7684       } catch (err) {
7685         console.error("precompile failed. " + err.code + " " + err.message);
7686       }
7687     }
7688   }
7689
7690   async function readRawFile(path: string) {
7691     try {
7692       return await getContext().resourceManager.getRawFileContent(path);;
7693     } catch (err) {
7694       return new Uint8Array(0);
7695     }
7696   }
7697   ```
7698
7699JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。
7700
77014. 编写业务用组件代码。
7702
7703   <!--code_no_check-->
7704   ```ts
7705   // BusinessWebview.ets
7706   import { BuilderData } from "./DynamicComponent";
7707
7708   @Builder
7709   function WebBuilder(data: BuilderData) {
7710     // 此处组件可根据业务需要自行扩展
7711     Web({ src: data.url, controller: data.controller })
7712       .cacheMode(CacheMode.Default)
7713   }
7714
7715   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7716   ```
7717
77185. 编写资源配置信息。
7719
7720   ```ts
7721   // PrecompileConfig.ets
7722   import { webview } from '@kit.ArkWeb'
7723
7724   export interface Config {
7725     url:  string,
7726     localPath: string, // 本地资源路径
7727     options: webview.CacheOptions
7728   }
7729
7730   export let configs: Array<Config> = [
7731     {
7732       url: "https://www.example.com/example.js",
7733       localPath: "example.js",
7734       options: {
7735         responseHeaders: [
7736           { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="},
7737           { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"}
7738         ]
7739       }
7740     }
7741   ]
7742   ```
7743
77446. 在页面中使用。
7745
7746   <!--code_no_check-->
7747   ```ts
7748   // Index.ets
7749   import { webview } from '@kit.ArkWeb';
7750   import { NodeController } from '@kit.ArkUI';
7751   import { createNode } from "./DynamicComponent"
7752   import { precompileWebview } from "./PrecompileWebview"
7753   import { businessWebview } from "./BusinessWebview"
7754
7755   @Entry
7756   @Component
7757   struct Index {
7758     @State precompileNode: NodeController | undefined = undefined;
7759     precompileController: webview.WebviewController = new webview.WebviewController();
7760
7761     @State businessNode: NodeController | undefined = undefined;
7762     businessController: webview.WebviewController = new webview.WebviewController();
7763
7764     aboutToAppear(): void {
7765       // 初始化用于注入本地资源的Web组件
7766       this.precompileNode = createNode(precompileWebview,
7767         { url: "https://www.example.com/empty.html", controller: this.precompileController});
7768     }
7769
7770     build() {
7771       Column() {
7772         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
7773         Button("加载页面")
7774           .onClick(() => {
7775             this.businessNode = createNode(businessWebview, {
7776               url:  "https://www.example.com/business.html",
7777               controller: this.businessController
7778             });
7779           })
7780         // 用于业务的Web组件
7781         NodeContainer(this.businessNode);
7782       }
7783     }
7784   }
7785   ```
7786
7787当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。
7788
7789### onCreateNativeMediaPlayer<sup>12+</sup>
7790
7791onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void
7792
7793注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。
7794如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。
7795
7796**系统能力:** SystemCapability.Web.Webview.Core
7797
7798**参数:**
7799
7800| 参数名 | 类型 | 必填 | 说明 |
7801|--------|------|------|------|
7802| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 |
7803
7804**示例:**
7805
7806```ts
7807// xxx.ets
7808import { webview } from '@kit.ArkWeb';
7809
7810class ActualNativeMediaPlayerListener {
7811  handler: webview.NativeMediaPlayerHandler;
7812
7813  constructor(handler: webview.NativeMediaPlayerHandler) {
7814    this.handler = handler;
7815  }
7816
7817  onPlaying() {
7818    // 本地播放器开始播放。
7819    this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING);
7820  }
7821  onPaused() {
7822    // 本地播放器暂停播放。
7823    this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED);
7824  }
7825  onSeeking() {
7826    // 本地播放器开始执行跳转到目标时间点。
7827    this.handler.handleSeeking();
7828  }
7829  onSeekDone() {
7830    // 本地播放器 seek 完成。
7831    this.handler.handleSeekFinished();
7832  }
7833  onEnded() {
7834    // 本地播放器播放完成。
7835    this.handler.handleEnded();
7836  }
7837  onVolumeChanged() {
7838    // 获取本地播放器的音量。
7839    let volume: number = getVolume();
7840    this.handler.handleVolumeChanged(volume);
7841  }
7842  onCurrentPlayingTimeUpdate() {
7843    // 更新播放时间。
7844    let currentTime: number = getCurrentPlayingTime();
7845    // 将时间单位换算成秒。
7846    let currentTimeInSeconds = convertToSeconds(currentTime);
7847    this.handler.handleTimeUpdate(currentTimeInSeconds);
7848  }
7849  onBufferedChanged() {
7850    // 缓存发生了变化。
7851    // 获取本地播放器的缓存时长。
7852    let bufferedEndTime: number = getCurrentBufferedTime();
7853    // 将时间单位换算成秒。
7854    let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime);
7855    this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds);
7856
7857    // 检查缓存状态。
7858    // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。
7859    let lastReadyState: webview.ReadyState = getLastReadyState();
7860    let currentReadyState:  webview.ReadyState = getCurrentReadyState();
7861    if (lastReadyState != currentReadyState) {
7862      this.handler.handleReadyStateChanged(currentReadyState);
7863    }
7864  }
7865  onEnterFullscreen() {
7866    // 本地播放器进入了全屏状态。
7867    let isFullscreen: boolean = true;
7868    this.handler.handleFullscreenChanged(isFullscreen);
7869  }
7870  onExitFullscreen() {
7871    // 本地播放器退出了全屏状态。
7872    let isFullscreen: boolean = false;
7873    this.handler.handleFullscreenChanged(isFullscreen);
7874  }
7875  onUpdateVideoSize(width: number, height: number) {
7876    // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。
7877    this.handler.handleVideoSizeChanged(width, height);
7878  }
7879  onDurationChanged(duration: number) {
7880    // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。
7881    this.handler.handleDurationChanged(duration);
7882  }
7883  onError(error: webview.MediaError, errorMessage: string) {
7884    // 本地播放器出错了,通知 ArkWeb 内核。
7885    this.handler.handleError(error, errorMessage);
7886  }
7887  onNetworkStateChanged(state: webview.NetworkState) {
7888    // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。
7889    this.handler.handleNetworkStateChanged(state);
7890  }
7891  onPlaybackRateChanged(playbackRate: number) {
7892    // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。
7893    this.handler.handlePlaybackRateChanged(playbackRate);
7894  }
7895  onMutedChanged(muted: boolean) {
7896    // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。
7897    this.handler.handleMutedChanged(muted);
7898  }
7899
7900  // ... 监听本地播放器其他的状态 ...
7901}
7902
7903class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge {
7904  constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) {
7905    // 1. 创建一个本地播放器的状态监听。
7906    let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler);
7907    // 2. 创建一个本地播放器。
7908    // 3. 监听该本地播放器。
7909    // ...
7910  }
7911
7912  updateRect(x: number, y: number, width: number, height: number) {
7913    // <video> 标签的位置和大小发生了变化。
7914    // 根据该信息变化,作出相应的改变。
7915  }
7916
7917  play() {
7918    // 启动本地播放器播放。
7919  }
7920
7921  pause() {
7922    // 暂停本地播放器播放。
7923  }
7924
7925  seek(targetTime: number) {
7926    // 本地播放器跳转到指定的时间点。
7927  }
7928
7929  release() {
7930    // 销毁本地播放器。
7931  }
7932
7933  setVolume(volume: number) {
7934    // ArkWeb 内核要求调整本地播放器的音量。
7935    // 设置本地播放器的音量。
7936  }
7937
7938  setMuted(muted: boolean) {
7939    // 将本地播放器静音或取消静音。
7940  }
7941
7942  setPlaybackRate(playbackRate: number) {
7943    // 调整本地播放器的播放速度。
7944  }
7945
7946  enterFullscreen() {
7947    // 将本地播放器设置为全屏播放。
7948  }
7949
7950  exitFullscreen() {
7951    // 将本地播放器退出全屏播放。
7952  }
7953
7954  resumePlayer() {
7955    // 重新创建应用内播放器。
7956    // 恢复应用内播放器的状态信息。
7957  }
7958
7959  suspendPlayer(type: webview.SuspendType) {
7960    // 记录应用内播放器的状态信息。
7961    // 销毁应用内播放器。
7962  }
7963}
7964
7965@Entry
7966@Component
7967struct WebComponent {
7968  controller: webview.WebviewController = new webview.WebviewController()
7969  build() {
7970    Column() {
7971      Web({ src: 'www.example.com', controller: this.controller })
7972        .enableNativeMediaPlayer({enable: true, shouldOverlay: false})
7973        .onPageBegin((event) => {
7974          this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => {
7975            if (!shouldHandle(mediaInfo)) {
7976              // 本地播放器不接管该媒体。
7977              // ArkWeb 内核将用自己的播放器来播放该媒体。
7978              return null;
7979            }
7980            let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo);
7981            return nativePlayer;
7982          });
7983        })
7984    }
7985  }
7986}
7987
7988// stub
7989function getVolume() {
7990  return 1;
7991}
7992function getCurrentPlayingTime() {
7993  return 1;
7994}
7995function getCurrentBufferedTime() {
7996  return 1;
7997}
7998function convertToSeconds(input: number) {
7999  return input;
8000}
8001function getLastReadyState() {
8002  return webview.ReadyState.HAVE_NOTHING;
8003}
8004function getCurrentReadyState() {
8005  return webview.ReadyState.HAVE_NOTHING;
8006}
8007function shouldHandle(mediaInfo: webview.MediaInfo) {
8008  return true;
8009}
8010```
8011
8012### enableWholeWebPageDrawing<sup>12+</sup>
8013
8014static enableWholeWebPageDrawing(): void
8015
8016设置开启网页全量绘制能力。仅在web初始化时设置。
8017
8018**系统能力:** SystemCapability.Web.Webview.Core
8019
8020**示例:**
8021
8022```ts
8023// xxx.ets
8024import { webview } from '@kit.ArkWeb';
8025import { BusinessError } from '@kit.BasicServicesKit';
8026
8027@Entry
8028@Component
8029struct WebComponent {
8030  controller: webview.WebviewController = new webview.WebviewController();
8031
8032  aboutToAppear(): void {
8033    try {
8034      webview.WebviewController.enableWholeWebPageDrawing();
8035    } catch (error) {
8036      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8037    }
8038  }
8039
8040  build() {
8041    Column() {
8042      Web({ src: 'www.example.com', controller: this.controller })
8043    }
8044  }
8045}
8046```
8047
8048### webPageSnapshot<sup>12+</sup>
8049
8050webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void
8051
8052获取网页全量绘制结果。
8053
8054**系统能力:** SystemCapability.Web.Webview.Core
8055
8056**参数:**
8057
8058| 参数名       | 类型           | 必填  | 说明                      |
8059| ----------- | ------------- | ---- | ------------------------ |
8060| info        | [SnapshotInfo](#snapshotinfo12)| 是   | 全量绘制结果入参。 |
8061| callback        | [SnapshotResult](#snapshotresult12)| 是   | 全量绘制回调结果。 |
8062
8063**示例:**
8064
8065```ts
8066// xxx.ets
8067import { webview } from '@kit.ArkWeb';
8068import { BusinessError } from '@kit.BasicServicesKit';
8069
8070@Entry
8071@Component
8072struct WebComponent {
8073  controller: webview.WebviewController = new webview.WebviewController();
8074
8075  build() {
8076    Column() {
8077      Button('webPageSnapshot')
8078        .onClick(() => {
8079          try {
8080            this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => {
8081              if (error) {
8082                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8083                return;
8084              }
8085              if (result) {
8086                console.info(`return value is:${result}`);
8087                //开发者可以根据需要处理返回结果
8088              }
8089            });
8090          } catch (error) {
8091            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8092          }
8093        })
8094      Web({ src: 'www.example.com', controller: this.controller })
8095    }
8096  }
8097}
8098```
8099
8100### injectOfflineResources<sup>12+</sup>
8101
8102injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void
8103
8104将本地离线资源注入到内存缓存中,以提升页面首次启动速度。
8105内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。
8106正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。
8107资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。
8108以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。
8109当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。
8110
8111**系统能力:** SystemCapability.Web.Webview.Core
8112
8113**参数:**
8114
8115| 参数名  | 类型    | 必填 | 说明                  |
8116| ------- | ------ | ---- | :-------------------- |
8117| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是   | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。      |
8118
8119**错误码:**
8120
8121以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8122
8123| 错误码ID | 错误信息                                                     |
8124| -------- | ------------------------------------------------------------ |
8125| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
8126| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8127| 17100002 | Invalid url.                                                 |
8128
8129**示例:**
8130
8131接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例:
81321. 首先,在EntryAbility中将UIContext存到localStorage中。
8133
8134   ```ts
8135   // EntryAbility.ets
8136   import { UIAbility } from '@kit.AbilityKit';
8137   import { window } from '@kit.ArkUI';
8138
8139   const localStorage: LocalStorage = new LocalStorage('uiContext');
8140
8141   export default class EntryAbility extends UIAbility {
8142     storage: LocalStorage = localStorage;
8143
8144     onWindowStageCreate(windowStage: window.WindowStage) {
8145       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
8146         if (err.code) {
8147           return;
8148         }
8149
8150         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
8151       });
8152     }
8153   }
8154   ```
8155
81562. 编写动态组件所需基础代码。
8157
8158   ```ts
8159   // DynamicComponent.ets
8160   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
8161
8162   export interface BuilderData {
8163     url: string;
8164     controller: WebviewController;
8165   }
8166
8167   const storage = LocalStorage.getShared();
8168
8169   export class NodeControllerImpl extends NodeController {
8170     private rootNode: BuilderNode<BuilderData[]> | null = null;
8171     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
8172
8173     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
8174       super();
8175       this.wrappedBuilder = wrappedBuilder;
8176     }
8177
8178     makeNode(): FrameNode | null {
8179       if (this.rootNode != null) {
8180         return this.rootNode.getFrameNode();
8181       }
8182       return null;
8183     }
8184
8185     initWeb(url: string, controller: WebviewController) {
8186       if(this.rootNode != null) {
8187         return;
8188       }
8189
8190       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
8191       if (!uiContext) {
8192         return;
8193       }
8194       this.rootNode = new BuilderNode(uiContext);
8195       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
8196     }
8197   }
8198
8199   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
8200     const baseNode = new NodeControllerImpl(wrappedBuilder);
8201     baseNode.initWeb(data.url, data.controller);
8202     return baseNode;
8203   }
8204   ```
8205
82063. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。
8207
8208   <!--code_no_check-->
8209   ```ts
8210   // InjectWebview.ets
8211   import { webview } from '@kit.ArkWeb';
8212   import { resourceConfigs } from "./Resource";
8213   import { BuilderData } from "./DynamicComponent";
8214
8215   @Builder
8216   function WebBuilder(data: BuilderData) {
8217     Web({ src: data.url, controller: data.controller })
8218       .onControllerAttached(async () => {
8219         try {
8220           data.controller.injectOfflineResources(await getData ());
8221         } catch (err) {
8222           console.error("error: " + err.code + " " + err.message);
8223         }
8224       })
8225       .fileAccess(true)
8226   }
8227
8228   export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8229
8230   export async function getData() {
8231     const resourceMapArr: Array<webview.OfflineResourceMap> = [];
8232
8233     // 读取配置,从rawfile目录中读取文件内容
8234     for (let config of resourceConfigs) {
8235       let buf: Uint8Array = new Uint8Array(0);
8236       if (config.localPath) {
8237         buf = await readRawFile(config.localPath);
8238       }
8239
8240       resourceMapArr.push({
8241         urlList: config.urlList,
8242         resource: buf,
8243         responseHeaders: config.responseHeaders,
8244         type: config.type,
8245       })
8246     }
8247
8248     return resourceMapArr;
8249   }
8250
8251   export async function readRawFile(url: string) {
8252     try {
8253       return await getContext().resourceManager.getRawFileContent(url);
8254     } catch (err) {
8255       return new Uint8Array(0);
8256     }
8257   }
8258   ```
8259
82604. 编写业务用组件代码。
8261
8262   <!--code_no_check-->
8263   ```ts
8264   // BusinessWebview.ets
8265   import { BuilderData } from "./DynamicComponent";
8266
8267   @Builder
8268   function WebBuilder(data: BuilderData) {
8269     // 此处组件可根据业务需要自行扩展
8270     Web({ src: data.url, controller: data.controller })
8271       .cacheMode(CacheMode.Default)
8272   }
8273
8274   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8275   ```
8276
82775. 编写资源配置信息。
8278
8279   ```ts
8280   // Resource.ets
8281   import { webview } from '@kit.ArkWeb';
8282
8283   export interface ResourceConfig {
8284     urlList: Array<string>,
8285     type: webview.OfflineResourceType,
8286     responseHeaders: Array<Header>,
8287     localPath: string, // 本地资源存放在rawfile目录下的路径
8288   }
8289
8290   export const resourceConfigs: Array<ResourceConfig> = [
8291     {
8292       localPath: "example.png",
8293       urlList: [
8294         "https://www.example.com/",
8295         "https://www.example.com/path1/example.png",
8296         "https://www.example.com/path2/example.png",
8297       ],
8298       type: webview.OfflineResourceType.IMAGE,
8299       responseHeaders: [
8300         { headerKey: "Cache-Control", headerValue: "max-age=1000" },
8301         { headerKey: "Content-Type", headerValue: "image/png" },
8302       ]
8303     },
8304     {
8305       localPath: "example.js",
8306       urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址
8307         "https://www.example.com/example.js",
8308       ],
8309       type: webview.OfflineResourceType.CLASSIC_JS,
8310       responseHeaders: [
8311         // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头
8312         { headerKey: "Cross-Origin", headerValue:"anonymous" }
8313       ]
8314     },
8315   ];
8316   ```
8317
83186. 在页面中使用。
8319   <!--code_no_check-->
8320   ```ts
8321   // Index.ets
8322   import { webview } from '@kit.ArkWeb';
8323   import { NodeController } from '@kit.ArkUI';
8324   import { createNode } from "./DynamicComponent"
8325   import { injectWebview } from "./InjectWebview"
8326   import { businessWebview } from "./BusinessWebview"
8327
8328   @Entry
8329   @Component
8330   struct Index {
8331     @State injectNode: NodeController | undefined = undefined;
8332     injectController: webview.WebviewController = new webview.WebviewController();
8333
8334     @State businessNode: NodeController | undefined = undefined;
8335     businessController: webview.WebviewController = new webview.WebviewController();
8336
8337     aboutToAppear(): void {
8338       // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可
8339       this.injectNode = createNode(injectWebview,
8340           { url: "https://www.example.com/empty.html", controller: this.injectController});
8341     }
8342
8343     build() {
8344       Column() {
8345         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
8346         Button("加载页面")
8347           .onClick(() => {
8348             this.businessNode = createNode(businessWebview, {
8349               url: "https://www.example.com/business.html",
8350               controller: this.businessController
8351             });
8352           })
8353         // 用于业务的Web组件
8354         NodeContainer(this.businessNode);
8355       }
8356     }
8357   }
8358   ```
8359
83607. 加载的HTML网页示例。
8361
8362   ```HTML
8363   <!DOCTYPE html>
8364   <html lang="en">
8365   <head></head>
8366   <body>
8367     <img src="https://www.example.com/path1/request.png" />
8368     <img src="https://www.example.com/path2/request.png" />
8369     <script src="https://www.example.com/example.js" crossorigin="anonymous"></script>
8370   </body>
8371   </html>
8372   ```
8373
8374### setHostIP<sup>12+</sup>
8375
8376static setHostIP(hostName: string, address: string, aliveTime: number): void
8377
8378设置主机域名解析后的IP地址。
8379
8380**系统能力:** SystemCapability.Web.Webview.Core
8381
8382**参数:**
8383
8384| 参数名    | 类型 | 必填 | 说明                             |
8385| --------- | -------- | ---- | ------------------------------------ |
8386| hostName  | string   | 是   | 要添加DNS记录的主机域名。            |
8387| address   | string   | 是   | 主机域名解析地址(支持IPv4,IPv6)。 |
8388| aliveTime | number   | 是   | 缓存有效时间(秒)。                 |
8389
8390**错误码:**
8391
8392以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8393
8394| 错误码ID | 错误信息                 |
8395| -------- | ------------------------ |
8396| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8397
8398**示例:**
8399
8400请参考[clearHostIP](#clearhostip12)。
8401
8402### clearHostIP<sup>12+</sup>
8403
8404static clearHostIP(hostName: string): void
8405
8406清除指定主机域名解析后的IP地址。
8407
8408**系统能力:** SystemCapability.Web.Webview.Core
8409
8410**参数:**
8411
8412| 参数名   | 类型 | 必填 | 说明                  |
8413| -------- | -------- | ---- | ------------------------- |
8414| hostName | string   | 是   | 要清除DNS记录的主机域名。 |
8415
8416**错误码:**
8417
8418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8419
8420| 错误码ID | 错误信息                 |
8421| -------- | ------------------------ |
8422| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8423
8424**示例:**
8425
8426```ts
8427// xxx.ets
8428import { webview } from '@kit.ArkWeb';
8429import { BusinessError } from '@kit.BasicServicesKit';
8430
8431@Entry
8432@Component
8433struct WebComponent {
8434  controller: webview.WebviewController = new webview.WebviewController();
8435
8436  build() {
8437    Column() {
8438      // url加载前设置生效.
8439      Button('setHostIP')
8440        .onClick(() => {
8441          try {
8442            webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30);
8443          } catch (error) {
8444            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8445          }
8446        })
8447      Button('clearHostIP')
8448        .onClick(() => {
8449          try {
8450            webview.WebviewController.clearHostIP('www.example.com');
8451          } catch (error) {
8452            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8453          }
8454        })
8455      Web({ src: 'www.example.com', controller: this.controller })
8456    }
8457  }
8458}
8459```
8460
8461### getSurfaceId<sup>12+</sup>
8462
8463getSurfaceId(): string
8464
8465获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。
8466
8467**系统能力:** SystemCapability.Web.Webview.Core
8468
8469**返回值:**
8470
8471| 类型   | 说明                |
8472| ------ | ------------------- |
8473| string | ArkWeb持有Surface的ID。 |
8474
8475**示例:**
8476
8477```ts
8478// xxx.ets
8479import { webview } from '@kit.ArkWeb';
8480import { image } from '@kit.ImageKit';
8481import { BusinessError } from '@kit.BasicServicesKit';
8482
8483@Entry
8484@Component
8485struct Example{
8486  controller: webview.WebviewController = new webview.WebviewController();
8487
8488  @State imagePixelMap: image.PixelMap | undefined = undefined;
8489
8490  build(){
8491    Column(){
8492      Button("截图")
8493        .onClick(()=>{
8494          try {
8495            let surfaceId = this.controller.getSurfaceId();
8496            console.log("surfaceId: " + surfaceId);
8497            if(surfaceId.length != 0) {
8498              let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}}
8499              this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region)
8500            }
8501          } catch (error) {
8502            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8503          }
8504        })
8505      Image(this.imagePixelMap)
8506        .height(100)
8507      Web({src: 'www.example.com', controller: this.controller})
8508    }
8509  }
8510}
8511```
8512
8513### setUrlTrustList<sup>12+</sup>
8514
8515setUrlTrustList(urlTrustList: string): void
8516
8517设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。
8518
8519**系统能力:** SystemCapability.Web.Webview.Core
8520
8521**参数:**
8522
8523| 参数名  | 类型    | 必填 | 说明                  |
8524| ------- | ------ | ---- | :-------------------- |
8525| 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/>} |
8526
8527**白名单json格式参数**
8528| 字段   | 参数类型 | 必填 | 参数描述                  |
8529| -------- | -------- | ---- | ------------------------- |
8530| scheme | string   | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 |
8531| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 |
8532| port | number | 否 | 可选字段,不设置即不匹配该项。 |
8533| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。|
8534
8535**错误码:**
8536
8537以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8538
8539| 错误码ID | 错误信息                                                     |
8540| -------- | ------------------------------------------------------------ |
8541| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed.                                     |
8542| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8543
8544**示例:**
8545  ```ts
8546  // xxx.ets
8547  import { webview } from '@kit.ArkWeb';
8548  import { BusinessError } from '@kit.BasicServicesKit';
8549
8550  @Entry
8551  @Component
8552  struct WebComponent {
8553    controller: webview.WebviewController = new webview.WebviewController();
8554    urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}"
8555
8556    build() {
8557      Column() {
8558        Button('Setting the trustlist')
8559          .onClick(() => {
8560            try {
8561              // 设置白名单,只允许访问trust网页
8562              this.controller.setUrlTrustList(this.urltrustList);
8563            } catch (error) {
8564              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8565            }
8566          })
8567        Button('Cancel the trustlist.')
8568          .onClick(() => {
8569            try {
8570              // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问
8571              this.controller.setUrlTrustList("");
8572            } catch (error) {
8573              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8574            }
8575          })
8576        Button('Access the trust web')
8577          .onClick(() => {
8578            try {
8579              // 白名单生效,可以访问trust网页
8580              this.controller.loadUrl('http://trust.example.com/test');
8581            } catch (error) {
8582              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8583            }
8584          })
8585        Button('Access the untrust web')
8586          .onClick(() => {
8587            try {
8588              // 白名单生效,此时不可以访问untrust网页,并弹出错误页
8589              this.controller.loadUrl('http://untrust.example.com/test');
8590            } catch (error) {
8591              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8592            }
8593          })
8594        Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => {
8595          try {
8596            // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页
8597            this.controller.setUrlTrustList(this.urltrustList);
8598          } catch (error) {
8599            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8600          }
8601        })
8602      }
8603    }
8604  }
8605  ```
8606
8607### setPathAllowingUniversalAccess<sup>12+</sup>
8608
8609setPathAllowingUniversalAccess(pathList: Array\<string\>): void
8610
8611设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileaccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一:
8612
86131.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8614
8615* /data/storage/el2/base/files/example
8616* /data/storage/el2/base/haps/entry/files/example
8617
86182.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8619
8620* /data/storage/el1/bundle/entry/resource/resfile
8621* /data/storage/el1/bundle/entry/resource/resfile/example
8622
8623当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileaccess)的行为为准。
8624
8625**系统能力:** SystemCapability.Web.Webview.Core
8626
8627**参数:**
8628
8629| 参数名   | 类型 | 必填 | 说明                  |
8630| -------- | -------- | ---- | ------------------------- |
8631| pathList | Array\<string\>   | 是   | 路径列表 |
8632
8633**错误码:**
8634
8635以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8636
8637| 错误码ID | 错误信息                 |
8638| -------- | ------------------------ |
8639| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8640| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8641
8642**示例:**
8643
8644```ts
8645// xxx.ets
8646import { webview } from '@kit.ArkWeb';
8647import { BusinessError } from '@kit.BasicServicesKit';
8648
8649@Entry
8650@Component
8651struct WebComponent {
8652  controller: WebviewController = new webview.WebviewController();
8653
8654  build() {
8655    Row() {
8656      Web({ src: "", controller: this.controller })
8657        .onControllerAttached(() => {
8658          try {
8659            // 设置允许可以跨域访问的路径列表
8660            this.controller.setPathAllowingUniversalAccess([
8661              getContext().resourceDir,
8662              getContext().filesDir + "/example"
8663            ])
8664            this.controller.loadUrl("file://" + getContext().resourceDir + "/index.html")
8665          } catch (error) {
8666            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8667          }
8668        })
8669        .javaScriptAccess(true)
8670        .fileAccess(true)
8671        .domStorageAccess(true)
8672    }
8673  }
8674}
8675
8676```
8677
8678加载的html文件,位于应用资源目录resource/rawfile/index.html8679```html
8680<!-- index.html -->
8681<!DOCTYPE html>
8682<html lang="en">
8683
8684<head>
8685    <meta charset="utf-8">
8686    <title>Demo</title>
8687    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
8688    <script>
8689		function getFile() {
8690			var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js";
8691			var xmlHttpReq = new XMLHttpRequest();
8692			xmlHttpReq.onreadystatechange = function(){
8693			    console.log("readyState:" + xmlHttpReq.readyState);
8694			    console.log("status:" + xmlHttpReq.status);
8695				if(xmlHttpReq.readyState == 4){
8696				    if (xmlHttpReq.status == 200) {
8697                // 如果ets侧正确设置路径列表,则此处能正常获取资源
8698				        const element = document.getElementById('text');
8699                        element.textContent = "load " + file + " success";
8700				    } else {
8701                // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误
8702				        const element = document.getElementById('text');
8703                        element.textContent = "load " + file + " failed";
8704				    }
8705				}
8706			}
8707			xmlHttpReq.open("GET", file);
8708			xmlHttpReq.send(null);
8709		}
8710
8711    </script>
8712</head>
8713
8714<body>
8715<div class="page">
8716    <button id="example" onclick="getFile()">stealFile</button>
8717</div>
8718<div id="text"></div>
8719</body>
8720
8721</html>
8722```
8723
8724html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/rawfile/js/script.js8725<!--code_no_check-->
8726```javascript
8727const body = document.body;
8728const element = document.createElement('div');
8729element.textContent = 'success';
8730body.appendChild(element);
8731```
8732
8733### enableBackForwardCache<sup>12+</sup>
8734
8735static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void
8736
8737开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。
8738
8739需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。
8740
8741**系统能力:**  SystemCapability.Web.Webview.Core
8742
8743**参数:**
8744
8745| 参数名          | 类型    |  必填  | 说明                                            |
8746| ---------------| ------- | ---- | ------------- |
8747| features     |  [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是   | 允许使用特定的页面进入前进后退缓存中。|
8748
8749**示例:**
8750
8751```ts
8752// EntryAbility.ets
8753import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
8754import { hilog } from '@kit.PerformanceAnalysisKit';
8755import { window } from '@kit.ArkUI';
8756import { webview } from '@kit.ArkWeb';
8757
8758export default class EntryAbility extends UIAbility {
8759    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
8760        let features = new webview.BackForwardCacheSupportedFeatures();
8761        features.nativeEmbed = true;
8762        features.mediaTakeOver = true;
8763        // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和
8764        // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。
8765        webview.WebviewController.enableBackForwardCache(features);
8766        webview.WebviewController.initializeWebEngine();
8767        AppStorage.setOrCreate("abilityWant", want);
8768    }
8769}
8770```
8771
8772### setBackForwardCacheOptions<sup>12+</sup>
8773
8774setBackForwardCacheOptions(options: BackForwardCacheOptions): void
8775
8776可以设置Web组件中前进后退缓存的相关选项。
8777
8778**系统能力:**  SystemCapability.Web.Webview.Core
8779
8780**参数:**
8781
8782| 参数名          | 类型    |  必填  | 说明                                            |
8783| ---------------| ------- | ---- | ------------- |
8784| options     |  [BackForwardCacheOptions](#backforwardcacheoptions12) | 是   | 用来控制Web组件前进后退缓存相关选项。|
8785
8786**错误码:**
8787
8788以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8789
8790| 错误码ID | 错误信息                                                     |
8791| -------- | ------------------------------------------------------------ |
8792| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8793
8794**示例:**
8795
8796```ts
8797// xxx.ts
8798import { webview } from '@kit.ArkWeb';
8799
8800@Entry
8801@Component
8802struct Index {
8803  controller: webview.WebviewController = new webview.WebviewController();
8804
8805  build() {
8806    Column() {
8807      Row() {
8808        Button("Add options").onClick((event: ClickEvent) => {
8809          let options = new webview.BackForwardCacheOptions();
8810          options.size = 3;
8811          options.timeToLive = 10;
8812          this.controller.setBackForwardCacheOptions(options);
8813        })
8814        Button("Backward").onClick((event: ClickEvent) => {
8815          this.controller.backward();
8816        })
8817        Button("Forward").onClick((event: ClickEvent) => {
8818          this.controller.forward();
8819        })
8820      }
8821      Web({ src: "https://www.example.com", controller: this.controller })
8822    }
8823    .height('100%')
8824    .width('100%')
8825  }
8826}
8827```
8828
8829### trimMemoryByPressureLevel<sup>14+</sup>
8830
8831trimMemoryByPressureLevel(level: PressureLevel): void
8832
8833根据指定的内存压力等级,主动清理Web组件占用的缓存。
8834
8835**系统能力:** SystemCapability.Web.Webview.Core
8836
8837**参数:**
8838
8839| 参数名  | 类型    | 必填 | 说明                  |
8840| ------- | ------ | ---- | :-------------------- |
8841| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。|
8842
8843**错误码:**
8844
8845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8846
8847| 错误码ID | 错误信息                                                     |
8848| -------- | ------------------------------------------------------------ |
8849| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8850
8851**示例:**
8852```ts
8853// xxx.ets
8854import { webview } from '@kit.ArkWeb';
8855import { BusinessError } from '@kit.BasicServicesKit';
8856
8857@Entry
8858@Component
8859struct WebComponent {
8860  controller: WebviewController = new webview.WebviewController();
8861  build() {
8862    Column() {
8863      Row() {
8864        Button('trim_Memory')
8865          .onClick(() => {
8866            try {
8867              // 设置当前内存压力等级为适中,释放少量内存
8868              webview.WebviewController.trimMemoryByPressureLevel(
8869                webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE);
8870            } catch (error) {
8871              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8872            }
8873          })
8874      }.height('10%')
8875      Web({ src: 'www.example.com', controller: this.controller })
8876    }
8877  }
8878}
8879```
8880
8881### createPdf<sup>14+</sup>
8882
8883createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void
8884
8885异步callback方式获取指定网页的数据流。
8886
8887**系统能力:** SystemCapability.Web.Webview.Core
8888
8889**参数:**
8890
8891| 参数名        | 类型                                    | 必填 | 说明                    |
8892| ------------- | --------------------------------------- | ---- | ----------------------- |
8893| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。       |
8894| callback      | AsyncCallback<[PdfData](#pdfdata14)>    | 是   | 回调返回网页PDF数据流。 |
8895
8896**错误码:**
8897
8898以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8899
8900| 错误码ID | 错误信息                                                     |
8901| -------- | ------------------------------------------------------------ |
8902| 401      | Invalid input parameter.  |
8903| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8904
8905**示例**:
8906
8907```ts
8908import { fileIo as fs } from '@kit.CoreFileKit';
8909import { webview } from '@kit.ArkWeb';
8910import { BusinessError } from '@kit.BasicServicesKit';
8911import { common } from '@kit.AbilityKit';
8912
8913@Entry
8914@Component
8915struct Index {
8916  controller: webview.WebviewController = new webview.WebviewController();
8917  pdfConfig: webview.PdfConfiguration = {
8918    width: 8.27,
8919    height: 11.69,
8920    marginTop: 0,
8921    marginBottom: 0,
8922    marginRight: 0,
8923    marginLeft: 0,
8924    shouldPrintBackground: true
8925  }
8926
8927  build() {
8928    Column() {
8929      Button('SavePDF')
8930        .onClick(() => {
8931          this.controller.createPdf(
8932            this.pdfConfig,
8933            (error, result: webview.PdfData) => {
8934              try {
8935                // 获取组件上下文
8936                let context = getContext(this) as common.UIAbilityContext;
8937                // 获取沙箱路径,设置pdf文件名
8938                let filePath = context.filesDir + "/test.pdf";
8939                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
8940                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
8941                  console.info("createPDF write data to file succeed and size is:" + writeLen);
8942                }).catch((err: BusinessError) => {
8943                  console.error("createPDF write data to file failed with error message: " + err.message +
8944                    ", error code: " + err.code);
8945                }).finally(() => {
8946                  fs.closeSync(file);
8947                });
8948              } catch (resError) {
8949                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8950              }
8951            });
8952        })
8953      Web({ src: "www.example.com", controller: this.controller })
8954    }
8955  }
8956}
8957```
8958
8959### createPdf<sup>14+</sup>
8960
8961createPdf(configuration: PdfConfiguration): Promise\<PdfData\>
8962
8963以Promise方式异步获取指定网页的数据流。
8964
8965**系统能力:** SystemCapability.Web.Webview.Core
8966
8967**参数:**
8968
8969| 参数名        | 类型                                    | 必填 | 说明              |
8970| ------------- | --------------------------------------- | ---- | ----------------- |
8971| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。 |
8972
8973**返回值:**
8974
8975| 类型                           | 说明                          |
8976| ------------------------------ | ----------------------------- |
8977| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 |
8978
8979**错误码:**
8980
8981以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8982
8983| 错误码ID | 错误信息                                                     |
8984| -------- | ------------------------------------------------------------ |
8985| 401      | Invalid input parameter. |
8986| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8987
8988**示例**:
8989
8990```ts
8991import { fileIo as fs } from '@kit.CoreFileKit';
8992import { webview } from '@kit.ArkWeb';
8993import { BusinessError } from '@kit.BasicServicesKit';
8994import { common } from '@kit.AbilityKit';
8995
8996@Entry
8997@Component
8998struct Index {
8999  controller: webview.WebviewController = new webview.WebviewController();
9000  pdfConfig: webview.PdfConfiguration = {
9001    width: 8.27,
9002    height: 11.69,
9003    marginTop: 0,
9004    marginBottom: 0,
9005    marginRight: 0,
9006    marginLeft: 0,
9007    shouldPrintBackground: true
9008  }
9009
9010  build() {
9011    Column() {
9012      Button('SavePDF')
9013        .onClick(() => {
9014          this.controller.createPdf(this.pdfConfig)
9015            .then((result: webview.PdfData) => {
9016              try {
9017                // 获取组件上下文
9018                let context = getContext(this) as common.UIAbilityContext;
9019                // 获取沙箱路径,设置pdf文件名
9020                let filePath = context.filesDir + "/test.pdf";
9021                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
9022                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
9023                  console.info("createPDF write data to file succeed and size is:" + writeLen);
9024                }).catch((err: BusinessError) => {
9025                  console.error("createPDF write data to file failed with error message: " + err.message +
9026                    ", error code: " + err.code);
9027                }).finally(() => {
9028                  fs.closeSync(file);
9029                });
9030              } catch (resError) {
9031                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
9032              }
9033            })
9034        })
9035      Web({ src: "www.example.com", controller: this.controller })
9036    }
9037  }
9038}
9039```
9040
9041### getScrollOffset<sup>13+</sup>
9042
9043getScrollOffset(): ScrollOffset
9044
9045获取网页当前的滚动偏移量。
9046
9047**系统能力:** SystemCapability.Web.Webview.Core
9048
9049**返回值**
9050
9051| 类型                            | 说明                   |
9052| :------------------------------ | ---------------------- |
9053| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 |
9054
9055**示例:**
9056
9057```ts
9058import { webview } from '@kit.ArkWeb';
9059import { componentUtils } from '@kit.ArkUI';
9060
9061@Entry
9062@Component
9063struct WebComponent {
9064  @State testTitle: string = 'webScroll'
9065  controller: webview.WebviewController = new webview.WebviewController();
9066  @State controllerX: number =-100;
9067  @State controllerY: number =-100;
9068  @State mode: OverScrollMode = OverScrollMode.ALWAYS;
9069
9070  build() {
9071    Column() {
9072      Row() {
9073        Text(this.testTitle)
9074          .fontSize(30)
9075          .fontWeight(FontWeight.Bold)
9076          .margin(5)
9077      }
9078      Column() {
9079        Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`)
9080      }
9081      .margin({ top: 10, bottom: 10 })
9082      Web({ src: $rawfile("scrollByTo.html"), controller: this.controller })
9083        .key("web_01")
9084        .overScrollMode(this.mode)
9085        .onTouch((event) => {
9086          this.controllerX = this.controller.getScrollOffset().x;
9087          this.controllerY = this.controller.getScrollOffset().y;
9088          let componentInfo = componentUtils.getRectangleById("web_01");
9089          let webHeight = px2vp(componentInfo.size.height);
9090          let pageHeight = this.controller.getPageHeight();
9091          if (this.controllerY < 0) {
9092            // case1:网页向下过滚动时,可直接使用ScrollOffset.y
9093            console.log(`get downwards overscroll offsetY = ${this.controllerY}`);
9094          } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) {
9095            // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量
9096            console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`);
9097          } else {
9098            // case3:网页未发生过滚动时,可直接使用ScrollOffset.y
9099            console.log(`get scroll offsetY = ${this.controllerY}`);
9100          }
9101        })
9102        .height(600)
9103    }
9104    .width('100%')
9105    .height('100%')
9106  }
9107}
9108```
9109
9110## WebCookieManager
9111
9112通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。
9113
9114### getCookie<sup>(deprecated)</sup>
9115
9116static getCookie(url: string): string
9117
9118获取指定url对应cookie的值。
9119
9120> **说明:**
9121>
9122> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代
9123
9124**系统能力:** SystemCapability.Web.Webview.Core
9125
9126**参数:**
9127
9128| 参数名 | 类型   | 必填 | 说明                      |
9129| ------ | ------ | ---- | :------------------------ |
9130| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9131
9132**返回值:**
9133
9134| 类型   | 说明                      |
9135| ------ | ------------------------- |
9136| string | 指定url对应的cookie的值。 |
9137
9138**错误码:**
9139
9140以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9141
9142| 错误码ID | 错误信息                                               |
9143| -------- | ------------------------------------------------------ |
9144| 17100002 | Invalid url.                                           |
9145| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9146
9147**示例:**
9148
9149```ts
9150// xxx.ets
9151import { webview } from '@kit.ArkWeb';
9152import { BusinessError } from '@kit.BasicServicesKit';
9153
9154@Entry
9155@Component
9156struct WebComponent {
9157  controller: webview.WebviewController = new webview.WebviewController();
9158
9159  build() {
9160    Column() {
9161      Button('getCookie')
9162        .onClick(() => {
9163          try {
9164            let value = webview.WebCookieManager.getCookie('https://www.example.com');
9165            console.log("value: " + value);
9166          } catch (error) {
9167            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9168          }
9169        })
9170      Web({ src: 'www.example.com', controller: this.controller })
9171    }
9172  }
9173}
9174```
9175
9176### fetchCookieSync<sup>11+</sup>
9177
9178static fetchCookieSync(url: string, incognito?: boolean): string
9179
9180获取指定url对应cookie的值。
9181
9182> **说明:**
9183>
9184> 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。
9185>
9186> 为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。
9187>
9188> fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。
9189
9190**系统能力:** SystemCapability.Web.Webview.Core
9191
9192**参数:**
9193
9194| 参数名 | 类型   | 必填 | 说明                      |
9195| ------ | ------ | ---- | :------------------------ |
9196| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9197| incognito    | boolean | 否   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9198
9199**返回值:**
9200
9201| 类型   | 说明                      |
9202| ------ | ------------------------- |
9203| string | 指定url对应的cookie的值。 |
9204
9205**错误码:**
9206
9207以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9208
9209| 错误码ID | 错误信息                                               |
9210| -------- | ------------------------------------------------------ |
9211| 17100002 | Invalid url.                                           |
9212| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9213
9214**示例:**
9215
9216```ts
9217// xxx.ets
9218import { webview } from '@kit.ArkWeb';
9219import { BusinessError } from '@kit.BasicServicesKit';
9220
9221@Entry
9222@Component
9223struct WebComponent {
9224  controller: webview.WebviewController = new webview.WebviewController();
9225
9226  build() {
9227    Column() {
9228      Button('fetchCookieSync')
9229        .onClick(() => {
9230          try {
9231            let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com');
9232            console.log("fetchCookieSync cookie = " + value);
9233          } catch (error) {
9234            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9235          }
9236        })
9237      Web({ src: 'www.example.com', controller: this.controller })
9238    }
9239  }
9240}
9241```
9242
9243### fetchCookie<sup>11+</sup>
9244
9245static fetchCookie(url: string, callback: AsyncCallback\<string>): void
9246
9247异步callback方式获取指定url对应cookie的值。
9248
9249**系统能力:** SystemCapability.Web.Webview.Core
9250
9251**参数:**
9252
9253| 参数名 | 类型   | 必填 | 说明                      |
9254| ------ | ------ | ---- | :------------------------ |
9255| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9256| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie |
9257
9258**错误码:**
9259
9260以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9261
9262| 错误码ID | 错误信息                                               |
9263| -------- | ------------------------------------------------------ |
9264| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9265| 17100002 | Invalid url.                                           |
9266
9267**示例:**
9268
9269```ts
9270// xxx.ets
9271import { webview } from '@kit.ArkWeb';
9272import { BusinessError } from '@kit.BasicServicesKit';
9273
9274@Entry
9275@Component
9276struct WebComponent {
9277  controller: webview.WebviewController = new webview.WebviewController();
9278
9279  build() {
9280    Column() {
9281      Button('fetchCookie')
9282        .onClick(() => {
9283          try {
9284            webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => {
9285              if (error) {
9286                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9287                return;
9288              }
9289              if (cookie) {
9290                console.log('fetchCookie cookie = ' + cookie);
9291              }
9292            })
9293          } catch (error) {
9294            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9295          }
9296        })
9297      Web({ src: 'www.example.com', controller: this.controller })
9298    }
9299  }
9300}
9301```
9302
9303### fetchCookie<sup>11+</sup>
9304
9305static fetchCookie(url: string): Promise\<string>
9306
9307以Promise方式异步获取指定url对应cookie的值。
9308
9309**系统能力:** SystemCapability.Web.Webview.Core
9310
9311**参数:**
9312
9313| 参数名 | 类型   | 必填 | 说明                      |
9314| ------ | ------ | ---- | :------------------------ |
9315| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9316
9317**返回值:**
9318
9319| 类型   | 说明                      |
9320| ------ | ------------------------- |
9321| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9322
9323**错误码:**
9324
9325以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9326
9327| 错误码ID | 错误信息                                               |
9328| -------- | ------------------------------------------------------ |
9329| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9330| 17100002 | Invalid url.                                           |
9331
9332**示例:**
9333
9334```ts
9335// xxx.ets
9336import { webview } from '@kit.ArkWeb';
9337import { BusinessError } from '@kit.BasicServicesKit';
9338
9339@Entry
9340@Component
9341struct WebComponent {
9342  controller: webview.WebviewController = new webview.WebviewController();
9343
9344  build() {
9345    Column() {
9346      Button('fetchCookie')
9347        .onClick(() => {
9348          try {
9349            webview.WebCookieManager.fetchCookie('https://www.example.com')
9350              .then(cookie => {
9351                console.log("fetchCookie cookie = " + cookie);
9352              })
9353              .catch((error: BusinessError) => {
9354                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9355              })
9356          } catch (error) {
9357            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9358          }
9359        })
9360      Web({ src: 'www.example.com', controller: this.controller })
9361    }
9362  }
9363}
9364```
9365
9366### fetchCookie<sup>14+</sup>
9367
9368static fetchCookie(url: string, incognito: boolean): Promise\<string>
9369
9370以Promise方式异步获取指定url对应cookie的值。
9371
9372**系统能力:** SystemCapability.Web.Webview.Core
9373
9374**参数:**
9375
9376| 参数名 | 类型   | 必填 | 说明                      |
9377| ------ | ------ | ---- | :------------------------ |
9378| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9379| incognito    | boolean | 是   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9380
9381**返回值:**
9382
9383| 类型   | 说明                      |
9384| ------ | ------------------------- |
9385| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9386
9387**错误码:**
9388
9389以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9390
9391| 错误码ID | 错误信息                                               |
9392| -------- | ------------------------------------------------------ |
9393| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9394| 17100002 | Invalid url.                                           |
9395
9396**示例:**
9397
9398```ts
9399// xxx.ets
9400import { webview } from '@kit.ArkWeb';
9401import { BusinessError } from '@kit.BasicServicesKit';
9402
9403@Entry
9404@Component
9405struct WebComponent {
9406  controller: webview.WebviewController = new webview.WebviewController();
9407
9408  build() {
9409    Column() {
9410      Button('fetchCookie')
9411        .onClick(() => {
9412          try {
9413            webview.WebCookieManager.fetchCookie('https://www.example.com', false)
9414              .then(cookie => {
9415                console.log("fetchCookie cookie = " + cookie);
9416              })
9417              .catch((error: BusinessError) => {
9418                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9419              })
9420          } catch (error) {
9421            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9422          }
9423        })
9424      Web({ src: 'www.example.com', controller: this.controller })
9425    }
9426  }
9427}
9428```
9429
9430### setCookie<sup>(deprecated)</sup>
9431
9432static setCookie(url: string, value: string): void
9433
9434为指定url设置单个cookie的值。
9435
9436> **说明:**
9437>
9438> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代
9439
9440**系统能力:** SystemCapability.Web.Webview.Core
9441
9442**参数:**
9443
9444| 参数名 | 类型   | 必填 | 说明                      |
9445| ------ | ------ | ---- | :------------------------ |
9446| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9447| value  | string | 是   | 要设置的cookie的值。      |
9448
9449**错误码:**
9450
9451以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9452
9453| 错误码ID | 错误信息                                               |
9454| -------- | ------------------------------------------------------ |
9455| 17100002 | Invalid url.                                           |
9456| 17100005 | Invalid cookie value.                                  |
9457| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9458
9459**示例:**
9460
9461```ts
9462// xxx.ets
9463import { webview } from '@kit.ArkWeb';
9464import { BusinessError } from '@kit.BasicServicesKit';
9465
9466@Entry
9467@Component
9468struct WebComponent {
9469  controller: webview.WebviewController = new webview.WebviewController();
9470
9471  build() {
9472    Column() {
9473      Button('setCookie')
9474        .onClick(() => {
9475          try {
9476            webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
9477          } catch (error) {
9478            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9479          }
9480        })
9481      Web({ src: 'www.example.com', controller: this.controller })
9482    }
9483  }
9484}
9485```
9486
9487### configCookieSync<sup>11+</sup>
9488
9489static configCookieSync(url: string, value: string, incognito?: boolean): void
9490
9491为指定url设置单个cookie的值。
9492
9493> **说明:**
9494>
9495> configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
9496>
9497> 同步cookie的时机建议在Web组件加载之前完成。
9498>
9499> 若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。
9500
9501**系统能力:** SystemCapability.Web.Webview.Core
9502
9503**参数:**
9504
9505| 参数名 | 类型   | 必填 | 说明                      |
9506| ------ | ------ | ---- | :------------------------ |
9507| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9508| value  | string | 是   | 要设置的cookie的值。      |
9509| incognito    | boolean | 否   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9510
9511**错误码:**
9512
9513以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9514
9515| 错误码ID | 错误信息                                               |
9516| -------- | ------------------------------------------------------ |
9517| 17100002 | Invalid url.                                           |
9518| 17100005 | Invalid cookie value.                                  |
9519| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9520
9521**示例:**
9522
9523```ts
9524// xxx.ets
9525import { webview } from '@kit.ArkWeb';
9526import { BusinessError } from '@kit.BasicServicesKit';
9527
9528@Entry
9529@Component
9530struct WebComponent {
9531  controller: webview.WebviewController = new webview.WebviewController();
9532
9533  build() {
9534    Column() {
9535      Button('configCookieSync')
9536        .onClick(() => {
9537          try {
9538            // configCookieSync每次仅支持设置单个cookie值。
9539            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b');
9540          } catch (error) {
9541            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9542          }
9543        })
9544      Web({ src: 'www.example.com', controller: this.controller })
9545    }
9546  }
9547}
9548```
9549
9550### configCookieSync<sup>14+</sup>
9551
9552static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void
9553
9554为指定url设置cookie的值。
9555
9556**系统能力:** SystemCapability.Web.Webview.Core
9557
9558**参数:**
9559
9560| 参数名 | 类型   | 必填 | 说明                      |
9561| ------ | ------ | ---- | :------------------------ |
9562| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9563| value  | string | 是   | 要设置的cookie的值。      |
9564| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9565| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9566
9567**错误码:**
9568
9569以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9570
9571| 错误码ID | 错误信息                                               |
9572| -------- | ------------------------------------------------------ |
9573| 17100002 | Invalid url.                                           |
9574| 17100005 | Invalid cookie value.                                  |
9575| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9576
9577**示例:**
9578
9579```ts
9580// xxx.ets
9581import { webview } from '@kit.ArkWeb';
9582import { BusinessError } from '@kit.BasicServicesKit';
9583
9584@Entry
9585@Component
9586struct WebComponent {
9587  controller: webview.WebviewController = new webview.WebviewController();
9588
9589  build() {
9590    Column() {
9591      Button('configCookieSync')
9592        .onClick(() => {
9593          try {
9594            // 仅支持设置单个cookie值。
9595            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false);
9596          } catch (error) {
9597            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9598          }
9599        })
9600      Web({ src: 'www.example.com', controller: this.controller })
9601    }
9602  }
9603}
9604```
9605
9606### configCookie<sup>11+</sup>
9607
9608static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void
9609
9610异步callback方式为指定url设置单个cookie的值。
9611
9612**系统能力:** SystemCapability.Web.Webview.Core
9613
9614**参数:**
9615
9616| 参数名 | 类型   | 必填 | 说明                      |
9617| ------ | ------ | ---- | :------------------------ |
9618| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9619| value  | string | 是   | 要设置的cookie的值。      |
9620| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 |
9621
9622**错误码:**
9623
9624以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9625
9626| 错误码ID | 错误信息                                               |
9627| -------- | ------------------------------------------------------ |
9628| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9629| 17100002 | Invalid url.                                           |
9630| 17100005 | Invalid cookie value.                                  |
9631
9632**示例:**
9633
9634```ts
9635// xxx.ets
9636import { webview } from '@kit.ArkWeb';
9637import { BusinessError } from '@kit.BasicServicesKit';
9638
9639@Entry
9640@Component
9641struct WebComponent {
9642  controller: webview.WebviewController = new webview.WebviewController();
9643
9644  build() {
9645    Column() {
9646      Button('configCookie')
9647        .onClick(() => {
9648          try {
9649            webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => {
9650              if (error) {
9651                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9652              }
9653            })
9654          } catch (error) {
9655            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9656          }
9657        })
9658      Web({ src: 'www.example.com', controller: this.controller })
9659    }
9660  }
9661}
9662```
9663
9664### configCookie<sup>11+</sup>
9665
9666static configCookie(url: string, value: string): Promise\<void>
9667
9668以异步Promise方式为指定url设置单个cookie的值。
9669
9670**系统能力:** SystemCapability.Web.Webview.Core
9671
9672**参数:**
9673
9674| 参数名 | 类型   | 必填 | 说明                      |
9675| ------ | ------ | ---- | :------------------------ |
9676| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9677| value  | string | 是   | 要设置的cookie的值。      |
9678
9679**返回值:**
9680
9681| 类型   | 说明                      |
9682| ------ | ------------------------- |
9683| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9684
9685**错误码:**
9686
9687以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9688
9689| 错误码ID | 错误信息                                                |
9690| -------- | ------------------------------------------------------ |
9691| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9692| 17100002 | Invalid url.                                           |
9693| 17100005 | Invalid cookie value.                                  |
9694
9695**示例:**
9696
9697```ts
9698// xxx.ets
9699import { webview } from '@kit.ArkWeb';
9700import { BusinessError } from '@kit.BasicServicesKit';
9701
9702@Entry
9703@Component
9704struct WebComponent {
9705  controller: webview.WebviewController = new webview.WebviewController();
9706
9707  build() {
9708    Column() {
9709      Button('configCookie')
9710        .onClick(() => {
9711          try {
9712            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b')
9713              .then(() => {
9714                console.log('configCookie success!');
9715              })
9716              .catch((error: BusinessError) => {
9717                console.log('error: ' + JSON.stringify(error));
9718              })
9719          } catch (error) {
9720            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9721          }
9722        })
9723      Web({ src: 'www.example.com', controller: this.controller })
9724    }
9725  }
9726}
9727```
9728
9729### configCookie<sup>14+</sup>
9730
9731static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void>
9732
9733以异步Promise方式为指定url设置单个cookie的值。
9734
9735**系统能力:** SystemCapability.Web.Webview.Core
9736
9737**参数:**
9738
9739| 参数名 | 类型   | 必填 | 说明                      |
9740| ------ | ------ | ---- | :------------------------ |
9741| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9742| value  | string | 是   | 要设置的cookie的值。      |
9743| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9744| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9745
9746**返回值:**
9747
9748| 类型   | 说明                      |
9749| ------ | ------------------------- |
9750| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9751
9752**错误码:**
9753
9754以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9755
9756| 错误码ID | 错误信息                                                |
9757| -------- | ------------------------------------------------------ |
9758| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9759| 17100002 | Invalid url.                                           |
9760| 17100005 | Invalid cookie value.                                  |
9761
9762**示例:**
9763
9764```ts
9765// xxx.ets
9766import { webview } from '@kit.ArkWeb';
9767import { BusinessError } from '@kit.BasicServicesKit';
9768
9769@Entry
9770@Component
9771struct WebComponent {
9772  controller: webview.WebviewController = new webview.WebviewController();
9773
9774  build() {
9775    Column() {
9776      Button('configCookie')
9777        .onClick(() => {
9778          try {
9779            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false)
9780              .then(() => {
9781                console.log('configCookie success!');
9782              })
9783              .catch((error: BusinessError) => {
9784                console.log('error: ' + JSON.stringify(error));
9785              })
9786          } catch (error) {
9787            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9788          }
9789        })
9790      Web({ src: 'www.example.com', controller: this.controller })
9791    }
9792  }
9793}
9794```
9795
9796### saveCookieAsync
9797
9798static saveCookieAsync(callback: AsyncCallback\<void>): void
9799
9800将当前存在内存中的cookie异步保存到磁盘中。
9801
9802**系统能力:** SystemCapability.Web.Webview.Core
9803
9804**参数:**
9805
9806| 参数名   | 类型                   | 必填 | 说明                                               |
9807| -------- | ---------------------- | ---- | :------------------------------------------------- |
9808| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
9809
9810**错误码:**
9811
9812以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9813
9814| 错误码ID | 错误信息                                                |
9815| -------- | ------------------------------------------------------ |
9816| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9817
9818**示例:**
9819
9820```ts
9821// xxx.ets
9822import { webview } from '@kit.ArkWeb';
9823import { BusinessError } from '@kit.BasicServicesKit';
9824
9825@Entry
9826@Component
9827struct WebComponent {
9828  controller: webview.WebviewController = new webview.WebviewController();
9829
9830  build() {
9831    Column() {
9832      Button('saveCookieAsync')
9833        .onClick(() => {
9834          try {
9835            webview.WebCookieManager.saveCookieAsync((error) => {
9836              if (error) {
9837                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9838              }
9839            })
9840          } catch (error) {
9841            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9842          }
9843        })
9844      Web({ src: 'www.example.com', controller: this.controller })
9845    }
9846  }
9847}
9848```
9849
9850### saveCookieAsync
9851
9852static saveCookieAsync(): Promise\<void>
9853
9854将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
9855
9856**系统能力:** SystemCapability.Web.Webview.Core
9857
9858**返回值:**
9859
9860| 类型             | 说明                                      |
9861| ---------------- | ----------------------------------------- |
9862| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
9863
9864**错误码:**
9865
9866以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9867
9868| 错误码ID | 错误信息                                                |
9869| -------- | ------------------------------------------------------ |
9870| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9871
9872**示例:**
9873
9874```ts
9875// xxx.ets
9876import { webview } from '@kit.ArkWeb';
9877import { BusinessError } from '@kit.BasicServicesKit';
9878
9879@Entry
9880@Component
9881struct WebComponent {
9882  controller: webview.WebviewController = new webview.WebviewController();
9883
9884  build() {
9885    Column() {
9886      Button('saveCookieAsync')
9887        .onClick(() => {
9888          try {
9889            webview.WebCookieManager.saveCookieAsync()
9890              .then(() => {
9891                console.log("saveCookieAsyncCallback success!");
9892              })
9893              .catch((error: BusinessError) => {
9894                console.error("error: " + error);
9895              });
9896          } catch (error) {
9897            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9898          }
9899        })
9900      Web({ src: 'www.example.com', controller: this.controller })
9901    }
9902  }
9903}
9904```
9905
9906### putAcceptCookieEnabled
9907
9908static putAcceptCookieEnabled(accept: boolean): void
9909
9910设置WebCookieManager实例是否拥有发送和接收cookie的权限。
9911
9912**系统能力:** SystemCapability.Web.Webview.Core
9913
9914**参数:**
9915
9916| 参数名 | 类型    | 必填 | 说明                                 |
9917| ------ | ------- | ---- | :----------------------------------- |
9918| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限,默认为true。 |
9919
9920**错误码:**
9921
9922以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9923
9924| 错误码ID | 错误信息                                                |
9925| -------- | ------------------------------------------------------ |
9926| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9927
9928**示例:**
9929
9930```ts
9931// xxx.ets
9932import { webview } from '@kit.ArkWeb';
9933import { BusinessError } from '@kit.BasicServicesKit';
9934
9935@Entry
9936@Component
9937struct WebComponent {
9938  controller: webview.WebviewController = new webview.WebviewController();
9939
9940  build() {
9941    Column() {
9942      Button('putAcceptCookieEnabled')
9943        .onClick(() => {
9944          try {
9945            webview.WebCookieManager.putAcceptCookieEnabled(false);
9946          } catch (error) {
9947            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9948          }
9949        })
9950      Web({ src: 'www.example.com', controller: this.controller })
9951    }
9952  }
9953}
9954```
9955
9956### isCookieAllowed
9957
9958static isCookieAllowed(): boolean
9959
9960获取WebCookieManager实例是否拥有发送和接收cookie的权限。
9961
9962**系统能力:** SystemCapability.Web.Webview.Core
9963
9964**返回值:**
9965
9966| 类型    | 说明                             |
9967| ------- | -------------------------------- |
9968| boolean | 是否拥有发送和接收cookie的权限,默认为true。 |
9969
9970**示例:**
9971
9972```ts
9973// xxx.ets
9974import { webview } from '@kit.ArkWeb';
9975
9976@Entry
9977@Component
9978struct WebComponent {
9979  controller: webview.WebviewController = new webview.WebviewController();
9980
9981  build() {
9982    Column() {
9983      Button('isCookieAllowed')
9984        .onClick(() => {
9985          let result = webview.WebCookieManager.isCookieAllowed();
9986          console.log("result: " + result);
9987        })
9988      Web({ src: 'www.example.com', controller: this.controller })
9989    }
9990  }
9991}
9992```
9993
9994### putAcceptThirdPartyCookieEnabled
9995
9996static putAcceptThirdPartyCookieEnabled(accept: boolean): void
9997
9998设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
9999
10000**系统能力:** SystemCapability.Web.Webview.Core
10001
10002**参数:**
10003
10004| 参数名 | 类型    | 必填 | 说明                                       |
10005| ------ | ------- | ---- | :----------------------------------------- |
10006| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 |
10007
10008**错误码:**
10009
10010以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10011
10012| 错误码ID | 错误信息                                                |
10013| -------- | ------------------------------------------------------ |
10014| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10015
10016**示例:**
10017
10018```ts
10019// xxx.ets
10020import { webview } from '@kit.ArkWeb';
10021import { BusinessError } from '@kit.BasicServicesKit';
10022
10023@Entry
10024@Component
10025struct WebComponent {
10026  controller: webview.WebviewController = new webview.WebviewController();
10027
10028  build() {
10029    Column() {
10030      Button('putAcceptThirdPartyCookieEnabled')
10031        .onClick(() => {
10032          try {
10033            webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
10034          } catch (error) {
10035            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10036          }
10037        })
10038      Web({ src: 'www.example.com', controller: this.controller })
10039    }
10040  }
10041}
10042```
10043
10044### isThirdPartyCookieAllowed
10045
10046static isThirdPartyCookieAllowed(): boolean
10047
10048获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
10049
10050**系统能力:** SystemCapability.Web.Webview.Core
10051
10052**返回值:**
10053
10054| 类型    | 说明                                   |
10055| ------- | -------------------------------------- |
10056| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 |
10057
10058**示例:**
10059
10060```ts
10061// xxx.ets
10062import { webview } from '@kit.ArkWeb';
10063
10064@Entry
10065@Component
10066struct WebComponent {
10067  controller: webview.WebviewController = new webview.WebviewController();
10068
10069  build() {
10070    Column() {
10071      Button('isThirdPartyCookieAllowed')
10072        .onClick(() => {
10073          let result = webview.WebCookieManager.isThirdPartyCookieAllowed();
10074          console.log("result: " + result);
10075        })
10076      Web({ src: 'www.example.com', controller: this.controller })
10077    }
10078  }
10079}
10080```
10081
10082### existCookie
10083
10084static existCookie(incognito?: boolean): boolean
10085
10086获取是否存在cookie。
10087
10088**系统能力:** SystemCapability.Web.Webview.Core
10089
10090**参数:**
10091
10092| 参数名 | 类型    | 必填 | 说明                                       |
10093| ------ | ------- | ---- | :----------------------------------------- |
10094| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 |
10095
10096**返回值:**
10097
10098| 类型    | 说明                                   |
10099| ------- | -------------------------------------- |
10100| boolean | true表示存在cookie,false表示不存在cookie。 |
10101
10102**示例:**
10103
10104```ts
10105// xxx.ets
10106import { webview } from '@kit.ArkWeb';
10107
10108@Entry
10109@Component
10110struct WebComponent {
10111  controller: webview.WebviewController = new webview.WebviewController();
10112
10113  build() {
10114    Column() {
10115      Button('existCookie')
10116        .onClick(() => {
10117          let result = webview.WebCookieManager.existCookie();
10118          console.log("result: " + result);
10119        })
10120      Web({ src: 'www.example.com', controller: this.controller })
10121    }
10122  }
10123}
10124```
10125
10126### deleteEntireCookie<sup>(deprecated)</sup>
10127
10128static deleteEntireCookie(): void
10129
10130清除所有cookie。
10131
10132> **说明:**
10133>
10134> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代
10135
10136**系统能力:** SystemCapability.Web.Webview.Core
10137
10138**示例:**
10139
10140```ts
10141// xxx.ets
10142import { webview } from '@kit.ArkWeb';
10143
10144@Entry
10145@Component
10146struct WebComponent {
10147  controller: webview.WebviewController = new webview.WebviewController();
10148
10149  build() {
10150    Column() {
10151      Button('deleteEntireCookie')
10152        .onClick(() => {
10153          webview.WebCookieManager.deleteEntireCookie();
10154        })
10155      Web({ src: 'www.example.com', controller: this.controller })
10156    }
10157  }
10158}
10159```
10160
10161### clearAllCookiesSync<sup>11+</sup>
10162
10163static clearAllCookiesSync(incognito?: boolean): void
10164
10165清除所有cookie。
10166
10167**系统能力:** SystemCapability.Web.Webview.Core
10168
10169**参数:**
10170
10171| 参数名 | 类型    | 必填 | 说明                                       |
10172| ------ | ------- | ---- | :----------------------------------------- |
10173| incognito    | boolean | 否   | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 |
10174
10175**示例:**
10176
10177```ts
10178// xxx.ets
10179import { webview } from '@kit.ArkWeb';
10180
10181@Entry
10182@Component
10183struct WebComponent {
10184  controller: webview.WebviewController = new webview.WebviewController();
10185
10186  build() {
10187    Column() {
10188      Button('clearAllCookiesSync')
10189        .onClick(() => {
10190          webview.WebCookieManager.clearAllCookiesSync();
10191        })
10192      Web({ src: 'www.example.com', controller: this.controller })
10193    }
10194  }
10195}
10196```
10197
10198### clearAllCookies<sup>11+</sup>
10199
10200static clearAllCookies(callback: AsyncCallback\<void>): void
10201
10202异步callback方式清除所有cookie。
10203
10204**系统能力:** SystemCapability.Web.Webview.Core
10205
10206**参数:**
10207
10208| 参数名   | 类型                   | 必填 | 说明                                               |
10209| -------- | ---------------------- | ---- | :------------------------------------------------- |
10210| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有cookie是否成功。 |
10211
10212**错误码:**
10213
10214以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10215
10216| 错误码ID | 错误信息                                                |
10217| -------- | ------------------------------------------------------ |
10218| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10219
10220**示例:**
10221
10222```ts
10223// xxx.ets
10224import { webview } from '@kit.ArkWeb';
10225import { BusinessError } from '@kit.BasicServicesKit';
10226
10227@Entry
10228@Component
10229struct WebComponent {
10230  controller: webview.WebviewController = new webview.WebviewController();
10231
10232  build() {
10233    Column() {
10234      Button('clearAllCookies')
10235        .onClick(() => {
10236          try {
10237            webview.WebCookieManager.clearAllCookies((error) => {
10238              if (error) {
10239                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10240              }
10241            })
10242          } catch (error) {
10243            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10244          }
10245        })
10246      Web({ src: 'www.example.com', controller: this.controller })
10247    }
10248  }
10249}
10250```
10251
10252### clearAllCookies<sup>11+</sup>
10253
10254static clearAllCookies(): Promise\<void>
10255
10256异步promise方式清除所有cookie。
10257
10258**系统能力:** SystemCapability.Web.Webview.Core
10259
10260**返回值:**
10261
10262| 类型             | 说明                                      |
10263| ---------------- | ----------------------------------------- |
10264| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 |
10265
10266**错误码:**
10267
10268以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10269
10270| 错误码ID | 错误信息                                                |
10271| -------- | ------------------------------------------------------ |
10272| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10273
10274**示例:**
10275
10276```ts
10277// xxx.ets
10278import { webview } from '@kit.ArkWeb';
10279import { BusinessError } from '@kit.BasicServicesKit';
10280
10281@Entry
10282@Component
10283struct WebComponent {
10284  controller: webview.WebviewController = new webview.WebviewController();
10285
10286  build() {
10287    Column() {
10288      Button('clearAllCookies')
10289        .onClick(() => {
10290          try {
10291            webview.WebCookieManager.clearAllCookies()
10292              .then(() => {
10293                console.log("clearAllCookies success!");
10294              })
10295              .catch((error: BusinessError) => {
10296                console.error("error: " + error);
10297              });
10298          } catch (error) {
10299            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10300          }
10301        })
10302      Web({ src: 'www.example.com', controller: this.controller })
10303    }
10304  }
10305}
10306```
10307
10308### deleteSessionCookie<sup>(deprecated)</sup>
10309
10310static deleteSessionCookie(): void
10311
10312清除所有会话cookie。
10313
10314> **说明:**
10315>
10316> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代
10317
10318**系统能力:** SystemCapability.Web.Webview.Core
10319
10320**示例:**
10321
10322```ts
10323// xxx.ets
10324import { webview } from '@kit.ArkWeb';
10325
10326@Entry
10327@Component
10328struct WebComponent {
10329  controller: webview.WebviewController = new webview.WebviewController();
10330
10331  build() {
10332    Column() {
10333      Button('deleteSessionCookie')
10334        .onClick(() => {
10335          webview.WebCookieManager.deleteSessionCookie();
10336        })
10337      Web({ src: 'www.example.com', controller: this.controller })
10338    }
10339  }
10340}
10341```
10342
10343### clearSessionCookieSync<sup>11+</sup>
10344
10345static clearSessionCookieSync(): void
10346
10347清除所有会话cookie。
10348
10349**系统能力:** SystemCapability.Web.Webview.Core
10350
10351**示例:**
10352
10353```ts
10354// xxx.ets
10355import { webview } from '@kit.ArkWeb';
10356
10357@Entry
10358@Component
10359struct WebComponent {
10360  controller: webview.WebviewController = new webview.WebviewController();
10361
10362  build() {
10363    Column() {
10364      Button('clearSessionCookieSync')
10365        .onClick(() => {
10366          webview.WebCookieManager.clearSessionCookieSync();
10367        })
10368      Web({ src: 'www.example.com', controller: this.controller })
10369    }
10370  }
10371}
10372```
10373
10374### clearSessionCookie<sup>11+</sup>
10375
10376static clearSessionCookie(callback: AsyncCallback\<void>): void
10377
10378异步callback方式清除所有会话cookie。
10379
10380**系统能力:** SystemCapability.Web.Webview.Core
10381
10382**参数:**
10383
10384| 参数名   | 类型                   | 必填 | 说明                                               |
10385| -------- | ---------------------- | ---- | :------------------------------------------------- |
10386| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有会话cookie是否成功。 |
10387
10388**错误码:**
10389
10390以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10391
10392| 错误码ID | 错误信息                                                |
10393| -------- | ------------------------------------------------------ |
10394| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10395
10396**示例:**
10397
10398```ts
10399// xxx.ets
10400import { webview } from '@kit.ArkWeb';
10401import { BusinessError } from '@kit.BasicServicesKit';
10402
10403@Entry
10404@Component
10405struct WebComponent {
10406  controller: webview.WebviewController = new webview.WebviewController();
10407
10408  build() {
10409    Column() {
10410      Button('clearSessionCookie')
10411        .onClick(() => {
10412          try {
10413            webview.WebCookieManager.clearSessionCookie((error) => {
10414              if (error) {
10415                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10416              }
10417            })
10418          } catch (error) {
10419            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10420          }
10421        })
10422      Web({ src: 'www.example.com', controller: this.controller })
10423    }
10424  }
10425}
10426```
10427
10428### clearSessionCookie<sup>11+</sup>
10429
10430static clearSessionCookie(): Promise\<void>
10431
10432异步promise方式清除所有会话cookie。
10433
10434**系统能力:** SystemCapability.Web.Webview.Core
10435
10436**返回值:**
10437
10438| 类型             | 说明                                      |
10439| ---------------- | ----------------------------------------- |
10440| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 |
10441
10442**错误码:**
10443
10444以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10445
10446| 错误码ID | 错误信息                                                |
10447| -------- | ------------------------------------------------------ |
10448| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10449
10450**示例:**
10451
10452```ts
10453// xxx.ets
10454import { webview } from '@kit.ArkWeb';
10455import { BusinessError } from '@kit.BasicServicesKit';
10456
10457@Entry
10458@Component
10459struct WebComponent {
10460  controller: webview.WebviewController = new webview.WebviewController();
10461
10462  build() {
10463    Column() {
10464      Button('clearSessionCookie')
10465        .onClick(() => {
10466          try {
10467            webview.WebCookieManager.clearSessionCookie()
10468              .then(() => {
10469                console.log("clearSessionCookie success!");
10470              })
10471              .catch((error: BusinessError) => {
10472                console.error("error: " + error);
10473              });
10474          } catch (error) {
10475            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10476          }
10477        })
10478      Web({ src: 'www.example.com', controller: this.controller })
10479    }
10480  }
10481}
10482```
10483
10484## WebStorage
10485
10486通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
10487
10488> **说明:**
10489>
10490> 目前调用WebStorage下的方法,都需要先加载Web组件。
10491
10492### deleteOrigin
10493
10494static deleteOrigin(origin: string): void
10495
10496清除指定源所使用的存储。
10497
10498**系统能力:** SystemCapability.Web.Webview.Core
10499
10500**参数:**
10501
10502| 参数名 | 类型   | 必填 | 说明                     |
10503| ------ | ------ | ---- | ------------------------ |
10504| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
10505
10506**错误码:**
10507
10508以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10509
10510| 错误码ID | 错误信息                                               |
10511| -------- | ------------------------------------------------------ |
10512| 17100011 | Invalid origin.                             |
10513| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10514
10515**示例:**
10516
10517```ts
10518// xxx.ets
10519import { webview } from '@kit.ArkWeb';
10520import { BusinessError } from '@kit.BasicServicesKit';
10521
10522@Entry
10523@Component
10524struct WebComponent {
10525  controller: webview.WebviewController = new webview.WebviewController();
10526  origin: string = "resource://rawfile/";
10527
10528  build() {
10529    Column() {
10530      Button('deleteOrigin')
10531        .onClick(() => {
10532          try {
10533            webview.WebStorage.deleteOrigin(this.origin);
10534          } catch (error) {
10535            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10536          }
10537
10538        })
10539      Web({ src: $rawfile('index.html'), controller: this.controller })
10540        .databaseAccess(true)
10541    }
10542  }
10543}
10544```
10545
10546加载的html文件。
10547 ```html
10548  <!-- index.html -->
10549  <!DOCTYPE html>
10550  <html>
10551  <head>
10552    <meta charset="UTF-8">
10553    <title>test</title>
10554    <script type="text/javascript">
10555
10556      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
10557      var msg;
10558
10559      db.transaction(function(tx){
10560        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
10561        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
10562        msg = '<p>数据表已创建,且插入了两条数据。</p>';
10563
10564        document.querySelector('#status').innerHTML = msg;
10565      });
10566
10567      db.transaction(function(tx){
10568        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
10569          var len = results.rows.length,i;
10570          msg = "<p>查询记录条数:" + len + "</p>";
10571
10572          document.querySelector('#status').innerHTML += msg;
10573
10574              for(i = 0; i < len; i++){
10575                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
10576
10577          document.querySelector('#status').innerHTML += msg;
10578          }
10579        },null);
10580      });
10581
10582      </script>
10583  </head>
10584  <body>
10585  <div id="status" name="status">状态信息</div>
10586  </body>
10587  </html>
10588 ```
10589
10590### getOrigins
10591
10592static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void
10593
10594以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
10595
10596**系统能力:** SystemCapability.Web.Webview.Core
10597
10598**参数:**
10599
10600| 参数名   | 类型                                   | 必填 | 说明                                                   |
10601| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
10602| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10603
10604**错误码:**
10605
10606以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10607
10608| 错误码ID | 错误信息                                               |
10609| -------- | ------------------------------------------------------ |
10610| 17100012 | Invalid web storage origin.                             |
10611| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10612
10613**示例:**
10614
10615```ts
10616// xxx.ets
10617import { webview } from '@kit.ArkWeb';
10618import { BusinessError } from '@kit.BasicServicesKit';
10619
10620@Entry
10621@Component
10622struct WebComponent {
10623  controller: webview.WebviewController = new webview.WebviewController();
10624
10625  build() {
10626    Column() {
10627      Button('getOrigins')
10628        .onClick(() => {
10629          try {
10630            webview.WebStorage.getOrigins((error, origins) => {
10631              if (error) {
10632                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10633                return;
10634              }
10635              for (let i = 0; i < origins.length; i++) {
10636                console.log('origin: ' + origins[i].origin);
10637                console.log('usage: ' + origins[i].usage);
10638                console.log('quota: ' + origins[i].quota);
10639              }
10640            })
10641          } catch (error) {
10642            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10643          }
10644
10645        })
10646      Web({ src: $rawfile('index.html'), controller: this.controller })
10647        .databaseAccess(true)
10648    }
10649  }
10650}
10651```
10652
10653加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10654
10655### getOrigins
10656
10657static getOrigins(): Promise\<Array\<WebStorageOrigin>>
10658
10659以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
10660
10661**系统能力:** SystemCapability.Web.Webview.Core
10662
10663**返回值:**
10664
10665| 类型                             | 说明                                                         |
10666| -------------------------------- | ------------------------------------------------------------ |
10667| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10668
10669**错误码:**
10670
10671以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10672
10673| 错误码ID | 错误信息                                               |
10674| -------- | ------------------------------------------------------ |
10675| 17100012 | Invalid web storage origin.                             |
10676| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10677
10678**示例:**
10679
10680```ts
10681// xxx.ets
10682import { webview } from '@kit.ArkWeb';
10683import { BusinessError } from '@kit.BasicServicesKit';
10684
10685@Entry
10686@Component
10687struct WebComponent {
10688  controller: webview.WebviewController = new webview.WebviewController();
10689
10690  build() {
10691    Column() {
10692      Button('getOrigins')
10693        .onClick(() => {
10694          try {
10695            webview.WebStorage.getOrigins()
10696              .then(origins => {
10697                for (let i = 0; i < origins.length; i++) {
10698                  console.log('origin: ' + origins[i].origin);
10699                  console.log('usage: ' + origins[i].usage);
10700                  console.log('quota: ' + origins[i].quota);
10701                }
10702              })
10703              .catch((e: BusinessError) => {
10704                console.log('error: ' + JSON.stringify(e));
10705              })
10706          } catch (error) {
10707            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10708          }
10709
10710        })
10711      Web({ src: $rawfile('index.html'), controller: this.controller })
10712        .databaseAccess(true)
10713    }
10714  }
10715}
10716```
10717
10718加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10719
10720### getOriginQuota
10721
10722static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void
10723
10724使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10725
10726**系统能力:** SystemCapability.Web.Webview.Core
10727
10728**参数:**
10729
10730| 参数名   | 类型                  | 必填 | 说明               |
10731| -------- | --------------------- | ---- | ------------------ |
10732| origin   | string                | 是   | 指定源的字符串索引 |
10733| callback | AsyncCallback\<number> | 是   | 指定源的存储配额   |
10734
10735**错误码:**
10736
10737以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10738
10739| 错误码ID | 错误信息                                               |
10740| -------- | ------------------------------------------------------ |
10741| 17100011 | Invalid origin.                             |
10742| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10743
10744**示例:**
10745
10746```ts
10747// xxx.ets
10748import { webview } from '@kit.ArkWeb';
10749import { BusinessError } from '@kit.BasicServicesKit';
10750
10751@Entry
10752@Component
10753struct WebComponent {
10754  controller: webview.WebviewController = new webview.WebviewController();
10755  origin: string = "resource://rawfile/";
10756
10757  build() {
10758    Column() {
10759      Button('getOriginQuota')
10760        .onClick(() => {
10761          try {
10762            webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
10763              if (error) {
10764                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10765                return;
10766              }
10767              console.log('quota: ' + quota);
10768            })
10769          } catch (error) {
10770            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10771          }
10772
10773        })
10774      Web({ src: $rawfile('index.html'), controller: this.controller })
10775        .databaseAccess(true)
10776    }
10777  }
10778}
10779```
10780
10781加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10782
10783### getOriginQuota
10784
10785static getOriginQuota(origin: string): Promise\<number>
10786
10787以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10788
10789**系统能力:** SystemCapability.Web.Webview.Core
10790
10791**参数:**
10792
10793| 参数名 | 类型   | 必填 | 说明               |
10794| ------ | ------ | ---- | ------------------ |
10795| origin | string | 是   | 指定源的字符串索引 |
10796
10797**返回值:**
10798
10799| 类型            | 说明                                    |
10800| --------------- | --------------------------------------- |
10801| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
10802
10803**错误码:**
10804
10805以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10806
10807| 错误码ID | 错误信息                                               |
10808| -------- | ------------------------------------------------------ |
10809| 17100011 | Invalid origin.                             |
10810| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10811
10812**示例:**
10813
10814```ts
10815// xxx.ets
10816import { webview } from '@kit.ArkWeb';
10817import { BusinessError } from '@kit.BasicServicesKit';
10818
10819@Entry
10820@Component
10821struct WebComponent {
10822  controller: webview.WebviewController = new webview.WebviewController();
10823  origin: string = "resource://rawfile/";
10824
10825  build() {
10826    Column() {
10827      Button('getOriginQuota')
10828        .onClick(() => {
10829          try {
10830            webview.WebStorage.getOriginQuota(this.origin)
10831              .then(quota => {
10832                console.log('quota: ' + quota);
10833              })
10834              .catch((e: BusinessError) => {
10835                console.log('error: ' + JSON.stringify(e));
10836              })
10837          } catch (error) {
10838            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10839          }
10840
10841        })
10842      Web({ src: $rawfile('index.html'), controller: this.controller })
10843        .databaseAccess(true)
10844    }
10845  }
10846}
10847```
10848
10849加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10850
10851### getOriginUsage
10852
10853static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void
10854
10855以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10856
10857**系统能力:** SystemCapability.Web.Webview.Core
10858
10859**参数:**
10860
10861| 参数名   | 类型                  | 必填 | 说明               |
10862| -------- | --------------------- | ---- | ------------------ |
10863| origin   | string                | 是   | 指定源的字符串索引 |
10864| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
10865
10866**错误码:**
10867
10868以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10869
10870| 错误码ID | 错误信息                                               |
10871| -------- | ------------------------------------------------------ |
10872| 17100011 | Invalid origin.                             |
10873| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10874
10875**示例:**
10876
10877```ts
10878// xxx.ets
10879import { webview } from '@kit.ArkWeb';
10880import { BusinessError } from '@kit.BasicServicesKit';
10881
10882@Entry
10883@Component
10884struct WebComponent {
10885  controller: webview.WebviewController = new webview.WebviewController();
10886  origin: string = "resource://rawfile/";
10887
10888  build() {
10889    Column() {
10890      Button('getOriginUsage')
10891        .onClick(() => {
10892          try {
10893            webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
10894              if (error) {
10895                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10896                return;
10897              }
10898              console.log('usage: ' + usage);
10899            })
10900          } catch (error) {
10901            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10902          }
10903
10904        })
10905      Web({ src: $rawfile('index.html'), controller: this.controller })
10906        .databaseAccess(true)
10907    }
10908  }
10909}
10910```
10911
10912加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10913
10914### getOriginUsage
10915
10916static getOriginUsage(origin: string): Promise\<number>
10917
10918以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10919
10920**系统能力:** SystemCapability.Web.Webview.Core
10921
10922**参数:**
10923
10924| 参数名 | 类型   | 必填 | 说明               |
10925| ------ | ------ | ---- | ------------------ |
10926| origin | string | 是   | 指定源的字符串索引 |
10927
10928**返回值:**
10929
10930| 类型            | 说明                                  |
10931| --------------- | ------------------------------------- |
10932| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
10933
10934**错误码:**
10935
10936以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10937
10938| 错误码ID | 错误信息                                              |
10939| -------- | ----------------------------------------------------- |
10940| 17100011 | Invalid origin.                            |
10941| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10942
10943**示例:**
10944
10945```ts
10946// xxx.ets
10947import { webview } from '@kit.ArkWeb';
10948import { BusinessError } from '@kit.BasicServicesKit';
10949
10950@Entry
10951@Component
10952struct WebComponent {
10953  controller: webview.WebviewController = new webview.WebviewController();
10954  origin: string = "resource://rawfile/";
10955
10956  build() {
10957    Column() {
10958      Button('getOriginUsage')
10959        .onClick(() => {
10960          try {
10961            webview.WebStorage.getOriginUsage(this.origin)
10962              .then(usage => {
10963                console.log('usage: ' + usage);
10964              }).catch((e: BusinessError) => {
10965              console.error('error: ' + JSON.stringify(e));
10966            })
10967          } catch (error) {
10968            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10969          }
10970        })
10971      Web({ src: $rawfile('index.html'), controller: this.controller })
10972        .databaseAccess(true)
10973    }
10974  }
10975}
10976```
10977
10978加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10979
10980### deleteAllData
10981
10982static deleteAllData(incognito?: boolean): void
10983
10984清除Web SQL数据库当前使用的所有存储。
10985
10986**系统能力:** SystemCapability.Web.Webview.Core
10987
10988**参数:**
10989
10990| 参数名 | 类型   | 必填 | 说明               |
10991| ------ | ------ | ---- | ------------------ |
10992| incognito<sup>11+</sup>    | boolean | 否   | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 |
10993
10994**示例:**
10995
10996```ts
10997// xxx.ets
10998import { webview } from '@kit.ArkWeb';
10999import { BusinessError } from '@kit.BasicServicesKit';
11000
11001@Entry
11002@Component
11003struct WebComponent {
11004  controller: webview.WebviewController = new webview.WebviewController();
11005
11006  build() {
11007    Column() {
11008      Button('deleteAllData')
11009        .onClick(() => {
11010          try {
11011            webview.WebStorage.deleteAllData();
11012          } catch (error) {
11013            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11014          }
11015        })
11016      Web({ src: $rawfile('index.html'), controller: this.controller })
11017        .databaseAccess(true)
11018    }
11019  }
11020}
11021```
11022
11023加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
11024
11025## WebDataBase
11026
11027Web组件数据库管理对象。
11028
11029> **说明:**
11030>
11031> 目前调用WebDataBase下的方法,都需要先加载Web组件。
11032
11033### getHttpAuthCredentials
11034
11035static getHttpAuthCredentials(host: string, realm: string): Array\<string>
11036
11037检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11038
11039**系统能力:** SystemCapability.Web.Webview.Core
11040
11041**参数:**
11042
11043| 参数名 | 类型   | 必填 | 说明                         |
11044| ------ | ------ | ---- | ---------------------------- |
11045| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
11046| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
11047
11048**返回值:**
11049
11050| 类型  | 说明                                         |
11051| ----- | -------------------------------------------- |
11052| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
11053
11054**错误码:**
11055
11056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11057
11058| 错误码ID | 错误信息                                                |
11059| -------- | ------------------------------------------------------ |
11060| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11061
11062**示例:**
11063
11064```ts
11065// xxx.ets
11066import { webview } from '@kit.ArkWeb';
11067import { BusinessError } from '@kit.BasicServicesKit';
11068
11069@Entry
11070@Component
11071struct WebComponent {
11072  controller: webview.WebviewController = new webview.WebviewController();
11073  host: string = "www.spincast.org";
11074  realm: string = "protected example";
11075  username_password: string[] = [];
11076
11077  build() {
11078    Column() {
11079      Button('getHttpAuthCredentials')
11080        .onClick(() => {
11081          try {
11082            this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
11083            console.log('num: ' + this.username_password.length);
11084          } catch (error) {
11085            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11086          }
11087        })
11088      Web({ src: 'www.example.com', controller: this.controller })
11089    }
11090  }
11091}
11092```
11093
11094### saveHttpAuthCredentials
11095
11096static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
11097
11098保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11099
11100**系统能力:** SystemCapability.Web.Webview.Core
11101
11102**参数:**
11103
11104| 参数名   | 类型   | 必填 | 说明                         |
11105| -------- | ------ | ---- | ---------------------------- |
11106| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
11107| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
11108| username | string | 是   | 用户名。                     |
11109| password | string | 是   | 密码。                       |
11110
11111**错误码:**
11112
11113以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11114
11115| 错误码ID | 错误信息                                                |
11116| -------- | ------------------------------------------------------ |
11117| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11118
11119**示例:**
11120
11121```ts
11122// xxx.ets
11123import { webview } from '@kit.ArkWeb';
11124import { BusinessError } from '@kit.BasicServicesKit';
11125
11126@Entry
11127@Component
11128struct WebComponent {
11129  controller: webview.WebviewController = new webview.WebviewController();
11130  host: string = "www.spincast.org";
11131  realm: string = "protected example";
11132
11133  build() {
11134    Column() {
11135      Button('saveHttpAuthCredentials')
11136        .onClick(() => {
11137          try {
11138            webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
11139          } catch (error) {
11140            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11141          }
11142        })
11143      Web({ src: 'www.example.com', controller: this.controller })
11144    }
11145  }
11146}
11147```
11148
11149### existHttpAuthCredentials
11150
11151static existHttpAuthCredentials(): boolean
11152
11153判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
11154
11155**系统能力:** SystemCapability.Web.Webview.Core
11156
11157**返回值:**
11158
11159| 类型    | 说明                                                         |
11160| ------- | ------------------------------------------------------------ |
11161| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
11162
11163**示例:**
11164
11165```ts
11166// xxx.ets
11167import { webview } from '@kit.ArkWeb';
11168import { BusinessError } from '@kit.BasicServicesKit';
11169
11170@Entry
11171@Component
11172struct WebComponent {
11173  controller: webview.WebviewController = new webview.WebviewController();
11174
11175  build() {
11176    Column() {
11177      Button('existHttpAuthCredentials')
11178        .onClick(() => {
11179          try {
11180            let result = webview.WebDataBase.existHttpAuthCredentials();
11181          } catch (error) {
11182            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11183          }
11184        })
11185      Web({ src: 'www.example.com', controller: this.controller })
11186    }
11187  }
11188}
11189```
11190
11191### deleteHttpAuthCredentials
11192
11193static deleteHttpAuthCredentials(): void
11194
11195清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
11196
11197**系统能力:** SystemCapability.Web.Webview.Core
11198
11199**示例:**
11200
11201```ts
11202// xxx.ets
11203import { webview } from '@kit.ArkWeb';
11204import { BusinessError } from '@kit.BasicServicesKit';
11205
11206@Entry
11207@Component
11208struct WebComponent {
11209  controller: webview.WebviewController = new webview.WebviewController();
11210
11211  build() {
11212    Column() {
11213      Button('deleteHttpAuthCredentials')
11214        .onClick(() => {
11215          try {
11216            webview.WebDataBase.deleteHttpAuthCredentials();
11217          } catch (error) {
11218            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11219          }
11220        })
11221      Web({ src: 'www.example.com', controller: this.controller })
11222    }
11223  }
11224}
11225```
11226
11227## GeolocationPermissions
11228
11229Web组件地理位置权限管理对象。
11230
11231> **说明:**
11232>
11233> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
11234
11235### 需要权限
11236
11237访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。
11238
11239### allowGeolocation
11240
11241static allowGeolocation(origin: string, incognito?: boolean): void
11242
11243允许指定来源使用地理位置接口。
11244
11245**系统能力:** SystemCapability.Web.Webview.Core
11246
11247**参数:**
11248
11249| 参数名 | 类型   | 必填 | 说明               |
11250| ------ | ------ | ---- | ------------------ |
11251| origin | string | 是   |指定源的字符串索引 |
11252| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 |
11253
11254**错误码:**
11255
11256以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11257
11258| 错误码ID | 错误信息                                               |
11259| -------- | ------------------------------------------------------ |
11260| 17100011 | Invalid origin.                             |
11261| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11262
11263**示例:**
11264
11265```ts
11266// xxx.ets
11267import { webview } from '@kit.ArkWeb';
11268import { BusinessError } from '@kit.BasicServicesKit';
11269
11270@Entry
11271@Component
11272struct WebComponent {
11273  controller: webview.WebviewController = new webview.WebviewController();
11274  origin: string = "file:///";
11275
11276  build() {
11277    Column() {
11278      Button('allowGeolocation')
11279        .onClick(() => {
11280          try {
11281            webview.GeolocationPermissions.allowGeolocation(this.origin);
11282          } catch (error) {
11283            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11284          }
11285        })
11286      Web({ src: 'www.example.com', controller: this.controller })
11287    }
11288  }
11289}
11290```
11291
11292### deleteGeolocation
11293
11294static deleteGeolocation(origin: string, incognito?: boolean): void
11295
11296清除指定来源的地理位置权限状态。
11297
11298**系统能力:** SystemCapability.Web.Webview.Core
11299
11300**参数:**
11301
11302| 参数名 | 类型   | 必填 | 说明               |
11303| ------ | ------ | ---- | ------------------ |
11304| origin | string | 是   | 指定源的字符串索引 |
11305| incognito<sup>11+</sup>   | boolean | 否   | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 |
11306
11307**错误码:**
11308
11309以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11310
11311| 错误码ID | 错误信息                                               |
11312| -------- | ------------------------------------------------------ |
11313| 17100011 | Invalid origin.                             |
11314| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11315
11316**示例:**
11317
11318```ts
11319// xxx.ets
11320import { webview } from '@kit.ArkWeb';
11321import { BusinessError } from '@kit.BasicServicesKit';
11322
11323@Entry
11324@Component
11325struct WebComponent {
11326  controller: webview.WebviewController = new webview.WebviewController();
11327  origin: string = "file:///";
11328
11329  build() {
11330    Column() {
11331      Button('deleteGeolocation')
11332        .onClick(() => {
11333          try {
11334            webview.GeolocationPermissions.deleteGeolocation(this.origin);
11335          } catch (error) {
11336            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11337          }
11338        })
11339      Web({ src: 'www.example.com', controller: this.controller })
11340    }
11341  }
11342}
11343```
11344
11345### getAccessibleGeolocation
11346
11347static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void
11348
11349以回调方式异步获取指定源的地理位置权限状态。
11350
11351**系统能力:** SystemCapability.Web.Webview.Core
11352
11353**参数:**
11354
11355| 参数名   | 类型                   | 必填 | 说明                                                         |
11356| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
11357| origin   | string                 | 是   | 指定源的字符串索引                                           |
11358| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11359| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 |
11360
11361**错误码:**
11362
11363以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11364
11365| 错误码ID | 错误信息                                               |
11366| -------- | ------------------------------------------------------ |
11367| 17100011 | Invalid origin.                             |
11368| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11369
11370**示例:**
11371
11372```ts
11373// xxx.ets
11374import { webview } from '@kit.ArkWeb';
11375import { BusinessError } from '@kit.BasicServicesKit';
11376
11377@Entry
11378@Component
11379struct WebComponent {
11380  controller: webview.WebviewController = new webview.WebviewController();
11381  origin: string = "file:///";
11382
11383  build() {
11384    Column() {
11385      Button('getAccessibleGeolocation')
11386        .onClick(() => {
11387          try {
11388            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
11389              if (error) {
11390                console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11391                return;
11392              }
11393              console.log('getAccessibleGeolocationAsync result: ' + result);
11394            });
11395          } catch (error) {
11396            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11397          }
11398        })
11399      Web({ src: 'www.example.com', controller: this.controller })
11400    }
11401  }
11402}
11403```
11404
11405### getAccessibleGeolocation
11406
11407static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean>
11408
11409以Promise方式异步获取指定源的地理位置权限状态。
11410
11411**系统能力:** SystemCapability.Web.Webview.Core
11412
11413**参数:**
11414
11415| 参数名 | 类型 | 必填 | 说明             |
11416| ------ | -------- | ---- | -------------------- |
11417| origin | string   | 是   | 指定源的字符串索引。 |
11418| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 |
11419
11420**返回值:**
11421
11422| 类型             | 说明                                                         |
11423| ---------------- | ------------------------------------------------------------ |
11424| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11425
11426**错误码:**
11427
11428以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11429
11430| 错误码ID | 错误信息                                               |
11431| -------- | ------------------------------------------------------ |
11432| 17100011 | Invalid origin.                             |
11433| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11434
11435**示例:**
11436
11437```ts
11438// xxx.ets
11439import { webview } from '@kit.ArkWeb';
11440import { BusinessError } from '@kit.BasicServicesKit';
11441
11442@Entry
11443@Component
11444struct WebComponent {
11445  controller: webview.WebviewController = new webview.WebviewController();
11446  origin: string = "file:///";
11447
11448  build() {
11449    Column() {
11450      Button('getAccessibleGeolocation')
11451        .onClick(() => {
11452          try {
11453            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
11454              .then(result => {
11455                console.log('getAccessibleGeolocationPromise result: ' + result);
11456              }).catch((error: BusinessError) => {
11457              console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11458            });
11459          } catch (error) {
11460            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11461          }
11462        })
11463      Web({ src: 'www.example.com', controller: this.controller })
11464    }
11465  }
11466}
11467```
11468
11469### getStoredGeolocation
11470
11471static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void
11472
11473以回调方式异步获取已存储地理位置权限状态的所有源信息。
11474
11475**系统能力:** SystemCapability.Web.Webview.Core
11476
11477**参数:**
11478
11479| 参数名   | 类型                         | 必填 | 说明                                     |
11480| -------- | ---------------------------- | ---- | ---------------------------------------- |
11481| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
11482| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 |
11483
11484**错误码:**
11485
11486以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11487
11488| 错误码ID | 错误信息                                                |
11489| -------- | ------------------------------------------------------ |
11490| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11491
11492**示例:**
11493
11494```ts
11495// xxx.ets
11496import { webview } from '@kit.ArkWeb';
11497import { BusinessError } from '@kit.BasicServicesKit';
11498
11499@Entry
11500@Component
11501struct WebComponent {
11502  controller: webview.WebviewController = new webview.WebviewController();
11503
11504  build() {
11505    Column() {
11506      Button('getStoredGeolocation')
11507        .onClick(() => {
11508          try {
11509            webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
11510              if (error) {
11511                console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11512                return;
11513              }
11514              let origins_str: string = origins.join();
11515              console.log('getStoredGeolocationAsync origins: ' + origins_str);
11516            });
11517          } catch (error) {
11518            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11519          }
11520        })
11521      Web({ src: 'www.example.com', controller: this.controller })
11522    }
11523  }
11524}
11525```
11526
11527### getStoredGeolocation
11528
11529static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>>
11530
11531以Promise方式异步获取已存储地理位置权限状态的所有源信息。
11532
11533**系统能力:** SystemCapability.Web.Webview.Core
11534
11535**参数:**
11536
11537| 参数名   | 类型                         | 必填 | 说明                                     |
11538| -------- | ---------------------------- | ---- | ---------------------------------------- |
11539| incognito<sup>11+</sup>   | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 |
11540
11541**返回值:**
11542
11543| 类型                   | 说明                                                      |
11544| ---------------------- | --------------------------------------------------------- |
11545| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
11546
11547**错误码:**
11548
11549以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11550
11551| 错误码ID | 错误信息                                                |
11552| -------- | ------------------------------------------------------ |
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
11567  build() {
11568    Column() {
11569      Button('getStoredGeolocation')
11570        .onClick(() => {
11571          try {
11572            webview.GeolocationPermissions.getStoredGeolocation()
11573              .then(origins => {
11574                let origins_str: string = origins.join();
11575                console.log('getStoredGeolocationPromise origins: ' + origins_str);
11576              }).catch((error: BusinessError) => {
11577              console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11578            });
11579          } catch (error) {
11580            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11581          }
11582        })
11583      Web({ src: 'www.example.com', controller: this.controller })
11584    }
11585  }
11586}
11587```
11588
11589### deleteAllGeolocation
11590
11591static deleteAllGeolocation(incognito?: boolean): void
11592
11593清除所有来源的地理位置权限状态。
11594
11595**系统能力:** SystemCapability.Web.Webview.Core
11596
11597**参数:**
11598
11599| 参数名   | 类型                         | 必填 | 说明                                     |
11600| -------- | ---------------------------- | ---- | ---------------------------------------- |
11601| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 |
11602
11603**示例:**
11604
11605```ts
11606// xxx.ets
11607import { webview } from '@kit.ArkWeb';
11608import { BusinessError } from '@kit.BasicServicesKit';
11609
11610@Entry
11611@Component
11612struct WebComponent {
11613  controller: webview.WebviewController = new webview.WebviewController();
11614
11615  build() {
11616    Column() {
11617      Button('deleteAllGeolocation')
11618        .onClick(() => {
11619          try {
11620            webview.GeolocationPermissions.deleteAllGeolocation();
11621          } catch (error) {
11622            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11623          }
11624        })
11625      Web({ src: 'www.example.com', controller: this.controller })
11626    }
11627  }
11628}
11629```
11630## WebHeader
11631
11632Web组件返回的请求/响应头对象。
11633
11634**系统能力:** SystemCapability.Web.Webview.Core
11635
11636| 名称        | 类型   | 可读 | 可写 |说明                 |
11637| ----------- | ------ | -----|------|------------------- |
11638| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
11639| headerValue | string | 是 | 是 | 请求/响应头的value。 |
11640
11641## RequestInfo<sup>12+</sup>
11642
11643Web组件发送的资源请求信息。
11644
11645**系统能力:**: SystemCapability.Web.Webview.Core
11646
11647| 名称      | 类型   | 可读 | 可写 |说明        |
11648| ---------| ------ | -----|------|--------  |
11649| url      | string | 是 | 是 | 请求的链接。    |
11650| method   | string | 是 | 是 | 请求的方法。    |
11651| formData | string | 是 | 是 | 请求的表单数据。 |
11652
11653## WebHitTestType
11654
11655[getHitTest](#gethittest)接口用于指示游标节点。
11656
11657**系统能力:** SystemCapability.Web.Webview.Core
11658
11659| 名称          | 值 | 说明                                      |
11660| ------------- | -- |----------------------------------------- |
11661| EditText      | 0 |可编辑的区域。                            |
11662| Email         | 1 |电子邮件地址。                            |
11663| HttpAnchor    | 2 |超链接,其中src为http。                     |
11664| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 |
11665| Img           | 4 |HTML::img标签。                           |
11666| Map           | 5 |地理地址。                                |
11667| Phone         | 6 |电话号码。                                |
11668| Unknown       | 7 |未知内容。                                |
11669
11670## SecurityLevel<sup>11+</sup>
11671
11672当前网页的安全级别。
11673
11674**系统能力:** SystemCapability.Web.Webview.Core
11675
11676| 名称          | 值 | 说明                                      |
11677| ------------- | -- |----------------------------------------- |
11678| NONE          | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。|
11679| SECURE        | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。|
11680| WARNING       | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。|
11681| DANGEROUS     | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 |
11682
11683##  HitTestValue
11684
11685提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。
11686
11687**系统能力:** SystemCapability.Web.Webview.Core
11688
11689| 名称 | 类型 | 可读 | 可写 | 说明|
11690| ---- | ---- | ---- | ---- |---- |
11691| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。|
11692| extra | string        | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
11693
11694## WebMessage
11695
11696type WebMessage = ArrayBuffer | string
11697
11698用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
11699
11700**系统能力:** SystemCapability.Web.Webview.Core
11701
11702| 类型       | 说明                                     |
11703| -------- | -------------------------------------- |
11704| string   | 字符串类型数据。 |
11705| ArrayBuffer   | 二进制类型数据。 |
11706
11707## JsMessageType<sup>10+</sup>
11708
11709[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
11710
11711**系统能力:** SystemCapability.Web.Webview.Core
11712
11713| 名称         | 值 | 说明                              |
11714| ------------ | -- |--------------------------------- |
11715| NOT_SUPPORT  | 0 |不支持的数据类型。|
11716| STRING       | 1 |字符串类型。|
11717| NUMBER       | 2 |数值类型。|
11718| BOOLEAN      | 3 |布尔类型。|
11719| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11720| ARRAY        | 5 |数组类型|
11721
11722## WebMessageType<sup>10+</sup>
11723
11724[webMessagePort](#webmessageport)接口所支持的数据类型。
11725
11726**系统能力:** SystemCapability.Web.Webview.Core
11727
11728| 名称         | 值 | 说明                            |
11729| ------------ | -- |------------------------------- |
11730| NOT_SUPPORT  | 0 |不支持的数据类型。|
11731| STRING       | 1 |字符串类型。|
11732| NUMBER       | 2 |数值类型。|
11733| BOOLEAN      | 3 |布尔类型。|
11734| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11735| ARRAY        | 5 |数组类型。|
11736| ERROR        | 6 |错误类型。|
11737
11738## MediaPlaybackState<sup>12+</sup>
11739
11740当前网页的播控状态。
11741
11742**系统能力:** SystemCapability.Web.Webview.Core
11743
11744| 名称    | 值   | 说明               |
11745| ------- | ---- | ------------------ |
11746| NONE    | 0    | 页面无音视频启播。 |
11747| PLAYING | 1    | 页面音视频播放中。 |
11748| PAUSED  | 2    | 页面音视频暂停。   |
11749| STOPPED | 3    | 页面音视频停止。   |
11750
11751## RenderProcessMode<sup>12+</sup>
11752
11753ArkWeb渲染子进程模式类型。
11754
11755**系统能力:** SystemCapability.Web.Webview.Core
11756
11757| 名称          | 值 | 说明                                      |
11758| ------------- | -- |----------------------------------------- |
11759| SINGLE        | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。|
11760| MULTIPLE      | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。|
11761
11762
11763## JsMessageExt<sup>10+</sup>
11764
11765[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
11766
11767### getType<sup>10+</sup>
11768
11769getType(): JsMessageType
11770
11771获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11772
11773**系统能力:** SystemCapability.Web.Webview.Core
11774
11775**返回值:**
11776
11777| 类型           | 说明                                                      |
11778| --------------| --------------------------------------------------------- |
11779| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
11780
11781### getString<sup>10+</sup>
11782
11783getString(): string
11784
11785获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11786
11787**系统能力:** SystemCapability.Web.Webview.Core
11788
11789**返回值:**
11790
11791| 类型           | 说明          |
11792| --------------| ------------- |
11793| string | 返回字符串类型的数据。 |
11794
11795**错误码:**
11796
11797以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11798
11799| 错误码ID | 错误信息                              |
11800| -------- | ------------------------------------- |
11801| 17100014 | The type and value of the message do not match. |
11802
11803### getNumber<sup>10+</sup>
11804
11805getNumber(): number
11806
11807获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11808
11809**系统能力:** SystemCapability.Web.Webview.Core
11810
11811**返回值:**
11812
11813| 类型           | 说明          |
11814| --------------| ------------- |
11815| number | 返回数值类型的数据。 |
11816
11817**错误码:**
11818
11819以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11820
11821| 错误码ID | 错误信息                              |
11822| -------- | ------------------------------------- |
11823| 17100014 | The type and value of the message do not match. |
11824
11825### getBoolean<sup>10+</sup>
11826
11827getBoolean(): boolean
11828
11829获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11830
11831**系统能力:** SystemCapability.Web.Webview.Core
11832
11833**返回值:**
11834
11835| 类型           | 说明          |
11836| --------------| ------------- |
11837| boolean | 返回布尔类型的数据。 |
11838
11839**错误码:**
11840
11841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11842
11843| 错误码ID | 错误信息                              |
11844| -------- | ------------------------------------- |
11845| 17100014 | The type and value of the message do not match. |
11846
11847### getArrayBuffer<sup>10+</sup>
11848
11849getArrayBuffer(): ArrayBuffer
11850
11851获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11852
11853**系统能力:** SystemCapability.Web.Webview.Core
11854
11855**返回值:**
11856
11857| 类型           | 说明          |
11858| --------------| ------------- |
11859| ArrayBuffer | 返回原始二进制数据。 |
11860
11861**错误码:**
11862
11863以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11864
11865| 错误码ID | 错误信息                              |
11866| -------- | ------------------------------------- |
11867| 17100014 | The type and value of the message do not match. |
11868
11869### getArray<sup>10+</sup>
11870
11871getArray(): Array\<string | number | boolean\>
11872
11873获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11874
11875**系统能力:** SystemCapability.Web.Webview.Core
11876
11877**返回值:**
11878
11879| 类型           | 说明          |
11880| --------------| ------------- |
11881| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
11882
11883**错误码:**
11884
11885以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11886
11887| 错误码ID | 错误信息                              |
11888| -------- | ------------------------------------- |
11889| 17100014 | The type and value of the message do not match. |
11890
11891## WebMessageExt<sup>10+</sup>
11892
11893[webMessagePort](#webmessageport)接口接收、发送的数据对象。
11894
11895### getType<sup>10+</sup>
11896
11897getType(): WebMessageType
11898
11899获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11900
11901**系统能力:** SystemCapability.Web.Webview.Core
11902
11903**返回值:**
11904
11905| 类型           | 说明                                                      |
11906| --------------| --------------------------------------------------------- |
11907| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
11908
11909### getString<sup>10+</sup>
11910
11911getString(): string
11912
11913获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11914
11915**系统能力:** SystemCapability.Web.Webview.Core
11916
11917**返回值:**
11918
11919| 类型           | 说明          |
11920| --------------| ------------- |
11921| string | 返回字符串类型的数据。 |
11922
11923**错误码:**
11924
11925以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11926
11927| 错误码ID | 错误信息                              |
11928| -------- | ------------------------------------- |
11929| 17100014 | The type and value of the message do not match. |
11930
11931### getNumber<sup>10+</sup>
11932
11933getNumber(): number
11934
11935获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11936
11937**系统能力:** SystemCapability.Web.Webview.Core
11938
11939**返回值:**
11940
11941| 类型           | 说明          |
11942| --------------| ------------- |
11943| number | 返回数值类型的数据。 |
11944
11945**错误码:**
11946
11947以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11948
11949| 错误码ID | 错误信息                              |
11950| -------- | ------------------------------------- |
11951| 17100014 | The type and value of the message do not match. |
11952
11953### getBoolean<sup>10+</sup>
11954
11955getBoolean(): boolean
11956
11957获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11958
11959**系统能力:** SystemCapability.Web.Webview.Core
11960
11961**返回值:**
11962
11963| 类型           | 说明          |
11964| --------------| ------------- |
11965| boolean | 返回布尔类型的数据。 |
11966
11967**错误码:**
11968
11969以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11970
11971| 错误码ID | 错误信息                              |
11972| -------- | ------------------------------------- |
11973| 17100014 | The type and value of the message do not match. |
11974
11975### getArrayBuffer<sup>10+</sup>
11976
11977getArrayBuffer(): ArrayBuffer
11978
11979获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11980
11981**系统能力:** SystemCapability.Web.Webview.Core
11982
11983**返回值:**
11984
11985| 类型           | 说明          |
11986| --------------| ------------- |
11987| ArrayBuffer | 返回原始二进制数据。 |
11988
11989**错误码:**
11990
11991以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11992
11993| 错误码ID | 错误信息                              |
11994| -------- | ------------------------------------- |
11995| 17100014 | The type and value of the message do not match. |
11996
11997### getArray<sup>10+</sup>
11998
11999getArray(): Array\<string | number | boolean\>
12000
12001获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12002
12003**系统能力:** SystemCapability.Web.Webview.Core
12004
12005**返回值:**
12006
12007| 类型           | 说明          |
12008| --------------| ------------- |
12009| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
12010
12011**错误码:**
12012
12013以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12014
12015| 错误码ID | 错误信息                              |
12016| -------- | ------------------------------------- |
12017| 17100014 | The type and value of the message do not match. |
12018
12019### getError<sup>10+</sup>
12020
12021getError(): Error
12022
12023获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12024
12025**系统能力:** SystemCapability.Web.Webview.Core
12026
12027**返回值:**
12028
12029| 类型           | 说明          |
12030| --------------| ------------- |
12031| Error | 返回错误对象类型的数据。 |
12032
12033**错误码:**
12034
12035以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12036
12037| 错误码ID | 错误信息                              |
12038| -------- | ------------------------------------- |
12039| 17100014 | The type and value of the message do not match. |
12040
12041### setType<sup>10+</sup>
12042
12043setType(type: WebMessageType): void
12044
12045设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12046
12047**系统能力:** SystemCapability.Web.Webview.Core
12048
12049**参数:**
12050
12051| 参数名 | 类型   | 必填 | 说明                   |
12052| ------ | ------ | ---- | ---------------------- |
12053| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
12054
12055**错误码:**
12056
12057| 错误码ID | 错误信息                              |
12058| -------- | ------------------------------------- |
12059| 17100014 | The type and value of the message do not match. |
12060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12061
12062### setString<sup>10+</sup>
12063
12064setString(message: string): void
12065
12066设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12067
12068**系统能力:** SystemCapability.Web.Webview.Core
12069
12070**参数:**
12071
12072| 参数名 | 类型   | 必填 | 说明                   |
12073| ------ | ------ | ---- | -------------------- |
12074| message  | string | 是   | 字符串类型数据。 |
12075
12076**错误码:**
12077
12078| 错误码ID | 错误信息                              |
12079| -------- | ------------------------------------- |
12080| 17100014 | The type and value of the message do not match. |
12081| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12082
12083### setNumber<sup>10+</sup>
12084
12085setNumber(message: number): void
12086
12087设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12088
12089**系统能力:** SystemCapability.Web.Webview.Core
12090
12091**参数:**
12092
12093| 参数名 | 类型   | 必填 | 说明                   |
12094| ------ | ------ | ---- | -------------------- |
12095| message  | number | 是   | 数值类型数据。 |
12096
12097**错误码:**
12098
12099| 错误码ID | 错误信息                              |
12100| -------- | ------------------------------------- |
12101| 17100014 | The type and value of the message do not match. |
12102| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12103
12104### setBoolean<sup>10+</sup>
12105
12106setBoolean(message: boolean): void
12107
12108设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12109
12110**系统能力:** SystemCapability.Web.Webview.Core
12111
12112**参数:**
12113
12114| 参数名 | 类型   | 必填 | 说明                   |
12115| ------ | ------ | ---- | -------------------- |
12116| message  | boolean | 是   | 布尔类型数据。 |
12117
12118**错误码:**
12119
12120| 错误码ID | 错误信息                              |
12121| -------- | ------------------------------------- |
12122| 17100014 | The type and value of the message do not match. |
12123| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12124
12125### setArrayBuffer<sup>10+</sup>
12126
12127setArrayBuffer(message: ArrayBuffer): void
12128
12129设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12130
12131**系统能力:** SystemCapability.Web.Webview.Core
12132
12133**参数:**
12134
12135| 参数名 | 类型   | 必填 | 说明                   |
12136| ------ | ------ | ---- | -------------------- |
12137| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
12138
12139**错误码:**
12140
12141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12142
12143| 错误码ID | 错误信息                              |
12144| -------- | ------------------------------------- |
12145| 17100014 | The type and value of the message do not match. |
12146| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12147
12148### setArray<sup>10+</sup>
12149
12150setArray(message: Array\<string | number | boolean\>): void
12151
12152设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12153
12154**系统能力:** SystemCapability.Web.Webview.Core
12155
12156**参数:**
12157
12158| 参数名 | 类型   | 必填 | 说明                   |
12159| ------ | ------ | ---- | -------------------- |
12160| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
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| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12170
12171### setError<sup>10+</sup>
12172
12173setError(message: Error): void
12174
12175设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12176
12177**系统能力:** SystemCapability.Web.Webview.Core
12178
12179**参数:**
12180
12181| 参数名 | 类型   | 必填 | 说明                   |
12182| ------ | ------ | ---- | -------------------- |
12183| message  | Error | 是   | 错误对象类型数据。 |
12184
12185**错误码:**
12186
12187以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12188
12189| 错误码ID | 错误信息                              |
12190| -------- | ------------------------------------- |
12191| 17100014 | The type and value of the message do not match. |
12192| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12193
12194## WebStorageOrigin
12195
12196提供Web SQL数据库的使用信息。
12197
12198**系统能力:** SystemCapability.Web.Webview.Core
12199
12200| 名称   | 类型   | 可读 | 可写 | 说明 |
12201| ------ | ------ | ---- | ---- | ---- |
12202| origin | string | 是  | 是 | 指定源的字符串索引。 |
12203| usage  | number | 是  | 是 | 指定源的存储量。     |
12204| quota  | number | 是  | 是 | 指定源的存储配额。   |
12205
12206## BackForwardList
12207
12208当前Webview的历史信息列表。
12209
12210**系统能力:** SystemCapability.Web.Webview.Core
12211
12212| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
12213| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
12214| currentIndex | number | 是   | 是   | 当前在页面历史列表中的索引。                                 |
12215| size         | number | 是   | 是   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
12216
12217### getItemAtIndex
12218
12219getItemAtIndex(index: number): HistoryItem
12220
12221获取历史列表中指定索引的历史记录项信息。
12222
12223**系统能力:** SystemCapability.Web.Webview.Core
12224
12225**参数:**
12226
12227| 参数名 | 类型   | 必填 | 说明                   |
12228| ------ | ------ | ---- | ---------------------- |
12229| index  | number | 是   | 指定历史列表中的索引。 |
12230
12231**返回值:**
12232
12233| 类型                        | 说明         |
12234| --------------------------- | ------------ |
12235| [HistoryItem](#historyitem) | 历史记录项。 |
12236
12237**错误码:**
12238
12239以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12240
12241| 错误码ID | 错误信息                                                |
12242| -------- | ------------------------------------------------------ |
12243| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12244
12245**示例:**
12246
12247```ts
12248// xxx.ets
12249import { webview } from '@kit.ArkWeb';
12250import { BusinessError } from '@kit.BasicServicesKit';
12251import { image } from '@kit.ImageKit';
12252
12253@Entry
12254@Component
12255struct WebComponent {
12256  controller: webview.WebviewController = new webview.WebviewController();
12257  @State icon: image.PixelMap | undefined = undefined;
12258
12259  build() {
12260    Column() {
12261      Button('getBackForwardEntries')
12262        .onClick(() => {
12263          try {
12264            let list = this.controller.getBackForwardEntries();
12265            let historyItem = list.getItemAtIndex(list.currentIndex);
12266            console.log("HistoryItem: " + JSON.stringify(historyItem));
12267            this.icon = historyItem.icon;
12268          } catch (error) {
12269            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12270          }
12271        })
12272      Web({ src: 'www.example.com', controller: this.controller })
12273    }
12274  }
12275}
12276```
12277
12278## HistoryItem
12279
12280页面历史记录项。
12281
12282**系统能力:** SystemCapability.Web.Webview.Core
12283
12284| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
12285| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
12286| icon          | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
12287| historyUrl    | string                                 | 是   | 是   | 历史记录项的url地址。        |
12288| historyRawUrl | string                                 | 是   | 是   | 历史记录项的原始url地址。    |
12289| title         | string                                 | 是   | 是   | 历史记录项的标题。           |
12290
12291## WebCustomScheme
12292
12293自定义协议配置。
12294
12295**系统能力:** SystemCapability.Web.Webview.Core
12296
12297| 名称           | 类型       | 可读 | 可写 | 说明                         |
12298| -------------- | --------- | ---- | ---- | ---------------------------- |
12299| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。        |
12300| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。    |
12301| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。           |
12302| isStandard<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。           |
12303| isLocal<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“FILE”的安全规则相同的安全规则来处理。           |
12304| isDisplayIsolated<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。           |
12305| isSecure<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。           |
12306| isCspBypassing<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。在大多数情况下,当设置isStandard为true时,不应设置此值。         |
12307| isCodeCacheSupported<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的js资源,支持生成code cache。         |
12308
12309## SecureDnsMode<sup>10+</sup>
12310
12311Web组件使用HTTPDNS的模式。
12312
12313**系统能力:** SystemCapability.Web.Webview.Core
12314
12315| 名称          | 值 | 说明                                      |
12316| ------------- | -- |----------------------------------------- |
12317| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
12318| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
12319| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|
12320
12321## WebDownloadState<sup>11+</sup>
12322
12323下载任务的状态。
12324
12325**系统能力:** SystemCapability.Web.Webview.Core
12326
12327| 名称          | 值 | 说明                                      |
12328| ------------- | -- |----------------------------------------- |
12329| IN_PROGRESS                                  | 0 |下载任务正在进行中。|
12330| COMPLETED                                 | 1 |下载任务已经完成。|
12331| CANCELED                          | 2 |下载任务已经被取消。|
12332| INTERRUPTED                          | 3 |下载任务被中断。|
12333| PENDING                          | 4 |下载任务等待开始。|
12334| PAUSED                          | 5 |下载任务已经被暂停。|
12335| UNKNOWN                          | 6 |下载任务未知状态。|
12336
12337## WebDownloadErrorCode<sup>11+</sup>
12338
12339下载任务的错误码。
12340
12341**系统能力:** SystemCapability.Web.Webview.Core
12342
12343| 名称          | 值 | 说明                                      |
12344| ------------- | -- |----------------------------------------- |
12345| ERROR_UNKNOWN                                  | 0 |未知的错误。|
12346| FILE_FAILED | 1 |  常规文件操作失败。|
12347| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。|
12348| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。|
12349| FILE_NAME_TOO_LONG | 5 | 文件名字过长。|
12350| FILE_TOO_LARGE | 6 | 文件太大。|
12351| FILE_TRANSIENT_ERROR | 10 |  出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。|
12352| FILE_BLOCKED | 11 |  由于某些本地策略,文件被阻止访问。|
12353| FILE_TOO_SHORT | 13 |  当尝试恢复下载时,发现文件不够长,可能该文件已不存在。|
12354| FILE_HASH_MISMATCH | 14 |  哈希不匹配。|
12355| FILE_SAME_AS_SOURCE | 15 |  文件已存在。|
12356| NETWORK_FAILED | 20 |  一般网络错误。|
12357| NETWORK_TIMEOUT | 21 | 网络超时。|
12358| NETWORK_DISCONNECTED | 22 | 网络断开连接。|
12359| NETWORK_SERVER_DOWN | 23 |  服务器关闭。|
12360| NETWORK_INVALID_REQUEST | 24 |  无效的网络请求,可能重定向到不支持的方案或无效的URL。|
12361| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。|
12362| SERVER_NO_RANGE | 31 |  服务器不支持范围请求。|
12363| SERVER_BAD_CONTENT | 33 |   服务器没有请求的数据。|
12364| SERVER_UNAUTHORIZED | 34 |  服务器不允许下载该文件。|
12365| SERVER_CERT_PROBLEM | 35 |  服务器证书错误。|
12366| SERVER_FORBIDDEN | 36 |  服务器访问被禁止。|
12367| SERVER_UNREACHABLE | 37 |  无法访问服务器。|
12368| SERVER_CONTENT_LENGTH_MISMATCH | 38 |  接收到的数据与内容长度不匹配。|
12369| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。|
12370| USER_CANCELED | 40 | 用户取消了下载。|
12371| USER_SHUTDOWN | 41 | 用户关闭了应用。|
12372| CRASH | 50 | 应用发生了崩溃。|
12373
12374## WebDownloadItem<sup>11+</sup>
12375
12376 表示下载任务,您可以使用此对象来操作相应的下载任务。
12377
12378> **说明:**
12379>
12380> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
12381
12382### getGuid<sup>11+</sup>
12383
12384getGuid(): string
12385
12386获取下载任务的唯一ID。
12387
12388**系统能力:** SystemCapability.Web.Webview.Core
12389
12390**返回值:**
12391
12392| 类型   | 说明                      |
12393| ------ | ------------------------- |
12394| string | 下载任务的唯一ID。 |
12395
12396**示例:**
12397
12398```ts
12399// xxx.ets
12400import { webview } from '@kit.ArkWeb';
12401import { BusinessError } from '@kit.BasicServicesKit';
12402
12403@Entry
12404@Component
12405struct WebComponent {
12406  controller: webview.WebviewController = new webview.WebviewController();
12407  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12408
12409  build() {
12410    Column() {
12411      Button('setDownloadDelegate')
12412        .onClick(() => {
12413          try {
12414            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12415              console.log("will start a download.");
12416              // 传入一个下载路径,并开始下载。
12417              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12418            })
12419            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12420              console.log("download update guid: " + webDownloadItem.getGuid());
12421            })
12422            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12423              console.log("download failed guid: " + webDownloadItem.getGuid());
12424            })
12425            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12426              console.log("download finish guid: " + webDownloadItem.getGuid());
12427            })
12428            this.controller.setDownloadDelegate(this.delegate);
12429          } catch (error) {
12430            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12431          }
12432        })
12433      Button('startDownload')
12434        .onClick(() => {
12435          try {
12436            this.controller.startDownload('https://www.example.com');
12437          } catch (error) {
12438            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12439          }
12440        })
12441      Web({ src: 'www.example.com', controller: this.controller })
12442    }
12443  }
12444}
12445```
12446
12447### getCurrentSpeed<sup>11+</sup>
12448
12449getCurrentSpeed(): number
12450
12451获取下载的速度,单位:字节每秒。
12452
12453**系统能力:** SystemCapability.Web.Webview.Core
12454
12455**返回值:**
12456
12457| 类型   | 说明                      |
12458| ------ | ------------------------- |
12459| number | 下载的速度(字节每秒)。 |
12460
12461**示例:**
12462
12463```ts
12464// xxx.ets
12465import { webview } from '@kit.ArkWeb';
12466import { BusinessError } from '@kit.BasicServicesKit';
12467
12468@Entry
12469@Component
12470struct WebComponent {
12471  controller: webview.WebviewController = new webview.WebviewController();
12472  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12473
12474  build() {
12475    Column() {
12476      Button('setDownloadDelegate')
12477        .onClick(() => {
12478          try {
12479            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12480              console.log("will start a download.");
12481              // 传入一个下载路径,并开始下载。
12482              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12483            })
12484            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12485              console.log("download update current speed: " + webDownloadItem.getCurrentSpeed());
12486            })
12487            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12488              console.log("download failed guid: " + webDownloadItem.getGuid());
12489            })
12490            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12491              console.log("download finish guid: " + webDownloadItem.getGuid());
12492            })
12493            this.controller.setDownloadDelegate(this.delegate);
12494          } catch (error) {
12495            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12496          }
12497        })
12498      Button('startDownload')
12499        .onClick(() => {
12500          try {
12501            this.controller.startDownload('https://www.example.com');
12502          } catch (error) {
12503            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12504          }
12505        })
12506      Web({ src: 'www.example.com', controller: this.controller })
12507    }
12508  }
12509}
12510```
12511
12512### getPercentComplete<sup>11+</sup>
12513
12514getPercentComplete(): number
12515
12516获取下载的进度,100代表下载完成。
12517
12518**系统能力:** SystemCapability.Web.Webview.Core
12519
12520**返回值:**
12521
12522| 类型   | 说明                      |
12523| ------ | ------------------------- |
12524| number | 下载完成的进度,100代表下载完成。 |
12525
12526**示例:**
12527
12528```ts
12529// xxx.ets
12530import { webview } from '@kit.ArkWeb';
12531import { BusinessError } from '@kit.BasicServicesKit';
12532
12533@Entry
12534@Component
12535struct WebComponent {
12536  controller: webview.WebviewController = new webview.WebviewController();
12537  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12538
12539  build() {
12540    Column() {
12541      Button('setDownloadDelegate')
12542        .onClick(() => {
12543          try {
12544            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12545              console.log("will start a download.");
12546              // 传入一个下载路径,并开始下载。
12547              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12548            })
12549            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12550              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12551            })
12552            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12553              console.log("download failed guid: " + webDownloadItem.getGuid());
12554            })
12555            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12556              console.log("download finish guid: " + webDownloadItem.getGuid());
12557            })
12558            this.controller.setDownloadDelegate(this.delegate);
12559          } catch (error) {
12560            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12561          }
12562        })
12563      Button('startDownload')
12564        .onClick(() => {
12565          try {
12566            this.controller.startDownload('https://www.example.com');
12567          } catch (error) {
12568            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12569          }
12570        })
12571      Web({ src: 'www.example.com', controller: this.controller })
12572    }
12573  }
12574}
12575```
12576
12577### getTotalBytes<sup>11+</sup>
12578
12579getTotalBytes(): number
12580
12581获取待下载文件的总长度。
12582
12583**系统能力:** SystemCapability.Web.Webview.Core
12584
12585**返回值:**
12586
12587| 类型   | 说明                      |
12588| ------ | ------------------------- |
12589| number | 待下载文件的总长度。 |
12590
12591**示例:**
12592
12593```ts
12594// xxx.ets
12595import { webview } from '@kit.ArkWeb';
12596import { BusinessError } from '@kit.BasicServicesKit';
12597
12598@Entry
12599@Component
12600struct WebComponent {
12601  controller: webview.WebviewController = new webview.WebviewController();
12602  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12603
12604  build() {
12605    Column() {
12606      Button('setDownloadDelegate')
12607        .onClick(() => {
12608          try {
12609            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12610              console.log("will start a download.");
12611              // 传入一个下载路径,并开始下载。
12612              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12613            })
12614            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12615              console.log("download update total bytes: " + webDownloadItem.getTotalBytes());
12616            })
12617            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12618              console.log("download failed guid: " + webDownloadItem.getGuid());
12619            })
12620            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12621              console.log("download finish guid: " + webDownloadItem.getGuid());
12622            })
12623            this.controller.setDownloadDelegate(this.delegate);
12624          } catch (error) {
12625            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12626          }
12627        })
12628      Button('startDownload')
12629        .onClick(() => {
12630          try {
12631            this.controller.startDownload('https://www.example.com');
12632          } catch (error) {
12633            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12634          }
12635        })
12636      Web({ src: 'www.example.com', controller: this.controller })
12637    }
12638  }
12639}
12640```
12641
12642### getState<sup>11+</sup>
12643
12644getState(): WebDownloadState
12645
12646获取下载的状态。
12647
12648**系统能力:** SystemCapability.Web.Webview.Core
12649
12650**返回值:**
12651
12652| 类型   | 说明                      |
12653| ------ | ------------------------- |
12654| [WebDownloadState](#webdownloadstate11) | 下载的状态。 |
12655
12656**示例:**
12657
12658```ts
12659// xxx.ets
12660import { webview } from '@kit.ArkWeb';
12661import { BusinessError } from '@kit.BasicServicesKit';
12662
12663@Entry
12664@Component
12665struct WebComponent {
12666  controller: webview.WebviewController = new webview.WebviewController();
12667  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12668
12669  build() {
12670    Column() {
12671      Button('setDownloadDelegate')
12672        .onClick(() => {
12673          try {
12674            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12675              console.log("will start a download.");
12676              // 传入一个下载路径,并开始下载。
12677              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12678            })
12679            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12680              console.log("download update download state: " + webDownloadItem.getState());
12681            })
12682            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12683              console.log("download failed guid: " + webDownloadItem.getGuid());
12684            })
12685            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12686              console.log("download finish guid: " + webDownloadItem.getGuid());
12687            })
12688            this.controller.setDownloadDelegate(this.delegate);
12689          } catch (error) {
12690            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12691          }
12692        })
12693      Button('startDownload')
12694        .onClick(() => {
12695          try {
12696            this.controller.startDownload('https://www.example.com');
12697          } catch (error) {
12698            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12699          }
12700        })
12701      Web({ src: 'www.example.com', controller: this.controller })
12702    }
12703  }
12704}
12705```
12706
12707### getLastErrorCode<sup>11+</sup>
12708
12709getLastErrorCode(): WebDownloadErrorCode
12710
12711获取下载的错误码。
12712
12713**系统能力:** SystemCapability.Web.Webview.Core
12714
12715**返回值:**
12716
12717| 类型   | 说明                      |
12718| ------ | ------------------------- |
12719| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 |
12720
12721**示例:**
12722
12723```ts
12724// xxx.ets
12725import { webview } from '@kit.ArkWeb';
12726import { BusinessError } from '@kit.BasicServicesKit';
12727
12728@Entry
12729@Component
12730struct WebComponent {
12731  controller: webview.WebviewController = new webview.WebviewController();
12732  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12733
12734  build() {
12735    Column() {
12736      Button('setDownloadDelegate')
12737        .onClick(() => {
12738          try {
12739            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12740              console.log("will start a download.");
12741              // 传入一个下载路径,并开始下载。
12742              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12743            })
12744            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12745              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12746            })
12747            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12748              console.log("download failed guid: " + webDownloadItem.getGuid());
12749              console.log("download error code: " + webDownloadItem.getLastErrorCode());
12750            })
12751            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12752              console.log("download finish guid: " + webDownloadItem.getGuid());
12753            })
12754            this.controller.setDownloadDelegate(this.delegate);
12755          } catch (error) {
12756            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12757          }
12758        })
12759      Button('startDownload')
12760        .onClick(() => {
12761          try {
12762            this.controller.startDownload('https://www.example.com');
12763          } catch (error) {
12764            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12765          }
12766        })
12767      Web({ src: 'www.example.com', controller: this.controller })
12768    }
12769  }
12770}
12771```
12772
12773### getMethod<sup>11+</sup>
12774
12775getMethod(): string
12776
12777获取下载任务的请求方式。
12778
12779**系统能力:** SystemCapability.Web.Webview.Core
12780
12781**返回值:**
12782
12783| 类型   | 说明                      |
12784| ------ | ------------------------- |
12785| string | 下载的请求方式。 |
12786
12787**示例:**
12788
12789```ts
12790// xxx.ets
12791import { webview } from '@kit.ArkWeb';
12792import { BusinessError } from '@kit.BasicServicesKit';
12793
12794@Entry
12795@Component
12796struct WebComponent {
12797  controller: webview.WebviewController = new webview.WebviewController();
12798  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12799
12800  build() {
12801    Column() {
12802      Button('setDownloadDelegate')
12803        .onClick(() => {
12804          try {
12805            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12806              console.log("will start a download, method:" + webDownloadItem.getMethod());
12807              // 传入一个下载路径,并开始下载。
12808              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12809            })
12810            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12811              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12812            })
12813            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12814              console.log("download failed guid: " + webDownloadItem.getGuid());
12815            })
12816            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12817              console.log("download finish guid: " + webDownloadItem.getGuid());
12818            })
12819            this.controller.setDownloadDelegate(this.delegate);
12820          } catch (error) {
12821            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12822          }
12823        })
12824      Button('startDownload')
12825        .onClick(() => {
12826          try {
12827            this.controller.startDownload('https://www.example.com');
12828          } catch (error) {
12829            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12830          }
12831        })
12832      Web({ src: 'www.example.com', controller: this.controller })
12833    }
12834  }
12835}
12836```
12837
12838### getMimeType<sup>11+</sup>
12839
12840getMimeType(): string
12841
12842获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
12843
12844**系统能力:** SystemCapability.Web.Webview.Core
12845
12846**返回值:**
12847
12848| 类型   | 说明                      |
12849| ------ | ------------------------- |
12850| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
12851
12852**示例:**
12853
12854```ts
12855// xxx.ets
12856import { webview } from '@kit.ArkWeb';
12857import { BusinessError } from '@kit.BasicServicesKit';
12858
12859@Entry
12860@Component
12861struct WebComponent {
12862  controller: webview.WebviewController = new webview.WebviewController();
12863  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12864
12865  build() {
12866    Column() {
12867      Button('setDownloadDelegate')
12868        .onClick(() => {
12869          try {
12870            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12871              console.log("will start a download, mime type:" + webDownloadItem.getMimeType());
12872              // 传入一个下载路径,并开始下载。
12873              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12874            })
12875            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12876              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12877            })
12878            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12879              console.log("download failed guid: " + webDownloadItem.getGuid());
12880            })
12881            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12882              console.log("download finish guid: " + webDownloadItem.getGuid());
12883            })
12884            this.controller.setDownloadDelegate(this.delegate);
12885          } catch (error) {
12886            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12887          }
12888        })
12889      Button('startDownload')
12890        .onClick(() => {
12891          try {
12892            this.controller.startDownload('https://www.example.com');
12893          } catch (error) {
12894            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12895          }
12896        })
12897      Web({ src: 'www.example.com', controller: this.controller })
12898    }
12899  }
12900}
12901```
12902
12903### getUrl<sup>11+</sup>
12904
12905getUrl(): string
12906
12907获取下载的请求地址。
12908
12909**系统能力:** SystemCapability.Web.Webview.Core
12910
12911**返回值:**
12912
12913| 类型   | 说明                      |
12914| ------ | ------------------------- |
12915| string | 下载的请求地址。 |
12916
12917**示例:**
12918
12919```ts
12920// xxx.ets
12921import { webview } from '@kit.ArkWeb';
12922import { BusinessError } from '@kit.BasicServicesKit';
12923
12924@Entry
12925@Component
12926struct WebComponent {
12927  controller: webview.WebviewController = new webview.WebviewController();
12928  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12929
12930  build() {
12931    Column() {
12932      Button('setDownloadDelegate')
12933        .onClick(() => {
12934          try {
12935            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12936              console.log("will start a download, url:" + webDownloadItem.getUrl());
12937              // 传入一个下载路径,并开始下载。
12938              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12939            })
12940            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12941              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12942            })
12943            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12944              console.log("download failed guid: " + webDownloadItem.getGuid());
12945            })
12946            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12947              console.log("download finish guid: " + webDownloadItem.getGuid());
12948            })
12949            this.controller.setDownloadDelegate(this.delegate);
12950          } catch (error) {
12951            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12952          }
12953        })
12954      Button('startDownload')
12955        .onClick(() => {
12956          try {
12957            this.controller.startDownload('https://www.example.com');
12958          } catch (error) {
12959            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12960          }
12961        })
12962      Web({ src: 'www.example.com', controller: this.controller })
12963    }
12964  }
12965}
12966```
12967
12968### getSuggestedFileName<sup>11+</sup>
12969
12970getSuggestedFileName(): string
12971
12972获取下载的建议文件名。
12973
12974**系统能力:** SystemCapability.Web.Webview.Core
12975
12976**返回值:**
12977
12978| 类型   | 说明                      |
12979| ------ | ------------------------- |
12980| string | 下载的建议文件名。 |
12981
12982**示例:**
12983
12984```ts
12985// xxx.ets
12986import { webview } from '@kit.ArkWeb';
12987import { BusinessError } from '@kit.BasicServicesKit';
12988
12989@Entry
12990@Component
12991struct WebComponent {
12992  controller: webview.WebviewController = new webview.WebviewController();
12993  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12994
12995  build() {
12996    Column() {
12997      Button('setDownloadDelegate')
12998        .onClick(() => {
12999          try {
13000            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13001              console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
13002              // 传入一个下载路径,并开始下载。
13003              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13004            })
13005            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13006              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13007            })
13008            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13009              console.log("download failed guid: " + webDownloadItem.getGuid());
13010            })
13011            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13012              console.log("download finish guid: " + webDownloadItem.getGuid());
13013            })
13014            this.controller.setDownloadDelegate(this.delegate);
13015          } catch (error) {
13016            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13017          }
13018        })
13019      Button('startDownload')
13020        .onClick(() => {
13021          try {
13022            this.controller.startDownload('https://www.example.com');
13023          } catch (error) {
13024            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13025          }
13026        })
13027      Web({ src: 'www.example.com', controller: this.controller })
13028    }
13029  }
13030}
13031```
13032
13033### getReceivedBytes<sup>11+</sup>
13034
13035getReceivedBytes(): number
13036
13037获取已经接收的字节数。
13038
13039**系统能力:** SystemCapability.Web.Webview.Core
13040
13041**返回值:**
13042
13043| 类型   | 说明                      |
13044| ------ | ------------------------- |
13045| number | 已经接收的字节数。 |
13046
13047**示例:**
13048
13049```ts
13050// xxx.ets
13051import { webview } from '@kit.ArkWeb';
13052import { BusinessError } from '@kit.BasicServicesKit';
13053
13054@Entry
13055@Component
13056struct WebComponent {
13057  controller: webview.WebviewController = new webview.WebviewController();
13058  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13059
13060  build() {
13061    Column() {
13062      Button('setDownloadDelegate')
13063        .onClick(() => {
13064          try {
13065            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13066              console.log("will start a download.");
13067              // 传入一个下载路径,并开始下载。
13068              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13069            })
13070            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13071              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13072              console.log("download update received bytes: " + webDownloadItem.getReceivedBytes());
13073            })
13074            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13075              console.log("download failed guid: " + webDownloadItem.getGuid());
13076            })
13077            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13078              console.log("download finish guid: " + webDownloadItem.getGuid());
13079            })
13080            this.controller.setDownloadDelegate(this.delegate);
13081          } catch (error) {
13082            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13083          }
13084        })
13085      Button('startDownload')
13086        .onClick(() => {
13087          try {
13088            this.controller.startDownload('https://www.example.com');
13089          } catch (error) {
13090            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13091          }
13092        })
13093      Web({ src: 'www.example.com', controller: this.controller })
13094    }
13095  }
13096}
13097```
13098
13099### getFullPath<sup>11+</sup>
13100
13101getFullPath(): string
13102
13103获取下载文件在磁盘上的全路径。
13104
13105**系统能力:** SystemCapability.Web.Webview.Core
13106
13107**返回值:**
13108
13109| 类型   | 说明                      |
13110| ------ | ------------------------- |
13111| string | 下载文件在磁盘上的全路径。 |
13112
13113**示例:**
13114
13115```ts
13116// xxx.ets
13117import { webview } from '@kit.ArkWeb';
13118import { BusinessError } from '@kit.BasicServicesKit';
13119
13120@Entry
13121@Component
13122struct WebComponent {
13123  controller: webview.WebviewController = new webview.WebviewController();
13124  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13125
13126  build() {
13127    Column() {
13128      Button('setDownloadDelegate')
13129        .onClick(() => {
13130          try {
13131            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13132              console.log("will start a download.");
13133              // 传入一个下载路径,并开始下载。
13134              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13135            })
13136            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13137              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13138            })
13139            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13140              console.log("download failed guid: " + webDownloadItem.getGuid());
13141            })
13142            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13143              console.log("download finish guid: " + webDownloadItem.getGuid());
13144              console.log("download finish full path: " + webDownloadItem.getFullPath());
13145            })
13146            this.controller.setDownloadDelegate(this.delegate);
13147          } catch (error) {
13148            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13149          }
13150        })
13151      Button('startDownload')
13152        .onClick(() => {
13153          try {
13154            this.controller.startDownload('https://www.example.com');
13155          } catch (error) {
13156            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13157          }
13158        })
13159      Web({ src: 'www.example.com', controller: this.controller })
13160    }
13161  }
13162}
13163```
13164
13165### serialize<sup>11+</sup>
13166
13167serialize(): Uint8Array
13168
13169将失败的下载序列化到一个字节数组。
13170
13171**系统能力:** SystemCapability.Web.Webview.Core
13172
13173**返回值:**
13174
13175| 类型   | 说明                      |
13176| ------ | ------------------------- |
13177| Uint8Array | 失败的下载序列化后的字节数组。 |
13178
13179**示例:**
13180
13181```ts
13182// xxx.ets
13183import { webview } from '@kit.ArkWeb';
13184import { BusinessError } from '@kit.BasicServicesKit';
13185
13186@Entry
13187@Component
13188struct WebComponent {
13189  controller: webview.WebviewController = new webview.WebviewController();
13190  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13191  failedData: Uint8Array = new Uint8Array();
13192
13193  build() {
13194    Column() {
13195      Button('setDownloadDelegate')
13196        .onClick(() => {
13197          try {
13198            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13199              console.log("will start a download.");
13200              // 传入一个下载路径,并开始下载。
13201              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13202            })
13203            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13204              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13205            })
13206            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13207              console.log("download failed guid: " + webDownloadItem.getGuid());
13208              // 序列化失败的下载到一个字节数组。
13209              this.failedData = webDownloadItem.serialize();
13210            })
13211            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13212              console.log("download finish guid: " + webDownloadItem.getGuid());
13213            })
13214            this.controller.setDownloadDelegate(this.delegate);
13215          } catch (error) {
13216            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13217          }
13218        })
13219      Button('startDownload')
13220        .onClick(() => {
13221          try {
13222            this.controller.startDownload('https://www.example.com');
13223          } catch (error) {
13224            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13225          }
13226        })
13227      Web({ src: 'www.example.com', controller: this.controller })
13228    }
13229  }
13230}
13231```
13232
13233### deserialize<sup>11+</sup>
13234
13235static deserialize(serializedData: Uint8Array): WebDownloadItem
13236
13237将序列化后的字节数组反序列化为一个WebDownloadItem对象。
13238
13239**系统能力:** SystemCapability.Web.Webview.Core
13240
13241**参数:**
13242
13243| 参数名              | 类型    | 必填   |  说明 |
13244| ------------------ | ------- | ---- | ------------- |
13245| serializedData | Uint8Array | 是   | 序列化后的下载。|
13246
13247**返回值:**
13248
13249| 类型   | 说明                      |
13250| ------ | ------------------------- |
13251| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 |
13252
13253**错误码:**
13254
13255以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13256
13257| 错误码ID | 错误信息                                                     |
13258| -------- | ------------------------------------------------------------ |
13259| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13260
13261**示例:**
13262
13263```ts
13264// xxx.ets
13265import { webview } from '@kit.ArkWeb';
13266import { BusinessError } from '@kit.BasicServicesKit';
13267
13268@Entry
13269@Component
13270struct WebComponent {
13271  controller: webview.WebviewController = new webview.WebviewController();
13272  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13273  failedData: Uint8Array = new Uint8Array();
13274
13275  build() {
13276    Column() {
13277      Button('setDownloadDelegate')
13278        .onClick(() => {
13279          try {
13280            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13281              console.log("will start a download.");
13282              // 传入一个下载路径,并开始下载。
13283              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13284            })
13285            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13286              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13287            })
13288            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13289              console.log("download failed guid: " + webDownloadItem.getGuid());
13290              // 序列化失败的下载到一个字节数组。
13291              this.failedData = webDownloadItem.serialize();
13292            })
13293            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13294              console.log("download finish guid: " + webDownloadItem.getGuid());
13295            })
13296            this.controller.setDownloadDelegate(this.delegate);
13297          } catch (error) {
13298            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13299          }
13300        })
13301      Button('startDownload')
13302        .onClick(() => {
13303          try {
13304            this.controller.startDownload('https://www.example.com');
13305          } catch (error) {
13306            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13307          }
13308        })
13309      Button('resumeDownload')
13310        .onClick(() => {
13311          try {
13312            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13313          } catch (error) {
13314            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13315          }
13316        })
13317      Web({ src: 'www.example.com', controller: this.controller })
13318    }
13319  }
13320}
13321```
13322
13323### start<sup>11+</sup>
13324
13325start(downloadPath: string): void
13326
13327开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。
13328
13329> **说明:**
13330>
13331>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。
13332
13333**系统能力:** SystemCapability.Web.Webview.Core
13334
13335**参数:**
13336
13337| 参数名 | 类型                   | 必填 | 说明                             |
13338| ------ | ---------------------- | ---- | ------------------------------|
13339| downloadPath   | string     | 是  | 下载文件的路径(包含文件名)。|
13340
13341**错误码:**
13342
13343以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13344
13345| 错误码ID | 错误信息                                                     |
13346| -------- | ------------------------------------------------------------ |
13347| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13348
13349**示例:**
13350
13351```ts
13352// xxx.ets
13353import { webview } from '@kit.ArkWeb';
13354import { BusinessError } from '@kit.BasicServicesKit';
13355
13356@Entry
13357@Component
13358struct WebComponent {
13359  controller: webview.WebviewController = new webview.WebviewController();
13360  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13361  failedData: Uint8Array = new Uint8Array();
13362
13363  build() {
13364    Column() {
13365      Button('setDownloadDelegate')
13366        .onClick(() => {
13367          try {
13368            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13369              console.log("will start a download.");
13370              // 传入一个下载路径,并开始下载。
13371              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13372            })
13373            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13374              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13375            })
13376            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13377              console.log("download failed guid: " + webDownloadItem.getGuid());
13378              // 序列化失败的下载到一个字节数组。
13379              this.failedData = webDownloadItem.serialize();
13380            })
13381            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13382              console.log("download finish guid: " + webDownloadItem.getGuid());
13383            })
13384            this.controller.setDownloadDelegate(this.delegate);
13385          } catch (error) {
13386            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13387          }
13388        })
13389      Button('startDownload')
13390        .onClick(() => {
13391          try {
13392            this.controller.startDownload('https://www.example.com');
13393          } catch (error) {
13394            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13395          }
13396        })
13397      Button('resumeDownload')
13398        .onClick(() => {
13399          try {
13400            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13401          } catch (error) {
13402            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13403          }
13404        })
13405      Web({ src: 'www.example.com', controller: this.controller })
13406    }
13407  }
13408}
13409```
13410
13411### cancel<sup>11+</sup>
13412
13413cancel(): void
13414
13415取消一个正在下载的下载任务。
13416
13417**系统能力:** SystemCapability.Web.Webview.Core
13418
13419**示例:**
13420
13421```ts
13422// xxx.ets
13423import { webview } from '@kit.ArkWeb';
13424import { BusinessError } from '@kit.BasicServicesKit';
13425
13426@Entry
13427@Component
13428struct WebComponent {
13429  controller: webview.WebviewController = new webview.WebviewController();
13430  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13431  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13432  failedData: Uint8Array = new Uint8Array();
13433
13434  build() {
13435    Column() {
13436      Button('setDownloadDelegate')
13437        .onClick(() => {
13438          try {
13439            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13440              console.log("will start a download.");
13441              // 传入一个下载路径,并开始下载。
13442              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13443            })
13444            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13445              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13446              this.download = webDownloadItem;
13447            })
13448            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13449              console.log("download failed guid: " + webDownloadItem.getGuid());
13450              // 序列化失败的下载到一个字节数组。
13451              this.failedData = webDownloadItem.serialize();
13452            })
13453            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13454              console.log("download finish guid: " + webDownloadItem.getGuid());
13455            })
13456            this.controller.setDownloadDelegate(this.delegate);
13457          } catch (error) {
13458            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13459          }
13460        })
13461      Button('startDownload')
13462        .onClick(() => {
13463          try {
13464            this.controller.startDownload('https://www.example.com');
13465          } catch (error) {
13466            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13467          }
13468        })
13469      Button('resumeDownload')
13470        .onClick(() => {
13471          try {
13472            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13473          } catch (error) {
13474            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13475          }
13476        })
13477      Button('cancel')
13478        .onClick(() => {
13479          try {
13480            this.download.cancel();
13481          } catch (error) {
13482            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13483          }
13484        })
13485      Web({ src: 'www.example.com', controller: this.controller })
13486    }
13487  }
13488}
13489```
13490
13491### pause<sup>11+</sup>
13492
13493pause(): void
13494
13495暂停一个正在下载的下载任务。
13496
13497**系统能力:** SystemCapability.Web.Webview.Core
13498
13499**错误码:**
13500
13501以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13502
13503| 错误码ID  | 错误信息                                                      |
13504| -------- | ------------------------------------------------------------ |
13505| 17100019 | The download task is not started yet. |
13506
13507**示例:**
13508
13509```ts
13510// xxx.ets
13511import { webview } from '@kit.ArkWeb';
13512import { BusinessError } from '@kit.BasicServicesKit';
13513
13514@Entry
13515@Component
13516struct WebComponent {
13517  controller: webview.WebviewController = new webview.WebviewController();
13518  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13519  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13520  failedData: Uint8Array = new Uint8Array();
13521
13522  build() {
13523    Column() {
13524      Button('setDownloadDelegate')
13525        .onClick(() => {
13526          try {
13527            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13528              console.log("will start a download.");
13529              // 传入一个下载路径,并开始下载。
13530              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13531            })
13532            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13533              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13534              this.download = webDownloadItem;
13535            })
13536            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13537              console.log("download failed guid: " + webDownloadItem.getGuid());
13538              // 序列化失败的下载到一个字节数组。
13539              this.failedData = webDownloadItem.serialize();
13540            })
13541            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13542              console.log("download finish guid: " + webDownloadItem.getGuid());
13543            })
13544            this.controller.setDownloadDelegate(this.delegate);
13545          } catch (error) {
13546            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13547          }
13548        })
13549      Button('startDownload')
13550        .onClick(() => {
13551          try {
13552            this.controller.startDownload('https://www.example.com');
13553          } catch (error) {
13554            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13555          }
13556        })
13557      Button('resumeDownload')
13558        .onClick(() => {
13559          try {
13560            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13561          } catch (error) {
13562            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13563          }
13564        })
13565      Button('cancel')
13566        .onClick(() => {
13567          try {
13568            this.download.cancel();
13569          } catch (error) {
13570            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13571          }
13572        })
13573      Button('pause')
13574        .onClick(() => {
13575          try {
13576            this.download.pause();
13577          } catch (error) {
13578            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13579          }
13580        })
13581      Web({ src: 'www.example.com', controller: this.controller })
13582    }
13583  }
13584}
13585```
13586
13587### resume<sup>11+</sup>
13588
13589resume(): void
13590
13591恢复一个暂停的下载任务。
13592
13593**系统能力:** SystemCapability.Web.Webview.Core
13594
13595**错误码:**
13596
13597以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13598
13599| 错误码ID  | 错误信息                                                      |
13600| -------- | ------------------------------------------------------------ |
13601| 17100016 | The download task is not paused. |
13602
13603**示例:**
13604
13605```ts
13606// xxx.ets
13607import { webview } from '@kit.ArkWeb';
13608import { BusinessError } from '@kit.BasicServicesKit';
13609
13610@Entry
13611@Component
13612struct WebComponent {
13613  controller: webview.WebviewController = new webview.WebviewController();
13614  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13615  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13616  failedData: Uint8Array = new Uint8Array();
13617
13618  build() {
13619    Column() {
13620      Button('setDownloadDelegate')
13621        .onClick(() => {
13622          try {
13623            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13624              console.log("will start a download.");
13625              // 传入一个下载路径,并开始下载。
13626              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13627            })
13628            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13629              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13630              this.download = webDownloadItem;
13631            })
13632            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13633              console.log("download failed guid: " + webDownloadItem.getGuid());
13634              // 序列化失败的下载到一个字节数组。
13635              this.failedData = webDownloadItem.serialize();
13636            })
13637            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13638              console.log("download finish guid: " + webDownloadItem.getGuid());
13639            })
13640            this.controller.setDownloadDelegate(this.delegate);
13641          } catch (error) {
13642            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13643          }
13644        })
13645      Button('startDownload')
13646        .onClick(() => {
13647          try {
13648            this.controller.startDownload('https://www.example.com');
13649          } catch (error) {
13650            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13651          }
13652        })
13653      Button('resumeDownload')
13654        .onClick(() => {
13655          try {
13656            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13657          } catch (error) {
13658            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13659          }
13660        })
13661      Button('cancel')
13662        .onClick(() => {
13663          try {
13664            this.download.cancel();
13665          } catch (error) {
13666            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13667          }
13668        })
13669      Button('pause')
13670        .onClick(() => {
13671          try {
13672            this.download.pause();
13673          } catch (error) {
13674            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13675          }
13676        })
13677      Button('resume')
13678        .onClick(() => {
13679          try {
13680            this.download.resume();
13681          } catch (error) {
13682            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13683          }
13684        })
13685      Web({ src: 'www.example.com', controller: this.controller })
13686    }
13687  }
13688}
13689```
13690
13691## WebDownloadDelegate<sup>11+</sup>
13692
13693 下载任务的状态会通过该类的回调接口通知给用户。
13694
13695### onBeforeDownload<sup>11+</sup>
13696
13697onBeforeDownload(callback: Callback\<WebDownloadItem>): void
13698
13699下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。
13700
13701> **说明:**
13702>
13703>处于PENDING状态的下载任务会首先将文件保存至临时目录。在调用WebDownloadItem.start并指定目标路径后,临时文件将被重命名为目标文件名,未完成下载的部分会在调用WebDownloadItem.start并指定目标路径后直接下载到目标路径。若希望避免在调用WebDownloadItem.start前生成临时文件,可先通过WebDownloadItem.cancel来取消当前的下载任务,之后再使用WebDownloadManager.resumeDownload来恢复被取消的下载任务。
13704
13705**系统能力:** SystemCapability.Web.Webview.Core
13706
13707**参数:**
13708
13709| 参数名  | 类型   | 必填 | 说明           |
13710| ------- | ------ | ---- | :------------- |
13711| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 触发下载的回调。 |
13712
13713**示例:**
13714
13715```ts
13716// xxx.ets
13717import { webview } from '@kit.ArkWeb';
13718import { BusinessError } from '@kit.BasicServicesKit';
13719
13720@Entry
13721@Component
13722struct WebComponent {
13723  controller: webview.WebviewController = new webview.WebviewController();
13724  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13725  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13726  failedData: Uint8Array = new Uint8Array();
13727
13728  build() {
13729    Column() {
13730      Button('setDownloadDelegate')
13731        .onClick(() => {
13732          try {
13733            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13734              console.log("will start a download.");
13735              // 传入一个下载路径,并开始下载。
13736              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13737            })
13738            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13739              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13740              this.download = webDownloadItem;
13741            })
13742            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13743              console.log("download failed guid: " + webDownloadItem.getGuid());
13744              // 序列化失败的下载到一个字节数组。
13745              this.failedData = webDownloadItem.serialize();
13746            })
13747            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13748              console.log("download finish guid: " + webDownloadItem.getGuid());
13749            })
13750            this.controller.setDownloadDelegate(this.delegate);
13751          } catch (error) {
13752            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13753          }
13754        })
13755      Button('startDownload')
13756        .onClick(() => {
13757          try {
13758            this.controller.startDownload('https://www.example.com');
13759          } catch (error) {
13760            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13761          }
13762        })
13763      Button('resumeDownload')
13764        .onClick(() => {
13765          try {
13766            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13767          } catch (error) {
13768            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13769          }
13770        })
13771      Button('cancel')
13772        .onClick(() => {
13773          try {
13774            this.download.cancel();
13775          } catch (error) {
13776            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13777          }
13778        })
13779      Button('pause')
13780        .onClick(() => {
13781          try {
13782            this.download.pause();
13783          } catch (error) {
13784            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13785          }
13786        })
13787      Button('resume')
13788        .onClick(() => {
13789          try {
13790            this.download.resume();
13791          } catch (error) {
13792            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13793          }
13794        })
13795      Web({ src: 'www.example.com', controller: this.controller })
13796    }
13797  }
13798}
13799```
13800
13801### onDownloadUpdated<sup>11+</sup>
13802
13803onDownloadUpdated(callback: Callback\<WebDownloadItem>): void
13804
13805下载过程中的回调,通过该回调的参数可以了解下载进度等信息。
13806
13807**系统能力:** SystemCapability.Web.Webview.Core
13808
13809**参数:**
13810
13811| 参数名  | 类型   | 必填 | 说明           |
13812| ------- | ------ | ---- | :------------- |
13813| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已更新。 |
13814
13815**示例:**
13816
13817```ts
13818// xxx.ets
13819import { webview } from '@kit.ArkWeb';
13820import { BusinessError } from '@kit.BasicServicesKit';
13821
13822@Entry
13823@Component
13824struct WebComponent {
13825  controller: webview.WebviewController = new webview.WebviewController();
13826  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13827  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13828  failedData: Uint8Array = new Uint8Array();
13829
13830  build() {
13831    Column() {
13832      Button('setDownloadDelegate')
13833        .onClick(() => {
13834          try {
13835            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13836              console.log("will start a download.");
13837              // 传入一个下载路径,并开始下载。
13838              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13839            })
13840            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13841              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13842              this.download = webDownloadItem;
13843            })
13844            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13845              console.log("download failed guid: " + webDownloadItem.getGuid());
13846              // 序列化失败的下载到一个字节数组。
13847              this.failedData = webDownloadItem.serialize();
13848            })
13849            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13850              console.log("download finish guid: " + webDownloadItem.getGuid());
13851            })
13852            this.controller.setDownloadDelegate(this.delegate);
13853          } catch (error) {
13854            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13855          }
13856        })
13857      Button('startDownload')
13858        .onClick(() => {
13859          try {
13860            this.controller.startDownload('https://www.example.com');
13861          } catch (error) {
13862            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13863          }
13864        })
13865      Button('resumeDownload')
13866        .onClick(() => {
13867          try {
13868            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13869          } catch (error) {
13870            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13871          }
13872        })
13873      Button('cancel')
13874        .onClick(() => {
13875          try {
13876            this.download.cancel();
13877          } catch (error) {
13878            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13879          }
13880        })
13881      Button('pause')
13882        .onClick(() => {
13883          try {
13884            this.download.pause();
13885          } catch (error) {
13886            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13887          }
13888        })
13889      Button('resume')
13890        .onClick(() => {
13891          try {
13892            this.download.resume();
13893          } catch (error) {
13894            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13895          }
13896        })
13897      Web({ src: 'www.example.com', controller: this.controller })
13898    }
13899  }
13900}
13901```
13902
13903### onDownloadFinish<sup>11+</sup>
13904
13905onDownloadFinish(callback: Callback\<WebDownloadItem>): void
13906
13907下载完成的通知。
13908
13909**系统能力:** SystemCapability.Web.Webview.Core
13910
13911**参数:**
13912
13913| 参数名  | 类型   | 必填 | 说明           |
13914| ------- | ------ | ---- | :------------- |
13915| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已完成。 |
13916
13917**示例:**
13918
13919```ts
13920// xxx.ets
13921import { webview } from '@kit.ArkWeb';
13922import { BusinessError } from '@kit.BasicServicesKit';
13923
13924@Entry
13925@Component
13926struct WebComponent {
13927  controller: webview.WebviewController = new webview.WebviewController();
13928  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13929  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13930  failedData: Uint8Array = new Uint8Array();
13931
13932  build() {
13933    Column() {
13934      Button('setDownloadDelegate')
13935        .onClick(() => {
13936          try {
13937            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13938              console.log("will start a download.");
13939              // 传入一个下载路径,并开始下载。
13940              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13941            })
13942            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13943              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13944              this.download = webDownloadItem;
13945            })
13946            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13947              console.log("download failed guid: " + webDownloadItem.getGuid());
13948              // 序列化失败的下载到一个字节数组。
13949              this.failedData = webDownloadItem.serialize();
13950            })
13951            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13952              console.log("download finish guid: " + webDownloadItem.getGuid());
13953            })
13954            this.controller.setDownloadDelegate(this.delegate);
13955          } catch (error) {
13956            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13957          }
13958        })
13959      Button('startDownload')
13960        .onClick(() => {
13961          try {
13962            this.controller.startDownload('https://www.example.com');
13963          } catch (error) {
13964            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13965          }
13966        })
13967      Button('resumeDownload')
13968        .onClick(() => {
13969          try {
13970            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13971          } catch (error) {
13972            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13973          }
13974        })
13975      Button('cancel')
13976        .onClick(() => {
13977          try {
13978            this.download.cancel();
13979          } catch (error) {
13980            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13981          }
13982        })
13983      Button('pause')
13984        .onClick(() => {
13985          try {
13986            this.download.pause();
13987          } catch (error) {
13988            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13989          }
13990        })
13991      Button('resume')
13992        .onClick(() => {
13993          try {
13994            this.download.resume();
13995          } catch (error) {
13996            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13997          }
13998        })
13999      Web({ src: 'www.example.com', controller: this.controller })
14000    }
14001  }
14002}
14003```
14004
14005### onDownloadFailed<sup>11+</sup>
14006
14007onDownloadFailed(callback: Callback\<WebDownloadItem>): void
14008
14009下载失败的通知。
14010
14011**系统能力:** SystemCapability.Web.Webview.Core
14012
14013**参数:**
14014
14015| 参数名  | 类型   | 必填 | 说明           |
14016| ------- | ------ | ---- | :------------- |
14017| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载回调失败。 |
14018
14019**示例:**
14020
14021```ts
14022// xxx.ets
14023import { webview } from '@kit.ArkWeb';
14024import { BusinessError } from '@kit.BasicServicesKit';
14025
14026@Entry
14027@Component
14028struct WebComponent {
14029  controller: webview.WebviewController = new webview.WebviewController();
14030  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14031  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14032  failedData: Uint8Array = new Uint8Array();
14033
14034  build() {
14035    Column() {
14036      Button('setDownloadDelegate')
14037        .onClick(() => {
14038          try {
14039            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14040              console.log("will start a download.");
14041              // 传入一个下载路径,并开始下载。
14042              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14043            })
14044            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14045              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14046              this.download = webDownloadItem;
14047            })
14048            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14049              console.log("download failed guid: " + webDownloadItem.getGuid());
14050              // 序列化失败的下载到一个字节数组。
14051              this.failedData = webDownloadItem.serialize();
14052            })
14053            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14054              console.log("download finish guid: " + webDownloadItem.getGuid());
14055            })
14056            this.controller.setDownloadDelegate(this.delegate);
14057          } catch (error) {
14058            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14059          }
14060        })
14061      Button('startDownload')
14062        .onClick(() => {
14063          try {
14064            this.controller.startDownload('https://www.example.com');
14065          } catch (error) {
14066            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14067          }
14068        })
14069      Button('resumeDownload')
14070        .onClick(() => {
14071          try {
14072            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14073          } catch (error) {
14074            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14075          }
14076        })
14077      Button('cancel')
14078        .onClick(() => {
14079          try {
14080            this.download.cancel();
14081          } catch (error) {
14082            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14083          }
14084        })
14085      Button('pause')
14086        .onClick(() => {
14087          try {
14088            this.download.pause();
14089          } catch (error) {
14090            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14091          }
14092        })
14093      Button('resume')
14094        .onClick(() => {
14095          try {
14096            this.download.resume();
14097          } catch (error) {
14098            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14099          }
14100        })
14101      Web({ src: 'www.example.com', controller: this.controller })
14102    }
14103  }
14104}
14105```
14106
14107## WebDownloadManager<sup>11+</sup>
14108
14109可以通过该类提供的接口来恢复失败的下载任务。
14110
14111### setDownloadDelegate<sup>11+</sup>
14112
14113static setDownloadDelegate(delegate: WebDownloadDelegate): void
14114
14115设置用于接收从WebDownloadManager触发的下载进度的委托。
14116
14117**系统能力:** SystemCapability.Web.Webview.Core
14118
14119**参数:**
14120
14121| 参数名          | 类型    |  必填  | 说明                                            |
14122| ---------------| ------- | ---- | ------------- |
14123| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
14124
14125**示例:**
14126
14127```ts
14128// xxx.ets
14129import { webview } from '@kit.ArkWeb';
14130import { BusinessError } from '@kit.BasicServicesKit';
14131
14132@Entry
14133@Component
14134struct WebComponent {
14135  controller: webview.WebviewController = new webview.WebviewController();
14136  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14137  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14138  failedData: Uint8Array = new Uint8Array();
14139
14140  build() {
14141    Column() {
14142      Button('setDownloadDelegate')
14143        .onClick(() => {
14144          try {
14145            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14146              console.log("will start a download.");
14147              // 传入一个下载路径,并开始下载。
14148              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14149            })
14150            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14151              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14152              this.download = webDownloadItem;
14153            })
14154            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14155              console.log("download failed guid: " + webDownloadItem.getGuid());
14156              // 序列化失败的下载到一个字节数组。
14157              this.failedData = webDownloadItem.serialize();
14158            })
14159            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14160              console.log("download finish guid: " + webDownloadItem.getGuid());
14161            })
14162            this.controller.setDownloadDelegate(this.delegate);
14163            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14164          } catch (error) {
14165            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14166          }
14167        })
14168      Button('startDownload')
14169        .onClick(() => {
14170          try {
14171            this.controller.startDownload('https://www.example.com');
14172          } catch (error) {
14173            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14174          }
14175        })
14176      Button('resumeDownload')
14177        .onClick(() => {
14178          try {
14179            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14180          } catch (error) {
14181            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14182          }
14183        })
14184      Button('cancel')
14185        .onClick(() => {
14186          try {
14187            this.download.cancel();
14188          } catch (error) {
14189            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14190          }
14191        })
14192      Button('pause')
14193        .onClick(() => {
14194          try {
14195            this.download.pause();
14196          } catch (error) {
14197            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14198          }
14199        })
14200      Button('resume')
14201        .onClick(() => {
14202          try {
14203            this.download.resume();
14204          } catch (error) {
14205            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14206          }
14207        })
14208      Web({ src: 'www.example.com', controller: this.controller })
14209    }
14210  }
14211}
14212```
14213
14214### resumeDownload<sup>11+</sup>
14215
14216static resumeDownload(webDownloadItem: WebDownloadItem): void
14217
14218恢复一个失败的下载任务。
14219
14220**系统能力:** SystemCapability.Web.Webview.Core
14221
14222**参数:**
14223
14224| 参数名          | 类型    |  必填  | 说明                                            |
14225| ---------------| ------- | ---- | ------------- |
14226| webDownloadItem      | [WebDownloadItem](#webdownloaditem11)  | 是   | 待恢复的下载任务。 |
14227
14228**错误码:**
14229
14230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14231
14232| 错误码ID | 错误信息                              |
14233| -------- | ------------------------------------- |
14234| 17100018 | No WebDownloadDelegate has been set yet. |
14235
14236**示例:**
14237
14238```ts
14239// xxx.ets
14240import { webview } from '@kit.ArkWeb';
14241import { BusinessError } from '@kit.BasicServicesKit';
14242
14243@Entry
14244@Component
14245struct WebComponent {
14246  controller: webview.WebviewController = new webview.WebviewController();
14247  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14248  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14249  failedData: Uint8Array = new Uint8Array();
14250
14251  build() {
14252    Column() {
14253      Button('setDownloadDelegate')
14254        .onClick(() => {
14255          try {
14256            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14257              console.log("will start a download.");
14258              // 传入一个下载路径,并开始下载。
14259              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14260            })
14261            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14262              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14263              this.download = webDownloadItem;
14264            })
14265            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14266              console.log("download failed guid: " + webDownloadItem.getGuid());
14267              // 序列化失败的下载到一个字节数组。
14268              this.failedData = webDownloadItem.serialize();
14269            })
14270            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14271              console.log("download finish guid: " + webDownloadItem.getGuid());
14272            })
14273            this.controller.setDownloadDelegate(this.delegate);
14274            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14275          } catch (error) {
14276            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14277          }
14278        })
14279      Button('startDownload')
14280        .onClick(() => {
14281          try {
14282            this.controller.startDownload('https://www.example.com');
14283          } catch (error) {
14284            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14285          }
14286        })
14287      Button('resumeDownload')
14288        .onClick(() => {
14289          try {
14290            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14291          } catch (error) {
14292            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14293          }
14294        })
14295      Button('cancel')
14296        .onClick(() => {
14297          try {
14298            this.download.cancel();
14299          } catch (error) {
14300            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14301          }
14302        })
14303      Button('pause')
14304        .onClick(() => {
14305          try {
14306            this.download.pause();
14307          } catch (error) {
14308            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14309          }
14310        })
14311      Button('resume')
14312        .onClick(() => {
14313          try {
14314            this.download.resume();
14315          } catch (error) {
14316            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14317          }
14318        })
14319      Web({ src: 'www.example.com', controller: this.controller })
14320    }
14321  }
14322}
14323```
14324
14325## WebHttpBodyStream<sup>12+</sup>
14326
14327POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。
14328
14329### initialize<sup>12+</sup>
14330
14331initialize(): Promise\<void\>
14332
14333初始化WebHttpBodyStream。
14334
14335**系统能力:** SystemCapability.Web.Webview.Core
14336
14337**返回值:**
14338
14339| 类型   | 说明                      |
14340| ------ | ------------------------- |
14341| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 |
14342
14343**错误码:**
14344
14345以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14346
14347| 错误码ID | 错误信息                              |
14348| -------- | ------------------------------------- |
14349| 17100022 | Failed to initialize the HTTP body stream. |
14350
14351**示例:**
14352
14353```ts
14354// xxx.ets
14355import { webview } from '@kit.ArkWeb';
14356import { BusinessError } from '@kit.BasicServicesKit';
14357import { buffer } from '@kit.ArkTS';
14358import { WebNetErrorList } from '@ohos.web.netErrorList'
14359
14360@Entry
14361@Component
14362struct WebComponent {
14363  controller: webview.WebviewController = new webview.WebviewController();
14364  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14365  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
14366
14367  build() {
14368    Column() {
14369      Button('postUrl')
14370        .onClick(() => {
14371          try {
14372            let postData = buffer.from(this.htmlData);
14373            this.controller.postUrl('https://www.example.com', postData.buffer);
14374          } catch (error) {
14375            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14376          }
14377        })
14378      Web({ src: 'https://www.example.com', controller: this.controller })
14379        .onControllerAttached(() => {
14380          try {
14381            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
14382              console.log("[schemeHandler] onRequestStart");
14383              try {
14384                let stream = request.getHttpBodyStream();
14385                if (stream) {
14386                  stream.initialize().then(() => {
14387                    if (!stream) {
14388                      return;
14389                    }
14390                    console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize());
14391                    console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14392                    console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked());
14393                    console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14394                    console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory());
14395                    stream.read(stream.getSize()).then((buffer) => {
14396                      if (!stream) {
14397                        return;
14398                      }
14399                      console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength);
14400                      console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14401                      console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14402                    }).catch((error: BusinessError) => {
14403                      console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14404                    })
14405                  }).catch((error: BusinessError) => {
14406                    console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14407                  })
14408                } else {
14409                  console.log("[schemeHandler] onRequestStart has no http body stream");
14410                }
14411              } catch (error) {
14412                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14413              }
14414
14415              return false;
14416            })
14417
14418            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
14419              console.log("[schemeHandler] onRequestStop");
14420            });
14421
14422            this.controller.setWebSchemeHandler('https', this.schemeHandler);
14423          } catch (error) {
14424            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14425          }
14426        })
14427        .javaScriptAccess(true)
14428        .domStorageAccess(true)
14429    }
14430  }
14431}
14432
14433```
14434
14435### read<sup>12+</sup>
14436
14437read(size: number): Promise\<ArrayBuffer\>
14438
14439读取WebHttpBodyStream中的数据。
14440
14441**系统能力:** SystemCapability.Web.Webview.Core
14442
14443**参数:**
14444
14445| 参数名   | 类型    |  必填  | 说明                       |
14446| --------| ------- | ---- | ---------------------------|
14447|  size | number | 是   | 读取WebHttpBodyStream中的字节数。 |
14448
14449**返回值:**
14450
14451| 类型   | 说明                      |
14452| ------ | ------------------------- |
14453| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 |
14454
14455**错误码:**
14456
14457以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14458
14459| 错误码ID | 错误信息                              |
14460| -------- | ------------------------------------- |
14461|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
14462
14463**示例:**
14464
14465完整示例代码参考[initialize](#initialize12)。
14466
14467### getSize<sup>12+</sup>
14468
14469getSize(): number
14470
14471获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。
14472
14473**系统能力:** SystemCapability.Web.Webview.Core
14474
14475**返回值:**
14476
14477| 类型   | 说明                      |
14478| ------ | ------------------------- |
14479| number | 获取WebHttpBodyStream中的数据大小。 |
14480
14481**示例:**
14482
14483完整示例代码参考[initialize](#initialize12)。
14484
14485### getPosition<sup>12+</sup>
14486
14487getPosition(): number
14488
14489读取WebHttpBodyStream中当前的读取位置。
14490
14491**系统能力:** SystemCapability.Web.Webview.Core
14492
14493**返回值:**
14494
14495| 类型   | 说明                      |
14496| ------ | ------------------------- |
14497| number | WebHttpBodyStream中当前的读取位置。 |
14498
14499**示例:**
14500
14501完整示例代码参考[initialize](#initialize12)。
14502
14503### isChunked<sup>12+</sup>
14504
14505isChunked(): boolean
14506
14507WebHttpBodyStream是否采用分块传输。
14508
14509**系统能力:** SystemCapability.Web.Webview.Core
14510
14511**返回值:**
14512
14513| 类型   | 说明                      |
14514| ------ | ------------------------- |
14515| boolean | WebHttpBodyStream是否采用分块传输。 |
14516
14517**示例:**
14518
14519完整示例代码参考[initialize](#initialize12)。
14520
14521### isEof<sup>12+</sup>
14522
14523isEof(): boolean
14524
14525判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。
14526
14527**系统能力:** SystemCapability.Web.Webview.Core
14528
14529**返回值:**
14530
14531| 类型   | 说明                      |
14532| ------ | ------------------------- |
14533| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 |
14534
14535**示例:**
14536
14537完整示例代码参考[initialize](#initialize12)。
14538
14539### isInMemory<sup>12+</sup>
14540
14541isInMemory(): boolean
14542
14543判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。
14544
14545**系统能力:** SystemCapability.Web.Webview.Core
14546
14547**返回值:**
14548
14549| 类型   | 说明                      |
14550| ------ | ------------------------- |
14551| boolean | WebHttpBodyStream中的上传数据是否在内存中。 |
14552
14553**示例:**
14554
14555完整示例代码参考[initialize](#initialize12)。
14556
14557## WebSchemeHandlerRequest<sup>12+</sup>
14558
14559通过WebSchemeHandler拦截到的请求。
14560
14561### getHeader<sup>12+</sup>
14562
14563getHeader(): Array\<WebHeader\>
14564
14565获取资源请求头信息。
14566
14567**系统能力:** SystemCapability.Web.Webview.Core
14568
14569**返回值:**
14570
14571| 类型                         | 说明         |
14572| -------------------------- | ---------- |
14573| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 |
14574
14575**示例:**
14576
14577完整示例代码参考[onRequestStart](#onrequeststart12)。
14578
14579### getRequestUrl<sup>12+</sup>
14580
14581getRequestUrl(): string
14582
14583获取资源请求的URL信息。
14584
14585**系统能力:** SystemCapability.Web.Webview.Core
14586
14587**返回值:**
14588
14589| 类型     | 说明            |
14590| ------ | ------------- |
14591| string | 返回资源请求的URL信息。 |
14592
14593**示例:**
14594
14595完整示例代码参考[onRequestStart](#onrequeststart12)。
14596
14597### getRequestMethod<sup>12+</sup>
14598
14599getRequestMethod(): string
14600
14601获取请求方法。
14602
14603**系统能力:** SystemCapability.Web.Webview.Core
14604
14605**返回值:**
14606
14607| 类型     | 说明            |
14608| ------ | ------------- |
14609| string | 返回请求方法。 |
14610
14611**示例:**
14612
14613完整示例代码参考[onRequestStart](#onrequeststart12)。
14614
14615### getReferrer<sup>12+</sup>
14616
14617getReferrer(): string
14618
14619获取referrer。
14620
14621**系统能力:** SystemCapability.Web.Webview.Core
14622
14623**返回值:**
14624
14625| 类型     | 说明            |
14626| ------ | ------------- |
14627| string | 获取到的referrer。 |
14628
14629**示例:**
14630
14631完整示例代码参考[onRequestStart](#onrequeststart12)。
14632
14633### isMainFrame<sup>12+</sup>
14634
14635isMainFrame(): boolean
14636
14637判断资源请求是否为主frame。
14638
14639**系统能力:** SystemCapability.Web.Webview.Core
14640
14641**返回值:**
14642
14643| 类型     | 说明            |
14644| ------ | ------------- |
14645| boolean | 判断资源请求是否为主frame。 |
14646
14647**示例:**
14648
14649完整示例代码参考[onRequestStart](#onrequeststart12)。
14650
14651### hasGesture<sup>12+</sup>
14652
14653hasGesture(): boolean
14654
14655获取资源请求是否与手势(如点击)相关联。
14656
14657**系统能力:** SystemCapability.Web.Webview.Core
14658
14659**返回值:**
14660
14661| 类型     | 说明            |
14662| ------ | ------------- |
14663| boolean | 返回资源请求是否与手势(如点击)相关联。 |
14664
14665**示例:**
14666
14667完整示例代码参考[onRequestStart](#onrequeststart12)。
14668
14669### getHttpBodyStream<sup>12+</sup>
14670
14671getHttpBodyStream(): WebHttpBodyStream | null
14672
14673获取资源请求中的WebHttpBodyStream。
14674
14675**系统能力:** SystemCapability.Web.Webview.Core
14676
14677**返回值:**
14678
14679| 类型     | 说明            |
14680| ------ | ------------- |
14681| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 |
14682
14683**示例:**
14684
14685完整示例代码参考[onRequestStart](#onrequeststart12)。
14686
14687### getRequestResourceType<sup>12+</sup>
14688
14689getRequestResourceType(): WebResourceType
14690
14691获取资源请求的资源类型。
14692
14693**系统能力:** SystemCapability.Web.Webview.Core
14694
14695**返回值:**
14696
14697| 类型     | 说明            |
14698| ------ | ------------- |
14699| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 |
14700
14701**示例:**
14702
14703完整示例代码参考[onRequestStart](#onrequeststart12)。
14704
14705### getFrameUrl<sup>12+</sup>
14706
14707getFrameUrl(): string
14708
14709获取触发此请求的Frame的URL。
14710
14711**系统能力:** SystemCapability.Web.Webview.Core
14712
14713**返回值:**
14714
14715| 类型     | 说明            |
14716| ------ | ------------- |
14717| string | 返回触发此请求的Frame的URL。 |
14718
14719**示例:**
14720
14721完整示例代码参考[onRequestStart](#onrequeststart12)。
14722
14723## WebSchemeHandlerResponse<sup>12+</sup>
14724
14725请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。
14726
14727### constructor<sup>12+</sup>
14728
14729constructor()
14730
14731Response的构造函数。
14732
14733**系统能力:** SystemCapability.Web.Webview.Core
14734
14735**示例:**
14736
14737```ts
14738// xxx.ets
14739import { webview } from '@kit.ArkWeb';
14740import { BusinessError } from '@kit.BasicServicesKit';
14741import { WebNetErrorList } from '@ohos.web.netErrorList';
14742
14743@Entry
14744@Component
14745struct WebComponent {
14746  controller: webview.WebviewController = new webview.WebviewController();
14747  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14748
14749  build() {
14750    Column() {
14751      Button('response').onClick(() => {
14752        let response = new webview.WebSchemeHandlerResponse();
14753        try {
14754          response.setUrl("http://www.example.com")
14755          response.setStatus(200)
14756          response.setStatusText("OK")
14757          response.setMimeType("text/html")
14758          response.setEncoding("utf-8")
14759          response.setHeaderByName("header1", "value1", false)
14760          response.setNetErrorCode(WebNetErrorList.NET_OK)
14761          console.log("[schemeHandler] getUrl:" + response.getUrl())
14762          console.log("[schemeHandler] getStatus:" + response.getStatus())
14763          console.log("[schemeHandler] getStatusText:" + response.getStatusText())
14764          console.log("[schemeHandler] getMimeType:" + response.getMimeType())
14765          console.log("[schemeHandler] getEncoding:" + response.getEncoding())
14766          console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1"))
14767          console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode())
14768
14769        } catch (error) {
14770          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14771        }
14772      })
14773      Web({ src: 'https://www.example.com', controller: this.controller })
14774    }
14775  }
14776}
14777
14778```
14779
14780### setUrl<sup>12+</sup>
14781
14782setUrl(url: string): void
14783
14784给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。
14785
14786**系统能力:** SystemCapability.Web.Webview.Core
14787
14788**参数:**
14789
14790| 参数名   | 类型    |  必填  | 说明                       |
14791| --------| ------- | ---- | ---------------------------|
14792|  url | string | 是   | 即将要跳转的URL。 |
14793
14794**示例:**
14795
14796示例完整示例代码参考[constructor](#constructor12)。
14797
14798**错误码:**
14799
14800以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14801
14802| 错误码ID | 错误信息                  |
14803| -------- | ----------------------- |
14804|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14805
14806### setNetErrorCode<sup>12+</sup>
14807
14808setNetErrorCode(code: WebNetErrorList): void
14809
14810给当前的Response设置网络错误码。
14811
14812**系统能力:** SystemCapability.Web.Webview.Core
14813
14814**参数:**
14815
14816| 参数名   | 类型    |  必填  | 说明                       |
14817| --------| ------- | ---- | ---------------------------|
14818|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
14819
14820**错误码:**
14821
14822以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14823
14824| 错误码ID | 错误信息                  |
14825| -------- | ----------------------- |
14826|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
14827
14828**示例:**
14829
14830示例完整示例代码参考[constructor](#constructor12)。
14831
14832### setStatus<sup>12+</sup>
14833
14834setStatus(code: number): void
14835
14836给当前的Response设置HTTP状态码。
14837
14838**系统能力:** SystemCapability.Web.Webview.Core
14839
14840**参数:**
14841
14842| 参数名   | 类型    |  必填  | 说明                       |
14843| --------| ------- | ---- | ---------------------------|
14844|  code | number | 是   | Http状态码。 |
14845
14846**错误码:**
14847
14848以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14849
14850| 错误码ID | 错误信息                  |
14851| -------- | ----------------------- |
14852|  401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
14853
14854**示例:**
14855
14856示例完整示例代码参考[constructor](#constructor12)。
14857
14858### setStatusText<sup>12+</sup>
14859
14860setStatusText(text: string): void
14861
14862给当前的Response设置状态文本。
14863
14864**系统能力:** SystemCapability.Web.Webview.Core
14865
14866**参数:**
14867
14868| 参数名   | 类型    |  必填  | 说明                       |
14869| --------| ------- | ---- | ---------------------------|
14870|  text | string | 是   | 状态文本。 |
14871
14872**错误码:**
14873
14874以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14875
14876| 错误码ID | 错误信息                  |
14877| -------- | ----------------------- |
14878|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14879
14880**示例:**
14881
14882示例完整示例代码参考[constructor](#constructor12)。
14883
14884### setMimeType<sup>12+</sup>
14885
14886setMimeType(type: string): void
14887
14888给当前的Response设置媒体类型。
14889
14890**系统能力:** SystemCapability.Web.Webview.Core
14891
14892**参数:**
14893
14894| 参数名   | 类型    |  必填  | 说明                       |
14895| --------| ------- | ---- | ---------------------------|
14896|  type | string | 是   | 媒体类型。 |
14897
14898**错误码:**
14899
14900以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14901
14902| 错误码ID | 错误信息                  |
14903| -------- | ----------------------- |
14904|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14905
14906**示例:**
14907
14908示例完整示例代码参考[constructor](#constructor12)。
14909
14910### setEncoding<sup>12+</sup>
14911
14912setEncoding(encoding: string): void
14913
14914给当前的Response设置字符集。
14915
14916**系统能力:** SystemCapability.Web.Webview.Core
14917
14918**参数:**
14919
14920| 参数名   | 类型    |  必填  | 说明                       |
14921| --------| ------- | ---- | ---------------------------|
14922|  encoding | string | 是   | 字符集。 |
14923
14924**错误码:**
14925
14926以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14927
14928| 错误码ID | 错误信息                  |
14929| -------- | ----------------------- |
14930|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14931
14932**示例:**
14933
14934示例完整示例代码参考[constructor](#constructor12)。
14935
14936### setHeaderByName<sup>12+</sup>
14937
14938setHeaderByName(name: string, value: string, overwrite: boolean): void
14939
14940给当前的Response设置头信息。
14941
14942**系统能力:** SystemCapability.Web.Webview.Core
14943
14944**参数:**
14945
14946| 参数名   | 类型    |  必填  | 说明                       |
14947| --------| ------- | ---- | ---------------------------|
14948|  name | string | 是   | 头部(header)的名称。 |
14949|  value | string | 是   | 头部(header)的值。 |
14950|  overwrite | boolean | 是   | 如果为true,将覆盖现有的头部,否则不覆盖。 |
14951
14952**错误码:**
14953
14954以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14955
14956| 错误码ID | 错误信息                  |
14957| -------- | ----------------------- |
14958|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
14959
14960**示例:**
14961
14962示例完整示例代码参考[constructor](#constructor12)。
14963
14964### getUrl<sup>12+</sup>
14965
14966getUrl(): string
14967
14968获取重定向或由于HSTS而更改后的URL。
14969风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
14970
14971**系统能力:** SystemCapability.Web.Webview.Core
14972
14973**返回值:**
14974
14975| 类型    | 说明                                     |
14976| ------- | --------------------------------------- |
14977| string | 获取经过重定向或由于HSTS而更改后的URL。|
14978
14979**示例:**
14980
14981示例完整示例代码参考[constructor](#constructor12)。
14982
14983### getNetErrorCode<sup>12+</sup>
14984
14985getNetErrorCode(): WebNetErrorList
14986
14987获取Response的网络错误码。
14988
14989**系统能力:** SystemCapability.Web.Webview.Core
14990
14991**返回值:**
14992
14993| 类型    | 说明                                     |
14994| ------- | --------------------------------------- |
14995| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。|
14996
14997**示例:**
14998
14999示例完整示例代码参考[constructor](#constructor12)。
15000
15001### getStatus<sup>12+</sup>
15002
15003getStatus(): number
15004
15005获取Response的Http状态码。
15006
15007**系统能力:** SystemCapability.Web.Webview.Core
15008
15009**返回值:**
15010
15011| 类型    | 说明                                     |
15012| ------- | --------------------------------------- |
15013| number | 获取Response的Http状态码。|
15014
15015**示例:**
15016
15017示例完整示例代码参考[constructor](#constructor12)。
15018
15019### getStatusText<sup>12+</sup>
15020
15021getStatusText(): string
15022
15023获取Response的状态文本。
15024
15025**系统能力:** SystemCapability.Web.Webview.Core
15026
15027**返回值:**
15028
15029| 类型    | 说明                                     |
15030| ------- | --------------------------------------- |
15031| string | 状态文本。|
15032
15033**示例:**
15034
15035示例完整示例代码参考[constructor](#constructor12)。
15036
15037### getMimeType<sup>12+</sup>
15038
15039getMimeType(): string
15040
15041获取Response的媒体类型。
15042
15043**系统能力:** SystemCapability.Web.Webview.Core
15044
15045**返回值:**
15046
15047| 类型    | 说明                                     |
15048| ------- | --------------------------------------- |
15049| string | 媒体类型。|
15050
15051**示例:**
15052
15053示例完整示例代码参考[constructor](#constructor12)。
15054
15055### getEncoding<sup>12+</sup>
15056
15057getEncoding(): string
15058
15059获取Response的字符集。
15060
15061**系统能力:** SystemCapability.Web.Webview.Core
15062
15063**返回值:**
15064
15065| 类型    | 说明                                     |
15066| ------- | --------------------------------------- |
15067| string | 字符集。|
15068
15069**示例:**
15070
15071示例完整示例代码参考[constructor](#constructor12)。
15072
15073### getHeaderByName<sup>12+</sup>
15074
15075getHeaderByName(name: string): string
15076
15077获取Response的字符集。
15078
15079**系统能力:** SystemCapability.Web.Webview.Core
15080
15081**参数:**
15082
15083| 参数名  | 类型             | 必填 | 说明                  |
15084| ------- | ---------------- | ---- | -------------------- |
15085| name     | string | 是   | 头部(header)的名称。      |
15086
15087
15088**返回值:**
15089
15090| 类型    | 说明                                     |
15091| ------- | --------------------------------------- |
15092| string | 头部(header)的值。|
15093
15094**示例:**
15095
15096示例完整示例代码参考[constructor](#constructor12)。
15097
15098## WebResourceHandler<sup>12+</sup>
15099
15100通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。
15101
15102### didReceiveResponse<sup>12+</sup>
15103
15104didReceiveResponse(response: WebSchemeHandlerResponse): void
15105
15106将构造的响应头传递给被拦截的请求。
15107
15108**系统能力:** SystemCapability.Web.Webview.Core
15109
15110**参数:**
15111
15112| 参数名          | 类型    |  必填  | 说明                                            |
15113| ---------------| ------- | ---- | ------------- |
15114| response      | [WebSchemeHandlerResponse](#webschemehandlerresponse12)  | 是   | 该拦截请求的响应。 |
15115
15116**错误码:**
15117
15118以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15119
15120| 错误码ID | 错误信息                              |
15121| -------- | ------------------------------------- |
15122|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15123| 17100021 | The resource handler is invalid. |
15124
15125**示例:**
15126
15127示例请参考[OnRequestStart](#onrequeststart12)。
15128
15129### didReceiveResponseBody<sup>12+</sup>
15130
15131didReceiveResponseBody(data: ArrayBuffer): void
15132
15133将构造的响应体传递给被拦截的请求。
15134
15135**系统能力:** SystemCapability.Web.Webview.Core
15136
15137**参数:**
15138
15139| 参数名          | 类型    |  必填  | 说明                                            |
15140| ---------------| ------- | ---- | ------------- |
15141| data      | ArrayBuffer  | 是   | 响应体数据。 |
15142
15143**错误码:**
15144
15145以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15146
15147| 错误码ID | 错误信息                              |
15148| -------- | ------------------------------------- |
15149|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15150| 17100021 | The resource handler is invalid. |
15151
15152**示例:**
15153
15154示例请参考[OnRequestStart](#onrequeststart12)。
15155
15156### didFinish<sup>12+</sup>
15157
15158didFinish(): void
15159
15160通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15161
15162**系统能力:** SystemCapability.Web.Webview.Core
15163
15164**错误码:**
15165
15166以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15167
15168| 错误码ID | 错误信息                              |
15169| -------- | ------------------------------------- |
15170| 17100021 | The resource handler is invalid. |
15171
15172**示例:**
15173
15174示例请参考[OnRequestStart](#onrequeststart12)。
15175
15176### didFail<sup>12+</sup>
15177
15178didFail(code: WebNetErrorList): void
15179
15180通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15181
15182**系统能力:** SystemCapability.Web.Webview.Core
15183
15184**参数:**
15185
15186| 参数名   | 类型    |  必填  | 说明                       |
15187| --------| ------- | ---- | ---------------------------|
15188|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15189
15190**错误码:**
15191
15192以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15193
15194| 错误码ID | 错误信息                              |
15195| -------- | ------------------------------------- |
15196| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15197| 17100021 | The resource handler is invalid. |
15198
15199**系统能力:** SystemCapability.Web.Webview.Core
15200
15201**示例:**
15202
15203示例请参考[OnRequestStart](#onrequeststart12)。
15204
15205## WebSchemeHandler<sup>12+</sup>
15206
15207用于拦截指定scheme的请求的拦截器。
15208
15209### onRequestStart<sup>12+</sup>
15210
15211onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void
15212
15213当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。
15214
15215**系统能力:** SystemCapability.Web.Webview.Core
15216
15217**参数**:
15218
15219| 参数名   | 类型                 | 必填 | 说明       |
15220| -------- | -------------------- | ---- | ---------- |
15221| callback   | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 |
15222
15223**错误码:**
15224
15225以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15226
15227| 错误码ID | 错误信息                              |
15228| -------- | ------------------------------------- |
15229| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
15230
15231**示例:**
15232
15233```ts
15234// xxx.ets
15235import { webview } from '@kit.ArkWeb';
15236import { BusinessError } from '@kit.BasicServicesKit';
15237import { buffer } from '@kit.ArkTS';
15238import { WebNetErrorList } from '@ohos.web.netErrorList';
15239
15240@Entry
15241@Component
15242struct WebComponent {
15243  controller: webview.WebviewController = new webview.WebviewController();
15244  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15245  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
15246
15247  build() {
15248    Column() {
15249      Web({ src: 'https://www.example.com', controller: this.controller })
15250        .onControllerAttached(() => {
15251          try {
15252            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
15253              console.log("[schemeHandler] onRequestStart");
15254              try {
15255                console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl());
15256                console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod());
15257                console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer());
15258                console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame());
15259                console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture());
15260                console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length);
15261                console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType());
15262                console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl());
15263                let header = request.getHeader();
15264                for (let i = 0; i < header.length; i++) {
15265                  console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue);
15266                }
15267                let stream = request.getHttpBodyStream();
15268                if (stream) {
15269                  console.log("[schemeHandler] onRequestStart has http body stream");
15270                } else {
15271                  console.log("[schemeHandler] onRequestStart has no http body stream");
15272                }
15273              } catch (error) {
15274                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15275              }
15276
15277              if (request.getRequestUrl().endsWith("example.com")) {
15278                return false;
15279              }
15280
15281              let response = new webview.WebSchemeHandlerResponse();
15282              try {
15283                response.setNetErrorCode(WebNetErrorList.NET_OK);
15284                response.setStatus(200);
15285                response.setStatusText("OK");
15286                response.setMimeType("text/html");
15287                response.setEncoding("utf-8");
15288                response.setHeaderByName("header1", "value1", false);
15289              } catch (error) {
15290                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15291              }
15292
15293              // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。
15294              let buf = buffer.from(this.htmlData)
15295              try {
15296                if (buf.length == 0) {
15297                  console.log("[schemeHandler] length 0");
15298                  resourceHandler.didReceiveResponse(response);
15299                  // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail
15300                  resourceHandler.didFail(WebNetErrorList.ERR_FAILED);
15301                } else {
15302                  console.log("[schemeHandler] length 1");
15303                  resourceHandler.didReceiveResponse(response);
15304                  resourceHandler.didReceiveResponseBody(buf.buffer);
15305                  resourceHandler.didFinish();
15306                }
15307              } catch (error) {
15308                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15309              }
15310              return true;
15311            })
15312
15313            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
15314              console.log("[schemeHandler] onRequestStop");
15315            });
15316
15317            this.controller.setWebSchemeHandler('https', this.schemeHandler);
15318          } catch (error) {
15319            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15320          }
15321        })
15322        .javaScriptAccess(true)
15323        .domStorageAccess(true)
15324    }
15325  }
15326}
15327```
15328### onRequestStop<sup>12+</sup>
15329
15330onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void
15331
15332当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点:
15333
153341.WebResourceHandler调用didFail或者didFinish。
15335
153362.此请求因为其他原因中断。
15337
15338**系统能力:** SystemCapability.Web.Webview.Core
15339
15340**参数**:
15341
15342| 参数名   | 类型                 | 必填 | 说明       |
15343| -------- | -------------------- | ---- | ---------- |
15344| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是   | 对应请求结束的回调函数。 |
15345
15346**错误码:**
15347
15348以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15349
15350| 错误码ID | 错误信息                              |
15351| -------- | ------------------------------------- |
15352| 401 | Invalid input parameter. |
15353
15354**示例:**
15355
15356完整示例代码参考[onRequestStart](#onrequeststart12)。
15357
15358## CacheOptions<sup>12+</sup>
15359
15360Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。
15361
15362**系统能力:** SystemCapability.Web.Webview.Core
15363
15364| 名称        | 类型   | 可读 | 可写 |说明                 |
15365| ----------- | ------ | -----|------|------------------- |
15366| responseHeaders   | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。   |
15367
15368## PlaybackStatus<sup>12+</sup>
15369
15370[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。
15371
15372**系统能力:** SystemCapability.Web.Webview.Core
15373
15374| 名称 | 值 | 说明 |
15375|------|----|------|
15376| PAUSED  | 0 | 播放状态为播放状态。 |
15377| PLAYING | 1 | 播放状态为暂停状态。 |
15378
15379## NetworkState<sup>12+<sup>
15380
15381播放器的网络状态。
15382
15383**系统能力:** SystemCapability.Web.Webview.Core
15384
15385| 名称 | 值 | 说明 |
15386|------|----|------|
15387| EMPTY         | 0 | 播放器还没有开始下载数据。 |
15388| IDLE          | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 |
15389| LOADING       | 2 | 播放器正在下载媒体数据。 |
15390| NETWORK_ERROR | 3 | 发生了网络错误。 |
15391
15392## ReadyState<sup>12+<sup>
15393
15394播放器的缓存状态。
15395
15396**系统能力:** SystemCapability.Web.Webview.Core
15397
15398| 名称 | 值 | 说明 |
15399|------|----|------|
15400| HAVE_NOTHING      | 0 | 没有缓存。 |
15401| HAVE_METADATA     | 1 | 只缓存了媒体元数据。 |
15402| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 |
15403| HAVE_FUTURE_DATA  | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 |
15404| HAVE_ENOUGH_DATA  | 4 | 缓存了足够的数据,保证播放流畅。 |
15405
15406## MediaError<sup>12+<sup>
15407
15408播放器的错误类型。
15409
15410**系统能力:** SystemCapability.Web.Webview.Core
15411
15412| 名称 | 值 | 说明 |
15413|------|----|------|
15414| NETWORK_ERROR | 1 | 网络错误。 |
15415| FORMAT_ERROR  | 2 | 媒体格式错误。 |
15416| DECODE_ERROR  | 3 | 解码错误。 |
15417
15418## NativeMediaPlayerHandler<sup>12+<sup>
15419
15420[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。
15421应用通过该对象,将播放器的状态报告给ArkWeb内核。
15422
15423### handleStatusChanged<sup>12+<sup>
15424
15425handleStatusChanged(status: PlaybackStatus): void
15426
15427当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。
15428
15429**系统能力:** SystemCapability.Web.Webview.Core
15430
15431**参数:**
15432
15433| 参数名 | 类型 | 必填 | 说明 |
15434|--------|------|------|------|
15435| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 |
15436
15437**示例:**
15438
15439完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15440
15441### handleVolumeChanged<sup>12+<sup>
15442
15443handleVolumeChanged(volume: number): void
15444
15445当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。
15446
15447**系统能力:** SystemCapability.Web.Webview.Core
15448
15449**参数:**
15450
15451| 参数名 | 类型 | 必填 | 说明 |
15452|--------|------|------|------|
15453| volume | number | 是 | 播放器的音量。 |
15454
15455**示例:**
15456
15457完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15458
15459### handleMutedChanged<sup>12+<sup>
15460
15461handleMutedChanged(muted: boolean): void
15462
15463当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。
15464
15465**系统能力:** SystemCapability.Web.Webview.Core
15466
15467**参数:**
15468
15469| 参数名 | 类型 | 必填 | 说明 |
15470|--------|------|------|------|
15471| muted | boolean | 是 | 当前播放器是否静音。 |
15472
15473**示例:**
15474
15475完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15476
15477### handlePlaybackRateChanged<sup>12+<sup>
15478
15479handlePlaybackRateChanged(playbackRate: number): void
15480
15481当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。
15482
15483**系统能力:** SystemCapability.Web.Webview.Core
15484
15485**参数:**
15486
15487| 参数名 | 类型 | 必填 | 说明 |
15488|--------|------|------|------|
15489| playbackRate | number | 是 | 播放速率。 |
15490
15491**示例:**
15492
15493完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15494
15495### handleDurationChanged<sup>12+<sup>
15496
15497handleDurationChanged(duration: number): void
15498
15499当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。
15500
15501**系统能力:** SystemCapability.Web.Webview.Core
15502
15503**参数:**
15504
15505| 参数名 | 类型 | 必填 | 说明 |
15506|--------|------|------|------|
15507| duration | number | 是 | 媒体的总时长。单位: 秒 。 |
15508
15509**示例:**
15510
15511完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15512
15513### handleTimeUpdate<sup>12+<sup>
15514
15515handleTimeUpdate(currentPlayTime: number): void
15516
15517当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。
15518
15519**系统能力:** SystemCapability.Web.Webview.Core
15520
15521**参数:**
15522
15523| 参数名 | 类型 | 必填 | 说明 |
15524|--------|------|------|------|
15525| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。  |
15526
15527**示例:**
15528
15529完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15530
15531### handleBufferedEndTimeChanged<sup>12+<sup>
15532
15533handleBufferedEndTimeChanged(bufferedEndTime: number): void
15534
15535当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。
15536
15537**系统能力:** SystemCapability.Web.Webview.Core
15538
15539**参数:**
15540
15541| 参数名 | 类型 | 必填 | 说明 |
15542|--------|------|------|------|
15543| bufferedEndTime | number | 是 | 媒体缓冲的时长。 |
15544
15545**示例:**
15546
15547完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15548
15549### handleEnded<sup>12+<sup>
15550
15551handleEnded(): void
15552
15553当媒体播放结束时,调用该方法通知给 ArkWeb 内核。
15554
15555**系统能力:** SystemCapability.Web.Webview.Core
15556
15557**示例:**
15558
15559完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15560
15561### handleNetworkStateChanged<sup>12+<sup>
15562
15563handleNetworkStateChanged(state: NetworkState): void
15564
15565当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。
15566
15567**系统能力:** SystemCapability.Web.Webview.Core
15568
15569**参数:**
15570
15571| 参数名 | 类型 | 必填 | 说明 |
15572|--------|------|------|------|
15573| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 |
15574
15575**示例:**
15576
15577完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15578
15579### handleReadyStateChanged<sup>12+<sup>
15580
15581handleReadyStateChanged(state: ReadyState): void
15582
15583当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。
15584
15585**系统能力:** SystemCapability.Web.Webview.Core
15586
15587**参数:**
15588
15589| 参数名 | 类型 | 必填 | 说明 |
15590|--------|------|------|------|
15591| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 |
15592
15593**示例:**
15594
15595完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15596
15597### handleFullscreenChanged<sup>12+<sup>
15598
15599handleFullscreenChanged(fullscreen: boolean): void
15600
15601当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。
15602
15603**系统能力:** SystemCapability.Web.Webview.Core
15604
15605**参数:**
15606
15607| 参数名 | 类型 | 必填 | 说明 |
15608|--------|------|------|------|
15609| fullscreen | boolean | 是 | 是否全屏。 |
15610
15611**示例:**
15612
15613完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15614
15615### handleSeeking<sup>12+<sup>
15616
15617handleSeeking(): void
15618
15619当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。
15620
15621**系统能力:** SystemCapability.Web.Webview.Core
15622
15623**示例:**
15624
15625完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15626
15627### handleSeekFinished<sup>12+<sup>
15628
15629handleSeekFinished(): void
15630
15631当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。
15632
15633**系统能力:** SystemCapability.Web.Webview.Core
15634
15635**示例:**
15636
15637完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15638
15639### handleError<sup>12+<sup>
15640
15641handleError(error: MediaError, errorMessage: string): void
15642
15643当播放器发生错误时, 调用该方法通知 ArkWeb 内核。
15644
15645**系统能力:** SystemCapability.Web.Webview.Core
15646
15647**参数:**
15648
15649| 参数名 | 类型 | 必填 | 说明 |
15650|--------|------|------|------|
15651| error | [MediaError](#mediaerror12) | 是 | 错误类型。 |
15652| errorMessage | string | 是 | 错误的详细描述。 |
15653
15654**示例:**
15655
15656完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15657
15658### handleVideoSizeChanged<sup>12+<sup>
15659
15660handleVideoSizeChanged(width: number, height: number): void
15661
15662当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。
15663
15664**系统能力:** SystemCapability.Web.Webview.Core
15665
15666**参数:**
15667
15668| 参数名 | 类型 | 必填 | 说明 |
15669|--------|------|------|------|
15670| width  | number | 是 | 视频的宽。 |
15671| height | number | 是 | 视频的高。 |
15672
15673**示例:**
15674
15675完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15676
15677## SuspendType<sup>12+<sup>
15678
15679表示播放器的挂起类型。
15680
15681**系统能力:** SystemCapability.Web.Webview.Core
15682
15683| 名称 | 值 | 说明 |
15684|------|----|------|
15685| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 |
15686| ENTER_BACKGROUND         | 1 | 页面进后台。 |
15687| AUTO_CLEANUP             | 2 | 系统自动清理。 |
15688
15689## NativeMediaPlayerBridge<sup>12+<sup>
15690
15691[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。
15692接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。
15693ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。
15694
15695### updateRect<sup>12+<sup>
15696
15697updateRect(x: number, y: number, width: number, height: number): void
15698
15699更新 surface 位置信息。
15700
15701**系统能力:** SystemCapability.Web.Webview.Core
15702
15703**参数:**
15704
15705| 参数名 | 类型 | 必填 | 说明 |
15706|--------|------|------|------|
15707| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 |
15708| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 |
15709| width  | number | 是 | surface 的宽度。 |
15710| height | number | 是 | surface 的高度。 |
15711
15712**示例:**
15713
15714完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15715
15716### play<sup>12+<sup>
15717
15718play(): void
15719
15720播放视频。
15721
15722**系统能力:** SystemCapability.Web.Webview.Core
15723
15724**示例:**
15725
15726完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15727
15728### pause<sup>12+<sup>
15729
15730pause(): void
15731
15732暂停播放。
15733
15734**系统能力:** SystemCapability.Web.Webview.Core
15735
15736**示例:**
15737
15738完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15739
15740### seek<sup>12+<sup>
15741
15742seek(targetTime: number): void
15743
15744播放跳转到某个时间点。
15745
15746**系统能力:** SystemCapability.Web.Webview.Core
15747
15748**参数:**
15749
15750| 参数名 | 类型 | 必填 | 说明 |
15751|--------|------|------|------|
15752| targetTime | number | 是 | 单位: 秒。 |
15753
15754**示例:**
15755
15756完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15757
15758### setVolume<sup>12+<sup>
15759
15760setVolume(volume: number): void
15761
15762设置播放器音量值。
15763取值范围: [0, 1.0]
15764
15765**参数:**
15766
15767| 参数名 | 类型 | 必填 | 说明 |
15768|--------|------|------|------|
15769| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 |
15770
15771**系统能力:** SystemCapability.Web.Webview.Core
15772
15773**示例:**
15774
15775完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15776
15777### setMuted<sup>12+<sup>
15778
15779setMuted(muted: boolean): void
15780
15781设置静音状态。
15782
15783**系统能力:** SystemCapability.Web.Webview.Core
15784
15785**参数:**
15786
15787| 参数名 | 类型 | 必填 | 说明 |
15788|--------|------|------|------|
15789| muted | boolean | 是 | 是否静音。 |
15790
15791**示例:**
15792
15793完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15794
15795### setPlaybackRate<sup>12+<sup>
15796
15797setPlaybackRate(playbackRate: number): void
15798
15799设置播放速度。
15800取值范围: [0, 10.0]
15801
15802**系统能力:** SystemCapability.Web.Webview.Core
15803
15804**参数:**
15805
15806| 参数名 | 类型 | 必填 | 说明 |
15807|--------|------|------|------|
15808| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 |
15809
15810**示例:**
15811
15812完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15813
15814### release<sup>12+<sup>
15815
15816release(): void
15817
15818销毁播放器。
15819
15820**系统能力:** SystemCapability.Web.Webview.Core
15821
15822**示例:**
15823
15824完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15825
15826### enterFullscreen<sup>12+<sup>
15827
15828enterFullscreen(): void
15829
15830播放器进入全屏。
15831
15832**系统能力:** SystemCapability.Web.Webview.Core
15833
15834**示例:**
15835
15836完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15837
15838### exitFullscreen<sup>12+<sup>
15839
15840exitFullscreen(): void
15841
15842播放器退出全屏。
15843
15844**系统能力:** SystemCapability.Web.Webview.Core
15845
15846**示例:**
15847
15848完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15849
15850### resumePlayer<sup>12+<sup>
15851
15852resumePlayer?(): void
15853
15854通知应用重建应用内播放器,并恢复应用内播放器的状态信息。
15855
15856**系统能力:** SystemCapability.Web.Webview.Core
15857
15858**示例:**
15859
15860完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15861
15862### suspendPlayer<sup>12+<sup>
15863
15864suspendPlayer?(type: SuspendType): void
15865
15866通知应用销毁应用内播放器,并保存应用内播放器的状态信息。
15867
15868**系统能力:** SystemCapability.Web.Webview.Core
15869
15870**参数:**
15871
15872| 参数名 | 类型 | 必填 | 说明 |
15873|--------|------|------|------|
15874| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。|
15875
15876**示例:**
15877
15878完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15879
15880## MediaType<sup>12+<sup>
15881
15882表示媒体类型。
15883
15884**系统能力:** SystemCapability.Web.Webview.Core
15885
15886| 名称 | 值 | 说明 |
15887|------|----|------|
15888| VIDEO | 0 | 视频。 |
15889| AUDIO | 1 | 音频。 |
15890
15891## SourceType<sup>12+<sup>
15892
15893表示媒体源的类型。
15894
15895**系统能力:** SystemCapability.Web.Webview.Core
15896
15897| 名称 | 值 | 说明 |
15898|------|----|------|
15899| URL | 0 | 媒体源的类型是 URL 。 |
15900| MSE | 1 | 媒体源的类型是 blob 。 |
15901
15902## MediaSourceInfo<sup>12+<sup>
15903
15904表示媒体源的信息。
15905
15906**系统能力:** SystemCapability.Web.Webview.Core
15907
15908| 名称 | 类型 | 必填 | 说明 |
15909|------|------|------|------|
15910| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 |
15911| source | string | 是 | 媒体源地址。 |
15912| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 |
15913
15914## NativeMediaPlayerSurfaceInfo<sup>12+<sup>
15915
15916[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。
15917
15918**系统能力:** SystemCapability.Web.Webview.Core
15919
15920| 名称 | 类型 | 必填 | 说明 |
15921|------|------|------|------|
15922| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 |
15923| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 |
15924
15925## Preload<sup>12+<sup>
15926
15927播放器预加载媒体数据。
15928
15929**系统能力:** SystemCapability.Web.Webview.Core
15930
15931| 名称 | 值 | 说明 |
15932|------|----|------|
15933| NONE     | 0 | 不预加载。 |
15934| METADATA | 1 | 只预加载媒体的元数据。 |
15935| AUTO     | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 |
15936
15937## MediaInfo<sup>12+<sup>
15938
15939[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。
15940包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。
15941
15942**系统能力:** SystemCapability.Web.Webview.Core
15943
15944| 名称 | 类型 | 必填 | 说明 |
15945|------|------|------|------|
15946| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。|
15947| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 |
15948| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 |
15949| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 |
15950| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。 |
15951| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 |
15952| muted | boolean | 是 | 是否要求静音播放。 |
15953| posterUrl | string | 是 | 海报的地址。 |
15954| preload | [Preload](#preload12) | 是 | 是否需要预加载。 |
15955| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 |
15956| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 |
15957
15958
15959## CreateNativeMediaPlayerCallback<sup>12+<sup>
15960
15961type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge
15962
15963[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。
15964一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。
15965
15966**系统能力:** SystemCapability.Web.Webview.Core
15967
15968**参数:**
15969
15970| 参数名 | 类型 | 必填 | 说明 |
15971|--------|------|------|------|
15972| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 |
15973| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 |
15974
15975**返回值:**
15976
15977| 类型 | 说明 |
15978|------|------|
15979| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 |
15980
15981**示例:**
15982
15983完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15984
15985## OfflineResourceMap<sup>12+</sup>
15986
15987本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。
15988
15989**系统能力:** SystemCapability.Web.Webview.Core
15990
15991| 名称        | 类型   | 可读 | 可写 |说明                 |
15992| ----------- | ------ | -----|------|------------------- |
15993| urlList | Array\<string\> | 是   | 是   | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。      |
15994| resource | Uint8Array | 是   | 是   | 本地离线资源的内容。      |
15995| 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。      |
15996| type | [OfflineResourceType](#offlineresourcetype12) | 是   | 是   | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。      |
15997
15998## OfflineResourceType<sup>12+</sup>
15999
16000[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。
16001
16002**系统能力:** SystemCapability.Web.Webview.Core
16003
16004| 名称         | 值 | 说明                              |
16005| ------------ | -- |--------------------------------- |
16006| IMAGE  | 0 | 图片类型的资源。 |
16007| CSS       | 1 | CSS类型的资源。|
16008| CLASSIC_JS       | 2 | 通过<script src="" /\>标签加载的Javascript资源。|
16009| MODULE_JS      | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。|
16010
16011## WebResourceType<sup>12+</sup>
16012
16013资源请求的资源类型。
16014
16015**系统能力:** SystemCapability.Web.Webview.Core
16016
16017| 名称         | 值 | 说明                              |
16018| ------------ | -- |--------------------------------- |
16019| MAIN_FRAME | 0 | 顶层页面。 |
16020| SUB_FRAME | 1 | Frame或Iframe。 |
16021| STYLE_SHEET | 2 | CSS样式表。 |
16022| SCRIPT | 3 | 外部脚本。 |
16023| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 |
16024| FONT_RESOURCE | 5 | 字体。 |
16025| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 |
16026| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 |
16027| MEDIA | 8 | 媒体资源。 |
16028| WORKER | 9 | 专用工作线程的主资源。 |
16029| SHARED_WORKER | 10 | 共享工作线程的主资源。 |
16030| PREFETCH | 11 | 明确的预取请求。 |
16031| FAVICON | 12 | 网站图标。 |
16032| XHR | 13 | XMLHttpRequest。 |
16033| PING | 14 | <a ping\>/sendBeacon的Ping请求。 |
16034| SERVICE_WORKER | 15 | service worker的主资源。 |
16035| CSP_REPORT | 16 | 内容安全策略违规报告。 |
16036| PLUGIN_RESOURCE | 17 | 插件请求的资源。 |
16037| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 |
16038| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 |
16039
16040## RectEvent<sup>12+<sup>
16041
16042矩形定义。
16043
16044**系统能力:** SystemCapability.Web.Webview.Core
16045
16046| 名称           | 类型       | 可读 | 可写 | 说明                         |
16047| -------------- | --------- | ---- | ---- | ---------------------------- |
16048| x  | number   | 是   | 是   | 矩形区域左上角x坐标。    |
16049| y  | number   | 是   | 是   | 矩形区域左上角y坐标。    |
16050| width  | number   | 是   | 是   | 矩形的宽度。    |
16051| height  | number   | 是   | 是   | 矩形的高度。    |
16052
16053## BackForwardCacheSupportedFeatures<sup>12+<sup>
16054
16055选择性允许使用以下特性的页面进入前进后退缓存。完整示例代码参考[enableBackForwardCache](#enablebackforwardcache12)。
16056
16057**系统能力:** SystemCapability.Web.Webview.Core
16058
16059| 名称 | 类型 | 必填 | 说明 |
16060|------|------|------|------|
16061| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为同层渲染元素创建的原生控件的生命周期,避免造成泄漏。 |
16062| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为视频元素创建的原生控件的生命周期,避免造成泄漏。|
16063
16064### constructor<sup>12+</sup>
16065
16066constructor()
16067
16068BackForwardCacheSupportedFeatures的构造函数。
16069
16070**系统能力:** SystemCapability.Web.Webview.Core
16071
16072## BackForwardCacheOptions<sup>12+<sup>
16073
16074前进后退缓存相关设置对象,用来控制Web组件前进后退缓存相关选项。完整示例代码参考[BackForwardCacheOptions](#backforwardcacheoptions12)。
16075
16076**系统能力:** SystemCapability.Web.Webview.Core
16077
16078| 名称 | 类型 | 必填 | 说明 |
16079|------|------|------|------|
16080| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 |
16081| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。|
16082
16083### constructor<sup>12+</sup>
16084
16085constructor()
16086
16087BackForwardCacheOptions的构造函数。
16088
16089**系统能力:** SystemCapability.Web.Webview.Core
16090
16091## AdsBlockManager<sup>12+</sup>
16092
16093通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。
16094
16095### setAdsBlockRules<sup>12+</sup>
16096
16097static setAdsBlockRules(rulesFile: string, replace: boolean): void
16098
16099向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。
16100
16101> **说明:**
16102>
16103> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。
16104
16105**系统能力:** SystemCapability.Web.Webview.Core
16106
16107**参数:**
16108
16109| 参数名     | 类型   | 必填 | 说明                               |
16110| ---------- | ------ | ---- | -------------------------------- |
16111| rulesFile | string | 是   | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 |
16112| replace   | boolean | 是   | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 |
16113
16114**错误码:**
16115
16116以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16117
16118| 错误码ID | 错误信息                  |
16119| -------- | ----------------------- |
16120|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16121
16122**示例:**
16123
16124```ts
16125// xxx.ets
16126import { webview } from '@kit.ArkWeb';
16127import { picker, fileUri } from '@kit.CoreFileKit';
16128
16129// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中
16130@Entry
16131@Component
16132struct WebComponent {
16133  controller: webview.WebviewController = new webview.WebviewController();
16134
16135  build() {
16136    Row() {
16137      Flex() {
16138        Button({ type: ButtonType.Capsule }) {
16139          Text("setAdsBlockRules")
16140        }
16141        .onClick(() => {
16142          try {
16143            let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions();
16144            let documentPicker: ESObject = new picker.DocumentViewPicker();
16145            documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => {
16146              if (documentSelectResult && documentSelectResult.length > 0) {
16147                let fileRealPath = new fileUri.FileUri(documentSelectResult[0]);
16148                console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath);
16149                webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true);
16150              }
16151            })
16152          } catch (err) {
16153            console.error('DocumentViewPicker.select failed with err:' + err);
16154          }
16155        })
16156      }
16157    }
16158  }
16159}
16160```
16161
16162### addAdsBlockDisallowedList<sup>12+</sup>
16163
16164static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16165
16166向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。
16167
16168> **说明:**
16169>
16170> 此接口设置的域名不会持久化,应用重启需要重新设置。
16171>
16172> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。
16173
16174**系统能力:** SystemCapability.Web.Webview.Core
16175
16176**参数:**
16177
16178| 参数名     | 类型   | 必填 | 说明                               |
16179| ---------- | ------ | ---- | -------------------------------- |
16180| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16181
16182**错误码:**
16183
16184以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16185
16186| 错误码ID | 错误信息                  |
16187| -------- | ----------------------- |
16188|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16189
16190**示例:**
16191
16192```ts
16193// xxx.ets
16194import { webview } from '@kit.ArkWeb';
16195
16196// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16197@Entry
16198@Component
16199struct WebComponent {
16200  main_url: string = 'https://www.example.com';
16201  text_input_controller: TextInputController = new TextInputController();
16202  controller: webview.WebviewController = new webview.WebviewController();
16203  @State input_text: string = 'https://www.example.com';
16204
16205  build() {
16206    Column() {
16207      Row() {
16208        Flex() {
16209          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16210            .id("input_url")
16211            .height(40)
16212            .margin(5)
16213            .borderColor(Color.Blue)
16214            .onChange((value: string) => {
16215              this.input_text = value;
16216            })
16217
16218          Button({type: ButtonType.Capsule}) { Text("Go") }
16219          .onClick(() => {
16220            this.controller.loadUrl(this.input_text);
16221          })
16222
16223          Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") }
16224          .onClick(() => {
16225            let arrDomainSuffixes = new Array<string>();
16226            arrDomainSuffixes.push('example.com');
16227            arrDomainSuffixes.push('abcdefg.cn');
16228            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes);
16229          })
16230        }
16231      }
16232      Web({ src: this.main_url, controller: this.controller })
16233        .onControllerAttached(()=>{
16234          this.controller.enableAdsBlock(true);
16235        })
16236    }
16237  }
16238}
16239```
16240
16241### removeAdsBlockDisallowedList<sup>12+</sup>
16242
16243static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16244
16245从AdsBlockManager的DisallowedList中删除一组域名。
16246
16247> **说明:**
16248>
16249> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16250
16251**系统能力:** SystemCapability.Web.Webview.Core
16252
16253**参数:**
16254
16255| 参数名     | 类型   | 必填 | 说明                               |
16256| ---------- | ------ | ---- | -------------------------------- |
16257| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16258
16259**错误码:**
16260
16261以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16262
16263| 错误码ID | 错误信息                  |
16264| -------- | ----------------------- |
16265|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16266
16267**示例:**
16268
16269```ts
16270// xxx.ets
16271import { webview } from '@kit.ArkWeb';
16272
16273// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16274@Entry
16275@Component
16276struct WebComponent {
16277  main_url: string = 'https://www.example.com';
16278  text_input_controller: TextInputController = new TextInputController();
16279  controller: webview.WebviewController = new webview.WebviewController();
16280  @State input_text: string = 'https://www.example.com';
16281
16282  build() {
16283    Column() {
16284      Row() {
16285        Flex() {
16286          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16287            .id("input_url")
16288            .height(40)
16289            .margin(5)
16290            .borderColor(Color.Blue)
16291            .onChange((value: string) => {
16292              this.input_text = value;
16293            })
16294
16295          Button({type: ButtonType.Capsule}) { Text("Go") }
16296          .onClick(() => {
16297            this.controller.loadUrl(this.input_text);
16298          })
16299
16300          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") }
16301          .onClick(() => {
16302            let arrDomainSuffixes = new Array<string>();
16303            arrDomainSuffixes.push('example.com');
16304            arrDomainSuffixes.push('abcdefg.cn');
16305            webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes);
16306          })
16307        }
16308      }
16309      Web({ src: this.main_url, controller: this.controller })
16310        .onControllerAttached(()=>{
16311          this.controller.enableAdsBlock(true);
16312        })
16313    }
16314  }
16315}
16316```
16317
16318### clearAdsBlockDisallowedList<sup>12+</sup>
16319
16320static clearAdsBlockDisallowedList(): void
16321
16322清空AdsBlockManager的DisallowedList。
16323
16324**系统能力:** SystemCapability.Web.Webview.Core
16325
16326**示例:**
16327
16328```ts
16329// xxx.ets
16330import { webview } from '@kit.ArkWeb';
16331
16332@Entry
16333@Component
16334struct WebComponent {
16335  main_url: string = 'https://www.example.com';
16336  text_input_controller: TextInputController = new TextInputController();
16337  controller: webview.WebviewController = new webview.WebviewController();
16338  @State input_text: string = 'https://www.example.com';
16339
16340  build() {
16341    Column() {
16342      Row() {
16343        Flex() {
16344          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16345            .id("input_url")
16346            .height(40)
16347            .margin(5)
16348            .borderColor(Color.Blue)
16349            .onChange((value: string) => {
16350              this.input_text = value;
16351            })
16352
16353          Button({type: ButtonType.Capsule}) { Text("Go") }
16354          .onClick(() => {
16355            this.controller.loadUrl(this.input_text);
16356          })
16357
16358          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") }
16359          .onClick(() => {
16360            webview.AdsBlockManager.clearAdsBlockDisallowedList();
16361          })
16362        }
16363      }
16364      Web({ src: this.main_url, controller: this.controller })
16365        .onControllerAttached(()=>{
16366          this.controller.enableAdsBlock(true);
16367        })
16368    }
16369  }
16370}
16371```
16372
16373### addAdsBlockAllowedList<sup>12+</sup>
16374
16375static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16376
16377向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。
16378
16379> **说明:**
16380>
16381> 此接口设置的域名不会持久化,应用重启需要重新设置。
16382>
16383> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。
16384
16385**系统能力:** SystemCapability.Web.Webview.Core
16386
16387**参数:**
16388
16389| 参数名     | 类型   | 必填 | 说明                               |
16390| ---------- | ------ | ---- | -------------------------------- |
16391| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16392
16393**错误码:**
16394
16395以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16396
16397| 错误码ID | 错误信息                  |
16398| -------- | ----------------------- |
16399|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16400
16401**示例:**
16402
16403```ts
16404// xxx.ets
16405import { webview } from '@kit.ArkWeb';
16406
16407// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16408@Entry
16409@Component
16410struct WebComponent {
16411  main_url: string = 'https://www.example.com';
16412  text_input_controller: TextInputController = new TextInputController();
16413  controller: webview.WebviewController = new webview.WebviewController();
16414  @State input_text: string = 'https://www.example.com';
16415
16416  build() {
16417    Column() {
16418      Row() {
16419        Flex() {
16420          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16421            .id("input_url")
16422            .height(40)
16423            .margin(5)
16424            .borderColor(Color.Blue)
16425            .onChange((value: string) => {
16426              this.input_text = value;
16427            })
16428
16429          Button({type: ButtonType.Capsule}) { Text("Go") }
16430          .onClick(() => {
16431            this.controller.loadUrl(this.input_text);
16432          })
16433
16434          Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") }
16435          .onClick(() => {
16436            let arrDisallowDomainSuffixes = new Array<string>();
16437            arrDisallowDomainSuffixes.push('example.com');
16438            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes);
16439
16440            let arrAllowedDomainSuffixes = new Array<string>();
16441            arrAllowedDomainSuffixes.push('news.example.com');
16442            webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes);
16443          })
16444        }
16445      }
16446      Web({ src: this.main_url, controller: this.controller })
16447        .onControllerAttached(()=>{
16448          this.controller.enableAdsBlock(true)
16449        })
16450    }
16451  }
16452}
16453```
16454
16455### removeAdsBlockAllowedList<sup>12+</sup>
16456
16457static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16458
16459从AdsBlockManager的AllowedList中删除一组域名。
16460
16461> **说明:**
16462>
16463> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16464
16465**系统能力:** SystemCapability.Web.Webview.Core
16466
16467**参数:**
16468
16469| 参数名     | 类型   | 必填 | 说明                               |
16470| ---------- | ------ | ---- | -------------------------------- |
16471| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16472
16473**错误码:**
16474
16475以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16476
16477| 错误码ID | 错误信息                  |
16478| -------- | ----------------------- |
16479|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16480
16481**示例:**
16482
16483```ts
16484// xxx.ets
16485import { webview } from '@kit.ArkWeb';
16486
16487// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16488@Entry
16489@Component
16490struct WebComponent {
16491  main_url: string = 'https://www.example.com';
16492  text_input_controller: TextInputController = new TextInputController();
16493  controller: webview.WebviewController = new webview.WebviewController();
16494  @State input_text: string = 'https://www.example.com';
16495
16496  build() {
16497    Column() {
16498      Row() {
16499        Flex() {
16500          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16501            .id("input_url")
16502            .height(40)
16503            .margin(5)
16504            .borderColor(Color.Blue)
16505            .onChange((value: string) => {
16506              this.input_text = value;
16507            })
16508
16509          Button({type: ButtonType.Capsule}) { Text("Go") }
16510          .onClick(() => {
16511            this.controller.loadUrl(this.input_text);
16512          })
16513
16514          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") }
16515          .onClick(() => {
16516            let arrDomainSuffixes = new Array<string>();
16517            arrDomainSuffixes.push('example.com');
16518            arrDomainSuffixes.push('abcdefg.cn');
16519            webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes);
16520          })
16521        }
16522      }
16523      Web({ src: this.main_url, controller: this.controller })
16524        .onControllerAttached(()=>{
16525          this.controller.enableAdsBlock(true);
16526        })
16527    }
16528  }
16529}
16530```
16531
16532### clearAdsBlockAllowedList<sup>12+</sup>
16533
16534static clearAdsBlockAllowedList(): void
16535
16536清空AdsBlockManager的AllowedList。
16537
16538**系统能力:** SystemCapability.Web.Webview.Core
16539
16540**示例:**
16541
16542```ts
16543// xxx.ets
16544import { webview } from '@kit.ArkWeb';
16545
16546@Entry
16547@Component
16548struct WebComponent {
16549  main_url: string = 'https://www.example.com';
16550  text_input_controller: TextInputController = new TextInputController();
16551  controller: webview.WebviewController = new webview.WebviewController();
16552  @State input_text: string = 'https://www.example.com';
16553
16554
16555  build() {
16556    Column() {
16557      Row() {
16558        Flex() {
16559          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16560            .id("input_url")
16561            .height(40)
16562            .margin(5)
16563            .borderColor(Color.Blue)
16564            .onChange((value: string) => {
16565              this.input_text = value;
16566            })
16567
16568          Button({type: ButtonType.Capsule}) { Text("Go") }
16569          .onClick(() => {
16570            this.controller.loadUrl(this.input_text);
16571          })
16572
16573          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") }
16574          .onClick(() => {
16575            webview.AdsBlockManager.clearAdsBlockAllowedList();
16576          })
16577        }
16578      }
16579      Web({ src: this.main_url, controller: this.controller })
16580      .onControllerAttached(()=>{
16581        this.controller.enableAdsBlock(true);
16582      })
16583    }
16584  }
16585}
16586```
16587
16588## SnapshotInfo<sup>12+</sup>
16589
16590获取全量绘制结果入参。
16591
16592**系统能力:** SystemCapability.Web.Webview.Core
16593
16594| 名称 | 类型 |  必填 | 说明 |
16595|------|------|------|------|
16596| id | string | 否 | snapshot的id。|
16597| 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。)|
16598
16599## SnapshotResult<sup>12+</sup>
16600
16601全量绘制回调结果。
16602
16603**系统能力:** SystemCapability.Web.Webview.Core
16604
16605| 名称 | 类型 | 必填 |  说明 |
16606|------|------|--|---------|
16607| id | string | 否 | snapshot的id。|
16608| status | boolean | 否 |  snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。|
16609| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions)   | 否 | web绘制的真实尺寸,number类型,单位vp。|
16610| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。|
16611
16612> **说明:**
16613>
16614> 仅支持对渲染进程上的资源进行截图:静态图片和文本。
16615> 不支持动态视频,如果页面有视频则截图时会显示该视频的占位图片。
16616
16617## ScrollType<sup>12+</sup>
16618
16619Scroll滚动类型,用于[setScrollable](#setscrollable12)。
16620
16621**系统能力:** SystemCapability.Web.Webview.Core
16622
16623| 名称         | 值 | 说明                              |
16624| ------------ | -- |--------------------------------- |
16625| EVENT  | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。|
16626
16627## PressureLevel<sup>14+</sup>
16628
16629内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。
16630
16631**系统能力:** SystemCapability.Web.Webview.Core
16632
16633| 名称 | 值 | 说明 |
16634| ------------------------------- | - | ---------- |
16635| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 |
16636| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 |
16637
16638##  PdfConfiguration<sup>14+</sup>
16639
16640createPdf函数输入参数。
16641
16642> **说明:**
16643>
16644> 英寸与像素之间转换公式:像素 = 96 * 英寸。
16645
16646**系统能力:** SystemCapability.Web.Webview.Core
16647
16648| 名称                  | 类型    | 必填 | 说明                                                         |
16649| --------------------- | ------- | ---- | ------------------------------------------------------------ |
16650| width                 | number  | 是   | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。   |
16651| height                | number  | 是   | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。  |
16652| scale                 | number  | 否   | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 |
16653| marginTop             | number  | 是   | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16654| marginBottom          | number  | 是   | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16655| marginRight           | number  | 是   | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16656| marginLeft            | number  | 是   | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16657| shouldPrintBackground | boolean | 否   | 是否打印背景颜色。默认值:false。                            |
16658
16659## PdfData<sup>14+</sup>
16660
16661createPdf函数输出数据流类。
16662
16663> **说明:**
16664>
16665> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。
16666
16667### pdfArrayBuffer<sup>14+</sup>
16668
16669pdfArrayBuffer(): Uint8Array
16670
16671获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。
16672
16673**系统能力:** SystemCapability.Web.Webview.Core
16674
16675**返回值:**
16676
16677| 类型       | 说明     |
16678| ---------- | -------- |
16679| Uint8Array | 数据流。 |
16680
16681## ScrollOffset<sup>13+</sup>
16682
16683网页当前的滚动偏移量。
16684
16685**系统能力:** SystemCapability.Web.Webview.Core
16686
16687| 名称 | 类型   | 可读 | 可写 | 说明                                                         |
16688| ---- | ------ | ---- | ---- | ------------------------------------------------------------ |
16689| x    | number | 是   | 是   | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 |
16690| y    | number | 是   | 是   | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 |
16691