• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.web.webview (Webview)
2
3@ohos.web.webview提供web控制能力,[Web](ts-basic-components-web.md)组件提供网页显示的能力。
4
5> **说明:**
6>
7> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 示例效果请以真机运行为准,当前IDE预览器不支持。
10
11## 需要权限
12
13访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。
14
15## 导入模块
16
17```ts
18import { webview } from '@kit.ArkWeb';
19```
20
21## webview.once
22
23once(type: string, callback: Callback\<void\>): void
24
25订阅一次指定类型Web事件的回调,Web事件的类型目前仅支持"webInited",在Web引擎初始化完成时触发。
26
27当应用中开始加载第一个Web组件时,Web引擎初始化,且后续再在同一应用中继续加载其他Web组件时不会再触发once接口。当应用销毁最后一个Web组件时,若再加载第一个Web组件,应用重新进入Web引擎初始化流程。
28
29**系统能力:** SystemCapability.Web.Webview.Core
30
31**参数:**
32
33| 参数名  | 类型              | 必填 | 说明                  |
34| ------- | ---------------- | ---- | -------------------- |
35| type     | string          | 是   | Web事件的类型,目前支持:"webInited"(Web初始化完成)。      |
36| callback | Callback\<void\> | 是   | 所订阅的回调函数。 |
37
38**错误码:**
39
40以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
41
42| 错误码ID | 错误信息                  |
43| -------- | ----------------------- |
44| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
45
46**示例:**
47
48```ts
49// xxx.ets
50import { webview } from '@kit.ArkWeb';
51
52webview.once("webInited", () => {
53  console.log("configCookieSync");
54  webview.WebCookieManager.configCookieSync("https://www.example.com", "a=b");
55})
56
57@Entry
58@Component
59struct WebComponent {
60  controller: webview.WebviewController = new webview.WebviewController();
61
62  build() {
63    Column() {
64      Web({ src: 'www.example.com', controller: this.controller })
65    }
66  }
67}
68```
69
70## WebMessagePort
71
72通过WebMessagePort可以进行消息的发送以及接收,发送[WebMessageType](#webmessagetype10)/[WebMessage](#webmessage)类型消息给HTML5侧。
73
74### 属性
75
76**系统能力:** SystemCapability.Web.Webview.Core
77
78| 名称         | 类型   | 可读 | 可写 | 说明                                              |
79| ------------ | ------ | ---- | ---- | ------------------------------------------------|
80| isExtentionType<sup>10+</sup> | boolean | 是   | 是 | 创建WebMessagePort时是否指定使用扩展增强接口,[postMessageEventExt](#postmessageeventext10)、[onMessageEventExt](#onmessageeventext10),默认false不使用。   |
81
82### postMessageEvent
83
84postMessageEvent(message: WebMessage): void
85
86发送[WebMessage](#webmessage)类型消息给HTML5侧,必须先调用[onMessageEvent](#onmessageevent),否则会发送失败。完整示例代码参考[postMessage](#postmessage)。
87
88**系统能力:** SystemCapability.Web.Webview.Core
89
90**参数:**
91
92| 参数名  | 类型   | 必填 | 说明           |
93| ------- | ------ | ---- | :------------- |
94| message | [WebMessage](#webmessage) | 是   | 要发送的消息。 |
95
96**错误码:**
97
98以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
99
100| 错误码ID | 错误信息                              |
101| -------- | ------------------------------------- |
102| 17100010 | Failed to post messages through the port. |
103| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
104
105**示例:**
106
107```ts
108// xxx.ets
109import { webview } from '@kit.ArkWeb';
110import { BusinessError } from '@kit.BasicServicesKit';
111
112@Entry
113@Component
114struct WebComponent {
115  controller: webview.WebviewController = new webview.WebviewController();
116  ports: webview.WebMessagePort[] = [];
117
118  build() {
119    Column() {
120      Button('postMessageEvent')
121        .onClick(() => {
122          try {
123            this.ports = this.controller.createWebMessagePorts();
124            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
125            this.ports[1].postMessageEvent("post message from ets to html5");
126          } catch (error) {
127            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
128          }
129        })
130      Web({ src: 'www.example.com', controller: this.controller })
131    }
132  }
133}
134```
135
136### onMessageEvent
137
138onMessageEvent(callback: (result: WebMessage) => void): void
139
140在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessage](#webmessage)类型消息。完整示例代码参考[postMessage](#postmessage)。
141
142**系统能力:** SystemCapability.Web.Webview.Core
143
144**参数:**
145
146| 参数名   | 类型     | 必填 | 说明                 |
147| -------- | -------- | ---- | :------------------- |
148| callback | (result: [WebMessage](#webmessage)) => void | 是   | 接收到的消息。 |
149
150**错误码:**
151
152以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
153
154| 错误码ID | 错误信息                                        |
155| -------- | ----------------------------------------------- |
156| 17100006 | Failed to register a message event for the port.|
157| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.|
158
159**示例:**
160
161```ts
162// xxx.ets
163import { webview } from '@kit.ArkWeb';
164import { BusinessError } from '@kit.BasicServicesKit';
165
166@Entry
167@Component
168struct WebComponent {
169  controller: webview.WebviewController = new webview.WebviewController();
170  ports: webview.WebMessagePort[] = [];
171
172  build() {
173    Column() {
174      Button('onMessageEvent')
175        .onClick(() => {
176          try {
177            this.ports = this.controller.createWebMessagePorts();
178            this.ports[1].onMessageEvent((msg) => {
179              if (typeof (msg) == "string") {
180                console.log("received string message from html5, string is:" + msg);
181              } else if (typeof (msg) == "object") {
182                if (msg instanceof ArrayBuffer) {
183                  console.log("received arraybuffer from html5, length is:" + msg.byteLength);
184                } else {
185                  console.log("not support");
186                }
187              } else {
188                console.log("not support");
189              }
190            })
191          } catch (error) {
192            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
193          }
194        })
195      Web({ src: 'www.example.com', controller: this.controller })
196    }
197  }
198}
199```
200
201### postMessageEventExt<sup>10+</sup>
202
203postMessageEventExt(message: WebMessageExt): void
204
205发送[WebMessageType](#webmessagetype10)类型消息给HTML5侧,必须先调用[onMessageEventExt](#onmessageeventext10),否则会发送失败。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
206
207**系统能力:** SystemCapability.Web.Webview.Core
208
209**参数:**
210
211| 参数名  | 类型   | 必填 | 说明           |
212| ------- | ------ | ---- | :------------- |
213| message | [WebMessageExt](#webmessageext10) | 是   | 要发送的消息。 |
214
215**错误码:**
216
217以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
218
219| 错误码ID | 错误信息                              |
220| -------- | ------------------------------------- |
221| 17100010 | Failed to post messages through the port. |
222| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
223
224### onMessageEventExt<sup>10+</sup>
225
226onMessageEventExt(callback: (result: WebMessageExt) => void): void
227
228在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessageType](#webmessagetype10)类型消息。
229
230**系统能力:** SystemCapability.Web.Webview.Core
231
232**参数:**
233
234| 参数名   | 类型     | 必填 | 说明                 |
235| -------- | -------- | ---- | :------------------- |
236| callback | (result: [WebMessageExt](#webmessageext10)) => void | 是   | 接收到的消息。 |
237
238**错误码:**
239
240以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
241
242| 错误码ID | 错误信息                                        |
243| -------- | ----------------------------------------------- |
244| 17100006 | Failed to register a message event for the port. |
245| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
246
247**示例:**
248
249```ts
250// xxx.ets
251import { webview } from '@kit.ArkWeb';
252import { BusinessError } from '@kit.BasicServicesKit';
253
254class TestObj {
255  test(str: string): ArrayBuffer {
256    let buf = new ArrayBuffer(str.length);
257    let buff = new Uint8Array(buf);
258
259    for (let i = 0; i < str.length; i++) {
260      buff[i] = str.charCodeAt(i);
261    }
262    return buf;
263  }
264}
265
266// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。
267@Entry
268@Component
269struct WebComponent {
270  controller: webview.WebviewController = new webview.WebviewController();
271  ports: webview.WebMessagePort[] = [];
272  nativePort: webview.WebMessagePort | null = null;
273  @State msg1: string = "";
274  @State msg2: string = "";
275  message: webview.WebMessageExt = new webview.WebMessageExt();
276  @State testObjtest: TestObj = new TestObj();
277
278  build() {
279    Column() {
280      Text(this.msg1).fontSize(16)
281      Text(this.msg2).fontSize(16)
282      Button('SendToH5 setString').margin({
283        right: 800,
284      })
285        .onClick(() => {
286          // 使用本侧端口发送消息给HTML5
287          try {
288            console.log("In ArkTS side send true start");
289            if (this.nativePort) {
290              this.message.setType(1);
291              this.message.setString("helloFromEts");
292              this.nativePort.postMessageEventExt(this.message);
293            }
294          }
295          catch (error) {
296            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
297          }
298        })
299        Button('SendToH5 setNumber').margin({
300        top: 10,
301        right: 800,
302      })
303        .onClick(() => {
304          // 使用本侧端口发送消息给HTML5
305          try {
306            console.log("In ArkTS side send true start");
307            if (this.nativePort) {
308              this.message.setType(2);
309              this.message.setNumber(12345);
310              this.nativePort.postMessageEventExt(this.message);
311            }
312          }
313          catch (error) {
314            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
315          }
316        })
317      Button('SendToH5 setBoolean').margin({
318        top: -90,
319      })
320        .onClick(() => {
321          // 使用本侧端口发送消息给HTML5
322          try {
323            console.log("In ArkTS side send true start");
324            if (this.nativePort) {
325              this.message.setType(3);
326              this.message.setBoolean(true);
327              this.nativePort.postMessageEventExt(this.message);
328            }
329          }
330          catch (error) {
331            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
332          }
333        })
334      Button('SendToH5 setArrayBuffer').margin({
335        top: 10,
336      })
337        .onClick(() => {
338          // 使用本侧端口发送消息给HTML5
339          try {
340            console.log("In ArkTS side send true start");
341            if (this.nativePort) {
342              this.message.setType(4);
343              this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test"));
344              this.nativePort.postMessageEventExt(this.message);
345            }
346          }
347          catch (error) {
348            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
349          }
350        })
351      Button('SendToH5 setArray').margin({
352        top: -90,
353        left: 800,
354      })
355        .onClick(() => {
356          // 使用本侧端口发送消息给HTML5
357          try {
358            console.log("In ArkTS side send true start");
359            if (this.nativePort) {
360              this.message.setType(5);
361              this.message.setArray([1, 2, 3]);
362              this.nativePort.postMessageEventExt(this.message);
363            }
364          }
365          catch (error) {
366            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
367          }
368        })
369      Button('SendToH5 setError').margin({
370        top: 10,
371        left: 800,
372      })
373        .onClick(() => {
374          // 使用本侧端口发送消息给HTML5
375          try {
376            console.log("In ArkTS side send true start");
377            throw new ReferenceError("ReferenceError");
378          }
379          catch (error) {
380            if (this.nativePort) {
381              this.message.setType(6);
382              this.message.setError(error);
383              this.nativePort.postMessageEventExt(this.message);
384            }
385            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
386          }
387        })
388
389      Web({ src: $rawfile('index.html'), controller: this.controller })
390        .onPageEnd(() => {
391          console.log("In ArkTS side message onPageEnd init message channel");
392          // 1. 创建消息端口
393          this.ports = this.controller.createWebMessagePorts(true);
394          // 2. 发送端口1到HTML5
395          this.controller.postMessage("init_web_messageport", [this.ports[1]], "*");
396          // 3. 保存端口0到本地
397          this.nativePort = this.ports[0];
398          // 4. 设置回调函数
399          this.nativePort.onMessageEventExt((result) => {
400            console.log("In ArkTS side got message");
401            try {
402              let type = result.getType();
403              console.log("In ArkTS side getType:" + type);
404              switch (type) {
405                case webview.WebMessageType.STRING: {
406                  this.msg1 = "result type:" + typeof (result.getString());
407                  this.msg2 = "result getString:" + ((result.getString()));
408                  break;
409                }
410                case webview.WebMessageType.NUMBER: {
411                  this.msg1 = "result type:" + typeof (result.getNumber());
412                  this.msg2 = "result getNumber:" + ((result.getNumber()));
413                  break;
414                }
415                case webview.WebMessageType.BOOLEAN: {
416                  this.msg1 = "result type:" + typeof (result.getBoolean());
417                  this.msg2 = "result getBoolean:" + ((result.getBoolean()));
418                  break;
419                }
420                case webview.WebMessageType.ARRAY_BUFFER: {
421                  this.msg1 = "result type:" + typeof (result.getArrayBuffer());
422                  this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
423                  break;
424                }
425                case webview.WebMessageType.ARRAY: {
426                  this.msg1 = "result type:" + typeof (result.getArray());
427                  this.msg2 = "result getArray:" + result.getArray();
428                  break;
429                }
430                case webview.WebMessageType.ERROR: {
431                  this.msg1 = "result type:" + typeof (result.getError());
432                  this.msg2 = "result getError:" + result.getError();
433                  break;
434                }
435                default: {
436                  this.msg1 = "default break, type:" + type;
437                  break;
438                }
439              }
440            }
441            catch (error) {
442              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
443            }
444          });
445        })
446    }
447  }
448}
449```
450
451加载的html文件。
452```html
453<!--index.html-->
454<!DOCTYPE html>
455<html lang="en-gb">
456<head>
457    <title>WebView MessagePort Demo</title>
458</head>
459
460<body>
461<h1>Html5 Send and Receive Message</h1>
462<h3 id="msg">Receive string:</h3>
463<h3 id="msg2">Receive arraybuffer:</h3>
464<div style="font-size: 10pt; text-align: center;">
465    <input type="button" value="Send String" onclick="postStringToApp();" /><br/>
466</div>
467</body>
468<script src="index.js"></script>
469</html>
470```
471
472```js
473//index.js
474var h5Port;
475window.addEventListener('message', function(event) {
476    if (event.data == 'init_web_messageport') {
477        if(event.ports[0] != null) {
478            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
479            h5Port.onmessage = function(event) {
480                console.log("hwd In html got message");
481                // 2. 接收ets侧发送过来的消息.
482                var result = event.data;
483                console.log("In html got message, typeof: ", typeof(result));
484                console.log("In html got message, result: ", (result));
485                if (typeof(result) == "string") {
486                    console.log("In html got message, String: ", result);
487                    document.getElementById("msg").innerHTML  =  "String:" + result;
488                } else if (typeof(result) == "number") {
489                  console.log("In html side got message, number: ", result);
490                    document.getElementById("msg").innerHTML = "Number:" + result;
491                } else if (typeof(result) == "boolean") {
492                    console.log("In html side got message, boolean: ", result);
493                    document.getElementById("msg").innerHTML = "Boolean:" + result;
494                } else if (typeof(result) == "object") {
495                    if (result instanceof ArrayBuffer) {
496                        document.getElementById("msg2").innerHTML  =  "ArrayBuffer:" + result.byteLength;
497                        console.log("In html got message, byteLength: ", result.byteLength);
498                    } else if (result instanceof Error) {
499                        console.log("In html error message, err:" + (result));
500                        console.log("In html error message, typeof err:" + typeof(result));
501                        document.getElementById("msg2").innerHTML  =  "Error:" + result.name + ", msg:" + result.message;
502                    } else if (result instanceof Array) {
503                        console.log("In html got message, Array");
504                        console.log("In html got message, Array length:" + result.length);
505                        console.log("In html got message, Array[0]:" + (result[0]));
506                        console.log("In html got message, typeof Array[0]:" + typeof(result[0]));
507                        document.getElementById("msg2").innerHTML  =  "Array len:" + result.length + ", value:" + result;
508                    } else {
509                        console.log("In html got message, not any instance of support type");
510                        document.getElementById("msg").innerHTML  = "not any instance of support type";
511                    }
512                } else {
513                    console.log("In html got message, not support type");
514                    document.getElementById("msg").innerHTML  = "not support type";
515                }
516            }
517            h5Port.onmessageerror = (event) => {
518                console.error(`hwd In html Error receiving message: ${event}`);
519            };
520        }
521    }
522})
523
524// 使用h5Port往ets侧发送String类型的消息.
525function postStringToApp() {
526    if (h5Port) {
527        console.log("In html send string message");
528        h5Port.postMessage("hello");
529        console.log("In html send string message end");
530    } else {
531        console.error("In html h5port is null, please init first");
532    }
533}
534```
535
536### close
537
538close(): void
539
540不需要发送消息时关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。
541
542**系统能力:** SystemCapability.Web.Webview.Core
543
544**示例:**
545
546```ts
547// xxx.ets
548import { webview } from '@kit.ArkWeb';
549import { BusinessError } from '@kit.BasicServicesKit';
550
551@Entry
552@Component
553struct WebComponent {
554  controller: webview.WebviewController = new webview.WebviewController();
555  msgPort: webview.WebMessagePort[] = [];
556
557  build() {
558    Column() {
559      // 先使用createWebMessagePorts创建端口。
560      Button('createWebMessagePorts')
561        .onClick(() => {
562          try {
563            this.msgPort = this.controller.createWebMessagePorts();
564            console.log("createWebMessagePorts size:" + this.msgPort.length)
565          } catch (error) {
566            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
567          }
568        })
569      Button('close')
570        .onClick(() => {
571          try {
572            if (this.msgPort && this.msgPort.length == 2) {
573              this.msgPort[1].close();
574            } else {
575              console.error("msgPort is null, Please initialize first");
576            }
577          } catch (error) {
578            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
579          }
580        })
581      Web({ src: 'www.example.com', controller: this.controller })
582    }
583  }
584}
585```
586
587## WebviewController
588
589通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
590
591### constructor<sup>11+</sup>
592
593constructor(webTag?: string)
594
595用于创建 WebviewController 对象的构造函数。
596
597> **说明:**
598>
599> 不传参:new webview.WebviewController()表示构造函数为空,不使用C API时不需要传参。
600>
601> 传参且参数是合法字符串:new webview.WebviewController("xxx"),用于开发者区分多实例,并调用对应实例下的方法。
602>
603> 传入参数为空:new webview.WebviewController("")或new webview.WebviewController(undefined),该场景下参数无意义,无法区分多个实例,直接返回undefined,需要开发者判断返回值是否正常。
604
605**系统能力:** SystemCapability.Web.Webview.Core
606
607**参数:**
608
609| 参数名     | 类型   | 必填 | 说明                               |
610| ---------- | ------ | ---- | -------------------------------- |
611| webTag   | string | 否   | 指定了 Web 组件的名称。 |
612
613**示例:**
614
615```ts
616// xxx.ets
617import { webview } from '@kit.ArkWeb';
618import { BusinessError } from '@kit.BasicServicesKit';
619
620class WebObj {
621  constructor() {
622  }
623
624  webTest(): string {
625    console.log('Web test');
626    return "Web test";
627  }
628
629  webString(): void {
630    console.log('Web test toString');
631  }
632}
633
634@Entry
635@Component
636struct WebComponent {
637  controller: webview.WebviewController = new webview.WebviewController()
638  @State webTestObj: WebObj = new WebObj();
639
640  build() {
641    Column() {
642      Button('refresh')
643        .onClick(() => {
644          try {
645            this.controller.refresh();
646          } catch (error) {
647            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
648          }
649        })
650      Button('deleteJavaScriptRegister')
651        .onClick(() => {
652          try {
653            this.controller.deleteJavaScriptRegister("objTestName");
654          } catch (error) {
655            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
656          }
657        })
658      Web({ src: '', controller: this.controller })
659        .javaScriptAccess(true)
660        .onControllerAttached(() => {
661          this.controller.loadUrl($rawfile("index.html"));
662          this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
663        })
664    }
665  }
666}
667```
668
669加载的html文件。
670```html
671<!-- index.html -->
672<!DOCTYPE html>
673<html>
674    <meta charset="utf-8">
675    <body>
676      <button type="button" onclick="htmlTest()">Click Me!</button>
677      <p id="demo"></p>
678      <p id="webDemo"></p>
679    </body>
680    <script type="text/javascript">
681    function htmlTest() {
682      // This function call expects to return "Web test"
683      let webStr = objTestName.webTest();
684      document.getElementById("webDemo").innerHTML=webStr;
685      console.log('objTestName.webTest result:'+ webStr)
686    }
687</script>
688</html>
689```
690
691### initializeWebEngine
692
693static initializeWebEngine(): void
694
695在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。
696
697> **说明:**
698>
699> - initializeWebEngine不支持在异步线程中调用,否则会造成崩溃。
700> - initializeWebEngine全局生效,在整个APP生命周期中调用一次即可,不需要重复调用。
701
702**系统能力:** SystemCapability.Web.Webview.Core
703
704**示例:**
705
706本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。
707
708```ts
709// xxx.ets
710import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
711import { webview } from '@kit.ArkWeb';
712
713export default class EntryAbility extends UIAbility {
714  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
715    console.log("EntryAbility onCreate")
716    webview.WebviewController.initializeWebEngine()
717    console.log("EntryAbility onCreate done")
718  }
719}
720```
721
722### setHttpDns<sup>10+</sup>
723
724static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void
725
726设置Web组件是否使用HTTPDNS解析dns。
727
728**系统能力:** SystemCapability.Web.Webview.Core
729
730**参数:**
731
732| 参数名              | 类型    | 必填   |  说明 |
733| ------------------ | ------- | ---- | ------------- |
734| secureDnsMode         |   [SecureDnsMode](#securednsmode10)   | 是   | 使用HTTPDNS的模式。|
735| secureDnsConfig       | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 |
736
737**错误码:**
738
739以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
740
741| 错误码ID | 错误信息                  |
742| -------- | ----------------------- |
743| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
744
745**示例:**
746
747```ts
748// xxx.ets
749import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
750import { webview } from '@kit.ArkWeb';
751import { BusinessError } from '@kit.BasicServicesKit';
752
753export default class EntryAbility extends UIAbility {
754  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
755    console.log("EntryAbility onCreate")
756    try {
757      webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, "https://example1.test")
758    } catch (error) {
759      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
760    }
761
762    AppStorage.setOrCreate("abilityWant", want);
763    console.log("EntryAbility onCreate done")
764  }
765}
766```
767
768### setWebDebuggingAccess
769
770static setWebDebuggingAccess(webDebuggingAccess: boolean): void
771
772设置是否启用网页调试功能,默认不开启。详情请参考[DevTools工具](../../web/web-debugging-with-devtools.md)。
773
774安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。
775
776**系统能力:** SystemCapability.Web.Webview.Core
777
778**参数:**
779
780| 参数名              | 类型    | 必填   |  说明 |
781| ------------------ | ------- | ---- | ------------- |
782| webDebuggingAccess | boolean | 是   | 设置是否启用网页调试功能。|
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> **说明:**
1212>
1213> 在Web组件首次加载过程中调用[setCustomUserAgent](#setcustomuseragent10),可能会导致在当前存在多个历史节点的情况下,获取的accessBackForward实际为false,即没有后退节点。建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。
1214>
1215> 该现象是由于在Web组件首次加载时,调用[setCustomUserAgent](#setcustomuseragent10)会导致组件重新加载并保持初始历史节点的状态。随后新增的节点将替换初始历史节点,不会生成新的历史节点,导致accessBackward为false。
1216
1217**系统能力:** SystemCapability.Web.Webview.Core
1218
1219**返回值:**
1220
1221| 类型    | 说明                             |
1222| ------- | -------------------------------- |
1223| boolean | 可以后退返回true,否则返回false。 |
1224
1225**错误码:**
1226
1227以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1228
1229| 错误码ID | 错误信息                                                     |
1230| -------- | ------------------------------------------------------------ |
1231| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1232
1233**示例:**
1234
1235```ts
1236// xxx.ets
1237import { webview } from '@kit.ArkWeb';
1238import { BusinessError } from '@kit.BasicServicesKit';
1239
1240@Entry
1241@Component
1242struct WebComponent {
1243  controller: webview.WebviewController = new webview.WebviewController();
1244
1245  build() {
1246    Column() {
1247      Button('accessBackward')
1248        .onClick(() => {
1249          try {
1250            let result = this.controller.accessBackward();
1251            console.log('result:' + result);
1252          } catch (error) {
1253            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1254          }
1255        })
1256      Web({ src: 'www.example.com', controller: this.controller })
1257    }
1258  }
1259}
1260```
1261
1262### backward
1263
1264backward(): void
1265
1266按照历史栈,后退一个页面。一般结合accessBackward一起使用。
1267
1268**系统能力:** SystemCapability.Web.Webview.Core
1269
1270**错误码:**
1271
1272以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1273
1274| 错误码ID | 错误信息                                                     |
1275| -------- | ------------------------------------------------------------ |
1276| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1277
1278**示例:**
1279
1280```ts
1281// xxx.ets
1282import { webview } from '@kit.ArkWeb';
1283import { BusinessError } from '@kit.BasicServicesKit';
1284
1285@Entry
1286@Component
1287struct WebComponent {
1288  controller: webview.WebviewController = new webview.WebviewController();
1289
1290  build() {
1291    Column() {
1292      Button('backward')
1293        .onClick(() => {
1294          try {
1295            this.controller.backward();
1296          } catch (error) {
1297            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1298          }
1299        })
1300      Web({ src: 'www.example.com', controller: this.controller })
1301    }
1302  }
1303}
1304```
1305
1306### onActive
1307
1308onActive(): void
1309
1310调用此接口通知Web组件进入前台激活状态。
1311<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。
1312
1313**系统能力:** SystemCapability.Web.Webview.Core
1314
1315**错误码:**
1316
1317以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1318
1319| 错误码ID | 错误信息                                                     |
1320| -------- | ------------------------------------------------------------ |
1321| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1322
1323**示例:**
1324
1325```ts
1326// xxx.ets
1327import { webview } from '@kit.ArkWeb';
1328import { BusinessError } from '@kit.BasicServicesKit';
1329
1330@Entry
1331@Component
1332struct WebComponent {
1333  controller: webview.WebviewController = new webview.WebviewController();
1334
1335  build() {
1336    Column() {
1337      Button('onActive')
1338        .onClick(() => {
1339          try {
1340            this.controller.onActive();
1341          } catch (error) {
1342            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1343          }
1344        })
1345      Web({ src: 'www.example.com', controller: this.controller })
1346    }
1347  }
1348}
1349```
1350
1351### onInactive
1352
1353onInactive(): void
1354
1355调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。
1356
1357此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。
1358
1359**系统能力:** SystemCapability.Web.Webview.Core
1360
1361**错误码:**
1362
1363以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1364
1365| 错误码ID | 错误信息                                                     |
1366| -------- | ------------------------------------------------------------ |
1367| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1368
1369**示例:**
1370
1371```ts
1372// xxx.ets
1373import { webview } from '@kit.ArkWeb';
1374import { BusinessError } from '@kit.BasicServicesKit';
1375
1376@Entry
1377@Component
1378struct WebComponent {
1379  controller: webview.WebviewController = new webview.WebviewController();
1380
1381  build() {
1382    Column() {
1383      Button('onInactive')
1384        .onClick(() => {
1385          try {
1386            this.controller.onInactive();
1387          } catch (error) {
1388            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1389          }
1390        })
1391      Web({ src: 'www.example.com', controller: this.controller })
1392    }
1393  }
1394}
1395```
1396
1397### refresh
1398refresh(): void
1399
1400调用此接口通知Web组件刷新网页。
1401
1402**系统能力:** SystemCapability.Web.Webview.Core
1403
1404**错误码:**
1405
1406以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1407
1408| 错误码ID | 错误信息                                                     |
1409| -------- | ------------------------------------------------------------ |
1410| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1411
1412**示例:**
1413
1414```ts
1415// xxx.ets
1416import { webview } from '@kit.ArkWeb';
1417import { BusinessError } from '@kit.BasicServicesKit';
1418
1419@Entry
1420@Component
1421struct WebComponent {
1422  controller: webview.WebviewController = new webview.WebviewController();
1423
1424  build() {
1425    Column() {
1426      Button('refresh')
1427        .onClick(() => {
1428          try {
1429            this.controller.refresh();
1430          } catch (error) {
1431            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1432          }
1433        })
1434      Web({ src: 'www.example.com', controller: this.controller })
1435    }
1436  }
1437}
1438```
1439
1440### accessStep
1441
1442accessStep(step: number): boolean
1443
1444当前页面是否可前进或者后退给定的step步。
1445
1446**系统能力:** SystemCapability.Web.Webview.Core
1447
1448**参数:**
1449
1450| 参数名 | 类型 | 必填 | 说明                                   |
1451| ------ | -------- | ---- | ------------------------------------------ |
1452| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1453
1454**返回值:**
1455
1456| 类型    | 说明               |
1457| ------- | ------------------ |
1458| boolean | 页面是否前进或后退 |
1459
1460**错误码:**
1461
1462以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1463
1464| 错误码ID | 错误信息                                                     |
1465| -------- | ------------------------------------------------------------ |
1466| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1467| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1468
1469**示例:**
1470
1471```ts
1472// xxx.ets
1473import { webview } from '@kit.ArkWeb';
1474import { BusinessError } from '@kit.BasicServicesKit';
1475
1476@Entry
1477@Component
1478struct WebComponent {
1479  controller: webview.WebviewController = new webview.WebviewController();
1480  @State steps: number = 2;
1481
1482  build() {
1483    Column() {
1484      Button('accessStep')
1485        .onClick(() => {
1486          try {
1487            let result = this.controller.accessStep(this.steps);
1488            console.log('result:' + result);
1489          } catch (error) {
1490            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1491          }
1492        })
1493      Web({ src: 'www.example.com', controller: this.controller })
1494    }
1495  }
1496}
1497```
1498
1499### clearHistory
1500
1501clearHistory(): void
1502
1503删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。
1504
1505**系统能力:** SystemCapability.Web.Webview.Core
1506
1507**错误码:**
1508
1509以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1510
1511| 错误码ID | 错误信息                                                     |
1512| -------- | ------------------------------------------------------------ |
1513| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1514
1515**示例:**
1516
1517```ts
1518// xxx.ets
1519import { webview } from '@kit.ArkWeb';
1520import { BusinessError } from '@kit.BasicServicesKit';
1521
1522@Entry
1523@Component
1524struct WebComponent {
1525  controller: webview.WebviewController = new webview.WebviewController();
1526
1527  build() {
1528    Column() {
1529      Button('clearHistory')
1530        .onClick(() => {
1531          try {
1532            this.controller.clearHistory();
1533          } catch (error) {
1534            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1535          }
1536        })
1537      Web({ src: 'www.example.com', controller: this.controller })
1538    }
1539  }
1540}
1541```
1542
1543### getHitTest
1544
1545getHitTest(): WebHitTestType
1546
1547获取当前被点击区域的元素类型。
1548
1549**系统能力:** SystemCapability.Web.Webview.Core
1550
1551**返回值:**
1552
1553| 类型                                                         | 说明                   |
1554| ------------------------------------------------------------ | ---------------------- |
1555| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1556
1557**错误码:**
1558
1559以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1560
1561| 错误码ID | 错误信息                                                     |
1562| -------- | ------------------------------------------------------------ |
1563| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1564
1565**示例:**
1566
1567```ts
1568// xxx.ets
1569import { webview } from '@kit.ArkWeb';
1570import { BusinessError } from '@kit.BasicServicesKit';
1571
1572@Entry
1573@Component
1574struct WebComponent {
1575  controller: webview.WebviewController = new webview.WebviewController();
1576
1577  build() {
1578    Column() {
1579      Button('getHitTest')
1580        .onClick(() => {
1581          try {
1582            let hitTestType = this.controller.getHitTest();
1583            console.log("hitTestType: " + hitTestType);
1584          } catch (error) {
1585            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1586          }
1587        })
1588      Web({ src: 'www.example.com', controller: this.controller })
1589    }
1590  }
1591}
1592```
1593
1594### registerJavaScriptProxy
1595
1596registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void
1597
1598registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。
1599<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1600
1601> **说明:**
1602>
1603> - registerJavaScriptProxy需要和deleteJavaScriptRegister接口配合使用,防止内存泄漏。
1604> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。
1605> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。
1606> - 同一方法在同步与异步列表中重复注册,将默认异步调用。
1607> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。
1608
1609**系统能力:** SystemCapability.Web.Webview.Core
1610
1611**参数:**
1612
1613| 参数名     | 类型       | 必填 | 说明                                        |
1614| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1615| 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)。 |
1616| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1617| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的同步方法。                       |
1618| asyncMethodList<sup>12+</sup> | Array\<string> | 否   | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。  |
1619| permission<sup>12+</sup> | string | 否   | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。|
1620
1621**错误码:**
1622
1623以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1624
1625| 错误码ID | 错误信息                                                     |
1626| -------- | ------------------------------------------------------------ |
1627| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1628| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1629
1630**示例:**
1631
1632```ts
1633// xxx.ets
1634import { webview } from '@kit.ArkWeb';
1635import { BusinessError } from '@kit.BasicServicesKit';
1636
1637class TestObj {
1638  constructor() {
1639  }
1640
1641  test(testStr: string): string {
1642    console.log('Web Component str' + testStr);
1643    return testStr;
1644  }
1645
1646  toString(): void {
1647    console.log('Web Component toString');
1648  }
1649
1650  testNumber(testNum: number): number {
1651    console.log('Web Component number' + testNum);
1652    return testNum;
1653  }
1654
1655  asyncTestBool(testBol: boolean): void {
1656    console.log('Web Component boolean' + testBol);
1657  }
1658}
1659
1660class WebObj {
1661  constructor() {
1662  }
1663
1664  webTest(): string {
1665    console.log('Web test');
1666    return "Web test";
1667  }
1668
1669  webString(): void {
1670    console.log('Web test toString');
1671  }
1672}
1673
1674class AsyncObj {
1675  constructor() {
1676  }
1677
1678  asyncTest(): void {
1679    console.log('Async test');
1680  }
1681
1682  asyncString(testStr:string): void {
1683    console.log('Web async string' + testStr);
1684  }
1685}
1686
1687@Entry
1688@Component
1689struct Index {
1690  controller: webview.WebviewController = new webview.WebviewController();
1691  @State testObjtest: TestObj = new TestObj();
1692  @State webTestObj: WebObj = new WebObj();
1693  @State asyncTestObj: AsyncObj = new AsyncObj();
1694
1695  build() {
1696    Column() {
1697      Button('refresh')
1698        .onClick(() => {
1699          try {
1700            this.controller.refresh();
1701          } catch (error) {
1702            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1703          }
1704        })
1705      Button('Register JavaScript To Window')
1706        .onClick(() => {
1707          try {
1708            // 同时注册同步和异步函数
1709            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]);
1710            // 仅注册同步函数
1711            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
1712            // 仅注册异步函数
1713            this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]);
1714          } catch (error) {
1715            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1716          }
1717        })
1718      Button('deleteJavaScriptRegister')
1719        .onClick(() => {
1720          try {
1721            this.controller.deleteJavaScriptRegister("objName");
1722            this.controller.deleteJavaScriptRegister("objTestName");
1723            this.controller.deleteJavaScriptRegister("objAsyncName");
1724          } catch (error) {
1725            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1726          }
1727        })
1728      Web({ src: $rawfile('index.html'), controller: this.controller })
1729        .javaScriptAccess(true)
1730    }
1731  }
1732}
1733```
1734
1735加载的html文件。
1736```html
1737<!-- index.html -->
1738<!DOCTYPE html>
1739<html>
1740    <meta charset="utf-8">
1741    <body>
1742      <button type="button" onclick="htmlTest()">Click Me!</button>
1743      <p id="demo"></p>
1744      <p id="webDemo"></p>
1745      <p id="asyncDemo"></p>
1746    </body>
1747    <script type="text/javascript">
1748    function htmlTest() {
1749      // This function call expects to return "ArkUI Web Component"
1750      let str=objName.test("webtest data");
1751      objName.testNumber(1);
1752      objName.asyncTestBool(true);
1753      document.getElementById("demo").innerHTML=str;
1754      console.log('objName.test result:'+ str)
1755
1756      // This function call expects to return "Web test"
1757      let webStr = objTestName.webTest();
1758      document.getElementById("webDemo").innerHTML=webStr;
1759      console.log('objTestName.webTest result:'+ webStr)
1760
1761      objAsyncName.asyncTest();
1762      objAsyncName.asyncString("async test data");
1763    }
1764</script>
1765</html>
1766```
1767更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。
1768
1769### runJavaScript
1770
1771runJavaScript(script: string, callback : AsyncCallback\<string>): void
1772
1773异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1774
1775> **说明:**
1776>
1777> 离屏组件不会触发runJavaScript接口。
1778
1779**系统能力:** SystemCapability.Web.Webview.Core
1780
1781**参数:**
1782
1783| 参数名   | 类型                 | 必填 | 说明                         |
1784| -------- | -------------------- | ---- | ---------------------------- |
1785| script   | string                   | 是   | JavaScript脚本。                                             |
1786| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1787
1788**错误码:**
1789
1790以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1791
1792| 错误码ID | 错误信息                                                     |
1793| -------- | ------------------------------------------------------------ |
1794| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1795| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1796
1797**示例:**
1798
1799```ts
1800import { webview } from '@kit.ArkWeb';
1801import { BusinessError } from '@kit.BasicServicesKit';
1802
1803@Entry
1804@Component
1805struct WebComponent {
1806  controller: webview.WebviewController = new webview.WebviewController();
1807  @State webResult: string = '';
1808
1809  build() {
1810    Column() {
1811      Text(this.webResult).fontSize(20)
1812      Web({ src: $rawfile('index.html'), controller: this.controller })
1813        .javaScriptAccess(true)
1814        .onPageEnd(e => {
1815          try {
1816            this.controller.runJavaScript(
1817              'test()',
1818              (error, result) => {
1819                if (error) {
1820                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1821                  return;
1822                }
1823                if (result) {
1824                  this.webResult = result;
1825                  console.info(`The test() return value is: ${result}`);
1826                }
1827              });
1828            if (e) {
1829              console.info('url: ', e.url);
1830            }
1831          } catch (error) {
1832            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1833          }
1834        })
1835    }
1836  }
1837}
1838```
1839
1840加载的html文件。
1841```html
1842<!-- index.html -->
1843<!DOCTYPE html>
1844<html>
1845  <meta charset="utf-8">
1846  <body>
1847      Hello world!
1848  </body>
1849  <script type="text/javascript">
1850  function test() {
1851      console.log('Ark WebComponent')
1852      return "This value is from index.html"
1853  }
1854  </script>
1855</html>
1856```
1857
1858### runJavaScript
1859
1860runJavaScript(script: string): Promise\<string>
1861
1862异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1863
1864**系统能力:** SystemCapability.Web.Webview.Core
1865
1866**参数:**
1867
1868| 参数名 | 类型 | 必填 | 说明         |
1869| ------ | -------- | ---- | ---------------- |
1870| script | string   | 是   | JavaScript脚本。 |
1871
1872**返回值:**
1873
1874| 类型            | 说明                                                |
1875| --------------- | --------------------------------------------------- |
1876| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1877
1878**错误码:**
1879
1880以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1881
1882| 错误码ID | 错误信息                                                     |
1883| -------- | ------------------------------------------------------------ |
1884| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1885| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1886
1887**示例:**
1888
1889```ts
1890// xxx.ets
1891import { webview } from '@kit.ArkWeb';
1892import { BusinessError } from '@kit.BasicServicesKit';
1893
1894@Entry
1895@Component
1896struct WebComponent {
1897  controller: webview.WebviewController = new webview.WebviewController();
1898
1899  build() {
1900    Column() {
1901      Web({ src: $rawfile('index.html'), controller: this.controller })
1902        .javaScriptAccess(true)
1903        .onPageEnd(e => {
1904          try {
1905            this.controller.runJavaScript('test()')
1906              .then((result) => {
1907                console.log('result: ' + result);
1908              })
1909              .catch((error: BusinessError) => {
1910                console.error("error: " + error);
1911              })
1912            if (e) {
1913              console.info('url: ', e.url);
1914            }
1915          } catch (error) {
1916            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1917          }
1918        })
1919    }
1920  }
1921}
1922```
1923
1924加载的html文件。
1925```html
1926<!-- index.html -->
1927<!DOCTYPE html>
1928<html>
1929  <meta charset="utf-8">
1930  <body>
1931      Hello world!
1932  </body>
1933  <script type="text/javascript">
1934  function test() {
1935      console.log('Ark WebComponent')
1936      return "This value is from index.html"
1937  }
1938  </script>
1939</html>
1940```
1941
1942### runJavaScriptExt<sup>10+</sup>
1943
1944runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void
1945
1946异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1947
1948**系统能力:** SystemCapability.Web.Webview.Core
1949
1950**参数:**
1951
1952| 参数名   | 类型                 | 必填 | 说明                         |
1953| -------- | -------------------- | ---- | ---------------------------- |
1954| script   | string \| ArrayBuffer<sup>12+</sup>         | 是   | JavaScript脚本。 |
1955| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1956
1957**错误码:**
1958
1959以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1960
1961| 错误码ID | 错误信息                                                     |
1962| -------- | ------------------------------------------------------------ |
1963| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1964| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1965
1966**示例:**
1967
1968```ts
1969import { webview } from '@kit.ArkWeb';
1970import { BusinessError } from '@kit.BasicServicesKit';
1971
1972@Entry
1973@Component
1974struct WebComponent {
1975  controller: webview.WebviewController = new webview.WebviewController();
1976  @State msg1: string = '';
1977  @State msg2: string = '';
1978
1979  build() {
1980    Column() {
1981      Text(this.msg1).fontSize(20)
1982      Text(this.msg2).fontSize(20)
1983      Web({ src: $rawfile('index.html'), controller: this.controller })
1984        .javaScriptAccess(true)
1985        .onPageEnd(e => {
1986          try {
1987            this.controller.runJavaScriptExt(
1988              'test()',
1989              (error, result) => {
1990                if (error) {
1991                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
1992                  return;
1993                }
1994                if (result) {
1995                  try {
1996                    let type = result.getType();
1997                    switch (type) {
1998                      case webview.JsMessageType.STRING: {
1999                        this.msg1 = "result type:" + typeof (result.getString());
2000                        this.msg2 = "result getString:" + ((result.getString()));
2001                        break;
2002                      }
2003                      case webview.JsMessageType.NUMBER: {
2004                        this.msg1 = "result type:" + typeof (result.getNumber());
2005                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2006                        break;
2007                      }
2008                      case webview.JsMessageType.BOOLEAN: {
2009                        this.msg1 = "result type:" + typeof (result.getBoolean());
2010                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2011                        break;
2012                      }
2013                      case webview.JsMessageType.ARRAY_BUFFER: {
2014                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2015                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2016                        break;
2017                      }
2018                      case webview.JsMessageType.ARRAY: {
2019                        this.msg1 = "result type:" + typeof (result.getArray());
2020                        this.msg2 = "result getArray:" + result.getArray();
2021                        break;
2022                      }
2023                      default: {
2024                        this.msg1 = "default break, type:" + type;
2025                        break;
2026                      }
2027                    }
2028                  }
2029                  catch (resError) {
2030                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2031                  }
2032                }
2033              });
2034            if (e) {
2035              console.info('url: ', e.url);
2036            }
2037          } catch (error) {
2038            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2039          }
2040        })
2041    }
2042  }
2043}
2044```
2045
2046```ts
2047// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2048import { webview } from '@kit.ArkWeb';
2049import { BusinessError } from '@kit.BasicServicesKit';
2050import { fileIo } from '@kit.CoreFileKit';
2051import { common } from '@kit.AbilityKit';
2052
2053@Entry
2054@Component
2055struct WebComponent {
2056  controller: webview.WebviewController = new webview.WebviewController();
2057  @State msg1: string = ''
2058  @State msg2: string = ''
2059
2060  build() {
2061    Column() {
2062      Text(this.msg1).fontSize(20)
2063      Text(this.msg2).fontSize(20)
2064      Button('runJavaScriptExt')
2065        .onClick(() => {
2066          try {
2067            let context = getContext(this) as common.UIAbilityContext;
2068            let filePath = context.filesDir + 'test.txt';
2069            // 新建并打开文件
2070            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2071            // 写入一段内容至文件
2072            fileIo.writeSync(file.fd, "test()");
2073            // 从文件中读取内容
2074            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2075            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2076            // 关闭文件
2077            fileIo.closeSync(file);
2078            this.controller.runJavaScriptExt(
2079              arrayBuffer,
2080              (error, result) => {
2081                if (error) {
2082                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
2083                  return;
2084                }
2085                if (result) {
2086                  try {
2087                    let type = result.getType();
2088                    switch (type) {
2089                      case webview.JsMessageType.STRING: {
2090                        this.msg1 = "result type:" + typeof (result.getString());
2091                        this.msg2 = "result getString:" + ((result.getString()));
2092                        break;
2093                      }
2094                      case webview.JsMessageType.NUMBER: {
2095                        this.msg1 = "result type:" + typeof (result.getNumber());
2096                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2097                        break;
2098                      }
2099                      case webview.JsMessageType.BOOLEAN: {
2100                        this.msg1 = "result type:" + typeof (result.getBoolean());
2101                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2102                        break;
2103                      }
2104                      case webview.JsMessageType.ARRAY_BUFFER: {
2105                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2106                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2107                        break;
2108                      }
2109                      case webview.JsMessageType.ARRAY: {
2110                        this.msg1 = "result type:" + typeof (result.getArray());
2111                        this.msg2 = "result getArray:" + result.getArray();
2112                        break;
2113                      }
2114                      default: {
2115                        this.msg1 = "default break, type:" + type;
2116                        break;
2117                      }
2118                    }
2119                  }
2120                  catch (resError) {
2121                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2122                  }
2123                }
2124              });
2125          } catch (error) {
2126            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2127          }
2128        })
2129      Web({ src: $rawfile('index.html'), controller: this.controller })
2130        .javaScriptAccess(true)
2131    }
2132  }
2133}
2134```
2135
2136加载的html文件。
2137```html
2138<!-- index.html -->
2139<!DOCTYPE html>
2140<html lang="en-gb">
2141<body>
2142<h1>run JavaScript Ext demo</h1>
2143</body>
2144<script type="text/javascript">
2145function test() {
2146  return "hello, world";
2147}
2148</script>
2149</html>
2150```
2151
2152### runJavaScriptExt<sup>10+</sup>
2153
2154runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt>
2155
2156异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
2157
2158**系统能力:** SystemCapability.Web.Webview.Core
2159
2160**参数:**
2161
2162| 参数名 | 类型 | 必填 | 说明         |
2163| ------ | -------- | ---- | ---------------- |
2164| script | string \| ArrayBuffer<sup>12+</sup> | 是   | JavaScript脚本。 |
2165
2166**返回值:**
2167
2168| 类型            | 说明                                                |
2169| --------------- | --------------------------------------------------- |
2170| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
2171
2172**错误码:**
2173
2174以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2175
2176| 错误码ID | 错误信息                                                     |
2177| -------- | ------------------------------------------------------------ |
2178| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2179| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2180
2181**示例:**
2182
2183```ts
2184// xxx.ets
2185import { webview } from '@kit.ArkWeb';
2186import { BusinessError } from '@kit.BasicServicesKit';
2187
2188@Entry
2189@Component
2190struct WebComponent {
2191  controller: webview.WebviewController = new webview.WebviewController();
2192  @State webResult: string = '';
2193  @State msg1: string = '';
2194  @State msg2: string = '';
2195
2196  build() {
2197    Column() {
2198      Text(this.webResult).fontSize(20)
2199      Text(this.msg1).fontSize(20)
2200      Text(this.msg2).fontSize(20)
2201      Web({ src: $rawfile('index.html'), controller: this.controller })
2202        .javaScriptAccess(true)
2203        .onPageEnd(() => {
2204          this.controller.runJavaScriptExt('test()')
2205            .then((result) => {
2206              try {
2207                let type = result.getType();
2208                switch (type) {
2209                  case webview.JsMessageType.STRING: {
2210                    this.msg1 = "result type:" + typeof (result.getString());
2211                    this.msg2 = "result getString:" + ((result.getString()));
2212                    break;
2213                  }
2214                  case webview.JsMessageType.NUMBER: {
2215                    this.msg1 = "result type:" + typeof (result.getNumber());
2216                    this.msg2 = "result getNumber:" + ((result.getNumber()));
2217                    break;
2218                  }
2219                  case webview.JsMessageType.BOOLEAN: {
2220                    this.msg1 = "result type:" + typeof (result.getBoolean());
2221                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2222                    break;
2223                  }
2224                  case webview.JsMessageType.ARRAY_BUFFER: {
2225                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2226                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2227                    break;
2228                  }
2229                  case webview.JsMessageType.ARRAY: {
2230                    this.msg1 = "result type:" + typeof (result.getArray());
2231                    this.msg2 = "result getArray:" + result.getArray();
2232                    break;
2233                  }
2234                  default: {
2235                    this.msg1 = "default break, type:" + type;
2236                    break;
2237                  }
2238                }
2239              }
2240              catch (resError) {
2241                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2242              }
2243            }).catch((error: BusinessError) => {
2244            console.error("error: " + error);
2245          })
2246        })
2247    }
2248  }
2249}
2250```
2251
2252```ts
2253// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2254import { webview } from '@kit.ArkWeb';
2255import { BusinessError } from '@kit.BasicServicesKit';
2256import { fileIo } from '@kit.CoreFileKit';
2257import { common } from '@kit.AbilityKit';
2258
2259@Entry
2260@Component
2261struct WebComponent {
2262  controller: webview.WebviewController = new webview.WebviewController();
2263  @State msg1: string = '';
2264  @State msg2: string = '';
2265
2266  build() {
2267    Column() {
2268      Text(this.msg1).fontSize(20)
2269      Text(this.msg2).fontSize(20)
2270      Button('runJavaScriptExt')
2271        .onClick(() => {
2272          try {
2273            let context = getContext(this) as common.UIAbilityContext;
2274            let filePath = context.filesDir + 'test.txt';
2275            // 新建并打开文件
2276            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2277            // 写入一段内容至文件
2278            fileIo.writeSync(file.fd, "test()");
2279            // 从文件中读取内容
2280            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2281            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2282            // 关闭文件
2283            fileIo.closeSync(file);
2284            this.controller.runJavaScriptExt(arrayBuffer)
2285              .then((result) => {
2286                try {
2287                  let type = result.getType();
2288                  switch (type) {
2289                    case webview.JsMessageType.STRING: {
2290                      this.msg1 = "result type:" + typeof (result.getString());
2291                      this.msg2 = "result getString:" + ((result.getString()));
2292                      break;
2293                    }
2294                    case webview.JsMessageType.NUMBER: {
2295                      this.msg1 = "result type:" + typeof (result.getNumber());
2296                      this.msg2 = "result getNumber:" + ((result.getNumber()));
2297                      break;
2298                    }
2299                    case webview.JsMessageType.BOOLEAN: {
2300                      this.msg1 = "result type:" + typeof (result.getBoolean());
2301                      this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2302                      break;
2303                    }
2304                    case webview.JsMessageType.ARRAY_BUFFER: {
2305                      this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2306                      this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2307                      break;
2308                    }
2309                    case webview.JsMessageType.ARRAY: {
2310                      this.msg1 = "result type:" + typeof (result.getArray());
2311                      this.msg2 = "result getArray:" + result.getArray();
2312                      break;
2313                    }
2314                    default: {
2315                      this.msg1 = "default break, type:" + type;
2316                      break;
2317                    }
2318                  }
2319                }
2320                catch (resError) {
2321                  console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2322                }
2323              })
2324              .catch((error: BusinessError) => {
2325                console.error("error: " + error);
2326              })
2327          } catch (error) {
2328            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2329          }
2330        })
2331      Web({ src: $rawfile('index.html'), controller: this.controller })
2332        .javaScriptAccess(true)
2333    }
2334  }
2335}
2336```
2337
2338加载的html文件。
2339```html
2340<!-- index.html -->
2341<!DOCTYPE html>
2342<html lang="en-gb">
2343<body>
2344<h1>run JavaScript Ext demo</h1>
2345</body>
2346<script type="text/javascript">
2347function test() {
2348  return "hello, world";
2349}
2350</script>
2351</html>
2352```
2353
2354### deleteJavaScriptRegister
2355
2356deleteJavaScriptRegister(name: string): void
2357
2358删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
2359
2360**系统能力:** SystemCapability.Web.Webview.Core
2361
2362**参数:**
2363
2364| 参数名 | 类型 | 必填 | 说明  |
2365| ------ | -------- | ---- | ---- |
2366| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
2367
2368**错误码:**
2369
2370以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2371
2372| 错误码ID | 错误信息                                                     |
2373| -------- | ------------------------------------------------------------ |
2374| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2375| 17100008 | Failed to delete JavaScriptProxy because it does not exist.                               |
2376| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2377
2378**示例:**
2379
2380```ts
2381// xxx.ets
2382import { webview } from '@kit.ArkWeb';
2383import { BusinessError } from '@kit.BasicServicesKit';
2384
2385class TestObj {
2386  constructor() {
2387  }
2388
2389  test(): string {
2390    return "ArkUI Web Component";
2391  }
2392
2393  toString(): void {
2394    console.log('Web Component toString');
2395  }
2396}
2397
2398@Entry
2399@Component
2400struct WebComponent {
2401  controller: webview.WebviewController = new webview.WebviewController();
2402  @State testObjtest: TestObj = new TestObj();
2403  @State name: string = 'objName';
2404  build() {
2405    Column() {
2406      Button('refresh')
2407        .onClick(() => {
2408          try {
2409            this.controller.refresh();
2410          } catch (error) {
2411            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2412          }
2413        })
2414      Button('Register JavaScript To Window')
2415        .onClick(() => {
2416          try {
2417            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
2418          } catch (error) {
2419            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2420          }
2421        })
2422      Button('deleteJavaScriptRegister')
2423        .onClick(() => {
2424          try {
2425            this.controller.deleteJavaScriptRegister(this.name);
2426          } catch (error) {
2427            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2428          }
2429        })
2430      Web({ src: $rawfile('index.html'), controller: this.controller })
2431        .javaScriptAccess(true)
2432    }
2433  }
2434}
2435```
2436
2437加载的html文件。
2438```html
2439<!-- index.html -->
2440<!DOCTYPE html>
2441<html>
2442    <meta charset="utf-8">
2443    <body>
2444      <button type="button" onclick="htmlTest()">Click Me!</button>
2445      <p id="demo"></p>
2446    </body>
2447    <script type="text/javascript">
2448    function htmlTest() {
2449      let str=objName.test();
2450      document.getElementById("demo").innerHTML=str;
2451      console.log('objName.test result:'+ str)
2452    }
2453</script>
2454</html>
2455```
2456
2457### zoom
2458
2459zoom(factor: number): void
2460
2461调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。
2462
2463**系统能力:** SystemCapability.Web.Webview.Core
2464
2465**参数:**
2466
2467| 参数名 | 类型 | 必填 | 说明 |
2468| ------ | -------- | ---- | ------------------------------------------------------------ |
2469| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 |
2470
2471**错误码:**
2472
2473以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2474
2475| 错误码ID | 错误信息                                                     |
2476| -------- | ------------------------------------------------------------ |
2477| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2478| 17100004 | Function not enabled.                                         |
2479| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2480
2481**示例:**
2482
2483```ts
2484// xxx.ets
2485import { webview } from '@kit.ArkWeb';
2486import { BusinessError } from '@kit.BasicServicesKit';
2487
2488@Entry
2489@Component
2490struct WebComponent {
2491  controller: webview.WebviewController = new webview.WebviewController();
2492  @State factor: number = 1;
2493
2494  build() {
2495    Column() {
2496      Button('zoom')
2497        .onClick(() => {
2498          try {
2499            this.controller.zoom(this.factor);
2500          } catch (error) {
2501            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2502          }
2503        })
2504      Web({ src: 'www.example.com', controller: this.controller })
2505        .zoomAccess(true)
2506    }
2507  }
2508}
2509```
2510
2511### searchAllAsync
2512
2513searchAllAsync(searchString: string): void
2514
2515异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。
2516
2517**系统能力:** SystemCapability.Web.Webview.Core
2518
2519**参数:**
2520
2521| 参数名       | 类型 | 必填 | 说明       |
2522| ------------ | -------- | ---- | -------------- |
2523| searchString | string   | 是   | 查找的关键字。 |
2524
2525**错误码:**
2526
2527以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2528
2529| 错误码ID | 错误信息                                                     |
2530| -------- | ------------------------------------------------------------ |
2531| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2532| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2533
2534**示例:**
2535
2536```ts
2537// xxx.ets
2538import { webview } from '@kit.ArkWeb';
2539import { BusinessError } from '@kit.BasicServicesKit';
2540
2541@Entry
2542@Component
2543struct WebComponent {
2544  controller: webview.WebviewController = new webview.WebviewController();
2545  @State searchString: string = "Hello World";
2546
2547  build() {
2548    Column() {
2549      Button('searchString')
2550        .onClick(() => {
2551          try {
2552            this.controller.searchAllAsync(this.searchString);
2553          } catch (error) {
2554            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2555          }
2556        })
2557      Web({ src: $rawfile('index.html'), controller: this.controller })
2558        .onSearchResultReceive(ret => {
2559          if (ret) {
2560            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2561              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2562          }
2563        })
2564    }
2565  }
2566}
2567```
2568
2569加载的html文件。
2570```html
2571<!-- index.html -->
2572<!DOCTYPE html>
2573<html>
2574  <body>
2575    <p>Hello World Highlight Hello World</p>
2576  </body>
2577</html>
2578```
2579
2580### clearMatches
2581
2582clearMatches(): void
2583
2584清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2585
2586**系统能力:** SystemCapability.Web.Webview.Core
2587
2588**错误码:**
2589
2590以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2591
2592| 错误码ID | 错误信息                                                     |
2593| -------- | ------------------------------------------------------------ |
2594| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2595
2596**示例:**
2597
2598```ts
2599// xxx.ets
2600import { webview } from '@kit.ArkWeb';
2601import { BusinessError } from '@kit.BasicServicesKit';
2602
2603@Entry
2604@Component
2605struct WebComponent {
2606  controller: webview.WebviewController = new webview.WebviewController();
2607
2608  build() {
2609    Column() {
2610      Button('clearMatches')
2611        .onClick(() => {
2612          try {
2613            this.controller.clearMatches();
2614          } catch (error) {
2615            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2616          }
2617        })
2618      Web({ src: $rawfile('index.html'), controller: this.controller })
2619    }
2620  }
2621}
2622```
2623
2624加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2625
2626### searchNext
2627
2628searchNext(forward: boolean): void
2629
2630滚动到下一个匹配的查找结果并高亮。
2631
2632**系统能力:** SystemCapability.Web.Webview.Core
2633
2634**参数:**
2635
2636| 参数名  | 类型 | 必填 | 说明               |
2637| ------- | -------- | ---- | ---------------------- |
2638| forward | boolean  | 是   | 从前向后或者逆向查找。 |
2639
2640**错误码:**
2641
2642以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2643
2644| 错误码ID | 错误信息                                                     |
2645| -------- | ------------------------------------------------------------ |
2646| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2647| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2648
2649**示例:**
2650
2651```ts
2652// xxx.ets
2653import { webview } from '@kit.ArkWeb';
2654import { BusinessError } from '@kit.BasicServicesKit';
2655
2656@Entry
2657@Component
2658struct WebComponent {
2659  controller: webview.WebviewController = new webview.WebviewController();
2660
2661  build() {
2662    Column() {
2663      Button('searchNext')
2664        .onClick(() => {
2665          try {
2666            this.controller.searchNext(true);
2667          } catch (error) {
2668            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2669          }
2670        })
2671      Web({ src: $rawfile('index.html'), controller: this.controller })
2672    }
2673  }
2674}
2675```
2676
2677加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2678
2679### clearSslCache
2680
2681clearSslCache(): void
2682
2683清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2684
2685**系统能力:** SystemCapability.Web.Webview.Core
2686
2687**错误码:**
2688
2689以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2690
2691| 错误码ID | 错误信息                                                     |
2692| -------- | ------------------------------------------------------------ |
2693| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2694
2695**示例:**
2696
2697```ts
2698// xxx.ets
2699import { webview } from '@kit.ArkWeb';
2700import { BusinessError } from '@kit.BasicServicesKit';
2701
2702@Entry
2703@Component
2704struct WebComponent {
2705  controller: webview.WebviewController = new webview.WebviewController();
2706
2707  build() {
2708    Column() {
2709      Button('clearSslCache')
2710        .onClick(() => {
2711          try {
2712            this.controller.clearSslCache();
2713          } catch (error) {
2714            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2715          }
2716        })
2717      Web({ src: 'www.example.com', controller: this.controller })
2718    }
2719  }
2720}
2721```
2722
2723### clearClientAuthenticationCache
2724
2725clearClientAuthenticationCache(): void
2726
2727清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2728
2729**系统能力:** SystemCapability.Web.Webview.Core
2730
2731**错误码:**
2732
2733以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2734
2735| 错误码ID | 错误信息                                                     |
2736| -------- | ------------------------------------------------------------ |
2737| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2738
2739**示例:**
2740
2741```ts
2742// xxx.ets
2743import { webview } from '@kit.ArkWeb';
2744import { BusinessError } from '@kit.BasicServicesKit';
2745
2746@Entry
2747@Component
2748struct WebComponent {
2749  controller: webview.WebviewController = new webview.WebviewController();
2750
2751  build() {
2752    Column() {
2753      Button('clearClientAuthenticationCache')
2754        .onClick(() => {
2755          try {
2756            this.controller.clearClientAuthenticationCache();
2757          } catch (error) {
2758            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2759          }
2760        })
2761      Web({ src: 'www.example.com', controller: this.controller })
2762    }
2763  }
2764}
2765```
2766
2767### createWebMessagePorts
2768
2769createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2770
2771创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2772
2773**系统能力:** SystemCapability.Web.Webview.Core
2774
2775**参数:**
2776
2777| 参数名 | 类型                   | 必填 | 说明                             |
2778| ------ | ---------------------- | ---- | :------------------------------|
2779| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 |
2780
2781**返回值:**
2782
2783| 类型                   | 说明              |
2784| ---------------------- | ----------------- |
2785| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 |
2786
2787**错误码:**
2788
2789以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2790
2791| 错误码ID | 错误信息                                                     |
2792| -------- | ------------------------------------------------------------ |
2793| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2794| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2795
2796**示例:**
2797
2798```ts
2799// xxx.ets
2800import { webview } from '@kit.ArkWeb';
2801import { BusinessError } from '@kit.BasicServicesKit';
2802
2803@Entry
2804@Component
2805struct WebComponent {
2806  controller: webview.WebviewController = new webview.WebviewController();
2807  ports: webview.WebMessagePort[] = [];
2808
2809  build() {
2810    Column() {
2811      Button('createWebMessagePorts')
2812        .onClick(() => {
2813          try {
2814            this.ports = this.controller.createWebMessagePorts();
2815            console.log("createWebMessagePorts size:" + this.ports.length);
2816          } catch (error) {
2817            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2818          }
2819        })
2820      Web({ src: 'www.example.com', controller: this.controller })
2821    }
2822  }
2823}
2824```
2825
2826### postMessage
2827
2828postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2829
2830发送Web消息端口到HTML。
2831
2832**系统能力:** SystemCapability.Web.Webview.Core
2833
2834**参数:**
2835
2836| 参数名 | 类型                   | 必填 | 说明                             |
2837| ------ | ---------------------- | ---- | :------------------------------- |
2838| name   | string                 | 是   | 要发送的消息名称。            |
2839| ports  | Array\<[WebMessagePort](#webmessageport)> | 是   | 要发送的消息端口。            |
2840| uri    | string                 | 是   | 接收该消息的URI。                |
2841
2842**错误码:**
2843
2844以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2845
2846| 错误码ID | 错误信息                                                     |
2847| -------- | ------------------------------------------------------------ |
2848| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2849| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2850
2851**示例:**
2852
2853```ts
2854// xxx.ets
2855import { webview } from '@kit.ArkWeb';
2856import { BusinessError } from '@kit.BasicServicesKit';
2857
2858@Entry
2859@Component
2860struct WebComponent {
2861  controller: webview.WebviewController = new webview.WebviewController();
2862  ports: webview.WebMessagePort[] = [];
2863  @State sendFromEts: string = 'Send this message from ets to HTML';
2864  @State receivedFromHtml: string = 'Display received message send from HTML';
2865
2866  build() {
2867    Column() {
2868      // 展示接收到的来自HTML的内容
2869      Text(this.receivedFromHtml)
2870      // 输入框的内容发送到html
2871      TextInput({ placeholder: 'Send this message from ets to HTML' })
2872        .onChange((value: string) => {
2873          this.sendFromEts = value;
2874        })
2875
2876      Button('postMessage')
2877        .onClick(() => {
2878          try {
2879            // 1、创建两个消息端口。
2880            this.ports = this.controller.createWebMessagePorts();
2881            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2882            this.ports[1].onMessageEvent((result: webview.WebMessage) => {
2883              let msg = 'Got msg from HTML:';
2884              if (typeof (result) == "string") {
2885                console.log("received string message from html5, string is:" + result);
2886                msg = msg + result;
2887              } else if (typeof (result) == "object") {
2888                if (result instanceof ArrayBuffer) {
2889                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2890                  msg = msg + "length is " + result.byteLength;
2891                } else {
2892                  console.log("not support");
2893                }
2894              } else {
2895                console.log("not support");
2896              }
2897              this.receivedFromHtml = msg;
2898            })
2899            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2900            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2901          } catch (error) {
2902            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2903          }
2904        })
2905
2906      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2907      Button('SendDataToHTML')
2908        .onClick(() => {
2909          try {
2910            if (this.ports && this.ports[1]) {
2911              this.ports[1].postMessageEvent(this.sendFromEts);
2912            } else {
2913              console.error(`ports is null, Please initialize first`);
2914            }
2915          } catch (error) {
2916            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2917          }
2918        })
2919      Web({ src: $rawfile('index.html'), controller: this.controller })
2920    }
2921  }
2922}
2923```
2924
2925加载的html文件。
2926```html
2927<!--index.html-->
2928<!DOCTYPE html>
2929<html>
2930<head>
2931    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2932    <title>WebView Message Port Demo</title>
2933</head>
2934
2935  <body>
2936    <h1>WebView Message Port Demo</h1>
2937    <div>
2938        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2939        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2940    </div>
2941    <p class="output">display received message send from ets</p>
2942  </body>
2943  <script src="xxx.js"></script>
2944</html>
2945```
2946
2947```js
2948//xxx.js
2949var h5Port;
2950var output = document.querySelector('.output');
2951window.addEventListener('message', function (event) {
2952    if (event.data == '__init_port__') {
2953        if (event.ports[0] != null) {
2954            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2955            h5Port.onmessage = function (event) {
2956              // 2. 接收ets侧发送过来的消息.
2957              var msg = 'Got message from ets:';
2958              var result = event.data;
2959              if (typeof(result) == "string") {
2960                console.log("received string message from html5, string is:" + result);
2961                msg = msg + result;
2962              } else if (typeof(result) == "object") {
2963                if (result instanceof ArrayBuffer) {
2964                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2965                  msg = msg + "length is " + result.byteLength;
2966                } else {
2967                  console.log("not support");
2968                }
2969              } else {
2970                console.log("not support");
2971              }
2972              output.innerHTML = msg;
2973            }
2974        }
2975    }
2976})
2977
2978// 3. 使用h5Port往ets侧发送消息.
2979function PostMsgToEts(data) {
2980    if (h5Port) {
2981      h5Port.postMessage(data);
2982    } else {
2983      console.error("h5Port is null, Please initialize first");
2984    }
2985}
2986```
2987
2988### requestFocus
2989
2990requestFocus(): void
2991
2992使当前web页面获取焦点。
2993
2994**系统能力:** SystemCapability.Web.Webview.Core
2995
2996**错误码:**
2997
2998以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2999
3000| 错误码ID | 错误信息                                                     |
3001| -------- | ------------------------------------------------------------ |
3002| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3003
3004**示例:**
3005
3006```ts
3007// xxx.ets
3008import { webview } from '@kit.ArkWeb';
3009import { BusinessError } from '@kit.BasicServicesKit';
3010
3011@Entry
3012@Component
3013struct WebComponent {
3014  controller: webview.WebviewController = new webview.WebviewController();
3015
3016  build() {
3017    Column() {
3018      Button('requestFocus')
3019        .onClick(() => {
3020          try {
3021            this.controller.requestFocus();
3022          } catch (error) {
3023            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3024          }
3025        });
3026      Web({ src: 'www.example.com', controller: this.controller })
3027    }
3028  }
3029}
3030```
3031
3032### zoomIn
3033
3034zoomIn(): void
3035
3036调用此接口将当前网页进行放大,比例为20%。
3037
3038**系统能力:** SystemCapability.Web.Webview.Core
3039
3040**错误码:**
3041
3042以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3043
3044| 错误码ID | 错误信息                                                     |
3045| -------- | ------------------------------------------------------------ |
3046| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3047| 17100004 | Function not enabled.                                         |
3048
3049**示例:**
3050
3051```ts
3052// xxx.ets
3053import { webview } from '@kit.ArkWeb';
3054import { BusinessError } from '@kit.BasicServicesKit';
3055
3056@Entry
3057@Component
3058struct WebComponent {
3059  controller: webview.WebviewController = new webview.WebviewController();
3060
3061  build() {
3062    Column() {
3063      Button('zoomIn')
3064        .onClick(() => {
3065          try {
3066            this.controller.zoomIn();
3067          } catch (error) {
3068            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3069          }
3070        })
3071      Web({ src: 'www.example.com', controller: this.controller })
3072    }
3073  }
3074}
3075```
3076
3077### zoomOut
3078
3079zoomOut(): void
3080
3081调用此接口将当前网页进行缩小,比例为20%。
3082
3083**系统能力:** SystemCapability.Web.Webview.Core
3084
3085**错误码:**
3086
3087以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3088
3089| 错误码ID | 错误信息                                                     |
3090| -------- | ------------------------------------------------------------ |
3091| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3092| 17100004 | Function not enabled.                                         |
3093
3094**示例:**
3095
3096```ts
3097// xxx.ets
3098import { webview } from '@kit.ArkWeb';
3099import { BusinessError } from '@kit.BasicServicesKit';
3100
3101@Entry
3102@Component
3103struct WebComponent {
3104  controller: webview.WebviewController = new webview.WebviewController();
3105
3106  build() {
3107    Column() {
3108      Button('zoomOut')
3109        .onClick(() => {
3110          try {
3111            this.controller.zoomOut();
3112          } catch (error) {
3113            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3114          }
3115        })
3116      Web({ src: 'www.example.com', controller: this.controller })
3117    }
3118  }
3119}
3120```
3121
3122### getHitTestValue
3123
3124getHitTestValue(): HitTestValue
3125
3126获取当前被点击区域的元素信息。
3127
3128**系统能力:** SystemCapability.Web.Webview.Core
3129
3130**返回值:**
3131
3132| 类型         | 说明                 |
3133| ------------ | -------------------- |
3134| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
3135
3136**错误码:**
3137
3138以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3139
3140| 错误码ID | 错误信息                                                     |
3141| -------- | ------------------------------------------------------------ |
3142| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3143
3144**示例:**
3145
3146```ts
3147// xxx.ets
3148import { webview } from '@kit.ArkWeb';
3149import { BusinessError } from '@kit.BasicServicesKit';
3150
3151@Entry
3152@Component
3153struct WebComponent {
3154  controller: webview.WebviewController = new webview.WebviewController();
3155
3156  build() {
3157    Column() {
3158      Button('getHitTestValue')
3159        .onClick(() => {
3160          try {
3161            let hitValue = this.controller.getHitTestValue();
3162            console.log("hitType: " + hitValue.type);
3163            console.log("extra: " + hitValue.extra);
3164          } catch (error) {
3165            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3166          }
3167        })
3168      Web({ src: 'www.example.com', controller: this.controller })
3169    }
3170  }
3171}
3172```
3173
3174### getWebId
3175
3176getWebId(): number
3177
3178获取当前Web组件的索引值,用于多个Web组件的管理。
3179
3180**系统能力:** SystemCapability.Web.Webview.Core
3181
3182**返回值:**
3183
3184| 类型   | 说明                  |
3185| ------ | --------------------- |
3186| number | 当前Web组件的索引值。 |
3187
3188**错误码:**
3189
3190以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3191
3192| 错误码ID | 错误信息                                                     |
3193| -------- | ------------------------------------------------------------ |
3194| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3195
3196**示例:**
3197
3198```ts
3199// xxx.ets
3200import { webview } from '@kit.ArkWeb';
3201import { BusinessError } from '@kit.BasicServicesKit';
3202
3203@Entry
3204@Component
3205struct WebComponent {
3206  controller: webview.WebviewController = new webview.WebviewController();
3207
3208  build() {
3209    Column() {
3210      Button('getWebId')
3211        .onClick(() => {
3212          try {
3213            let id = this.controller.getWebId();
3214            console.log("id: " + id);
3215          } catch (error) {
3216            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3217          }
3218        })
3219      Web({ src: 'www.example.com', controller: this.controller })
3220    }
3221  }
3222}
3223```
3224
3225### getUserAgent
3226
3227getUserAgent(): string
3228
3229获取当前默认用户代理。
3230
3231默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
3232
3233**系统能力:** SystemCapability.Web.Webview.Core
3234
3235**返回值:**
3236
3237| 类型   | 说明           |
3238| ------ | -------------- |
3239| string | 默认用户代理。 |
3240
3241**错误码:**
3242
3243以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3244
3245| 错误码ID | 错误信息                                                     |
3246| -------- | ------------------------------------------------------------ |
3247| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3248
3249**示例:**
3250
3251```ts
3252// xxx.ets
3253import { webview } from '@kit.ArkWeb';
3254import { BusinessError } from '@kit.BasicServicesKit';
3255
3256@Entry
3257@Component
3258struct WebComponent {
3259  controller: webview.WebviewController = new webview.WebviewController();
3260
3261  build() {
3262    Column() {
3263      Button('getUserAgent')
3264        .onClick(() => {
3265          try {
3266            let userAgent = this.controller.getUserAgent();
3267            console.log("userAgent: " + userAgent);
3268          } catch (error) {
3269            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3270          }
3271        })
3272      Web({ src: 'www.example.com', controller: this.controller })
3273    }
3274  }
3275}
3276```
3277
3278支持开发者基于默认的UserAgent去定制UserAgent。
3279```ts
3280// xxx.ets
3281import { webview } from '@kit.ArkWeb';
3282import { BusinessError } from '@kit.BasicServicesKit';
3283
3284@Entry
3285@Component
3286struct WebComponent {
3287  controller: webview.WebviewController = new webview.WebviewController();
3288  @State ua: string = "";
3289
3290  aboutToAppear(): void {
3291    webview.once('webInited', () => {
3292      try {
3293        // 应用侧用法示例,定制UserAgent。
3294        this.ua = this.controller.getUserAgent() + 'xxx';
3295        this.controller.setCustomUserAgent(this.ua);
3296      } catch (error) {
3297        console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3298      }
3299    })
3300  }
3301
3302  build() {
3303    Column() {
3304      Web({ src: 'www.example.com', controller: this.controller })
3305    }
3306  }
3307}
3308```
3309
3310### getTitle
3311
3312getTitle(): string
3313
3314获取当前网页的标题。
3315
3316**系统能力:** SystemCapability.Web.Webview.Core
3317
3318**返回值:**
3319
3320| 类型   | 说明                 |
3321| ------ | -------------------- |
3322| string | 当前网页的标题。 |
3323
3324**错误码:**
3325
3326以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3327
3328| 错误码ID | 错误信息                                                     |
3329| -------- | ------------------------------------------------------------ |
3330| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3331
3332**示例:**
3333
3334```ts
3335// xxx.ets
3336import { webview } from '@kit.ArkWeb';
3337import { BusinessError } from '@kit.BasicServicesKit';
3338
3339@Entry
3340@Component
3341struct WebComponent {
3342  controller: webview.WebviewController = new webview.WebviewController();
3343
3344  build() {
3345    Column() {
3346      Button('getTitle')
3347        .onClick(() => {
3348          try {
3349            let title = this.controller.getTitle();
3350            console.log("title: " + title);
3351          } catch (error) {
3352            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3353          }
3354        })
3355      Web({ src: 'www.example.com', controller: this.controller })
3356    }
3357  }
3358}
3359```
3360
3361### getPageHeight
3362
3363getPageHeight(): number
3364
3365获取当前网页的页面高度。
3366
3367**系统能力:** SystemCapability.Web.Webview.Core
3368
3369**返回值:**
3370
3371| 类型   | 说明                 |
3372| ------ | -------------------- |
3373| number | 当前网页的页面高度。单位:vp。 |
3374
3375**错误码:**
3376
3377以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3378
3379| 错误码ID | 错误信息                                                     |
3380| -------- | ------------------------------------------------------------ |
3381| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3382
3383**示例:**
3384
3385```ts
3386// xxx.ets
3387import { webview } from '@kit.ArkWeb';
3388import { BusinessError } from '@kit.BasicServicesKit';
3389
3390@Entry
3391@Component
3392struct WebComponent {
3393  controller: webview.WebviewController = new webview.WebviewController();
3394
3395  build() {
3396    Column() {
3397      Button('getPageHeight')
3398        .onClick(() => {
3399          try {
3400            let pageHeight = this.controller.getPageHeight();
3401            console.log("pageHeight : " + pageHeight);
3402          } catch (error) {
3403            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3404          }
3405        })
3406      Web({ src: 'www.example.com', controller: this.controller })
3407    }
3408  }
3409}
3410```
3411
3412### storeWebArchive
3413
3414storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
3415
3416以回调方式异步保存当前页面。
3417
3418**系统能力:** SystemCapability.Web.Webview.Core
3419
3420**参数:**
3421
3422| 参数名   | 类型              | 必填 | 说明                                                         |
3423| -------- | --------------------- | ---- | ------------------------------------------------------------ |
3424| baseName | string                | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3425| autoName | boolean               | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3426| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
3427
3428**错误码:**
3429
3430以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3431
3432| 错误码ID | 错误信息                                                     |
3433| -------- | ------------------------------------------------------------ |
3434| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3435| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3436| 17100003 | Invalid resource path or file type.                          |
3437
3438**示例:**
3439
3440```ts
3441// xxx.ets
3442import { webview } from '@kit.ArkWeb';
3443import { BusinessError } from '@kit.BasicServicesKit';
3444
3445@Entry
3446@Component
3447struct WebComponent {
3448  controller: webview.WebviewController = new webview.WebviewController();
3449
3450  build() {
3451    Column() {
3452      Button('storeWebArchive')
3453        .onClick(() => {
3454          try {
3455            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
3456              if (error) {
3457                console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3458                return;
3459              }
3460              if (filename != null) {
3461                console.info(`save web archive success: ${filename}`);
3462              }
3463            });
3464          } catch (error) {
3465            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3466          }
3467        })
3468      Web({ src: 'www.example.com', controller: this.controller })
3469    }
3470  }
3471}
3472```
3473
3474### storeWebArchive
3475
3476storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
3477
3478以Promise方式异步保存当前页面。
3479
3480**系统能力:** SystemCapability.Web.Webview.Core
3481
3482**参数:**
3483
3484| 参数名   | 类型 | 必填 | 说明                                                         |
3485| -------- | -------- | ---- | ------------------------------------------------------------ |
3486| baseName | string   | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3487| autoName | boolean  | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3488
3489**返回值:**
3490
3491| 类型            | 说明                                                  |
3492| --------------- | ----------------------------------------------------- |
3493| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
3494
3495**错误码:**
3496
3497以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3498
3499| 错误码ID | 错误信息                                                     |
3500| -------- | ------------------------------------------------------------ |
3501| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3502| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3503| 17100003 | Invalid resource path or file type.                          |
3504
3505**示例:**
3506
3507```ts
3508// xxx.ets
3509import { webview } from '@kit.ArkWeb';
3510import { BusinessError } from '@kit.BasicServicesKit';
3511
3512@Entry
3513@Component
3514struct WebComponent {
3515  controller: webview.WebviewController = new webview.WebviewController();
3516
3517  build() {
3518    Column() {
3519      Button('storeWebArchive')
3520        .onClick(() => {
3521          try {
3522            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3523              .then(filename => {
3524                if (filename != null) {
3525                  console.info(`save web archive success: ${filename}`)
3526                }
3527              })
3528              .catch((error: BusinessError) => {
3529                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
3530              })
3531          } catch (error) {
3532            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3533          }
3534        })
3535      Web({ src: 'www.example.com', controller: this.controller })
3536    }
3537  }
3538}
3539```
3540
3541### getUrl
3542
3543getUrl(): string
3544
3545获取当前页面的url地址。
3546
3547**系统能力:** SystemCapability.Web.Webview.Core
3548
3549**返回值:**
3550
3551| 类型   | 说明                |
3552| ------ | ------------------- |
3553| string | 当前页面的url地址。 |
3554
3555**错误码:**
3556
3557以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3558
3559| 错误码ID | 错误信息                                                     |
3560| -------- | ------------------------------------------------------------ |
3561| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3562
3563**示例:**
3564
3565```ts
3566// xxx.ets
3567import { webview } from '@kit.ArkWeb';
3568import { BusinessError } from '@kit.BasicServicesKit';
3569
3570@Entry
3571@Component
3572struct WebComponent {
3573  controller: webview.WebviewController = new webview.WebviewController();
3574
3575  build() {
3576    Column() {
3577      Button('getUrl')
3578        .onClick(() => {
3579          try {
3580            let url = this.controller.getUrl();
3581            console.log("url: " + url);
3582          } catch (error) {
3583            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3584          }
3585        })
3586      Web({ src: 'www.example.com', controller: this.controller })
3587    }
3588  }
3589}
3590```
3591
3592### stop
3593
3594stop(): void
3595
3596停止页面加载。
3597
3598**系统能力:** SystemCapability.Web.Webview.Core
3599
3600**错误码:**
3601
3602以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3603
3604| 错误码ID | 错误信息                                                     |
3605| -------- | ------------------------------------------------------------ |
3606| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3607
3608**示例:**
3609
3610```ts
3611// xxx.ets
3612import { webview } from '@kit.ArkWeb';
3613import { BusinessError } from '@kit.BasicServicesKit';
3614
3615@Entry
3616@Component
3617struct WebComponent {
3618  controller: webview.WebviewController = new webview.WebviewController();
3619
3620  build() {
3621    Column() {
3622      Button('stop')
3623        .onClick(() => {
3624          try {
3625            this.controller.stop();
3626          } catch (error) {
3627            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3628          }
3629        });
3630      Web({ src: 'www.example.com', controller: this.controller })
3631    }
3632  }
3633}
3634```
3635
3636### backOrForward
3637
3638backOrForward(step: number): void
3639
3640按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3641
3642前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3643
3644**系统能力:** SystemCapability.Web.Webview.Core
3645
3646**参数:**
3647
3648| 参数名 | 类型 | 必填 | 说明               |
3649| ------ | -------- | ---- | ---------------------- |
3650| step   | number   | 是   | 需要前进或后退的步长。 |
3651
3652**错误码:**
3653
3654以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3655
3656| 错误码ID | 错误信息                                                     |
3657| -------- | ------------------------------------------------------------ |
3658| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3659| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3660
3661**示例:**
3662
3663```ts
3664// xxx.ets
3665import { webview } from '@kit.ArkWeb';
3666import { BusinessError } from '@kit.BasicServicesKit';
3667
3668@Entry
3669@Component
3670struct WebComponent {
3671  controller: webview.WebviewController = new webview.WebviewController();
3672  @State step: number = -2;
3673
3674  build() {
3675    Column() {
3676      Button('backOrForward')
3677        .onClick(() => {
3678          try {
3679            this.controller.backOrForward(this.step);
3680          } catch (error) {
3681            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3682          }
3683        })
3684      Web({ src: 'www.example.com', controller: this.controller })
3685    }
3686  }
3687}
3688```
3689
3690### scrollTo
3691
3692scrollTo(x:number, y:number, duration?:number): void
3693
3694在指定时间内,将页面滚动到指定的绝对位置。
3695
3696**系统能力:** SystemCapability.Web.Webview.Core
3697
3698**参数:**
3699
3700| 参数名 | 类型 | 必填 | 说明               |
3701| ------ | -------- | ---- | ---------------------- |
3702| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 |
3703| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。|
3704| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3705
3706**错误码:**
3707
3708以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3709
3710| 错误码ID | 错误信息                                                     |
3711| -------- | ------------------------------------------------------------ |
3712| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3713| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3714
3715**示例:**
3716
3717```ts
3718// xxx.ets
3719import { webview } from '@kit.ArkWeb';
3720import { BusinessError } from '@kit.BasicServicesKit';
3721
3722@Entry
3723@Component
3724struct WebComponent {
3725  controller: webview.WebviewController = new webview.WebviewController();
3726
3727  build() {
3728    Column() {
3729      Button('scrollTo')
3730        .onClick(() => {
3731          try {
3732            this.controller.scrollTo(50, 50, 500);
3733          } catch (error) {
3734            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3735          }
3736        })
3737        Button('stopScroll')
3738        .onClick(() => {
3739          try {
3740            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3741          } catch (error) {
3742            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3743          }
3744        })
3745      Web({ src: $rawfile('index.html'), controller: this.controller })
3746    }
3747  }
3748}
3749```
3750
3751加载的html文件。
3752```html
3753<!--index.html-->
3754<!DOCTYPE html>
3755<html>
3756<head>
3757    <title>Demo</title>
3758    <style>
3759        body {
3760            width:2000px;
3761            height:2000px;
3762            padding-right:170px;
3763            padding-left:170px;
3764            border:5px solid blueviolet
3765        }
3766    </style>
3767</head>
3768<body>
3769Scroll Test
3770</body>
3771</html>
3772```
3773
3774### scrollBy
3775
3776scrollBy(deltaX:number, deltaY:number,duration?:number): void
3777
3778在指定时间内将页面滚动指定的偏移量。
3779
3780**系统能力:** SystemCapability.Web.Webview.Core
3781
3782**参数:**
3783
3784| 参数名 | 类型 | 必填 | 说明               |
3785| ------ | -------- | ---- | ---------------------- |
3786| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。单位:vp。 |
3787| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。单位:vp。 |
3788| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3789
3790**错误码:**
3791
3792以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3793
3794| 错误码ID | 错误信息                                                     |
3795| -------- | ------------------------------------------------------------ |
3796| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3797| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3798
3799> **说明:**
3800>
3801> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。
3802
3803**示例:**
3804
3805```ts
3806// xxx.ets
3807import { webview } from '@kit.ArkWeb';
3808import { BusinessError } from '@kit.BasicServicesKit';
3809
3810@Entry
3811@Component
3812struct WebComponent {
3813  controller: webview.WebviewController = new webview.WebviewController();
3814
3815  build() {
3816    Column() {
3817      Button('scrollBy')
3818        .onClick(() => {
3819          try {
3820            this.controller.scrollBy(50, 50, 500);
3821          } catch (error) {
3822            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3823          }
3824        })
3825      Button('stopScroll')
3826        .onClick(() => {
3827          try {
3828            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3829          } catch (error) {
3830            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3831          }
3832        })
3833      Web({ src: $rawfile('index.html'), controller: this.controller })
3834    }
3835  }
3836}
3837```
3838
3839加载的html文件。
3840```html
3841<!--index.html-->
3842<!DOCTYPE html>
3843<html>
3844<head>
3845    <title>Demo</title>
3846    <style>
3847        body {
3848            width:2000px;
3849            height:2000px;
3850            padding-right:170px;
3851            padding-left:170px;
3852            border:5px solid blueviolet
3853        }
3854    </style>
3855</head>
3856<body>
3857Scroll Test
3858</body>
3859</html>
3860```
3861### scrollByWithResult<sup>12+</sup>
3862
3863scrollByWithResult(deltaX: number, deltaY: number): boolean
3864
3865将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。
3866
3867**系统能力:** SystemCapability.Web.Webview.Core
3868
3869**参数:**
3870
3871| 参数名 | 类型 | 必填 | 说明               |
3872| ------ | -------- | ---- | ---------------------- |
3873| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3874| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3875
3876**返回值:**
3877
3878| 类型    | 说明                                     |
3879| ------- | --------------------------------------- |
3880| boolean | 当前网页是否可以滑动,默认为false。|
3881
3882**错误码:**
3883
3884以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3885
3886| 错误码ID | 错误信息                                                     |
3887| -------- | ------------------------------------------------------------ |
3888| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3889| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3890
3891> **说明:**
3892>
3893> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。
3894> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。
3895> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。
3896> - 此接口不保证滑动帧率性能。
3897
3898**示例:**
3899
3900```ts
3901// xxx.ets
3902import { webview } from '@kit.ArkWeb';
3903import { BusinessError } from '@kit.BasicServicesKit';
3904
3905@Entry
3906@Component
3907struct WebComponent {
3908  controller: webview.WebviewController = new webview.WebviewController();
3909
3910  build() {
3911    Column() {
3912      Button('scrollByWithResult')
3913        .onClick(() => {
3914          try {
3915          let result = this.controller.scrollByWithResult(50, 50);
3916          console.log("original result: " + result);
3917          } catch (error) {
3918            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3919          }
3920        })
3921      Web({ src: $rawfile('index.html'), controller: this.controller })
3922    }
3923  }
3924}
3925```
3926
3927加载的html文件。
3928```html
3929<!--index.html-->
3930<!DOCTYPE html>
3931<html>
3932<head>
3933    <title>Demo</title>
3934    <style>
3935        body {
3936            width:2000px;
3937            height:2000px;
3938            padding-right:170px;
3939            padding-left:170px;
3940            border:5px solid blueviolet
3941        }
3942    </style>
3943</head>
3944<body>
3945Scroll Test
3946</body>
3947</html>
3948```
3949### slideScroll
3950
3951slideScroll(vx:number, vy:number): void
3952
3953按照指定速度模拟对页面的轻扫滚动动作。
3954
3955**系统能力:** SystemCapability.Web.Webview.Core
3956
3957**参数:**
3958
3959| 参数名 | 类型 | 必填 | 说明               |
3960| ------ | -------- | ---- | ---------------------- |
3961| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 |
3962| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 |
3963
3964**错误码:**
3965
3966以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3967
3968| 错误码ID | 错误信息                                                     |
3969| -------- | ------------------------------------------------------------ |
3970| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3971| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3972
3973**示例:**
3974
3975```ts
3976// xxx.ets
3977import { webview } from '@kit.ArkWeb';
3978import { BusinessError } from '@kit.BasicServicesKit';
3979
3980@Entry
3981@Component
3982struct WebComponent {
3983  controller: webview.WebviewController = new webview.WebviewController();
3984
3985  build() {
3986    Column() {
3987      Button('slideScroll')
3988        .onClick(() => {
3989          try {
3990            this.controller.slideScroll(500, 500);
3991          } catch (error) {
3992            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3993          }
3994        })
3995      Web({ src: $rawfile('index.html'), controller: this.controller })
3996    }
3997  }
3998}
3999```
4000
4001加载的html文件。
4002```html
4003<!--index.html-->
4004<!DOCTYPE html>
4005<html>
4006<head>
4007    <title>Demo</title>
4008    <style>
4009        body {
4010            width:3000px;
4011            height:3000px;
4012            padding-right:170px;
4013            padding-left:170px;
4014            border:5px solid blueviolet
4015        }
4016    </style>
4017</head>
4018<body>
4019Scroll Test
4020</body>
4021</html>
4022```
4023
4024### getOriginalUrl
4025
4026getOriginalUrl(): string
4027
4028获取当前页面的原始url地址。
4029风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
4030
4031**系统能力:** SystemCapability.Web.Webview.Core
4032
4033**返回值:**
4034
4035| 类型   | 说明                    |
4036| ------ | ----------------------- |
4037| string | 当前页面的原始url地址。 |
4038
4039**错误码:**
4040
4041以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4042
4043| 错误码ID | 错误信息                                                     |
4044| -------- | ------------------------------------------------------------ |
4045| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4046
4047**示例:**
4048
4049```ts
4050// xxx.ets
4051import { webview } from '@kit.ArkWeb';
4052import { BusinessError } from '@kit.BasicServicesKit';
4053
4054@Entry
4055@Component
4056struct WebComponent {
4057  controller: webview.WebviewController = new webview.WebviewController();
4058
4059  build() {
4060    Column() {
4061      Button('getOrgUrl')
4062        .onClick(() => {
4063          try {
4064            let url = this.controller.getOriginalUrl();
4065            console.log("original url: " + url);
4066          } catch (error) {
4067            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4068          }
4069        })
4070      Web({ src: 'www.example.com', controller: this.controller })
4071    }
4072  }
4073}
4074```
4075
4076### getFavicon
4077
4078getFavicon(): image.PixelMap
4079
4080获取页面的favicon图标。
4081
4082**系统能力:** SystemCapability.Web.Webview.Core
4083
4084**返回值:**
4085
4086| 类型                                   | 说明                            |
4087| -------------------------------------- | ------------------------------- |
4088| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
4089
4090**错误码:**
4091
4092以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4093
4094| 错误码ID | 错误信息                                                     |
4095| -------- | ------------------------------------------------------------ |
4096| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4097
4098**示例:**
4099
4100```ts
4101// xxx.ets
4102import { webview } from '@kit.ArkWeb';
4103import { BusinessError } from '@kit.BasicServicesKit';
4104import { image } from '@kit.ImageKit';
4105
4106@Entry
4107@Component
4108struct WebComponent {
4109  controller: webview.WebviewController = new webview.WebviewController();
4110  @State pixelmap: image.PixelMap | undefined = undefined;
4111
4112  build() {
4113    Column() {
4114      Button('getFavicon')
4115        .onClick(() => {
4116          try {
4117            this.pixelmap = this.controller.getFavicon();
4118          } catch (error) {
4119            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4120          }
4121        })
4122      Web({ src: 'www.example.com', controller: this.controller })
4123    }
4124  }
4125}
4126```
4127
4128### setNetworkAvailable
4129
4130setNetworkAvailable(enable: boolean): void
4131
4132设置JavaScript中的window.navigator.onLine属性。
4133
4134**系统能力:** SystemCapability.Web.Webview.Core
4135
4136**参数:**
4137
4138| 参数名 | 类型    | 必填 | 说明                              |
4139| ------ | ------- | ---- | --------------------------------- |
4140| enable | boolean | 是   | 是否使能window.navigator.onLine。 |
4141
4142**错误码:**
4143
4144以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4145
4146| 错误码ID | 错误信息                                                     |
4147| -------- | ------------------------------------------------------------ |
4148| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4149| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4150
4151**示例:**
4152
4153```ts
4154// xxx.ets
4155import { webview } from '@kit.ArkWeb';
4156import { BusinessError } from '@kit.BasicServicesKit';
4157
4158@Entry
4159@Component
4160struct WebComponent {
4161  controller: webview.WebviewController = new webview.WebviewController();
4162
4163  build() {
4164    Column() {
4165      Button('setNetworkAvailable')
4166        .onClick(() => {
4167          try {
4168            this.controller.setNetworkAvailable(true);
4169          } catch (error) {
4170            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4171          }
4172        })
4173      Web({ src: $rawfile('index.html'), controller: this.controller })
4174    }
4175  }
4176}
4177```
4178
4179加载的html文件。
4180```html
4181<!-- index.html -->
4182<!DOCTYPE html>
4183<html>
4184<body>
4185<h1>online 属性</h1>
4186<p id="demo"></p>
4187<button onclick="func()">click</button>
4188<script>
4189    let online = navigator.onLine;
4190    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4191
4192    function func(){
4193      var online = navigator.onLine;
4194      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4195    }
4196</script>
4197</body>
4198</html>
4199```
4200
4201### hasImage
4202
4203hasImage(callback: AsyncCallback\<boolean>): void
4204
4205通过Callback方式异步查找当前页面是否存在图像。
4206
4207**系统能力:** SystemCapability.Web.Webview.Core
4208
4209**参数:**
4210
4211| 参数名   | 类型                    | 必填 | 说明                       |
4212| -------- | ----------------------- | ---- | -------------------------- |
4213| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。 |
4214
4215**错误码:**
4216
4217以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4218
4219| 错误码ID | 错误信息                                                     |
4220| -------- | ------------------------------------------------------------ |
4221| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4222| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4223
4224**示例:**
4225
4226```ts
4227// xxx.ets
4228import { webview } from '@kit.ArkWeb';
4229import { BusinessError } from '@kit.BasicServicesKit';
4230
4231@Entry
4232@Component
4233struct WebComponent {
4234  controller: webview.WebviewController = new webview.WebviewController();
4235
4236  build() {
4237    Column() {
4238      Button('hasImageCb')
4239        .onClick(() => {
4240          try {
4241            this.controller.hasImage((error, data) => {
4242              if (error) {
4243                console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4244                return;
4245              }
4246              console.info("hasImage: " + data);
4247            });
4248          } catch (error) {
4249            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4250          }
4251        })
4252      Web({ src: 'www.example.com', controller: this.controller })
4253    }
4254  }
4255}
4256```
4257
4258### hasImage
4259
4260hasImage(): Promise\<boolean>
4261
4262通过Promise方式异步查找当前页面是否存在图像。
4263
4264**系统能力:** SystemCapability.Web.Webview.Core
4265
4266**返回值:**
4267
4268| 类型              | 说明                                    |
4269| ----------------- | --------------------------------------- |
4270| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 |
4271
4272**错误码:**
4273
4274以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4275
4276| 错误码ID | 错误信息                                                     |
4277| -------- | ------------------------------------------------------------ |
4278| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4279| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
4280
4281**示例:**
4282
4283```ts
4284// xxx.ets
4285import { webview } from '@kit.ArkWeb';
4286import { BusinessError } from '@kit.BasicServicesKit';
4287
4288@Entry
4289@Component
4290struct WebComponent {
4291  controller: webview.WebviewController = new webview.WebviewController();
4292
4293  build() {
4294    Column() {
4295      Button('hasImagePm')
4296        .onClick(() => {
4297          try {
4298            this.controller.hasImage().then((data) => {
4299              console.info('hasImage: ' + data);
4300            }).catch((error: BusinessError) => {
4301              console.error("error: " + error);
4302            })
4303          } catch (error) {
4304            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4305          }
4306        })
4307      Web({ src: 'www.example.com', controller: this.controller })
4308    }
4309  }
4310}
4311```
4312
4313### removeCache
4314
4315removeCache(clearRom: boolean): void
4316
4317清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
4318
4319> **说明:**
4320>
4321> 可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。
4322
4323**系统能力:** SystemCapability.Web.Webview.Core
4324
4325**参数:**
4326
4327| 参数名   | 类型    | 必填 | 说明                                                     |
4328| -------- | ------- | ---- | -------------------------------------------------------- |
4329| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
4330
4331**错误码:**
4332
4333以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4334
4335| 错误码ID | 错误信息                                                     |
4336| -------- | ------------------------------------------------------------ |
4337| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4338| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4339
4340**示例:**
4341
4342```ts
4343// xxx.ets
4344import { webview } from '@kit.ArkWeb';
4345import { BusinessError } from '@kit.BasicServicesKit';
4346
4347@Entry
4348@Component
4349struct WebComponent {
4350  controller: webview.WebviewController = new webview.WebviewController();
4351
4352  build() {
4353    Column() {
4354      Button('removeCache')
4355        .onClick(() => {
4356          try {
4357            this.controller.removeCache(false);
4358          } catch (error) {
4359            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4360          }
4361        })
4362      Web({ src: 'www.example.com', controller: this.controller })
4363    }
4364  }
4365}
4366```
4367
4368### pageUp
4369
4370pageUp(top: boolean): void
4371
4372将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
4373
4374**系统能力:** SystemCapability.Web.Webview.Core
4375
4376**参数:**
4377
4378| 参数名 | 类型    | 必填 | 说明                                                         |
4379| ------ | ------- | ---- | ------------------------------------------------------------ |
4380| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
4381
4382**错误码:**
4383
4384以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4385
4386| 错误码ID | 错误信息                                                     |
4387| -------- | ------------------------------------------------------------ |
4388| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4389| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4390
4391**示例:**
4392
4393```ts
4394// xxx.ets
4395import { webview } from '@kit.ArkWeb';
4396import { BusinessError } from '@kit.BasicServicesKit';
4397
4398@Entry
4399@Component
4400struct WebComponent {
4401  controller: webview.WebviewController = new webview.WebviewController();
4402
4403  build() {
4404    Column() {
4405      Button('pageUp')
4406        .onClick(() => {
4407          try {
4408            this.controller.pageUp(false);
4409          } catch (error) {
4410            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4411          }
4412        })
4413      Web({ src: 'www.example.com', controller: this.controller })
4414    }
4415  }
4416}
4417```
4418
4419### pageDown
4420
4421pageDown(bottom: boolean): void
4422
4423将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
4424
4425**系统能力:** SystemCapability.Web.Webview.Core
4426
4427**参数:**
4428
4429| 参数名 | 类型    | 必填 | 说明                                                         |
4430| ------ | ------- | ---- | ------------------------------------------------------------ |
4431| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
4432
4433**错误码:**
4434
4435以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4436
4437| 错误码ID | 错误信息                                                     |
4438| -------- | ------------------------------------------------------------ |
4439| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4440| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4441
4442**示例:**
4443
4444```ts
4445// xxx.ets
4446import { webview } from '@kit.ArkWeb';
4447import { BusinessError } from '@kit.BasicServicesKit';
4448
4449@Entry
4450@Component
4451struct WebComponent {
4452  controller: webview.WebviewController = new webview.WebviewController();
4453
4454  build() {
4455    Column() {
4456      Button('pageDown')
4457        .onClick(() => {
4458          try {
4459            this.controller.pageDown(false);
4460          } catch (error) {
4461            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4462          }
4463        })
4464      Web({ src: 'www.example.com', controller: this.controller })
4465    }
4466  }
4467}
4468```
4469
4470### getBackForwardEntries
4471
4472getBackForwardEntries(): BackForwardList
4473
4474获取当前Webview的历史信息列表。
4475
4476**系统能力:** SystemCapability.Web.Webview.Core
4477
4478**返回值:**
4479
4480| 类型                                | 说明                        |
4481| ----------------------------------- | --------------------------- |
4482| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
4483
4484**错误码:**
4485
4486以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4487
4488| 错误码ID | 错误信息                                                     |
4489| -------- | ------------------------------------------------------------ |
4490| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4491
4492**示例:**
4493
4494```ts
4495// xxx.ets
4496import { webview } from '@kit.ArkWeb';
4497import { BusinessError } from '@kit.BasicServicesKit';
4498
4499@Entry
4500@Component
4501struct WebComponent {
4502  controller: webview.WebviewController = new webview.WebviewController();
4503
4504  build() {
4505    Column() {
4506      Button('getBackForwardEntries')
4507        .onClick(() => {
4508          try {
4509            let list = this.controller.getBackForwardEntries()
4510          } catch (error) {
4511            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4512          }
4513        })
4514      Web({ src: 'www.example.com', controller: this.controller })
4515    }
4516  }
4517}
4518```
4519
4520### serializeWebState
4521
4522serializeWebState(): Uint8Array
4523
4524将当前Webview的页面状态历史记录信息序列化。
4525
4526**系统能力:** SystemCapability.Web.Webview.Core
4527
4528**返回值:**
4529
4530| 类型       | 说明                                          |
4531| ---------- | --------------------------------------------- |
4532| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
4533
4534**错误码:**
4535
4536以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4537
4538| 错误码ID | 错误信息                                                     |
4539| -------- | ------------------------------------------------------------ |
4540| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4541
4542**示例:**
4543
45441.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4545```ts
4546// xxx.ets
4547import { webview } from '@kit.ArkWeb';
4548import { BusinessError } from '@kit.BasicServicesKit';
4549import { fileIo } from '@kit.CoreFileKit';
4550
4551@Entry
4552@Component
4553struct WebComponent {
4554  controller: webview.WebviewController = new webview.WebviewController();
4555
4556  build() {
4557    Column() {
4558      Button('serializeWebState')
4559        .onClick(() => {
4560          try {
4561            let state = this.controller.serializeWebState();
4562            let path:string | undefined = AppStorage.get("cacheDir");
4563            if (path) {
4564              path += '/WebState';
4565              // 以同步方法打开文件。
4566              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
4567              fileIo.writeSync(file.fd, state.buffer);
4568              fileIo.closeSync(file.fd);
4569            }
4570          } catch (error) {
4571            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4572          }
4573        })
4574      Web({ src: 'www.example.com', controller: this.controller })
4575    }
4576  }
4577}
4578```
4579
45802.修改EntryAbility.ets4581获取应用缓存文件路径。
4582```ts
4583// xxx.ets
4584import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4585
4586export default class EntryAbility extends UIAbility {
4587    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4588        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4589        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4590    }
4591}
4592```
4593
4594### restoreWebState
4595
4596restoreWebState(state: Uint8Array): void
4597
4598当前Webview从序列化数据中恢复页面状态历史记录。
4599
4600如果state过大,可能会导致异常。建议state大于512k时,放弃恢复页面状态历史记录。
4601
4602**系统能力:** SystemCapability.Web.Webview.Core
4603
4604**参数:**
4605
4606| 参数名 | 类型       | 必填 | 说明                         |
4607| ------ | ---------- | ---- | ---------------------------- |
4608| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
4609
4610**错误码:**
4611
4612以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4613
4614| 错误码ID | 错误信息                                                     |
4615| -------- | ------------------------------------------------------------ |
4616| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4617| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4618
4619**示例:**
4620
46211.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4622```ts
4623// xxx.ets
4624import { webview } from '@kit.ArkWeb';
4625import { BusinessError } from '@kit.BasicServicesKit';
4626import { fileIo } from '@kit.CoreFileKit';
4627
4628@Entry
4629@Component
4630struct WebComponent {
4631  controller: webview.WebviewController = new webview.WebviewController();
4632
4633  build() {
4634    Column() {
4635      Button('RestoreWebState')
4636        .onClick(() => {
4637          try {
4638            let path: string | undefined = AppStorage.get("cacheDir");
4639            if (path) {
4640              path += '/WebState';
4641              // 以同步方法打开文件。
4642              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE);
4643              let stat = fileIo.statSync(path);
4644              let size = stat.size;
4645              let buf = new ArrayBuffer(size);
4646              fileIo.read(file.fd, buf, (err, readLen) => {
4647                if (err) {
4648                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4649                } else {
4650                  console.info("read file data succeed");
4651                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4652                  fileIo.closeSync(file);
4653                }
4654              });
4655            }
4656          } catch (error) {
4657            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4658          }
4659        })
4660      Web({ src: 'www.example.com', controller: this.controller })
4661    }
4662  }
4663}
4664```
4665
46662.修改EntryAbility.ets4667获取应用缓存文件路径。
4668```ts
4669// xxx.ets
4670import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4671
4672export default class EntryAbility extends UIAbility {
4673  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4674    // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4675    AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4676  }
4677}
4678```
4679
4680### customizeSchemes
4681
4682static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4683
4684对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。
4685
4686**系统能力:** SystemCapability.Web.Webview.Core
4687
4688**参数:**
4689
4690| 参数名   | 类型    | 必填 | 说明                      |
4691| -------- | ------- | ---- | -------------------------------------- |
4692| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4693
4694**错误码:**
4695
4696以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4697
4698| 错误码ID | 错误信息                                                     |
4699| -------- | ------------------------------------------------------------ |
4700|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
4701| 17100020 | Failed to register custom schemes. |
4702
4703**示例:**
4704
4705```ts
4706// xxx.ets
4707import { webview } from '@kit.ArkWeb';
4708import { BusinessError } from '@kit.BasicServicesKit';
4709
4710@Entry
4711@Component
4712struct WebComponent {
4713  controller: webview.WebviewController = new webview.WebviewController();
4714  responseWeb: WebResourceResponse = new WebResourceResponse();
4715  scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true };
4716  scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true };
4717  scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true };
4718
4719  aboutToAppear(): void {
4720    try {
4721      webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]);
4722    } catch (error) {
4723      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4724    }
4725  }
4726
4727  build() {
4728    Column() {
4729      Web({ src: 'www.example.com', controller: this.controller })
4730        .onInterceptRequest((event) => {
4731          if (event) {
4732            console.log('url:' + event.request.getRequestUrl());
4733          }
4734          return this.responseWeb;
4735        })
4736    }
4737  }
4738}
4739```
4740
4741### getCertificate<sup>10+</sup>
4742
4743getCertificate(): Promise<Array<cert.X509Cert>>
4744
4745获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4746
4747**系统能力:** SystemCapability.Web.Webview.Core
4748
4749**返回值:**
4750
4751| 类型       | 说明                                          |
4752| ---------- | --------------------------------------------- |
4753| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4754
4755**错误码:**
4756
4757以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4758
4759| 错误码ID | 错误信息                                                     |
4760| -------- | ------------------------------------------------------------ |
4761| 17100001 | Init error. The WebviewController must be associated with a web component. |
4762
4763**示例:**
4764
4765```ts
4766// xxx.ets
4767import { webview } from '@kit.ArkWeb';
4768import { BusinessError } from '@kit.BasicServicesKit';
4769import { cert } from '@kit.DeviceCertificateKit';
4770
4771function Uint8ArrayToString(dataArray: Uint8Array) {
4772  let dataString = '';
4773  for (let i = 0; i < dataArray.length; i++) {
4774    dataString += String.fromCharCode(dataArray[i]);
4775  }
4776  return dataString;
4777}
4778
4779function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4780  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4781  for (let i = 0; i < x509CertArray.length; i++) {
4782    res += ', index = ' + i + ', issuer name = '
4783      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4784      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4785      + x509CertArray[i].getNotBeforeTime()
4786      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4787  }
4788  return res;
4789}
4790
4791@Entry
4792@Component
4793struct Index {
4794  // outputStr在UI界面显示调试信息
4795  @State outputStr: string = '';
4796  webviewCtl: webview.WebviewController = new webview.WebviewController();
4797
4798  build() {
4799    Row() {
4800      Column() {
4801        List({ space: 20, initialIndex: 0 }) {
4802          ListItem() {
4803            Button() {
4804              Text('load bad ssl')
4805                .fontSize(10)
4806                .fontWeight(FontWeight.Bold)
4807            }
4808            .type(ButtonType.Capsule)
4809            .onClick(() => {
4810              // 加载一个过期的证书网站,查看获取到的证书信息
4811              this.webviewCtl.loadUrl('https://expired.badssl.com');
4812            })
4813            .height(50)
4814          }
4815
4816          ListItem() {
4817            Button() {
4818              Text('load example')
4819                .fontSize(10)
4820                .fontWeight(FontWeight.Bold)
4821            }
4822            .type(ButtonType.Capsule)
4823            .onClick(() => {
4824              // 加载一个https网站,查看网站的证书信息
4825              this.webviewCtl.loadUrl('https://www.example.com');
4826            })
4827            .height(50)
4828          }
4829
4830          ListItem() {
4831            Button() {
4832              Text('getCertificate Promise')
4833                .fontSize(10)
4834                .fontWeight(FontWeight.Bold)
4835            }
4836            .type(ButtonType.Capsule)
4837            .onClick(() => {
4838              try {
4839                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4840                  this.outputStr = ParseX509CertInfo(x509CertArray);
4841                })
4842              } catch (error) {
4843                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4844              }
4845            })
4846            .height(50)
4847          }
4848
4849          ListItem() {
4850            Button() {
4851              Text('getCertificate AsyncCallback')
4852                .fontSize(10)
4853                .fontWeight(FontWeight.Bold)
4854            }
4855            .type(ButtonType.Capsule)
4856            .onClick(() => {
4857              try {
4858                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
4859                  if (error) {
4860                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4861                  } else {
4862                    this.outputStr = ParseX509CertInfo(x509CertArray);
4863                  }
4864                })
4865              } catch (error) {
4866                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4867              }
4868            })
4869            .height(50)
4870          }
4871        }
4872        .listDirection(Axis.Horizontal)
4873        .height('10%')
4874
4875        Text(this.outputStr)
4876          .width('100%')
4877          .fontSize(10)
4878
4879        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4880          .fileAccess(true)
4881          .javaScriptAccess(true)
4882          .domStorageAccess(true)
4883          .onlineImageAccess(true)
4884          .onPageEnd((e) => {
4885            if (e) {
4886              this.outputStr = 'onPageEnd : url = ' + e.url;
4887            }
4888          })
4889          .onSslErrorEventReceive((e) => {
4890            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4891            e.handler.handleConfirm();
4892          })
4893          .width('100%')
4894          .height('70%')
4895      }
4896      .height('100%')
4897    }
4898  }
4899}
4900```
4901
4902### getCertificate<sup>10+</sup>
4903
4904getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4905
4906获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。
4907
4908**系统能力:** SystemCapability.Web.Webview.Core
4909
4910**参数:**
4911
4912| 参数名   | 类型                         | 必填 | 说明                                     |
4913| -------- | ---------------------------- | ---- | ---------------------------------------- |
4914| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4915
4916**错误码:**
4917
4918以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4919
4920| 错误码ID | 错误信息                                                     |
4921| -------- | ------------------------------------------------------------ |
4922| 17100001 | Init error. The WebviewController must be associated with a web component. |
4923| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4924
4925**示例:**
4926
4927```ts
4928// xxx.ets
4929import { webview } from '@kit.ArkWeb';
4930import { BusinessError } from '@kit.BasicServicesKit';
4931import { cert } from '@kit.DeviceCertificateKit';
4932
4933function Uint8ArrayToString(dataArray: Uint8Array) {
4934  let dataString = '';
4935  for (let i = 0; i < dataArray.length; i++) {
4936    dataString += String.fromCharCode(dataArray[i]);
4937  }
4938  return dataString;
4939}
4940
4941function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4942  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4943  for (let i = 0; i < x509CertArray.length; i++) {
4944    res += ', index = ' + i + ', issuer name = '
4945      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4946      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4947      + x509CertArray[i].getNotBeforeTime()
4948      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4949  }
4950  return res;
4951}
4952
4953@Entry
4954@Component
4955struct Index {
4956  // outputStr在UI界面显示调试信息
4957  @State outputStr: string = '';
4958  webviewCtl: webview.WebviewController = new webview.WebviewController();
4959
4960  build() {
4961    Row() {
4962      Column() {
4963        List({ space: 20, initialIndex: 0 }) {
4964          ListItem() {
4965            Button() {
4966              Text('load bad ssl')
4967                .fontSize(10)
4968                .fontWeight(FontWeight.Bold)
4969            }
4970            .type(ButtonType.Capsule)
4971            .onClick(() => {
4972              // 加载一个过期的证书网站,查看获取到的证书信息
4973              this.webviewCtl.loadUrl('https://expired.badssl.com');
4974            })
4975            .height(50)
4976          }
4977
4978          ListItem() {
4979            Button() {
4980              Text('load example')
4981                .fontSize(10)
4982                .fontWeight(FontWeight.Bold)
4983            }
4984            .type(ButtonType.Capsule)
4985            .onClick(() => {
4986              // 加载一个https网站,查看网站的证书信息
4987              this.webviewCtl.loadUrl('https://www.example.com');
4988            })
4989            .height(50)
4990          }
4991
4992          ListItem() {
4993            Button() {
4994              Text('getCertificate Promise')
4995                .fontSize(10)
4996                .fontWeight(FontWeight.Bold)
4997            }
4998            .type(ButtonType.Capsule)
4999            .onClick(() => {
5000              try {
5001                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
5002                  this.outputStr = ParseX509CertInfo(x509CertArray);
5003                })
5004              } catch (error) {
5005                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
5006              }
5007            })
5008            .height(50)
5009          }
5010
5011          ListItem() {
5012            Button() {
5013              Text('getCertificate AsyncCallback')
5014                .fontSize(10)
5015                .fontWeight(FontWeight.Bold)
5016            }
5017            .type(ButtonType.Capsule)
5018            .onClick(() => {
5019              try {
5020                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
5021                  if (error) {
5022                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
5023                  } else {
5024                    this.outputStr = ParseX509CertInfo(x509CertArray);
5025                  }
5026                })
5027              } catch (error) {
5028                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
5029              }
5030            })
5031            .height(50)
5032          }
5033        }
5034        .listDirection(Axis.Horizontal)
5035        .height('10%')
5036
5037        Text(this.outputStr)
5038          .width('100%')
5039          .fontSize(10)
5040
5041        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
5042          .fileAccess(true)
5043          .javaScriptAccess(true)
5044          .domStorageAccess(true)
5045          .onlineImageAccess(true)
5046          .onPageEnd((e) => {
5047            if (e) {
5048              this.outputStr = 'onPageEnd : url = ' + e.url;
5049            }
5050          })
5051          .onSslErrorEventReceive((e) => {
5052            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
5053            e.handler.handleConfirm();
5054          })
5055          .width('100%')
5056          .height('70%')
5057      }
5058      .height('100%')
5059    }
5060  }
5061}
5062```
5063
5064### setAudioMuted<sup>10+</sup>
5065
5066setAudioMuted(mute: boolean): void
5067
5068设置网页静音。
5069
5070**系统能力:** SystemCapability.Web.Webview.Core
5071
5072**参数:**
5073
5074| 参数名   | 类型    | 必填 | 说明                      |
5075| -------- | ------- | ---- | -------------------------------------- |
5076| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
5077
5078**错误码:**
5079
5080以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5081
5082| 错误码ID | 错误信息                                                     |
5083| -------- | ------------------------------------------------------------ |
5084| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5085| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5086
5087**示例:**
5088
5089```ts
5090// xxx.ets
5091import { webview } from '@kit.ArkWeb';
5092
5093@Entry
5094@Component
5095struct WebComponent {
5096  controller: webview.WebviewController = new webview.WebviewController();
5097  @State muted: boolean = false;
5098
5099  build() {
5100    Column() {
5101      Button("Toggle Mute")
5102        .onClick(event => {
5103          if (event) {
5104            this.muted = !this.muted;
5105            this.controller.setAudioMuted(this.muted);
5106          }
5107        })
5108      Web({ src: 'www.example.com', controller: this.controller })
5109    }
5110  }
5111}
5112```
5113
5114### prefetchPage<sup>10+</sup>
5115
5116prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
5117
5118在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
5119
5120> **说明:**
5121>
5122> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。
5123
5124**系统能力:** SystemCapability.Web.Webview.Core
5125
5126**参数:**
5127
5128| 参数名             | 类型                             | 必填  | 说明                      |
5129| ------------------| --------------------------------| ---- | ------------- |
5130| url               | string                          | 是    | 预加载的url。|
5131| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
5132
5133**错误码:**
5134
5135以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5136
5137| 错误码ID  | 错误信息                                                      |
5138| -------- | ------------------------------------------------------------ |
5139| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5140| 17100002 | Invalid url.                                                 |
5141
5142**示例:**
5143
5144```ts
5145// xxx.ets
5146import { webview } from '@kit.ArkWeb';
5147import { BusinessError } from '@kit.BasicServicesKit';
5148
5149@Entry
5150@Component
5151struct WebComponent {
5152  controller: webview.WebviewController = new webview.WebviewController();
5153
5154  build() {
5155    Column() {
5156      Button('prefetchPopularPage')
5157        .onClick(() => {
5158          try {
5159            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
5160            this.controller.prefetchPage('https://www.example.com');
5161          } catch (error) {
5162            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5163          }
5164        })
5165      // 需要将'www.example1.com'替换成一个真实的网站地址。
5166      Web({ src: 'www.example1.com', controller: this.controller })
5167    }
5168  }
5169}
5170```
5171
5172### prefetchResource<sup>12+</sup>
5173
5174static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void
5175
5176根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。
5177
5178**系统能力:**  SystemCapability.Web.Webview.Core
5179
5180**参数:**
5181
5182| 参数名             | 类型                             |  必填  | 说明                                                              |
5183| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ |
5184| request           | [RequestInfo](#requestinfo12)   | 是   | 预获取请求的信息。                                                      |
5185| additionalHeaders | Array\<[WebHeader](#webheader)> | 否   | 预获取请求的附加HTTP请求头。                                             |
5186| cacheKey          | string                          | 否   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5187| cacheValidTime    | number                          | 否   | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。          |
5188
5189**错误码:**
5190
5191以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5192
5193| 错误码ID  | 错误信息                                                      |
5194| -------- | ------------------------------------------------------------ |
5195| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
5196| 17100002 | Invalid url.                                                 |
5197
5198**示例:**
5199
5200```ts
5201// xxx.ets
5202import { webview } from '@kit.ArkWeb';
5203import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5204
5205export default class EntryAbility extends UIAbility {
5206  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5207    console.log("EntryAbility onCreate");
5208    webview.WebviewController.initializeWebEngine();
5209    // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5210    webview.WebviewController.prefetchResource(
5211      {
5212        url: "https://www.example1.com/post?e=f&g=h",
5213        method: "POST",
5214        formData: "a=x&b=y",
5215      },
5216      [{
5217        headerKey: "c",
5218        headerValue: "z",
5219      },],
5220      "KeyX", 500);
5221    AppStorage.setOrCreate("abilityWant", want);
5222    console.log("EntryAbility onCreate done");
5223  }
5224}
5225```
5226
5227### clearPrefetchedResource<sup>12+</sup>
5228
5229static clearPrefetchedResource(cacheKeyList: Array\<string>): void
5230
5231根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。
5232
5233**系统能力:**  SystemCapability.Web.Webview.Core
5234
5235**参数:**
5236
5237| 参数名             | 类型        | 必填  | 说明                                                                       |
5238| ------------------| ----------- | ---- | ------------------------------------------------------------------------- |
5239| cacheKeyList      | Array\<string>      | 是   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5240
5241**示例:**
5242
5243```ts
5244// xxx.ets
5245import { webview } from '@kit.ArkWeb';
5246
5247@Entry
5248@Component
5249struct WebComponent {
5250  controller: webview.WebviewController = new webview.WebviewController();
5251
5252  build() {
5253    Column() {
5254      Web({ src: "https://www.example.com/", controller: this.controller })
5255        .onAppear(() => {
5256          // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5257          webview.WebviewController.prefetchResource(
5258            {
5259              url: "https://www.example1.com/post?e=f&g=h",
5260              method: "POST",
5261              formData: "a=x&b=y",
5262            },
5263            [{
5264              headerKey: "c",
5265              headerValue: "z",
5266            },],
5267            "KeyX", 500);
5268        })
5269        .onPageEnd(() => {
5270          // 清除后续不再使用的预获取缓存。
5271          webview.WebviewController.clearPrefetchedResource(["KeyX",]);
5272        })
5273    }
5274  }
5275}
5276```
5277
5278### prepareForPageLoad<sup>10+</sup>
5279
5280static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
5281
5282预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
5283
5284**系统能力:**  SystemCapability.Web.Webview.Core
5285
5286**参数:**
5287
5288| 参数名          | 类型    |  必填  | 说明                                            |
5289| ---------------| ------- | ---- | ------------- |
5290| url            | string  | 是   | 预连接的url。|
5291| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
5292| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
5293
5294**错误码:**
5295
5296以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5297
5298| 错误码ID  | 错误信息                                                      |
5299| -------- | ------------------------------------------------------------ |
5300| 17100002 | Invalid url.                                                 |
5301| 171000013| The number of preconnect sockets is invalid.                                                 |
5302
5303**示例:**
5304
5305```ts
5306// xxx.ets
5307import { webview } from '@kit.ArkWeb';
5308import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5309
5310export default class EntryAbility extends UIAbility {
5311  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5312    console.log("EntryAbility onCreate");
5313    webview.WebviewController.initializeWebEngine();
5314    // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
5315    webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
5316    AppStorage.setOrCreate("abilityWant", want);
5317    console.log("EntryAbility onCreate done");
5318  }
5319}
5320```
5321
5322### setCustomUserAgent<sup>10+</sup>
5323
5324setCustomUserAgent(userAgent: string): void
5325
5326设置自定义用户代理,会覆盖系统的用户代理。
5327
5328当Web组件src设置了url时,建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。
5329
5330当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。
5331
5332默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5333
5334> **说明:**
5335>
5336>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。
5337
5338**系统能力:**  SystemCapability.Web.Webview.Core
5339
5340**参数:**
5341
5342| 参数名          | 类型    |  必填  | 说明                                            |
5343| ---------------| ------- | ---- | ------------- |
5344| userAgent      | string  | 是   | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 |
5345
5346**错误码:**
5347
5348以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5349
5350| 错误码ID  | 错误信息                                                      |
5351| -------- | ------------------------------------------------------------ |
5352| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5353| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5354
5355**示例:**
5356
5357```ts
5358// xxx.ets
5359import { webview } from '@kit.ArkWeb';
5360import { BusinessError } from '@kit.BasicServicesKit';
5361
5362@Entry
5363@Component
5364struct WebComponent {
5365  controller: webview.WebviewController = new webview.WebviewController();
5366  @State customUserAgent: string = ' DemoApp';
5367
5368  build() {
5369    Column() {
5370      Web({ src: 'www.example.com', controller: this.controller })
5371      .onControllerAttached(() => {
5372        console.log("onControllerAttached");
5373        try {
5374          let userAgent = this.controller.getUserAgent() + this.customUserAgent;
5375          this.controller.setCustomUserAgent(userAgent);
5376        } catch (error) {
5377          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5378        }
5379      })
5380    }
5381  }
5382}
5383```
5384
5385### setDownloadDelegate<sup>11+</sup>
5386
5387setDownloadDelegate(delegate: WebDownloadDelegate): void
5388
5389为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。
5390
5391**系统能力:**  SystemCapability.Web.Webview.Core
5392
5393**参数:**
5394
5395| 参数名          | 类型    |  必填  | 说明                                            |
5396| ---------------| ------- | ---- | ------------- |
5397| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
5398
5399**错误码:**
5400
5401以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5402
5403| 错误码ID  | 错误信息                                                      |
5404| -------- | ------------------------------------------------------------ |
5405| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5406
5407**示例:**
5408
5409```ts
5410// xxx.ets
5411import { webview } from '@kit.ArkWeb';
5412import { BusinessError } from '@kit.BasicServicesKit';
5413
5414@Entry
5415@Component
5416struct WebComponent {
5417  controller: webview.WebviewController = new webview.WebviewController();
5418  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5419
5420  build() {
5421    Column() {
5422      Button('setDownloadDelegate')
5423        .onClick(() => {
5424          try {
5425            this.controller.setDownloadDelegate(this.delegate);
5426          } catch (error) {
5427            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5428          }
5429        })
5430      Web({ src: 'www.example.com', controller: this.controller })
5431    }
5432  }
5433}
5434```
5435
5436### startDownload<sup>11+</sup>
5437
5438startDownload(url: string): void
5439
5440使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。
5441
5442**系统能力:**  SystemCapability.Web.Webview.Core
5443
5444**参数:**
5445
5446| 参数名          | 类型    |  必填  | 说明                                            |
5447| ---------------| ------- | ---- | ------------- |
5448| url      | string  | 是   | 下载地址。 |
5449
5450**错误码:**
5451
5452以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5453
5454| 错误码ID  | 错误信息                                                      |
5455| -------- | ------------------------------------------------------------ |
5456| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5457| 17100002 | Invalid url. |
5458
5459**示例:**
5460
5461```ts
5462// xxx.ets
5463import { webview } from '@kit.ArkWeb';
5464import { BusinessError } from '@kit.BasicServicesKit';
5465
5466@Entry
5467@Component
5468struct WebComponent {
5469  controller: webview.WebviewController = new webview.WebviewController();
5470  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5471
5472  build() {
5473    Column() {
5474      Button('setDownloadDelegate')
5475        .onClick(() => {
5476          try {
5477            this.controller.setDownloadDelegate(this.delegate);
5478          } catch (error) {
5479            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5480          }
5481        })
5482      Button('startDownload')
5483        .onClick(() => {
5484          try {
5485            this.controller.startDownload('https://www.example.com');
5486          } catch (error) {
5487            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5488          }
5489        })
5490      Web({ src: 'www.example.com', controller: this.controller })
5491    }
5492  }
5493}
5494```
5495
5496### getCustomUserAgent<sup>10+</sup>
5497
5498getCustomUserAgent(): string
5499
5500获取自定义用户代理。
5501
5502默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5503
5504**系统能力:**  SystemCapability.Web.Webview.Core
5505
5506**返回值:**
5507
5508| 类型   | 说明                      |
5509| ------ | ------------------------- |
5510| string | 用户自定义代理信息。 |
5511
5512**错误码:**
5513
5514以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5515
5516| 错误码ID  | 错误信息                                                      |
5517| -------- | ------------------------------------------------------------ |
5518| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5519
5520**示例:**
5521
5522```ts
5523// xxx.ets
5524import { webview } from '@kit.ArkWeb';
5525import { BusinessError } from '@kit.BasicServicesKit';
5526
5527@Entry
5528@Component
5529struct WebComponent {
5530  controller: webview.WebviewController = new webview.WebviewController();
5531  @State userAgent: string = '';
5532
5533  build() {
5534    Column() {
5535      Button('getCustomUserAgent')
5536        .onClick(() => {
5537          try {
5538            this.userAgent = this.controller.getCustomUserAgent();
5539            console.log("userAgent: " + this.userAgent);
5540          } catch (error) {
5541            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5542          }
5543        })
5544      Web({ src: 'www.example.com', controller: this.controller })
5545    }
5546  }
5547}
5548```
5549
5550### setConnectionTimeout<sup>11+</sup>
5551
5552static setConnectionTimeout(timeout: number): void
5553
5554设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。
5555
5556**系统能力:** SystemCapability.Web.Webview.Core
5557
5558**参数:**
5559
5560| 参数名          | 类型    |  必填  | 说明                                            |
5561| ---------------| ------- | ---- | ------------- |
5562| timeout        | number  | 是   | socket连接超时时间,以秒为单位,socket必须为大于0的整数。 |
5563
5564**错误码:**
5565
5566以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5567
5568| 错误码ID | 错误信息                                                     |
5569| -------- | ------------------------------------------------------------ |
5570| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
5571
5572**示例:**
5573
5574```ts
5575// xxx.ets
5576import { webview } from '@kit.ArkWeb';
5577import { BusinessError } from '@kit.BasicServicesKit';
5578
5579@Entry
5580@Component
5581struct WebComponent {
5582  controller: webview.WebviewController = new webview.WebviewController();
5583
5584  build() {
5585    Column() {
5586      Button('setConnectionTimeout')
5587        .onClick(() => {
5588          try {
5589            webview.WebviewController.setConnectionTimeout(5);
5590            console.log("setConnectionTimeout: 5s");
5591          } catch (error) {
5592            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5593          }
5594        })
5595      Web({ src: 'www.example.com', controller: this.controller })
5596        .onErrorReceive((event) => {
5597          if (event) {
5598            console.log('getErrorInfo:' + event.error.getErrorInfo());
5599            console.log('getErrorCode:' + event.error.getErrorCode());
5600          }
5601        })
5602    }
5603  }
5604}
5605```
5606
5607### warmupServiceWorker<sup>12+</sup>
5608
5609static warmupServiceWorker(url: string): void
5610
5611预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。
5612
5613**系统能力:**  SystemCapability.Web.Webview.Core
5614
5615**参数:**
5616
5617| 参数名          | 类型    |  必填  | 说明                                            |
5618| ---------------| ------- | ---- | ------------- |
5619| url            | string  | 是   | 需要预热ServiceWorker的url。|
5620
5621**错误码:**
5622
5623以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5624
5625| 错误码ID  | 错误信息                                                      |
5626| -------- | ------------------------------------------------------------ |
5627| 17100002 | Invalid url.                                                 |
5628
5629**示例:**
5630
5631```ts
5632// xxx.ts
5633import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5634import { hilog } from '@kit.PerformanceAnalysisKit';
5635import { window } from '@kit.ArkUI';
5636import { webview } from '@kit.ArkWeb';
5637
5638export default class EntryAbility extends UIAbility {
5639    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5640        console.log("EntryAbility onCreate");
5641        webview.WebviewController.initializeWebEngine();
5642        webview.WebviewController.warmupServiceWorker("https://www.example.com");
5643        AppStorage.setOrCreate("abilityWant", want);
5644    }
5645}
5646```
5647
5648### enableSafeBrowsing<sup>11+</sup>
5649
5650enableSafeBrowsing(enable: boolean): void
5651
5652<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。
5653本功能默认不生效,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)进行检测。
5654<!--RP1End-->
5655
5656**系统能力:** SystemCapability.Web.Webview.Core
5657
5658**参数:**
5659
5660| 参数名   | 类型    |  必填  | 说明                       |
5661| --------| ------- | ---- | ---------------------------|
5662|  enable | boolean | 是   | 是否启用检查网站安全风险的功能。 |
5663
5664**错误码:**
5665
5666以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5667
5668| 错误码ID | 错误信息                  |
5669| -------- | ----------------------- |
5670| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5671
5672**示例:**
5673
5674```ts
5675// xxx.ets
5676import { webview } from '@kit.ArkWeb';
5677import { BusinessError } from '@kit.BasicServicesKit';
5678
5679@Entry
5680@Component
5681struct WebComponent {
5682  controller: webview.WebviewController = new webview.WebviewController();
5683
5684  build() {
5685    Column() {
5686      Button('enableSafeBrowsing')
5687        .onClick(() => {
5688          try {
5689            this.controller.enableSafeBrowsing(true);
5690            console.log("enableSafeBrowsing: true");
5691          } catch (error) {
5692            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5693          }
5694        })
5695      Web({ src: 'www.example.com', controller: this.controller })
5696    }
5697  }
5698}
5699```
5700
5701### isSafeBrowsingEnabled<sup>11+</sup>
5702
5703isSafeBrowsingEnabled(): boolean
5704
5705获取当前网页是否启用了检查网站安全风险。
5706
5707**系统能力:** SystemCapability.Web.Webview.Core
5708
5709**返回值:**
5710
5711| 类型    | 说明                                     |
5712| ------- | --------------------------------------- |
5713| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。|
5714
5715**示例:**
5716
5717```ts
5718// xxx.ets
5719import { webview } from '@kit.ArkWeb';
5720
5721@Entry
5722@Component
5723struct WebComponent {
5724  controller: webview.WebviewController = new webview.WebviewController();
5725
5726  build() {
5727    Column() {
5728      Button('isSafeBrowsingEnabled')
5729        .onClick(() => {
5730          let result = this.controller.isSafeBrowsingEnabled();
5731          console.log("result: " + result);
5732        })
5733      Web({ src: 'www.example.com', controller: this.controller })
5734    }
5735  }
5736}
5737```
5738
5739### enableIntelligentTrackingPrevention<sup>12+</sup>
5740
5741enableIntelligentTrackingPrevention(enable: boolean): void
5742
5743启用智能防跟踪功能,默认该功能未启用。
5744
5745**系统能力:** SystemCapability.Web.Webview.Core
5746
5747**参数:**
5748
5749| 参数名   | 类型    |  必填  | 说明                       |
5750| --------| ------- | ---- | ---------------------------|
5751|  enable | boolean | 是   | 是否启用智能防跟踪功能。 |
5752
5753**错误码:**
5754
5755以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5756
5757| 错误码ID | 错误信息                  |
5758| -------- | ----------------------- |
5759| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5760|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5761
5762**示例:**
5763
5764```ts
5765// xxx.ets
5766import { webview } from '@kit.ArkWeb';
5767import { BusinessError } from '@kit.BasicServicesKit';
5768
5769@Entry
5770@Component
5771struct WebComponent {
5772  controller: webview.WebviewController = new webview.WebviewController();
5773
5774  build() {
5775    Column() {
5776      Button('enableIntelligentTrackingPrevention')
5777        .onClick(() => {
5778          try {
5779            this.controller.enableIntelligentTrackingPrevention(true);
5780            console.log("enableIntelligentTrackingPrevention: true");
5781          } catch (error) {
5782            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5783          }
5784        })
5785      Web({ src: 'www.example.com', controller: this.controller })
5786    }
5787  }
5788}
5789```
5790
5791### isIntelligentTrackingPreventionEnabled<sup>12+</sup>
5792
5793isIntelligentTrackingPreventionEnabled(): boolean
5794
5795获取当前Web是否启用了智能防跟踪功能。
5796
5797**系统能力:** SystemCapability.Web.Webview.Core
5798
5799**返回值:**
5800
5801| 类型    | 说明                                     |
5802| ------- | --------------------------------------- |
5803| boolean | 当前Web是否启用了智能防跟踪功能,默认为false。|
5804
5805**错误码:**
5806
5807以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5808
5809| 错误码ID | 错误信息                  |
5810| -------- | ----------------------- |
5811| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5812
5813**示例:**
5814
5815```ts
5816// xxx.ets
5817import { webview } from '@kit.ArkWeb';
5818import { BusinessError } from '@kit.BasicServicesKit';
5819
5820@Entry
5821@Component
5822struct WebComponent {
5823  controller: webview.WebviewController = new webview.WebviewController();
5824
5825  build() {
5826    Column() {
5827      Button('isIntelligentTrackingPreventionEnabled')
5828        .onClick(() => {
5829          try {
5830            let result = this.controller.isIntelligentTrackingPreventionEnabled();
5831            console.log("result: " + result);
5832          } catch (error) {
5833            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5834          }
5835        })
5836      Web({ src: 'www.example.com', controller: this.controller })
5837    }
5838  }
5839}
5840```
5841
5842### addIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5843
5844static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5845
5846添加智能防跟踪功能绕过的域名列表。
5847
5848**系统能力:** SystemCapability.Web.Webview.Core
5849
5850**参数:**
5851
5852| 参数名       | 类型           | 必填  | 说明                      |
5853| ----------- | ------------- | ---- | ------------------------ |
5854| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5855
5856**错误码:**
5857
5858以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5859
5860| 错误码ID  | 错误信息                  |
5861| -------- | ------------------------ |
5862|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5863
5864**示例:**
5865
5866```ts
5867// xxx.ets
5868import { webview } from '@kit.ArkWeb';
5869import { BusinessError } from '@kit.BasicServicesKit';
5870
5871@Entry
5872@Component
5873struct WebComponent {
5874  controller: webview.WebviewController = new webview.WebviewController();
5875
5876  build() {
5877    Column() {
5878      Button('addIntelligentTrackingPreventionBypassingList')
5879        .onClick(() => {
5880          try {
5881            let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"];
5882            webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);
5883          } catch (error) {
5884            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5885          }
5886        })
5887      Web({ src: 'www.example.com', controller: this.controller })
5888    }
5889  }
5890}
5891```
5892
5893### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5894
5895static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5896
5897删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。
5898
5899**系统能力:** SystemCapability.Web.Webview.Core
5900
5901**参数:**
5902
5903| 参数名       | 类型           | 必填  | 说明                      |
5904| ----------- | ------------- | ---- | ------------------------ |
5905| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5906
5907**错误码:**
5908
5909以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5910
5911| 错误码ID  | 错误信息                  |
5912| -------- | ------------------------ |
5913|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5914
5915**示例:**
5916
5917```ts
5918// xxx.ets
5919import { webview } from '@kit.ArkWeb';
5920import { BusinessError } from '@kit.BasicServicesKit';
5921
5922@Entry
5923@Component
5924struct WebComponent {
5925  controller: webview.WebviewController = new webview.WebviewController();
5926
5927  build() {
5928    Column() {
5929      Button('removeIntelligentTrackingPreventionBypassingList')
5930        .onClick(() => {
5931          try {
5932            let hostList = ["www.test1.com", "www.test2.com"];
5933            webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);
5934          } catch (error) {
5935            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5936          }
5937        })
5938      Web({ src: 'www.example.com', controller: this.controller })
5939    }
5940  }
5941}
5942```
5943
5944### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5945
5946static clearIntelligentTrackingPreventionBypassingList(): void
5947
5948删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。
5949
5950**系统能力:** SystemCapability.Web.Webview.Core
5951
5952**示例:**
5953
5954```ts
5955// xxx.ets
5956import { webview } from '@kit.ArkWeb';
5957
5958@Entry
5959@Component
5960struct WebComponent {
5961  controller: webview.WebviewController = new webview.WebviewController();
5962
5963  build() {
5964    Column() {
5965      Button('clearIntelligentTrackingPreventionBypassingList')
5966        .onClick(() => {
5967          webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();
5968      })
5969      Web({ src: 'www.example.com', controller: this.controller })
5970    }
5971  }
5972}
5973```
5974
5975### getDefaultUserAgent<sup>14+</sup>
5976
5977static getDefaultUserAgent(): string
5978
5979获取默认用户代理。
5980
5981此接口只允许在UI线程调用。
5982
5983**系统能力:** SystemCapability.Web.Webview.Core
5984
5985**示例:**
5986
5987```ts
5988// xxx.ets
5989import { webview } from '@kit.ArkWeb';
5990import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5991
5992export default class EntryAbility extends UIAbility {
5993  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5994    console.log("EntryAbility onCreate");
5995    webview.WebviewController.initializeWebEngine();
5996    let defaultUserAgent = webview.WebviewController.getDefaultUserAgent();
5997    console.log("defaultUserAgent: " + defaultUserAgent);
5998  }
5999}
6000```
6001
6002### enableAdsBlock<sup>12+</sup>
6003
6004enableAdsBlock(enable: boolean): void
6005
6006启用广告过滤功能,默认该功能未启用。
6007
6008**系统能力:** SystemCapability.Web.Webview.Core
6009
6010**参数:**
6011
6012| 参数名   | 类型    |  必填  | 说明                       |
6013| --------| ------- | ---- | ---------------------------|
6014|  enable | boolean | 是   | 是否启用广告过滤功能。 |
6015
6016**错误码:**
6017
6018以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6019
6020| 错误码ID | 错误信息                  |
6021| -------- | ----------------------- |
6022| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6023|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
6024
6025**示例:**
6026
6027```ts
6028// xxx.ets
6029import { webview } from '@kit.ArkWeb';
6030import { BusinessError } from '@kit.BasicServicesKit';
6031
6032@Entry
6033@Component
6034struct WebComponent {
6035  controller: webview.WebviewController = new webview.WebviewController();
6036
6037  build() {
6038    Column() {
6039      Button('enableAdsBlock')
6040        .onClick(() => {
6041          try {
6042            this.controller.enableAdsBlock(true);
6043            console.log("enableAdsBlock: true")
6044          } catch (error) {
6045            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6046          }
6047        })
6048      Web({ src: 'www.example.com', controller: this.controller })
6049    }
6050  }
6051}
6052```
6053
6054### isAdsBlockEnabled<sup>12+</sup>
6055
6056isAdsBlockEnabled() : boolean
6057
6058查询广告过滤功能是否开启,默认该功能未启用。
6059
6060**系统能力:** SystemCapability.Web.Webview.Core
6061
6062**返回值:**
6063
6064| 类型                                                         | 说明                   |
6065| ------------------------------------------------------------ | ---------------------- |
6066| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 |
6067
6068**示例:**
6069
6070```ts
6071// xxx.ets
6072import { webview } from '@kit.ArkWeb';
6073import { BusinessError } from '@kit.BasicServicesKit';
6074
6075@Entry
6076@Component
6077struct WebComponent {
6078  controller: webview.WebviewController = new webview.WebviewController();
6079
6080  build() {
6081    Column() {
6082      Button('isAdsBlockEnabled')
6083        .onClick(() => {
6084          try {
6085            let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled();
6086            console.log("isAdsBlockEnabled:", isAdsBlockEnabled);
6087          } catch (error) {
6088            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6089          }
6090        })
6091      Web({ src: 'www.example.com', controller: this.controller })
6092    }
6093  }
6094}
6095```
6096
6097### isAdsBlockEnabledForCurPage<sup>12+</sup>
6098
6099isAdsBlockEnabledForCurPage() : boolean
6100
6101查询当前网页是否开启广告过滤功能。
6102当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。
6103
6104**系统能力:** SystemCapability.Web.Webview.Core
6105
6106**返回值:**
6107
6108| 类型                                                         | 说明                   |
6109| ------------------------------------------------------------ | ---------------------- |
6110| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 |
6111
6112**示例:**
6113
6114```ts
6115// xxx.ets
6116import { webview } from '@kit.ArkWeb';
6117import { BusinessError } from '@kit.BasicServicesKit';
6118
6119@Entry
6120@Component
6121struct WebComponent {
6122  controller: webview.WebviewController = new webview.WebviewController();
6123
6124  build() {
6125    Column() {
6126      Button('isAdsBlockEnabledForCurPage')
6127        .onClick(() => {
6128          try {
6129            let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage();
6130            console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage);
6131          } catch (error) {
6132            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6133          }
6134        })
6135      Web({ src: 'www.example.com', controller: this.controller })
6136    }
6137  }
6138}
6139```
6140
6141### setRenderProcessMode<sup>12+</sup>
6142
6143static setRenderProcessMode(mode: RenderProcessMode): void
6144
6145设置ArkWeb渲染子进程模式。
6146
6147**系统能力:** SystemCapability.Web.Webview.Core
6148
6149**参数:**
6150
6151| 参数名       | 类型           | 必填  | 说明                      |
6152| ----------- | ------------- | ---- | ------------------------ |
6153| mode        | [RenderProcessMode](#renderprocessmode12)| 是   | 渲染子进程模式。可以先调用[getRenderProcessMode()](#getrenderprocessmode12)查看当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。 |
6154
6155**错误码:**
6156
6157以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6158
6159| 错误码ID  | 错误信息                  |
6160| -------- | ------------------------ |
6161|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6162
6163**示例:**
6164
6165```ts
6166// xxx.ets
6167import { webview } from '@kit.ArkWeb';
6168import { BusinessError } from '@kit.BasicServicesKit';
6169
6170@Entry
6171@Component
6172struct WebComponent {
6173  controller: webview.WebviewController = new webview.WebviewController();
6174
6175  build() {
6176    Column() {
6177      Button('setRenderProcessMode')
6178        .onClick(() => {
6179          try {
6180            webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE);
6181          } catch (error) {
6182            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6183          }
6184        })
6185      Web({ src: 'www.example.com', controller: this.controller })
6186    }
6187  }
6188}
6189```
6190### getRenderProcessMode<sup>12+</sup>
6191
6192static getRenderProcessMode(): RenderProcessMode
6193
6194查询ArkWeb的渲染子进程模式。
6195
6196**系统能力:** SystemCapability.Web.Webview.Core
6197
6198**返回值:**
6199
6200| 类型                                      | 说明                                                         |
6201| ----------------------------------------- | ------------------------------------------------------------ |
6202| [RenderProcessMode](#renderprocessmode12) | 渲染子进程模式类型。调用[getRenderProcessMode()](#getrenderprocessmode12)获取当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。 |
6203
6204
6205**示例:**
6206
6207```ts
6208// xxx.ets
6209import { webview } from '@kit.ArkWeb';
6210
6211@Entry
6212@Component
6213struct WebComponent {
6214  controller: webview.WebviewController = new webview.WebviewController();
6215
6216  build() {
6217    Column() {
6218      Button('getRenderProcessMode')
6219        .onClick(() => {
6220          let mode = webview.WebviewController.getRenderProcessMode();
6221          console.log("getRenderProcessMode: " + mode);
6222        })
6223      Web({ src: 'www.example.com', controller: this.controller })
6224    }
6225  }
6226}
6227```
6228
6229### terminateRenderProcess<sup>12+</sup>
6230
6231terminateRenderProcess(): boolean
6232
6233销毁渲染进程。
6234
6235调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。
6236
6237**系统能力:** SystemCapability.Web.Webview.Core
6238
6239**返回值:**
6240
6241| 类型                                                         | 说明                   |
6242| ------------------------------------------------------------ | ---------------------- |
6243| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。|
6244
6245**错误码:**
6246
6247以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6248
6249| 错误码ID  | 错误信息                                                      |
6250| -------- | ------------------------------------------------------------ |
6251| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6252
6253**示例:**
6254
6255```ts
6256// xxx.ets
6257import { webview } from '@kit.ArkWeb';
6258
6259@Entry
6260@Component
6261struct WebComponent {
6262  controller: webview.WebviewController = new webview.WebviewController();
6263
6264  build() {
6265    Column() {
6266      Button('terminateRenderProcess')
6267        .onClick(() => {
6268          let result = this.controller.terminateRenderProcess();
6269          console.log("terminateRenderProcess result: " + result);
6270        })
6271      Web({ src: 'www.example.com', controller: this.controller })
6272    }
6273  }
6274}
6275```
6276
6277### postUrl<sup>11+</sup>
6278
6279postUrl(url: string, postData: ArrayBuffer): void
6280
6281使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。
6282
6283**系统能力:** SystemCapability.Web.Webview.Core
6284
6285**参数:**
6286
6287| 参数名  | 类型             | 必填 | 说明                  |
6288| ------- | ---------------- | ---- | :-------------------- |
6289| url     | string | 是   | 需要加载的 URL。      |
6290| postData | ArrayBuffer | 是   | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。|
6291
6292**错误码:**
6293
6294以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6295
6296| 错误码ID | 错误信息                                                     |
6297| -------- | ------------------------------------------------------------ |
6298| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6299| 17100002 | Invalid url.                                                 |
6300| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6301
6302**示例:**
6303
6304```ts
6305// xxx.ets
6306import { webview } from '@kit.ArkWeb';
6307import { BusinessError } from '@kit.BasicServicesKit';
6308
6309class TestObj {
6310  constructor() {
6311  }
6312
6313  test(str: string): ArrayBuffer {
6314    let buf = new ArrayBuffer(str.length);
6315    let buff = new Uint8Array(buf);
6316
6317    for (let i = 0; i < str.length; i++) {
6318      buff[i] = str.charCodeAt(i);
6319    }
6320    return buf;
6321  }
6322}
6323
6324@Entry
6325@Component
6326struct WebComponent {
6327  controller: webview.WebviewController = new webview.WebviewController();
6328  @State testObjtest: TestObj = new TestObj();
6329
6330  build() {
6331    Column() {
6332      Button('postUrl')
6333        .onClick(() => {
6334          try {
6335            // 数据转化为ArrayBuffer类型。
6336            let postData = this.testObjtest.test("Name=test&Password=test");
6337            this.controller.postUrl('www.example.com', postData);
6338          } catch (error) {
6339            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6340          }
6341        })
6342      Web({ src: '', controller: this.controller })
6343    }
6344  }
6345}
6346```
6347
6348### createWebPrintDocumentAdapter<sup>11+</sup>
6349
6350createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter
6351
6352创建web相关打印功能。
6353
6354**系统能力:** SystemCapability.Web.Webview.Core
6355
6356**参数:**
6357
6358| 参数名  | 类型    | 必填 | 说明                  |
6359| ------- | ------ | ---- | :-------------------- |
6360| jobName | string | 是   | 需要打印的文件名。      |
6361
6362**返回值:**
6363
6364| 类型                 | 说明                      |
6365| -------------------- | ------------------------- |
6366| print.printDocumentAdapter | 返回打印文档的适配器。 |
6367
6368**错误码:**
6369
6370以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6371
6372| 错误码ID | 错误信息                                                                    |
6373| -------- | -------------------------------------------------------------------------- |
6374| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6375| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6376
6377**示例:**
6378
6379```ts
6380// xxx.ets
6381import { webview } from '@kit.ArkWeb';
6382import { BusinessError, print } from '@kit.BasicServicesKit';
6383
6384@Entry
6385@Component
6386struct WebComponent {
6387  controller: webview.WebviewController = new webview.WebviewController();
6388
6389  build() {
6390    Column() {
6391      Button('createWebPrintDocumentAdapter')
6392        .onClick(() => {
6393          try {
6394            let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf');
6395            print.print('example_jobid', webPrintDocadapter, null, getContext());
6396          } catch (error) {
6397            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6398          }
6399        })
6400      Web({ src: 'www.example.com', controller: this.controller })
6401    }
6402  }
6403}
6404```
6405### isIncognitoMode<sup>11+</sup>
6406
6407isIncognitoMode(): boolean
6408
6409查询当前是否是隐私模式的Webview。
6410
6411**系统能力:** SystemCapability.Web.Webview.Core
6412
6413**返回值:**
6414
6415| 类型                 | 说明                      |
6416| -------------------- | ------------------------- |
6417| boolean              | 返回是否是隐私模式的Webview。 |
6418
6419**错误码:**
6420
6421以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6422
6423| 错误码ID | 错误信息                                                                    |
6424| -------- | -------------------------------------------------------------------------- |
6425| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6426
6427**示例:**
6428
6429```ts
6430// xxx.ets
6431import { webview } from '@kit.ArkWeb';
6432import { BusinessError } from '@kit.BasicServicesKit';
6433
6434@Entry
6435@Component
6436struct WebComponent {
6437  controller: webview.WebviewController = new webview.WebviewController();
6438
6439  build() {
6440    Column() {
6441      Button('isIncognitoMode')
6442        .onClick(() => {
6443          try {
6444            let result = this.controller.isIncognitoMode();
6445            console.log('isIncognitoMode' + result);
6446          } catch (error) {
6447            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6448          }
6449        })
6450      Web({ src: 'www.example.com', controller: this.controller })
6451    }
6452  }
6453}
6454```
6455
6456### getSecurityLevel<sup>11+</sup>
6457
6458getSecurityLevel(): SecurityLevel
6459
6460获取当前网页的安全级别。
6461
6462**系统能力:** SystemCapability.Web.Webview.Core
6463
6464**返回值:**
6465
6466| 类型                                | 说明                        |
6467| ----------------------------------- | --------------------------- |
6468| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 |
6469
6470**错误码:**
6471
6472以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6473
6474| 错误码ID | 错误信息                                                     |
6475| -------- | ------------------------------------------------------------ |
6476| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6477
6478**示例:**
6479
6480```ts
6481import { webview } from '@kit.ArkWeb';
6482
6483@Entry
6484@Component
6485struct WebComponent {
6486  controller: webview.WebviewController = new webview.WebviewController();
6487
6488  build() {
6489    Column() {
6490      Web({ src: 'www.example.com', controller: this.controller })
6491        .onPageEnd((event) => {
6492          if (event) {
6493            let securityLevel = this.controller.getSecurityLevel();
6494            console.info('securityLevel: ', securityLevel);
6495          }
6496        })
6497    }
6498  }
6499}
6500```
6501
6502### setScrollable<sup>12+</sup>
6503
6504setScrollable(enable: boolean, type?: ScrollType): void
6505
6506设置网页是否允许滚动。
6507
6508**系统能力:** SystemCapability.Web.Webview.Core
6509
6510**参数:**
6511
6512| 参数名 | 类型 | 必填 | 说明               |
6513| ------ | -------- | ---- | ---------------------- |
6514| enable     | boolean   | 是   | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 |
6515| type       | [ScrollType](#scrolltype12) |  否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。|
6516
6517**错误码:**
6518
6519以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6520
6521| 错误码ID | 错误信息                                                     |
6522| -------- | ------------------------------------------------------------ |
6523| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
6524| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6525
6526**示例:**
6527
6528```ts
6529// xxx.ets
6530import { webview } from '@kit.ArkWeb';
6531import { BusinessError } from '@kit.BasicServicesKit';
6532
6533@Entry
6534@Component
6535struct WebComponent {
6536  controller: webview.WebviewController = new webview.WebviewController();
6537
6538  build() {
6539    Column() {
6540      Button('setScrollable')
6541        .onClick(() => {
6542          try {
6543            this.controller.setScrollable(true);
6544          } catch (error) {
6545            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6546          }
6547        })
6548      Web({ src: 'www.example.com', controller: this.controller })
6549    }
6550  }
6551}
6552```
6553
6554### getScrollable<sup>12+</sup>
6555
6556getScrollable(): boolean
6557
6558获取当前网页是否允许滚动。
6559
6560**系统能力:** SystemCapability.Web.Webview.Core
6561
6562**返回值:**
6563
6564| 类型   | 说明           |
6565| ------ | -------------- |
6566| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 |
6567
6568**错误码:**
6569
6570以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6571
6572| 错误码ID | 错误信息                                                     |
6573| -------- | ------------------------------------------------------------ |
6574| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6575
6576**示例:**
6577
6578```ts
6579// xxx.ets
6580import { webview } from '@kit.ArkWeb';
6581import { BusinessError } from '@kit.BasicServicesKit';
6582
6583@Entry
6584@Component
6585struct WebComponent {
6586  controller: webview.WebviewController = new webview.WebviewController();
6587
6588  build() {
6589    Column() {
6590      Button('getScrollable')
6591        .onClick(() => {
6592          try {
6593            let scrollEnabled = this.controller.getScrollable();
6594            console.log("scrollEnabled: " + scrollEnabled);
6595          } catch (error) {
6596            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6597          }
6598        })
6599      Web({ src: 'www.example.com', controller: this.controller })
6600    }
6601  }
6602}
6603```
6604
6605### setPrintBackground<sup>12+</sup>
6606
6607setPrintBackground(enable: boolean): void
6608
6609设置是否打印网页背景。
6610
6611**系统能力:** SystemCapability.Web.Webview.Core
6612
6613**参数:**
6614
6615| 参数名   | 类型    | 必填 | 说明                      |
6616| -------- | ------- | ---- | -------------------------------------- |
6617| enable | boolean | 是   | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 |
6618
6619**错误码:**
6620
6621以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6622
6623| 错误码ID | 错误信息                                                     |
6624| -------- | ------------------------------------------------------------ |
6625| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6626| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6627
6628**示例:**
6629
6630```ts
6631import { webview } from '@kit.ArkWeb';
6632import { BusinessError } from '@kit.BasicServicesKit';
6633
6634@Entry
6635@Component
6636struct WebComponent {
6637  controller: webview.WebviewController = new webview.WebviewController();
6638
6639  build() {
6640    Column() {
6641      Button('setPrintBackground')
6642        .onClick(() => {
6643          try {
6644            this.controller.setPrintBackground(false);
6645          } catch (error) {
6646            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6647          }
6648        })
6649      Web({ src: 'www.example.com', controller: this.controller })
6650    }
6651  }
6652}
6653```
6654
6655### getPrintBackground<sup>12+</sup>
6656
6657getPrintBackground(): boolean
6658
6659查询webview是否打印网页背景。
6660
6661**系统能力:** SystemCapability.Web.Webview.Core
6662
6663**返回值:**
6664
6665| 类型                 | 说明                      |
6666| -------------------- | ------------------------- |
6667| boolean              | 返回Webview是否打印网页背景。 |
6668
6669**错误码:**
6670
6671以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6672
6673| 错误码ID | 错误信息                                                     |
6674| -------- | ------------------------------------------------------------ |
6675| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6676
6677**示例:**
6678
6679```ts
6680import { webview } from '@kit.ArkWeb';
6681import { BusinessError } from '@kit.BasicServicesKit';
6682
6683@Entry
6684@Component
6685struct WebComponent {
6686  controller: webview.WebviewController = new webview.WebviewController();
6687
6688  build() {
6689    Column() {
6690      Button('setPrintBackground')
6691        .onClick(() => {
6692          try {
6693            let enable = this.controller.getPrintBackground();
6694            console.log("getPrintBackground: " + enable);
6695          } catch (error) {
6696            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6697          }
6698        })
6699      Web({ src: 'www.example.com', controller: this.controller })
6700    }
6701  }
6702}
6703```
6704
6705### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>
6706
6707getLastJavascriptProxyCallingFrameUrl(): string
6708
6709通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。
6710
6711**系统能力:** SystemCapability.Web.Webview.Core
6712
6713**错误码:**
6714
6715以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6716
6717| 错误码ID | 错误信息                                                     |
6718| -------- | ------------------------------------------------------------ |
6719| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6720
6721**示例:**
6722
6723```ts
6724// xxx.ets
6725import { webview } from '@kit.ArkWeb';
6726import { BusinessError } from '@kit.BasicServicesKit';
6727
6728class TestObj {
6729  mycontroller: webview.WebviewController;
6730
6731  constructor(controller: webview.WebviewController) {
6732    this.mycontroller = controller;
6733  }
6734
6735  test(testStr: string): string {
6736    console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6737    return testStr;
6738  }
6739
6740  toString(): void {
6741    console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6742  }
6743
6744  testNumber(testNum: number): number {
6745    console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6746    return testNum;
6747  }
6748
6749  testBool(testBol: boolean): boolean {
6750    console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6751    return testBol;
6752  }
6753}
6754
6755class WebObj {
6756  mycontroller: webview.WebviewController;
6757
6758  constructor(controller: webview.WebviewController) {
6759    this.mycontroller = controller;
6760  }
6761
6762  webTest(): string {
6763    console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6764    return "Web test";
6765  }
6766
6767  webString(): void {
6768    console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6769  }
6770}
6771
6772@Entry
6773@Component
6774struct Index {
6775  controller: webview.WebviewController = new webview.WebviewController();
6776  @State testObjtest: TestObj = new TestObj(this.controller);
6777  @State webTestObj: WebObj = new WebObj(this.controller);
6778
6779  build() {
6780    Column() {
6781      Button('refresh')
6782        .onClick(() => {
6783          try {
6784            this.controller.refresh();
6785          } catch (error) {
6786            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6787          }
6788        })
6789      Button('Register JavaScript To Window')
6790        .onClick(() => {
6791          try {
6792            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
6793            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
6794          } catch (error) {
6795            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6796          }
6797        })
6798      Button('deleteJavaScriptRegister')
6799        .onClick(() => {
6800          try {
6801            this.controller.deleteJavaScriptRegister("objName");
6802            this.controller.deleteJavaScriptRegister("objTestName");
6803          } catch (error) {
6804            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6805          }
6806        })
6807      Web({ src: $rawfile('index.html'), controller: this.controller })
6808        .javaScriptAccess(true)
6809    }
6810  }
6811}
6812```
6813
6814加载的html文件。
6815```html
6816<!-- index.html -->
6817<!DOCTYPE html>
6818<html>
6819    <meta charset="utf-8">
6820    <body>
6821      <button type="button" onclick="htmlTest()">Click Me!</button>
6822      <p id="demo"></p>
6823      <p id="webDemo"></p>
6824    </body>
6825    <script type="text/javascript">
6826    function htmlTest() {
6827      // This function call expects to return "ArkUI Web Component"
6828      let str=objName.test("webtest data");
6829      objName.testNumber(1);
6830      objName.testBool(true);
6831      document.getElementById("demo").innerHTML=str;
6832      console.log('objName.test result:'+ str)
6833
6834      // This function call expects to return "Web test"
6835      let webStr = objTestName.webTest();
6836      document.getElementById("webDemo").innerHTML=webStr;
6837      console.log('objTestName.webTest result:'+ webStr)
6838    }
6839</script>
6840</html>
6841```
6842
6843### pauseAllTimers<sup>12+</sup>
6844
6845pauseAllTimers(): void
6846
6847暂停所有WebView的定时器。
6848
6849**系统能力:** SystemCapability.Web.Webview.Core
6850
6851**错误码:**
6852
6853以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6854
6855| 错误码ID | 错误信息                                                     |
6856| -------- | ------------------------------------------------------------ |
6857| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6858
6859**示例:**
6860
6861```ts
6862import { webview } from '@kit.ArkWeb';
6863import { BusinessError } from '@kit.BasicServicesKit';
6864
6865@Entry
6866@Component
6867struct WebComponent {
6868  controller: webview.WebviewController = new webview.WebviewController();
6869
6870  build() {
6871    Column() {
6872      Row() {
6873        Button('PauseAllTimers')
6874          .onClick(() => {
6875            try {
6876              webview.WebviewController.pauseAllTimers();
6877            } catch (error) {
6878              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6879            }
6880          })
6881      }
6882      Web({ src: $rawfile("index.html"), controller: this.controller })
6883    }
6884  }
6885}
6886```
6887加载的html文件。
6888
6889```html
6890<!DOCTYPE html>
6891<html>
6892    <body>
6893        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6894        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6895        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6896    </body>
6897</html>
6898<script>
6899    var timer = null;
6900    var num = 0;
6901
6902    function startTimer() {
6903        timer = setInterval(function() {
6904            document.getElementById("show_num").value = ++num;
6905        }, 1000);
6906    }
6907</script>
6908```
6909
6910### resumeAllTimers<sup>12+</sup>
6911
6912resumeAllTimers(): void
6913
6914恢复从pauseAllTimers()接口中被暂停的所有的定时器。
6915
6916**系统能力:** SystemCapability.Web.Webview.Core
6917
6918**错误码:**
6919
6920以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6921
6922| 错误码ID | 错误信息                                                     |
6923| -------- | ------------------------------------------------------------ |
6924| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6925
6926**示例:**
6927
6928```ts
6929import { webview } from '@kit.ArkWeb';
6930import { BusinessError } from '@kit.BasicServicesKit';
6931
6932@Entry
6933@Component
6934struct WebComponent {
6935  controller: webview.WebviewController = new webview.WebviewController();
6936
6937  build() {
6938    Column() {
6939      Row() {
6940        Button('ResumeAllTimers')
6941          .onClick(() => {
6942            try {
6943              webview.WebviewController.resumeAllTimers();
6944            } catch (error) {
6945              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6946            }
6947          })
6948        Button('PauseAllTimers')
6949          .onClick(() => {
6950            try {
6951              webview.WebviewController.pauseAllTimers();
6952            } catch (error) {
6953              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6954            }
6955          })
6956      }
6957      Web({ src: $rawfile("index.html"), controller: this.controller })
6958    }
6959  }
6960}
6961```
6962加载的html文件。
6963
6964```html
6965<!DOCTYPE html>
6966<html>
6967    <body>
6968        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6969        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6970        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6971    </body>
6972</html>
6973<script>
6974    var timer = null;
6975    var num = 0;
6976
6977    function startTimer() {
6978        timer = setInterval(function() {
6979            document.getElementById("show_num").value = ++num;
6980        }, 1000);
6981    }
6982
6983    function resetTimer() {
6984        clearInterval(timer);
6985        document.getElementById("show_num").value = 0;
6986        num = 0;
6987    }
6988</script>
6989```
6990
6991### stopAllMedia<sup>12+</sup>
6992
6993stopAllMedia(): void
6994
6995控制网页所有音视频停止。
6996
6997**系统能力:** SystemCapability.Web.Webview.Core
6998
6999**错误码:**
7000
7001以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7002
7003| 错误码ID | 错误信息                                                     |
7004| -------- | ------------------------------------------------------------ |
7005| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7006
7007**示例:**
7008
7009```ts
7010// xxx.ets
7011import { webview } from '@kit.ArkWeb';
7012import { BusinessError } from '@kit.BasicServicesKit';
7013
7014@Entry
7015@Component
7016struct WebComponent {
7017  controller: webview.WebviewController = new webview.WebviewController();
7018
7019  build() {
7020    Column() {
7021      Button('stopAllMedia')
7022        .onClick(() => {
7023          try {
7024            this.controller.stopAllMedia();
7025          } catch (error) {
7026            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7027          }
7028        })
7029      Web({ src: 'www.example.com', controller: this.controller })
7030    }
7031  }
7032}
7033```
7034
7035### pauseAllMedia<sup>12+</sup>
7036
7037pauseAllMedia(): void
7038
7039控制网页所有音视频暂停。
7040
7041**系统能力:** SystemCapability.Web.Webview.Core
7042
7043**错误码:**
7044
7045以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7046
7047| 错误码ID | 错误信息                                                     |
7048| -------- | ------------------------------------------------------------ |
7049| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7050
7051**示例:**
7052
7053```ts
7054// xxx.ets
7055import { webview } from '@kit.ArkWeb';
7056import { BusinessError } from '@kit.BasicServicesKit';
7057
7058@Entry
7059@Component
7060struct WebComponent {
7061  controller: webview.WebviewController = new webview.WebviewController();
7062
7063  build() {
7064    Column() {
7065      Button('pauseAllMedia')
7066        .onClick(() => {
7067          try {
7068            this.controller.pauseAllMedia();
7069          } catch (error) {
7070            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7071          }
7072        })
7073      Web({ src: 'www.example.com', controller: this.controller })
7074    }
7075  }
7076}
7077```
7078
7079### resumeAllMedia<sup>12+</sup>
7080
7081resumeAllMedia(): void
7082
7083控制网页被pauseAllMedia接口暂停的音视频继续播放。
7084
7085**系统能力:** SystemCapability.Web.Webview.Core
7086
7087**错误码:**
7088
7089以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7090
7091| 错误码ID | 错误信息                                                     |
7092| -------- | ------------------------------------------------------------ |
7093| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7094
7095**示例:**
7096
7097```ts
7098// xxx.ets
7099import { webview } from '@kit.ArkWeb';
7100import { BusinessError } from '@kit.BasicServicesKit';
7101
7102@Entry
7103@Component
7104struct WebComponent {
7105  controller: webview.WebviewController = new webview.WebviewController();
7106
7107  build() {
7108    Column() {
7109      Button('resumeAllMedia')
7110        .onClick(() => {
7111          try {
7112            this.controller.resumeAllMedia();
7113          } catch (error) {
7114            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7115          }
7116        })
7117      Web({ src: 'www.example.com', controller: this.controller })
7118    }
7119  }
7120}
7121```
7122
7123### closeAllMediaPresentations<sup>12+</sup>
7124
7125closeAllMediaPresentations(): void
7126
7127控制网页所有全屏视频关闭。
7128
7129**系统能力:** SystemCapability.Web.Webview.Core
7130
7131**错误码:**
7132
7133以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7134
7135| 错误码ID | 错误信息                                                     |
7136| -------- | ------------------------------------------------------------ |
7137| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7138
7139**示例:**
7140
7141```ts
7142// xxx.ets
7143import { webview } from '@kit.ArkWeb';
7144import { BusinessError } from '@kit.BasicServicesKit';
7145
7146@Entry
7147@Component
7148struct WebComponent {
7149  controller: webview.WebviewController = new webview.WebviewController();
7150
7151  build() {
7152    Column() {
7153      Button('closeAllMediaPresentations')
7154        .onClick(() => {
7155          try {
7156            this.controller.closeAllMediaPresentations();
7157          } catch (error) {
7158            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7159          }
7160        })
7161      Web({ src: 'www.example.com', controller: this.controller })
7162    }
7163  }
7164}
7165```
7166
7167### getMediaPlaybackState<sup>12+</sup>
7168
7169getMediaPlaybackState(): MediaPlaybackState
7170
7171查询当前所有音视频播控状态。
7172
7173**系统能力:** SystemCapability.Web.Webview.Core
7174
7175**返回值:**
7176
7177| 类型                                        | 说明                                                      |
7178| ------------------------------------------- | --------------------------------------------------------- |
7179| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 |
7180
7181**错误码:**
7182
7183以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7184
7185| 错误码ID | 错误信息                                                     |
7186| -------- | ------------------------------------------------------------ |
7187| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7188
7189**示例:**
7190
7191```ts
7192// xxx.ets
7193import { webview } from '@kit.ArkWeb';
7194import { BusinessError } from '@kit.BasicServicesKit';
7195
7196@Entry
7197@Component
7198struct WebComponent {
7199  controller: webview.WebviewController = new webview.WebviewController();
7200
7201  build() {
7202    Column() {
7203      Button('getMediaPlaybackState')
7204        .onClick(() => {
7205          try {
7206            console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState());
7207          } catch (error) {
7208            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7209          }
7210        })
7211      Web({ src: 'www.example.com', controller: this.controller })
7212    }
7213  }
7214}
7215```
7216
7217### setWebSchemeHandler<sup>12+</sup>
7218
7219setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7220
7221为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。
7222
7223**系统能力:** SystemCapability.Web.Webview.Core
7224
7225**参数:**
7226
7227| 参数名 | 类型   | 必填 | 说明                      |
7228| ------ | ------ | ---- | :------------------------ |
7229| scheme    | string | 是   | 要拦截的协议。 |
7230| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7231
7232**错误码:**
7233
7234以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7235
7236| 错误码ID | 错误信息                                                     |
7237| -------- | ------------------------------------------------------------ |
7238| 401      | Parameter error. Possible causes: 1. Incorrect parameter types.                                    |
7239| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7240
7241**示例:**
7242
7243```ts
7244// xxx.ets
7245import { webview } from '@kit.ArkWeb';
7246import { BusinessError } from '@kit.BasicServicesKit';
7247
7248@Entry
7249@Component
7250struct WebComponent {
7251  controller: webview.WebviewController = new webview.WebviewController();
7252  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7253
7254  build() {
7255    Column() {
7256      Button('setWebSchemeHandler')
7257        .onClick(() => {
7258          try {
7259            this.controller.setWebSchemeHandler('http', this.schemeHandler);
7260          } catch (error) {
7261            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7262          }
7263        })
7264      Web({ src: 'www.example.com', controller: this.controller })
7265    }
7266  }
7267}
7268```
7269
7270### clearWebSchemeHandler<sup>12+</sup>
7271
7272clearWebSchemeHandler(): void
7273
7274清除当前Web组件设置的所有WebSchemeHandler。
7275
7276**系统能力:** SystemCapability.Web.Webview.Core
7277
7278**错误码:**
7279
7280以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7281
7282| 错误码ID | 错误信息                                                     |
7283| -------- | ------------------------------------------------------------ |
7284| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7285
7286**示例:**
7287
7288```ts
7289// xxx.ets
7290import { webview } from '@kit.ArkWeb';
7291import { BusinessError } from '@kit.BasicServicesKit';
7292
7293@Entry
7294@Component
7295struct WebComponent {
7296  controller: webview.WebviewController = new webview.WebviewController();
7297
7298  build() {
7299    Column() {
7300      Button('clearWebSchemeHandler')
7301        .onClick(() => {
7302          try {
7303            this.controller.clearWebSchemeHandler();
7304          } catch (error) {
7305            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7306          }
7307        })
7308      Web({ src: 'www.example.com', controller: this.controller })
7309    }
7310  }
7311}
7312```
7313
7314### setServiceWorkerWebSchemeHandler<sup>12+</sup>
7315
7316setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7317
7318为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。
7319
7320**系统能力:** SystemCapability.Web.Webview.Core
7321
7322**参数:**
7323
7324| 参数名 | 类型   | 必填 | 说明                      |
7325| ------ | ------ | ---- | :------------------------ |
7326| scheme    | string | 是   | 要拦截的协议。 |
7327| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7328
7329**错误码:**
7330
7331以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7332
7333| 错误码ID | 错误信息                                                     |
7334| -------- | ------------------------------------------------------------ |
7335| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
7336
7337**示例:**
7338
7339```ts
7340// xxx.ets
7341import { webview } from '@kit.ArkWeb';
7342import { BusinessError } from '@kit.BasicServicesKit';
7343
7344@Entry
7345@Component
7346struct WebComponent {
7347  controller: webview.WebviewController = new webview.WebviewController();
7348  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7349
7350  build() {
7351    Column() {
7352      Button('setWebSchemeHandler')
7353        .onClick(() => {
7354          try {
7355            webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler);
7356          } catch (error) {
7357            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7358          }
7359        })
7360      Web({ src: 'www.example.com', controller: this.controller })
7361    }
7362  }
7363}
7364```
7365
7366### clearServiceWorkerWebSchemeHandler<sup>12+</sup>
7367
7368clearServiceWorkerWebSchemeHandler(): void
7369
7370清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。
7371
7372**系统能力:** SystemCapability.Web.Webview.Core
7373
7374**示例:**
7375
7376```ts
7377// xxx.ets
7378import { webview } from '@kit.ArkWeb';
7379
7380@Entry
7381@Component
7382struct WebComponent {
7383  controller: webview.WebviewController = new webview.WebviewController();
7384
7385  build() {
7386    Column() {
7387      Button('clearServiceWorkerWebSchemeHandler')
7388        .onClick(() => {
7389          webview.WebviewController.clearServiceWorkerWebSchemeHandler();
7390        })
7391      Web({ src: 'www.example.com', controller: this.controller })
7392    }
7393  }
7394}
7395```
7396
7397### startCamera<sup>12+</sup>
7398
7399startCamera(): void
7400
7401开启当前网页摄像头捕获。
7402
7403**系统能力:** SystemCapability.Web.Webview.Core
7404
7405**错误码:**
7406
7407以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7408
7409| 错误码ID | 错误信息                                                     |
7410| -------- | ------------------------------------------------------------ |
7411| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7412
7413**示例:**
7414```ts
7415// xxx.ets
7416import { webview } from '@kit.ArkWeb';
7417import { BusinessError } from '@kit.BasicServicesKit';
7418import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
7419
7420let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
7421try {
7422  let context: Context = getContext(this) as common.UIAbilityContext;
7423  atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
7424    console.info('data:' + JSON.stringify(data));
7425    console.info('data permissions:' + data.permissions);
7426    console.info('data authResults:' + data.authResults);
7427  })
7428} catch (error) {
7429  console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7430}
7431
7432@Entry
7433@Component
7434struct WebComponent {
7435  controller: webview.WebviewController = new webview.WebviewController();
7436
7437  build() {
7438    Column() {
7439      Button("startCamera").onClick(() => {
7440        try {
7441          this.controller.startCamera();
7442        } catch (error) {
7443          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7444        }
7445      })
7446      Button("stopCamera").onClick(() => {
7447        try {
7448          this.controller.stopCamera();
7449        } catch (error) {
7450          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7451        }
7452      })
7453      Button("closeCamera").onClick(() => {
7454        try {
7455          this.controller.closeCamera();
7456        } catch (error) {
7457          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7458        }
7459      })
7460      Web({ src: $rawfile('index.html'), controller: this.controller })
7461        .onPermissionRequest((event) => {
7462          if (event) {
7463            AlertDialog.show({
7464              title: 'title',
7465              message: 'text',
7466              primaryButton: {
7467                value: 'deny',
7468                action: () => {
7469                  event.request.deny();
7470                }
7471              },
7472              secondaryButton: {
7473                value: 'onConfirm',
7474                action: () => {
7475                  event.request.grant(event.request.getAccessibleResource());
7476                }
7477              },
7478              cancel: () => {
7479                event.request.deny();
7480              }
7481            })
7482          }
7483        })
7484    }
7485  }
7486}
7487
7488```
7489加载的html文件。
7490 ```html
7491<!-- index.html -->
7492<!DOCTYPE html>
7493<html>
7494  <head>
7495    <meta charset="UTF-8">
7496  </head>
7497  <body>
7498    <video id="video" width="400px" height="400px" autoplay="autoplay">
7499    </video>
7500    <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" />
7501    <script>
7502      function getMedia() {
7503        let constraints = {
7504          video: {
7505            width: 500,
7506            height: 500
7507          },
7508          audio: true
7509        }
7510        let video = document.getElementById("video");
7511        let promise = navigator.mediaDevices.getUserMedia(constraints);
7512        promise.then(function(MediaStream) {
7513          video.srcObject = MediaStream;
7514          video.play();
7515        })
7516      }
7517    </script>
7518  </body>
7519</html>
7520 ```
7521
7522### stopCamera<sup>12+</sup>
7523
7524stopCamera(): void
7525
7526停止当前网页摄像头捕获。
7527
7528**系统能力:** SystemCapability.Web.Webview.Core
7529
7530**错误码:**
7531
7532以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7533
7534| 错误码ID | 错误信息                                                     |
7535| -------- | ------------------------------------------------------------ |
7536| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7537
7538**示例:**
7539
7540完整示例代码参考[startCamera](#startcamera12)。
7541
7542### closeCamera<sup>12+</sup>
7543
7544closeCamera(): void
7545
7546关闭当前网页摄像头捕获。
7547
7548**系统能力:** SystemCapability.Web.Webview.Core
7549
7550**错误码:**
7551
7552以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7553
7554| 错误码ID | 错误信息                                                     |
7555| -------- | ------------------------------------------------------------ |
7556| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7557
7558**示例:**
7559
7560完整示例代码参考[startCamera](#startcamera12)。
7561
7562### precompileJavaScript<sup>12+</sup>
7563
7564precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\>
7565
7566预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。
7567接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。
7568
7569**系统能力:** SystemCapability.Web.Webview.Core
7570
7571**参数:**
7572
7573| 参数名  | 类型    | 必填 | 说明                  |
7574| ------- | ------ | ---- | :-------------------- |
7575| url | string | 是   | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。      |
7576| script | string \| Uint8Array | 是   | 本地JavaScript的文本内容。内容不能为空。      |
7577| cacheOptions | [CacheOptions](#cacheoptions12) | 是   | 用于控制字节码缓存更新。      |
7578
7579**返回值:**
7580
7581| 类型                                | 说明                        |
7582| ----------------------------------- | --------------------------- |
7583| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 |
7584
7585**错误码:**
7586
7587以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7588
7589| 错误码ID | 错误信息                                                     |
7590| -------- | ------------------------------------------------------------ |
7591| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
7592| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7593
7594**示例:**
7595
7596接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例:
7597
75981. 首先,在EntryAbility中将UIContext存到localStorage中。
7599
7600   ```ts
7601   // EntryAbility.ets
7602   import { UIAbility } from '@kit.AbilityKit';
7603   import { window } from '@kit.ArkUI';
7604
7605   const localStorage: LocalStorage = new LocalStorage('uiContext');
7606
7607   export default class EntryAbility extends UIAbility {
7608     storage: LocalStorage = localStorage;
7609
7610     onWindowStageCreate(windowStage: window.WindowStage) {
7611       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
7612         if (err.code) {
7613           return;
7614         }
7615
7616         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
7617       });
7618     }
7619   }
7620   ```
7621
76222. 编写动态组件所需基础代码。
7623
7624   ```ts
7625   // DynamicComponent.ets
7626   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
7627
7628   export interface BuilderData {
7629     url: string;
7630     controller: WebviewController;
7631   }
7632
7633   const storage = LocalStorage.getShared();
7634
7635   export class NodeControllerImpl extends NodeController {
7636     private rootNode: BuilderNode<BuilderData[]> | null = null;
7637     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
7638
7639     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
7640       super();
7641       this.wrappedBuilder = wrappedBuilder;
7642     }
7643
7644     makeNode(): FrameNode | null {
7645       if (this.rootNode != null) {
7646         return this.rootNode.getFrameNode();
7647       }
7648       return null;
7649     }
7650
7651     initWeb(url: string, controller: WebviewController) {
7652       if(this.rootNode != null) {
7653         return;
7654       }
7655
7656       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
7657       if (!uiContext) {
7658         return;
7659       }
7660       this.rootNode = new BuilderNode(uiContext);
7661       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
7662     }
7663   }
7664
7665   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
7666     const baseNode = new NodeControllerImpl(wrappedBuilder);
7667     baseNode.initWeb(data.url, data.controller);
7668     return baseNode;
7669   }
7670   ```
7671
76723. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。
7673
7674   <!--code_no_check-->
7675   ```ts
7676   // PrecompileWebview.ets
7677   import { BuilderData } from "./DynamicComponent";
7678   import { Config, configs } from "./PrecompileConfig";
7679
7680   @Builder
7681   function WebBuilder(data: BuilderData) {
7682     Web({ src: data.url, controller: data.controller })
7683       .onControllerAttached(() => {
7684         precompile(data.controller, configs);
7685       })
7686       .fileAccess(true)
7687   }
7688
7689   export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7690
7691   export const precompile = async (controller: WebviewController, configs: Array<Config>) => {
7692     for (const config of configs) {
7693       let content = await readRawFile(config.localPath);
7694
7695       try {
7696         controller.precompileJavaScript(config.url, content, config.options)
7697           .then(errCode => {
7698             console.error("precompile successfully! " + errCode);
7699           }).catch((errCode: number) => {
7700             console.error("precompile failed. " + errCode);
7701         });
7702       } catch (err) {
7703         console.error("precompile failed. " + err.code + " " + err.message);
7704       }
7705     }
7706   }
7707
7708   async function readRawFile(path: string) {
7709     try {
7710       return await getContext().resourceManager.getRawFileContent(path);;
7711     } catch (err) {
7712       return new Uint8Array(0);
7713     }
7714   }
7715   ```
7716
7717JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。
7718
77194. 编写业务用组件代码。
7720
7721   <!--code_no_check-->
7722   ```ts
7723   // BusinessWebview.ets
7724   import { BuilderData } from "./DynamicComponent";
7725
7726   @Builder
7727   function WebBuilder(data: BuilderData) {
7728     // 此处组件可根据业务需要自行扩展
7729     Web({ src: data.url, controller: data.controller })
7730       .cacheMode(CacheMode.Default)
7731   }
7732
7733   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7734   ```
7735
77365. 编写资源配置信息。
7737
7738   ```ts
7739   // PrecompileConfig.ets
7740   import { webview } from '@kit.ArkWeb'
7741
7742   export interface Config {
7743     url:  string,
7744     localPath: string, // 本地资源路径
7745     options: webview.CacheOptions
7746   }
7747
7748   export let configs: Array<Config> = [
7749     {
7750       url: "https://www.example.com/example.js",
7751       localPath: "example.js",
7752       options: {
7753         responseHeaders: [
7754           { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="},
7755           { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"}
7756         ]
7757       }
7758     }
7759   ]
7760   ```
7761
77626. 在页面中使用。
7763
7764   <!--code_no_check-->
7765   ```ts
7766   // Index.ets
7767   import { webview } from '@kit.ArkWeb';
7768   import { NodeController } from '@kit.ArkUI';
7769   import { createNode } from "./DynamicComponent"
7770   import { precompileWebview } from "./PrecompileWebview"
7771   import { businessWebview } from "./BusinessWebview"
7772
7773   @Entry
7774   @Component
7775   struct Index {
7776     @State precompileNode: NodeController | undefined = undefined;
7777     precompileController: webview.WebviewController = new webview.WebviewController();
7778
7779     @State businessNode: NodeController | undefined = undefined;
7780     businessController: webview.WebviewController = new webview.WebviewController();
7781
7782     aboutToAppear(): void {
7783       // 初始化用于注入本地资源的Web组件
7784       this.precompileNode = createNode(precompileWebview,
7785         { url: "https://www.example.com/empty.html", controller: this.precompileController});
7786     }
7787
7788     build() {
7789       Column() {
7790         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
7791         Button("加载页面")
7792           .onClick(() => {
7793             this.businessNode = createNode(businessWebview, {
7794               url:  "https://www.example.com/business.html",
7795               controller: this.businessController
7796             });
7797           })
7798         // 用于业务的Web组件
7799         NodeContainer(this.businessNode);
7800       }
7801     }
7802   }
7803   ```
7804
7805当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。
7806
7807### onCreateNativeMediaPlayer<sup>12+</sup>
7808
7809onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void
7810
7811注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。
7812如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。
7813
7814**系统能力:** SystemCapability.Web.Webview.Core
7815
7816**参数:**
7817
7818| 参数名 | 类型 | 必填 | 说明 |
7819|--------|------|------|------|
7820| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 |
7821
7822**示例:**
7823
7824```ts
7825// xxx.ets
7826import { webview } from '@kit.ArkWeb';
7827
7828class ActualNativeMediaPlayerListener {
7829  handler: webview.NativeMediaPlayerHandler;
7830
7831  constructor(handler: webview.NativeMediaPlayerHandler) {
7832    this.handler = handler;
7833  }
7834
7835  onPlaying() {
7836    // 本地播放器开始播放。
7837    this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING);
7838  }
7839  onPaused() {
7840    // 本地播放器暂停播放。
7841    this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED);
7842  }
7843  onSeeking() {
7844    // 本地播放器开始执行跳转到目标时间点。
7845    this.handler.handleSeeking();
7846  }
7847  onSeekDone() {
7848    // 本地播放器 seek 完成。
7849    this.handler.handleSeekFinished();
7850  }
7851  onEnded() {
7852    // 本地播放器播放完成。
7853    this.handler.handleEnded();
7854  }
7855  onVolumeChanged() {
7856    // 获取本地播放器的音量。
7857    let volume: number = getVolume();
7858    this.handler.handleVolumeChanged(volume);
7859  }
7860  onCurrentPlayingTimeUpdate() {
7861    // 更新播放时间。
7862    let currentTime: number = getCurrentPlayingTime();
7863    // 将时间单位换算成秒。
7864    let currentTimeInSeconds = convertToSeconds(currentTime);
7865    this.handler.handleTimeUpdate(currentTimeInSeconds);
7866  }
7867  onBufferedChanged() {
7868    // 缓存发生了变化。
7869    // 获取本地播放器的缓存时长。
7870    let bufferedEndTime: number = getCurrentBufferedTime();
7871    // 将时间单位换算成秒。
7872    let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime);
7873    this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds);
7874
7875    // 检查缓存状态。
7876    // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。
7877    let lastReadyState: webview.ReadyState = getLastReadyState();
7878    let currentReadyState:  webview.ReadyState = getCurrentReadyState();
7879    if (lastReadyState != currentReadyState) {
7880      this.handler.handleReadyStateChanged(currentReadyState);
7881    }
7882  }
7883  onEnterFullscreen() {
7884    // 本地播放器进入了全屏状态。
7885    let isFullscreen: boolean = true;
7886    this.handler.handleFullscreenChanged(isFullscreen);
7887  }
7888  onExitFullscreen() {
7889    // 本地播放器退出了全屏状态。
7890    let isFullscreen: boolean = false;
7891    this.handler.handleFullscreenChanged(isFullscreen);
7892  }
7893  onUpdateVideoSize(width: number, height: number) {
7894    // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。
7895    this.handler.handleVideoSizeChanged(width, height);
7896  }
7897  onDurationChanged(duration: number) {
7898    // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。
7899    this.handler.handleDurationChanged(duration);
7900  }
7901  onError(error: webview.MediaError, errorMessage: string) {
7902    // 本地播放器出错了,通知 ArkWeb 内核。
7903    this.handler.handleError(error, errorMessage);
7904  }
7905  onNetworkStateChanged(state: webview.NetworkState) {
7906    // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。
7907    this.handler.handleNetworkStateChanged(state);
7908  }
7909  onPlaybackRateChanged(playbackRate: number) {
7910    // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。
7911    this.handler.handlePlaybackRateChanged(playbackRate);
7912  }
7913  onMutedChanged(muted: boolean) {
7914    // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。
7915    this.handler.handleMutedChanged(muted);
7916  }
7917
7918  // ... 监听本地播放器其他的状态 ...
7919}
7920
7921class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge {
7922  constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) {
7923    // 1. 创建一个本地播放器的状态监听。
7924    let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler);
7925    // 2. 创建一个本地播放器。
7926    // 3. 监听该本地播放器。
7927    // ...
7928  }
7929
7930  updateRect(x: number, y: number, width: number, height: number) {
7931    // <video> 标签的位置和大小发生了变化。
7932    // 根据该信息变化,作出相应的改变。
7933  }
7934
7935  play() {
7936    // 启动本地播放器播放。
7937  }
7938
7939  pause() {
7940    // 暂停本地播放器播放。
7941  }
7942
7943  seek(targetTime: number) {
7944    // 本地播放器跳转到指定的时间点。
7945  }
7946
7947  release() {
7948    // 销毁本地播放器。
7949  }
7950
7951  setVolume(volume: number) {
7952    // ArkWeb 内核要求调整本地播放器的音量。
7953    // 设置本地播放器的音量。
7954  }
7955
7956  setMuted(muted: boolean) {
7957    // 将本地播放器静音或取消静音。
7958  }
7959
7960  setPlaybackRate(playbackRate: number) {
7961    // 调整本地播放器的播放速度。
7962  }
7963
7964  enterFullscreen() {
7965    // 将本地播放器设置为全屏播放。
7966  }
7967
7968  exitFullscreen() {
7969    // 将本地播放器退出全屏播放。
7970  }
7971
7972  resumePlayer() {
7973    // 重新创建应用内播放器。
7974    // 恢复应用内播放器的状态信息。
7975  }
7976
7977  suspendPlayer(type: webview.SuspendType) {
7978    // 记录应用内播放器的状态信息。
7979    // 销毁应用内播放器。
7980  }
7981}
7982
7983@Entry
7984@Component
7985struct WebComponent {
7986  controller: webview.WebviewController = new webview.WebviewController()
7987  build() {
7988    Column() {
7989      Web({ src: 'www.example.com', controller: this.controller })
7990        .enableNativeMediaPlayer({enable: true, shouldOverlay: false})
7991        .onPageBegin((event) => {
7992          this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => {
7993            if (!shouldHandle(mediaInfo)) {
7994              // 本地播放器不接管该媒体。
7995              // ArkWeb 内核将用自己的播放器来播放该媒体。
7996              return null;
7997            }
7998            let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo);
7999            return nativePlayer;
8000          });
8001        })
8002    }
8003  }
8004}
8005
8006// stub
8007function getVolume() {
8008  return 1;
8009}
8010function getCurrentPlayingTime() {
8011  return 1;
8012}
8013function getCurrentBufferedTime() {
8014  return 1;
8015}
8016function convertToSeconds(input: number) {
8017  return input;
8018}
8019function getLastReadyState() {
8020  return webview.ReadyState.HAVE_NOTHING;
8021}
8022function getCurrentReadyState() {
8023  return webview.ReadyState.HAVE_NOTHING;
8024}
8025function shouldHandle(mediaInfo: webview.MediaInfo) {
8026  return true;
8027}
8028```
8029
8030### enableWholeWebPageDrawing<sup>12+</sup>
8031
8032static enableWholeWebPageDrawing(): void
8033
8034设置开启网页全量绘制能力。仅在web初始化时设置。
8035
8036**系统能力:** SystemCapability.Web.Webview.Core
8037
8038**示例:**
8039
8040```ts
8041// xxx.ets
8042import { webview } from '@kit.ArkWeb';
8043import { BusinessError } from '@kit.BasicServicesKit';
8044
8045@Entry
8046@Component
8047struct WebComponent {
8048  controller: webview.WebviewController = new webview.WebviewController();
8049
8050  aboutToAppear(): void {
8051    try {
8052      webview.WebviewController.enableWholeWebPageDrawing();
8053    } catch (error) {
8054      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8055    }
8056  }
8057
8058  build() {
8059    Column() {
8060      Web({ src: 'www.example.com', controller: this.controller })
8061    }
8062  }
8063}
8064```
8065
8066### webPageSnapshot<sup>12+</sup>
8067
8068webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void
8069
8070获取网页全量绘制结果。
8071
8072**系统能力:** SystemCapability.Web.Webview.Core
8073
8074**参数:**
8075
8076| 参数名       | 类型           | 必填  | 说明                      |
8077| ----------- | ------------- | ---- | ------------------------ |
8078| info        | [SnapshotInfo](#snapshotinfo12)| 是   | 全量绘制结果入参。 |
8079| callback        | [SnapshotResult](#snapshotresult12)| 是   | 全量绘制回调结果。 |
8080
8081**示例:**
8082
8083```ts
8084// xxx.ets
8085import { webview } from '@kit.ArkWeb';
8086import { BusinessError } from '@kit.BasicServicesKit';
8087
8088@Entry
8089@Component
8090struct WebComponent {
8091  controller: webview.WebviewController = new webview.WebviewController();
8092
8093  build() {
8094    Column() {
8095      Button('webPageSnapshot')
8096        .onClick(() => {
8097          try {
8098            this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => {
8099              if (error) {
8100                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8101                return;
8102              }
8103              if (result) {
8104                console.info(`return value is:${result}`);
8105                //开发者可以根据需要处理返回结果
8106              }
8107            });
8108          } catch (error) {
8109            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8110          }
8111        })
8112      Web({ src: 'www.example.com', controller: this.controller })
8113    }
8114  }
8115}
8116```
8117
8118### injectOfflineResources<sup>12+</sup>
8119
8120injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void
8121
8122将本地离线资源注入到内存缓存中,以提升页面首次启动速度。
8123内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。
8124正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。
8125资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。
8126以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。
8127当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。
8128
8129**系统能力:** SystemCapability.Web.Webview.Core
8130
8131**参数:**
8132
8133| 参数名  | 类型    | 必填 | 说明                  |
8134| ------- | ------ | ---- | :-------------------- |
8135| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是   | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。      |
8136
8137**错误码:**
8138
8139以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8140
8141| 错误码ID | 错误信息                                                     |
8142| -------- | ------------------------------------------------------------ |
8143| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
8144| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8145| 17100002 | Invalid url.                                                 |
8146
8147**示例:**
8148
8149接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例:
81501. 首先,在EntryAbility中将UIContext存到localStorage中。
8151
8152   ```ts
8153   // EntryAbility.ets
8154   import { UIAbility } from '@kit.AbilityKit';
8155   import { window } from '@kit.ArkUI';
8156
8157   const localStorage: LocalStorage = new LocalStorage('uiContext');
8158
8159   export default class EntryAbility extends UIAbility {
8160     storage: LocalStorage = localStorage;
8161
8162     onWindowStageCreate(windowStage: window.WindowStage) {
8163       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
8164         if (err.code) {
8165           return;
8166         }
8167
8168         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
8169       });
8170     }
8171   }
8172   ```
8173
81742. 编写动态组件所需基础代码。
8175
8176   ```ts
8177   // DynamicComponent.ets
8178   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
8179
8180   export interface BuilderData {
8181     url: string;
8182     controller: WebviewController;
8183   }
8184
8185   const storage = LocalStorage.getShared();
8186
8187   export class NodeControllerImpl extends NodeController {
8188     private rootNode: BuilderNode<BuilderData[]> | null = null;
8189     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
8190
8191     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
8192       super();
8193       this.wrappedBuilder = wrappedBuilder;
8194     }
8195
8196     makeNode(): FrameNode | null {
8197       if (this.rootNode != null) {
8198         return this.rootNode.getFrameNode();
8199       }
8200       return null;
8201     }
8202
8203     initWeb(url: string, controller: WebviewController) {
8204       if(this.rootNode != null) {
8205         return;
8206       }
8207
8208       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
8209       if (!uiContext) {
8210         return;
8211       }
8212       this.rootNode = new BuilderNode(uiContext);
8213       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
8214     }
8215   }
8216
8217   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
8218     const baseNode = new NodeControllerImpl(wrappedBuilder);
8219     baseNode.initWeb(data.url, data.controller);
8220     return baseNode;
8221   }
8222   ```
8223
82243. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。
8225
8226   <!--code_no_check-->
8227   ```ts
8228   // InjectWebview.ets
8229   import { webview } from '@kit.ArkWeb';
8230   import { resourceConfigs } from "./Resource";
8231   import { BuilderData } from "./DynamicComponent";
8232
8233   @Builder
8234   function WebBuilder(data: BuilderData) {
8235     Web({ src: data.url, controller: data.controller })
8236       .onControllerAttached(async () => {
8237         try {
8238           data.controller.injectOfflineResources(await getData ());
8239         } catch (err) {
8240           console.error("error: " + err.code + " " + err.message);
8241         }
8242       })
8243       .fileAccess(true)
8244   }
8245
8246   export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8247
8248   export async function getData() {
8249     const resourceMapArr: Array<webview.OfflineResourceMap> = [];
8250
8251     // 读取配置,从rawfile目录中读取文件内容
8252     for (let config of resourceConfigs) {
8253       let buf: Uint8Array = new Uint8Array(0);
8254       if (config.localPath) {
8255         buf = await readRawFile(config.localPath);
8256       }
8257
8258       resourceMapArr.push({
8259         urlList: config.urlList,
8260         resource: buf,
8261         responseHeaders: config.responseHeaders,
8262         type: config.type,
8263       })
8264     }
8265
8266     return resourceMapArr;
8267   }
8268
8269   export async function readRawFile(url: string) {
8270     try {
8271       return await getContext().resourceManager.getRawFileContent(url);
8272     } catch (err) {
8273       return new Uint8Array(0);
8274     }
8275   }
8276   ```
8277
82784. 编写业务用组件代码。
8279
8280   <!--code_no_check-->
8281   ```ts
8282   // BusinessWebview.ets
8283   import { BuilderData } from "./DynamicComponent";
8284
8285   @Builder
8286   function WebBuilder(data: BuilderData) {
8287     // 此处组件可根据业务需要自行扩展
8288     Web({ src: data.url, controller: data.controller })
8289       .cacheMode(CacheMode.Default)
8290   }
8291
8292   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8293   ```
8294
82955. 编写资源配置信息。
8296
8297   ```ts
8298   // Resource.ets
8299   import { webview } from '@kit.ArkWeb';
8300
8301   export interface ResourceConfig {
8302     urlList: Array<string>,
8303     type: webview.OfflineResourceType,
8304     responseHeaders: Array<Header>,
8305     localPath: string, // 本地资源存放在rawfile目录下的路径
8306   }
8307
8308   export const resourceConfigs: Array<ResourceConfig> = [
8309     {
8310       localPath: "example.png",
8311       urlList: [
8312         "https://www.example.com/",
8313         "https://www.example.com/path1/example.png",
8314         "https://www.example.com/path2/example.png",
8315       ],
8316       type: webview.OfflineResourceType.IMAGE,
8317       responseHeaders: [
8318         { headerKey: "Cache-Control", headerValue: "max-age=1000" },
8319         { headerKey: "Content-Type", headerValue: "image/png" },
8320       ]
8321     },
8322     {
8323       localPath: "example.js",
8324       urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址
8325         "https://www.example.com/example.js",
8326       ],
8327       type: webview.OfflineResourceType.CLASSIC_JS,
8328       responseHeaders: [
8329         // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头
8330         { headerKey: "Cross-Origin", headerValue:"anonymous" }
8331       ]
8332     },
8333   ];
8334   ```
8335
83366. 在页面中使用。
8337   <!--code_no_check-->
8338   ```ts
8339   // Index.ets
8340   import { webview } from '@kit.ArkWeb';
8341   import { NodeController } from '@kit.ArkUI';
8342   import { createNode } from "./DynamicComponent"
8343   import { injectWebview } from "./InjectWebview"
8344   import { businessWebview } from "./BusinessWebview"
8345
8346   @Entry
8347   @Component
8348   struct Index {
8349     @State injectNode: NodeController | undefined = undefined;
8350     injectController: webview.WebviewController = new webview.WebviewController();
8351
8352     @State businessNode: NodeController | undefined = undefined;
8353     businessController: webview.WebviewController = new webview.WebviewController();
8354
8355     aboutToAppear(): void {
8356       // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可
8357       this.injectNode = createNode(injectWebview,
8358           { url: "https://www.example.com/empty.html", controller: this.injectController});
8359     }
8360
8361     build() {
8362       Column() {
8363         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
8364         Button("加载页面")
8365           .onClick(() => {
8366             this.businessNode = createNode(businessWebview, {
8367               url: "https://www.example.com/business.html",
8368               controller: this.businessController
8369             });
8370           })
8371         // 用于业务的Web组件
8372         NodeContainer(this.businessNode);
8373       }
8374     }
8375   }
8376   ```
8377
83787. 加载的HTML网页示例。
8379
8380   ```HTML
8381   <!DOCTYPE html>
8382   <html lang="en">
8383   <head></head>
8384   <body>
8385     <img src="https://www.example.com/path1/request.png" />
8386     <img src="https://www.example.com/path2/request.png" />
8387     <script src="https://www.example.com/example.js" crossorigin="anonymous"></script>
8388   </body>
8389   </html>
8390   ```
8391
8392### setHostIP<sup>12+</sup>
8393
8394static setHostIP(hostName: string, address: string, aliveTime: number): void
8395
8396设置主机域名解析后的IP地址。
8397
8398**系统能力:** SystemCapability.Web.Webview.Core
8399
8400**参数:**
8401
8402| 参数名    | 类型 | 必填 | 说明                             |
8403| --------- | -------- | ---- | ------------------------------------ |
8404| hostName  | string   | 是   | 要添加DNS记录的主机域名。            |
8405| address   | string   | 是   | 主机域名解析地址(支持IPv4,IPv6)。 |
8406| aliveTime | number   | 是   | 缓存有效时间(秒)。                 |
8407
8408**错误码:**
8409
8410以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8411
8412| 错误码ID | 错误信息                 |
8413| -------- | ------------------------ |
8414| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8415
8416**示例:**
8417
8418请参考[clearHostIP](#clearhostip12)。
8419
8420### clearHostIP<sup>12+</sup>
8421
8422static clearHostIP(hostName: string): void
8423
8424清除指定主机域名解析后的IP地址。
8425
8426**系统能力:** SystemCapability.Web.Webview.Core
8427
8428**参数:**
8429
8430| 参数名   | 类型 | 必填 | 说明                  |
8431| -------- | -------- | ---- | ------------------------- |
8432| hostName | string   | 是   | 要清除DNS记录的主机域名。 |
8433
8434**错误码:**
8435
8436以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8437
8438| 错误码ID | 错误信息                 |
8439| -------- | ------------------------ |
8440| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8441
8442**示例:**
8443
8444```ts
8445// xxx.ets
8446import { webview } from '@kit.ArkWeb';
8447import { BusinessError } from '@kit.BasicServicesKit';
8448
8449@Entry
8450@Component
8451struct WebComponent {
8452  controller: webview.WebviewController = new webview.WebviewController();
8453
8454  build() {
8455    Column() {
8456      // url加载前设置生效.
8457      Button('setHostIP')
8458        .onClick(() => {
8459          try {
8460            webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30);
8461          } catch (error) {
8462            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8463          }
8464        })
8465      Button('clearHostIP')
8466        .onClick(() => {
8467          try {
8468            webview.WebviewController.clearHostIP('www.example.com');
8469          } catch (error) {
8470            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8471          }
8472        })
8473      Web({ src: 'www.example.com', controller: this.controller })
8474    }
8475  }
8476}
8477```
8478
8479### getSurfaceId<sup>12+</sup>
8480
8481getSurfaceId(): string
8482
8483获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。
8484
8485**系统能力:** SystemCapability.Web.Webview.Core
8486
8487**返回值:**
8488
8489| 类型   | 说明                |
8490| ------ | ------------------- |
8491| string | ArkWeb持有Surface的ID。 |
8492
8493**示例:**
8494
8495```ts
8496// xxx.ets
8497import { webview } from '@kit.ArkWeb';
8498import { image } from '@kit.ImageKit';
8499import { BusinessError } from '@kit.BasicServicesKit';
8500
8501@Entry
8502@Component
8503struct Example{
8504  controller: webview.WebviewController = new webview.WebviewController();
8505
8506  @State imagePixelMap: image.PixelMap | undefined = undefined;
8507
8508  build(){
8509    Column(){
8510      Button("截图")
8511        .onClick(()=>{
8512          try {
8513            let surfaceId = this.controller.getSurfaceId();
8514            console.log("surfaceId: " + surfaceId);
8515            if(surfaceId.length != 0) {
8516              let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}}
8517              this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region)
8518            }
8519          } catch (error) {
8520            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8521          }
8522        })
8523      Image(this.imagePixelMap)
8524        .height(100)
8525      Web({src: 'www.example.com', controller: this.controller})
8526    }
8527  }
8528}
8529```
8530
8531### setUrlTrustList<sup>12+</sup>
8532
8533setUrlTrustList(urlTrustList: string): void
8534
8535设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。
8536
8537**系统能力:** SystemCapability.Web.Webview.Core
8538
8539**参数:**
8540
8541| 参数名  | 类型    | 必填 | 说明                  |
8542| ------- | ------ | ---- | :-------------------- |
8543| 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/>} |
8544
8545**白名单json格式参数**
8546| 字段   | 参数类型 | 必填 | 参数描述                  |
8547| -------- | -------- | ---- | ------------------------- |
8548| scheme | string   | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 |
8549| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 |
8550| port | number | 否 | 可选字段,不设置即不匹配该项。 |
8551| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。|
8552
8553**错误码:**
8554
8555以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8556
8557| 错误码ID | 错误信息                                                     |
8558| -------- | ------------------------------------------------------------ |
8559| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed.                                     |
8560| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8561
8562**示例:**
8563  ```ts
8564  // xxx.ets
8565  import { webview } from '@kit.ArkWeb';
8566  import { BusinessError } from '@kit.BasicServicesKit';
8567
8568  @Entry
8569  @Component
8570  struct WebComponent {
8571    controller: webview.WebviewController = new webview.WebviewController();
8572    urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}"
8573
8574    build() {
8575      Column() {
8576        Button('Setting the trustlist')
8577          .onClick(() => {
8578            try {
8579              // 设置白名单,只允许访问trust网页
8580              this.controller.setUrlTrustList(this.urltrustList);
8581            } catch (error) {
8582              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8583            }
8584          })
8585        Button('Cancel the trustlist.')
8586          .onClick(() => {
8587            try {
8588              // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问
8589              this.controller.setUrlTrustList("");
8590            } catch (error) {
8591              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8592            }
8593          })
8594        Button('Access the trust web')
8595          .onClick(() => {
8596            try {
8597              // 白名单生效,可以访问trust网页
8598              this.controller.loadUrl('http://trust.example.com/test');
8599            } catch (error) {
8600              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8601            }
8602          })
8603        Button('Access the untrust web')
8604          .onClick(() => {
8605            try {
8606              // 白名单生效,此时不可以访问untrust网页,并弹出错误页
8607              this.controller.loadUrl('http://untrust.example.com/test');
8608            } catch (error) {
8609              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8610            }
8611          })
8612        Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => {
8613          try {
8614            // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页
8615            this.controller.setUrlTrustList(this.urltrustList);
8616          } catch (error) {
8617            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8618          }
8619        })
8620      }
8621    }
8622  }
8623  ```
8624
8625### setPathAllowingUniversalAccess<sup>12+</sup>
8626
8627setPathAllowingUniversalAccess(pathList: Array\<string\>): void
8628
8629设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileaccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一:
8630
86311.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8632
8633* /data/storage/el2/base/files/example
8634* /data/storage/el2/base/haps/entry/files/example
8635
86362.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8637
8638* /data/storage/el1/bundle/entry/resource/resfile
8639* /data/storage/el1/bundle/entry/resource/resfile/example
8640
8641当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileaccess)的行为为准。
8642
8643**系统能力:** SystemCapability.Web.Webview.Core
8644
8645**参数:**
8646
8647| 参数名   | 类型 | 必填 | 说明                  |
8648| -------- | -------- | ---- | ------------------------- |
8649| pathList | Array\<string\>   | 是   | 路径列表 |
8650
8651**错误码:**
8652
8653以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8654
8655| 错误码ID | 错误信息                 |
8656| -------- | ------------------------ |
8657| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8658| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8659
8660**示例:**
8661
8662```ts
8663// xxx.ets
8664import { webview } from '@kit.ArkWeb';
8665import { BusinessError } from '@kit.BasicServicesKit';
8666
8667@Entry
8668@Component
8669struct WebComponent {
8670  controller: WebviewController = new webview.WebviewController();
8671
8672  build() {
8673    Row() {
8674      Web({ src: "", controller: this.controller })
8675        .onControllerAttached(() => {
8676          try {
8677            // 设置允许可以跨域访问的路径列表
8678            this.controller.setPathAllowingUniversalAccess([
8679              getContext().resourceDir,
8680              getContext().filesDir + "/example"
8681            ])
8682            this.controller.loadUrl("file://" + getContext().resourceDir + "/index.html")
8683          } catch (error) {
8684            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8685          }
8686        })
8687        .javaScriptAccess(true)
8688        .fileAccess(true)
8689        .domStorageAccess(true)
8690    }
8691  }
8692}
8693
8694```
8695
8696加载的html文件,位于应用资源目录resource/rawfile/index.html8697```html
8698<!-- index.html -->
8699<!DOCTYPE html>
8700<html lang="en">
8701
8702<head>
8703    <meta charset="utf-8">
8704    <title>Demo</title>
8705    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
8706    <script>
8707		function getFile() {
8708			var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js";
8709			var xmlHttpReq = new XMLHttpRequest();
8710			xmlHttpReq.onreadystatechange = function(){
8711			    console.log("readyState:" + xmlHttpReq.readyState);
8712			    console.log("status:" + xmlHttpReq.status);
8713				if(xmlHttpReq.readyState == 4){
8714				    if (xmlHttpReq.status == 200) {
8715                // 如果ets侧正确设置路径列表,则此处能正常获取资源
8716				        const element = document.getElementById('text');
8717                        element.textContent = "load " + file + " success";
8718				    } else {
8719                // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误
8720				        const element = document.getElementById('text');
8721                        element.textContent = "load " + file + " failed";
8722				    }
8723				}
8724			}
8725			xmlHttpReq.open("GET", file);
8726			xmlHttpReq.send(null);
8727		}
8728
8729    </script>
8730</head>
8731
8732<body>
8733<div class="page">
8734    <button id="example" onclick="getFile()">stealFile</button>
8735</div>
8736<div id="text"></div>
8737</body>
8738
8739</html>
8740```
8741
8742html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/rawfile/js/script.js8743<!--code_no_check-->
8744```javascript
8745const body = document.body;
8746const element = document.createElement('div');
8747element.textContent = 'success';
8748body.appendChild(element);
8749```
8750
8751### enableBackForwardCache<sup>12+</sup>
8752
8753static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void
8754
8755开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。
8756
8757需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。
8758
8759**系统能力:**  SystemCapability.Web.Webview.Core
8760
8761**参数:**
8762
8763| 参数名          | 类型    |  必填  | 说明                                            |
8764| ---------------| ------- | ---- | ------------- |
8765| features     |  [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是   | 允许使用特定的页面进入前进后退缓存中。|
8766
8767**示例:**
8768
8769```ts
8770// EntryAbility.ets
8771import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
8772import { hilog } from '@kit.PerformanceAnalysisKit';
8773import { window } from '@kit.ArkUI';
8774import { webview } from '@kit.ArkWeb';
8775
8776export default class EntryAbility extends UIAbility {
8777    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
8778        let features = new webview.BackForwardCacheSupportedFeatures();
8779        features.nativeEmbed = true;
8780        features.mediaTakeOver = true;
8781        // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和
8782        // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。
8783        webview.WebviewController.enableBackForwardCache(features);
8784        webview.WebviewController.initializeWebEngine();
8785        AppStorage.setOrCreate("abilityWant", want);
8786    }
8787}
8788```
8789
8790### setBackForwardCacheOptions<sup>12+</sup>
8791
8792setBackForwardCacheOptions(options: BackForwardCacheOptions): void
8793
8794可以设置Web组件中前进后退缓存的相关选项。
8795
8796**系统能力:**  SystemCapability.Web.Webview.Core
8797
8798**参数:**
8799
8800| 参数名          | 类型    |  必填  | 说明                                            |
8801| ---------------| ------- | ---- | ------------- |
8802| options     |  [BackForwardCacheOptions](#backforwardcacheoptions12) | 是   | 用来控制Web组件前进后退缓存相关选项。|
8803
8804**错误码:**
8805
8806以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8807
8808| 错误码ID | 错误信息                                                     |
8809| -------- | ------------------------------------------------------------ |
8810| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8811
8812**示例:**
8813
8814```ts
8815// xxx.ts
8816import { webview } from '@kit.ArkWeb';
8817
8818@Entry
8819@Component
8820struct Index {
8821  controller: webview.WebviewController = new webview.WebviewController();
8822
8823  build() {
8824    Column() {
8825      Row() {
8826        Button("Add options").onClick((event: ClickEvent) => {
8827          let options = new webview.BackForwardCacheOptions();
8828          options.size = 3;
8829          options.timeToLive = 10;
8830          this.controller.setBackForwardCacheOptions(options);
8831        })
8832        Button("Backward").onClick((event: ClickEvent) => {
8833          this.controller.backward();
8834        })
8835        Button("Forward").onClick((event: ClickEvent) => {
8836          this.controller.forward();
8837        })
8838      }
8839      Web({ src: "https://www.example.com", controller: this.controller })
8840    }
8841    .height('100%')
8842    .width('100%')
8843  }
8844}
8845```
8846
8847### trimMemoryByPressureLevel<sup>14+</sup>
8848
8849trimMemoryByPressureLevel(level: PressureLevel): void
8850
8851根据指定的内存压力等级,主动清理Web组件占用的缓存。
8852
8853**系统能力:** SystemCapability.Web.Webview.Core
8854
8855**参数:**
8856
8857| 参数名  | 类型    | 必填 | 说明                  |
8858| ------- | ------ | ---- | :-------------------- |
8859| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。|
8860
8861**错误码:**
8862
8863以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8864
8865| 错误码ID | 错误信息                                                     |
8866| -------- | ------------------------------------------------------------ |
8867| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8868
8869**示例:**
8870```ts
8871// xxx.ets
8872import { webview } from '@kit.ArkWeb';
8873import { BusinessError } from '@kit.BasicServicesKit';
8874
8875@Entry
8876@Component
8877struct WebComponent {
8878  controller: WebviewController = new webview.WebviewController();
8879  build() {
8880    Column() {
8881      Row() {
8882        Button('trim_Memory')
8883          .onClick(() => {
8884            try {
8885              // 设置当前内存压力等级为适中,释放少量内存
8886              webview.WebviewController.trimMemoryByPressureLevel(
8887                webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE);
8888            } catch (error) {
8889              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8890            }
8891          })
8892      }.height('10%')
8893      Web({ src: 'www.example.com', controller: this.controller })
8894    }
8895  }
8896}
8897```
8898
8899### createPdf<sup>14+</sup>
8900
8901createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void
8902
8903异步callback方式获取指定网页的数据流。
8904
8905**系统能力:** SystemCapability.Web.Webview.Core
8906
8907**参数:**
8908
8909| 参数名        | 类型                                    | 必填 | 说明                    |
8910| ------------- | --------------------------------------- | ---- | ----------------------- |
8911| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。       |
8912| callback      | AsyncCallback<[PdfData](#pdfdata14)>    | 是   | 回调返回网页PDF数据流。 |
8913
8914**错误码:**
8915
8916以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8917
8918| 错误码ID | 错误信息                                                     |
8919| -------- | ------------------------------------------------------------ |
8920| 401      | Invalid input parameter.  |
8921| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8922
8923**示例**:
8924
8925```ts
8926import { fileIo as fs } from '@kit.CoreFileKit';
8927import { webview } from '@kit.ArkWeb';
8928import { BusinessError } from '@kit.BasicServicesKit';
8929import { common } from '@kit.AbilityKit';
8930
8931@Entry
8932@Component
8933struct Index {
8934  controller: webview.WebviewController = new webview.WebviewController();
8935  pdfConfig: webview.PdfConfiguration = {
8936    width: 8.27,
8937    height: 11.69,
8938    marginTop: 0,
8939    marginBottom: 0,
8940    marginRight: 0,
8941    marginLeft: 0,
8942    shouldPrintBackground: true
8943  }
8944
8945  build() {
8946    Column() {
8947      Button('SavePDF')
8948        .onClick(() => {
8949          this.controller.createPdf(
8950            this.pdfConfig,
8951            (error, result: webview.PdfData) => {
8952              try {
8953                // 获取组件上下文
8954                let context = getContext(this) as common.UIAbilityContext;
8955                // 获取沙箱路径,设置pdf文件名
8956                let filePath = context.filesDir + "/test.pdf";
8957                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
8958                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
8959                  console.info("createPDF write data to file succeed and size is:" + writeLen);
8960                }).catch((err: BusinessError) => {
8961                  console.error("createPDF write data to file failed with error message: " + err.message +
8962                    ", error code: " + err.code);
8963                }).finally(() => {
8964                  fs.closeSync(file);
8965                });
8966              } catch (resError) {
8967                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8968              }
8969            });
8970        })
8971      Web({ src: "www.example.com", controller: this.controller })
8972    }
8973  }
8974}
8975```
8976
8977### createPdf<sup>14+</sup>
8978
8979createPdf(configuration: PdfConfiguration): Promise\<PdfData\>
8980
8981以Promise方式异步获取指定网页的数据流。
8982
8983**系统能力:** SystemCapability.Web.Webview.Core
8984
8985**参数:**
8986
8987| 参数名        | 类型                                    | 必填 | 说明              |
8988| ------------- | --------------------------------------- | ---- | ----------------- |
8989| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。 |
8990
8991**返回值:**
8992
8993| 类型                           | 说明                          |
8994| ------------------------------ | ----------------------------- |
8995| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 |
8996
8997**错误码:**
8998
8999以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9000
9001| 错误码ID | 错误信息                                                     |
9002| -------- | ------------------------------------------------------------ |
9003| 401      | Invalid input parameter. |
9004| 17100001 | Init error. The WebviewController must be associated with a Web component. |
9005
9006**示例**:
9007
9008```ts
9009import { fileIo as fs } from '@kit.CoreFileKit';
9010import { webview } from '@kit.ArkWeb';
9011import { BusinessError } from '@kit.BasicServicesKit';
9012import { common } from '@kit.AbilityKit';
9013
9014@Entry
9015@Component
9016struct Index {
9017  controller: webview.WebviewController = new webview.WebviewController();
9018  pdfConfig: webview.PdfConfiguration = {
9019    width: 8.27,
9020    height: 11.69,
9021    marginTop: 0,
9022    marginBottom: 0,
9023    marginRight: 0,
9024    marginLeft: 0,
9025    shouldPrintBackground: true
9026  }
9027
9028  build() {
9029    Column() {
9030      Button('SavePDF')
9031        .onClick(() => {
9032          this.controller.createPdf(this.pdfConfig)
9033            .then((result: webview.PdfData) => {
9034              try {
9035                // 获取组件上下文
9036                let context = getContext(this) as common.UIAbilityContext;
9037                // 获取沙箱路径,设置pdf文件名
9038                let filePath = context.filesDir + "/test.pdf";
9039                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
9040                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
9041                  console.info("createPDF write data to file succeed and size is:" + writeLen);
9042                }).catch((err: BusinessError) => {
9043                  console.error("createPDF write data to file failed with error message: " + err.message +
9044                    ", error code: " + err.code);
9045                }).finally(() => {
9046                  fs.closeSync(file);
9047                });
9048              } catch (resError) {
9049                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
9050              }
9051            })
9052        })
9053      Web({ src: "www.example.com", controller: this.controller })
9054    }
9055  }
9056}
9057```
9058
9059### getScrollOffset<sup>13+</sup>
9060
9061getScrollOffset(): ScrollOffset
9062
9063获取网页当前的滚动偏移量。
9064
9065**系统能力:** SystemCapability.Web.Webview.Core
9066
9067**返回值**
9068
9069| 类型                            | 说明                   |
9070| :------------------------------ | ---------------------- |
9071| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 |
9072
9073**示例:**
9074
9075```ts
9076import { webview } from '@kit.ArkWeb';
9077import { componentUtils } from '@kit.ArkUI';
9078
9079@Entry
9080@Component
9081struct WebComponent {
9082  @State testTitle: string = 'webScroll'
9083  controller: webview.WebviewController = new webview.WebviewController();
9084  @State controllerX: number =-100;
9085  @State controllerY: number =-100;
9086  @State mode: OverScrollMode = OverScrollMode.ALWAYS;
9087
9088  build() {
9089    Column() {
9090      Row() {
9091        Text(this.testTitle)
9092          .fontSize(30)
9093          .fontWeight(FontWeight.Bold)
9094          .margin(5)
9095      }
9096      Column() {
9097        Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`)
9098      }
9099      .margin({ top: 10, bottom: 10 })
9100      Web({ src: $rawfile("scrollByTo.html"), controller: this.controller })
9101        .key("web_01")
9102        .overScrollMode(this.mode)
9103        .onTouch((event) => {
9104          this.controllerX = this.controller.getScrollOffset().x;
9105          this.controllerY = this.controller.getScrollOffset().y;
9106          let componentInfo = componentUtils.getRectangleById("web_01");
9107          let webHeight = px2vp(componentInfo.size.height);
9108          let pageHeight = this.controller.getPageHeight();
9109          if (this.controllerY < 0) {
9110            // case1:网页向下过滚动时,可直接使用ScrollOffset.y
9111            console.log(`get downwards overscroll offsetY = ${this.controllerY}`);
9112          } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) {
9113            // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量
9114            console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`);
9115          } else {
9116            // case3:网页未发生过滚动时,可直接使用ScrollOffset.y
9117            console.log(`get scroll offsetY = ${this.controllerY}`);
9118          }
9119        })
9120        .height(600)
9121    }
9122    .width('100%')
9123    .height('100%')
9124  }
9125}
9126```
9127
9128## WebCookieManager
9129
9130通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。
9131
9132### getCookie<sup>(deprecated)</sup>
9133
9134static getCookie(url: string): string
9135
9136获取指定url对应cookie的值。
9137
9138> **说明:**
9139>
9140> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代
9141
9142**系统能力:** SystemCapability.Web.Webview.Core
9143
9144**参数:**
9145
9146| 参数名 | 类型   | 必填 | 说明                      |
9147| ------ | ------ | ---- | :------------------------ |
9148| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9149
9150**返回值:**
9151
9152| 类型   | 说明                      |
9153| ------ | ------------------------- |
9154| string | 指定url对应的cookie的值。 |
9155
9156**错误码:**
9157
9158以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9159
9160| 错误码ID | 错误信息                                               |
9161| -------- | ------------------------------------------------------ |
9162| 17100002 | Invalid url.                                           |
9163| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9164
9165**示例:**
9166
9167```ts
9168// xxx.ets
9169import { webview } from '@kit.ArkWeb';
9170import { BusinessError } from '@kit.BasicServicesKit';
9171
9172@Entry
9173@Component
9174struct WebComponent {
9175  controller: webview.WebviewController = new webview.WebviewController();
9176
9177  build() {
9178    Column() {
9179      Button('getCookie')
9180        .onClick(() => {
9181          try {
9182            let value = webview.WebCookieManager.getCookie('https://www.example.com');
9183            console.log("value: " + value);
9184          } catch (error) {
9185            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9186          }
9187        })
9188      Web({ src: 'www.example.com', controller: this.controller })
9189    }
9190  }
9191}
9192```
9193
9194### fetchCookieSync<sup>11+</sup>
9195
9196static fetchCookieSync(url: string, incognito?: boolean): string
9197
9198获取指定url对应cookie的值。
9199
9200> **说明:**
9201>
9202> 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。
9203>
9204> 为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。
9205>
9206> fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。
9207
9208**系统能力:** SystemCapability.Web.Webview.Core
9209
9210**参数:**
9211
9212| 参数名 | 类型   | 必填 | 说明                      |
9213| ------ | ------ | ---- | :------------------------ |
9214| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9215| incognito    | boolean | 否   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9216
9217**返回值:**
9218
9219| 类型   | 说明                      |
9220| ------ | ------------------------- |
9221| string | 指定url对应的cookie的值。 |
9222
9223**错误码:**
9224
9225以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9226
9227| 错误码ID | 错误信息                                               |
9228| -------- | ------------------------------------------------------ |
9229| 17100002 | Invalid url.                                           |
9230| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9231
9232**示例:**
9233
9234```ts
9235// xxx.ets
9236import { webview } from '@kit.ArkWeb';
9237import { BusinessError } from '@kit.BasicServicesKit';
9238
9239@Entry
9240@Component
9241struct WebComponent {
9242  controller: webview.WebviewController = new webview.WebviewController();
9243
9244  build() {
9245    Column() {
9246      Button('fetchCookieSync')
9247        .onClick(() => {
9248          try {
9249            let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com');
9250            console.log("fetchCookieSync cookie = " + value);
9251          } catch (error) {
9252            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9253          }
9254        })
9255      Web({ src: 'www.example.com', controller: this.controller })
9256    }
9257  }
9258}
9259```
9260
9261### fetchCookie<sup>11+</sup>
9262
9263static fetchCookie(url: string, callback: AsyncCallback\<string>): void
9264
9265异步callback方式获取指定url对应cookie的值。
9266
9267**系统能力:** SystemCapability.Web.Webview.Core
9268
9269**参数:**
9270
9271| 参数名 | 类型   | 必填 | 说明                      |
9272| ------ | ------ | ---- | :------------------------ |
9273| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9274| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie |
9275
9276**错误码:**
9277
9278以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9279
9280| 错误码ID | 错误信息                                               |
9281| -------- | ------------------------------------------------------ |
9282| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9283| 17100002 | Invalid url.                                           |
9284
9285**示例:**
9286
9287```ts
9288// xxx.ets
9289import { webview } from '@kit.ArkWeb';
9290import { BusinessError } from '@kit.BasicServicesKit';
9291
9292@Entry
9293@Component
9294struct WebComponent {
9295  controller: webview.WebviewController = new webview.WebviewController();
9296
9297  build() {
9298    Column() {
9299      Button('fetchCookie')
9300        .onClick(() => {
9301          try {
9302            webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => {
9303              if (error) {
9304                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9305                return;
9306              }
9307              if (cookie) {
9308                console.log('fetchCookie cookie = ' + cookie);
9309              }
9310            })
9311          } catch (error) {
9312            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9313          }
9314        })
9315      Web({ src: 'www.example.com', controller: this.controller })
9316    }
9317  }
9318}
9319```
9320
9321### fetchCookie<sup>11+</sup>
9322
9323static fetchCookie(url: string): Promise\<string>
9324
9325以Promise方式异步获取指定url对应cookie的值。
9326
9327**系统能力:** SystemCapability.Web.Webview.Core
9328
9329**参数:**
9330
9331| 参数名 | 类型   | 必填 | 说明                      |
9332| ------ | ------ | ---- | :------------------------ |
9333| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9334
9335**返回值:**
9336
9337| 类型   | 说明                      |
9338| ------ | ------------------------- |
9339| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9340
9341**错误码:**
9342
9343以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9344
9345| 错误码ID | 错误信息                                               |
9346| -------- | ------------------------------------------------------ |
9347| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9348| 17100002 | Invalid url.                                           |
9349
9350**示例:**
9351
9352```ts
9353// xxx.ets
9354import { webview } from '@kit.ArkWeb';
9355import { BusinessError } from '@kit.BasicServicesKit';
9356
9357@Entry
9358@Component
9359struct WebComponent {
9360  controller: webview.WebviewController = new webview.WebviewController();
9361
9362  build() {
9363    Column() {
9364      Button('fetchCookie')
9365        .onClick(() => {
9366          try {
9367            webview.WebCookieManager.fetchCookie('https://www.example.com')
9368              .then(cookie => {
9369                console.log("fetchCookie cookie = " + cookie);
9370              })
9371              .catch((error: BusinessError) => {
9372                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9373              })
9374          } catch (error) {
9375            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9376          }
9377        })
9378      Web({ src: 'www.example.com', controller: this.controller })
9379    }
9380  }
9381}
9382```
9383
9384### fetchCookie<sup>14+</sup>
9385
9386static fetchCookie(url: string, incognito: boolean): Promise\<string>
9387
9388以Promise方式异步获取指定url对应cookie的值。
9389
9390**系统能力:** SystemCapability.Web.Webview.Core
9391
9392**参数:**
9393
9394| 参数名 | 类型   | 必填 | 说明                      |
9395| ------ | ------ | ---- | :------------------------ |
9396| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9397| incognito    | boolean | 是   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9398
9399**返回值:**
9400
9401| 类型   | 说明                      |
9402| ------ | ------------------------- |
9403| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9404
9405**错误码:**
9406
9407以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9408
9409| 错误码ID | 错误信息                                               |
9410| -------- | ------------------------------------------------------ |
9411| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9412| 17100002 | Invalid url.                                           |
9413
9414**示例:**
9415
9416```ts
9417// xxx.ets
9418import { webview } from '@kit.ArkWeb';
9419import { BusinessError } from '@kit.BasicServicesKit';
9420
9421@Entry
9422@Component
9423struct WebComponent {
9424  controller: webview.WebviewController = new webview.WebviewController();
9425
9426  build() {
9427    Column() {
9428      Button('fetchCookie')
9429        .onClick(() => {
9430          try {
9431            webview.WebCookieManager.fetchCookie('https://www.example.com', false)
9432              .then(cookie => {
9433                console.log("fetchCookie cookie = " + cookie);
9434              })
9435              .catch((error: BusinessError) => {
9436                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9437              })
9438          } catch (error) {
9439            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9440          }
9441        })
9442      Web({ src: 'www.example.com', controller: this.controller })
9443    }
9444  }
9445}
9446```
9447
9448### setCookie<sup>(deprecated)</sup>
9449
9450static setCookie(url: string, value: string): void
9451
9452为指定url设置单个cookie的值。
9453
9454> **说明:**
9455>
9456> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代
9457
9458**系统能力:** SystemCapability.Web.Webview.Core
9459
9460**参数:**
9461
9462| 参数名 | 类型   | 必填 | 说明                      |
9463| ------ | ------ | ---- | :------------------------ |
9464| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9465| value  | string | 是   | 要设置的cookie的值。      |
9466
9467**错误码:**
9468
9469以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9470
9471| 错误码ID | 错误信息                                               |
9472| -------- | ------------------------------------------------------ |
9473| 17100002 | Invalid url.                                           |
9474| 17100005 | Invalid cookie value.                                  |
9475| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9476
9477**示例:**
9478
9479```ts
9480// xxx.ets
9481import { webview } from '@kit.ArkWeb';
9482import { BusinessError } from '@kit.BasicServicesKit';
9483
9484@Entry
9485@Component
9486struct WebComponent {
9487  controller: webview.WebviewController = new webview.WebviewController();
9488
9489  build() {
9490    Column() {
9491      Button('setCookie')
9492        .onClick(() => {
9493          try {
9494            webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
9495          } catch (error) {
9496            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9497          }
9498        })
9499      Web({ src: 'www.example.com', controller: this.controller })
9500    }
9501  }
9502}
9503```
9504
9505### configCookieSync<sup>11+</sup>
9506
9507static configCookieSync(url: string, value: string, incognito?: boolean): void
9508
9509为指定url设置单个cookie的值。
9510
9511> **说明:**
9512>
9513> configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
9514>
9515> 同步cookie的时机建议在Web组件加载之前完成。
9516>
9517> 若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。
9518
9519**系统能力:** SystemCapability.Web.Webview.Core
9520
9521**参数:**
9522
9523| 参数名 | 类型   | 必填 | 说明                      |
9524| ------ | ------ | ---- | :------------------------ |
9525| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9526| value  | string | 是   | 要设置的cookie的值。      |
9527| incognito    | boolean | 否   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9528
9529**错误码:**
9530
9531以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9532
9533| 错误码ID | 错误信息                                               |
9534| -------- | ------------------------------------------------------ |
9535| 17100002 | Invalid url.                                           |
9536| 17100005 | Invalid cookie value.                                  |
9537| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9538
9539**示例:**
9540
9541```ts
9542// xxx.ets
9543import { webview } from '@kit.ArkWeb';
9544import { BusinessError } from '@kit.BasicServicesKit';
9545
9546@Entry
9547@Component
9548struct WebComponent {
9549  controller: webview.WebviewController = new webview.WebviewController();
9550
9551  build() {
9552    Column() {
9553      Button('configCookieSync')
9554        .onClick(() => {
9555          try {
9556            // configCookieSync每次仅支持设置单个cookie值。
9557            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b');
9558          } catch (error) {
9559            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9560          }
9561        })
9562      Web({ src: 'www.example.com', controller: this.controller })
9563    }
9564  }
9565}
9566```
9567
9568### configCookieSync<sup>14+</sup>
9569
9570static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void
9571
9572为指定url设置cookie的值。
9573
9574**系统能力:** SystemCapability.Web.Webview.Core
9575
9576**参数:**
9577
9578| 参数名 | 类型   | 必填 | 说明                      |
9579| ------ | ------ | ---- | :------------------------ |
9580| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9581| value  | string | 是   | 要设置的cookie的值。      |
9582| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9583| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9584
9585**错误码:**
9586
9587以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9588
9589| 错误码ID | 错误信息                                               |
9590| -------- | ------------------------------------------------------ |
9591| 17100002 | Invalid url.                                           |
9592| 17100005 | Invalid cookie value.                                  |
9593| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9594
9595**示例:**
9596
9597```ts
9598// xxx.ets
9599import { webview } from '@kit.ArkWeb';
9600import { BusinessError } from '@kit.BasicServicesKit';
9601
9602@Entry
9603@Component
9604struct WebComponent {
9605  controller: webview.WebviewController = new webview.WebviewController();
9606
9607  build() {
9608    Column() {
9609      Button('configCookieSync')
9610        .onClick(() => {
9611          try {
9612            // 仅支持设置单个cookie值。
9613            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false);
9614          } catch (error) {
9615            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9616          }
9617        })
9618      Web({ src: 'www.example.com', controller: this.controller })
9619    }
9620  }
9621}
9622```
9623
9624### configCookie<sup>11+</sup>
9625
9626static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void
9627
9628异步callback方式为指定url设置单个cookie的值。
9629
9630**系统能力:** SystemCapability.Web.Webview.Core
9631
9632**参数:**
9633
9634| 参数名 | 类型   | 必填 | 说明                      |
9635| ------ | ------ | ---- | :------------------------ |
9636| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9637| value  | string | 是   | 要设置的cookie的值。      |
9638| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 |
9639
9640**错误码:**
9641
9642以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9643
9644| 错误码ID | 错误信息                                               |
9645| -------- | ------------------------------------------------------ |
9646| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9647| 17100002 | Invalid url.                                           |
9648| 17100005 | Invalid cookie value.                                  |
9649
9650**示例:**
9651
9652```ts
9653// xxx.ets
9654import { webview } from '@kit.ArkWeb';
9655import { BusinessError } from '@kit.BasicServicesKit';
9656
9657@Entry
9658@Component
9659struct WebComponent {
9660  controller: webview.WebviewController = new webview.WebviewController();
9661
9662  build() {
9663    Column() {
9664      Button('configCookie')
9665        .onClick(() => {
9666          try {
9667            webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => {
9668              if (error) {
9669                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9670              }
9671            })
9672          } catch (error) {
9673            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9674          }
9675        })
9676      Web({ src: 'www.example.com', controller: this.controller })
9677    }
9678  }
9679}
9680```
9681
9682### configCookie<sup>11+</sup>
9683
9684static configCookie(url: string, value: string): Promise\<void>
9685
9686以异步Promise方式为指定url设置单个cookie的值。
9687
9688**系统能力:** SystemCapability.Web.Webview.Core
9689
9690**参数:**
9691
9692| 参数名 | 类型   | 必填 | 说明                      |
9693| ------ | ------ | ---- | :------------------------ |
9694| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9695| value  | string | 是   | 要设置的cookie的值。      |
9696
9697**返回值:**
9698
9699| 类型   | 说明                      |
9700| ------ | ------------------------- |
9701| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9702
9703**错误码:**
9704
9705以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9706
9707| 错误码ID | 错误信息                                                |
9708| -------- | ------------------------------------------------------ |
9709| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9710| 17100002 | Invalid url.                                           |
9711| 17100005 | Invalid cookie value.                                  |
9712
9713**示例:**
9714
9715```ts
9716// xxx.ets
9717import { webview } from '@kit.ArkWeb';
9718import { BusinessError } from '@kit.BasicServicesKit';
9719
9720@Entry
9721@Component
9722struct WebComponent {
9723  controller: webview.WebviewController = new webview.WebviewController();
9724
9725  build() {
9726    Column() {
9727      Button('configCookie')
9728        .onClick(() => {
9729          try {
9730            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b')
9731              .then(() => {
9732                console.log('configCookie success!');
9733              })
9734              .catch((error: BusinessError) => {
9735                console.log('error: ' + JSON.stringify(error));
9736              })
9737          } catch (error) {
9738            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9739          }
9740        })
9741      Web({ src: 'www.example.com', controller: this.controller })
9742    }
9743  }
9744}
9745```
9746
9747### configCookie<sup>14+</sup>
9748
9749static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void>
9750
9751以异步Promise方式为指定url设置单个cookie的值。
9752
9753**系统能力:** SystemCapability.Web.Webview.Core
9754
9755**参数:**
9756
9757| 参数名 | 类型   | 必填 | 说明                      |
9758| ------ | ------ | ---- | :------------------------ |
9759| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9760| value  | string | 是   | 要设置的cookie的值。      |
9761| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9762| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9763
9764**返回值:**
9765
9766| 类型   | 说明                      |
9767| ------ | ------------------------- |
9768| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9769
9770**错误码:**
9771
9772以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9773
9774| 错误码ID | 错误信息                                                |
9775| -------- | ------------------------------------------------------ |
9776| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9777| 17100002 | Invalid url.                                           |
9778| 17100005 | Invalid cookie value.                                  |
9779
9780**示例:**
9781
9782```ts
9783// xxx.ets
9784import { webview } from '@kit.ArkWeb';
9785import { BusinessError } from '@kit.BasicServicesKit';
9786
9787@Entry
9788@Component
9789struct WebComponent {
9790  controller: webview.WebviewController = new webview.WebviewController();
9791
9792  build() {
9793    Column() {
9794      Button('configCookie')
9795        .onClick(() => {
9796          try {
9797            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false)
9798              .then(() => {
9799                console.log('configCookie success!');
9800              })
9801              .catch((error: BusinessError) => {
9802                console.log('error: ' + JSON.stringify(error));
9803              })
9804          } catch (error) {
9805            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9806          }
9807        })
9808      Web({ src: 'www.example.com', controller: this.controller })
9809    }
9810  }
9811}
9812```
9813
9814### saveCookieSync<sup>15+</sup>
9815
9816static saveCookieSync(): void
9817
9818将当前存在内存中的cookie同步保存到磁盘中。
9819
9820**系统能力:** SystemCapability.Web.Webview.Core
9821
9822> **说明:**
9823>
9824> saveCookieSync用于强制将需要持久化的cookies写入磁盘。默认情况下,2in1和Tablet设备不会持久化session cookie。
9825
9826**示例:**
9827
9828```ts
9829// xxx.ets
9830import { webview } from '@kit.ArkWeb';
9831import { BusinessError } from '@kit.BasicServicesKit';
9832
9833@Entry
9834@Component
9835struct WebComponent {
9836  controller: webview.WebviewController = new webview.WebviewController();
9837
9838  build() {
9839    Column() {
9840      Button('saveCookieSync')
9841        .onClick(() => {
9842          try {
9843            webview.WebCookieManager.saveCookieSync();
9844          } catch (error) {
9845            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9846          }
9847        })
9848      Web({ src: 'www.example.com', controller: this.controller })
9849    }
9850  }
9851}
9852```
9853
9854### saveCookieAsync
9855
9856static saveCookieAsync(callback: AsyncCallback\<void>): void
9857
9858将当前存在内存中的cookie异步保存到磁盘中。
9859
9860**系统能力:** SystemCapability.Web.Webview.Core
9861
9862**参数:**
9863
9864| 参数名   | 类型                   | 必填 | 说明                                               |
9865| -------- | ---------------------- | ---- | :------------------------------------------------- |
9866| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
9867
9868**错误码:**
9869
9870以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9871
9872| 错误码ID | 错误信息                                                |
9873| -------- | ------------------------------------------------------ |
9874| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9875
9876**示例:**
9877
9878```ts
9879// xxx.ets
9880import { webview } from '@kit.ArkWeb';
9881import { BusinessError } from '@kit.BasicServicesKit';
9882
9883@Entry
9884@Component
9885struct WebComponent {
9886  controller: webview.WebviewController = new webview.WebviewController();
9887
9888  build() {
9889    Column() {
9890      Button('saveCookieAsync')
9891        .onClick(() => {
9892          try {
9893            webview.WebCookieManager.saveCookieAsync((error) => {
9894              if (error) {
9895                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9896              }
9897            })
9898          } catch (error) {
9899            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9900          }
9901        })
9902      Web({ src: 'www.example.com', controller: this.controller })
9903    }
9904  }
9905}
9906```
9907
9908### saveCookieAsync
9909
9910static saveCookieAsync(): Promise\<void>
9911
9912将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
9913
9914**系统能力:** SystemCapability.Web.Webview.Core
9915
9916**返回值:**
9917
9918| 类型             | 说明                                      |
9919| ---------------- | ----------------------------------------- |
9920| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
9921
9922**错误码:**
9923
9924以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9925
9926| 错误码ID | 错误信息                                                |
9927| -------- | ------------------------------------------------------ |
9928| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9929
9930**示例:**
9931
9932```ts
9933// xxx.ets
9934import { webview } from '@kit.ArkWeb';
9935import { BusinessError } from '@kit.BasicServicesKit';
9936
9937@Entry
9938@Component
9939struct WebComponent {
9940  controller: webview.WebviewController = new webview.WebviewController();
9941
9942  build() {
9943    Column() {
9944      Button('saveCookieAsync')
9945        .onClick(() => {
9946          try {
9947            webview.WebCookieManager.saveCookieAsync()
9948              .then(() => {
9949                console.log("saveCookieAsyncCallback success!");
9950              })
9951              .catch((error: BusinessError) => {
9952                console.error("error: " + error);
9953              });
9954          } catch (error) {
9955            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9956          }
9957        })
9958      Web({ src: 'www.example.com', controller: this.controller })
9959    }
9960  }
9961}
9962```
9963
9964### putAcceptCookieEnabled
9965
9966static putAcceptCookieEnabled(accept: boolean): void
9967
9968设置WebCookieManager实例是否拥有发送和接收cookie的权限。
9969
9970**系统能力:** SystemCapability.Web.Webview.Core
9971
9972**参数:**
9973
9974| 参数名 | 类型    | 必填 | 说明                                 |
9975| ------ | ------- | ---- | :----------------------------------- |
9976| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限,默认为true。 |
9977
9978**错误码:**
9979
9980以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9981
9982| 错误码ID | 错误信息                                                |
9983| -------- | ------------------------------------------------------ |
9984| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9985
9986**示例:**
9987
9988```ts
9989// xxx.ets
9990import { webview } from '@kit.ArkWeb';
9991import { BusinessError } from '@kit.BasicServicesKit';
9992
9993@Entry
9994@Component
9995struct WebComponent {
9996  controller: webview.WebviewController = new webview.WebviewController();
9997
9998  build() {
9999    Column() {
10000      Button('putAcceptCookieEnabled')
10001        .onClick(() => {
10002          try {
10003            webview.WebCookieManager.putAcceptCookieEnabled(false);
10004          } catch (error) {
10005            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10006          }
10007        })
10008      Web({ src: 'www.example.com', controller: this.controller })
10009    }
10010  }
10011}
10012```
10013
10014### isCookieAllowed
10015
10016static isCookieAllowed(): boolean
10017
10018获取WebCookieManager实例是否拥有发送和接收cookie的权限。
10019
10020**系统能力:** SystemCapability.Web.Webview.Core
10021
10022**返回值:**
10023
10024| 类型    | 说明                             |
10025| ------- | -------------------------------- |
10026| boolean | 是否拥有发送和接收cookie的权限,默认为true。 |
10027
10028**示例:**
10029
10030```ts
10031// xxx.ets
10032import { webview } from '@kit.ArkWeb';
10033
10034@Entry
10035@Component
10036struct WebComponent {
10037  controller: webview.WebviewController = new webview.WebviewController();
10038
10039  build() {
10040    Column() {
10041      Button('isCookieAllowed')
10042        .onClick(() => {
10043          let result = webview.WebCookieManager.isCookieAllowed();
10044          console.log("result: " + result);
10045        })
10046      Web({ src: 'www.example.com', controller: this.controller })
10047    }
10048  }
10049}
10050```
10051
10052### putAcceptThirdPartyCookieEnabled
10053
10054static putAcceptThirdPartyCookieEnabled(accept: boolean): void
10055
10056设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
10057
10058**系统能力:** SystemCapability.Web.Webview.Core
10059
10060**参数:**
10061
10062| 参数名 | 类型    | 必填 | 说明                                       |
10063| ------ | ------- | ---- | :----------------------------------------- |
10064| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 |
10065
10066**错误码:**
10067
10068以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10069
10070| 错误码ID | 错误信息                                                |
10071| -------- | ------------------------------------------------------ |
10072| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10073
10074**示例:**
10075
10076```ts
10077// xxx.ets
10078import { webview } from '@kit.ArkWeb';
10079import { BusinessError } from '@kit.BasicServicesKit';
10080
10081@Entry
10082@Component
10083struct WebComponent {
10084  controller: webview.WebviewController = new webview.WebviewController();
10085
10086  build() {
10087    Column() {
10088      Button('putAcceptThirdPartyCookieEnabled')
10089        .onClick(() => {
10090          try {
10091            webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
10092          } catch (error) {
10093            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10094          }
10095        })
10096      Web({ src: 'www.example.com', controller: this.controller })
10097    }
10098  }
10099}
10100```
10101
10102### isThirdPartyCookieAllowed
10103
10104static isThirdPartyCookieAllowed(): boolean
10105
10106获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
10107
10108**系统能力:** SystemCapability.Web.Webview.Core
10109
10110**返回值:**
10111
10112| 类型    | 说明                                   |
10113| ------- | -------------------------------------- |
10114| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 |
10115
10116**示例:**
10117
10118```ts
10119// xxx.ets
10120import { webview } from '@kit.ArkWeb';
10121
10122@Entry
10123@Component
10124struct WebComponent {
10125  controller: webview.WebviewController = new webview.WebviewController();
10126
10127  build() {
10128    Column() {
10129      Button('isThirdPartyCookieAllowed')
10130        .onClick(() => {
10131          let result = webview.WebCookieManager.isThirdPartyCookieAllowed();
10132          console.log("result: " + result);
10133        })
10134      Web({ src: 'www.example.com', controller: this.controller })
10135    }
10136  }
10137}
10138```
10139
10140### existCookie
10141
10142static existCookie(incognito?: boolean): boolean
10143
10144获取是否存在cookie。
10145
10146**系统能力:** SystemCapability.Web.Webview.Core
10147
10148**参数:**
10149
10150| 参数名 | 类型    | 必填 | 说明                                       |
10151| ------ | ------- | ---- | :----------------------------------------- |
10152| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 |
10153
10154**返回值:**
10155
10156| 类型    | 说明                                   |
10157| ------- | -------------------------------------- |
10158| boolean | true表示存在cookie,false表示不存在cookie。 |
10159
10160**示例:**
10161
10162```ts
10163// xxx.ets
10164import { webview } from '@kit.ArkWeb';
10165
10166@Entry
10167@Component
10168struct WebComponent {
10169  controller: webview.WebviewController = new webview.WebviewController();
10170
10171  build() {
10172    Column() {
10173      Button('existCookie')
10174        .onClick(() => {
10175          let result = webview.WebCookieManager.existCookie();
10176          console.log("result: " + result);
10177        })
10178      Web({ src: 'www.example.com', controller: this.controller })
10179    }
10180  }
10181}
10182```
10183
10184### deleteEntireCookie<sup>(deprecated)</sup>
10185
10186static deleteEntireCookie(): void
10187
10188清除所有cookie。
10189
10190> **说明:**
10191>
10192> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代
10193
10194**系统能力:** SystemCapability.Web.Webview.Core
10195
10196**示例:**
10197
10198```ts
10199// xxx.ets
10200import { webview } from '@kit.ArkWeb';
10201
10202@Entry
10203@Component
10204struct WebComponent {
10205  controller: webview.WebviewController = new webview.WebviewController();
10206
10207  build() {
10208    Column() {
10209      Button('deleteEntireCookie')
10210        .onClick(() => {
10211          webview.WebCookieManager.deleteEntireCookie();
10212        })
10213      Web({ src: 'www.example.com', controller: this.controller })
10214    }
10215  }
10216}
10217```
10218
10219### clearAllCookiesSync<sup>11+</sup>
10220
10221static clearAllCookiesSync(incognito?: boolean): void
10222
10223清除所有cookie。
10224
10225**系统能力:** SystemCapability.Web.Webview.Core
10226
10227**参数:**
10228
10229| 参数名 | 类型    | 必填 | 说明                                       |
10230| ------ | ------- | ---- | :----------------------------------------- |
10231| incognito    | boolean | 否   | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 |
10232
10233**示例:**
10234
10235```ts
10236// xxx.ets
10237import { webview } from '@kit.ArkWeb';
10238
10239@Entry
10240@Component
10241struct WebComponent {
10242  controller: webview.WebviewController = new webview.WebviewController();
10243
10244  build() {
10245    Column() {
10246      Button('clearAllCookiesSync')
10247        .onClick(() => {
10248          webview.WebCookieManager.clearAllCookiesSync();
10249        })
10250      Web({ src: 'www.example.com', controller: this.controller })
10251    }
10252  }
10253}
10254```
10255
10256### clearAllCookies<sup>11+</sup>
10257
10258static clearAllCookies(callback: AsyncCallback\<void>): void
10259
10260异步callback方式清除所有cookie。
10261
10262**系统能力:** SystemCapability.Web.Webview.Core
10263
10264**参数:**
10265
10266| 参数名   | 类型                   | 必填 | 说明                                               |
10267| -------- | ---------------------- | ---- | :------------------------------------------------- |
10268| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有cookie是否成功。 |
10269
10270**错误码:**
10271
10272以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10273
10274| 错误码ID | 错误信息                                                |
10275| -------- | ------------------------------------------------------ |
10276| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10277
10278**示例:**
10279
10280```ts
10281// xxx.ets
10282import { webview } from '@kit.ArkWeb';
10283import { BusinessError } from '@kit.BasicServicesKit';
10284
10285@Entry
10286@Component
10287struct WebComponent {
10288  controller: webview.WebviewController = new webview.WebviewController();
10289
10290  build() {
10291    Column() {
10292      Button('clearAllCookies')
10293        .onClick(() => {
10294          try {
10295            webview.WebCookieManager.clearAllCookies((error) => {
10296              if (error) {
10297                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10298              }
10299            })
10300          } catch (error) {
10301            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10302          }
10303        })
10304      Web({ src: 'www.example.com', controller: this.controller })
10305    }
10306  }
10307}
10308```
10309
10310### clearAllCookies<sup>11+</sup>
10311
10312static clearAllCookies(): Promise\<void>
10313
10314异步promise方式清除所有cookie。
10315
10316**系统能力:** SystemCapability.Web.Webview.Core
10317
10318**返回值:**
10319
10320| 类型             | 说明                                      |
10321| ---------------- | ----------------------------------------- |
10322| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 |
10323
10324**错误码:**
10325
10326以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10327
10328| 错误码ID | 错误信息                                                |
10329| -------- | ------------------------------------------------------ |
10330| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10331
10332**示例:**
10333
10334```ts
10335// xxx.ets
10336import { webview } from '@kit.ArkWeb';
10337import { BusinessError } from '@kit.BasicServicesKit';
10338
10339@Entry
10340@Component
10341struct WebComponent {
10342  controller: webview.WebviewController = new webview.WebviewController();
10343
10344  build() {
10345    Column() {
10346      Button('clearAllCookies')
10347        .onClick(() => {
10348          try {
10349            webview.WebCookieManager.clearAllCookies()
10350              .then(() => {
10351                console.log("clearAllCookies success!");
10352              })
10353              .catch((error: BusinessError) => {
10354                console.error("error: " + error);
10355              });
10356          } catch (error) {
10357            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10358          }
10359        })
10360      Web({ src: 'www.example.com', controller: this.controller })
10361    }
10362  }
10363}
10364```
10365
10366### deleteSessionCookie<sup>(deprecated)</sup>
10367
10368static deleteSessionCookie(): void
10369
10370清除所有会话cookie。
10371
10372> **说明:**
10373>
10374> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代
10375
10376**系统能力:** SystemCapability.Web.Webview.Core
10377
10378**示例:**
10379
10380```ts
10381// xxx.ets
10382import { webview } from '@kit.ArkWeb';
10383
10384@Entry
10385@Component
10386struct WebComponent {
10387  controller: webview.WebviewController = new webview.WebviewController();
10388
10389  build() {
10390    Column() {
10391      Button('deleteSessionCookie')
10392        .onClick(() => {
10393          webview.WebCookieManager.deleteSessionCookie();
10394        })
10395      Web({ src: 'www.example.com', controller: this.controller })
10396    }
10397  }
10398}
10399```
10400
10401### clearSessionCookieSync<sup>11+</sup>
10402
10403static clearSessionCookieSync(): void
10404
10405清除所有会话cookie。
10406
10407**系统能力:** SystemCapability.Web.Webview.Core
10408
10409**示例:**
10410
10411```ts
10412// xxx.ets
10413import { webview } from '@kit.ArkWeb';
10414
10415@Entry
10416@Component
10417struct WebComponent {
10418  controller: webview.WebviewController = new webview.WebviewController();
10419
10420  build() {
10421    Column() {
10422      Button('clearSessionCookieSync')
10423        .onClick(() => {
10424          webview.WebCookieManager.clearSessionCookieSync();
10425        })
10426      Web({ src: 'www.example.com', controller: this.controller })
10427    }
10428  }
10429}
10430```
10431
10432### clearSessionCookie<sup>11+</sup>
10433
10434static clearSessionCookie(callback: AsyncCallback\<void>): void
10435
10436异步callback方式清除所有会话cookie。
10437
10438**系统能力:** SystemCapability.Web.Webview.Core
10439
10440**参数:**
10441
10442| 参数名   | 类型                   | 必填 | 说明                                               |
10443| -------- | ---------------------- | ---- | :------------------------------------------------- |
10444| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有会话cookie是否成功。 |
10445
10446**错误码:**
10447
10448以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10449
10450| 错误码ID | 错误信息                                                |
10451| -------- | ------------------------------------------------------ |
10452| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10453
10454**示例:**
10455
10456```ts
10457// xxx.ets
10458import { webview } from '@kit.ArkWeb';
10459import { BusinessError } from '@kit.BasicServicesKit';
10460
10461@Entry
10462@Component
10463struct WebComponent {
10464  controller: webview.WebviewController = new webview.WebviewController();
10465
10466  build() {
10467    Column() {
10468      Button('clearSessionCookie')
10469        .onClick(() => {
10470          try {
10471            webview.WebCookieManager.clearSessionCookie((error) => {
10472              if (error) {
10473                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10474              }
10475            })
10476          } catch (error) {
10477            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10478          }
10479        })
10480      Web({ src: 'www.example.com', controller: this.controller })
10481    }
10482  }
10483}
10484```
10485
10486### clearSessionCookie<sup>11+</sup>
10487
10488static clearSessionCookie(): Promise\<void>
10489
10490异步promise方式清除所有会话cookie。
10491
10492**系统能力:** SystemCapability.Web.Webview.Core
10493
10494**返回值:**
10495
10496| 类型             | 说明                                      |
10497| ---------------- | ----------------------------------------- |
10498| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 |
10499
10500**错误码:**
10501
10502以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10503
10504| 错误码ID | 错误信息                                                |
10505| -------- | ------------------------------------------------------ |
10506| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10507
10508**示例:**
10509
10510```ts
10511// xxx.ets
10512import { webview } from '@kit.ArkWeb';
10513import { BusinessError } from '@kit.BasicServicesKit';
10514
10515@Entry
10516@Component
10517struct WebComponent {
10518  controller: webview.WebviewController = new webview.WebviewController();
10519
10520  build() {
10521    Column() {
10522      Button('clearSessionCookie')
10523        .onClick(() => {
10524          try {
10525            webview.WebCookieManager.clearSessionCookie()
10526              .then(() => {
10527                console.log("clearSessionCookie success!");
10528              })
10529              .catch((error: BusinessError) => {
10530                console.error("error: " + error);
10531              });
10532          } catch (error) {
10533            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10534          }
10535        })
10536      Web({ src: 'www.example.com', controller: this.controller })
10537    }
10538  }
10539}
10540```
10541
10542## WebStorage
10543
10544通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
10545
10546> **说明:**
10547>
10548> 目前调用WebStorage下的方法,都需要先加载Web组件。
10549
10550### deleteOrigin
10551
10552static deleteOrigin(origin: string): void
10553
10554清除指定源所使用的存储。
10555
10556**系统能力:** SystemCapability.Web.Webview.Core
10557
10558**参数:**
10559
10560| 参数名 | 类型   | 必填 | 说明                     |
10561| ------ | ------ | ---- | ------------------------ |
10562| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
10563
10564**错误码:**
10565
10566以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10567
10568| 错误码ID | 错误信息                                               |
10569| -------- | ------------------------------------------------------ |
10570| 17100011 | Invalid origin.                             |
10571| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10572
10573**示例:**
10574
10575```ts
10576// xxx.ets
10577import { webview } from '@kit.ArkWeb';
10578import { BusinessError } from '@kit.BasicServicesKit';
10579
10580@Entry
10581@Component
10582struct WebComponent {
10583  controller: webview.WebviewController = new webview.WebviewController();
10584  origin: string = "resource://rawfile/";
10585
10586  build() {
10587    Column() {
10588      Button('deleteOrigin')
10589        .onClick(() => {
10590          try {
10591            webview.WebStorage.deleteOrigin(this.origin);
10592          } catch (error) {
10593            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10594          }
10595
10596        })
10597      Web({ src: $rawfile('index.html'), controller: this.controller })
10598        .databaseAccess(true)
10599    }
10600  }
10601}
10602```
10603
10604加载的html文件。
10605 ```html
10606  <!-- index.html -->
10607  <!DOCTYPE html>
10608  <html>
10609  <head>
10610    <meta charset="UTF-8">
10611    <title>test</title>
10612    <script type="text/javascript">
10613
10614      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
10615      var msg;
10616
10617      db.transaction(function(tx){
10618        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
10619        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
10620        msg = '<p>数据表已创建,且插入了两条数据。</p>';
10621
10622        document.querySelector('#status').innerHTML = msg;
10623      });
10624
10625      db.transaction(function(tx){
10626        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
10627          var len = results.rows.length,i;
10628          msg = "<p>查询记录条数:" + len + "</p>";
10629
10630          document.querySelector('#status').innerHTML += msg;
10631
10632              for(i = 0; i < len; i++){
10633                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
10634
10635          document.querySelector('#status').innerHTML += msg;
10636          }
10637        },null);
10638      });
10639
10640      </script>
10641  </head>
10642  <body>
10643  <div id="status" name="status">状态信息</div>
10644  </body>
10645  </html>
10646 ```
10647
10648### getOrigins
10649
10650static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void
10651
10652以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
10653
10654**系统能力:** SystemCapability.Web.Webview.Core
10655
10656**参数:**
10657
10658| 参数名   | 类型                                   | 必填 | 说明                                                   |
10659| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
10660| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10661
10662**错误码:**
10663
10664以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10665
10666| 错误码ID | 错误信息                                               |
10667| -------- | ------------------------------------------------------ |
10668| 17100012 | Invalid web storage origin.                             |
10669| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10670
10671**示例:**
10672
10673```ts
10674// xxx.ets
10675import { webview } from '@kit.ArkWeb';
10676import { BusinessError } from '@kit.BasicServicesKit';
10677
10678@Entry
10679@Component
10680struct WebComponent {
10681  controller: webview.WebviewController = new webview.WebviewController();
10682
10683  build() {
10684    Column() {
10685      Button('getOrigins')
10686        .onClick(() => {
10687          try {
10688            webview.WebStorage.getOrigins((error, origins) => {
10689              if (error) {
10690                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10691                return;
10692              }
10693              for (let i = 0; i < origins.length; i++) {
10694                console.log('origin: ' + origins[i].origin);
10695                console.log('usage: ' + origins[i].usage);
10696                console.log('quota: ' + origins[i].quota);
10697              }
10698            })
10699          } catch (error) {
10700            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10701          }
10702
10703        })
10704      Web({ src: $rawfile('index.html'), controller: this.controller })
10705        .databaseAccess(true)
10706    }
10707  }
10708}
10709```
10710
10711加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10712
10713### getOrigins
10714
10715static getOrigins(): Promise\<Array\<WebStorageOrigin>>
10716
10717以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
10718
10719**系统能力:** SystemCapability.Web.Webview.Core
10720
10721**返回值:**
10722
10723| 类型                             | 说明                                                         |
10724| -------------------------------- | ------------------------------------------------------------ |
10725| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10726
10727**错误码:**
10728
10729以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10730
10731| 错误码ID | 错误信息                                               |
10732| -------- | ------------------------------------------------------ |
10733| 17100012 | Invalid web storage origin.                             |
10734| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10735
10736**示例:**
10737
10738```ts
10739// xxx.ets
10740import { webview } from '@kit.ArkWeb';
10741import { BusinessError } from '@kit.BasicServicesKit';
10742
10743@Entry
10744@Component
10745struct WebComponent {
10746  controller: webview.WebviewController = new webview.WebviewController();
10747
10748  build() {
10749    Column() {
10750      Button('getOrigins')
10751        .onClick(() => {
10752          try {
10753            webview.WebStorage.getOrigins()
10754              .then(origins => {
10755                for (let i = 0; i < origins.length; i++) {
10756                  console.log('origin: ' + origins[i].origin);
10757                  console.log('usage: ' + origins[i].usage);
10758                  console.log('quota: ' + origins[i].quota);
10759                }
10760              })
10761              .catch((e: BusinessError) => {
10762                console.log('error: ' + JSON.stringify(e));
10763              })
10764          } catch (error) {
10765            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10766          }
10767
10768        })
10769      Web({ src: $rawfile('index.html'), controller: this.controller })
10770        .databaseAccess(true)
10771    }
10772  }
10773}
10774```
10775
10776加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10777
10778### getOriginQuota
10779
10780static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void
10781
10782使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10783
10784**系统能力:** SystemCapability.Web.Webview.Core
10785
10786**参数:**
10787
10788| 参数名   | 类型                  | 必填 | 说明               |
10789| -------- | --------------------- | ---- | ------------------ |
10790| origin   | string                | 是   | 指定源的字符串索引 |
10791| callback | AsyncCallback\<number> | 是   | 指定源的存储配额   |
10792
10793**错误码:**
10794
10795以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10796
10797| 错误码ID | 错误信息                                               |
10798| -------- | ------------------------------------------------------ |
10799| 17100011 | Invalid origin.                             |
10800| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10801
10802**示例:**
10803
10804```ts
10805// xxx.ets
10806import { webview } from '@kit.ArkWeb';
10807import { BusinessError } from '@kit.BasicServicesKit';
10808
10809@Entry
10810@Component
10811struct WebComponent {
10812  controller: webview.WebviewController = new webview.WebviewController();
10813  origin: string = "resource://rawfile/";
10814
10815  build() {
10816    Column() {
10817      Button('getOriginQuota')
10818        .onClick(() => {
10819          try {
10820            webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
10821              if (error) {
10822                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10823                return;
10824              }
10825              console.log('quota: ' + quota);
10826            })
10827          } catch (error) {
10828            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10829          }
10830
10831        })
10832      Web({ src: $rawfile('index.html'), controller: this.controller })
10833        .databaseAccess(true)
10834    }
10835  }
10836}
10837```
10838
10839加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10840
10841### getOriginQuota
10842
10843static getOriginQuota(origin: string): Promise\<number>
10844
10845以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10846
10847**系统能力:** SystemCapability.Web.Webview.Core
10848
10849**参数:**
10850
10851| 参数名 | 类型   | 必填 | 说明               |
10852| ------ | ------ | ---- | ------------------ |
10853| origin | string | 是   | 指定源的字符串索引 |
10854
10855**返回值:**
10856
10857| 类型            | 说明                                    |
10858| --------------- | --------------------------------------- |
10859| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
10860
10861**错误码:**
10862
10863以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10864
10865| 错误码ID | 错误信息                                               |
10866| -------- | ------------------------------------------------------ |
10867| 17100011 | Invalid origin.                             |
10868| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10869
10870**示例:**
10871
10872```ts
10873// xxx.ets
10874import { webview } from '@kit.ArkWeb';
10875import { BusinessError } from '@kit.BasicServicesKit';
10876
10877@Entry
10878@Component
10879struct WebComponent {
10880  controller: webview.WebviewController = new webview.WebviewController();
10881  origin: string = "resource://rawfile/";
10882
10883  build() {
10884    Column() {
10885      Button('getOriginQuota')
10886        .onClick(() => {
10887          try {
10888            webview.WebStorage.getOriginQuota(this.origin)
10889              .then(quota => {
10890                console.log('quota: ' + quota);
10891              })
10892              .catch((e: BusinessError) => {
10893                console.log('error: ' + JSON.stringify(e));
10894              })
10895          } catch (error) {
10896            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10897          }
10898
10899        })
10900      Web({ src: $rawfile('index.html'), controller: this.controller })
10901        .databaseAccess(true)
10902    }
10903  }
10904}
10905```
10906
10907加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10908
10909### getOriginUsage
10910
10911static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void
10912
10913以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10914
10915**系统能力:** SystemCapability.Web.Webview.Core
10916
10917**参数:**
10918
10919| 参数名   | 类型                  | 必填 | 说明               |
10920| -------- | --------------------- | ---- | ------------------ |
10921| origin   | string                | 是   | 指定源的字符串索引 |
10922| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
10923
10924**错误码:**
10925
10926以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10927
10928| 错误码ID | 错误信息                                               |
10929| -------- | ------------------------------------------------------ |
10930| 17100011 | Invalid origin.                             |
10931| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10932
10933**示例:**
10934
10935```ts
10936// xxx.ets
10937import { webview } from '@kit.ArkWeb';
10938import { BusinessError } from '@kit.BasicServicesKit';
10939
10940@Entry
10941@Component
10942struct WebComponent {
10943  controller: webview.WebviewController = new webview.WebviewController();
10944  origin: string = "resource://rawfile/";
10945
10946  build() {
10947    Column() {
10948      Button('getOriginUsage')
10949        .onClick(() => {
10950          try {
10951            webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
10952              if (error) {
10953                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10954                return;
10955              }
10956              console.log('usage: ' + usage);
10957            })
10958          } catch (error) {
10959            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10960          }
10961
10962        })
10963      Web({ src: $rawfile('index.html'), controller: this.controller })
10964        .databaseAccess(true)
10965    }
10966  }
10967}
10968```
10969
10970加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10971
10972### getOriginUsage
10973
10974static getOriginUsage(origin: string): Promise\<number>
10975
10976以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10977
10978**系统能力:** SystemCapability.Web.Webview.Core
10979
10980**参数:**
10981
10982| 参数名 | 类型   | 必填 | 说明               |
10983| ------ | ------ | ---- | ------------------ |
10984| origin | string | 是   | 指定源的字符串索引 |
10985
10986**返回值:**
10987
10988| 类型            | 说明                                  |
10989| --------------- | ------------------------------------- |
10990| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
10991
10992**错误码:**
10993
10994以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10995
10996| 错误码ID | 错误信息                                              |
10997| -------- | ----------------------------------------------------- |
10998| 17100011 | Invalid origin.                            |
10999| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11000
11001**示例:**
11002
11003```ts
11004// xxx.ets
11005import { webview } from '@kit.ArkWeb';
11006import { BusinessError } from '@kit.BasicServicesKit';
11007
11008@Entry
11009@Component
11010struct WebComponent {
11011  controller: webview.WebviewController = new webview.WebviewController();
11012  origin: string = "resource://rawfile/";
11013
11014  build() {
11015    Column() {
11016      Button('getOriginUsage')
11017        .onClick(() => {
11018          try {
11019            webview.WebStorage.getOriginUsage(this.origin)
11020              .then(usage => {
11021                console.log('usage: ' + usage);
11022              }).catch((e: BusinessError) => {
11023              console.error('error: ' + JSON.stringify(e));
11024            })
11025          } catch (error) {
11026            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11027          }
11028        })
11029      Web({ src: $rawfile('index.html'), controller: this.controller })
11030        .databaseAccess(true)
11031    }
11032  }
11033}
11034```
11035
11036加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
11037
11038### deleteAllData
11039
11040static deleteAllData(incognito?: boolean): void
11041
11042清除Web SQL数据库当前使用的所有存储。
11043
11044**系统能力:** SystemCapability.Web.Webview.Core
11045
11046**参数:**
11047
11048| 参数名 | 类型   | 必填 | 说明               |
11049| ------ | ------ | ---- | ------------------ |
11050| incognito<sup>11+</sup>    | boolean | 否   | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 |
11051
11052**示例:**
11053
11054```ts
11055// xxx.ets
11056import { webview } from '@kit.ArkWeb';
11057import { BusinessError } from '@kit.BasicServicesKit';
11058
11059@Entry
11060@Component
11061struct WebComponent {
11062  controller: webview.WebviewController = new webview.WebviewController();
11063
11064  build() {
11065    Column() {
11066      Button('deleteAllData')
11067        .onClick(() => {
11068          try {
11069            webview.WebStorage.deleteAllData();
11070          } catch (error) {
11071            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11072          }
11073        })
11074      Web({ src: $rawfile('index.html'), controller: this.controller })
11075        .databaseAccess(true)
11076    }
11077  }
11078}
11079```
11080
11081加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
11082
11083## WebDataBase
11084
11085Web组件数据库管理对象。
11086
11087> **说明:**
11088>
11089> 目前调用WebDataBase下的方法,都需要先加载Web组件。
11090
11091### getHttpAuthCredentials
11092
11093static getHttpAuthCredentials(host: string, realm: string): Array\<string>
11094
11095检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11096
11097**系统能力:** SystemCapability.Web.Webview.Core
11098
11099**参数:**
11100
11101| 参数名 | 类型   | 必填 | 说明                         |
11102| ------ | ------ | ---- | ---------------------------- |
11103| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
11104| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
11105
11106**返回值:**
11107
11108| 类型  | 说明                                         |
11109| ----- | -------------------------------------------- |
11110| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
11111
11112**错误码:**
11113
11114以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11115
11116| 错误码ID | 错误信息                                                |
11117| -------- | ------------------------------------------------------ |
11118| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11119
11120**示例:**
11121
11122```ts
11123// xxx.ets
11124import { webview } from '@kit.ArkWeb';
11125import { BusinessError } from '@kit.BasicServicesKit';
11126
11127@Entry
11128@Component
11129struct WebComponent {
11130  controller: webview.WebviewController = new webview.WebviewController();
11131  host: string = "www.spincast.org";
11132  realm: string = "protected example";
11133  username_password: string[] = [];
11134
11135  build() {
11136    Column() {
11137      Button('getHttpAuthCredentials')
11138        .onClick(() => {
11139          try {
11140            this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
11141            console.log('num: ' + this.username_password.length);
11142          } catch (error) {
11143            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11144          }
11145        })
11146      Web({ src: 'www.example.com', controller: this.controller })
11147    }
11148  }
11149}
11150```
11151
11152### saveHttpAuthCredentials
11153
11154static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
11155
11156保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11157
11158**系统能力:** SystemCapability.Web.Webview.Core
11159
11160**参数:**
11161
11162| 参数名   | 类型   | 必填 | 说明                         |
11163| -------- | ------ | ---- | ---------------------------- |
11164| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
11165| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
11166| username | string | 是   | 用户名。                     |
11167| password | string | 是   | 密码。                       |
11168
11169**错误码:**
11170
11171以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11172
11173| 错误码ID | 错误信息                                                |
11174| -------- | ------------------------------------------------------ |
11175| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11176
11177**示例:**
11178
11179```ts
11180// xxx.ets
11181import { webview } from '@kit.ArkWeb';
11182import { BusinessError } from '@kit.BasicServicesKit';
11183
11184@Entry
11185@Component
11186struct WebComponent {
11187  controller: webview.WebviewController = new webview.WebviewController();
11188  host: string = "www.spincast.org";
11189  realm: string = "protected example";
11190
11191  build() {
11192    Column() {
11193      Button('saveHttpAuthCredentials')
11194        .onClick(() => {
11195          try {
11196            webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
11197          } catch (error) {
11198            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11199          }
11200        })
11201      Web({ src: 'www.example.com', controller: this.controller })
11202    }
11203  }
11204}
11205```
11206
11207### existHttpAuthCredentials
11208
11209static existHttpAuthCredentials(): boolean
11210
11211判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
11212
11213**系统能力:** SystemCapability.Web.Webview.Core
11214
11215**返回值:**
11216
11217| 类型    | 说明                                                         |
11218| ------- | ------------------------------------------------------------ |
11219| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
11220
11221**示例:**
11222
11223```ts
11224// xxx.ets
11225import { webview } from '@kit.ArkWeb';
11226import { BusinessError } from '@kit.BasicServicesKit';
11227
11228@Entry
11229@Component
11230struct WebComponent {
11231  controller: webview.WebviewController = new webview.WebviewController();
11232
11233  build() {
11234    Column() {
11235      Button('existHttpAuthCredentials')
11236        .onClick(() => {
11237          try {
11238            let result = webview.WebDataBase.existHttpAuthCredentials();
11239          } catch (error) {
11240            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11241          }
11242        })
11243      Web({ src: 'www.example.com', controller: this.controller })
11244    }
11245  }
11246}
11247```
11248
11249### deleteHttpAuthCredentials
11250
11251static deleteHttpAuthCredentials(): void
11252
11253清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
11254
11255**系统能力:** SystemCapability.Web.Webview.Core
11256
11257**示例:**
11258
11259```ts
11260// xxx.ets
11261import { webview } from '@kit.ArkWeb';
11262import { BusinessError } from '@kit.BasicServicesKit';
11263
11264@Entry
11265@Component
11266struct WebComponent {
11267  controller: webview.WebviewController = new webview.WebviewController();
11268
11269  build() {
11270    Column() {
11271      Button('deleteHttpAuthCredentials')
11272        .onClick(() => {
11273          try {
11274            webview.WebDataBase.deleteHttpAuthCredentials();
11275          } catch (error) {
11276            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11277          }
11278        })
11279      Web({ src: 'www.example.com', controller: this.controller })
11280    }
11281  }
11282}
11283```
11284
11285## GeolocationPermissions
11286
11287Web组件地理位置权限管理对象。
11288
11289> **说明:**
11290>
11291> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
11292
11293### 需要权限
11294
11295访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。
11296
11297### allowGeolocation
11298
11299static allowGeolocation(origin: string, incognito?: boolean): void
11300
11301允许指定来源使用地理位置接口。
11302
11303**系统能力:** SystemCapability.Web.Webview.Core
11304
11305**参数:**
11306
11307| 参数名 | 类型   | 必填 | 说明               |
11308| ------ | ------ | ---- | ------------------ |
11309| origin | string | 是   |指定源的字符串索引 |
11310| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 |
11311
11312**错误码:**
11313
11314以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11315
11316| 错误码ID | 错误信息                                               |
11317| -------- | ------------------------------------------------------ |
11318| 17100011 | Invalid origin.                             |
11319| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11320
11321**示例:**
11322
11323```ts
11324// xxx.ets
11325import { webview } from '@kit.ArkWeb';
11326import { BusinessError } from '@kit.BasicServicesKit';
11327
11328@Entry
11329@Component
11330struct WebComponent {
11331  controller: webview.WebviewController = new webview.WebviewController();
11332  origin: string = "file:///";
11333
11334  build() {
11335    Column() {
11336      Button('allowGeolocation')
11337        .onClick(() => {
11338          try {
11339            webview.GeolocationPermissions.allowGeolocation(this.origin);
11340          } catch (error) {
11341            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11342          }
11343        })
11344      Web({ src: 'www.example.com', controller: this.controller })
11345    }
11346  }
11347}
11348```
11349
11350### deleteGeolocation
11351
11352static deleteGeolocation(origin: string, incognito?: boolean): void
11353
11354清除指定来源的地理位置权限状态。
11355
11356**系统能力:** SystemCapability.Web.Webview.Core
11357
11358**参数:**
11359
11360| 参数名 | 类型   | 必填 | 说明               |
11361| ------ | ------ | ---- | ------------------ |
11362| origin | string | 是   | 指定源的字符串索引 |
11363| incognito<sup>11+</sup>   | boolean | 否   | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 |
11364
11365**错误码:**
11366
11367以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11368
11369| 错误码ID | 错误信息                                               |
11370| -------- | ------------------------------------------------------ |
11371| 17100011 | Invalid origin.                             |
11372| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11373
11374**示例:**
11375
11376```ts
11377// xxx.ets
11378import { webview } from '@kit.ArkWeb';
11379import { BusinessError } from '@kit.BasicServicesKit';
11380
11381@Entry
11382@Component
11383struct WebComponent {
11384  controller: webview.WebviewController = new webview.WebviewController();
11385  origin: string = "file:///";
11386
11387  build() {
11388    Column() {
11389      Button('deleteGeolocation')
11390        .onClick(() => {
11391          try {
11392            webview.GeolocationPermissions.deleteGeolocation(this.origin);
11393          } catch (error) {
11394            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11395          }
11396        })
11397      Web({ src: 'www.example.com', controller: this.controller })
11398    }
11399  }
11400}
11401```
11402
11403### getAccessibleGeolocation
11404
11405static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void
11406
11407以回调方式异步获取指定源的地理位置权限状态。
11408
11409**系统能力:** SystemCapability.Web.Webview.Core
11410
11411**参数:**
11412
11413| 参数名   | 类型                   | 必填 | 说明                                                         |
11414| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
11415| origin   | string                 | 是   | 指定源的字符串索引                                           |
11416| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11417| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 |
11418
11419**错误码:**
11420
11421以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11422
11423| 错误码ID | 错误信息                                               |
11424| -------- | ------------------------------------------------------ |
11425| 17100011 | Invalid origin.                             |
11426| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11427
11428**示例:**
11429
11430```ts
11431// xxx.ets
11432import { webview } from '@kit.ArkWeb';
11433import { BusinessError } from '@kit.BasicServicesKit';
11434
11435@Entry
11436@Component
11437struct WebComponent {
11438  controller: webview.WebviewController = new webview.WebviewController();
11439  origin: string = "file:///";
11440
11441  build() {
11442    Column() {
11443      Button('getAccessibleGeolocation')
11444        .onClick(() => {
11445          try {
11446            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
11447              if (error) {
11448                console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11449                return;
11450              }
11451              console.log('getAccessibleGeolocationAsync result: ' + result);
11452            });
11453          } catch (error) {
11454            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11455          }
11456        })
11457      Web({ src: 'www.example.com', controller: this.controller })
11458    }
11459  }
11460}
11461```
11462
11463### getAccessibleGeolocation
11464
11465static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean>
11466
11467以Promise方式异步获取指定源的地理位置权限状态。
11468
11469**系统能力:** SystemCapability.Web.Webview.Core
11470
11471**参数:**
11472
11473| 参数名 | 类型 | 必填 | 说明             |
11474| ------ | -------- | ---- | -------------------- |
11475| origin | string   | 是   | 指定源的字符串索引。 |
11476| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 |
11477
11478**返回值:**
11479
11480| 类型             | 说明                                                         |
11481| ---------------- | ------------------------------------------------------------ |
11482| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11483
11484**错误码:**
11485
11486以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11487
11488| 错误码ID | 错误信息                                               |
11489| -------- | ------------------------------------------------------ |
11490| 17100011 | Invalid origin.                             |
11491| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11492
11493**示例:**
11494
11495```ts
11496// xxx.ets
11497import { webview } from '@kit.ArkWeb';
11498import { BusinessError } from '@kit.BasicServicesKit';
11499
11500@Entry
11501@Component
11502struct WebComponent {
11503  controller: webview.WebviewController = new webview.WebviewController();
11504  origin: string = "file:///";
11505
11506  build() {
11507    Column() {
11508      Button('getAccessibleGeolocation')
11509        .onClick(() => {
11510          try {
11511            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
11512              .then(result => {
11513                console.log('getAccessibleGeolocationPromise result: ' + result);
11514              }).catch((error: BusinessError) => {
11515              console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
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(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void
11530
11531以回调方式异步获取已存储地理位置权限状态的所有源信息。
11532
11533**系统能力:** SystemCapability.Web.Webview.Core
11534
11535**参数:**
11536
11537| 参数名   | 类型                         | 必填 | 说明                                     |
11538| -------- | ---------------------------- | ---- | ---------------------------------------- |
11539| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
11540| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 |
11541
11542**错误码:**
11543
11544以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11545
11546| 错误码ID | 错误信息                                                |
11547| -------- | ------------------------------------------------------ |
11548| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11549
11550**示例:**
11551
11552```ts
11553// xxx.ets
11554import { webview } from '@kit.ArkWeb';
11555import { BusinessError } from '@kit.BasicServicesKit';
11556
11557@Entry
11558@Component
11559struct WebComponent {
11560  controller: webview.WebviewController = new webview.WebviewController();
11561
11562  build() {
11563    Column() {
11564      Button('getStoredGeolocation')
11565        .onClick(() => {
11566          try {
11567            webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
11568              if (error) {
11569                console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11570                return;
11571              }
11572              let origins_str: string = origins.join();
11573              console.log('getStoredGeolocationAsync origins: ' + origins_str);
11574            });
11575          } catch (error) {
11576            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11577          }
11578        })
11579      Web({ src: 'www.example.com', controller: this.controller })
11580    }
11581  }
11582}
11583```
11584
11585### getStoredGeolocation
11586
11587static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>>
11588
11589以Promise方式异步获取已存储地理位置权限状态的所有源信息。
11590
11591**系统能力:** SystemCapability.Web.Webview.Core
11592
11593**参数:**
11594
11595| 参数名   | 类型                         | 必填 | 说明                                     |
11596| -------- | ---------------------------- | ---- | ---------------------------------------- |
11597| incognito<sup>11+</sup>   | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 |
11598
11599**返回值:**
11600
11601| 类型                   | 说明                                                      |
11602| ---------------------- | --------------------------------------------------------- |
11603| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
11604
11605**错误码:**
11606
11607以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11608
11609| 错误码ID | 错误信息                                                |
11610| -------- | ------------------------------------------------------ |
11611| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11612
11613**示例:**
11614
11615```ts
11616// xxx.ets
11617import { webview } from '@kit.ArkWeb';
11618import { BusinessError } from '@kit.BasicServicesKit';
11619
11620@Entry
11621@Component
11622struct WebComponent {
11623  controller: webview.WebviewController = new webview.WebviewController();
11624
11625  build() {
11626    Column() {
11627      Button('getStoredGeolocation')
11628        .onClick(() => {
11629          try {
11630            webview.GeolocationPermissions.getStoredGeolocation()
11631              .then(origins => {
11632                let origins_str: string = origins.join();
11633                console.log('getStoredGeolocationPromise origins: ' + origins_str);
11634              }).catch((error: BusinessError) => {
11635              console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11636            });
11637          } catch (error) {
11638            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11639          }
11640        })
11641      Web({ src: 'www.example.com', controller: this.controller })
11642    }
11643  }
11644}
11645```
11646
11647### deleteAllGeolocation
11648
11649static deleteAllGeolocation(incognito?: boolean): void
11650
11651清除所有来源的地理位置权限状态。
11652
11653**系统能力:** SystemCapability.Web.Webview.Core
11654
11655**参数:**
11656
11657| 参数名   | 类型                         | 必填 | 说明                                     |
11658| -------- | ---------------------------- | ---- | ---------------------------------------- |
11659| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 |
11660
11661**示例:**
11662
11663```ts
11664// xxx.ets
11665import { webview } from '@kit.ArkWeb';
11666import { BusinessError } from '@kit.BasicServicesKit';
11667
11668@Entry
11669@Component
11670struct WebComponent {
11671  controller: webview.WebviewController = new webview.WebviewController();
11672
11673  build() {
11674    Column() {
11675      Button('deleteAllGeolocation')
11676        .onClick(() => {
11677          try {
11678            webview.GeolocationPermissions.deleteAllGeolocation();
11679          } catch (error) {
11680            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11681          }
11682        })
11683      Web({ src: 'www.example.com', controller: this.controller })
11684    }
11685  }
11686}
11687```
11688## WebHeader
11689
11690Web组件返回的请求/响应头对象。
11691
11692**系统能力:** SystemCapability.Web.Webview.Core
11693
11694| 名称        | 类型   | 可读 | 可写 |说明                 |
11695| ----------- | ------ | -----|------|------------------- |
11696| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
11697| headerValue | string | 是 | 是 | 请求/响应头的value。 |
11698
11699## RequestInfo<sup>12+</sup>
11700
11701Web组件发送的资源请求信息。
11702
11703**系统能力:**: SystemCapability.Web.Webview.Core
11704
11705| 名称      | 类型   | 可读 | 可写 |说明        |
11706| ---------| ------ | -----|------|--------  |
11707| url      | string | 是 | 是 | 请求的链接。    |
11708| method   | string | 是 | 是 | 请求的方法。    |
11709| formData | string | 是 | 是 | 请求的表单数据。 |
11710
11711## WebHitTestType
11712
11713[getHitTest](#gethittest)接口用于指示游标节点。
11714
11715**系统能力:** SystemCapability.Web.Webview.Core
11716
11717| 名称          | 值 | 说明                                      |
11718| ------------- | -- |----------------------------------------- |
11719| EditText      | 0 |可编辑的区域。                            |
11720| Email         | 1 |电子邮件地址。                            |
11721| HttpAnchor    | 2 |超链接,其中src为http。                     |
11722| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 |
11723| Img           | 4 |HTML::img标签。                           |
11724| Map           | 5 |地理地址。                                |
11725| Phone         | 6 |电话号码。                                |
11726| Unknown       | 7 |未知内容。                                |
11727
11728## SecurityLevel<sup>11+</sup>
11729
11730当前网页的安全级别。
11731
11732**系统能力:** SystemCapability.Web.Webview.Core
11733
11734| 名称          | 值 | 说明                                      |
11735| ------------- | -- |----------------------------------------- |
11736| NONE          | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。|
11737| SECURE        | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。|
11738| WARNING       | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。|
11739| DANGEROUS     | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 |
11740
11741##  HitTestValue
11742
11743提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。
11744
11745**系统能力:** SystemCapability.Web.Webview.Core
11746
11747| 名称 | 类型 | 可读 | 可写 | 说明|
11748| ---- | ---- | ---- | ---- |---- |
11749| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。|
11750| extra | string        | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
11751
11752## WebMessage
11753
11754type WebMessage = ArrayBuffer | string
11755
11756用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
11757
11758**系统能力:** SystemCapability.Web.Webview.Core
11759
11760| 类型       | 说明                                     |
11761| -------- | -------------------------------------- |
11762| string   | 字符串类型数据。 |
11763| ArrayBuffer   | 二进制类型数据。 |
11764
11765## JsMessageType<sup>10+</sup>
11766
11767[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
11768
11769**系统能力:** SystemCapability.Web.Webview.Core
11770
11771| 名称         | 值 | 说明                              |
11772| ------------ | -- |--------------------------------- |
11773| NOT_SUPPORT  | 0 |不支持的数据类型。|
11774| STRING       | 1 |字符串类型。|
11775| NUMBER       | 2 |数值类型。|
11776| BOOLEAN      | 3 |布尔类型。|
11777| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11778| ARRAY        | 5 |数组类型|
11779
11780## WebMessageType<sup>10+</sup>
11781
11782[webMessagePort](#webmessageport)接口所支持的数据类型。
11783
11784**系统能力:** SystemCapability.Web.Webview.Core
11785
11786| 名称         | 值 | 说明                            |
11787| ------------ | -- |------------------------------- |
11788| NOT_SUPPORT  | 0 |不支持的数据类型。|
11789| STRING       | 1 |字符串类型。|
11790| NUMBER       | 2 |数值类型。|
11791| BOOLEAN      | 3 |布尔类型。|
11792| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11793| ARRAY        | 5 |数组类型。|
11794| ERROR        | 6 |错误类型。|
11795
11796## MediaPlaybackState<sup>12+</sup>
11797
11798当前网页的播控状态。
11799
11800**系统能力:** SystemCapability.Web.Webview.Core
11801
11802| 名称    | 值   | 说明               |
11803| ------- | ---- | ------------------ |
11804| NONE    | 0    | 页面无音视频启播。 |
11805| PLAYING | 1    | 页面音视频播放中。 |
11806| PAUSED  | 2    | 页面音视频暂停。   |
11807| STOPPED | 3    | 页面音视频停止。   |
11808
11809## RenderProcessMode<sup>12+</sup>
11810
11811ArkWeb渲染子进程模式类型。
11812
11813**系统能力:** SystemCapability.Web.Webview.Core
11814
11815| 名称          | 值 | 说明                                      |
11816| ------------- | -- |----------------------------------------- |
11817| SINGLE        | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。|
11818| MULTIPLE      | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。|
11819
11820
11821## JsMessageExt<sup>10+</sup>
11822
11823[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
11824
11825### getType<sup>10+</sup>
11826
11827getType(): JsMessageType
11828
11829获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11830
11831**系统能力:** SystemCapability.Web.Webview.Core
11832
11833**返回值:**
11834
11835| 类型           | 说明                                                      |
11836| --------------| --------------------------------------------------------- |
11837| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
11838
11839### getString<sup>10+</sup>
11840
11841getString(): string
11842
11843获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11844
11845**系统能力:** SystemCapability.Web.Webview.Core
11846
11847**返回值:**
11848
11849| 类型           | 说明          |
11850| --------------| ------------- |
11851| string | 返回字符串类型的数据。 |
11852
11853**错误码:**
11854
11855以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11856
11857| 错误码ID | 错误信息                              |
11858| -------- | ------------------------------------- |
11859| 17100014 | The type and value of the message do not match. |
11860
11861### getNumber<sup>10+</sup>
11862
11863getNumber(): number
11864
11865获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11866
11867**系统能力:** SystemCapability.Web.Webview.Core
11868
11869**返回值:**
11870
11871| 类型           | 说明          |
11872| --------------| ------------- |
11873| number | 返回数值类型的数据。 |
11874
11875**错误码:**
11876
11877以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11878
11879| 错误码ID | 错误信息                              |
11880| -------- | ------------------------------------- |
11881| 17100014 | The type and value of the message do not match. |
11882
11883### getBoolean<sup>10+</sup>
11884
11885getBoolean(): boolean
11886
11887获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11888
11889**系统能力:** SystemCapability.Web.Webview.Core
11890
11891**返回值:**
11892
11893| 类型           | 说明          |
11894| --------------| ------------- |
11895| boolean | 返回布尔类型的数据。 |
11896
11897**错误码:**
11898
11899以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11900
11901| 错误码ID | 错误信息                              |
11902| -------- | ------------------------------------- |
11903| 17100014 | The type and value of the message do not match. |
11904
11905### getArrayBuffer<sup>10+</sup>
11906
11907getArrayBuffer(): ArrayBuffer
11908
11909获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11910
11911**系统能力:** SystemCapability.Web.Webview.Core
11912
11913**返回值:**
11914
11915| 类型           | 说明          |
11916| --------------| ------------- |
11917| ArrayBuffer | 返回原始二进制数据。 |
11918
11919**错误码:**
11920
11921以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11922
11923| 错误码ID | 错误信息                              |
11924| -------- | ------------------------------------- |
11925| 17100014 | The type and value of the message do not match. |
11926
11927### getArray<sup>10+</sup>
11928
11929getArray(): Array\<string | number | boolean\>
11930
11931获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11932
11933**系统能力:** SystemCapability.Web.Webview.Core
11934
11935**返回值:**
11936
11937| 类型           | 说明          |
11938| --------------| ------------- |
11939| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
11940
11941**错误码:**
11942
11943以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11944
11945| 错误码ID | 错误信息                              |
11946| -------- | ------------------------------------- |
11947| 17100014 | The type and value of the message do not match. |
11948
11949## WebMessageExt<sup>10+</sup>
11950
11951[webMessagePort](#webmessageport)接口接收、发送的数据对象。
11952
11953### getType<sup>10+</sup>
11954
11955getType(): WebMessageType
11956
11957获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11958
11959**系统能力:** SystemCapability.Web.Webview.Core
11960
11961**返回值:**
11962
11963| 类型           | 说明                                                      |
11964| --------------| --------------------------------------------------------- |
11965| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
11966
11967### getString<sup>10+</sup>
11968
11969getString(): string
11970
11971获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11972
11973**系统能力:** SystemCapability.Web.Webview.Core
11974
11975**返回值:**
11976
11977| 类型           | 说明          |
11978| --------------| ------------- |
11979| string | 返回字符串类型的数据。 |
11980
11981**错误码:**
11982
11983以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11984
11985| 错误码ID | 错误信息                              |
11986| -------- | ------------------------------------- |
11987| 17100014 | The type and value of the message do not match. |
11988
11989### getNumber<sup>10+</sup>
11990
11991getNumber(): number
11992
11993获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11994
11995**系统能力:** SystemCapability.Web.Webview.Core
11996
11997**返回值:**
11998
11999| 类型           | 说明          |
12000| --------------| ------------- |
12001| number | 返回数值类型的数据。 |
12002
12003**错误码:**
12004
12005以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12006
12007| 错误码ID | 错误信息                              |
12008| -------- | ------------------------------------- |
12009| 17100014 | The type and value of the message do not match. |
12010
12011### getBoolean<sup>10+</sup>
12012
12013getBoolean(): boolean
12014
12015获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12016
12017**系统能力:** SystemCapability.Web.Webview.Core
12018
12019**返回值:**
12020
12021| 类型           | 说明          |
12022| --------------| ------------- |
12023| boolean | 返回布尔类型的数据。 |
12024
12025**错误码:**
12026
12027以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12028
12029| 错误码ID | 错误信息                              |
12030| -------- | ------------------------------------- |
12031| 17100014 | The type and value of the message do not match. |
12032
12033### getArrayBuffer<sup>10+</sup>
12034
12035getArrayBuffer(): ArrayBuffer
12036
12037获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12038
12039**系统能力:** SystemCapability.Web.Webview.Core
12040
12041**返回值:**
12042
12043| 类型           | 说明          |
12044| --------------| ------------- |
12045| ArrayBuffer | 返回原始二进制数据。 |
12046
12047**错误码:**
12048
12049以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12050
12051| 错误码ID | 错误信息                              |
12052| -------- | ------------------------------------- |
12053| 17100014 | The type and value of the message do not match. |
12054
12055### getArray<sup>10+</sup>
12056
12057getArray(): Array\<string | number | boolean\>
12058
12059获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12060
12061**系统能力:** SystemCapability.Web.Webview.Core
12062
12063**返回值:**
12064
12065| 类型           | 说明          |
12066| --------------| ------------- |
12067| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
12068
12069**错误码:**
12070
12071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12072
12073| 错误码ID | 错误信息                              |
12074| -------- | ------------------------------------- |
12075| 17100014 | The type and value of the message do not match. |
12076
12077### getError<sup>10+</sup>
12078
12079getError(): Error
12080
12081获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12082
12083**系统能力:** SystemCapability.Web.Webview.Core
12084
12085**返回值:**
12086
12087| 类型           | 说明          |
12088| --------------| ------------- |
12089| Error | 返回错误对象类型的数据。 |
12090
12091**错误码:**
12092
12093以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12094
12095| 错误码ID | 错误信息                              |
12096| -------- | ------------------------------------- |
12097| 17100014 | The type and value of the message do not match. |
12098
12099### setType<sup>10+</sup>
12100
12101setType(type: WebMessageType): void
12102
12103设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12104
12105**系统能力:** SystemCapability.Web.Webview.Core
12106
12107**参数:**
12108
12109| 参数名 | 类型   | 必填 | 说明                   |
12110| ------ | ------ | ---- | ---------------------- |
12111| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
12112
12113**错误码:**
12114
12115| 错误码ID | 错误信息                              |
12116| -------- | ------------------------------------- |
12117| 17100014 | The type and value of the message do not match. |
12118| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12119
12120### setString<sup>10+</sup>
12121
12122setString(message: string): void
12123
12124设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12125
12126**系统能力:** SystemCapability.Web.Webview.Core
12127
12128**参数:**
12129
12130| 参数名 | 类型   | 必填 | 说明                   |
12131| ------ | ------ | ---- | -------------------- |
12132| message  | string | 是   | 字符串类型数据。 |
12133
12134**错误码:**
12135
12136| 错误码ID | 错误信息                              |
12137| -------- | ------------------------------------- |
12138| 17100014 | The type and value of the message do not match. |
12139| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12140
12141### setNumber<sup>10+</sup>
12142
12143setNumber(message: number): void
12144
12145设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12146
12147**系统能力:** SystemCapability.Web.Webview.Core
12148
12149**参数:**
12150
12151| 参数名 | 类型   | 必填 | 说明                   |
12152| ------ | ------ | ---- | -------------------- |
12153| message  | number | 是   | 数值类型数据。 |
12154
12155**错误码:**
12156
12157| 错误码ID | 错误信息                              |
12158| -------- | ------------------------------------- |
12159| 17100014 | The type and value of the message do not match. |
12160| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12161
12162### setBoolean<sup>10+</sup>
12163
12164setBoolean(message: boolean): void
12165
12166设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12167
12168**系统能力:** SystemCapability.Web.Webview.Core
12169
12170**参数:**
12171
12172| 参数名 | 类型   | 必填 | 说明                   |
12173| ------ | ------ | ---- | -------------------- |
12174| message  | boolean | 是   | 布尔类型数据。 |
12175
12176**错误码:**
12177
12178| 错误码ID | 错误信息                              |
12179| -------- | ------------------------------------- |
12180| 17100014 | The type and value of the message do not match. |
12181| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12182
12183### setArrayBuffer<sup>10+</sup>
12184
12185setArrayBuffer(message: ArrayBuffer): void
12186
12187设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12188
12189**系统能力:** SystemCapability.Web.Webview.Core
12190
12191**参数:**
12192
12193| 参数名 | 类型   | 必填 | 说明                   |
12194| ------ | ------ | ---- | -------------------- |
12195| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
12196
12197**错误码:**
12198
12199以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12200
12201| 错误码ID | 错误信息                              |
12202| -------- | ------------------------------------- |
12203| 17100014 | The type and value of the message do not match. |
12204| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12205
12206### setArray<sup>10+</sup>
12207
12208setArray(message: Array\<string | number | boolean\>): void
12209
12210设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12211
12212**系统能力:** SystemCapability.Web.Webview.Core
12213
12214**参数:**
12215
12216| 参数名 | 类型   | 必填 | 说明                   |
12217| ------ | ------ | ---- | -------------------- |
12218| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
12219
12220**错误码:**
12221
12222以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12223
12224| 错误码ID | 错误信息                              |
12225| -------- | ------------------------------------- |
12226| 17100014 | The type and value of the message do not match. |
12227| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12228
12229### setError<sup>10+</sup>
12230
12231setError(message: Error): void
12232
12233设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12234
12235**系统能力:** SystemCapability.Web.Webview.Core
12236
12237**参数:**
12238
12239| 参数名 | 类型   | 必填 | 说明                   |
12240| ------ | ------ | ---- | -------------------- |
12241| message  | Error | 是   | 错误对象类型数据。 |
12242
12243**错误码:**
12244
12245以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12246
12247| 错误码ID | 错误信息                              |
12248| -------- | ------------------------------------- |
12249| 17100014 | The type and value of the message do not match. |
12250| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12251
12252## WebStorageOrigin
12253
12254提供Web SQL数据库的使用信息。
12255
12256**系统能力:** SystemCapability.Web.Webview.Core
12257
12258| 名称   | 类型   | 可读 | 可写 | 说明 |
12259| ------ | ------ | ---- | ---- | ---- |
12260| origin | string | 是  | 是 | 指定源的字符串索引。 |
12261| usage  | number | 是  | 是 | 指定源的存储量。     |
12262| quota  | number | 是  | 是 | 指定源的存储配额。   |
12263
12264## BackForwardList
12265
12266当前Webview的历史信息列表。
12267
12268**系统能力:** SystemCapability.Web.Webview.Core
12269
12270| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
12271| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
12272| currentIndex | number | 是   | 是   | 当前在页面历史列表中的索引。                                 |
12273| size         | number | 是   | 是   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
12274
12275### getItemAtIndex
12276
12277getItemAtIndex(index: number): HistoryItem
12278
12279获取历史列表中指定索引的历史记录项信息。
12280
12281**系统能力:** SystemCapability.Web.Webview.Core
12282
12283**参数:**
12284
12285| 参数名 | 类型   | 必填 | 说明                   |
12286| ------ | ------ | ---- | ---------------------- |
12287| index  | number | 是   | 指定历史列表中的索引。 |
12288
12289**返回值:**
12290
12291| 类型                        | 说明         |
12292| --------------------------- | ------------ |
12293| [HistoryItem](#historyitem) | 历史记录项。 |
12294
12295**错误码:**
12296
12297以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12298
12299| 错误码ID | 错误信息                                                |
12300| -------- | ------------------------------------------------------ |
12301| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12302
12303**示例:**
12304
12305```ts
12306// xxx.ets
12307import { webview } from '@kit.ArkWeb';
12308import { BusinessError } from '@kit.BasicServicesKit';
12309import { image } from '@kit.ImageKit';
12310
12311@Entry
12312@Component
12313struct WebComponent {
12314  controller: webview.WebviewController = new webview.WebviewController();
12315  @State icon: image.PixelMap | undefined = undefined;
12316
12317  build() {
12318    Column() {
12319      Button('getBackForwardEntries')
12320        .onClick(() => {
12321          try {
12322            let list = this.controller.getBackForwardEntries();
12323            let historyItem = list.getItemAtIndex(list.currentIndex);
12324            console.log("HistoryItem: " + JSON.stringify(historyItem));
12325            this.icon = historyItem.icon;
12326          } catch (error) {
12327            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12328          }
12329        })
12330      Web({ src: 'www.example.com', controller: this.controller })
12331    }
12332  }
12333}
12334```
12335
12336## HistoryItem
12337
12338页面历史记录项。
12339
12340**系统能力:** SystemCapability.Web.Webview.Core
12341
12342| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
12343| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
12344| icon          | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
12345| historyUrl    | string                                 | 是   | 是   | 历史记录项的url地址。        |
12346| historyRawUrl | string                                 | 是   | 是   | 历史记录项的原始url地址。    |
12347| title         | string                                 | 是   | 是   | 历史记录项的标题。           |
12348
12349## WebCustomScheme
12350
12351自定义协议配置。
12352
12353**系统能力:** SystemCapability.Web.Webview.Core
12354
12355| 名称           | 类型       | 可读 | 可写 | 说明                         |
12356| -------------- | --------- | ---- | ---- | ---------------------------- |
12357| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。        |
12358| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。    |
12359| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。           |
12360| isStandard<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。           |
12361| isLocal<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“FILE”的安全规则相同的安全规则来处理。           |
12362| isDisplayIsolated<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。           |
12363| isSecure<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。           |
12364| isCspBypassing<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。在大多数情况下,当设置isStandard为true时,不应设置此值。         |
12365| isCodeCacheSupported<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的js资源是否支持生成code cache。默认值:false。         |
12366
12367## SecureDnsMode<sup>10+</sup>
12368
12369Web组件使用HTTPDNS的模式。
12370
12371**系统能力:** SystemCapability.Web.Webview.Core
12372
12373| 名称          | 值 | 说明                                      |
12374| ------------- | -- |----------------------------------------- |
12375| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
12376| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
12377| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|
12378
12379## WebDownloadState<sup>11+</sup>
12380
12381下载任务的状态。
12382
12383**系统能力:** SystemCapability.Web.Webview.Core
12384
12385| 名称          | 值 | 说明                                      |
12386| ------------- | -- |----------------------------------------- |
12387| IN_PROGRESS                                  | 0 |下载任务正在进行中。|
12388| COMPLETED                                 | 1 |下载任务已经完成。|
12389| CANCELED                          | 2 |下载任务已经被取消。|
12390| INTERRUPTED                          | 3 |下载任务被中断。|
12391| PENDING                          | 4 |下载任务等待开始。|
12392| PAUSED                          | 5 |下载任务已经被暂停。|
12393| UNKNOWN                          | 6 |下载任务未知状态。|
12394
12395## WebDownloadErrorCode<sup>11+</sup>
12396
12397下载任务的错误码。
12398
12399**系统能力:** SystemCapability.Web.Webview.Core
12400
12401| 名称          | 值 | 说明                                      |
12402| ------------- | -- |----------------------------------------- |
12403| ERROR_UNKNOWN                                  | 0 |未知的错误。|
12404| FILE_FAILED | 1 |  常规文件操作失败。|
12405| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。|
12406| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。|
12407| FILE_NAME_TOO_LONG | 5 | 文件名字过长。|
12408| FILE_TOO_LARGE | 6 | 文件太大。|
12409| FILE_TRANSIENT_ERROR | 10 |  出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。|
12410| FILE_BLOCKED | 11 |  由于某些本地策略,文件被阻止访问。|
12411| FILE_TOO_SHORT | 13 |  当尝试恢复下载时,发现文件不够长,可能该文件已不存在。|
12412| FILE_HASH_MISMATCH | 14 |  哈希不匹配。|
12413| FILE_SAME_AS_SOURCE | 15 |  文件已存在。|
12414| NETWORK_FAILED | 20 |  一般网络错误。|
12415| NETWORK_TIMEOUT | 21 | 网络超时。|
12416| NETWORK_DISCONNECTED | 22 | 网络断开连接。|
12417| NETWORK_SERVER_DOWN | 23 |  服务器关闭。|
12418| NETWORK_INVALID_REQUEST | 24 |  无效的网络请求,可能重定向到不支持的方案或无效的URL。|
12419| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。|
12420| SERVER_NO_RANGE | 31 |  服务器不支持范围请求。|
12421| SERVER_BAD_CONTENT | 33 |   服务器没有请求的数据。|
12422| SERVER_UNAUTHORIZED | 34 |  服务器不允许下载该文件。|
12423| SERVER_CERT_PROBLEM | 35 |  服务器证书错误。|
12424| SERVER_FORBIDDEN | 36 |  服务器访问被禁止。|
12425| SERVER_UNREACHABLE | 37 |  无法访问服务器。|
12426| SERVER_CONTENT_LENGTH_MISMATCH | 38 |  接收到的数据与内容长度不匹配。|
12427| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。|
12428| USER_CANCELED | 40 | 用户取消了下载。|
12429| USER_SHUTDOWN | 41 | 用户关闭了应用。|
12430| CRASH | 50 | 应用发生了崩溃。|
12431
12432## WebDownloadItem<sup>11+</sup>
12433
12434 表示下载任务,您可以使用此对象来操作相应的下载任务。
12435
12436> **说明:**
12437>
12438> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
12439
12440### getGuid<sup>11+</sup>
12441
12442getGuid(): string
12443
12444获取下载任务的唯一ID。
12445
12446**系统能力:** SystemCapability.Web.Webview.Core
12447
12448**返回值:**
12449
12450| 类型   | 说明                      |
12451| ------ | ------------------------- |
12452| string | 下载任务的唯一ID。 |
12453
12454**示例:**
12455
12456```ts
12457// xxx.ets
12458import { webview } from '@kit.ArkWeb';
12459import { BusinessError } from '@kit.BasicServicesKit';
12460
12461@Entry
12462@Component
12463struct WebComponent {
12464  controller: webview.WebviewController = new webview.WebviewController();
12465  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12466
12467  build() {
12468    Column() {
12469      Button('setDownloadDelegate')
12470        .onClick(() => {
12471          try {
12472            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12473              console.log("will start a download.");
12474              // 传入一个下载路径,并开始下载。
12475              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12476            })
12477            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12478              console.log("download update guid: " + webDownloadItem.getGuid());
12479            })
12480            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12481              console.log("download failed guid: " + webDownloadItem.getGuid());
12482            })
12483            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12484              console.log("download finish guid: " + webDownloadItem.getGuid());
12485            })
12486            this.controller.setDownloadDelegate(this.delegate);
12487          } catch (error) {
12488            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12489          }
12490        })
12491      Button('startDownload')
12492        .onClick(() => {
12493          try {
12494            this.controller.startDownload('https://www.example.com');
12495          } catch (error) {
12496            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12497          }
12498        })
12499      Web({ src: 'www.example.com', controller: this.controller })
12500    }
12501  }
12502}
12503```
12504
12505### getCurrentSpeed<sup>11+</sup>
12506
12507getCurrentSpeed(): number
12508
12509获取下载的速度,单位:字节每秒。
12510
12511**系统能力:** SystemCapability.Web.Webview.Core
12512
12513**返回值:**
12514
12515| 类型   | 说明                      |
12516| ------ | ------------------------- |
12517| number | 下载的速度(字节每秒)。 |
12518
12519**示例:**
12520
12521```ts
12522// xxx.ets
12523import { webview } from '@kit.ArkWeb';
12524import { BusinessError } from '@kit.BasicServicesKit';
12525
12526@Entry
12527@Component
12528struct WebComponent {
12529  controller: webview.WebviewController = new webview.WebviewController();
12530  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12531
12532  build() {
12533    Column() {
12534      Button('setDownloadDelegate')
12535        .onClick(() => {
12536          try {
12537            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12538              console.log("will start a download.");
12539              // 传入一个下载路径,并开始下载。
12540              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12541            })
12542            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12543              console.log("download update current speed: " + webDownloadItem.getCurrentSpeed());
12544            })
12545            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12546              console.log("download failed guid: " + webDownloadItem.getGuid());
12547            })
12548            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12549              console.log("download finish guid: " + webDownloadItem.getGuid());
12550            })
12551            this.controller.setDownloadDelegate(this.delegate);
12552          } catch (error) {
12553            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12554          }
12555        })
12556      Button('startDownload')
12557        .onClick(() => {
12558          try {
12559            this.controller.startDownload('https://www.example.com');
12560          } catch (error) {
12561            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12562          }
12563        })
12564      Web({ src: 'www.example.com', controller: this.controller })
12565    }
12566  }
12567}
12568```
12569
12570### getPercentComplete<sup>11+</sup>
12571
12572getPercentComplete(): number
12573
12574获取下载的进度,100代表下载完成。
12575
12576**系统能力:** SystemCapability.Web.Webview.Core
12577
12578**返回值:**
12579
12580| 类型   | 说明                      |
12581| ------ | ------------------------- |
12582| number | 下载完成的进度,100代表下载完成。 |
12583
12584**示例:**
12585
12586```ts
12587// xxx.ets
12588import { webview } from '@kit.ArkWeb';
12589import { BusinessError } from '@kit.BasicServicesKit';
12590
12591@Entry
12592@Component
12593struct WebComponent {
12594  controller: webview.WebviewController = new webview.WebviewController();
12595  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12596
12597  build() {
12598    Column() {
12599      Button('setDownloadDelegate')
12600        .onClick(() => {
12601          try {
12602            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12603              console.log("will start a download.");
12604              // 传入一个下载路径,并开始下载。
12605              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12606            })
12607            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12608              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12609            })
12610            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12611              console.log("download failed guid: " + webDownloadItem.getGuid());
12612            })
12613            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12614              console.log("download finish guid: " + webDownloadItem.getGuid());
12615            })
12616            this.controller.setDownloadDelegate(this.delegate);
12617          } catch (error) {
12618            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12619          }
12620        })
12621      Button('startDownload')
12622        .onClick(() => {
12623          try {
12624            this.controller.startDownload('https://www.example.com');
12625          } catch (error) {
12626            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12627          }
12628        })
12629      Web({ src: 'www.example.com', controller: this.controller })
12630    }
12631  }
12632}
12633```
12634
12635### getTotalBytes<sup>11+</sup>
12636
12637getTotalBytes(): number
12638
12639获取待下载文件的总长度。
12640
12641**系统能力:** SystemCapability.Web.Webview.Core
12642
12643**返回值:**
12644
12645| 类型   | 说明                      |
12646| ------ | ------------------------- |
12647| number | 待下载文件的总长度。 |
12648
12649**示例:**
12650
12651```ts
12652// xxx.ets
12653import { webview } from '@kit.ArkWeb';
12654import { BusinessError } from '@kit.BasicServicesKit';
12655
12656@Entry
12657@Component
12658struct WebComponent {
12659  controller: webview.WebviewController = new webview.WebviewController();
12660  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12661
12662  build() {
12663    Column() {
12664      Button('setDownloadDelegate')
12665        .onClick(() => {
12666          try {
12667            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12668              console.log("will start a download.");
12669              // 传入一个下载路径,并开始下载。
12670              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12671            })
12672            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12673              console.log("download update total bytes: " + webDownloadItem.getTotalBytes());
12674            })
12675            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12676              console.log("download failed guid: " + webDownloadItem.getGuid());
12677            })
12678            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12679              console.log("download finish guid: " + webDownloadItem.getGuid());
12680            })
12681            this.controller.setDownloadDelegate(this.delegate);
12682          } catch (error) {
12683            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12684          }
12685        })
12686      Button('startDownload')
12687        .onClick(() => {
12688          try {
12689            this.controller.startDownload('https://www.example.com');
12690          } catch (error) {
12691            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12692          }
12693        })
12694      Web({ src: 'www.example.com', controller: this.controller })
12695    }
12696  }
12697}
12698```
12699
12700### getState<sup>11+</sup>
12701
12702getState(): WebDownloadState
12703
12704获取下载的状态。
12705
12706**系统能力:** SystemCapability.Web.Webview.Core
12707
12708**返回值:**
12709
12710| 类型   | 说明                      |
12711| ------ | ------------------------- |
12712| [WebDownloadState](#webdownloadstate11) | 下载的状态。 |
12713
12714**示例:**
12715
12716```ts
12717// xxx.ets
12718import { webview } from '@kit.ArkWeb';
12719import { BusinessError } from '@kit.BasicServicesKit';
12720
12721@Entry
12722@Component
12723struct WebComponent {
12724  controller: webview.WebviewController = new webview.WebviewController();
12725  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12726
12727  build() {
12728    Column() {
12729      Button('setDownloadDelegate')
12730        .onClick(() => {
12731          try {
12732            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12733              console.log("will start a download.");
12734              // 传入一个下载路径,并开始下载。
12735              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12736            })
12737            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12738              console.log("download update download state: " + webDownloadItem.getState());
12739            })
12740            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12741              console.log("download failed guid: " + webDownloadItem.getGuid());
12742            })
12743            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12744              console.log("download finish guid: " + webDownloadItem.getGuid());
12745            })
12746            this.controller.setDownloadDelegate(this.delegate);
12747          } catch (error) {
12748            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12749          }
12750        })
12751      Button('startDownload')
12752        .onClick(() => {
12753          try {
12754            this.controller.startDownload('https://www.example.com');
12755          } catch (error) {
12756            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12757          }
12758        })
12759      Web({ src: 'www.example.com', controller: this.controller })
12760    }
12761  }
12762}
12763```
12764
12765### getLastErrorCode<sup>11+</sup>
12766
12767getLastErrorCode(): WebDownloadErrorCode
12768
12769获取下载的错误码。
12770
12771**系统能力:** SystemCapability.Web.Webview.Core
12772
12773**返回值:**
12774
12775| 类型   | 说明                      |
12776| ------ | ------------------------- |
12777| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 |
12778
12779**示例:**
12780
12781```ts
12782// xxx.ets
12783import { webview } from '@kit.ArkWeb';
12784import { BusinessError } from '@kit.BasicServicesKit';
12785
12786@Entry
12787@Component
12788struct WebComponent {
12789  controller: webview.WebviewController = new webview.WebviewController();
12790  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12791
12792  build() {
12793    Column() {
12794      Button('setDownloadDelegate')
12795        .onClick(() => {
12796          try {
12797            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12798              console.log("will start a download.");
12799              // 传入一个下载路径,并开始下载。
12800              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12801            })
12802            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12803              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12804            })
12805            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12806              console.log("download failed guid: " + webDownloadItem.getGuid());
12807              console.log("download error code: " + webDownloadItem.getLastErrorCode());
12808            })
12809            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12810              console.log("download finish guid: " + webDownloadItem.getGuid());
12811            })
12812            this.controller.setDownloadDelegate(this.delegate);
12813          } catch (error) {
12814            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12815          }
12816        })
12817      Button('startDownload')
12818        .onClick(() => {
12819          try {
12820            this.controller.startDownload('https://www.example.com');
12821          } catch (error) {
12822            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12823          }
12824        })
12825      Web({ src: 'www.example.com', controller: this.controller })
12826    }
12827  }
12828}
12829```
12830
12831### getMethod<sup>11+</sup>
12832
12833getMethod(): string
12834
12835获取下载任务的请求方式。
12836
12837**系统能力:** SystemCapability.Web.Webview.Core
12838
12839**返回值:**
12840
12841| 类型   | 说明                      |
12842| ------ | ------------------------- |
12843| string | 下载的请求方式。 |
12844
12845**示例:**
12846
12847```ts
12848// xxx.ets
12849import { webview } from '@kit.ArkWeb';
12850import { BusinessError } from '@kit.BasicServicesKit';
12851
12852@Entry
12853@Component
12854struct WebComponent {
12855  controller: webview.WebviewController = new webview.WebviewController();
12856  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12857
12858  build() {
12859    Column() {
12860      Button('setDownloadDelegate')
12861        .onClick(() => {
12862          try {
12863            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12864              console.log("will start a download, method:" + webDownloadItem.getMethod());
12865              // 传入一个下载路径,并开始下载。
12866              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12867            })
12868            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12869              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12870            })
12871            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12872              console.log("download failed guid: " + webDownloadItem.getGuid());
12873            })
12874            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12875              console.log("download finish guid: " + webDownloadItem.getGuid());
12876            })
12877            this.controller.setDownloadDelegate(this.delegate);
12878          } catch (error) {
12879            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12880          }
12881        })
12882      Button('startDownload')
12883        .onClick(() => {
12884          try {
12885            this.controller.startDownload('https://www.example.com');
12886          } catch (error) {
12887            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12888          }
12889        })
12890      Web({ src: 'www.example.com', controller: this.controller })
12891    }
12892  }
12893}
12894```
12895
12896### getMimeType<sup>11+</sup>
12897
12898getMimeType(): string
12899
12900获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
12901
12902**系统能力:** SystemCapability.Web.Webview.Core
12903
12904**返回值:**
12905
12906| 类型   | 说明                      |
12907| ------ | ------------------------- |
12908| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
12909
12910**示例:**
12911
12912```ts
12913// xxx.ets
12914import { webview } from '@kit.ArkWeb';
12915import { BusinessError } from '@kit.BasicServicesKit';
12916
12917@Entry
12918@Component
12919struct WebComponent {
12920  controller: webview.WebviewController = new webview.WebviewController();
12921  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12922
12923  build() {
12924    Column() {
12925      Button('setDownloadDelegate')
12926        .onClick(() => {
12927          try {
12928            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12929              console.log("will start a download, mime type:" + webDownloadItem.getMimeType());
12930              // 传入一个下载路径,并开始下载。
12931              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12932            })
12933            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12934              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12935            })
12936            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12937              console.log("download failed guid: " + webDownloadItem.getGuid());
12938            })
12939            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12940              console.log("download finish guid: " + webDownloadItem.getGuid());
12941            })
12942            this.controller.setDownloadDelegate(this.delegate);
12943          } catch (error) {
12944            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12945          }
12946        })
12947      Button('startDownload')
12948        .onClick(() => {
12949          try {
12950            this.controller.startDownload('https://www.example.com');
12951          } catch (error) {
12952            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12953          }
12954        })
12955      Web({ src: 'www.example.com', controller: this.controller })
12956    }
12957  }
12958}
12959```
12960
12961### getUrl<sup>11+</sup>
12962
12963getUrl(): string
12964
12965获取下载的请求地址。
12966
12967**系统能力:** SystemCapability.Web.Webview.Core
12968
12969**返回值:**
12970
12971| 类型   | 说明                      |
12972| ------ | ------------------------- |
12973| string | 下载的请求地址。 |
12974
12975**示例:**
12976
12977```ts
12978// xxx.ets
12979import { webview } from '@kit.ArkWeb';
12980import { BusinessError } from '@kit.BasicServicesKit';
12981
12982@Entry
12983@Component
12984struct WebComponent {
12985  controller: webview.WebviewController = new webview.WebviewController();
12986  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12987
12988  build() {
12989    Column() {
12990      Button('setDownloadDelegate')
12991        .onClick(() => {
12992          try {
12993            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12994              console.log("will start a download, url:" + webDownloadItem.getUrl());
12995              // 传入一个下载路径,并开始下载。
12996              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12997            })
12998            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12999              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13000            })
13001            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13002              console.log("download failed guid: " + webDownloadItem.getGuid());
13003            })
13004            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13005              console.log("download finish guid: " + webDownloadItem.getGuid());
13006            })
13007            this.controller.setDownloadDelegate(this.delegate);
13008          } catch (error) {
13009            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13010          }
13011        })
13012      Button('startDownload')
13013        .onClick(() => {
13014          try {
13015            this.controller.startDownload('https://www.example.com');
13016          } catch (error) {
13017            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13018          }
13019        })
13020      Web({ src: 'www.example.com', controller: this.controller })
13021    }
13022  }
13023}
13024```
13025
13026### getSuggestedFileName<sup>11+</sup>
13027
13028getSuggestedFileName(): string
13029
13030获取下载的建议文件名。
13031
13032**系统能力:** SystemCapability.Web.Webview.Core
13033
13034**返回值:**
13035
13036| 类型   | 说明                      |
13037| ------ | ------------------------- |
13038| string | 下载的建议文件名。 |
13039
13040**示例:**
13041
13042```ts
13043// xxx.ets
13044import { webview } from '@kit.ArkWeb';
13045import { BusinessError } from '@kit.BasicServicesKit';
13046
13047@Entry
13048@Component
13049struct WebComponent {
13050  controller: webview.WebviewController = new webview.WebviewController();
13051  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13052
13053  build() {
13054    Column() {
13055      Button('setDownloadDelegate')
13056        .onClick(() => {
13057          try {
13058            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13059              console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
13060              // 传入一个下载路径,并开始下载。
13061              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13062            })
13063            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13064              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13065            })
13066            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13067              console.log("download failed guid: " + webDownloadItem.getGuid());
13068            })
13069            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13070              console.log("download finish guid: " + webDownloadItem.getGuid());
13071            })
13072            this.controller.setDownloadDelegate(this.delegate);
13073          } catch (error) {
13074            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13075          }
13076        })
13077      Button('startDownload')
13078        .onClick(() => {
13079          try {
13080            this.controller.startDownload('https://www.example.com');
13081          } catch (error) {
13082            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13083          }
13084        })
13085      Web({ src: 'www.example.com', controller: this.controller })
13086    }
13087  }
13088}
13089```
13090
13091### getReceivedBytes<sup>11+</sup>
13092
13093getReceivedBytes(): number
13094
13095获取已经接收的字节数。
13096
13097**系统能力:** SystemCapability.Web.Webview.Core
13098
13099**返回值:**
13100
13101| 类型   | 说明                      |
13102| ------ | ------------------------- |
13103| number | 已经接收的字节数。 |
13104
13105**示例:**
13106
13107```ts
13108// xxx.ets
13109import { webview } from '@kit.ArkWeb';
13110import { BusinessError } from '@kit.BasicServicesKit';
13111
13112@Entry
13113@Component
13114struct WebComponent {
13115  controller: webview.WebviewController = new webview.WebviewController();
13116  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13117
13118  build() {
13119    Column() {
13120      Button('setDownloadDelegate')
13121        .onClick(() => {
13122          try {
13123            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13124              console.log("will start a download.");
13125              // 传入一个下载路径,并开始下载。
13126              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13127            })
13128            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13129              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13130              console.log("download update received bytes: " + webDownloadItem.getReceivedBytes());
13131            })
13132            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13133              console.log("download failed guid: " + webDownloadItem.getGuid());
13134            })
13135            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13136              console.log("download finish guid: " + webDownloadItem.getGuid());
13137            })
13138            this.controller.setDownloadDelegate(this.delegate);
13139          } catch (error) {
13140            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13141          }
13142        })
13143      Button('startDownload')
13144        .onClick(() => {
13145          try {
13146            this.controller.startDownload('https://www.example.com');
13147          } catch (error) {
13148            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13149          }
13150        })
13151      Web({ src: 'www.example.com', controller: this.controller })
13152    }
13153  }
13154}
13155```
13156
13157### getFullPath<sup>11+</sup>
13158
13159getFullPath(): string
13160
13161获取下载文件在磁盘上的全路径。
13162
13163**系统能力:** SystemCapability.Web.Webview.Core
13164
13165**返回值:**
13166
13167| 类型   | 说明                      |
13168| ------ | ------------------------- |
13169| string | 下载文件在磁盘上的全路径。 |
13170
13171**示例:**
13172
13173```ts
13174// xxx.ets
13175import { webview } from '@kit.ArkWeb';
13176import { BusinessError } from '@kit.BasicServicesKit';
13177
13178@Entry
13179@Component
13180struct WebComponent {
13181  controller: webview.WebviewController = new webview.WebviewController();
13182  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13183
13184  build() {
13185    Column() {
13186      Button('setDownloadDelegate')
13187        .onClick(() => {
13188          try {
13189            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13190              console.log("will start a download.");
13191              // 传入一个下载路径,并开始下载。
13192              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13193            })
13194            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13195              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13196            })
13197            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13198              console.log("download failed guid: " + webDownloadItem.getGuid());
13199            })
13200            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13201              console.log("download finish guid: " + webDownloadItem.getGuid());
13202              console.log("download finish full path: " + webDownloadItem.getFullPath());
13203            })
13204            this.controller.setDownloadDelegate(this.delegate);
13205          } catch (error) {
13206            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13207          }
13208        })
13209      Button('startDownload')
13210        .onClick(() => {
13211          try {
13212            this.controller.startDownload('https://www.example.com');
13213          } catch (error) {
13214            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13215          }
13216        })
13217      Web({ src: 'www.example.com', controller: this.controller })
13218    }
13219  }
13220}
13221```
13222
13223### serialize<sup>11+</sup>
13224
13225serialize(): Uint8Array
13226
13227将失败的下载序列化到一个字节数组。
13228
13229**系统能力:** SystemCapability.Web.Webview.Core
13230
13231**返回值:**
13232
13233| 类型   | 说明                      |
13234| ------ | ------------------------- |
13235| Uint8Array | 失败的下载序列化后的字节数组。 |
13236
13237**示例:**
13238
13239```ts
13240// xxx.ets
13241import { webview } from '@kit.ArkWeb';
13242import { BusinessError } from '@kit.BasicServicesKit';
13243
13244@Entry
13245@Component
13246struct WebComponent {
13247  controller: webview.WebviewController = new webview.WebviewController();
13248  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13249  failedData: Uint8Array = new Uint8Array();
13250
13251  build() {
13252    Column() {
13253      Button('setDownloadDelegate')
13254        .onClick(() => {
13255          try {
13256            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13257              console.log("will start a download.");
13258              // 传入一个下载路径,并开始下载。
13259              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13260            })
13261            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13262              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13263            })
13264            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13265              console.log("download failed guid: " + webDownloadItem.getGuid());
13266              // 序列化失败的下载到一个字节数组。
13267              this.failedData = webDownloadItem.serialize();
13268            })
13269            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13270              console.log("download finish guid: " + webDownloadItem.getGuid());
13271            })
13272            this.controller.setDownloadDelegate(this.delegate);
13273          } catch (error) {
13274            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13275          }
13276        })
13277      Button('startDownload')
13278        .onClick(() => {
13279          try {
13280            this.controller.startDownload('https://www.example.com');
13281          } catch (error) {
13282            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13283          }
13284        })
13285      Web({ src: 'www.example.com', controller: this.controller })
13286    }
13287  }
13288}
13289```
13290
13291### deserialize<sup>11+</sup>
13292
13293static deserialize(serializedData: Uint8Array): WebDownloadItem
13294
13295将序列化后的字节数组反序列化为一个WebDownloadItem对象。
13296
13297**系统能力:** SystemCapability.Web.Webview.Core
13298
13299**参数:**
13300
13301| 参数名              | 类型    | 必填   |  说明 |
13302| ------------------ | ------- | ---- | ------------- |
13303| serializedData | Uint8Array | 是   | 序列化后的下载。|
13304
13305**返回值:**
13306
13307| 类型   | 说明                      |
13308| ------ | ------------------------- |
13309| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 |
13310
13311**错误码:**
13312
13313以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13314
13315| 错误码ID | 错误信息                                                     |
13316| -------- | ------------------------------------------------------------ |
13317| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13318
13319**示例:**
13320
13321```ts
13322// xxx.ets
13323import { webview } from '@kit.ArkWeb';
13324import { BusinessError } from '@kit.BasicServicesKit';
13325
13326@Entry
13327@Component
13328struct WebComponent {
13329  controller: webview.WebviewController = new webview.WebviewController();
13330  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13331  failedData: Uint8Array = new Uint8Array();
13332
13333  build() {
13334    Column() {
13335      Button('setDownloadDelegate')
13336        .onClick(() => {
13337          try {
13338            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13339              console.log("will start a download.");
13340              // 传入一个下载路径,并开始下载。
13341              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13342            })
13343            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13344              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13345            })
13346            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13347              console.log("download failed guid: " + webDownloadItem.getGuid());
13348              // 序列化失败的下载到一个字节数组。
13349              this.failedData = webDownloadItem.serialize();
13350            })
13351            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13352              console.log("download finish guid: " + webDownloadItem.getGuid());
13353            })
13354            this.controller.setDownloadDelegate(this.delegate);
13355          } catch (error) {
13356            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13357          }
13358        })
13359      Button('startDownload')
13360        .onClick(() => {
13361          try {
13362            this.controller.startDownload('https://www.example.com');
13363          } catch (error) {
13364            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13365          }
13366        })
13367      Button('resumeDownload')
13368        .onClick(() => {
13369          try {
13370            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13371          } catch (error) {
13372            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13373          }
13374        })
13375      Web({ src: 'www.example.com', controller: this.controller })
13376    }
13377  }
13378}
13379```
13380
13381### start<sup>11+</sup>
13382
13383start(downloadPath: string): void
13384
13385开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。
13386
13387> **说明:**
13388>
13389>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。
13390
13391**系统能力:** SystemCapability.Web.Webview.Core
13392
13393**参数:**
13394
13395| 参数名 | 类型                   | 必填 | 说明                             |
13396| ------ | ---------------------- | ---- | ------------------------------|
13397| downloadPath   | string     | 是  | 下载文件的路径(包含文件名)。|
13398
13399**错误码:**
13400
13401以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13402
13403| 错误码ID | 错误信息                                                     |
13404| -------- | ------------------------------------------------------------ |
13405| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13406
13407**示例:**
13408
13409```ts
13410// xxx.ets
13411import { webview } from '@kit.ArkWeb';
13412import { BusinessError } from '@kit.BasicServicesKit';
13413
13414@Entry
13415@Component
13416struct WebComponent {
13417  controller: webview.WebviewController = new webview.WebviewController();
13418  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13419  failedData: Uint8Array = new Uint8Array();
13420
13421  build() {
13422    Column() {
13423      Button('setDownloadDelegate')
13424        .onClick(() => {
13425          try {
13426            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13427              console.log("will start a download.");
13428              // 传入一个下载路径,并开始下载。
13429              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13430            })
13431            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13432              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13433            })
13434            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13435              console.log("download failed guid: " + webDownloadItem.getGuid());
13436              // 序列化失败的下载到一个字节数组。
13437              this.failedData = webDownloadItem.serialize();
13438            })
13439            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13440              console.log("download finish guid: " + webDownloadItem.getGuid());
13441            })
13442            this.controller.setDownloadDelegate(this.delegate);
13443          } catch (error) {
13444            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13445          }
13446        })
13447      Button('startDownload')
13448        .onClick(() => {
13449          try {
13450            this.controller.startDownload('https://www.example.com');
13451          } catch (error) {
13452            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13453          }
13454        })
13455      Button('resumeDownload')
13456        .onClick(() => {
13457          try {
13458            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13459          } catch (error) {
13460            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13461          }
13462        })
13463      Web({ src: 'www.example.com', controller: this.controller })
13464    }
13465  }
13466}
13467```
13468
13469### cancel<sup>11+</sup>
13470
13471cancel(): void
13472
13473取消一个正在下载的下载任务。
13474
13475**系统能力:** SystemCapability.Web.Webview.Core
13476
13477**示例:**
13478
13479```ts
13480// xxx.ets
13481import { webview } from '@kit.ArkWeb';
13482import { BusinessError } from '@kit.BasicServicesKit';
13483
13484@Entry
13485@Component
13486struct WebComponent {
13487  controller: webview.WebviewController = new webview.WebviewController();
13488  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13489  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13490  failedData: Uint8Array = new Uint8Array();
13491
13492  build() {
13493    Column() {
13494      Button('setDownloadDelegate')
13495        .onClick(() => {
13496          try {
13497            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13498              console.log("will start a download.");
13499              // 传入一个下载路径,并开始下载。
13500              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13501            })
13502            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13503              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13504              this.download = webDownloadItem;
13505            })
13506            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13507              console.log("download failed guid: " + webDownloadItem.getGuid());
13508              // 序列化失败的下载到一个字节数组。
13509              this.failedData = webDownloadItem.serialize();
13510            })
13511            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13512              console.log("download finish guid: " + webDownloadItem.getGuid());
13513            })
13514            this.controller.setDownloadDelegate(this.delegate);
13515          } catch (error) {
13516            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13517          }
13518        })
13519      Button('startDownload')
13520        .onClick(() => {
13521          try {
13522            this.controller.startDownload('https://www.example.com');
13523          } catch (error) {
13524            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13525          }
13526        })
13527      Button('resumeDownload')
13528        .onClick(() => {
13529          try {
13530            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13531          } catch (error) {
13532            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13533          }
13534        })
13535      Button('cancel')
13536        .onClick(() => {
13537          try {
13538            this.download.cancel();
13539          } catch (error) {
13540            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13541          }
13542        })
13543      Web({ src: 'www.example.com', controller: this.controller })
13544    }
13545  }
13546}
13547```
13548
13549### pause<sup>11+</sup>
13550
13551pause(): void
13552
13553暂停一个正在下载的下载任务。
13554
13555**系统能力:** SystemCapability.Web.Webview.Core
13556
13557**错误码:**
13558
13559以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13560
13561| 错误码ID  | 错误信息                                                      |
13562| -------- | ------------------------------------------------------------ |
13563| 17100019 | The download task is not started yet. |
13564
13565**示例:**
13566
13567```ts
13568// xxx.ets
13569import { webview } from '@kit.ArkWeb';
13570import { BusinessError } from '@kit.BasicServicesKit';
13571
13572@Entry
13573@Component
13574struct WebComponent {
13575  controller: webview.WebviewController = new webview.WebviewController();
13576  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13577  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13578  failedData: Uint8Array = new Uint8Array();
13579
13580  build() {
13581    Column() {
13582      Button('setDownloadDelegate')
13583        .onClick(() => {
13584          try {
13585            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13586              console.log("will start a download.");
13587              // 传入一个下载路径,并开始下载。
13588              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13589            })
13590            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13591              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13592              this.download = webDownloadItem;
13593            })
13594            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13595              console.log("download failed guid: " + webDownloadItem.getGuid());
13596              // 序列化失败的下载到一个字节数组。
13597              this.failedData = webDownloadItem.serialize();
13598            })
13599            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13600              console.log("download finish guid: " + webDownloadItem.getGuid());
13601            })
13602            this.controller.setDownloadDelegate(this.delegate);
13603          } catch (error) {
13604            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13605          }
13606        })
13607      Button('startDownload')
13608        .onClick(() => {
13609          try {
13610            this.controller.startDownload('https://www.example.com');
13611          } catch (error) {
13612            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13613          }
13614        })
13615      Button('resumeDownload')
13616        .onClick(() => {
13617          try {
13618            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13619          } catch (error) {
13620            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13621          }
13622        })
13623      Button('cancel')
13624        .onClick(() => {
13625          try {
13626            this.download.cancel();
13627          } catch (error) {
13628            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13629          }
13630        })
13631      Button('pause')
13632        .onClick(() => {
13633          try {
13634            this.download.pause();
13635          } catch (error) {
13636            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13637          }
13638        })
13639      Web({ src: 'www.example.com', controller: this.controller })
13640    }
13641  }
13642}
13643```
13644
13645### resume<sup>11+</sup>
13646
13647resume(): void
13648
13649恢复一个暂停的下载任务。
13650
13651**系统能力:** SystemCapability.Web.Webview.Core
13652
13653**错误码:**
13654
13655以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13656
13657| 错误码ID  | 错误信息                                                      |
13658| -------- | ------------------------------------------------------------ |
13659| 17100016 | The download task is not paused. |
13660
13661**示例:**
13662
13663```ts
13664// xxx.ets
13665import { webview } from '@kit.ArkWeb';
13666import { BusinessError } from '@kit.BasicServicesKit';
13667
13668@Entry
13669@Component
13670struct WebComponent {
13671  controller: webview.WebviewController = new webview.WebviewController();
13672  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13673  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13674  failedData: Uint8Array = new Uint8Array();
13675
13676  build() {
13677    Column() {
13678      Button('setDownloadDelegate')
13679        .onClick(() => {
13680          try {
13681            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13682              console.log("will start a download.");
13683              // 传入一个下载路径,并开始下载。
13684              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13685            })
13686            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13687              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13688              this.download = webDownloadItem;
13689            })
13690            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13691              console.log("download failed guid: " + webDownloadItem.getGuid());
13692              // 序列化失败的下载到一个字节数组。
13693              this.failedData = webDownloadItem.serialize();
13694            })
13695            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13696              console.log("download finish guid: " + webDownloadItem.getGuid());
13697            })
13698            this.controller.setDownloadDelegate(this.delegate);
13699          } catch (error) {
13700            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13701          }
13702        })
13703      Button('startDownload')
13704        .onClick(() => {
13705          try {
13706            this.controller.startDownload('https://www.example.com');
13707          } catch (error) {
13708            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13709          }
13710        })
13711      Button('resumeDownload')
13712        .onClick(() => {
13713          try {
13714            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13715          } catch (error) {
13716            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13717          }
13718        })
13719      Button('cancel')
13720        .onClick(() => {
13721          try {
13722            this.download.cancel();
13723          } catch (error) {
13724            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13725          }
13726        })
13727      Button('pause')
13728        .onClick(() => {
13729          try {
13730            this.download.pause();
13731          } catch (error) {
13732            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13733          }
13734        })
13735      Button('resume')
13736        .onClick(() => {
13737          try {
13738            this.download.resume();
13739          } catch (error) {
13740            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13741          }
13742        })
13743      Web({ src: 'www.example.com', controller: this.controller })
13744    }
13745  }
13746}
13747```
13748
13749## WebDownloadDelegate<sup>11+</sup>
13750
13751 下载任务的状态会通过该类的回调接口通知给用户。
13752
13753### onBeforeDownload<sup>11+</sup>
13754
13755onBeforeDownload(callback: Callback\<WebDownloadItem>): void
13756
13757下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。
13758
13759> **说明:**
13760>
13761>处于PENDING状态的下载任务会首先将文件保存至临时目录。在调用WebDownloadItem.start并指定目标路径后,临时文件将被重命名为目标文件名,未完成下载的部分会在调用WebDownloadItem.start并指定目标路径后直接下载到目标路径。若希望避免在调用WebDownloadItem.start前生成临时文件,可先通过WebDownloadItem.cancel来取消当前的下载任务,之后再使用WebDownloadManager.resumeDownload来恢复被取消的下载任务。
13762
13763**系统能力:** SystemCapability.Web.Webview.Core
13764
13765**参数:**
13766
13767| 参数名  | 类型   | 必填 | 说明           |
13768| ------- | ------ | ---- | :------------- |
13769| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 触发下载的回调。 |
13770
13771**示例:**
13772
13773```ts
13774// xxx.ets
13775import { webview } from '@kit.ArkWeb';
13776import { BusinessError } from '@kit.BasicServicesKit';
13777
13778@Entry
13779@Component
13780struct WebComponent {
13781  controller: webview.WebviewController = new webview.WebviewController();
13782  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13783  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13784  failedData: Uint8Array = new Uint8Array();
13785
13786  build() {
13787    Column() {
13788      Button('setDownloadDelegate')
13789        .onClick(() => {
13790          try {
13791            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13792              console.log("will start a download.");
13793              // 传入一个下载路径,并开始下载。
13794              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13795            })
13796            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13797              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13798              this.download = webDownloadItem;
13799            })
13800            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13801              console.log("download failed guid: " + webDownloadItem.getGuid());
13802              // 序列化失败的下载到一个字节数组。
13803              this.failedData = webDownloadItem.serialize();
13804            })
13805            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13806              console.log("download finish guid: " + webDownloadItem.getGuid());
13807            })
13808            this.controller.setDownloadDelegate(this.delegate);
13809          } catch (error) {
13810            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13811          }
13812        })
13813      Button('startDownload')
13814        .onClick(() => {
13815          try {
13816            this.controller.startDownload('https://www.example.com');
13817          } catch (error) {
13818            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13819          }
13820        })
13821      Button('resumeDownload')
13822        .onClick(() => {
13823          try {
13824            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13825          } catch (error) {
13826            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13827          }
13828        })
13829      Button('cancel')
13830        .onClick(() => {
13831          try {
13832            this.download.cancel();
13833          } catch (error) {
13834            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13835          }
13836        })
13837      Button('pause')
13838        .onClick(() => {
13839          try {
13840            this.download.pause();
13841          } catch (error) {
13842            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13843          }
13844        })
13845      Button('resume')
13846        .onClick(() => {
13847          try {
13848            this.download.resume();
13849          } catch (error) {
13850            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13851          }
13852        })
13853      Web({ src: 'www.example.com', controller: this.controller })
13854    }
13855  }
13856}
13857```
13858
13859### onDownloadUpdated<sup>11+</sup>
13860
13861onDownloadUpdated(callback: Callback\<WebDownloadItem>): void
13862
13863下载过程中的回调,通过该回调的参数可以了解下载进度等信息。
13864
13865**系统能力:** SystemCapability.Web.Webview.Core
13866
13867**参数:**
13868
13869| 参数名  | 类型   | 必填 | 说明           |
13870| ------- | ------ | ---- | :------------- |
13871| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已更新。 |
13872
13873**示例:**
13874
13875```ts
13876// xxx.ets
13877import { webview } from '@kit.ArkWeb';
13878import { BusinessError } from '@kit.BasicServicesKit';
13879
13880@Entry
13881@Component
13882struct WebComponent {
13883  controller: webview.WebviewController = new webview.WebviewController();
13884  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13885  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13886  failedData: Uint8Array = new Uint8Array();
13887
13888  build() {
13889    Column() {
13890      Button('setDownloadDelegate')
13891        .onClick(() => {
13892          try {
13893            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13894              console.log("will start a download.");
13895              // 传入一个下载路径,并开始下载。
13896              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13897            })
13898            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13899              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13900              this.download = webDownloadItem;
13901            })
13902            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13903              console.log("download failed guid: " + webDownloadItem.getGuid());
13904              // 序列化失败的下载到一个字节数组。
13905              this.failedData = webDownloadItem.serialize();
13906            })
13907            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13908              console.log("download finish guid: " + webDownloadItem.getGuid());
13909            })
13910            this.controller.setDownloadDelegate(this.delegate);
13911          } catch (error) {
13912            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13913          }
13914        })
13915      Button('startDownload')
13916        .onClick(() => {
13917          try {
13918            this.controller.startDownload('https://www.example.com');
13919          } catch (error) {
13920            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13921          }
13922        })
13923      Button('resumeDownload')
13924        .onClick(() => {
13925          try {
13926            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13927          } catch (error) {
13928            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13929          }
13930        })
13931      Button('cancel')
13932        .onClick(() => {
13933          try {
13934            this.download.cancel();
13935          } catch (error) {
13936            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13937          }
13938        })
13939      Button('pause')
13940        .onClick(() => {
13941          try {
13942            this.download.pause();
13943          } catch (error) {
13944            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13945          }
13946        })
13947      Button('resume')
13948        .onClick(() => {
13949          try {
13950            this.download.resume();
13951          } catch (error) {
13952            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13953          }
13954        })
13955      Web({ src: 'www.example.com', controller: this.controller })
13956    }
13957  }
13958}
13959```
13960
13961### onDownloadFinish<sup>11+</sup>
13962
13963onDownloadFinish(callback: Callback\<WebDownloadItem>): void
13964
13965下载完成的通知。
13966
13967**系统能力:** SystemCapability.Web.Webview.Core
13968
13969**参数:**
13970
13971| 参数名  | 类型   | 必填 | 说明           |
13972| ------- | ------ | ---- | :------------- |
13973| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已完成。 |
13974
13975**示例:**
13976
13977```ts
13978// xxx.ets
13979import { webview } from '@kit.ArkWeb';
13980import { BusinessError } from '@kit.BasicServicesKit';
13981
13982@Entry
13983@Component
13984struct WebComponent {
13985  controller: webview.WebviewController = new webview.WebviewController();
13986  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13987  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13988  failedData: Uint8Array = new Uint8Array();
13989
13990  build() {
13991    Column() {
13992      Button('setDownloadDelegate')
13993        .onClick(() => {
13994          try {
13995            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13996              console.log("will start a download.");
13997              // 传入一个下载路径,并开始下载。
13998              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13999            })
14000            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14001              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14002              this.download = webDownloadItem;
14003            })
14004            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14005              console.log("download failed guid: " + webDownloadItem.getGuid());
14006              // 序列化失败的下载到一个字节数组。
14007              this.failedData = webDownloadItem.serialize();
14008            })
14009            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14010              console.log("download finish guid: " + webDownloadItem.getGuid());
14011            })
14012            this.controller.setDownloadDelegate(this.delegate);
14013          } catch (error) {
14014            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14015          }
14016        })
14017      Button('startDownload')
14018        .onClick(() => {
14019          try {
14020            this.controller.startDownload('https://www.example.com');
14021          } catch (error) {
14022            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14023          }
14024        })
14025      Button('resumeDownload')
14026        .onClick(() => {
14027          try {
14028            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14029          } catch (error) {
14030            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14031          }
14032        })
14033      Button('cancel')
14034        .onClick(() => {
14035          try {
14036            this.download.cancel();
14037          } catch (error) {
14038            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14039          }
14040        })
14041      Button('pause')
14042        .onClick(() => {
14043          try {
14044            this.download.pause();
14045          } catch (error) {
14046            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14047          }
14048        })
14049      Button('resume')
14050        .onClick(() => {
14051          try {
14052            this.download.resume();
14053          } catch (error) {
14054            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14055          }
14056        })
14057      Web({ src: 'www.example.com', controller: this.controller })
14058    }
14059  }
14060}
14061```
14062
14063### onDownloadFailed<sup>11+</sup>
14064
14065onDownloadFailed(callback: Callback\<WebDownloadItem>): void
14066
14067下载失败的通知。
14068
14069**系统能力:** SystemCapability.Web.Webview.Core
14070
14071**参数:**
14072
14073| 参数名  | 类型   | 必填 | 说明           |
14074| ------- | ------ | ---- | :------------- |
14075| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载回调失败。 |
14076
14077**示例:**
14078
14079```ts
14080// xxx.ets
14081import { webview } from '@kit.ArkWeb';
14082import { BusinessError } from '@kit.BasicServicesKit';
14083
14084@Entry
14085@Component
14086struct WebComponent {
14087  controller: webview.WebviewController = new webview.WebviewController();
14088  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14089  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14090  failedData: Uint8Array = new Uint8Array();
14091
14092  build() {
14093    Column() {
14094      Button('setDownloadDelegate')
14095        .onClick(() => {
14096          try {
14097            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14098              console.log("will start a download.");
14099              // 传入一个下载路径,并开始下载。
14100              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14101            })
14102            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14103              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14104              this.download = webDownloadItem;
14105            })
14106            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14107              console.log("download failed guid: " + webDownloadItem.getGuid());
14108              // 序列化失败的下载到一个字节数组。
14109              this.failedData = webDownloadItem.serialize();
14110            })
14111            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14112              console.log("download finish guid: " + webDownloadItem.getGuid());
14113            })
14114            this.controller.setDownloadDelegate(this.delegate);
14115          } catch (error) {
14116            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14117          }
14118        })
14119      Button('startDownload')
14120        .onClick(() => {
14121          try {
14122            this.controller.startDownload('https://www.example.com');
14123          } catch (error) {
14124            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14125          }
14126        })
14127      Button('resumeDownload')
14128        .onClick(() => {
14129          try {
14130            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14131          } catch (error) {
14132            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14133          }
14134        })
14135      Button('cancel')
14136        .onClick(() => {
14137          try {
14138            this.download.cancel();
14139          } catch (error) {
14140            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14141          }
14142        })
14143      Button('pause')
14144        .onClick(() => {
14145          try {
14146            this.download.pause();
14147          } catch (error) {
14148            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14149          }
14150        })
14151      Button('resume')
14152        .onClick(() => {
14153          try {
14154            this.download.resume();
14155          } catch (error) {
14156            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14157          }
14158        })
14159      Web({ src: 'www.example.com', controller: this.controller })
14160    }
14161  }
14162}
14163```
14164
14165## WebDownloadManager<sup>11+</sup>
14166
14167可以通过该类提供的接口来恢复失败的下载任务。
14168
14169### setDownloadDelegate<sup>11+</sup>
14170
14171static setDownloadDelegate(delegate: WebDownloadDelegate): void
14172
14173设置用于接收从WebDownloadManager触发的下载进度的委托。
14174
14175**系统能力:** SystemCapability.Web.Webview.Core
14176
14177**参数:**
14178
14179| 参数名          | 类型    |  必填  | 说明                                            |
14180| ---------------| ------- | ---- | ------------- |
14181| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
14182
14183**示例:**
14184
14185```ts
14186// xxx.ets
14187import { webview } from '@kit.ArkWeb';
14188import { BusinessError } from '@kit.BasicServicesKit';
14189
14190@Entry
14191@Component
14192struct WebComponent {
14193  controller: webview.WebviewController = new webview.WebviewController();
14194  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14195  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14196  failedData: Uint8Array = new Uint8Array();
14197
14198  build() {
14199    Column() {
14200      Button('setDownloadDelegate')
14201        .onClick(() => {
14202          try {
14203            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14204              console.log("will start a download.");
14205              // 传入一个下载路径,并开始下载。
14206              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14207            })
14208            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14209              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14210              this.download = webDownloadItem;
14211            })
14212            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14213              console.log("download failed guid: " + webDownloadItem.getGuid());
14214              // 序列化失败的下载到一个字节数组。
14215              this.failedData = webDownloadItem.serialize();
14216            })
14217            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14218              console.log("download finish guid: " + webDownloadItem.getGuid());
14219            })
14220            this.controller.setDownloadDelegate(this.delegate);
14221            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14222          } catch (error) {
14223            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14224          }
14225        })
14226      Button('startDownload')
14227        .onClick(() => {
14228          try {
14229            this.controller.startDownload('https://www.example.com');
14230          } catch (error) {
14231            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14232          }
14233        })
14234      Button('resumeDownload')
14235        .onClick(() => {
14236          try {
14237            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14238          } catch (error) {
14239            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14240          }
14241        })
14242      Button('cancel')
14243        .onClick(() => {
14244          try {
14245            this.download.cancel();
14246          } catch (error) {
14247            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14248          }
14249        })
14250      Button('pause')
14251        .onClick(() => {
14252          try {
14253            this.download.pause();
14254          } catch (error) {
14255            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14256          }
14257        })
14258      Button('resume')
14259        .onClick(() => {
14260          try {
14261            this.download.resume();
14262          } catch (error) {
14263            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14264          }
14265        })
14266      Web({ src: 'www.example.com', controller: this.controller })
14267    }
14268  }
14269}
14270```
14271
14272### resumeDownload<sup>11+</sup>
14273
14274static resumeDownload(webDownloadItem: WebDownloadItem): void
14275
14276恢复一个失败的下载任务。
14277
14278**系统能力:** SystemCapability.Web.Webview.Core
14279
14280**参数:**
14281
14282| 参数名          | 类型    |  必填  | 说明                                            |
14283| ---------------| ------- | ---- | ------------- |
14284| webDownloadItem      | [WebDownloadItem](#webdownloaditem11)  | 是   | 待恢复的下载任务。 |
14285
14286**错误码:**
14287
14288以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14289
14290| 错误码ID | 错误信息                              |
14291| -------- | ------------------------------------- |
14292| 17100018 | No WebDownloadDelegate has been set yet. |
14293
14294**示例:**
14295
14296```ts
14297// xxx.ets
14298import { webview } from '@kit.ArkWeb';
14299import { BusinessError } from '@kit.BasicServicesKit';
14300
14301@Entry
14302@Component
14303struct WebComponent {
14304  controller: webview.WebviewController = new webview.WebviewController();
14305  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14306  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14307  failedData: Uint8Array = new Uint8Array();
14308
14309  build() {
14310    Column() {
14311      Button('setDownloadDelegate')
14312        .onClick(() => {
14313          try {
14314            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14315              console.log("will start a download.");
14316              // 传入一个下载路径,并开始下载。
14317              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14318            })
14319            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14320              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14321              this.download = webDownloadItem;
14322            })
14323            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14324              console.log("download failed guid: " + webDownloadItem.getGuid());
14325              // 序列化失败的下载到一个字节数组。
14326              this.failedData = webDownloadItem.serialize();
14327            })
14328            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14329              console.log("download finish guid: " + webDownloadItem.getGuid());
14330            })
14331            this.controller.setDownloadDelegate(this.delegate);
14332            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14333          } catch (error) {
14334            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14335          }
14336        })
14337      Button('startDownload')
14338        .onClick(() => {
14339          try {
14340            this.controller.startDownload('https://www.example.com');
14341          } catch (error) {
14342            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14343          }
14344        })
14345      Button('resumeDownload')
14346        .onClick(() => {
14347          try {
14348            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14349          } catch (error) {
14350            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14351          }
14352        })
14353      Button('cancel')
14354        .onClick(() => {
14355          try {
14356            this.download.cancel();
14357          } catch (error) {
14358            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14359          }
14360        })
14361      Button('pause')
14362        .onClick(() => {
14363          try {
14364            this.download.pause();
14365          } catch (error) {
14366            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14367          }
14368        })
14369      Button('resume')
14370        .onClick(() => {
14371          try {
14372            this.download.resume();
14373          } catch (error) {
14374            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14375          }
14376        })
14377      Web({ src: 'www.example.com', controller: this.controller })
14378    }
14379  }
14380}
14381```
14382
14383## ProxySchemeFilter<sup>15+</sup>
14384
14385使用代理的请求的scheme信息。
14386
14387**系统能力:** SystemCapability.Web.Webview.Core
14388
14389| 名称          | 值 | 说明                                      |
14390| ------------- | -- |----------------------------------------- |
14391| MATCH_ALL_SCHEMES | 0 |所有的scheme都会使用代理。|
14392| MATCH_HTTP        | 1 |HTTP请求会使用代理。|
14393| MATCH_HTTPS       | 2 |HTTPS请求会使用代理。|
14394
14395## ProxyConfig<sup>15+</sup>
14396
14397可以通过该类提供的接口对代理进行配置。
14398
14399### insertProxyRule<sup>15+</sup>
14400
14401insertProxyRule(proxyRule: string, schemeFilter?: ProxySchemeFilter): void
14402
14403插入一条代理规则,与schemeFilter匹配的URL都会使用指定代理。如果schemeFilter为空,所有URL都将使用指定代理。
14404
14405**系统能力:** SystemCapability.Web.Webview.Core
14406
14407**参数:**
14408
14409| 参数名          | 类型     |  必填  | 说明           |
14410| ---------------| ------- | ---- | ------------- |
14411| proxyRule      | string  | 是   | URL要使用的代理。 |
14412| schemeFilter   | [ProxySchemeFilter](#proxyschemefilter15)  | 否   | 与schemeFilter匹配的URL会使用代理。默认值:MATCH_ALL_SCHEMES |
14413
14414**错误码:**
14415
14416以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14417
14418| 错误码ID | 错误信息                              |
14419| -------- | ------------------------------------- |
14420|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14421
14422**示例:**
14423
14424完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14425
14426### insertDirectRule<sup>15+</sup>
14427
14428insertDirectRule(schemeFilter?: ProxySchemeFilter): void
14429
14430插入一条代理规则,指明符合schemeFilter条件的URL将直接连接到服务器。
14431
14432**系统能力:** SystemCapability.Web.Webview.Core
14433
14434**参数:**
14435
14436| 参数名          | 类型     |  必填  | 说明           |
14437| ---------------| ------- | ---- | ------------- |
14438| schemeFilter   | [ProxySchemeFilter](#proxyschemefilter15)  | 否   | 与schemeFilter匹配的URL会直接与服务器相连。默认值:MATCH_ALL_SCHEMES |
14439
14440**错误码:**
14441
14442以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14443
14444| 错误码ID | 错误信息                              |
14445| -------- | ------------------------------------- |
14446|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14447
14448**示例:**
14449
14450完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14451
14452### insertBypassRule<sup>15+</sup>
14453
14454insertBypassRule(bypassRule: string): void
14455
14456插入一条bypass规则,指明哪些URL应该绕过代理并直接连接到服务器。
14457
14458**系统能力:** SystemCapability.Web.Webview.Core
14459
14460**参数:**
14461
14462| 参数名          | 类型     |  必填  | 说明           |
14463| ---------------| ------- | ---- | ------------- |
14464| bypassRule     | string  | 是   | 与bypassRule匹配的URL会绕过代理。 |
14465
14466**错误码:**
14467
14468以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14469
14470| 错误码ID | 错误信息                              |
14471| -------- | ------------------------------------- |
14472|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
14473
14474**示例:**
14475
14476完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14477
14478### bypassHostnamesWithoutPeriod<sup>15+</sup>
14479
14480bypassHostnamesWithoutPeriod(): void
14481
14482没有点字符的域名将跳过代理并直接连接到服务器。
14483
14484**系统能力:** SystemCapability.Web.Webview.Core
14485
14486**示例:**
14487
14488完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14489
14490### clearImplicitRules<sup>15+</sup>
14491
14492clearImplicitRules(): void
14493
14494默认情况下,如果某些主机名是本地IP地址或localhost地址,它们会绕过代理。调用此函数以覆盖默认行为,并强制将localhost或本地IP地址通过代理发送。
14495
14496**系统能力:** SystemCapability.Web.Webview.Core
14497
14498**示例:**
14499
14500完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14501
14502### enableReverseBypass<sup>15+</sup>
14503
14504enableReverseBypass(reverse: boolean): void
14505
14506反转bypass规则。
14507
14508**系统能力:** SystemCapability.Web.Webview.Core
14509
14510**参数:**
14511
14512| 参数名          | 类型     |  必填  | 说明           |
14513| ---------------| ------- | ---- | ------------- |
14514| reverse     | boolean  | 是   | 参数值默认是false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 |
14515
14516**错误码:**
14517
14518以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14519
14520| 错误码ID | 错误信息                              |
14521| -------- | ------------------------------------- |
14522|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14523
14524**示例:**
14525
14526完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14527
14528### getBypassRules<sup>15+</sup>
14529
14530getBypassRules(): Array\<string\>
14531
14532获取不使用代理的URL列表。
14533
14534**系统能力:** SystemCapability.Web.Webview.Core
14535
14536**返回值:**
14537
14538| 类型   | 说明                      |
14539| ------ | ------------------------- |
14540| Array\<string\> | 不使用代理的URL列表。 |
14541
14542**示例:**
14543
14544完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14545
14546### getProxyRules<sup>15+</sup>
14547
14548getProxyRules(): Array\<ProxyRule\>
14549
14550获取代理规则。
14551
14552**系统能力:** SystemCapability.Web.Webview.Core
14553
14554**返回值:**
14555
14556| 类型   | 说明                      |
14557| ------ | ------------------------- |
14558| Array\<[ProxyRule](#proxyrule15)\> | 代理规则。 |
14559
14560**示例:**
14561
14562完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14563
14564### isReverseBypassEnabled<sup>15+</sup>
14565
14566isReverseBypassEnabled(): boolean
14567
14568获取[enableReverseBypass](#enablereversebypass15)的参数值,详见[enableReverseBypass](#enablereversebypass15)。
14569
14570**系统能力:** SystemCapability.Web.Webview.Core
14571
14572**返回值:**
14573
14574| 类型   | 说明                      |
14575| ------ | ------------------------- |
14576| boolean | [enableReverseBypass](#enablereversebypass15)的参数值。参数值为false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 |
14577
14578**示例:**
14579
14580完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14581
14582
14583## ProxyRule<sup>15+</sup>
14584
14585[insertProxyRule](#insertproxyrule15)中使用的代理规则。
14586
14587### getSchemeFilter<sup>15+</sup>
14588
14589getSchemeFilter(): ProxySchemeFilter
14590
14591获取代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。
14592
14593**系统能力:** SystemCapability.Web.Webview.Core
14594
14595**返回值:**
14596
14597| 类型   | 说明                      |
14598| ------ | ------------------------- |
14599| [ProxySchemeFilter](#proxyschemefilter15) | 代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。 |
14600
14601**示例:**
14602
14603完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14604
14605### getUrl<sup>15+</sup>
14606
14607getUrl(): string
14608
14609获取代理规则中的代理的URL信息。
14610
14611**系统能力:** SystemCapability.Web.Webview.Core
14612
14613**返回值:**
14614
14615| 类型   | 说明                      |
14616| ------ | ------------------------- |
14617| string | 代理规则中的代理的Url信息。 |
14618
14619**示例:**
14620
14621完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14622
14623## OnProxyConfigChangeCallback<sup>15+</sup>
14624
14625type OnProxyConfigChangeCallback = () => void
14626
14627回调函数,回调成功表示代理设置成功。
14628
14629**系统能力:** SystemCapability.Web.Webview.Core
14630
14631**示例:**
14632
14633完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14634
14635## ProxyController<sup>15+</sup>
14636
14637此类用于为应用程序设置代理。
14638
14639### applyProxyOverride<sup>15+</sup>
14640
14641static applyProxyOverride(proxyConfig: ProxyConfig, callback: OnProxyConfigChangeCallback): void
14642
14643设置应用中所有Web使用的代理配置,与[insertBypassRule](#insertbypassrule15)中插入的bypass规则匹配的URL将不会使用代理,而是直接向URL指定的源地址发起请求。代理设置成功后,不保证网络连接后会立即使用新的代理设置,在加载页面之前请等待监听器触发,这个监听器将在UI线程上被调用。
14644
14645**系统能力:** SystemCapability.Web.Webview.Core
14646
14647**参数:**
14648
14649| 参数名          | 类型     |  必填  | 说明           |
14650| ---------------| ------- | ---- | ------------- |
14651| proxyConfig     | [ProxyConfig](#proxyconfig15)  | 是   | 对代理的配置。 |
14652| callback     | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15)   | 是   | 代理设置成功的回调。 |
14653
14654**错误码:**
14655
14656以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14657
14658| 错误码ID | 错误信息                              |
14659| -------- | ------------------------------------- |
14660|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
14661
14662**示例:**
14663
14664完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。
14665
14666### removeProxyOverride<sup>15+</sup>
14667
14668static removeProxyOverride(callback: OnProxyConfigChangeCallback): void
14669
14670移除代理配置。移除代理配置后,不保证网络连接后会立即使用新的代理设置,在加载页面之前等待监听器,这个监听器将在UI线程上被调用。
14671
14672**系统能力:** SystemCapability.Web.Webview.Core
14673
14674**参数:**
14675
14676| 参数名          | 类型     |  必填  | 说明           |
14677| ---------------| ------- | ---- | ------------- |
14678| callback     | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15)   | 是   | 代理设置成功的回调。 |
14679
14680**错误码:**
14681
14682以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。
14683
14684| 错误码ID | 错误信息                              |
14685| -------- | ------------------------------------- |
14686|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.  |
14687
14688**示例:**
14689
14690```ts
14691// xxx.ets
14692import { webview } from '@kit.ArkWeb';
14693import { BusinessError } from '@kit.BasicServicesKit';
14694
14695@Entry
14696@Component
14697struct WebComponent {
14698  controller: webview.WebviewController = new webview.WebviewController();
14699  proxyRules: webview.ProxyRule[] = [];
14700
14701  build() {
14702    Row() {
14703      Column() {
14704        Button("applyProxyOverride").onClick(()=>{
14705          let proxyConfig:webview.ProxyConfig = new webview.ProxyConfig();
14706          //优先使用第一个代理配置https://proxy.XXX.com
14707          //代理失败后会回落到直连服务器insertDirectRule
14708          try {
14709            proxyConfig.insertProxyRule("https://proxy.XXX.com", webview.ProxySchemeFilter.MATCH_ALL_SCHEMES);
14710          } catch (error) {
14711            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14712          }
14713          try {
14714            proxyConfig.insertDirectRule(webview.ProxySchemeFilter.MATCH_HTTP);
14715          } catch (error) {
14716            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14717          }
14718          try {
14719            proxyConfig.insertBypassRule("*.example.com");
14720          } catch (error) {
14721            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14722          }
14723          proxyConfig.clearImplicitRules();
14724          proxyConfig.bypassHostnamesWithoutPeriod();
14725          try {
14726            proxyConfig.enableReverseBypass(true);
14727          } catch (error) {
14728            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14729          }
14730          let bypassRules = proxyConfig.getBypassRules();
14731          for (let i = 0; i < bypassRules.length; i++) {
14732            console.log("bypassRules: " + bypassRules[i]);
14733          }
14734          this.proxyRules = proxyConfig.getProxyRules();
14735          for (let i = 0; i < this.proxyRules.length; i++) {
14736            console.log("SchemeFiletr: " + this.proxyRules[i].getSchemeFilter());
14737            console.log("Url: " + this.proxyRules[i].getUrl());
14738          }
14739          let isReverseBypassRule = proxyConfig.isReverseBypassEnabled();
14740          console.log("isReverseBypassRules: " + isReverseBypassRule);
14741          try {
14742            webview.ProxyController.applyProxyOverride(proxyConfig, () => {
14743              console.log("PROXYCONTROLLER proxy changed");
14744            });
14745          } catch (error) {
14746            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14747          }
14748        })
14749        Button("loadUrl-https").onClick(()=>{
14750          this.controller.loadUrl("https://www.example.com")
14751        })
14752        Button("loadUrl-http").onClick(()=>{
14753          this.controller.loadUrl("http://www.example.com")
14754        })
14755        Button("removeProxyOverride").onClick(()=>{
14756          try {
14757          webview.ProxyController.removeProxyOverride(() => {
14758            console.log("PROXYCONTROLLER proxy changed");
14759          });
14760          } catch (error) {
14761            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14762          }
14763        })
14764        Web({ src: 'www.example.com', controller: this.controller})
14765      }
14766      .width('100%')
14767    }
14768    .height('100%')
14769  }
14770}
14771
14772```
14773
14774## WebHttpBodyStream<sup>12+</sup>
14775
14776POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。
14777
14778### initialize<sup>12+</sup>
14779
14780initialize(): Promise\<void\>
14781
14782初始化WebHttpBodyStream。
14783
14784**系统能力:** SystemCapability.Web.Webview.Core
14785
14786**返回值:**
14787
14788| 类型   | 说明                      |
14789| ------ | ------------------------- |
14790| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 |
14791
14792**错误码:**
14793
14794以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14795
14796| 错误码ID | 错误信息                              |
14797| -------- | ------------------------------------- |
14798| 17100022 | Failed to initialize the HTTP body stream. |
14799
14800**示例:**
14801
14802```ts
14803// xxx.ets
14804import { webview } from '@kit.ArkWeb';
14805import { BusinessError } from '@kit.BasicServicesKit';
14806import { buffer } from '@kit.ArkTS';
14807import { WebNetErrorList } from '@ohos.web.netErrorList'
14808
14809@Entry
14810@Component
14811struct WebComponent {
14812  controller: webview.WebviewController = new webview.WebviewController();
14813  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14814  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
14815
14816  build() {
14817    Column() {
14818      Button('postUrl')
14819        .onClick(() => {
14820          try {
14821            let postData = buffer.from(this.htmlData);
14822            this.controller.postUrl('https://www.example.com', postData.buffer);
14823          } catch (error) {
14824            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14825          }
14826        })
14827      Web({ src: 'https://www.example.com', controller: this.controller })
14828        .onControllerAttached(() => {
14829          try {
14830            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
14831              console.log("[schemeHandler] onRequestStart");
14832              try {
14833                let stream = request.getHttpBodyStream();
14834                if (stream) {
14835                  stream.initialize().then(() => {
14836                    if (!stream) {
14837                      return;
14838                    }
14839                    console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize());
14840                    console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14841                    console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked());
14842                    console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14843                    console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory());
14844                    stream.read(stream.getSize()).then((buffer) => {
14845                      if (!stream) {
14846                        return;
14847                      }
14848                      console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength);
14849                      console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14850                      console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14851                    }).catch((error: BusinessError) => {
14852                      console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14853                    })
14854                  }).catch((error: BusinessError) => {
14855                    console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14856                  })
14857                } else {
14858                  console.log("[schemeHandler] onRequestStart has no http body stream");
14859                }
14860              } catch (error) {
14861                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14862              }
14863
14864              return false;
14865            })
14866
14867            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
14868              console.log("[schemeHandler] onRequestStop");
14869            });
14870
14871            this.controller.setWebSchemeHandler('https', this.schemeHandler);
14872          } catch (error) {
14873            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14874          }
14875        })
14876        .javaScriptAccess(true)
14877        .domStorageAccess(true)
14878    }
14879  }
14880}
14881
14882```
14883
14884### read<sup>12+</sup>
14885
14886read(size: number): Promise\<ArrayBuffer\>
14887
14888读取WebHttpBodyStream中的数据。
14889
14890**系统能力:** SystemCapability.Web.Webview.Core
14891
14892**参数:**
14893
14894| 参数名   | 类型    |  必填  | 说明                       |
14895| --------| ------- | ---- | ---------------------------|
14896|  size | number | 是   | 读取WebHttpBodyStream中的字节数。 |
14897
14898**返回值:**
14899
14900| 类型   | 说明                      |
14901| ------ | ------------------------- |
14902| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 |
14903
14904**错误码:**
14905
14906以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14907
14908| 错误码ID | 错误信息                              |
14909| -------- | ------------------------------------- |
14910|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
14911
14912**示例:**
14913
14914完整示例代码参考[initialize](#initialize12)。
14915
14916### getSize<sup>12+</sup>
14917
14918getSize(): number
14919
14920获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。
14921
14922**系统能力:** SystemCapability.Web.Webview.Core
14923
14924**返回值:**
14925
14926| 类型   | 说明                      |
14927| ------ | ------------------------- |
14928| number | 获取WebHttpBodyStream中的数据大小。 |
14929
14930**示例:**
14931
14932完整示例代码参考[initialize](#initialize12)。
14933
14934### getPosition<sup>12+</sup>
14935
14936getPosition(): number
14937
14938读取WebHttpBodyStream中当前的读取位置。
14939
14940**系统能力:** SystemCapability.Web.Webview.Core
14941
14942**返回值:**
14943
14944| 类型   | 说明                      |
14945| ------ | ------------------------- |
14946| number | WebHttpBodyStream中当前的读取位置。 |
14947
14948**示例:**
14949
14950完整示例代码参考[initialize](#initialize12)。
14951
14952### isChunked<sup>12+</sup>
14953
14954isChunked(): boolean
14955
14956WebHttpBodyStream是否采用分块传输。
14957
14958**系统能力:** SystemCapability.Web.Webview.Core
14959
14960**返回值:**
14961
14962| 类型   | 说明                      |
14963| ------ | ------------------------- |
14964| boolean | WebHttpBodyStream是否采用分块传输。 |
14965
14966**示例:**
14967
14968完整示例代码参考[initialize](#initialize12)。
14969
14970### isEof<sup>12+</sup>
14971
14972isEof(): boolean
14973
14974判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。
14975
14976**系统能力:** SystemCapability.Web.Webview.Core
14977
14978**返回值:**
14979
14980| 类型   | 说明                      |
14981| ------ | ------------------------- |
14982| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 |
14983
14984**示例:**
14985
14986完整示例代码参考[initialize](#initialize12)。
14987
14988### isInMemory<sup>12+</sup>
14989
14990isInMemory(): boolean
14991
14992判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。
14993
14994**系统能力:** SystemCapability.Web.Webview.Core
14995
14996**返回值:**
14997
14998| 类型   | 说明                      |
14999| ------ | ------------------------- |
15000| boolean | WebHttpBodyStream中的上传数据是否在内存中。 |
15001
15002**示例:**
15003
15004完整示例代码参考[initialize](#initialize12)。
15005
15006## WebSchemeHandlerRequest<sup>12+</sup>
15007
15008通过WebSchemeHandler拦截到的请求。
15009
15010### getHeader<sup>12+</sup>
15011
15012getHeader(): Array\<WebHeader\>
15013
15014获取资源请求头信息。
15015
15016**系统能力:** SystemCapability.Web.Webview.Core
15017
15018**返回值:**
15019
15020| 类型                         | 说明         |
15021| -------------------------- | ---------- |
15022| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 |
15023
15024**示例:**
15025
15026完整示例代码参考[onRequestStart](#onrequeststart12)。
15027
15028### getRequestUrl<sup>12+</sup>
15029
15030getRequestUrl(): string
15031
15032获取资源请求的URL信息。
15033
15034**系统能力:** SystemCapability.Web.Webview.Core
15035
15036**返回值:**
15037
15038| 类型     | 说明            |
15039| ------ | ------------- |
15040| string | 返回资源请求的URL信息。 |
15041
15042**示例:**
15043
15044完整示例代码参考[onRequestStart](#onrequeststart12)。
15045
15046### getRequestMethod<sup>12+</sup>
15047
15048getRequestMethod(): string
15049
15050获取请求方法。
15051
15052**系统能力:** SystemCapability.Web.Webview.Core
15053
15054**返回值:**
15055
15056| 类型     | 说明            |
15057| ------ | ------------- |
15058| string | 返回请求方法。 |
15059
15060**示例:**
15061
15062完整示例代码参考[onRequestStart](#onrequeststart12)。
15063
15064### getReferrer<sup>12+</sup>
15065
15066getReferrer(): string
15067
15068获取referrer。
15069
15070**系统能力:** SystemCapability.Web.Webview.Core
15071
15072**返回值:**
15073
15074| 类型     | 说明            |
15075| ------ | ------------- |
15076| string | 获取到的referrer。 |
15077
15078**示例:**
15079
15080完整示例代码参考[onRequestStart](#onrequeststart12)。
15081
15082### isMainFrame<sup>12+</sup>
15083
15084isMainFrame(): boolean
15085
15086判断资源请求是否为主frame。
15087
15088**系统能力:** SystemCapability.Web.Webview.Core
15089
15090**返回值:**
15091
15092| 类型     | 说明            |
15093| ------ | ------------- |
15094| boolean | 判断资源请求是否为主frame。 |
15095
15096**示例:**
15097
15098完整示例代码参考[onRequestStart](#onrequeststart12)。
15099
15100### hasGesture<sup>12+</sup>
15101
15102hasGesture(): boolean
15103
15104获取资源请求是否与手势(如点击)相关联。
15105
15106**系统能力:** SystemCapability.Web.Webview.Core
15107
15108**返回值:**
15109
15110| 类型     | 说明            |
15111| ------ | ------------- |
15112| boolean | 返回资源请求是否与手势(如点击)相关联。 |
15113
15114**示例:**
15115
15116完整示例代码参考[onRequestStart](#onrequeststart12)。
15117
15118### getHttpBodyStream<sup>12+</sup>
15119
15120getHttpBodyStream(): WebHttpBodyStream | null
15121
15122获取资源请求中的WebHttpBodyStream。
15123
15124**系统能力:** SystemCapability.Web.Webview.Core
15125
15126**返回值:**
15127
15128| 类型     | 说明            |
15129| ------ | ------------- |
15130| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 |
15131
15132**示例:**
15133
15134完整示例代码参考[onRequestStart](#onrequeststart12)。
15135
15136### getRequestResourceType<sup>12+</sup>
15137
15138getRequestResourceType(): WebResourceType
15139
15140获取资源请求的资源类型。
15141
15142**系统能力:** SystemCapability.Web.Webview.Core
15143
15144**返回值:**
15145
15146| 类型     | 说明            |
15147| ------ | ------------- |
15148| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 |
15149
15150**示例:**
15151
15152完整示例代码参考[onRequestStart](#onrequeststart12)。
15153
15154### getFrameUrl<sup>12+</sup>
15155
15156getFrameUrl(): string
15157
15158获取触发此请求的Frame的URL。
15159
15160**系统能力:** SystemCapability.Web.Webview.Core
15161
15162**返回值:**
15163
15164| 类型     | 说明            |
15165| ------ | ------------- |
15166| string | 返回触发此请求的Frame的URL。 |
15167
15168**示例:**
15169
15170完整示例代码参考[onRequestStart](#onrequeststart12)。
15171
15172## WebSchemeHandlerResponse<sup>12+</sup>
15173
15174请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。
15175
15176### constructor<sup>12+</sup>
15177
15178constructor()
15179
15180Response的构造函数。
15181
15182**系统能力:** SystemCapability.Web.Webview.Core
15183
15184**示例:**
15185
15186```ts
15187// xxx.ets
15188import { webview } from '@kit.ArkWeb';
15189import { BusinessError } from '@kit.BasicServicesKit';
15190import { WebNetErrorList } from '@ohos.web.netErrorList';
15191
15192@Entry
15193@Component
15194struct WebComponent {
15195  controller: webview.WebviewController = new webview.WebviewController();
15196  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15197
15198  build() {
15199    Column() {
15200      Button('response').onClick(() => {
15201        let response = new webview.WebSchemeHandlerResponse();
15202        try {
15203          response.setUrl("http://www.example.com")
15204          response.setStatus(200)
15205          response.setStatusText("OK")
15206          response.setMimeType("text/html")
15207          response.setEncoding("utf-8")
15208          response.setHeaderByName("header1", "value1", false)
15209          response.setNetErrorCode(WebNetErrorList.NET_OK)
15210          console.log("[schemeHandler] getUrl:" + response.getUrl())
15211          console.log("[schemeHandler] getStatus:" + response.getStatus())
15212          console.log("[schemeHandler] getStatusText:" + response.getStatusText())
15213          console.log("[schemeHandler] getMimeType:" + response.getMimeType())
15214          console.log("[schemeHandler] getEncoding:" + response.getEncoding())
15215          console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1"))
15216          console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode())
15217
15218        } catch (error) {
15219          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15220        }
15221      })
15222      Web({ src: 'https://www.example.com', controller: this.controller })
15223    }
15224  }
15225}
15226
15227```
15228
15229### setUrl<sup>12+</sup>
15230
15231setUrl(url: string): void
15232
15233给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。
15234
15235**系统能力:** SystemCapability.Web.Webview.Core
15236
15237**参数:**
15238
15239| 参数名   | 类型    |  必填  | 说明                       |
15240| --------| ------- | ---- | ---------------------------|
15241|  url | string | 是   | 即将要跳转的URL。 |
15242
15243**示例:**
15244
15245示例完整示例代码参考[constructor](#constructor12)。
15246
15247**错误码:**
15248
15249以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15250
15251| 错误码ID | 错误信息                  |
15252| -------- | ----------------------- |
15253|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15254
15255### setNetErrorCode<sup>12+</sup>
15256
15257setNetErrorCode(code: WebNetErrorList): void
15258
15259给当前的Response设置网络错误码。
15260
15261**系统能力:** SystemCapability.Web.Webview.Core
15262
15263**参数:**
15264
15265| 参数名   | 类型    |  必填  | 说明                       |
15266| --------| ------- | ---- | ---------------------------|
15267|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15268
15269**错误码:**
15270
15271以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15272
15273| 错误码ID | 错误信息                  |
15274| -------- | ----------------------- |
15275|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
15276
15277**示例:**
15278
15279示例完整示例代码参考[constructor](#constructor12)。
15280
15281### setStatus<sup>12+</sup>
15282
15283setStatus(code: number): void
15284
15285给当前的Response设置HTTP状态码。
15286
15287**系统能力:** SystemCapability.Web.Webview.Core
15288
15289**参数:**
15290
15291| 参数名   | 类型    |  必填  | 说明                       |
15292| --------| ------- | ---- | ---------------------------|
15293|  code | number | 是   | Http状态码。 |
15294
15295**错误码:**
15296
15297以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15298
15299| 错误码ID | 错误信息                  |
15300| -------- | ----------------------- |
15301|  401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15302
15303**示例:**
15304
15305示例完整示例代码参考[constructor](#constructor12)。
15306
15307### setStatusText<sup>12+</sup>
15308
15309setStatusText(text: string): void
15310
15311给当前的Response设置状态文本。
15312
15313**系统能力:** SystemCapability.Web.Webview.Core
15314
15315**参数:**
15316
15317| 参数名   | 类型    |  必填  | 说明                       |
15318| --------| ------- | ---- | ---------------------------|
15319|  text | string | 是   | 状态文本。 |
15320
15321**错误码:**
15322
15323以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15324
15325| 错误码ID | 错误信息                  |
15326| -------- | ----------------------- |
15327|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15328
15329**示例:**
15330
15331示例完整示例代码参考[constructor](#constructor12)。
15332
15333### setMimeType<sup>12+</sup>
15334
15335setMimeType(type: string): void
15336
15337给当前的Response设置媒体类型。
15338
15339**系统能力:** SystemCapability.Web.Webview.Core
15340
15341**参数:**
15342
15343| 参数名   | 类型    |  必填  | 说明                       |
15344| --------| ------- | ---- | ---------------------------|
15345|  type | string | 是   | 媒体类型。 |
15346
15347**错误码:**
15348
15349以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15350
15351| 错误码ID | 错误信息                  |
15352| -------- | ----------------------- |
15353|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15354
15355**示例:**
15356
15357示例完整示例代码参考[constructor](#constructor12)。
15358
15359### setEncoding<sup>12+</sup>
15360
15361setEncoding(encoding: string): void
15362
15363给当前的Response设置字符集。
15364
15365**系统能力:** SystemCapability.Web.Webview.Core
15366
15367**参数:**
15368
15369| 参数名   | 类型    |  必填  | 说明                       |
15370| --------| ------- | ---- | ---------------------------|
15371|  encoding | string | 是   | 字符集。 |
15372
15373**错误码:**
15374
15375以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15376
15377| 错误码ID | 错误信息                  |
15378| -------- | ----------------------- |
15379|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
15380
15381**示例:**
15382
15383示例完整示例代码参考[constructor](#constructor12)。
15384
15385### setHeaderByName<sup>12+</sup>
15386
15387setHeaderByName(name: string, value: string, overwrite: boolean): void
15388
15389给当前的Response设置头信息。
15390
15391**系统能力:** SystemCapability.Web.Webview.Core
15392
15393**参数:**
15394
15395| 参数名   | 类型    |  必填  | 说明                       |
15396| --------| ------- | ---- | ---------------------------|
15397|  name | string | 是   | 头部(header)的名称。 |
15398|  value | string | 是   | 头部(header)的值。 |
15399|  overwrite | boolean | 是   | 如果为true,将覆盖现有的头部,否则不覆盖。 |
15400
15401**错误码:**
15402
15403以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15404
15405| 错误码ID | 错误信息                  |
15406| -------- | ----------------------- |
15407|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
15408
15409**示例:**
15410
15411示例完整示例代码参考[constructor](#constructor12)。
15412
15413### getUrl<sup>12+</sup>
15414
15415getUrl(): string
15416
15417获取重定向或由于HSTS而更改后的URL。
15418风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
15419
15420**系统能力:** SystemCapability.Web.Webview.Core
15421
15422**返回值:**
15423
15424| 类型    | 说明                                     |
15425| ------- | --------------------------------------- |
15426| string | 获取经过重定向或由于HSTS而更改后的URL。|
15427
15428**示例:**
15429
15430示例完整示例代码参考[constructor](#constructor12)。
15431
15432### getNetErrorCode<sup>12+</sup>
15433
15434getNetErrorCode(): WebNetErrorList
15435
15436获取Response的网络错误码。
15437
15438**系统能力:** SystemCapability.Web.Webview.Core
15439
15440**返回值:**
15441
15442| 类型    | 说明                                     |
15443| ------- | --------------------------------------- |
15444| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。|
15445
15446**示例:**
15447
15448示例完整示例代码参考[constructor](#constructor12)。
15449
15450### getStatus<sup>12+</sup>
15451
15452getStatus(): number
15453
15454获取Response的Http状态码。
15455
15456**系统能力:** SystemCapability.Web.Webview.Core
15457
15458**返回值:**
15459
15460| 类型    | 说明                                     |
15461| ------- | --------------------------------------- |
15462| number | 获取Response的Http状态码。|
15463
15464**示例:**
15465
15466示例完整示例代码参考[constructor](#constructor12)。
15467
15468### getStatusText<sup>12+</sup>
15469
15470getStatusText(): string
15471
15472获取Response的状态文本。
15473
15474**系统能力:** SystemCapability.Web.Webview.Core
15475
15476**返回值:**
15477
15478| 类型    | 说明                                     |
15479| ------- | --------------------------------------- |
15480| string | 状态文本。|
15481
15482**示例:**
15483
15484示例完整示例代码参考[constructor](#constructor12)。
15485
15486### getMimeType<sup>12+</sup>
15487
15488getMimeType(): string
15489
15490获取Response的媒体类型。
15491
15492**系统能力:** SystemCapability.Web.Webview.Core
15493
15494**返回值:**
15495
15496| 类型    | 说明                                     |
15497| ------- | --------------------------------------- |
15498| string | 媒体类型。|
15499
15500**示例:**
15501
15502示例完整示例代码参考[constructor](#constructor12)。
15503
15504### getEncoding<sup>12+</sup>
15505
15506getEncoding(): string
15507
15508获取Response的字符集。
15509
15510**系统能力:** SystemCapability.Web.Webview.Core
15511
15512**返回值:**
15513
15514| 类型    | 说明                                     |
15515| ------- | --------------------------------------- |
15516| string | 字符集。|
15517
15518**示例:**
15519
15520示例完整示例代码参考[constructor](#constructor12)。
15521
15522### getHeaderByName<sup>12+</sup>
15523
15524getHeaderByName(name: string): string
15525
15526获取Response的字符集。
15527
15528**系统能力:** SystemCapability.Web.Webview.Core
15529
15530**参数:**
15531
15532| 参数名  | 类型             | 必填 | 说明                  |
15533| ------- | ---------------- | ---- | -------------------- |
15534| name     | string | 是   | 头部(header)的名称。      |
15535
15536
15537**返回值:**
15538
15539| 类型    | 说明                                     |
15540| ------- | --------------------------------------- |
15541| string | 头部(header)的值。|
15542
15543**示例:**
15544
15545示例完整示例代码参考[constructor](#constructor12)。
15546
15547## WebResourceHandler<sup>12+</sup>
15548
15549通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。
15550
15551### didReceiveResponse<sup>12+</sup>
15552
15553didReceiveResponse(response: WebSchemeHandlerResponse): void
15554
15555将构造的响应头传递给被拦截的请求。
15556
15557**系统能力:** SystemCapability.Web.Webview.Core
15558
15559**参数:**
15560
15561| 参数名          | 类型    |  必填  | 说明                                            |
15562| ---------------| ------- | ---- | ------------- |
15563| response      | [WebSchemeHandlerResponse](#webschemehandlerresponse12)  | 是   | 该拦截请求的响应。 |
15564
15565**错误码:**
15566
15567以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15568
15569| 错误码ID | 错误信息                              |
15570| -------- | ------------------------------------- |
15571|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15572| 17100021 | The resource handler is invalid. |
15573
15574**示例:**
15575
15576示例请参考[OnRequestStart](#onrequeststart12)。
15577
15578### didReceiveResponseBody<sup>12+</sup>
15579
15580didReceiveResponseBody(data: ArrayBuffer): void
15581
15582将构造的响应体传递给被拦截的请求。
15583
15584**系统能力:** SystemCapability.Web.Webview.Core
15585
15586**参数:**
15587
15588| 参数名          | 类型    |  必填  | 说明                                            |
15589| ---------------| ------- | ---- | ------------- |
15590| data      | ArrayBuffer  | 是   | 响应体数据。 |
15591
15592**错误码:**
15593
15594以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15595
15596| 错误码ID | 错误信息                              |
15597| -------- | ------------------------------------- |
15598|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15599| 17100021 | The resource handler is invalid. |
15600
15601**示例:**
15602
15603示例请参考[OnRequestStart](#onrequeststart12)。
15604
15605### didFinish<sup>12+</sup>
15606
15607didFinish(): void
15608
15609通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15610
15611**系统能力:** SystemCapability.Web.Webview.Core
15612
15613**错误码:**
15614
15615以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15616
15617| 错误码ID | 错误信息                              |
15618| -------- | ------------------------------------- |
15619| 17100021 | The resource handler is invalid. |
15620
15621**示例:**
15622
15623示例请参考[OnRequestStart](#onrequeststart12)。
15624
15625### didFail<sup>12+</sup>
15626
15627didFail(code: WebNetErrorList): void
15628
15629通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15630
15631**系统能力:** SystemCapability.Web.Webview.Core
15632
15633**参数:**
15634
15635| 参数名   | 类型    |  必填  | 说明                       |
15636| --------| ------- | ---- | ---------------------------|
15637|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15638
15639**错误码:**
15640
15641以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15642
15643| 错误码ID | 错误信息                              |
15644| -------- | ------------------------------------- |
15645| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15646| 17100021 | The resource handler is invalid. |
15647
15648**系统能力:** SystemCapability.Web.Webview.Core
15649
15650**示例:**
15651
15652示例请参考[OnRequestStart](#onrequeststart12)。
15653
15654## WebSchemeHandler<sup>12+</sup>
15655
15656用于拦截指定scheme的请求的拦截器。
15657
15658### onRequestStart<sup>12+</sup>
15659
15660onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void
15661
15662当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。
15663
15664**系统能力:** SystemCapability.Web.Webview.Core
15665
15666**参数**:
15667
15668| 参数名   | 类型                 | 必填 | 说明       |
15669| -------- | -------------------- | ---- | ---------- |
15670| callback   | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 |
15671
15672**错误码:**
15673
15674以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15675
15676| 错误码ID | 错误信息                              |
15677| -------- | ------------------------------------- |
15678| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
15679
15680**示例:**
15681
15682```ts
15683// xxx.ets
15684import { webview } from '@kit.ArkWeb';
15685import { BusinessError } from '@kit.BasicServicesKit';
15686import { buffer } from '@kit.ArkTS';
15687import { WebNetErrorList } from '@ohos.web.netErrorList';
15688
15689@Entry
15690@Component
15691struct WebComponent {
15692  controller: webview.WebviewController = new webview.WebviewController();
15693  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15694  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
15695
15696  build() {
15697    Column() {
15698      Web({ src: 'https://www.example.com', controller: this.controller })
15699        .onControllerAttached(() => {
15700          try {
15701            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
15702              console.log("[schemeHandler] onRequestStart");
15703              try {
15704                console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl());
15705                console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod());
15706                console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer());
15707                console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame());
15708                console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture());
15709                console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length);
15710                console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType());
15711                console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl());
15712                let header = request.getHeader();
15713                for (let i = 0; i < header.length; i++) {
15714                  console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue);
15715                }
15716                let stream = request.getHttpBodyStream();
15717                if (stream) {
15718                  console.log("[schemeHandler] onRequestStart has http body stream");
15719                } else {
15720                  console.log("[schemeHandler] onRequestStart has no http body stream");
15721                }
15722              } catch (error) {
15723                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15724              }
15725
15726              if (request.getRequestUrl().endsWith("example.com")) {
15727                return false;
15728              }
15729
15730              let response = new webview.WebSchemeHandlerResponse();
15731              try {
15732                response.setNetErrorCode(WebNetErrorList.NET_OK);
15733                response.setStatus(200);
15734                response.setStatusText("OK");
15735                response.setMimeType("text/html");
15736                response.setEncoding("utf-8");
15737                response.setHeaderByName("header1", "value1", false);
15738              } catch (error) {
15739                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15740              }
15741
15742              // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。
15743              let buf = buffer.from(this.htmlData)
15744              try {
15745                if (buf.length == 0) {
15746                  console.log("[schemeHandler] length 0");
15747                  resourceHandler.didReceiveResponse(response);
15748                  // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail
15749                  resourceHandler.didFail(WebNetErrorList.ERR_FAILED);
15750                } else {
15751                  console.log("[schemeHandler] length 1");
15752                  resourceHandler.didReceiveResponse(response);
15753                  resourceHandler.didReceiveResponseBody(buf.buffer);
15754                  resourceHandler.didFinish();
15755                }
15756              } catch (error) {
15757                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15758              }
15759              return true;
15760            })
15761
15762            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
15763              console.log("[schemeHandler] onRequestStop");
15764            });
15765
15766            this.controller.setWebSchemeHandler('https', this.schemeHandler);
15767          } catch (error) {
15768            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15769          }
15770        })
15771        .javaScriptAccess(true)
15772        .domStorageAccess(true)
15773    }
15774  }
15775}
15776```
15777### onRequestStop<sup>12+</sup>
15778
15779onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void
15780
15781当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点:
15782
157831.WebResourceHandler调用didFail或者didFinish。
15784
157852.此请求因为其他原因中断。
15786
15787**系统能力:** SystemCapability.Web.Webview.Core
15788
15789**参数**:
15790
15791| 参数名   | 类型                 | 必填 | 说明       |
15792| -------- | -------------------- | ---- | ---------- |
15793| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是   | 对应请求结束的回调函数。 |
15794
15795**错误码:**
15796
15797以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15798
15799| 错误码ID | 错误信息                              |
15800| -------- | ------------------------------------- |
15801| 401 | Invalid input parameter. |
15802
15803**示例:**
15804
15805完整示例代码参考[onRequestStart](#onrequeststart12)。
15806
15807## CacheOptions<sup>12+</sup>
15808
15809Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。
15810
15811**系统能力:** SystemCapability.Web.Webview.Core
15812
15813| 名称        | 类型   | 可读 | 可写 |说明                 |
15814| ----------- | ------ | -----|------|------------------- |
15815| responseHeaders   | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。   |
15816
15817## PlaybackStatus<sup>12+</sup>
15818
15819[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。
15820
15821**系统能力:** SystemCapability.Web.Webview.Core
15822
15823| 名称 | 值 | 说明 |
15824|------|----|------|
15825| PAUSED  | 0 | 播放状态为播放状态。 |
15826| PLAYING | 1 | 播放状态为暂停状态。 |
15827
15828## NetworkState<sup>12+<sup>
15829
15830播放器的网络状态。
15831
15832**系统能力:** SystemCapability.Web.Webview.Core
15833
15834| 名称 | 值 | 说明 |
15835|------|----|------|
15836| EMPTY         | 0 | 播放器还没有开始下载数据。 |
15837| IDLE          | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 |
15838| LOADING       | 2 | 播放器正在下载媒体数据。 |
15839| NETWORK_ERROR | 3 | 发生了网络错误。 |
15840
15841## ReadyState<sup>12+<sup>
15842
15843播放器的缓存状态。
15844
15845**系统能力:** SystemCapability.Web.Webview.Core
15846
15847| 名称 | 值 | 说明 |
15848|------|----|------|
15849| HAVE_NOTHING      | 0 | 没有缓存。 |
15850| HAVE_METADATA     | 1 | 只缓存了媒体元数据。 |
15851| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 |
15852| HAVE_FUTURE_DATA  | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 |
15853| HAVE_ENOUGH_DATA  | 4 | 缓存了足够的数据,保证播放流畅。 |
15854
15855## MediaError<sup>12+<sup>
15856
15857播放器的错误类型。
15858
15859**系统能力:** SystemCapability.Web.Webview.Core
15860
15861| 名称 | 值 | 说明 |
15862|------|----|------|
15863| NETWORK_ERROR | 1 | 网络错误。 |
15864| FORMAT_ERROR  | 2 | 媒体格式错误。 |
15865| DECODE_ERROR  | 3 | 解码错误。 |
15866
15867## NativeMediaPlayerHandler<sup>12+<sup>
15868
15869[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。
15870应用通过该对象,将播放器的状态报告给ArkWeb内核。
15871
15872### handleStatusChanged<sup>12+<sup>
15873
15874handleStatusChanged(status: PlaybackStatus): void
15875
15876当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。
15877
15878**系统能力:** SystemCapability.Web.Webview.Core
15879
15880**参数:**
15881
15882| 参数名 | 类型 | 必填 | 说明 |
15883|--------|------|------|------|
15884| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 |
15885
15886**示例:**
15887
15888完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15889
15890### handleVolumeChanged<sup>12+<sup>
15891
15892handleVolumeChanged(volume: number): void
15893
15894当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。
15895
15896**系统能力:** SystemCapability.Web.Webview.Core
15897
15898**参数:**
15899
15900| 参数名 | 类型 | 必填 | 说明 |
15901|--------|------|------|------|
15902| volume | number | 是 | 播放器的音量。 |
15903
15904**示例:**
15905
15906完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15907
15908### handleMutedChanged<sup>12+<sup>
15909
15910handleMutedChanged(muted: boolean): void
15911
15912当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。
15913
15914**系统能力:** SystemCapability.Web.Webview.Core
15915
15916**参数:**
15917
15918| 参数名 | 类型 | 必填 | 说明 |
15919|--------|------|------|------|
15920| muted | boolean | 是 | 当前播放器是否静音。 |
15921
15922**示例:**
15923
15924完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15925
15926### handlePlaybackRateChanged<sup>12+<sup>
15927
15928handlePlaybackRateChanged(playbackRate: number): void
15929
15930当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。
15931
15932**系统能力:** SystemCapability.Web.Webview.Core
15933
15934**参数:**
15935
15936| 参数名 | 类型 | 必填 | 说明 |
15937|--------|------|------|------|
15938| playbackRate | number | 是 | 播放速率。 |
15939
15940**示例:**
15941
15942完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15943
15944### handleDurationChanged<sup>12+<sup>
15945
15946handleDurationChanged(duration: number): void
15947
15948当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。
15949
15950**系统能力:** SystemCapability.Web.Webview.Core
15951
15952**参数:**
15953
15954| 参数名 | 类型 | 必填 | 说明 |
15955|--------|------|------|------|
15956| duration | number | 是 | 媒体的总时长。单位: 秒 。 |
15957
15958**示例:**
15959
15960完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15961
15962### handleTimeUpdate<sup>12+<sup>
15963
15964handleTimeUpdate(currentPlayTime: number): void
15965
15966当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。
15967
15968**系统能力:** SystemCapability.Web.Webview.Core
15969
15970**参数:**
15971
15972| 参数名 | 类型 | 必填 | 说明 |
15973|--------|------|------|------|
15974| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。  |
15975
15976**示例:**
15977
15978完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15979
15980### handleBufferedEndTimeChanged<sup>12+<sup>
15981
15982handleBufferedEndTimeChanged(bufferedEndTime: number): void
15983
15984当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。
15985
15986**系统能力:** SystemCapability.Web.Webview.Core
15987
15988**参数:**
15989
15990| 参数名 | 类型 | 必填 | 说明 |
15991|--------|------|------|------|
15992| bufferedEndTime | number | 是 | 媒体缓冲的时长。 |
15993
15994**示例:**
15995
15996完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15997
15998### handleEnded<sup>12+<sup>
15999
16000handleEnded(): void
16001
16002当媒体播放结束时,调用该方法通知给 ArkWeb 内核。
16003
16004**系统能力:** SystemCapability.Web.Webview.Core
16005
16006**示例:**
16007
16008完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16009
16010### handleNetworkStateChanged<sup>12+<sup>
16011
16012handleNetworkStateChanged(state: NetworkState): void
16013
16014当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。
16015
16016**系统能力:** SystemCapability.Web.Webview.Core
16017
16018**参数:**
16019
16020| 参数名 | 类型 | 必填 | 说明 |
16021|--------|------|------|------|
16022| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 |
16023
16024**示例:**
16025
16026完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16027
16028### handleReadyStateChanged<sup>12+<sup>
16029
16030handleReadyStateChanged(state: ReadyState): void
16031
16032当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。
16033
16034**系统能力:** SystemCapability.Web.Webview.Core
16035
16036**参数:**
16037
16038| 参数名 | 类型 | 必填 | 说明 |
16039|--------|------|------|------|
16040| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 |
16041
16042**示例:**
16043
16044完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16045
16046### handleFullscreenChanged<sup>12+<sup>
16047
16048handleFullscreenChanged(fullscreen: boolean): void
16049
16050当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。
16051
16052**系统能力:** SystemCapability.Web.Webview.Core
16053
16054**参数:**
16055
16056| 参数名 | 类型 | 必填 | 说明 |
16057|--------|------|------|------|
16058| fullscreen | boolean | 是 | 是否全屏。 |
16059
16060**示例:**
16061
16062完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16063
16064### handleSeeking<sup>12+<sup>
16065
16066handleSeeking(): void
16067
16068当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。
16069
16070**系统能力:** SystemCapability.Web.Webview.Core
16071
16072**示例:**
16073
16074完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16075
16076### handleSeekFinished<sup>12+<sup>
16077
16078handleSeekFinished(): void
16079
16080当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。
16081
16082**系统能力:** SystemCapability.Web.Webview.Core
16083
16084**示例:**
16085
16086完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16087
16088### handleError<sup>12+<sup>
16089
16090handleError(error: MediaError, errorMessage: string): void
16091
16092当播放器发生错误时, 调用该方法通知 ArkWeb 内核。
16093
16094**系统能力:** SystemCapability.Web.Webview.Core
16095
16096**参数:**
16097
16098| 参数名 | 类型 | 必填 | 说明 |
16099|--------|------|------|------|
16100| error | [MediaError](#mediaerror12) | 是 | 错误类型。 |
16101| errorMessage | string | 是 | 错误的详细描述。 |
16102
16103**示例:**
16104
16105完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16106
16107### handleVideoSizeChanged<sup>12+<sup>
16108
16109handleVideoSizeChanged(width: number, height: number): void
16110
16111当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。
16112
16113**系统能力:** SystemCapability.Web.Webview.Core
16114
16115**参数:**
16116
16117| 参数名 | 类型 | 必填 | 说明 |
16118|--------|------|------|------|
16119| width  | number | 是 | 视频的宽。 |
16120| height | number | 是 | 视频的高。 |
16121
16122**示例:**
16123
16124完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16125
16126## SuspendType<sup>12+<sup>
16127
16128表示播放器的挂起类型。
16129
16130**系统能力:** SystemCapability.Web.Webview.Core
16131
16132| 名称 | 值 | 说明 |
16133|------|----|------|
16134| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 |
16135| ENTER_BACKGROUND         | 1 | 页面进后台。 |
16136| AUTO_CLEANUP             | 2 | 系统自动清理。 |
16137
16138## NativeMediaPlayerBridge<sup>12+<sup>
16139
16140[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。
16141接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。
16142ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。
16143
16144### updateRect<sup>12+<sup>
16145
16146updateRect(x: number, y: number, width: number, height: number): void
16147
16148更新 surface 位置信息。
16149
16150**系统能力:** SystemCapability.Web.Webview.Core
16151
16152**参数:**
16153
16154| 参数名 | 类型 | 必填 | 说明 |
16155|--------|------|------|------|
16156| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 |
16157| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 |
16158| width  | number | 是 | surface 的宽度。 |
16159| height | number | 是 | surface 的高度。 |
16160
16161**示例:**
16162
16163完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16164
16165### play<sup>12+<sup>
16166
16167play(): void
16168
16169播放视频。
16170
16171**系统能力:** SystemCapability.Web.Webview.Core
16172
16173**示例:**
16174
16175完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16176
16177### pause<sup>12+<sup>
16178
16179pause(): void
16180
16181暂停播放。
16182
16183**系统能力:** SystemCapability.Web.Webview.Core
16184
16185**示例:**
16186
16187完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16188
16189### seek<sup>12+<sup>
16190
16191seek(targetTime: number): void
16192
16193播放跳转到某个时间点。
16194
16195**系统能力:** SystemCapability.Web.Webview.Core
16196
16197**参数:**
16198
16199| 参数名 | 类型 | 必填 | 说明 |
16200|--------|------|------|------|
16201| targetTime | number | 是 | 单位: 秒。 |
16202
16203**示例:**
16204
16205完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16206
16207### setVolume<sup>12+<sup>
16208
16209setVolume(volume: number): void
16210
16211设置播放器音量值。
16212取值范围: [0, 1.0]
16213
16214**参数:**
16215
16216| 参数名 | 类型 | 必填 | 说明 |
16217|--------|------|------|------|
16218| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 |
16219
16220**系统能力:** SystemCapability.Web.Webview.Core
16221
16222**示例:**
16223
16224完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16225
16226### setMuted<sup>12+<sup>
16227
16228setMuted(muted: boolean): void
16229
16230设置静音状态。
16231
16232**系统能力:** SystemCapability.Web.Webview.Core
16233
16234**参数:**
16235
16236| 参数名 | 类型 | 必填 | 说明 |
16237|--------|------|------|------|
16238| muted | boolean | 是 | 是否静音。 |
16239
16240**示例:**
16241
16242完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16243
16244### setPlaybackRate<sup>12+<sup>
16245
16246setPlaybackRate(playbackRate: number): void
16247
16248设置播放速度。
16249取值范围: [0, 10.0]
16250
16251**系统能力:** SystemCapability.Web.Webview.Core
16252
16253**参数:**
16254
16255| 参数名 | 类型 | 必填 | 说明 |
16256|--------|------|------|------|
16257| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 |
16258
16259**示例:**
16260
16261完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16262
16263### release<sup>12+<sup>
16264
16265release(): void
16266
16267销毁播放器。
16268
16269**系统能力:** SystemCapability.Web.Webview.Core
16270
16271**示例:**
16272
16273完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16274
16275### enterFullscreen<sup>12+<sup>
16276
16277enterFullscreen(): void
16278
16279播放器进入全屏。
16280
16281**系统能力:** SystemCapability.Web.Webview.Core
16282
16283**示例:**
16284
16285完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16286
16287### exitFullscreen<sup>12+<sup>
16288
16289exitFullscreen(): void
16290
16291播放器退出全屏。
16292
16293**系统能力:** SystemCapability.Web.Webview.Core
16294
16295**示例:**
16296
16297完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16298
16299### resumePlayer<sup>12+<sup>
16300
16301resumePlayer?(): void
16302
16303通知应用重建应用内播放器,并恢复应用内播放器的状态信息。
16304
16305**系统能力:** SystemCapability.Web.Webview.Core
16306
16307**示例:**
16308
16309完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16310
16311### suspendPlayer<sup>12+<sup>
16312
16313suspendPlayer?(type: SuspendType): void
16314
16315通知应用销毁应用内播放器,并保存应用内播放器的状态信息。
16316
16317**系统能力:** SystemCapability.Web.Webview.Core
16318
16319**参数:**
16320
16321| 参数名 | 类型 | 必填 | 说明 |
16322|--------|------|------|------|
16323| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。|
16324
16325**示例:**
16326
16327完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16328
16329## MediaType<sup>12+<sup>
16330
16331表示媒体类型。
16332
16333**系统能力:** SystemCapability.Web.Webview.Core
16334
16335| 名称 | 值 | 说明 |
16336|------|----|------|
16337| VIDEO | 0 | 视频。 |
16338| AUDIO | 1 | 音频。 |
16339
16340## SourceType<sup>12+<sup>
16341
16342表示媒体源的类型。
16343
16344**系统能力:** SystemCapability.Web.Webview.Core
16345
16346| 名称 | 值 | 说明 |
16347|------|----|------|
16348| URL | 0 | 媒体源的类型是 URL 。 |
16349| MSE | 1 | 媒体源的类型是 blob 。 |
16350
16351## MediaSourceInfo<sup>12+<sup>
16352
16353表示媒体源的信息。
16354
16355**系统能力:** SystemCapability.Web.Webview.Core
16356
16357| 名称 | 类型 | 必填 | 说明 |
16358|------|------|------|------|
16359| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 |
16360| source | string | 是 | 媒体源地址。 |
16361| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 |
16362
16363## NativeMediaPlayerSurfaceInfo<sup>12+<sup>
16364
16365[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。
16366
16367**系统能力:** SystemCapability.Web.Webview.Core
16368
16369| 名称 | 类型 | 必填 | 说明 |
16370|------|------|------|------|
16371| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 |
16372| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 |
16373
16374## Preload<sup>12+<sup>
16375
16376播放器预加载媒体数据。
16377
16378**系统能力:** SystemCapability.Web.Webview.Core
16379
16380| 名称 | 值 | 说明 |
16381|------|----|------|
16382| NONE     | 0 | 不预加载。 |
16383| METADATA | 1 | 只预加载媒体的元数据。 |
16384| AUTO     | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 |
16385
16386## MediaInfo<sup>12+<sup>
16387
16388[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。
16389包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。
16390
16391**系统能力:** SystemCapability.Web.Webview.Core
16392
16393| 名称 | 类型 | 必填 | 说明 |
16394|------|------|------|------|
16395| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。|
16396| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 |
16397| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 |
16398| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 |
16399| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。 |
16400| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 |
16401| muted | boolean | 是 | 是否要求静音播放。 |
16402| posterUrl | string | 是 | 海报的地址。 |
16403| preload | [Preload](#preload12) | 是 | 是否需要预加载。 |
16404| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 |
16405| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 |
16406
16407
16408## CreateNativeMediaPlayerCallback<sup>12+<sup>
16409
16410type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge
16411
16412[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。
16413一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。
16414
16415**系统能力:** SystemCapability.Web.Webview.Core
16416
16417**参数:**
16418
16419| 参数名 | 类型 | 必填 | 说明 |
16420|--------|------|------|------|
16421| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 |
16422| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 |
16423
16424**返回值:**
16425
16426| 类型 | 说明 |
16427|------|------|
16428| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 |
16429
16430**示例:**
16431
16432完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
16433
16434## OfflineResourceMap<sup>12+</sup>
16435
16436本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。
16437
16438**系统能力:** SystemCapability.Web.Webview.Core
16439
16440| 名称        | 类型   | 可读 | 可写 |说明                 |
16441| ----------- | ------ | -----|------|------------------- |
16442| urlList | Array\<string\> | 是   | 是   | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。      |
16443| resource | Uint8Array | 是   | 是   | 本地离线资源的内容。      |
16444| 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。      |
16445| type | [OfflineResourceType](#offlineresourcetype12) | 是   | 是   | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。      |
16446
16447## OfflineResourceType<sup>12+</sup>
16448
16449[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。
16450
16451**系统能力:** SystemCapability.Web.Webview.Core
16452
16453| 名称         | 值 | 说明                              |
16454| ------------ | -- |--------------------------------- |
16455| IMAGE  | 0 | 图片类型的资源。 |
16456| CSS       | 1 | CSS类型的资源。|
16457| CLASSIC_JS       | 2 | 通过<script src="" /\>标签加载的Javascript资源。|
16458| MODULE_JS      | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。|
16459
16460## WebResourceType<sup>12+</sup>
16461
16462资源请求的资源类型。
16463
16464**系统能力:** SystemCapability.Web.Webview.Core
16465
16466| 名称         | 值 | 说明                              |
16467| ------------ | -- |--------------------------------- |
16468| MAIN_FRAME | 0 | 顶层页面。 |
16469| SUB_FRAME | 1 | Frame或Iframe。 |
16470| STYLE_SHEET | 2 | CSS样式表。 |
16471| SCRIPT | 3 | 外部脚本。 |
16472| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 |
16473| FONT_RESOURCE | 5 | 字体。 |
16474| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 |
16475| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 |
16476| MEDIA | 8 | 媒体资源。 |
16477| WORKER | 9 | 专用工作线程的主资源。 |
16478| SHARED_WORKER | 10 | 共享工作线程的主资源。 |
16479| PREFETCH | 11 | 明确的预取请求。 |
16480| FAVICON | 12 | 网站图标。 |
16481| XHR | 13 | XMLHttpRequest。 |
16482| PING | 14 | <a ping\>/sendBeacon的Ping请求。 |
16483| SERVICE_WORKER | 15 | service worker的主资源。 |
16484| CSP_REPORT | 16 | 内容安全策略违规报告。 |
16485| PLUGIN_RESOURCE | 17 | 插件请求的资源。 |
16486| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 |
16487| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 |
16488
16489## RectEvent<sup>12+<sup>
16490
16491矩形定义。
16492
16493**系统能力:** SystemCapability.Web.Webview.Core
16494
16495| 名称           | 类型       | 可读 | 可写 | 说明                         |
16496| -------------- | --------- | ---- | ---- | ---------------------------- |
16497| x  | number   | 是   | 是   | 矩形区域左上角x坐标。    |
16498| y  | number   | 是   | 是   | 矩形区域左上角y坐标。    |
16499| width  | number   | 是   | 是   | 矩形的宽度。    |
16500| height  | number   | 是   | 是   | 矩形的高度。    |
16501
16502## BackForwardCacheSupportedFeatures<sup>12+<sup>
16503
16504选择性允许使用以下特性的页面进入前进后退缓存。完整示例代码参考[enableBackForwardCache](#enablebackforwardcache12)。
16505
16506**系统能力:** SystemCapability.Web.Webview.Core
16507
16508| 名称 | 类型 | 必填 | 说明 |
16509|------|------|------|------|
16510| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为同层渲染元素创建的原生控件的生命周期,避免造成泄漏。 |
16511| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为视频元素创建的原生控件的生命周期,避免造成泄漏。|
16512
16513### constructor<sup>12+</sup>
16514
16515constructor()
16516
16517BackForwardCacheSupportedFeatures的构造函数。
16518
16519**系统能力:** SystemCapability.Web.Webview.Core
16520
16521## BackForwardCacheOptions<sup>12+<sup>
16522
16523前进后退缓存相关设置对象,用来控制Web组件前进后退缓存相关选项。完整示例代码参考[BackForwardCacheOptions](#backforwardcacheoptions12)。
16524
16525**系统能力:** SystemCapability.Web.Webview.Core
16526
16527| 名称 | 类型 | 必填 | 说明 |
16528|------|------|------|------|
16529| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 |
16530| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。|
16531
16532### constructor<sup>12+</sup>
16533
16534constructor()
16535
16536BackForwardCacheOptions的构造函数。
16537
16538**系统能力:** SystemCapability.Web.Webview.Core
16539
16540## AdsBlockManager<sup>12+</sup>
16541
16542通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。
16543
16544### setAdsBlockRules<sup>12+</sup>
16545
16546static setAdsBlockRules(rulesFile: string, replace: boolean): void
16547
16548向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。
16549
16550> **说明:**
16551>
16552> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。
16553
16554**系统能力:** SystemCapability.Web.Webview.Core
16555
16556**参数:**
16557
16558| 参数名     | 类型   | 必填 | 说明                               |
16559| ---------- | ------ | ---- | -------------------------------- |
16560| rulesFile | string | 是   | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 |
16561| replace   | boolean | 是   | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 |
16562
16563**错误码:**
16564
16565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16566
16567| 错误码ID | 错误信息                  |
16568| -------- | ----------------------- |
16569|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16570
16571**示例:**
16572
16573```ts
16574// xxx.ets
16575import { webview } from '@kit.ArkWeb';
16576import { picker, fileUri } from '@kit.CoreFileKit';
16577
16578// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中
16579@Entry
16580@Component
16581struct WebComponent {
16582  controller: webview.WebviewController = new webview.WebviewController();
16583
16584  build() {
16585    Row() {
16586      Flex() {
16587        Button({ type: ButtonType.Capsule }) {
16588          Text("setAdsBlockRules")
16589        }
16590        .onClick(() => {
16591          try {
16592            let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions();
16593            let documentPicker: ESObject = new picker.DocumentViewPicker();
16594            documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => {
16595              if (documentSelectResult && documentSelectResult.length > 0) {
16596                let fileRealPath = new fileUri.FileUri(documentSelectResult[0]);
16597                console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath);
16598                webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true);
16599              }
16600            })
16601          } catch (err) {
16602            console.error('DocumentViewPicker.select failed with err:' + err);
16603          }
16604        })
16605      }
16606    }
16607  }
16608}
16609```
16610
16611### addAdsBlockDisallowedList<sup>12+</sup>
16612
16613static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16614
16615向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。
16616
16617> **说明:**
16618>
16619> 此接口设置的域名不会持久化,应用重启需要重新设置。
16620>
16621> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。
16622
16623**系统能力:** SystemCapability.Web.Webview.Core
16624
16625**参数:**
16626
16627| 参数名     | 类型   | 必填 | 说明                               |
16628| ---------- | ------ | ---- | -------------------------------- |
16629| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16630
16631**错误码:**
16632
16633以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16634
16635| 错误码ID | 错误信息                  |
16636| -------- | ----------------------- |
16637|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16638
16639**示例:**
16640
16641```ts
16642// xxx.ets
16643import { webview } from '@kit.ArkWeb';
16644
16645// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16646@Entry
16647@Component
16648struct WebComponent {
16649  main_url: string = 'https://www.example.com';
16650  text_input_controller: TextInputController = new TextInputController();
16651  controller: webview.WebviewController = new webview.WebviewController();
16652  @State input_text: string = 'https://www.example.com';
16653
16654  build() {
16655    Column() {
16656      Row() {
16657        Flex() {
16658          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16659            .id("input_url")
16660            .height(40)
16661            .margin(5)
16662            .borderColor(Color.Blue)
16663            .onChange((value: string) => {
16664              this.input_text = value;
16665            })
16666
16667          Button({type: ButtonType.Capsule}) { Text("Go") }
16668          .onClick(() => {
16669            this.controller.loadUrl(this.input_text);
16670          })
16671
16672          Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") }
16673          .onClick(() => {
16674            let arrDomainSuffixes = new Array<string>();
16675            arrDomainSuffixes.push('example.com');
16676            arrDomainSuffixes.push('abcdefg.cn');
16677            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes);
16678          })
16679        }
16680      }
16681      Web({ src: this.main_url, controller: this.controller })
16682        .onControllerAttached(()=>{
16683          this.controller.enableAdsBlock(true);
16684        })
16685    }
16686  }
16687}
16688```
16689
16690### removeAdsBlockDisallowedList<sup>12+</sup>
16691
16692static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16693
16694从AdsBlockManager的DisallowedList中删除一组域名。
16695
16696> **说明:**
16697>
16698> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16699
16700**系统能力:** SystemCapability.Web.Webview.Core
16701
16702**参数:**
16703
16704| 参数名     | 类型   | 必填 | 说明                               |
16705| ---------- | ------ | ---- | -------------------------------- |
16706| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16707
16708**错误码:**
16709
16710以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16711
16712| 错误码ID | 错误信息                  |
16713| -------- | ----------------------- |
16714|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16715
16716**示例:**
16717
16718```ts
16719// xxx.ets
16720import { webview } from '@kit.ArkWeb';
16721
16722// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16723@Entry
16724@Component
16725struct WebComponent {
16726  main_url: string = 'https://www.example.com';
16727  text_input_controller: TextInputController = new TextInputController();
16728  controller: webview.WebviewController = new webview.WebviewController();
16729  @State input_text: string = 'https://www.example.com';
16730
16731  build() {
16732    Column() {
16733      Row() {
16734        Flex() {
16735          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16736            .id("input_url")
16737            .height(40)
16738            .margin(5)
16739            .borderColor(Color.Blue)
16740            .onChange((value: string) => {
16741              this.input_text = value;
16742            })
16743
16744          Button({type: ButtonType.Capsule}) { Text("Go") }
16745          .onClick(() => {
16746            this.controller.loadUrl(this.input_text);
16747          })
16748
16749          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") }
16750          .onClick(() => {
16751            let arrDomainSuffixes = new Array<string>();
16752            arrDomainSuffixes.push('example.com');
16753            arrDomainSuffixes.push('abcdefg.cn');
16754            webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes);
16755          })
16756        }
16757      }
16758      Web({ src: this.main_url, controller: this.controller })
16759        .onControllerAttached(()=>{
16760          this.controller.enableAdsBlock(true);
16761        })
16762    }
16763  }
16764}
16765```
16766
16767### clearAdsBlockDisallowedList<sup>12+</sup>
16768
16769static clearAdsBlockDisallowedList(): void
16770
16771清空AdsBlockManager的DisallowedList。
16772
16773**系统能力:** SystemCapability.Web.Webview.Core
16774
16775**示例:**
16776
16777```ts
16778// xxx.ets
16779import { webview } from '@kit.ArkWeb';
16780
16781@Entry
16782@Component
16783struct WebComponent {
16784  main_url: string = 'https://www.example.com';
16785  text_input_controller: TextInputController = new TextInputController();
16786  controller: webview.WebviewController = new webview.WebviewController();
16787  @State input_text: string = 'https://www.example.com';
16788
16789  build() {
16790    Column() {
16791      Row() {
16792        Flex() {
16793          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16794            .id("input_url")
16795            .height(40)
16796            .margin(5)
16797            .borderColor(Color.Blue)
16798            .onChange((value: string) => {
16799              this.input_text = value;
16800            })
16801
16802          Button({type: ButtonType.Capsule}) { Text("Go") }
16803          .onClick(() => {
16804            this.controller.loadUrl(this.input_text);
16805          })
16806
16807          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") }
16808          .onClick(() => {
16809            webview.AdsBlockManager.clearAdsBlockDisallowedList();
16810          })
16811        }
16812      }
16813      Web({ src: this.main_url, controller: this.controller })
16814        .onControllerAttached(()=>{
16815          this.controller.enableAdsBlock(true);
16816        })
16817    }
16818  }
16819}
16820```
16821
16822### addAdsBlockAllowedList<sup>12+</sup>
16823
16824static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16825
16826向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。
16827
16828> **说明:**
16829>
16830> 此接口设置的域名不会持久化,应用重启需要重新设置。
16831>
16832> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。
16833
16834**系统能力:** SystemCapability.Web.Webview.Core
16835
16836**参数:**
16837
16838| 参数名     | 类型   | 必填 | 说明                               |
16839| ---------- | ------ | ---- | -------------------------------- |
16840| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16841
16842**错误码:**
16843
16844以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16845
16846| 错误码ID | 错误信息                  |
16847| -------- | ----------------------- |
16848|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16849
16850**示例:**
16851
16852```ts
16853// xxx.ets
16854import { webview } from '@kit.ArkWeb';
16855
16856// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16857@Entry
16858@Component
16859struct WebComponent {
16860  main_url: string = 'https://www.example.com';
16861  text_input_controller: TextInputController = new TextInputController();
16862  controller: webview.WebviewController = new webview.WebviewController();
16863  @State input_text: string = 'https://www.example.com';
16864
16865  build() {
16866    Column() {
16867      Row() {
16868        Flex() {
16869          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16870            .id("input_url")
16871            .height(40)
16872            .margin(5)
16873            .borderColor(Color.Blue)
16874            .onChange((value: string) => {
16875              this.input_text = value;
16876            })
16877
16878          Button({type: ButtonType.Capsule}) { Text("Go") }
16879          .onClick(() => {
16880            this.controller.loadUrl(this.input_text);
16881          })
16882
16883          Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") }
16884          .onClick(() => {
16885            let arrDisallowDomainSuffixes = new Array<string>();
16886            arrDisallowDomainSuffixes.push('example.com');
16887            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes);
16888
16889            let arrAllowedDomainSuffixes = new Array<string>();
16890            arrAllowedDomainSuffixes.push('news.example.com');
16891            webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes);
16892          })
16893        }
16894      }
16895      Web({ src: this.main_url, controller: this.controller })
16896        .onControllerAttached(()=>{
16897          this.controller.enableAdsBlock(true)
16898        })
16899    }
16900  }
16901}
16902```
16903
16904### removeAdsBlockAllowedList<sup>12+</sup>
16905
16906static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16907
16908从AdsBlockManager的AllowedList中删除一组域名。
16909
16910> **说明:**
16911>
16912> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16913
16914**系统能力:** SystemCapability.Web.Webview.Core
16915
16916**参数:**
16917
16918| 参数名     | 类型   | 必填 | 说明                               |
16919| ---------- | ------ | ---- | -------------------------------- |
16920| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16921
16922**错误码:**
16923
16924以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16925
16926| 错误码ID | 错误信息                  |
16927| -------- | ----------------------- |
16928|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16929
16930**示例:**
16931
16932```ts
16933// xxx.ets
16934import { webview } from '@kit.ArkWeb';
16935
16936// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16937@Entry
16938@Component
16939struct WebComponent {
16940  main_url: string = 'https://www.example.com';
16941  text_input_controller: TextInputController = new TextInputController();
16942  controller: webview.WebviewController = new webview.WebviewController();
16943  @State input_text: string = 'https://www.example.com';
16944
16945  build() {
16946    Column() {
16947      Row() {
16948        Flex() {
16949          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16950            .id("input_url")
16951            .height(40)
16952            .margin(5)
16953            .borderColor(Color.Blue)
16954            .onChange((value: string) => {
16955              this.input_text = value;
16956            })
16957
16958          Button({type: ButtonType.Capsule}) { Text("Go") }
16959          .onClick(() => {
16960            this.controller.loadUrl(this.input_text);
16961          })
16962
16963          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") }
16964          .onClick(() => {
16965            let arrDomainSuffixes = new Array<string>();
16966            arrDomainSuffixes.push('example.com');
16967            arrDomainSuffixes.push('abcdefg.cn');
16968            webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes);
16969          })
16970        }
16971      }
16972      Web({ src: this.main_url, controller: this.controller })
16973        .onControllerAttached(()=>{
16974          this.controller.enableAdsBlock(true);
16975        })
16976    }
16977  }
16978}
16979```
16980
16981### clearAdsBlockAllowedList<sup>12+</sup>
16982
16983static clearAdsBlockAllowedList(): void
16984
16985清空AdsBlockManager的AllowedList。
16986
16987**系统能力:** SystemCapability.Web.Webview.Core
16988
16989**示例:**
16990
16991```ts
16992// xxx.ets
16993import { webview } from '@kit.ArkWeb';
16994
16995@Entry
16996@Component
16997struct WebComponent {
16998  main_url: string = 'https://www.example.com';
16999  text_input_controller: TextInputController = new TextInputController();
17000  controller: webview.WebviewController = new webview.WebviewController();
17001  @State input_text: string = 'https://www.example.com';
17002
17003
17004  build() {
17005    Column() {
17006      Row() {
17007        Flex() {
17008          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
17009            .id("input_url")
17010            .height(40)
17011            .margin(5)
17012            .borderColor(Color.Blue)
17013            .onChange((value: string) => {
17014              this.input_text = value;
17015            })
17016
17017          Button({type: ButtonType.Capsule}) { Text("Go") }
17018          .onClick(() => {
17019            this.controller.loadUrl(this.input_text);
17020          })
17021
17022          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") }
17023          .onClick(() => {
17024            webview.AdsBlockManager.clearAdsBlockAllowedList();
17025          })
17026        }
17027      }
17028      Web({ src: this.main_url, controller: this.controller })
17029      .onControllerAttached(()=>{
17030        this.controller.enableAdsBlock(true);
17031      })
17032    }
17033  }
17034}
17035```
17036
17037## SnapshotInfo<sup>12+</sup>
17038
17039获取全量绘制结果入参。
17040
17041**系统能力:** SystemCapability.Web.Webview.Core
17042
17043| 名称 | 类型 |  必填 | 说明 |
17044|------|------|------|------|
17045| id | string | 否 | snapshot的id。|
17046| 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。)|
17047
17048## SnapshotResult<sup>12+</sup>
17049
17050全量绘制回调结果。
17051
17052**系统能力:** SystemCapability.Web.Webview.Core
17053
17054| 名称 | 类型 | 必填 |  说明 |
17055|------|------|--|---------|
17056| id | string | 否 | snapshot的id。|
17057| status | boolean | 否 |  snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。|
17058| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions)   | 否 | web绘制的真实尺寸,number类型,单位vp。|
17059| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。|
17060
17061> **说明:**
17062>
17063> 仅支持对渲染进程上的资源进行截图:静态图片和文本。
17064> 不支持动态视频,如果页面有视频则截图时会显示该视频的占位图片。
17065
17066## ScrollType<sup>12+</sup>
17067
17068Scroll滚动类型,用于[setScrollable](#setscrollable12)。
17069
17070**系统能力:** SystemCapability.Web.Webview.Core
17071
17072| 名称         | 值 | 说明                              |
17073| ------------ | -- |--------------------------------- |
17074| EVENT  | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。|
17075
17076## PressureLevel<sup>14+</sup>
17077
17078内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。
17079
17080**系统能力:** SystemCapability.Web.Webview.Core
17081
17082| 名称 | 值 | 说明 |
17083| ------------------------------- | - | ---------- |
17084| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 |
17085| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 |
17086
17087##  PdfConfiguration<sup>14+</sup>
17088
17089createPdf函数输入参数。
17090
17091> **说明:**
17092>
17093> 英寸与像素之间转换公式:像素 = 96 * 英寸。
17094
17095**系统能力:** SystemCapability.Web.Webview.Core
17096
17097| 名称                  | 类型    | 必填 | 说明                                                         |
17098| --------------------- | ------- | ---- | ------------------------------------------------------------ |
17099| width                 | number  | 是   | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。   |
17100| height                | number  | 是   | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。  |
17101| scale                 | number  | 否   | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 |
17102| marginTop             | number  | 是   | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17103| marginBottom          | number  | 是   | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17104| marginRight           | number  | 是   | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17105| marginLeft            | number  | 是   | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
17106| shouldPrintBackground | boolean | 否   | 是否打印背景颜色。默认值:false。                            |
17107
17108## PdfData<sup>14+</sup>
17109
17110createPdf函数输出数据流类。
17111
17112> **说明:**
17113>
17114> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。
17115
17116### pdfArrayBuffer<sup>14+</sup>
17117
17118pdfArrayBuffer(): Uint8Array
17119
17120获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。
17121
17122**系统能力:** SystemCapability.Web.Webview.Core
17123
17124**返回值:**
17125
17126| 类型       | 说明     |
17127| ---------- | -------- |
17128| Uint8Array | 数据流。 |
17129
17130## ScrollOffset<sup>13+</sup>
17131
17132网页当前的滚动偏移量。
17133
17134**系统能力:** SystemCapability.Web.Webview.Core
17135
17136| 名称 | 类型   | 可读 | 可写 | 说明                                                         |
17137| ---- | ------ | ---- | ---- | ------------------------------------------------------------ |
17138| x    | number | 是   | 是   | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 |
17139| y    | number | 是   | 是   | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 |
17140