1# @ohos.web.webview (Webview)
2
3@ohos.web.webview提供web控制能力,[Web](ts-basic-components-web.md)组件提供网页显示的能力。
4
5> **说明:**
6>
7> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 示例效果请以真机运行为准,当前IDE预览器不支持。
10
11## 需要权限
12
13访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。
14
15## 导入模块
16
17```ts
18import { webview } from '@kit.ArkWeb';
19```
20
21## once
22
23once(type: string, callback: Callback\<void\>): void
24
25订阅一次指定类型Web事件的回调。
26
27**系统能力:** SystemCapability.Web.Webview.Core
28
29**参数:**
30
31| 参数名  | 类型              | 必填 | 说明                  |
32| ------- | ---------------- | ---- | -------------------- |
33| type     | string          | 是   | Web事件的类型,目前支持:"webInited"(Web初始化完成)。      |
34| callback | Callback\<void\> | 是   | 所订阅的回调函数。 |
35
36**错误码:**
37
38以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
39
40| 错误码ID | 错误信息                  |
41| -------- | ----------------------- |
42| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
43
44**示例:**
45
46```ts
47// xxx.ets
48import { webview } from '@kit.ArkWeb';
49
50webview.once("webInited", () => {
51  console.log("configCookieSync");
52  webview.WebCookieManager.configCookieSync("https://www.example.com", "a=b");
53})
54
55@Entry
56@Component
57struct WebComponent {
58  controller: webview.WebviewController = new webview.WebviewController();
59
60  build() {
61    Column() {
62      Web({ src: 'www.example.com', controller: this.controller })
63    }
64  }
65}
66```
67
68## WebMessagePort
69
70通过WebMessagePort可以进行消息的发送以及接收。
71
72### 属性
73
74**系统能力:** SystemCapability.Web.Webview.Core
75
76| 名称         | 类型   | 可读 | 可写 | 说明                                              |
77| ------------ | ------ | ---- | ---- | ------------------------------------------------|
78| isExtentionType<sup>10+</sup> | boolean | 是   | 是 | 创建WebMessagePort时是否指定使用扩展增强接口。   |
79
80### postMessageEvent
81
82postMessageEvent(message: WebMessage): void
83
84发送消息,必须先调用[onMessageEvent](#onmessageevent),否则会发送失败。完整示例代码参考[postMessage](#postmessage)。
85
86**系统能力:** SystemCapability.Web.Webview.Core
87
88**参数:**
89
90| 参数名  | 类型   | 必填 | 说明           |
91| ------- | ------ | ---- | :------------- |
92| message | [WebMessage](#webmessage) | 是   | 要发送的消息。 |
93
94**错误码:**
95
96以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
97
98| 错误码ID | 错误信息                              |
99| -------- | ------------------------------------- |
100| 17100010 | Failed to post messages through the port. |
101| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
102
103**示例:**
104
105```ts
106// xxx.ets
107import { webview } from '@kit.ArkWeb';
108import { BusinessError } from '@kit.BasicServicesKit';
109
110@Entry
111@Component
112struct WebComponent {
113  controller: webview.WebviewController = new webview.WebviewController();
114  ports: webview.WebMessagePort[] = [];
115
116  build() {
117    Column() {
118      Button('postMessageEvent')
119        .onClick(() => {
120          try {
121            this.ports = this.controller.createWebMessagePorts();
122            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
123            this.ports[1].postMessageEvent("post message from ets to html5");
124          } catch (error) {
125            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
126          }
127        })
128      Web({ src: 'www.example.com', controller: this.controller })
129    }
130  }
131}
132```
133
134### onMessageEvent
135
136onMessageEvent(callback: (result: WebMessage) => void): void
137
138注册回调函数,接收HTML侧发送过来的消息。完整示例代码参考[postMessage](#postmessage)。
139
140**系统能力:** SystemCapability.Web.Webview.Core
141
142**参数:**
143
144| 参数名   | 类型     | 必填 | 说明                 |
145| -------- | -------- | ---- | :------------------- |
146| callback | (result: [WebMessage](#webmessage)) => void | 是   | 接收到的消息。 |
147
148**错误码:**
149
150以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
151
152| 错误码ID | 错误信息                                        |
153| -------- | ----------------------------------------------- |
154| 17100006 | Failed to register a message event for the port.|
155| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.|
156
157**示例:**
158
159```ts
160// xxx.ets
161import { webview } from '@kit.ArkWeb';
162import { BusinessError } from '@kit.BasicServicesKit';
163
164@Entry
165@Component
166struct WebComponent {
167  controller: webview.WebviewController = new webview.WebviewController();
168  ports: webview.WebMessagePort[] = [];
169
170  build() {
171    Column() {
172      Button('onMessageEvent')
173        .onClick(() => {
174          try {
175            this.ports = this.controller.createWebMessagePorts();
176            this.ports[1].onMessageEvent((msg) => {
177              if (typeof (msg) == "string") {
178                console.log("received string message from html5, string is:" + msg);
179              } else if (typeof (msg) == "object") {
180                if (msg instanceof ArrayBuffer) {
181                  console.log("received arraybuffer from html5, length is:" + msg.byteLength);
182                } else {
183                  console.log("not support");
184                }
185              } else {
186                console.log("not support");
187              }
188            })
189          } catch (error) {
190            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
191          }
192        })
193      Web({ src: 'www.example.com', controller: this.controller })
194    }
195  }
196}
197```
198
199### postMessageEventExt<sup>10+</sup>
200
201postMessageEventExt(message: WebMessageExt): void
202
203发送消息,必须先调用[onMessageEventExt](#onmessageeventext10),否则会发送失败。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
204
205**系统能力:** SystemCapability.Web.Webview.Core
206
207**参数:**
208
209| 参数名  | 类型   | 必填 | 说明           |
210| ------- | ------ | ---- | :------------- |
211| message | [WebMessageExt](#webmessageext10) | 是   | 要发送的消息。 |
212
213**错误码:**
214
215以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
216
217| 错误码ID | 错误信息                              |
218| -------- | ------------------------------------- |
219| 17100010 | Failed to post messages through the port. |
220| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
221
222### onMessageEventExt<sup>10+</sup>
223
224onMessageEventExt(callback: (result: WebMessageExt) => void): void
225
226注册回调函数,接收HTML5侧发送过来的消息。
227
228**系统能力:** SystemCapability.Web.Webview.Core
229
230**参数:**
231
232| 参数名   | 类型     | 必填 | 说明                 |
233| -------- | -------- | ---- | :------------------- |
234| callback | (result: [WebMessageExt](#webmessageext10)) => void | 是   | 接收到的消息。 |
235
236**错误码:**
237
238以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
239
240| 错误码ID | 错误信息                                        |
241| -------- | ----------------------------------------------- |
242| 17100006 | Failed to register a message event for the port. |
243| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
244
245**示例:**
246
247```ts
248// xxx.ets
249import { webview } from '@kit.ArkWeb';
250import { BusinessError } from '@kit.BasicServicesKit';
251
252class TestObj {
253  test(str: string): ArrayBuffer {
254    let buf = new ArrayBuffer(str.length);
255    let buff = new Uint8Array(buf);
256
257    for (let i = 0; i < str.length; i++) {
258      buff[i] = str.charCodeAt(i);
259    }
260    return buf;
261  }
262}
263
264// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。
265@Entry
266@Component
267struct WebComponent {
268  controller: webview.WebviewController = new webview.WebviewController();
269  ports: webview.WebMessagePort[] = [];
270  nativePort: webview.WebMessagePort | null = null;
271  @State msg1: string = "";
272  @State msg2: string = "";
273  message: webview.WebMessageExt = new webview.WebMessageExt();
274  @State testObjtest: TestObj = new TestObj();
275
276  build() {
277    Column() {
278      Text(this.msg1).fontSize(16)
279      Text(this.msg2).fontSize(16)
280      Button('SendToH5 setString').margin({
281        right: 800,
282      })
283        .onClick(() => {
284          // 使用本侧端口发送消息给HTML5
285          try {
286            console.log("In ArkTS side send true start");
287            if (this.nativePort) {
288              this.message.setType(1);
289              this.message.setString("helloFromEts");
290              this.nativePort.postMessageEventExt(this.message);
291            }
292          }
293          catch (error) {
294            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
295          }
296        })
297        Button('SendToH5 setNumber').margin({
298        top: 10,
299        right: 800,
300      })
301        .onClick(() => {
302          // 使用本侧端口发送消息给HTML5
303          try {
304            console.log("In ArkTS side send true start");
305            if (this.nativePort) {
306              this.message.setType(2);
307              this.message.setNumber(12345);
308              this.nativePort.postMessageEventExt(this.message);
309            }
310          }
311          catch (error) {
312            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
313          }
314        })
315      Button('SendToH5 setBoolean').margin({
316        top: -90,
317      })
318        .onClick(() => {
319          // 使用本侧端口发送消息给HTML5
320          try {
321            console.log("In ArkTS side send true start");
322            if (this.nativePort) {
323              this.message.setType(3);
324              this.message.setBoolean(true);
325              this.nativePort.postMessageEventExt(this.message);
326            }
327          }
328          catch (error) {
329            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
330          }
331        })
332      Button('SendToH5 setArrayBuffer').margin({
333        top: 10,
334      })
335        .onClick(() => {
336          // 使用本侧端口发送消息给HTML5
337          try {
338            console.log("In ArkTS side send true start");
339            if (this.nativePort) {
340              this.message.setType(4);
341              this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test"));
342              this.nativePort.postMessageEventExt(this.message);
343            }
344          }
345          catch (error) {
346            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
347          }
348        })
349      Button('SendToH5 setArray').margin({
350        top: -90,
351        left: 800,
352      })
353        .onClick(() => {
354          // 使用本侧端口发送消息给HTML5
355          try {
356            console.log("In ArkTS side send true start");
357            if (this.nativePort) {
358              this.message.setType(5);
359              this.message.setArray([1, 2, 3]);
360              this.nativePort.postMessageEventExt(this.message);
361            }
362          }
363          catch (error) {
364            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
365          }
366        })
367      Button('SendToH5 setError').margin({
368        top: 10,
369        left: 800,
370      })
371        .onClick(() => {
372          // 使用本侧端口发送消息给HTML5
373          try {
374            console.log("In ArkTS side send true start");
375            throw new ReferenceError("ReferenceError");
376          }
377          catch (error) {
378            if (this.nativePort) {
379              this.message.setType(6);
380              this.message.setError(error);
381              this.nativePort.postMessageEventExt(this.message);
382            }
383            console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
384          }
385        })
386
387      Web({ src: $rawfile('index.html'), controller: this.controller })
388        .onPageEnd(() => {
389          console.log("In ArkTS side message onPageEnd init message channel");
390          // 1. 创建消息端口
391          this.ports = this.controller.createWebMessagePorts(true);
392          // 2. 发送端口1到HTML5
393          this.controller.postMessage("init_web_messageport", [this.ports[1]], "*");
394          // 3. 保存端口0到本地
395          this.nativePort = this.ports[0];
396          // 4. 设置回调函数
397          this.nativePort.onMessageEventExt((result) => {
398            console.log("In ArkTS side got message");
399            try {
400              let type = result.getType();
401              console.log("In ArkTS side getType:" + type);
402              switch (type) {
403                case webview.WebMessageType.STRING: {
404                  this.msg1 = "result type:" + typeof (result.getString());
405                  this.msg2 = "result getString:" + ((result.getString()));
406                  break;
407                }
408                case webview.WebMessageType.NUMBER: {
409                  this.msg1 = "result type:" + typeof (result.getNumber());
410                  this.msg2 = "result getNumber:" + ((result.getNumber()));
411                  break;
412                }
413                case webview.WebMessageType.BOOLEAN: {
414                  this.msg1 = "result type:" + typeof (result.getBoolean());
415                  this.msg2 = "result getBoolean:" + ((result.getBoolean()));
416                  break;
417                }
418                case webview.WebMessageType.ARRAY_BUFFER: {
419                  this.msg1 = "result type:" + typeof (result.getArrayBuffer());
420                  this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
421                  break;
422                }
423                case webview.WebMessageType.ARRAY: {
424                  this.msg1 = "result type:" + typeof (result.getArray());
425                  this.msg2 = "result getArray:" + result.getArray();
426                  break;
427                }
428                case webview.WebMessageType.ERROR: {
429                  this.msg1 = "result type:" + typeof (result.getError());
430                  this.msg2 = "result getError:" + result.getError();
431                  break;
432                }
433                default: {
434                  this.msg1 = "default break, type:" + type;
435                  break;
436                }
437              }
438            }
439            catch (error) {
440              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
441            }
442          });
443        })
444    }
445  }
446}
447```
448
449加载的html文件。
450```html
451<!--index.html-->
452<!DOCTYPE html>
453<html lang="en-gb">
454<head>
455    <title>WebView MessagePort Demo</title>
456</head>
457
458<body>
459<h1>Html5 Send and Receive Message</h1>
460<h3 id="msg">Receive string:</h3>
461<h3 id="msg2">Receive arraybuffer:</h3>
462<div style="font-size: 10pt; text-align: center;">
463    <input type="button" value="Send String" onclick="postStringToApp();" /><br/>
464</div>
465</body>
466<script src="index.js"></script>
467</html>
468```
469
470```js
471//index.js
472var h5Port;
473window.addEventListener('message', function(event) {
474    if (event.data == 'init_web_messageport') {
475        if(event.ports[0] != null) {
476            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
477            h5Port.onmessage = function(event) {
478                console.log("hwd In html got message");
479                // 2. 接收ets侧发送过来的消息.
480                var result = event.data;
481                console.log("In html got message, typeof: ", typeof(result));
482                console.log("In html got message, result: ", (result));
483                if (typeof(result) == "string") {
484                    console.log("In html got message, String: ", result);
485                    document.getElementById("msg").innerHTML  =  "String:" + result;
486                } else if (typeof(result) == "number") {
487                  console.log("In html side got message, number: ", result);
488                    document.getElementById("msg").innerHTML = "Number:" + result;
489                } else if (typeof(result) == "boolean") {
490                    console.log("In html side got message, boolean: ", result);
491                    document.getElementById("msg").innerHTML = "Boolean:" + result;
492                } else if (typeof(result) == "object") {
493                    if (result instanceof ArrayBuffer) {
494                        document.getElementById("msg2").innerHTML  =  "ArrayBuffer:" + result.byteLength;
495                        console.log("In html got message, byteLength: ", result.byteLength);
496                    } else if (result instanceof Error) {
497                        console.log("In html error message, err:" + (result));
498                        console.log("In html error message, typeof err:" + typeof(result));
499                        document.getElementById("msg2").innerHTML  =  "Error:" + result.name + ", msg:" + result.message;
500                    } else if (result instanceof Array) {
501                        console.log("In html got message, Array");
502                        console.log("In html got message, Array length:" + result.length);
503                        console.log("In html got message, Array[0]:" + (result[0]));
504                        console.log("In html got message, typeof Array[0]:" + typeof(result[0]));
505                        document.getElementById("msg2").innerHTML  =  "Array len:" + result.length + ", value:" + result;
506                    } else {
507                        console.log("In html got message, not any instance of support type");
508                        document.getElementById("msg").innerHTML  = "not any instance of support type";
509                    }
510                } else {
511                    console.log("In html got message, not support type");
512                    document.getElementById("msg").innerHTML  = "not support type";
513                }
514            }
515            h5Port.onmessageerror = (event) => {
516                console.error(`hwd In html Error receiving message: ${event}`);
517            };
518        }
519    }
520})
521
522// 使用h5Port往ets侧发送String类型的消息.
523function postStringToApp() {
524    if (h5Port) {
525        console.log("In html send string message");
526        h5Port.postMessage("hello");
527        console.log("In html send string message end");
528    } else {
529        console.error("In html h5port is null, please init first");
530    }
531}
532```
533
534### close
535
536close(): void
537
538关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。
539
540**系统能力:** SystemCapability.Web.Webview.Core
541
542**示例:**
543
544```ts
545// xxx.ets
546import { webview } from '@kit.ArkWeb';
547import { BusinessError } from '@kit.BasicServicesKit';
548
549@Entry
550@Component
551struct WebComponent {
552  controller: webview.WebviewController = new webview.WebviewController();
553  msgPort: webview.WebMessagePort[] = [];
554
555  build() {
556    Column() {
557      // 先使用createWebMessagePorts创建端口。
558      Button('createWebMessagePorts')
559        .onClick(() => {
560          try {
561            this.msgPort = this.controller.createWebMessagePorts();
562            console.log("createWebMessagePorts size:" + this.msgPort.length)
563          } catch (error) {
564            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
565          }
566        })
567      Button('close')
568        .onClick(() => {
569          try {
570            if (this.msgPort && this.msgPort.length == 2) {
571              this.msgPort[1].close();
572            } else {
573              console.error("msgPort is null, Please initialize first");
574            }
575          } catch (error) {
576            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
577          }
578        })
579      Web({ src: 'www.example.com', controller: this.controller })
580    }
581  }
582}
583```
584
585## WebviewController
586
587通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
588
589### constructor<sup>11+</sup>
590
591constructor(webTag?: string)
592
593用于创建 WebviewController 对象的构造函数。
594
595> **说明:**
596>
597> webTag是需要开发者自定义的一个标记,即开发者给web的一个字符串形式参数,用来做标记。
598
599**系统能力:** SystemCapability.Web.Webview.Core
600
601**参数:**
602
603| 参数名     | 类型   | 必填 | 说明                               |
604| ---------- | ------ | ---- | -------------------------------- |
605| webTag   | string | 否   | 指定了 Web 组件的名称,默认为 Empty。 |
606
607**示例:**
608
609```ts
610// xxx.ets
611import { webview } from '@kit.ArkWeb';
612import { BusinessError } from '@kit.BasicServicesKit';
613
614class WebObj {
615  constructor() {
616  }
617
618  webTest(): string {
619    console.log('Web test');
620    return "Web test";
621  }
622
623  webString(): void {
624    console.log('Web test toString');
625  }
626}
627
628@Entry
629@Component
630struct WebComponent {
631  controller: webview.WebviewController = new webview.WebviewController()
632  @State webTestObj: WebObj = new WebObj();
633
634  build() {
635    Column() {
636      Button('refresh')
637        .onClick(() => {
638          try {
639            this.controller.refresh();
640          } catch (error) {
641            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
642          }
643        })
644      Web({ src: '', controller: this.controller })
645        .javaScriptAccess(true)
646        .onControllerAttached(() => {
647          this.controller.loadUrl($rawfile("index.html"));
648          this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
649        })
650    }
651  }
652}
653```
654
655加载的html文件。
656```html
657<!-- index.html -->
658<!DOCTYPE html>
659<html>
660    <meta charset="utf-8">
661    <body>
662      <button type="button" onclick="htmlTest()">Click Me!</button>
663      <p id="demo"></p>
664      <p id="webDemo"></p>
665    </body>
666    <script type="text/javascript">
667    function htmlTest() {
668      // This function call expects to return "Web test"
669      let webStr = objTestName.webTest();
670      document.getElementById("webDemo").innerHTML=webStr;
671      console.log('objTestName.webTest result:'+ webStr)
672    }
673</script>
674</html>
675```
676
677### initializeWebEngine
678
679static initializeWebEngine(): void
680
681在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。
682
683> **说明:**
684>
685> - initializeWebEngine不支持在异步线程中调用,否则会造成崩溃。
686> - initializeWebEngine全局生效,在整个APP生命周期中调用一次即可,不需要重复调用。
687
688**系统能力:** SystemCapability.Web.Webview.Core
689
690**示例:**
691
692本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。
693
694```ts
695// xxx.ets
696import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
697import { webview } from '@kit.ArkWeb';
698
699export default class EntryAbility extends UIAbility {
700  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
701    console.log("EntryAbility onCreate")
702    webview.WebviewController.initializeWebEngine()
703    console.log("EntryAbility onCreate done")
704  }
705}
706```
707
708### setHttpDns<sup>10+</sup>
709
710static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void
711
712设置Web组件是否使用HTTPDNS解析dns。
713
714**系统能力:** SystemCapability.Web.Webview.Core
715
716**参数:**
717
718| 参数名              | 类型    | 必填   |  说明 |
719| ------------------ | ------- | ---- | ------------- |
720| secureDnsMode         |   [SecureDnsMode](#securednsmode10)   | 是   | 使用HTTPDNS的模式。|
721| secureDnsConfig       | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 |
722
723**错误码:**
724
725以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
726
727| 错误码ID | 错误信息                  |
728| -------- | ----------------------- |
729| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
730
731**示例:**
732
733```ts
734// xxx.ets
735import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
736import { webview } from '@kit.ArkWeb';
737import { BusinessError } from '@kit.BasicServicesKit';
738
739export default class EntryAbility extends UIAbility {
740  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
741    console.log("EntryAbility onCreate")
742    try {
743      webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, "https://example1.test")
744    } catch (error) {
745      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
746    }
747
748    AppStorage.setOrCreate("abilityWant", want);
749    console.log("EntryAbility onCreate done")
750  }
751}
752```
753
754### setWebDebuggingAccess
755
756static setWebDebuggingAccess(webDebuggingAccess: boolean): void
757
758设置是否启用网页调试功能,默认不开启。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。
759
760安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。
761
762**系统能力:** SystemCapability.Web.Webview.Core
763
764**参数:**
765
766| 参数名              | 类型    | 必填   |  说明 |
767| ------------------ | ------- | ---- | ------------- |
768| webDebuggingAccess | boolean | 是   | 设置是否启用网页调试功能。|
769
770**错误码:**
771
772以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
773
774| 错误码ID  | 错误信息                                                      |
775| -------- | ------------------------------------------------------------ |
776| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
777
778**示例:**
779
780```ts
781// xxx.ets
782import { webview } from '@kit.ArkWeb';
783import { BusinessError } from '@kit.BasicServicesKit';
784
785@Entry
786@Component
787struct WebComponent {
788  controller: webview.WebviewController = new webview.WebviewController();
789
790  aboutToAppear(): void {
791    try {
792      webview.WebviewController.setWebDebuggingAccess(true);
793    } catch (error) {
794      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
795    }
796  }
797
798  build() {
799    Column() {
800      Web({ src: 'www.example.com', controller: this.controller })
801    }
802  }
803}
804```
805
806### loadUrl
807
808loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void
809
810加载指定的URL。
811
812**系统能力:** SystemCapability.Web.Webview.Core
813
814**参数:**
815
816| 参数名  | 类型             | 必填 | 说明                  |
817| ------- | ---------------- | ---- | :-------------------- |
818| url     | string \| Resource | 是   | 需要加载的 URL。      |
819| headers | Array\<[WebHeader](#webheader)> | 否   | URL的附加HTTP请求头。 |
820
821**错误码:**
822
823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
824
825| 错误码ID | 错误信息                                                     |
826| -------- | ------------------------------------------------------------ |
827| 17100001 | Init error. The WebviewController must be associated with a Web component. |
828| 17100002 | Invalid url.                                                 |
829| 17100003 | Invalid resource path or file type.                          |
830| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
831
832**示例:**
833
834```ts
835// xxx.ets
836import { webview } from '@kit.ArkWeb';
837import { BusinessError } from '@kit.BasicServicesKit';
838
839@Entry
840@Component
841struct WebComponent {
842  controller: webview.WebviewController = new webview.WebviewController();
843
844  build() {
845    Column() {
846      Button('loadUrl')
847        .onClick(() => {
848          try {
849            // 需要加载的URL是string类型。
850            this.controller.loadUrl('www.example.com');
851          } catch (error) {
852            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
853          }
854        })
855      Web({ src: 'www.example.com', controller: this.controller })
856    }
857  }
858}
859```
860
861```ts
862// xxx.ets
863import { webview } from '@kit.ArkWeb';
864import { BusinessError } from '@kit.BasicServicesKit';
865
866@Entry
867@Component
868struct WebComponent {
869  controller: webview.WebviewController = new webview.WebviewController();
870
871  build() {
872    Column() {
873      Button('loadUrl')
874        .onClick(() => {
875          try {
876            // 带参数headers。
877            this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]);
878          } catch (error) {
879            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
880          }
881        })
882      Web({ src: 'www.example.com', controller: this.controller })
883    }
884  }
885}
886```
887
888加载本地网页,加载本地资源文件有三种方式。
889
8901.$rawfile方式。
891```ts
892// xxx.ets
893import { webview } from '@kit.ArkWeb';
894import { BusinessError } from '@kit.BasicServicesKit';
895
896@Entry
897@Component
898struct WebComponent {
899  controller: webview.WebviewController = new webview.WebviewController();
900
901  build() {
902    Column() {
903      Button('loadUrl')
904        .onClick(() => {
905          try {
906            // 通过$rawfile加载本地资源文件。
907            this.controller.loadUrl($rawfile('index.html'));
908          } catch (error) {
909            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
910          }
911        })
912      Web({ src: 'www.example.com', controller: this.controller })
913    }
914  }
915}
916```
917
9182.resources协议,适用Webview加载带有"#"路由的链接。
919```ts
920// xxx.ets
921import { webview } from '@kit.ArkWeb';
922import { BusinessError } from '@kit.BasicServicesKit';
923
924@Entry
925@Component
926struct WebComponent {
927  controller: webview.WebviewController = new webview.WebviewController();
928
929  build() {
930    Column() {
931      Button('loadUrl')
932        .onClick(() => {
933          try {
934            // 通过resource协议加载本地资源文件。
935            this.controller.loadUrl("resource://rawfile/index.html");
936          } catch (error) {
937            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
938          }
939        })
940      Web({ src: 'www.example.com', controller: this.controller })
941    }
942  }
943}
944```
945
9463.通过沙箱路径加载本地文件,可以参考[web](ts-basic-components-web.md#web)加载沙箱路径的示例代码。
947
948加载的html文件。
949```html
950<!-- index.html -->
951<!DOCTYPE html>
952<html>
953  <body>
954    <p>Hello World</p>
955  </body>
956</html>
957```
958
959### loadData
960
961loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void
962
963加载指定的数据。
964
965baseUrl与historyUrl同时为空的情况下:
966
967encoding如果为非base64(包括空值),则假定数据对安全URL字符范围内的八位字节使用ASCII编码,对该范围外的八位字节使用URL的标准%xx十六进制编码。
968
969data数据必须使用base64编码或将内容中的任何#字符编码为%23。否则#将被视为内容的结尾而剩余的文本将被用作文档片段标识符。
970
971**系统能力:** SystemCapability.Web.Webview.Core
972
973**参数:**
974
975| 参数名     | 类型   | 必填 | 说明                                                         |
976| ---------- | ------ | ---- | ------------------------------------------------------------ |
977| data       | string | 是   | 按照"base64"或者"URL"编码后的一段字符串。                    |
978| mimeType   | string | 是   | 媒体类型(MIME)。                                           |
979| encoding   | string | 是   | 编码类型,具体为"base64"或者"URL"编码。                       |
980| baseUrl    | string | 否   | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 |
981| historyUrl | string | 否   | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 |
982
983> **说明:**
984>
985> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。
986> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。
987> 若html中的富文本中带有注入#等特殊字符,建议将baseUrl和historyUrl两个参数的值设置为"空格"。
988
989**错误码:**
990
991以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
992
993| 错误码ID | 错误信息                                                     |
994| -------- | ------------------------------------------------------------ |
995| 17100001 | Init error. The WebviewController must be associated with a Web component. |
996| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
997
998**示例:**
999
1000baseUrl与historyUrl同时为空。
1001```ts
1002// xxx.ets
1003import { webview } from '@kit.ArkWeb';
1004import { BusinessError } from '@kit.BasicServicesKit';
1005
1006@Entry
1007@Component
1008struct WebComponent {
1009  controller: webview.WebviewController = new webview.WebviewController();
1010
1011  build() {
1012    Column() {
1013      Button('loadData')
1014        .onClick(() => {
1015          try {
1016            this.controller.loadData(
1017              "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
1018              "text/html",
1019              // UTF-8为charset。
1020              "UTF-8"
1021            );
1022          } catch (error) {
1023            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1024          }
1025        })
1026      Web({ src: 'www.example.com', controller: this.controller })
1027    }
1028  }
1029}
1030```
1031
1032```ts
1033// xxx.ets
1034import { webview } from '@kit.ArkWeb';
1035import { BusinessError } from '@kit.BasicServicesKit';
1036
1037@Entry
1038@Component
1039struct WebComponent {
1040  controller: webview.WebviewController = new webview.WebviewController();
1041
1042  build() {
1043    Column() {
1044      Button('loadData')
1045        .onClick(() => {
1046          try {
1047            this.controller.loadData(
1048              // Coding tests通过base64编码后的字符串。
1049              "Q29kaW5nIHRlc3Rz",
1050              "text/html",
1051              "base64"
1052            );
1053          } catch (error) {
1054            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1055          }
1056        })
1057      Web({ src: 'www.example.com', controller: this.controller })
1058    }
1059  }
1060}
1061```
1062
1063加载本地资源
1064```ts
1065// xxx.ets
1066import { webview } from '@kit.ArkWeb';
1067import { BusinessError } from '@kit.BasicServicesKit';
1068
1069@Entry
1070@Component
1071struct WebComponent {
1072  controller: webview.WebviewController = new webview.WebviewController();
1073  updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>'
1074
1075  build() {
1076    Column() {
1077      Button('loadData')
1078        .onClick(() => {
1079          try {
1080            // UTF-8为charset。
1081            this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " ");
1082          } catch (error) {
1083            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1084          }
1085        })
1086      Web({ src: 'www.example.com', controller: this.controller })
1087    }
1088  }
1089}
1090```
1091
1092### accessForward
1093
1094accessForward(): boolean
1095
1096当前页面是否可前进,即当前页面是否有前进历史记录。
1097
1098**系统能力:** SystemCapability.Web.Webview.Core
1099
1100**返回值:**
1101
1102| 类型    | 说明                              |
1103| ------- | --------------------------------- |
1104| boolean | 可以前进返回true,否则返回false。 |
1105
1106**错误码:**
1107
1108以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1109
1110| 错误码ID | 错误信息                                                     |
1111| -------- | ------------------------------------------------------------ |
1112| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1113
1114**示例:**
1115
1116```ts
1117// xxx.ets
1118import { webview } from '@kit.ArkWeb';
1119import { BusinessError } from '@kit.BasicServicesKit';
1120
1121@Entry
1122@Component
1123struct WebComponent {
1124  controller: webview.WebviewController = new webview.WebviewController();
1125
1126  build() {
1127    Column() {
1128      Button('accessForward')
1129        .onClick(() => {
1130          try {
1131            let result = this.controller.accessForward();
1132            console.log('result:' + result);
1133          } catch (error) {
1134            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1135          }
1136        })
1137      Web({ src: 'www.example.com', controller: this.controller })
1138    }
1139  }
1140}
1141```
1142
1143### forward
1144
1145forward(): void
1146
1147按照历史栈,前进一个页面。一般结合accessForward一起使用。
1148
1149**系统能力:** SystemCapability.Web.Webview.Core
1150
1151**错误码:**
1152
1153以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1154
1155| 错误码ID | 错误信息                                                     |
1156| -------- | ------------------------------------------------------------ |
1157| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1158
1159**示例:**
1160
1161```ts
1162// xxx.ets
1163import { webview } from '@kit.ArkWeb';
1164import { BusinessError } from '@kit.BasicServicesKit';
1165
1166@Entry
1167@Component
1168struct WebComponent {
1169  controller: webview.WebviewController = new webview.WebviewController();
1170
1171  build() {
1172    Column() {
1173      Button('forward')
1174        .onClick(() => {
1175          try {
1176            this.controller.forward();
1177          } catch (error) {
1178            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1179          }
1180        })
1181      Web({ src: 'www.example.com', controller: this.controller })
1182    }
1183  }
1184}
1185```
1186
1187### accessBackward
1188
1189accessBackward(): boolean
1190
1191当前页面是否可后退,即当前页面是否有返回历史记录。
1192
1193**系统能力:** SystemCapability.Web.Webview.Core
1194
1195**返回值:**
1196
1197| 类型    | 说明                             |
1198| ------- | -------------------------------- |
1199| boolean | 可以后退返回true,否则返回false。 |
1200
1201**错误码:**
1202
1203以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1204
1205| 错误码ID | 错误信息                                                     |
1206| -------- | ------------------------------------------------------------ |
1207| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1208
1209**示例:**
1210
1211```ts
1212// xxx.ets
1213import { webview } from '@kit.ArkWeb';
1214import { BusinessError } from '@kit.BasicServicesKit';
1215
1216@Entry
1217@Component
1218struct WebComponent {
1219  controller: webview.WebviewController = new webview.WebviewController();
1220
1221  build() {
1222    Column() {
1223      Button('accessBackward')
1224        .onClick(() => {
1225          try {
1226            let result = this.controller.accessBackward();
1227            console.log('result:' + result);
1228          } catch (error) {
1229            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1230          }
1231        })
1232      Web({ src: 'www.example.com', controller: this.controller })
1233    }
1234  }
1235}
1236```
1237
1238### backward
1239
1240backward(): void
1241
1242按照历史栈,后退一个页面。一般结合accessBackward一起使用。
1243
1244**系统能力:** SystemCapability.Web.Webview.Core
1245
1246**错误码:**
1247
1248以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1249
1250| 错误码ID | 错误信息                                                     |
1251| -------- | ------------------------------------------------------------ |
1252| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1253
1254**示例:**
1255
1256```ts
1257// xxx.ets
1258import { webview } from '@kit.ArkWeb';
1259import { BusinessError } from '@kit.BasicServicesKit';
1260
1261@Entry
1262@Component
1263struct WebComponent {
1264  controller: webview.WebviewController = new webview.WebviewController();
1265
1266  build() {
1267    Column() {
1268      Button('backward')
1269        .onClick(() => {
1270          try {
1271            this.controller.backward();
1272          } catch (error) {
1273            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1274          }
1275        })
1276      Web({ src: 'www.example.com', controller: this.controller })
1277    }
1278  }
1279}
1280```
1281
1282### onActive
1283
1284onActive(): void
1285
1286调用此接口通知Web组件进入前台激活状态。
1287<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。
1288
1289**系统能力:** SystemCapability.Web.Webview.Core
1290
1291**错误码:**
1292
1293以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1294
1295| 错误码ID | 错误信息                                                     |
1296| -------- | ------------------------------------------------------------ |
1297| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1298
1299**示例:**
1300
1301```ts
1302// xxx.ets
1303import { webview } from '@kit.ArkWeb';
1304import { BusinessError } from '@kit.BasicServicesKit';
1305
1306@Entry
1307@Component
1308struct WebComponent {
1309  controller: webview.WebviewController = new webview.WebviewController();
1310
1311  build() {
1312    Column() {
1313      Button('onActive')
1314        .onClick(() => {
1315          try {
1316            this.controller.onActive();
1317          } catch (error) {
1318            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1319          }
1320        })
1321      Web({ src: 'www.example.com', controller: this.controller })
1322    }
1323  }
1324}
1325```
1326
1327### onInactive
1328
1329onInactive(): void
1330
1331调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。
1332
1333此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。
1334
1335**系统能力:** SystemCapability.Web.Webview.Core
1336
1337**错误码:**
1338
1339以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1340
1341| 错误码ID | 错误信息                                                     |
1342| -------- | ------------------------------------------------------------ |
1343| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1344
1345**示例:**
1346
1347```ts
1348// xxx.ets
1349import { webview } from '@kit.ArkWeb';
1350import { BusinessError } from '@kit.BasicServicesKit';
1351
1352@Entry
1353@Component
1354struct WebComponent {
1355  controller: webview.WebviewController = new webview.WebviewController();
1356
1357  build() {
1358    Column() {
1359      Button('onInactive')
1360        .onClick(() => {
1361          try {
1362            this.controller.onInactive();
1363          } catch (error) {
1364            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1365          }
1366        })
1367      Web({ src: 'www.example.com', controller: this.controller })
1368    }
1369  }
1370}
1371```
1372
1373### refresh
1374refresh(): void
1375
1376调用此接口通知Web组件刷新网页。
1377
1378**系统能力:** SystemCapability.Web.Webview.Core
1379
1380**错误码:**
1381
1382以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1383
1384| 错误码ID | 错误信息                                                     |
1385| -------- | ------------------------------------------------------------ |
1386| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1387
1388**示例:**
1389
1390```ts
1391// xxx.ets
1392import { webview } from '@kit.ArkWeb';
1393import { BusinessError } from '@kit.BasicServicesKit';
1394
1395@Entry
1396@Component
1397struct WebComponent {
1398  controller: webview.WebviewController = new webview.WebviewController();
1399
1400  build() {
1401    Column() {
1402      Button('refresh')
1403        .onClick(() => {
1404          try {
1405            this.controller.refresh();
1406          } catch (error) {
1407            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1408          }
1409        })
1410      Web({ src: 'www.example.com', controller: this.controller })
1411    }
1412  }
1413}
1414```
1415
1416### accessStep
1417
1418accessStep(step: number): boolean
1419
1420当前页面是否可前进或者后退给定的step步。
1421
1422**系统能力:** SystemCapability.Web.Webview.Core
1423
1424**参数:**
1425
1426| 参数名 | 类型 | 必填 | 说明                                   |
1427| ------ | -------- | ---- | ------------------------------------------ |
1428| step   | number   | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
1429
1430**返回值:**
1431
1432| 类型    | 说明               |
1433| ------- | ------------------ |
1434| boolean | 页面是否前进或后退 |
1435
1436**错误码:**
1437
1438以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1439
1440| 错误码ID | 错误信息                                                     |
1441| -------- | ------------------------------------------------------------ |
1442| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1443| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1444
1445**示例:**
1446
1447```ts
1448// xxx.ets
1449import { webview } from '@kit.ArkWeb';
1450import { BusinessError } from '@kit.BasicServicesKit';
1451
1452@Entry
1453@Component
1454struct WebComponent {
1455  controller: webview.WebviewController = new webview.WebviewController();
1456  @State steps: number = 2;
1457
1458  build() {
1459    Column() {
1460      Button('accessStep')
1461        .onClick(() => {
1462          try {
1463            let result = this.controller.accessStep(this.steps);
1464            console.log('result:' + result);
1465          } catch (error) {
1466            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1467          }
1468        })
1469      Web({ src: 'www.example.com', controller: this.controller })
1470    }
1471  }
1472}
1473```
1474
1475### clearHistory
1476
1477clearHistory(): void
1478
1479删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。
1480
1481**系统能力:** SystemCapability.Web.Webview.Core
1482
1483**错误码:**
1484
1485以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1486
1487| 错误码ID | 错误信息                                                     |
1488| -------- | ------------------------------------------------------------ |
1489| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1490
1491**示例:**
1492
1493```ts
1494// xxx.ets
1495import { webview } from '@kit.ArkWeb';
1496import { BusinessError } from '@kit.BasicServicesKit';
1497
1498@Entry
1499@Component
1500struct WebComponent {
1501  controller: webview.WebviewController = new webview.WebviewController();
1502
1503  build() {
1504    Column() {
1505      Button('clearHistory')
1506        .onClick(() => {
1507          try {
1508            this.controller.clearHistory();
1509          } catch (error) {
1510            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1511          }
1512        })
1513      Web({ src: 'www.example.com', controller: this.controller })
1514    }
1515  }
1516}
1517```
1518
1519### getHitTest
1520
1521getHitTest(): WebHitTestType
1522
1523获取当前被点击区域的元素类型。
1524
1525**系统能力:** SystemCapability.Web.Webview.Core
1526
1527**返回值:**
1528
1529| 类型                                                         | 说明                   |
1530| ------------------------------------------------------------ | ---------------------- |
1531| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 |
1532
1533**错误码:**
1534
1535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1536
1537| 错误码ID | 错误信息                                                     |
1538| -------- | ------------------------------------------------------------ |
1539| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1540
1541**示例:**
1542
1543```ts
1544// xxx.ets
1545import { webview } from '@kit.ArkWeb';
1546import { BusinessError } from '@kit.BasicServicesKit';
1547
1548@Entry
1549@Component
1550struct WebComponent {
1551  controller: webview.WebviewController = new webview.WebviewController();
1552
1553  build() {
1554    Column() {
1555      Button('getHitTest')
1556        .onClick(() => {
1557          try {
1558            let hitTestType = this.controller.getHitTest();
1559            console.log("hitTestType: " + hitTestType);
1560          } catch (error) {
1561            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1562          }
1563        })
1564      Web({ src: 'www.example.com', controller: this.controller })
1565    }
1566  }
1567}
1568```
1569
1570### registerJavaScriptProxy
1571
1572registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void
1573
1574registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。
1575<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。
1576
1577> **说明:**
1578>
1579> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。
1580> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。
1581> - 同一方法在同步与异步列表中重复注册,将默认异步调用。
1582> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。
1583
1584**系统能力:** SystemCapability.Web.Webview.Core
1585
1586**参数:**
1587
1588| 参数名     | 类型       | 必填 | 说明                                        |
1589| ---------- | -------------- | ---- | ------------------------------------------------------------ |
1590| object     | object         | 是   | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。<br>方法的参数和返回类型可以为string,number,boolean。<br>方法的参数和返回类型支持Dictionary,Array,最多嵌套10层,每层1w个数据。<br>方法的参数和返回类型支持Object,需要在Object里添加属性methodNameListForJsProxy:[fun1, fun2],fun1和fun2为可被调用的方法。<br>方法的参数支持Function,Promise,它们的Callback不能有返回值。<br>方法的返回类型支持Promise,Promise的Callback不能有返回值。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 |
1591| name       | string         | 是   | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
1592| methodList | Array\<string> | 是   | 参与注册的应用侧JavaScript对象的同步方法。                       |
1593| asyncMethodList<sup>12+</sup> | Array\<string> | 否   | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。  |
1594| permission<sup>12+</sup> | string | 否   | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。|
1595
1596**错误码:**
1597
1598以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1599
1600| 错误码ID | 错误信息                                                     |
1601| -------- | ------------------------------------------------------------ |
1602| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1603| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1604
1605**示例:**
1606
1607```ts
1608// xxx.ets
1609import { webview } from '@kit.ArkWeb';
1610import { BusinessError } from '@kit.BasicServicesKit';
1611
1612class TestObj {
1613  constructor() {
1614  }
1615
1616  test(testStr:string): string {
1617    console.log('Web Component str' + testStr);
1618    return testStr;
1619  }
1620
1621  toString(): void {
1622    console.log('Web Component toString');
1623  }
1624
1625  testNumber(testNum:number): number {
1626    console.log('Web Component number' + testNum);
1627    return testNum;
1628  }
1629
1630  asyncTestBool(testBol:boolean): void {
1631    console.log('Web Component boolean' + testBol);
1632  }
1633}
1634
1635class WebObj {
1636  constructor() {
1637  }
1638
1639  webTest(): string {
1640    console.log('Web test');
1641    return "Web test";
1642  }
1643
1644  webString(): void {
1645    console.log('Web test toString');
1646  }
1647}
1648
1649class AsyncObj {
1650  constructor() {
1651  }
1652
1653  asyncTest(): void {
1654    console.log('Async test');
1655  }
1656
1657  asyncString(testStr:string): void {
1658    console.log('Web async string' + testStr);
1659  }
1660}
1661
1662@Entry
1663@Component
1664struct Index {
1665  controller: webview.WebviewController = new webview.WebviewController();
1666  @State testObjtest: TestObj = new TestObj();
1667  @State webTestObj: WebObj = new WebObj();
1668  @State asyncTestObj: AsyncObj = new AsyncObj();
1669
1670  build() {
1671    Column() {
1672      Button('refresh')
1673        .onClick(() => {
1674          try {
1675            this.controller.refresh();
1676          } catch (error) {
1677            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1678          }
1679        })
1680      Button('Register JavaScript To Window')
1681        .onClick(() => {
1682          try {
1683            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]);
1684            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
1685            this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]);
1686          } catch (error) {
1687            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1688          }
1689        })
1690      Web({ src: $rawfile('index.html'), controller: this.controller })
1691        .javaScriptAccess(true)
1692    }
1693  }
1694}
1695```
1696
1697加载的html文件。
1698```html
1699<!-- index.html -->
1700<!DOCTYPE html>
1701<html>
1702    <meta charset="utf-8">
1703    <body>
1704      <button type="button" onclick="htmlTest()">Click Me!</button>
1705      <p id="demo"></p>
1706      <p id="webDemo"></p>
1707      <p id="asyncDemo"></p>
1708    </body>
1709    <script type="text/javascript">
1710    function htmlTest() {
1711      // This function call expects to return "ArkUI Web Component"
1712      let str=objName.test("webtest data");
1713      objName.testNumber(1);
1714      objName.asyncTestBool(true);
1715      document.getElementById("demo").innerHTML=str;
1716      console.log('objName.test result:'+ str)
1717
1718      // This function call expects to return "Web test"
1719      let webStr = objTestName.webTest();
1720      document.getElementById("webDemo").innerHTML=webStr;
1721      console.log('objTestName.webTest result:'+ webStr)
1722
1723      objAsyncName.asyncTest();
1724      objAsyncName.asyncString("async test data");
1725    }
1726</script>
1727</html>
1728```
1729更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。
1730
1731### runJavaScript
1732
1733runJavaScript(script: string, callback : AsyncCallback\<string>): void
1734
1735异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1736
1737**系统能力:** SystemCapability.Web.Webview.Core
1738
1739**参数:**
1740
1741| 参数名   | 类型                 | 必填 | 说明                         |
1742| -------- | -------------------- | ---- | ---------------------------- |
1743| script   | string                   | 是   | JavaScript脚本。                                             |
1744| callback | AsyncCallback\<string> | 是   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
1745
1746**错误码:**
1747
1748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1749
1750| 错误码ID | 错误信息                                                     |
1751| -------- | ------------------------------------------------------------ |
1752| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1753| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1754
1755**示例:**
1756
1757```ts
1758import { webview } from '@kit.ArkWeb';
1759import { BusinessError } from '@kit.BasicServicesKit';
1760
1761@Entry
1762@Component
1763struct WebComponent {
1764  controller: webview.WebviewController = new webview.WebviewController();
1765  @State webResult: string = '';
1766
1767  build() {
1768    Column() {
1769      Text(this.webResult).fontSize(20)
1770      Web({ src: $rawfile('index.html'), controller: this.controller })
1771        .javaScriptAccess(true)
1772        .onPageEnd(e => {
1773          try {
1774            this.controller.runJavaScript(
1775              'test()',
1776              (error, result) => {
1777                if (error) {
1778                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1779                  return;
1780                }
1781                if (result) {
1782                  this.webResult = result;
1783                  console.info(`The test() return value is: ${result}`);
1784                }
1785              });
1786            if (e) {
1787              console.info('url: ', e.url);
1788            }
1789          } catch (error) {
1790            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1791          }
1792        })
1793    }
1794  }
1795}
1796```
1797
1798加载的html文件。
1799```html
1800<!-- index.html -->
1801<!DOCTYPE html>
1802<html>
1803  <meta charset="utf-8">
1804  <body>
1805      Hello world!
1806  </body>
1807  <script type="text/javascript">
1808  function test() {
1809      console.log('Ark WebComponent')
1810      return "This value is from index.html"
1811  }
1812  </script>
1813</html>
1814```
1815
1816### runJavaScript
1817
1818runJavaScript(script: string): Promise\<string>
1819
1820异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
1821
1822**系统能力:** SystemCapability.Web.Webview.Core
1823
1824**参数:**
1825
1826| 参数名 | 类型 | 必填 | 说明         |
1827| ------ | -------- | ---- | ---------------- |
1828| script | string   | 是   | JavaScript脚本。 |
1829
1830**返回值:**
1831
1832| 类型            | 说明                                                |
1833| --------------- | --------------------------------------------------- |
1834| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 |
1835
1836**错误码:**
1837
1838以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1839
1840| 错误码ID | 错误信息                                                     |
1841| -------- | ------------------------------------------------------------ |
1842| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1843| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1844
1845**示例:**
1846
1847```ts
1848// xxx.ets
1849import { webview } from '@kit.ArkWeb';
1850import { BusinessError } from '@kit.BasicServicesKit';
1851
1852@Entry
1853@Component
1854struct WebComponent {
1855  controller: webview.WebviewController = new webview.WebviewController();
1856
1857  build() {
1858    Column() {
1859      Web({ src: $rawfile('index.html'), controller: this.controller })
1860        .javaScriptAccess(true)
1861        .onPageEnd(e => {
1862          try {
1863            this.controller.runJavaScript('test()')
1864              .then((result) => {
1865                console.log('result: ' + result);
1866              })
1867              .catch((error: BusinessError) => {
1868                console.error("error: " + error);
1869              })
1870            if (e) {
1871              console.info('url: ', e.url);
1872            }
1873          } catch (error) {
1874            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1875          }
1876        })
1877    }
1878  }
1879}
1880```
1881
1882加载的html文件。
1883```html
1884<!-- index.html -->
1885<!DOCTYPE html>
1886<html>
1887  <meta charset="utf-8">
1888  <body>
1889      Hello world!
1890  </body>
1891  <script type="text/javascript">
1892  function test() {
1893      console.log('Ark WebComponent')
1894      return "This value is from index.html"
1895  }
1896  </script>
1897</html>
1898```
1899
1900### runJavaScriptExt<sup>10+</sup>
1901
1902runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void
1903
1904异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
1905
1906**系统能力:** SystemCapability.Web.Webview.Core
1907
1908**参数:**
1909
1910| 参数名   | 类型                 | 必填 | 说明                         |
1911| -------- | -------------------- | ---- | ---------------------------- |
1912| script   | string \| ArrayBuffer<sup>12+</sup>         | 是   | JavaScript脚本。 |
1913| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是   | 回调执行JavaScript脚本结果。 |
1914
1915**错误码:**
1916
1917以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1918
1919| 错误码ID | 错误信息                                                     |
1920| -------- | ------------------------------------------------------------ |
1921| 17100001 | Init error. The WebviewController must be associated with a Web component. |
1922| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1923
1924**示例:**
1925
1926```ts
1927import { webview } from '@kit.ArkWeb';
1928import { BusinessError } from '@kit.BasicServicesKit';
1929
1930@Entry
1931@Component
1932struct WebComponent {
1933  controller: webview.WebviewController = new webview.WebviewController();
1934  @State msg1: string = '';
1935  @State msg2: string = '';
1936
1937  build() {
1938    Column() {
1939      Text(this.msg1).fontSize(20)
1940      Text(this.msg2).fontSize(20)
1941      Web({ src: $rawfile('index.html'), controller: this.controller })
1942        .javaScriptAccess(true)
1943        .onPageEnd(e => {
1944          try {
1945            this.controller.runJavaScriptExt(
1946              'test()',
1947              (error, result) => {
1948                if (error) {
1949                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
1950                  return;
1951                }
1952                if (result) {
1953                  try {
1954                    let type = result.getType();
1955                    switch (type) {
1956                      case webview.JsMessageType.STRING: {
1957                        this.msg1 = "result type:" + typeof (result.getString());
1958                        this.msg2 = "result getString:" + ((result.getString()));
1959                        break;
1960                      }
1961                      case webview.JsMessageType.NUMBER: {
1962                        this.msg1 = "result type:" + typeof (result.getNumber());
1963                        this.msg2 = "result getNumber:" + ((result.getNumber()));
1964                        break;
1965                      }
1966                      case webview.JsMessageType.BOOLEAN: {
1967                        this.msg1 = "result type:" + typeof (result.getBoolean());
1968                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
1969                        break;
1970                      }
1971                      case webview.JsMessageType.ARRAY_BUFFER: {
1972                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
1973                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
1974                        break;
1975                      }
1976                      case webview.JsMessageType.ARRAY: {
1977                        this.msg1 = "result type:" + typeof (result.getArray());
1978                        this.msg2 = "result getArray:" + result.getArray();
1979                        break;
1980                      }
1981                      default: {
1982                        this.msg1 = "default break, type:" + type;
1983                        break;
1984                      }
1985                    }
1986                  }
1987                  catch (resError) {
1988                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1989                  }
1990                }
1991              });
1992            if (e) {
1993              console.info('url: ', e.url);
1994            }
1995          } catch (error) {
1996            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1997          }
1998        })
1999    }
2000  }
2001}
2002```
2003
2004```ts
2005// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2006import { webview } from '@kit.ArkWeb';
2007import { BusinessError } from '@kit.BasicServicesKit';
2008import { fileIo } from '@kit.CoreFileKit';
2009import { common } from '@kit.AbilityKit';
2010
2011@Entry
2012@Component
2013struct WebComponent {
2014  controller: webview.WebviewController = new webview.WebviewController();
2015  @State msg1: string = ''
2016  @State msg2: string = ''
2017
2018  build() {
2019    Column() {
2020      Text(this.msg1).fontSize(20)
2021      Text(this.msg2).fontSize(20)
2022      Button('runJavaScriptExt')
2023        .onClick(() => {
2024          try {
2025            let context = getContext(this) as common.UIAbilityContext;
2026            let filePath = context.filesDir + 'test.txt';
2027            // 新建并打开文件
2028            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2029            // 写入一段内容至文件
2030            fileIo.writeSync(file.fd, "test()");
2031            // 从文件中读取内容
2032            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2033            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2034            // 关闭文件
2035            fileIo.closeSync(file);
2036            this.controller.runJavaScriptExt(
2037              arrayBuffer,
2038              (error, result) => {
2039                if (error) {
2040                  console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`)
2041                  return;
2042                }
2043                if (result) {
2044                  try {
2045                    let type = result.getType();
2046                    switch (type) {
2047                      case webview.JsMessageType.STRING: {
2048                        this.msg1 = "result type:" + typeof (result.getString());
2049                        this.msg2 = "result getString:" + ((result.getString()));
2050                        break;
2051                      }
2052                      case webview.JsMessageType.NUMBER: {
2053                        this.msg1 = "result type:" + typeof (result.getNumber());
2054                        this.msg2 = "result getNumber:" + ((result.getNumber()));
2055                        break;
2056                      }
2057                      case webview.JsMessageType.BOOLEAN: {
2058                        this.msg1 = "result type:" + typeof (result.getBoolean());
2059                        this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2060                        break;
2061                      }
2062                      case webview.JsMessageType.ARRAY_BUFFER: {
2063                        this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2064                        this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2065                        break;
2066                      }
2067                      case webview.JsMessageType.ARRAY: {
2068                        this.msg1 = "result type:" + typeof (result.getArray());
2069                        this.msg2 = "result getArray:" + result.getArray();
2070                        break;
2071                      }
2072                      default: {
2073                        this.msg1 = "default break, type:" + type;
2074                        break;
2075                      }
2076                    }
2077                  }
2078                  catch (resError) {
2079                    console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2080                  }
2081                }
2082              });
2083          } catch (error) {
2084            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2085          }
2086        })
2087      Web({ src: $rawfile('index.html'), controller: this.controller })
2088        .javaScriptAccess(true)
2089    }
2090  }
2091}
2092```
2093
2094加载的html文件。
2095```html
2096<!-- index.html -->
2097<!DOCTYPE html>
2098<html lang="en-gb">
2099<body>
2100<h1>run JavaScript Ext demo</h1>
2101</body>
2102<script type="text/javascript">
2103function test() {
2104  return "hello, world";
2105}
2106</script>
2107</html>
2108```
2109
2110### runJavaScriptExt<sup>10+</sup>
2111
2112runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt>
2113
2114异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。
2115
2116**系统能力:** SystemCapability.Web.Webview.Core
2117
2118**参数:**
2119
2120| 参数名 | 类型 | 必填 | 说明         |
2121| ------ | -------- | ---- | ---------------- |
2122| script | string \| ArrayBuffer<sup>12+</sup> | 是   | JavaScript脚本。 |
2123
2124**返回值:**
2125
2126| 类型            | 说明                                                |
2127| --------------- | --------------------------------------------------- |
2128| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 |
2129
2130**错误码:**
2131
2132以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2133
2134| 错误码ID | 错误信息                                                     |
2135| -------- | ------------------------------------------------------------ |
2136| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2137| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2138
2139**示例:**
2140
2141```ts
2142// xxx.ets
2143import { webview } from '@kit.ArkWeb';
2144import { BusinessError } from '@kit.BasicServicesKit';
2145
2146@Entry
2147@Component
2148struct WebComponent {
2149  controller: webview.WebviewController = new webview.WebviewController();
2150  @State webResult: string = '';
2151  @State msg1: string = '';
2152  @State msg2: string = '';
2153
2154  build() {
2155    Column() {
2156      Text(this.webResult).fontSize(20)
2157      Text(this.msg1).fontSize(20)
2158      Text(this.msg2).fontSize(20)
2159      Web({ src: $rawfile('index.html'), controller: this.controller })
2160        .javaScriptAccess(true)
2161        .onPageEnd(() => {
2162          this.controller.runJavaScriptExt('test()')
2163            .then((result) => {
2164              try {
2165                let type = result.getType();
2166                switch (type) {
2167                  case webview.JsMessageType.STRING: {
2168                    this.msg1 = "result type:" + typeof (result.getString());
2169                    this.msg2 = "result getString:" + ((result.getString()));
2170                    break;
2171                  }
2172                  case webview.JsMessageType.NUMBER: {
2173                    this.msg1 = "result type:" + typeof (result.getNumber());
2174                    this.msg2 = "result getNumber:" + ((result.getNumber()));
2175                    break;
2176                  }
2177                  case webview.JsMessageType.BOOLEAN: {
2178                    this.msg1 = "result type:" + typeof (result.getBoolean());
2179                    this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2180                    break;
2181                  }
2182                  case webview.JsMessageType.ARRAY_BUFFER: {
2183                    this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2184                    this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2185                    break;
2186                  }
2187                  case webview.JsMessageType.ARRAY: {
2188                    this.msg1 = "result type:" + typeof (result.getArray());
2189                    this.msg2 = "result getArray:" + result.getArray();
2190                    break;
2191                  }
2192                  default: {
2193                    this.msg1 = "default break, type:" + type;
2194                    break;
2195                  }
2196                }
2197              }
2198              catch (resError) {
2199                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2200              }
2201            }).catch((error: BusinessError) => {
2202            console.error("error: " + error);
2203          })
2204        })
2205    }
2206  }
2207}
2208```
2209
2210```ts
2211// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据
2212import { webview } from '@kit.ArkWeb';
2213import { BusinessError } from '@kit.BasicServicesKit';
2214import { fileIo } from '@kit.CoreFileKit';
2215import { common } from '@kit.AbilityKit';
2216
2217@Entry
2218@Component
2219struct WebComponent {
2220  controller: webview.WebviewController = new webview.WebviewController();
2221  @State msg1: string = '';
2222  @State msg2: string = '';
2223
2224  build() {
2225    Column() {
2226      Text(this.msg1).fontSize(20)
2227      Text(this.msg2).fontSize(20)
2228      Button('runJavaScriptExt')
2229        .onClick(() => {
2230          try {
2231            let context = getContext(this) as common.UIAbilityContext;
2232            let filePath = context.filesDir + 'test.txt';
2233            // 新建并打开文件
2234            let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
2235            // 写入一段内容至文件
2236            fileIo.writeSync(file.fd, "test()");
2237            // 从文件中读取内容
2238            let arrayBuffer: ArrayBuffer = new ArrayBuffer(6);
2239            fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength });
2240            // 关闭文件
2241            fileIo.closeSync(file);
2242            this.controller.runJavaScriptExt(arrayBuffer)
2243              .then((result) => {
2244                try {
2245                  let type = result.getType();
2246                  switch (type) {
2247                    case webview.JsMessageType.STRING: {
2248                      this.msg1 = "result type:" + typeof (result.getString());
2249                      this.msg2 = "result getString:" + ((result.getString()));
2250                      break;
2251                    }
2252                    case webview.JsMessageType.NUMBER: {
2253                      this.msg1 = "result type:" + typeof (result.getNumber());
2254                      this.msg2 = "result getNumber:" + ((result.getNumber()));
2255                      break;
2256                    }
2257                    case webview.JsMessageType.BOOLEAN: {
2258                      this.msg1 = "result type:" + typeof (result.getBoolean());
2259                      this.msg2 = "result getBoolean:" + ((result.getBoolean()));
2260                      break;
2261                    }
2262                    case webview.JsMessageType.ARRAY_BUFFER: {
2263                      this.msg1 = "result type:" + typeof (result.getArrayBuffer());
2264                      this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
2265                      break;
2266                    }
2267                    case webview.JsMessageType.ARRAY: {
2268                      this.msg1 = "result type:" + typeof (result.getArray());
2269                      this.msg2 = "result getArray:" + result.getArray();
2270                      break;
2271                    }
2272                    default: {
2273                      this.msg1 = "default break, type:" + type;
2274                      break;
2275                    }
2276                  }
2277                }
2278                catch (resError) {
2279                  console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
2280                }
2281              })
2282              .catch((error: BusinessError) => {
2283                console.error("error: " + error);
2284              })
2285          } catch (error) {
2286            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2287          }
2288        })
2289      Web({ src: $rawfile('index.html'), controller: this.controller })
2290        .javaScriptAccess(true)
2291    }
2292  }
2293}
2294```
2295
2296加载的html文件。
2297```html
2298<!-- index.html -->
2299<!DOCTYPE html>
2300<html lang="en-gb">
2301<body>
2302<h1>run JavaScript Ext demo</h1>
2303</body>
2304<script type="text/javascript">
2305function test() {
2306  return "hello, world";
2307}
2308</script>
2309</html>
2310```
2311
2312### deleteJavaScriptRegister
2313
2314deleteJavaScriptRegister(name: string): void
2315
2316删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。
2317
2318**系统能力:** SystemCapability.Web.Webview.Core
2319
2320**参数:**
2321
2322| 参数名 | 类型 | 必填 | 说明  |
2323| ------ | -------- | ---- | ---- |
2324| name   | string   | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
2325
2326**错误码:**
2327
2328以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2329
2330| 错误码ID | 错误信息                                                     |
2331| -------- | ------------------------------------------------------------ |
2332| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2333| 17100008 | Failed to delete JavaScriptProxy because it does not exist.                               |
2334| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2335
2336**示例:**
2337
2338```ts
2339// xxx.ets
2340import { webview } from '@kit.ArkWeb';
2341import { BusinessError } from '@kit.BasicServicesKit';
2342
2343class TestObj {
2344  constructor() {
2345  }
2346
2347  test(): string {
2348    return "ArkUI Web Component";
2349  }
2350
2351  toString(): void {
2352    console.log('Web Component toString');
2353  }
2354}
2355
2356@Entry
2357@Component
2358struct WebComponent {
2359  controller: webview.WebviewController = new webview.WebviewController();
2360  @State testObjtest: TestObj = new TestObj();
2361  @State name: string = 'objName';
2362  build() {
2363    Column() {
2364      Button('refresh')
2365        .onClick(() => {
2366          try {
2367            this.controller.refresh();
2368          } catch (error) {
2369            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2370          }
2371        })
2372      Button('Register JavaScript To Window')
2373        .onClick(() => {
2374          try {
2375            this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]);
2376          } catch (error) {
2377            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2378          }
2379        })
2380      Button('deleteJavaScriptRegister')
2381        .onClick(() => {
2382          try {
2383            this.controller.deleteJavaScriptRegister(this.name);
2384          } catch (error) {
2385            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2386          }
2387        })
2388      Web({ src: $rawfile('index.html'), controller: this.controller })
2389        .javaScriptAccess(true)
2390    }
2391  }
2392}
2393```
2394
2395加载的html文件。
2396```html
2397<!-- index.html -->
2398<!DOCTYPE html>
2399<html>
2400    <meta charset="utf-8">
2401    <body>
2402      <button type="button" onclick="htmlTest()">Click Me!</button>
2403      <p id="demo"></p>
2404    </body>
2405    <script type="text/javascript">
2406    function htmlTest() {
2407      let str=objName.test();
2408      document.getElementById("demo").innerHTML=str;
2409      console.log('objName.test result:'+ str)
2410    }
2411</script>
2412</html>
2413```
2414
2415### zoom
2416
2417zoom(factor: number): void
2418
2419调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。
2420
2421**系统能力:** SystemCapability.Web.Webview.Core
2422
2423**参数:**
2424
2425| 参数名 | 类型 | 必填 | 说明 |
2426| ------ | -------- | ---- | ------------------------------------------------------------ |
2427| factor | number   | 是   | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 |
2428
2429**错误码:**
2430
2431以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2432
2433| 错误码ID | 错误信息                                                     |
2434| -------- | ------------------------------------------------------------ |
2435| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2436| 17100004 | Function not enabled.                                         |
2437| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2438
2439**示例:**
2440
2441```ts
2442// xxx.ets
2443import { webview } from '@kit.ArkWeb';
2444import { BusinessError } from '@kit.BasicServicesKit';
2445
2446@Entry
2447@Component
2448struct WebComponent {
2449  controller: webview.WebviewController = new webview.WebviewController();
2450  @State factor: number = 1;
2451
2452  build() {
2453    Column() {
2454      Button('zoom')
2455        .onClick(() => {
2456          try {
2457            this.controller.zoom(this.factor);
2458          } catch (error) {
2459            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2460          }
2461        })
2462      Web({ src: 'www.example.com', controller: this.controller })
2463        .zoomAccess(true)
2464    }
2465  }
2466}
2467```
2468
2469### searchAllAsync
2470
2471searchAllAsync(searchString: string): void
2472
2473异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。
2474
2475**系统能力:** SystemCapability.Web.Webview.Core
2476
2477**参数:**
2478
2479| 参数名       | 类型 | 必填 | 说明       |
2480| ------------ | -------- | ---- | -------------- |
2481| searchString | string   | 是   | 查找的关键字。 |
2482
2483**错误码:**
2484
2485以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2486
2487| 错误码ID | 错误信息                                                     |
2488| -------- | ------------------------------------------------------------ |
2489| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2490| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2491
2492**示例:**
2493
2494```ts
2495// xxx.ets
2496import { webview } from '@kit.ArkWeb';
2497import { BusinessError } from '@kit.BasicServicesKit';
2498
2499@Entry
2500@Component
2501struct WebComponent {
2502  controller: webview.WebviewController = new webview.WebviewController();
2503  @State searchString: string = "Hello World";
2504
2505  build() {
2506    Column() {
2507      Button('searchString')
2508        .onClick(() => {
2509          try {
2510            this.controller.searchAllAsync(this.searchString);
2511          } catch (error) {
2512            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2513          }
2514        })
2515      Web({ src: $rawfile('index.html'), controller: this.controller })
2516        .onSearchResultReceive(ret => {
2517          if (ret) {
2518            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
2519              "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
2520          }
2521        })
2522    }
2523  }
2524}
2525```
2526
2527加载的html文件。
2528```html
2529<!-- index.html -->
2530<!DOCTYPE html>
2531<html>
2532  <body>
2533    <p>Hello World Highlight Hello World</p>
2534  </body>
2535</html>
2536```
2537
2538### clearMatches
2539
2540clearMatches(): void
2541
2542清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。
2543
2544**系统能力:** SystemCapability.Web.Webview.Core
2545
2546**错误码:**
2547
2548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2549
2550| 错误码ID | 错误信息                                                     |
2551| -------- | ------------------------------------------------------------ |
2552| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2553
2554**示例:**
2555
2556```ts
2557// xxx.ets
2558import { webview } from '@kit.ArkWeb';
2559import { BusinessError } from '@kit.BasicServicesKit';
2560
2561@Entry
2562@Component
2563struct WebComponent {
2564  controller: webview.WebviewController = new webview.WebviewController();
2565
2566  build() {
2567    Column() {
2568      Button('clearMatches')
2569        .onClick(() => {
2570          try {
2571            this.controller.clearMatches();
2572          } catch (error) {
2573            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2574          }
2575        })
2576      Web({ src: $rawfile('index.html'), controller: this.controller })
2577    }
2578  }
2579}
2580```
2581
2582加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2583
2584### searchNext
2585
2586searchNext(forward: boolean): void
2587
2588滚动到下一个匹配的查找结果并高亮。
2589
2590**系统能力:** SystemCapability.Web.Webview.Core
2591
2592**参数:**
2593
2594| 参数名  | 类型 | 必填 | 说明               |
2595| ------- | -------- | ---- | ---------------------- |
2596| forward | boolean  | 是   | 从前向后或者逆向查找。 |
2597
2598**错误码:**
2599
2600以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2601
2602| 错误码ID | 错误信息                                                     |
2603| -------- | ------------------------------------------------------------ |
2604| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2605| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2606
2607**示例:**
2608
2609```ts
2610// xxx.ets
2611import { webview } from '@kit.ArkWeb';
2612import { BusinessError } from '@kit.BasicServicesKit';
2613
2614@Entry
2615@Component
2616struct WebComponent {
2617  controller: webview.WebviewController = new webview.WebviewController();
2618
2619  build() {
2620    Column() {
2621      Button('searchNext')
2622        .onClick(() => {
2623          try {
2624            this.controller.searchNext(true);
2625          } catch (error) {
2626            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2627          }
2628        })
2629      Web({ src: $rawfile('index.html'), controller: this.controller })
2630    }
2631  }
2632}
2633```
2634
2635加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。
2636
2637### clearSslCache
2638
2639clearSslCache(): void
2640
2641清除Web组件记录的SSL证书错误事件对应的用户操作行为。
2642
2643**系统能力:** SystemCapability.Web.Webview.Core
2644
2645**错误码:**
2646
2647以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2648
2649| 错误码ID | 错误信息                                                     |
2650| -------- | ------------------------------------------------------------ |
2651| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2652
2653**示例:**
2654
2655```ts
2656// xxx.ets
2657import { webview } from '@kit.ArkWeb';
2658import { BusinessError } from '@kit.BasicServicesKit';
2659
2660@Entry
2661@Component
2662struct WebComponent {
2663  controller: webview.WebviewController = new webview.WebviewController();
2664
2665  build() {
2666    Column() {
2667      Button('clearSslCache')
2668        .onClick(() => {
2669          try {
2670            this.controller.clearSslCache();
2671          } catch (error) {
2672            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2673          }
2674        })
2675      Web({ src: 'www.example.com', controller: this.controller })
2676    }
2677  }
2678}
2679```
2680
2681### clearClientAuthenticationCache
2682
2683clearClientAuthenticationCache(): void
2684
2685清除Web组件记录的客户端证书请求事件对应的用户操作行为。
2686
2687**系统能力:** SystemCapability.Web.Webview.Core
2688
2689**错误码:**
2690
2691以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2692
2693| 错误码ID | 错误信息                                                     |
2694| -------- | ------------------------------------------------------------ |
2695| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2696
2697**示例:**
2698
2699```ts
2700// xxx.ets
2701import { webview } from '@kit.ArkWeb';
2702import { BusinessError } from '@kit.BasicServicesKit';
2703
2704@Entry
2705@Component
2706struct WebComponent {
2707  controller: webview.WebviewController = new webview.WebviewController();
2708
2709  build() {
2710    Column() {
2711      Button('clearClientAuthenticationCache')
2712        .onClick(() => {
2713          try {
2714            this.controller.clearClientAuthenticationCache();
2715          } catch (error) {
2716            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2717          }
2718        })
2719      Web({ src: 'www.example.com', controller: this.controller })
2720    }
2721  }
2722}
2723```
2724
2725### createWebMessagePorts
2726
2727createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort>
2728
2729创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
2730
2731**系统能力:** SystemCapability.Web.Webview.Core
2732
2733**参数:**
2734
2735| 参数名 | 类型                   | 必填 | 说明                             |
2736| ------ | ---------------------- | ---- | :------------------------------|
2737| isExtentionType<sup>10+</sup>   | boolean     | 否  | 是否使用扩展增强接口,默认false不使用。 |
2738
2739**返回值:**
2740
2741| 类型                   | 说明              |
2742| ---------------------- | ----------------- |
2743| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 |
2744
2745**错误码:**
2746
2747以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2748
2749| 错误码ID | 错误信息                                                     |
2750| -------- | ------------------------------------------------------------ |
2751| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2752| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2753
2754**示例:**
2755
2756```ts
2757// xxx.ets
2758import { webview } from '@kit.ArkWeb';
2759import { BusinessError } from '@kit.BasicServicesKit';
2760
2761@Entry
2762@Component
2763struct WebComponent {
2764  controller: webview.WebviewController = new webview.WebviewController();
2765  ports: webview.WebMessagePort[] = [];
2766
2767  build() {
2768    Column() {
2769      Button('createWebMessagePorts')
2770        .onClick(() => {
2771          try {
2772            this.ports = this.controller.createWebMessagePorts();
2773            console.log("createWebMessagePorts size:" + this.ports.length);
2774          } catch (error) {
2775            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2776          }
2777        })
2778      Web({ src: 'www.example.com', controller: this.controller })
2779    }
2780  }
2781}
2782```
2783
2784### postMessage
2785
2786postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void
2787
2788发送Web消息端口到HTML。
2789
2790**系统能力:** SystemCapability.Web.Webview.Core
2791
2792**参数:**
2793
2794| 参数名 | 类型                   | 必填 | 说明                             |
2795| ------ | ---------------------- | ---- | :------------------------------- |
2796| name   | string                 | 是   | 要发送的消息名称。            |
2797| ports  | Array\<[WebMessagePort](#webmessageport)> | 是   | 要发送的消息端口。            |
2798| uri    | string                 | 是   | 接收该消息的URI。                |
2799
2800**错误码:**
2801
2802以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2803
2804| 错误码ID | 错误信息                                                     |
2805| -------- | ------------------------------------------------------------ |
2806| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2807| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
2808
2809**示例:**
2810
2811```ts
2812// xxx.ets
2813import { webview } from '@kit.ArkWeb';
2814import { BusinessError } from '@kit.BasicServicesKit';
2815
2816@Entry
2817@Component
2818struct WebComponent {
2819  controller: webview.WebviewController = new webview.WebviewController();
2820  ports: webview.WebMessagePort[] = [];
2821  @State sendFromEts: string = 'Send this message from ets to HTML';
2822  @State receivedFromHtml: string = 'Display received message send from HTML';
2823
2824  build() {
2825    Column() {
2826      // 展示接收到的来自HTML的内容
2827      Text(this.receivedFromHtml)
2828      // 输入框的内容发送到html
2829      TextInput({ placeholder: 'Send this message from ets to HTML' })
2830        .onChange((value: string) => {
2831          this.sendFromEts = value;
2832        })
2833
2834      Button('postMessage')
2835        .onClick(() => {
2836          try {
2837            // 1、创建两个消息端口。
2838            this.ports = this.controller.createWebMessagePorts();
2839            // 2、在应用侧的消息端口(如端口1)上注册回调事件。
2840            this.ports[1].onMessageEvent((result: webview.WebMessage) => {
2841              let msg = 'Got msg from HTML:';
2842              if (typeof (result) == "string") {
2843                console.log("received string message from html5, string is:" + result);
2844                msg = msg + result;
2845              } else if (typeof (result) == "object") {
2846                if (result instanceof ArrayBuffer) {
2847                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2848                  msg = msg + "length is " + result.byteLength;
2849                } else {
2850                  console.log("not support");
2851                }
2852              } else {
2853                console.log("not support");
2854              }
2855              this.receivedFromHtml = msg;
2856            })
2857            // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
2858            this.controller.postMessage('__init_port__', [this.ports[0]], '*');
2859          } catch (error) {
2860            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2861          }
2862        })
2863
2864      // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。
2865      Button('SendDataToHTML')
2866        .onClick(() => {
2867          try {
2868            if (this.ports && this.ports[1]) {
2869              this.ports[1].postMessageEvent(this.sendFromEts);
2870            } else {
2871              console.error(`ports is null, Please initialize first`);
2872            }
2873          } catch (error) {
2874            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2875          }
2876        })
2877      Web({ src: $rawfile('index.html'), controller: this.controller })
2878    }
2879  }
2880}
2881```
2882
2883加载的html文件。
2884```html
2885<!--index.html-->
2886<!DOCTYPE html>
2887<html>
2888<head>
2889    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2890    <title>WebView Message Port Demo</title>
2891</head>
2892
2893  <body>
2894    <h1>WebView Message Port Demo</h1>
2895    <div>
2896        <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
2897        <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
2898    </div>
2899    <p class="output">display received message send from ets</p>
2900  </body>
2901  <script src="xxx.js"></script>
2902</html>
2903```
2904
2905```js
2906//xxx.js
2907var h5Port;
2908var output = document.querySelector('.output');
2909window.addEventListener('message', function (event) {
2910    if (event.data == '__init_port__') {
2911        if (event.ports[0] != null) {
2912            h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口
2913            h5Port.onmessage = function (event) {
2914              // 2. 接收ets侧发送过来的消息.
2915              var msg = 'Got message from ets:';
2916              var result = event.data;
2917              if (typeof(result) == "string") {
2918                console.log("received string message from html5, string is:" + result);
2919                msg = msg + result;
2920              } else if (typeof(result) == "object") {
2921                if (result instanceof ArrayBuffer) {
2922                  console.log("received arraybuffer from html5, length is:" + result.byteLength);
2923                  msg = msg + "length is " + result.byteLength;
2924                } else {
2925                  console.log("not support");
2926                }
2927              } else {
2928                console.log("not support");
2929              }
2930              output.innerHTML = msg;
2931            }
2932        }
2933    }
2934})
2935
2936// 3. 使用h5Port往ets侧发送消息.
2937function PostMsgToEts(data) {
2938    if (h5Port) {
2939      h5Port.postMessage(data);
2940    } else {
2941      console.error("h5Port is null, Please initialize first");
2942    }
2943}
2944```
2945
2946### requestFocus
2947
2948requestFocus(): void
2949
2950使当前web页面获取焦点。
2951
2952**系统能力:** SystemCapability.Web.Webview.Core
2953
2954**错误码:**
2955
2956以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
2957
2958| 错误码ID | 错误信息                                                     |
2959| -------- | ------------------------------------------------------------ |
2960| 17100001 | Init error. The WebviewController must be associated with a Web component. |
2961
2962**示例:**
2963
2964```ts
2965// xxx.ets
2966import { webview } from '@kit.ArkWeb';
2967import { BusinessError } from '@kit.BasicServicesKit';
2968
2969@Entry
2970@Component
2971struct WebComponent {
2972  controller: webview.WebviewController = new webview.WebviewController();
2973
2974  build() {
2975    Column() {
2976      Button('requestFocus')
2977        .onClick(() => {
2978          try {
2979            this.controller.requestFocus();
2980          } catch (error) {
2981            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
2982          }
2983        });
2984      Web({ src: 'www.example.com', controller: this.controller })
2985    }
2986  }
2987}
2988```
2989
2990### zoomIn
2991
2992zoomIn(): void
2993
2994调用此接口将当前网页进行放大,比例为20%。
2995
2996**系统能力:** SystemCapability.Web.Webview.Core
2997
2998**错误码:**
2999
3000以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3001
3002| 错误码ID | 错误信息                                                     |
3003| -------- | ------------------------------------------------------------ |
3004| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3005| 17100004 | Function not enabled.                                         |
3006
3007**示例:**
3008
3009```ts
3010// xxx.ets
3011import { webview } from '@kit.ArkWeb';
3012import { BusinessError } from '@kit.BasicServicesKit';
3013
3014@Entry
3015@Component
3016struct WebComponent {
3017  controller: webview.WebviewController = new webview.WebviewController();
3018
3019  build() {
3020    Column() {
3021      Button('zoomIn')
3022        .onClick(() => {
3023          try {
3024            this.controller.zoomIn();
3025          } catch (error) {
3026            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3027          }
3028        })
3029      Web({ src: 'www.example.com', controller: this.controller })
3030    }
3031  }
3032}
3033```
3034
3035### zoomOut
3036
3037zoomOut(): void
3038
3039调用此接口将当前网页进行缩小,比例为20%。
3040
3041**系统能力:** SystemCapability.Web.Webview.Core
3042
3043**错误码:**
3044
3045以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3046
3047| 错误码ID | 错误信息                                                     |
3048| -------- | ------------------------------------------------------------ |
3049| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3050| 17100004 | Function not enabled.                                         |
3051
3052**示例:**
3053
3054```ts
3055// xxx.ets
3056import { webview } from '@kit.ArkWeb';
3057import { BusinessError } from '@kit.BasicServicesKit';
3058
3059@Entry
3060@Component
3061struct WebComponent {
3062  controller: webview.WebviewController = new webview.WebviewController();
3063
3064  build() {
3065    Column() {
3066      Button('zoomOut')
3067        .onClick(() => {
3068          try {
3069            this.controller.zoomOut();
3070          } catch (error) {
3071            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3072          }
3073        })
3074      Web({ src: 'www.example.com', controller: this.controller })
3075    }
3076  }
3077}
3078```
3079
3080### getHitTestValue
3081
3082getHitTestValue(): HitTestValue
3083
3084获取当前被点击区域的元素信息。
3085
3086**系统能力:** SystemCapability.Web.Webview.Core
3087
3088**返回值:**
3089
3090| 类型         | 说明                 |
3091| ------------ | -------------------- |
3092| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 |
3093
3094**错误码:**
3095
3096以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3097
3098| 错误码ID | 错误信息                                                     |
3099| -------- | ------------------------------------------------------------ |
3100| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3101
3102**示例:**
3103
3104```ts
3105// xxx.ets
3106import { webview } from '@kit.ArkWeb';
3107import { BusinessError } from '@kit.BasicServicesKit';
3108
3109@Entry
3110@Component
3111struct WebComponent {
3112  controller: webview.WebviewController = new webview.WebviewController();
3113
3114  build() {
3115    Column() {
3116      Button('getHitTestValue')
3117        .onClick(() => {
3118          try {
3119            let hitValue = this.controller.getHitTestValue();
3120            console.log("hitType: " + hitValue.type);
3121            console.log("extra: " + hitValue.extra);
3122          } catch (error) {
3123            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3124          }
3125        })
3126      Web({ src: 'www.example.com', controller: this.controller })
3127    }
3128  }
3129}
3130```
3131
3132### getWebId
3133
3134getWebId(): number
3135
3136获取当前Web组件的索引值,用于多个Web组件的管理。
3137
3138**系统能力:** SystemCapability.Web.Webview.Core
3139
3140**返回值:**
3141
3142| 类型   | 说明                  |
3143| ------ | --------------------- |
3144| number | 当前Web组件的索引值。 |
3145
3146**错误码:**
3147
3148以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3149
3150| 错误码ID | 错误信息                                                     |
3151| -------- | ------------------------------------------------------------ |
3152| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3153
3154**示例:**
3155
3156```ts
3157// xxx.ets
3158import { webview } from '@kit.ArkWeb';
3159import { BusinessError } from '@kit.BasicServicesKit';
3160
3161@Entry
3162@Component
3163struct WebComponent {
3164  controller: webview.WebviewController = new webview.WebviewController();
3165
3166  build() {
3167    Column() {
3168      Button('getWebId')
3169        .onClick(() => {
3170          try {
3171            let id = this.controller.getWebId();
3172            console.log("id: " + id);
3173          } catch (error) {
3174            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3175          }
3176        })
3177      Web({ src: 'www.example.com', controller: this.controller })
3178    }
3179  }
3180}
3181```
3182
3183### getUserAgent
3184
3185getUserAgent(): string
3186
3187获取当前默认用户代理。
3188
3189默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
3190
3191**系统能力:** SystemCapability.Web.Webview.Core
3192
3193**返回值:**
3194
3195| 类型   | 说明           |
3196| ------ | -------------- |
3197| string | 默认用户代理。 |
3198
3199**错误码:**
3200
3201以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3202
3203| 错误码ID | 错误信息                                                     |
3204| -------- | ------------------------------------------------------------ |
3205| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3206
3207**示例:**
3208
3209```ts
3210// xxx.ets
3211import { webview } from '@kit.ArkWeb';
3212import { BusinessError } from '@kit.BasicServicesKit';
3213
3214@Entry
3215@Component
3216struct WebComponent {
3217  controller: webview.WebviewController = new webview.WebviewController();
3218
3219  build() {
3220    Column() {
3221      Button('getUserAgent')
3222        .onClick(() => {
3223          try {
3224            let userAgent = this.controller.getUserAgent();
3225            console.log("userAgent: " + userAgent);
3226          } catch (error) {
3227            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3228          }
3229        })
3230      Web({ src: 'www.example.com', controller: this.controller })
3231    }
3232  }
3233}
3234```
3235
3236支持开发者基于默认的UserAgent去定制UserAgent。
3237```ts
3238// xxx.ets
3239import { webview } from '@kit.ArkWeb';
3240import { BusinessError } from '@kit.BasicServicesKit';
3241
3242@Entry
3243@Component
3244struct WebComponent {
3245  controller: webview.WebviewController = new webview.WebviewController();
3246  @State ua: string = "";
3247
3248  aboutToAppear(): void {
3249    webview.once('webInited', () => {
3250      try {
3251        // 应用侧用法示例,定制UserAgent。
3252        this.ua = this.controller.getUserAgent() + 'xxx';
3253        this.controller.setCustomUserAgent(this.ua);
3254      } catch (error) {
3255        console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3256      }
3257    })
3258  }
3259
3260  build() {
3261    Column() {
3262      Web({ src: 'www.example.com', controller: this.controller })
3263    }
3264  }
3265}
3266```
3267
3268### getTitle
3269
3270getTitle(): string
3271
3272获取当前网页的标题。
3273
3274**系统能力:** SystemCapability.Web.Webview.Core
3275
3276**返回值:**
3277
3278| 类型   | 说明                 |
3279| ------ | -------------------- |
3280| string | 当前网页的标题。 |
3281
3282**错误码:**
3283
3284以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3285
3286| 错误码ID | 错误信息                                                     |
3287| -------- | ------------------------------------------------------------ |
3288| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3289
3290**示例:**
3291
3292```ts
3293// xxx.ets
3294import { webview } from '@kit.ArkWeb';
3295import { BusinessError } from '@kit.BasicServicesKit';
3296
3297@Entry
3298@Component
3299struct WebComponent {
3300  controller: webview.WebviewController = new webview.WebviewController();
3301
3302  build() {
3303    Column() {
3304      Button('getTitle')
3305        .onClick(() => {
3306          try {
3307            let title = this.controller.getTitle();
3308            console.log("title: " + title);
3309          } catch (error) {
3310            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3311          }
3312        })
3313      Web({ src: 'www.example.com', controller: this.controller })
3314    }
3315  }
3316}
3317```
3318
3319### getPageHeight
3320
3321getPageHeight(): number
3322
3323获取当前网页的页面高度。
3324
3325**系统能力:** SystemCapability.Web.Webview.Core
3326
3327**返回值:**
3328
3329| 类型   | 说明                 |
3330| ------ | -------------------- |
3331| number | 当前网页的页面高度。单位:vp。 |
3332
3333**错误码:**
3334
3335以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3336
3337| 错误码ID | 错误信息                                                     |
3338| -------- | ------------------------------------------------------------ |
3339| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3340
3341**示例:**
3342
3343```ts
3344// xxx.ets
3345import { webview } from '@kit.ArkWeb';
3346import { BusinessError } from '@kit.BasicServicesKit';
3347
3348@Entry
3349@Component
3350struct WebComponent {
3351  controller: webview.WebviewController = new webview.WebviewController();
3352
3353  build() {
3354    Column() {
3355      Button('getPageHeight')
3356        .onClick(() => {
3357          try {
3358            let pageHeight = this.controller.getPageHeight();
3359            console.log("pageHeight : " + pageHeight);
3360          } catch (error) {
3361            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3362          }
3363        })
3364      Web({ src: 'www.example.com', controller: this.controller })
3365    }
3366  }
3367}
3368```
3369
3370### storeWebArchive
3371
3372storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void
3373
3374以回调方式异步保存当前页面。
3375
3376**系统能力:** SystemCapability.Web.Webview.Core
3377
3378**参数:**
3379
3380| 参数名   | 类型              | 必填 | 说明                                                         |
3381| -------- | --------------------- | ---- | ------------------------------------------------------------ |
3382| baseName | string                | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3383| autoName | boolean               | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3384| callback | AsyncCallback\<string> | 是   | 返回文件存储路径,保存网页失败会返回null。                   |
3385
3386**错误码:**
3387
3388以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3389
3390| 错误码ID | 错误信息                                                     |
3391| -------- | ------------------------------------------------------------ |
3392| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3393| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3394| 17100003 | Invalid resource path or file type.                          |
3395
3396**示例:**
3397
3398```ts
3399// xxx.ets
3400import { webview } from '@kit.ArkWeb';
3401import { BusinessError } from '@kit.BasicServicesKit';
3402
3403@Entry
3404@Component
3405struct WebComponent {
3406  controller: webview.WebviewController = new webview.WebviewController();
3407
3408  build() {
3409    Column() {
3410      Button('storeWebArchive')
3411        .onClick(() => {
3412          try {
3413            this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
3414              if (error) {
3415                console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3416                return;
3417              }
3418              if (filename != null) {
3419                console.info(`save web archive success: ${filename}`);
3420              }
3421            });
3422          } catch (error) {
3423            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3424          }
3425        })
3426      Web({ src: 'www.example.com', controller: this.controller })
3427    }
3428  }
3429}
3430```
3431
3432### storeWebArchive
3433
3434storeWebArchive(baseName: string, autoName: boolean): Promise\<string>
3435
3436以Promise方式异步保存当前页面。
3437
3438**系统能力:** SystemCapability.Web.Webview.Core
3439
3440**参数:**
3441
3442| 参数名   | 类型 | 必填 | 说明                                                         |
3443| -------- | -------- | ---- | ------------------------------------------------------------ |
3444| baseName | string   | 是   | 生成的离线网页存储位置,该值不能为空。                                 |
3445| autoName | boolean  | 是   | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 |
3446
3447**返回值:**
3448
3449| 类型            | 说明                                                  |
3450| --------------- | ----------------------------------------------------- |
3451| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 |
3452
3453**错误码:**
3454
3455以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3456
3457| 错误码ID | 错误信息                                                     |
3458| -------- | ------------------------------------------------------------ |
3459| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.                                   |
3460| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3461| 17100003 | Invalid resource path or file type.                          |
3462
3463**示例:**
3464
3465```ts
3466// xxx.ets
3467import { webview } from '@kit.ArkWeb';
3468import { BusinessError } from '@kit.BasicServicesKit';
3469
3470@Entry
3471@Component
3472struct WebComponent {
3473  controller: webview.WebviewController = new webview.WebviewController();
3474
3475  build() {
3476    Column() {
3477      Button('storeWebArchive')
3478        .onClick(() => {
3479          try {
3480            this.controller.storeWebArchive("/data/storage/el2/base/", true)
3481              .then(filename => {
3482                if (filename != null) {
3483                  console.info(`save web archive success: ${filename}`)
3484                }
3485              })
3486              .catch((error: BusinessError) => {
3487                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
3488              })
3489          } catch (error) {
3490            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3491          }
3492        })
3493      Web({ src: 'www.example.com', controller: this.controller })
3494    }
3495  }
3496}
3497```
3498
3499### getUrl
3500
3501getUrl(): string
3502
3503获取当前页面的url地址。
3504
3505**系统能力:** SystemCapability.Web.Webview.Core
3506
3507**返回值:**
3508
3509| 类型   | 说明                |
3510| ------ | ------------------- |
3511| string | 当前页面的url地址。 |
3512
3513**错误码:**
3514
3515以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3516
3517| 错误码ID | 错误信息                                                     |
3518| -------- | ------------------------------------------------------------ |
3519| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3520
3521**示例:**
3522
3523```ts
3524// xxx.ets
3525import { webview } from '@kit.ArkWeb';
3526import { BusinessError } from '@kit.BasicServicesKit';
3527
3528@Entry
3529@Component
3530struct WebComponent {
3531  controller: webview.WebviewController = new webview.WebviewController();
3532
3533  build() {
3534    Column() {
3535      Button('getUrl')
3536        .onClick(() => {
3537          try {
3538            let url = this.controller.getUrl();
3539            console.log("url: " + url);
3540          } catch (error) {
3541            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3542          }
3543        })
3544      Web({ src: 'www.example.com', controller: this.controller })
3545    }
3546  }
3547}
3548```
3549
3550### stop
3551
3552stop(): void
3553
3554停止页面加载。
3555
3556**系统能力:** SystemCapability.Web.Webview.Core
3557
3558**错误码:**
3559
3560以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3561
3562| 错误码ID | 错误信息                                                     |
3563| -------- | ------------------------------------------------------------ |
3564| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3565
3566**示例:**
3567
3568```ts
3569// xxx.ets
3570import { webview } from '@kit.ArkWeb';
3571import { BusinessError } from '@kit.BasicServicesKit';
3572
3573@Entry
3574@Component
3575struct WebComponent {
3576  controller: webview.WebviewController = new webview.WebviewController();
3577
3578  build() {
3579    Column() {
3580      Button('stop')
3581        .onClick(() => {
3582          try {
3583            this.controller.stop();
3584          } catch (error) {
3585            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3586          }
3587        });
3588      Web({ src: 'www.example.com', controller: this.controller })
3589    }
3590  }
3591}
3592```
3593
3594### backOrForward
3595
3596backOrForward(step: number): void
3597
3598按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。
3599
3600前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。
3601
3602**系统能力:** SystemCapability.Web.Webview.Core
3603
3604**参数:**
3605
3606| 参数名 | 类型 | 必填 | 说明               |
3607| ------ | -------- | ---- | ---------------------- |
3608| step   | number   | 是   | 需要前进或后退的步长。 |
3609
3610**错误码:**
3611
3612以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3613
3614| 错误码ID | 错误信息                                                     |
3615| -------- | ------------------------------------------------------------ |
3616| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3617| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3618
3619**示例:**
3620
3621```ts
3622// xxx.ets
3623import { webview } from '@kit.ArkWeb';
3624import { BusinessError } from '@kit.BasicServicesKit';
3625
3626@Entry
3627@Component
3628struct WebComponent {
3629  controller: webview.WebviewController = new webview.WebviewController();
3630  @State step: number = -2;
3631
3632  build() {
3633    Column() {
3634      Button('backOrForward')
3635        .onClick(() => {
3636          try {
3637            this.controller.backOrForward(this.step);
3638          } catch (error) {
3639            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3640          }
3641        })
3642      Web({ src: 'www.example.com', controller: this.controller })
3643    }
3644  }
3645}
3646```
3647
3648### scrollTo
3649
3650scrollTo(x:number, y:number, duration?:number): void
3651
3652在指定时间内,将页面滚动到指定的绝对位置。
3653
3654**系统能力:** SystemCapability.Web.Webview.Core
3655
3656**参数:**
3657
3658| 参数名 | 类型 | 必填 | 说明               |
3659| ------ | -------- | ---- | ---------------------- |
3660| x   | number   | 是   | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 |
3661| y   | number   | 是   | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。|
3662| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3663
3664**错误码:**
3665
3666以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3667
3668| 错误码ID | 错误信息                                                     |
3669| -------- | ------------------------------------------------------------ |
3670| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3671| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3672
3673**示例:**
3674
3675```ts
3676// xxx.ets
3677import { webview } from '@kit.ArkWeb';
3678import { BusinessError } from '@kit.BasicServicesKit';
3679
3680@Entry
3681@Component
3682struct WebComponent {
3683  controller: webview.WebviewController = new webview.WebviewController();
3684
3685  build() {
3686    Column() {
3687      Button('scrollTo')
3688        .onClick(() => {
3689          try {
3690            this.controller.scrollTo(50, 50, 500);
3691          } catch (error) {
3692            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3693          }
3694        })
3695        Button('stopScroll')
3696        .onClick(() => {
3697          try {
3698            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3699          } catch (error) {
3700            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3701          }
3702        })
3703      Web({ src: $rawfile('index.html'), controller: this.controller })
3704    }
3705  }
3706}
3707```
3708
3709加载的html文件。
3710```html
3711<!--index.html-->
3712<!DOCTYPE html>
3713<html>
3714<head>
3715    <title>Demo</title>
3716    <style>
3717        body {
3718            width:2000px;
3719            height:2000px;
3720            padding-right:170px;
3721            padding-left:170px;
3722            border:5px solid blueviolet
3723        }
3724    </style>
3725</head>
3726<body>
3727Scroll Test
3728</body>
3729</html>
3730```
3731
3732### scrollBy
3733
3734scrollBy(deltaX:number, deltaY:number,duration?:number): void
3735
3736在指定时间内将页面滚动指定的偏移量。
3737
3738**系统能力:** SystemCapability.Web.Webview.Core
3739
3740**参数:**
3741
3742| 参数名 | 类型 | 必填 | 说明               |
3743| ------ | -------- | ---- | ---------------------- |
3744| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。单位:vp。 |
3745| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。单位:vp。 |
3746| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 |
3747
3748**错误码:**
3749
3750以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3751
3752| 错误码ID | 错误信息                                                     |
3753| -------- | ------------------------------------------------------------ |
3754| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3755| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3756
3757> **说明:**
3758>
3759> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。
3760
3761**示例:**
3762
3763```ts
3764// xxx.ets
3765import { webview } from '@kit.ArkWeb';
3766import { BusinessError } from '@kit.BasicServicesKit';
3767
3768@Entry
3769@Component
3770struct WebComponent {
3771  controller: webview.WebviewController = new webview.WebviewController();
3772
3773  build() {
3774    Column() {
3775      Button('scrollBy')
3776        .onClick(() => {
3777          try {
3778            this.controller.scrollBy(50, 50, 500);
3779          } catch (error) {
3780            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3781          }
3782        })
3783      Button('stopScroll')
3784        .onClick(() => {
3785          try {
3786            this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。
3787          } catch (error) {
3788            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3789          }
3790      Web({ src: $rawfile('index.html'), controller: this.controller })
3791    }
3792  }
3793}
3794```
3795
3796加载的html文件。
3797```html
3798<!--index.html-->
3799<!DOCTYPE html>
3800<html>
3801<head>
3802    <title>Demo</title>
3803    <style>
3804        body {
3805            width:2000px;
3806            height:2000px;
3807            padding-right:170px;
3808            padding-left:170px;
3809            border:5px solid blueviolet
3810        }
3811    </style>
3812</head>
3813<body>
3814Scroll Test
3815</body>
3816</html>
3817```
3818### scrollByWithResult<sup>12+</sup>
3819
3820scrollByWithResult(deltaX: number, deltaY: number): boolean
3821
3822将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。
3823
3824**系统能力:** SystemCapability.Web.Webview.Core
3825
3826**参数:**
3827
3828| 参数名 | 类型 | 必填 | 说明               |
3829| ------ | -------- | ---- | ---------------------- |
3830| deltaX | number   | 是   | 水平偏移量,其中水平向右为正方向。 |
3831| deltaY | number   | 是   | 垂直偏移量,其中垂直向下为正方向。 |
3832
3833**返回值:**
3834
3835| 类型    | 说明                                     |
3836| ------- | --------------------------------------- |
3837| boolean | 当前网页是否可以滑动,默认为false。|
3838
3839**错误码:**
3840
3841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3842
3843| 错误码ID | 错误信息                                                     |
3844| -------- | ------------------------------------------------------------ |
3845| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3846| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3847
3848> **说明:**
3849>
3850> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。
3851> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。
3852> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。
3853> - 此接口不保证滑动帧率性能。
3854
3855**示例:**
3856
3857```ts
3858// xxx.ets
3859import { webview } from '@kit.ArkWeb';
3860import { BusinessError } from '@kit.BasicServicesKit';
3861
3862@Entry
3863@Component
3864struct WebComponent {
3865  controller: webview.WebviewController = new webview.WebviewController();
3866
3867  build() {
3868    Column() {
3869      Button('scrollByWithResult')
3870        .onClick(() => {
3871          try {
3872          let result = this.controller.scrollByWithResult(50, 50);
3873          console.log("original result: " + result);
3874          } catch (error) {
3875            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3876          }
3877        })
3878      Web({ src: $rawfile('index.html'), controller: this.controller })
3879    }
3880  }
3881}
3882```
3883
3884加载的html文件。
3885```html
3886<!--index.html-->
3887<!DOCTYPE html>
3888<html>
3889<head>
3890    <title>Demo</title>
3891    <style>
3892        body {
3893            width:2000px;
3894            height:2000px;
3895            padding-right:170px;
3896            padding-left:170px;
3897            border:5px solid blueviolet
3898        }
3899    </style>
3900</head>
3901<body>
3902Scroll Test
3903</body>
3904</html>
3905```
3906### slideScroll
3907
3908slideScroll(vx:number, vy:number): void
3909
3910按照指定速度模拟对页面的轻扫滚动动作。
3911
3912**系统能力:** SystemCapability.Web.Webview.Core
3913
3914**参数:**
3915
3916| 参数名 | 类型 | 必填 | 说明               |
3917| ------ | -------- | ---- | ---------------------- |
3918| vx     | number   | 是   | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 |
3919| vy     | number   | 是   | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 |
3920
3921**错误码:**
3922
3923以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3924
3925| 错误码ID | 错误信息                                                     |
3926| -------- | ------------------------------------------------------------ |
3927| 17100001 | Init error. The WebviewController must be associated with a Web component. |
3928| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
3929
3930**示例:**
3931
3932```ts
3933// xxx.ets
3934import { webview } from '@kit.ArkWeb';
3935import { BusinessError } from '@kit.BasicServicesKit';
3936
3937@Entry
3938@Component
3939struct WebComponent {
3940  controller: webview.WebviewController = new webview.WebviewController();
3941
3942  build() {
3943    Column() {
3944      Button('slideScroll')
3945        .onClick(() => {
3946          try {
3947            this.controller.slideScroll(500, 500);
3948          } catch (error) {
3949            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
3950          }
3951        })
3952      Web({ src: $rawfile('index.html'), controller: this.controller })
3953    }
3954  }
3955}
3956```
3957
3958加载的html文件。
3959```html
3960<!--index.html-->
3961<!DOCTYPE html>
3962<html>
3963<head>
3964    <title>Demo</title>
3965    <style>
3966        body {
3967            width:3000px;
3968            height:3000px;
3969            padding-right:170px;
3970            padding-left:170px;
3971            border:5px solid blueviolet
3972        }
3973    </style>
3974</head>
3975<body>
3976Scroll Test
3977</body>
3978</html>
3979```
3980
3981### getOriginalUrl
3982
3983getOriginalUrl(): string
3984
3985获取当前页面的原始url地址。
3986风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
3987
3988**系统能力:** SystemCapability.Web.Webview.Core
3989
3990**返回值:**
3991
3992| 类型   | 说明                    |
3993| ------ | ----------------------- |
3994| string | 当前页面的原始url地址。 |
3995
3996**错误码:**
3997
3998以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
3999
4000| 错误码ID | 错误信息                                                     |
4001| -------- | ------------------------------------------------------------ |
4002| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4003
4004**示例:**
4005
4006```ts
4007// xxx.ets
4008import { webview } from '@kit.ArkWeb';
4009import { BusinessError } from '@kit.BasicServicesKit';
4010
4011@Entry
4012@Component
4013struct WebComponent {
4014  controller: webview.WebviewController = new webview.WebviewController();
4015
4016  build() {
4017    Column() {
4018      Button('getOrgUrl')
4019        .onClick(() => {
4020          try {
4021            let url = this.controller.getOriginalUrl();
4022            console.log("original url: " + url);
4023          } catch (error) {
4024            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4025          }
4026        })
4027      Web({ src: 'www.example.com', controller: this.controller })
4028    }
4029  }
4030}
4031```
4032
4033### getFavicon
4034
4035getFavicon(): image.PixelMap
4036
4037获取页面的favicon图标。
4038
4039**系统能力:** SystemCapability.Web.Webview.Core
4040
4041**返回值:**
4042
4043| 类型                                   | 说明                            |
4044| -------------------------------------- | ------------------------------- |
4045| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 |
4046
4047**错误码:**
4048
4049以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4050
4051| 错误码ID | 错误信息                                                     |
4052| -------- | ------------------------------------------------------------ |
4053| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4054
4055**示例:**
4056
4057```ts
4058// xxx.ets
4059import { webview } from '@kit.ArkWeb';
4060import { BusinessError } from '@kit.BasicServicesKit';
4061import { image } from '@kit.ImageKit';
4062
4063@Entry
4064@Component
4065struct WebComponent {
4066  controller: webview.WebviewController = new webview.WebviewController();
4067  @State pixelmap: image.PixelMap | undefined = undefined;
4068
4069  build() {
4070    Column() {
4071      Button('getFavicon')
4072        .onClick(() => {
4073          try {
4074            this.pixelmap = this.controller.getFavicon();
4075          } catch (error) {
4076            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4077          }
4078        })
4079      Web({ src: 'www.example.com', controller: this.controller })
4080    }
4081  }
4082}
4083```
4084
4085### setNetworkAvailable
4086
4087setNetworkAvailable(enable: boolean): void
4088
4089设置JavaScript中的window.navigator.onLine属性。
4090
4091**系统能力:** SystemCapability.Web.Webview.Core
4092
4093**参数:**
4094
4095| 参数名 | 类型    | 必填 | 说明                              |
4096| ------ | ------- | ---- | --------------------------------- |
4097| enable | boolean | 是   | 是否使能window.navigator.onLine。 |
4098
4099**错误码:**
4100
4101以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4102
4103| 错误码ID | 错误信息                                                     |
4104| -------- | ------------------------------------------------------------ |
4105| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4106| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4107
4108**示例:**
4109
4110```ts
4111// xxx.ets
4112import { webview } from '@kit.ArkWeb';
4113import { BusinessError } from '@kit.BasicServicesKit';
4114
4115@Entry
4116@Component
4117struct WebComponent {
4118  controller: webview.WebviewController = new webview.WebviewController();
4119
4120  build() {
4121    Column() {
4122      Button('setNetworkAvailable')
4123        .onClick(() => {
4124          try {
4125            this.controller.setNetworkAvailable(true);
4126          } catch (error) {
4127            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4128          }
4129        })
4130      Web({ src: $rawfile('index.html'), controller: this.controller })
4131    }
4132  }
4133}
4134```
4135
4136加载的html文件。
4137```html
4138<!-- index.html -->
4139<!DOCTYPE html>
4140<html>
4141<body>
4142<h1>online 属性</h1>
4143<p id="demo"></p>
4144<button onclick="func()">click</button>
4145<script>
4146    let online = navigator.onLine;
4147    document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4148
4149    function func(){
4150      var online = navigator.onLine;
4151      document.getElementById("demo").innerHTML = "浏览器在线:" + online;
4152    }
4153</script>
4154</body>
4155</html>
4156```
4157
4158### hasImage
4159
4160hasImage(callback: AsyncCallback\<boolean>): void
4161
4162通过Callback方式异步查找当前页面是否存在图像。
4163
4164**系统能力:** SystemCapability.Web.Webview.Core
4165
4166**参数:**
4167
4168| 参数名   | 类型                    | 必填 | 说明                       |
4169| -------- | ----------------------- | ---- | -------------------------- |
4170| callback | AsyncCallback\<boolean> | 是   | 返回查找页面是否存在图像。 |
4171
4172**错误码:**
4173
4174以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4175
4176| 错误码ID | 错误信息                                                     |
4177| -------- | ------------------------------------------------------------ |
4178| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4179| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4180
4181**示例:**
4182
4183```ts
4184// xxx.ets
4185import { webview } from '@kit.ArkWeb';
4186import { BusinessError } from '@kit.BasicServicesKit';
4187
4188@Entry
4189@Component
4190struct WebComponent {
4191  controller: webview.WebviewController = new webview.WebviewController();
4192
4193  build() {
4194    Column() {
4195      Button('hasImageCb')
4196        .onClick(() => {
4197          try {
4198            this.controller.hasImage((error, data) => {
4199              if (error) {
4200                console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4201                return;
4202              }
4203              console.info("hasImage: " + data);
4204            });
4205          } catch (error) {
4206            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4207          }
4208        })
4209      Web({ src: 'www.example.com', controller: this.controller })
4210    }
4211  }
4212}
4213```
4214
4215### hasImage
4216
4217hasImage(): Promise\<boolean>
4218
4219通过Promise方式异步查找当前页面是否存在图像。
4220
4221**系统能力:** SystemCapability.Web.Webview.Core
4222
4223**返回值:**
4224
4225| 类型              | 说明                                    |
4226| ----------------- | --------------------------------------- |
4227| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 |
4228
4229**错误码:**
4230
4231以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4232
4233| 错误码ID | 错误信息                                                     |
4234| -------- | ------------------------------------------------------------ |
4235| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4236| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
4237
4238**示例:**
4239
4240```ts
4241// xxx.ets
4242import { webview } from '@kit.ArkWeb';
4243import { BusinessError } from '@kit.BasicServicesKit';
4244
4245@Entry
4246@Component
4247struct WebComponent {
4248  controller: webview.WebviewController = new webview.WebviewController();
4249
4250  build() {
4251    Column() {
4252      Button('hasImagePm')
4253        .onClick(() => {
4254          try {
4255            this.controller.hasImage().then((data) => {
4256              console.info('hasImage: ' + data);
4257            }).catch((error: BusinessError) => {
4258              console.error("error: " + error);
4259            })
4260          } catch (error) {
4261            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4262          }
4263        })
4264      Web({ src: 'www.example.com', controller: this.controller })
4265    }
4266  }
4267}
4268```
4269
4270### removeCache
4271
4272removeCache(clearRom: boolean): void
4273
4274清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。
4275
4276**系统能力:** SystemCapability.Web.Webview.Core
4277
4278**参数:**
4279
4280| 参数名   | 类型    | 必填 | 说明                                                     |
4281| -------- | ------- | ---- | -------------------------------------------------------- |
4282| clearRom | boolean | 是   | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 |
4283
4284**错误码:**
4285
4286以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4287
4288| 错误码ID | 错误信息                                                     |
4289| -------- | ------------------------------------------------------------ |
4290| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4291| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4292
4293**示例:**
4294
4295```ts
4296// xxx.ets
4297import { webview } from '@kit.ArkWeb';
4298import { BusinessError } from '@kit.BasicServicesKit';
4299
4300@Entry
4301@Component
4302struct WebComponent {
4303  controller: webview.WebviewController = new webview.WebviewController();
4304
4305  build() {
4306    Column() {
4307      Button('removeCache')
4308        .onClick(() => {
4309          try {
4310            this.controller.removeCache(false);
4311          } catch (error) {
4312            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4313          }
4314        })
4315      Web({ src: 'www.example.com', controller: this.controller })
4316    }
4317  }
4318}
4319```
4320
4321### pageUp
4322
4323pageUp(top: boolean): void
4324
4325将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。
4326
4327**系统能力:** SystemCapability.Web.Webview.Core
4328
4329**参数:**
4330
4331| 参数名 | 类型    | 必填 | 说明                                                         |
4332| ------ | ------- | ---- | ------------------------------------------------------------ |
4333| top    | boolean | 是   | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 |
4334
4335**错误码:**
4336
4337以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4338
4339| 错误码ID | 错误信息                                                     |
4340| -------- | ------------------------------------------------------------ |
4341| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4342| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4343
4344**示例:**
4345
4346```ts
4347// xxx.ets
4348import { webview } from '@kit.ArkWeb';
4349import { BusinessError } from '@kit.BasicServicesKit';
4350
4351@Entry
4352@Component
4353struct WebComponent {
4354  controller: webview.WebviewController = new webview.WebviewController();
4355
4356  build() {
4357    Column() {
4358      Button('pageUp')
4359        .onClick(() => {
4360          try {
4361            this.controller.pageUp(false);
4362          } catch (error) {
4363            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4364          }
4365        })
4366      Web({ src: 'www.example.com', controller: this.controller })
4367    }
4368  }
4369}
4370```
4371
4372### pageDown
4373
4374pageDown(bottom: boolean): void
4375
4376将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。
4377
4378**系统能力:** SystemCapability.Web.Webview.Core
4379
4380**参数:**
4381
4382| 参数名 | 类型    | 必填 | 说明                                                         |
4383| ------ | ------- | ---- | ------------------------------------------------------------ |
4384| bottom | boolean | 是   | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 |
4385
4386**错误码:**
4387
4388以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4389
4390| 错误码ID | 错误信息                                                     |
4391| -------- | ------------------------------------------------------------ |
4392| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4393| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
4394
4395**示例:**
4396
4397```ts
4398// xxx.ets
4399import { webview } from '@kit.ArkWeb';
4400import { BusinessError } from '@kit.BasicServicesKit';
4401
4402@Entry
4403@Component
4404struct WebComponent {
4405  controller: webview.WebviewController = new webview.WebviewController();
4406
4407  build() {
4408    Column() {
4409      Button('pageDown')
4410        .onClick(() => {
4411          try {
4412            this.controller.pageDown(false);
4413          } catch (error) {
4414            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4415          }
4416        })
4417      Web({ src: 'www.example.com', controller: this.controller })
4418    }
4419  }
4420}
4421```
4422
4423### getBackForwardEntries
4424
4425getBackForwardEntries(): BackForwardList
4426
4427获取当前Webview的历史信息列表。
4428
4429**系统能力:** SystemCapability.Web.Webview.Core
4430
4431**返回值:**
4432
4433| 类型                                | 说明                        |
4434| ----------------------------------- | --------------------------- |
4435| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 |
4436
4437**错误码:**
4438
4439以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4440
4441| 错误码ID | 错误信息                                                     |
4442| -------- | ------------------------------------------------------------ |
4443| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4444
4445**示例:**
4446
4447```ts
4448// xxx.ets
4449import { webview } from '@kit.ArkWeb';
4450import { BusinessError } from '@kit.BasicServicesKit';
4451
4452@Entry
4453@Component
4454struct WebComponent {
4455  controller: webview.WebviewController = new webview.WebviewController();
4456
4457  build() {
4458    Column() {
4459      Button('getBackForwardEntries')
4460        .onClick(() => {
4461          try {
4462            let list = this.controller.getBackForwardEntries()
4463          } catch (error) {
4464            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4465          }
4466        })
4467      Web({ src: 'www.example.com', controller: this.controller })
4468    }
4469  }
4470}
4471```
4472
4473### serializeWebState
4474
4475serializeWebState(): Uint8Array
4476
4477将当前Webview的页面状态历史记录信息序列化。
4478
4479**系统能力:** SystemCapability.Web.Webview.Core
4480
4481**返回值:**
4482
4483| 类型       | 说明                                          |
4484| ---------- | --------------------------------------------- |
4485| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 |
4486
4487**错误码:**
4488
4489以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4490
4491| 错误码ID | 错误信息                                                     |
4492| -------- | ------------------------------------------------------------ |
4493| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4494
4495**示例:**
4496
44971.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4498```ts
4499// xxx.ets
4500import { webview } from '@kit.ArkWeb';
4501import { BusinessError } from '@kit.BasicServicesKit';
4502import { fileIo } from '@kit.CoreFileKit';
4503
4504@Entry
4505@Component
4506struct WebComponent {
4507  controller: webview.WebviewController = new webview.WebviewController();
4508
4509  build() {
4510    Column() {
4511      Button('serializeWebState')
4512        .onClick(() => {
4513          try {
4514            let state = this.controller.serializeWebState();
4515            let path:string | undefined = AppStorage.get("cacheDir");
4516            if (path) {
4517              path += '/WebState';
4518              // 以同步方法打开文件。
4519              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
4520              fileIo.writeSync(file.fd, state.buffer);
4521              fileIo.closeSync(file.fd);
4522            }
4523          } catch (error) {
4524            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4525          }
4526        })
4527      Web({ src: 'www.example.com', controller: this.controller })
4528    }
4529  }
4530}
4531```
4532
45332.修改EntryAbility.ets4534获取应用缓存文件路径。
4535```ts
4536// xxx.ets
4537import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4538
4539export default class EntryAbility extends UIAbility {
4540    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4541        // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4542        AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4543    }
4544}
4545```
4546
4547### restoreWebState
4548
4549restoreWebState(state: Uint8Array): void
4550
4551当前Webview从序列化数据中恢复页面状态历史记录。
4552
4553**系统能力:** SystemCapability.Web.Webview.Core
4554
4555**参数:**
4556
4557| 参数名 | 类型       | 必填 | 说明                         |
4558| ------ | ---------- | ---- | ---------------------------- |
4559| state  | Uint8Array | 是   | 页面状态历史记录序列化数据。 |
4560
4561**错误码:**
4562
4563以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4564
4565| 错误码ID | 错误信息                                                     |
4566| -------- | ------------------------------------------------------------ |
4567| 17100001 | Init error. The WebviewController must be associated with a Web component. |
4568| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4569
4570**示例:**
4571
45721.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。
4573```ts
4574// xxx.ets
4575import { webview } from '@kit.ArkWeb';
4576import { BusinessError } from '@kit.BasicServicesKit';
4577import { fileIo } from '@kit.CoreFileKit';
4578
4579@Entry
4580@Component
4581struct WebComponent {
4582  controller: webview.WebviewController = new webview.WebviewController();
4583
4584  build() {
4585    Column() {
4586      Button('RestoreWebState')
4587        .onClick(() => {
4588          try {
4589            let path: string | undefined = AppStorage.get("cacheDir");
4590            if (path) {
4591              path += '/WebState';
4592              // 以同步方法打开文件。
4593              let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE);
4594              let stat = fileIo.statSync(path);
4595              let size = stat.size;
4596              let buf = new ArrayBuffer(size);
4597              fileIo.read(file.fd, buf, (err, readLen) => {
4598                if (err) {
4599                  console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
4600                } else {
4601                  console.info("read file data succeed");
4602                  this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
4603                  fileIo.closeSync(file);
4604                }
4605              });
4606            }
4607          } catch (error) {
4608            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4609          }
4610        })
4611      Web({ src: 'www.example.com', controller: this.controller })
4612    }
4613  }
4614}
4615```
4616
46172.修改EntryAbility.ets4618获取应用缓存文件路径。
4619```ts
4620// xxx.ets
4621import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
4622
4623export default class EntryAbility extends UIAbility {
4624  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
4625    // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。
4626    AppStorage.setOrCreate("cacheDir", this.context.cacheDir);
4627  }
4628}
4629```
4630
4631### customizeSchemes
4632
4633static customizeSchemes(schemes: Array\<WebCustomScheme\>): void
4634
4635对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。
4636
4637**系统能力:** SystemCapability.Web.Webview.Core
4638
4639**参数:**
4640
4641| 参数名   | 类型    | 必填 | 说明                      |
4642| -------- | ------- | ---- | -------------------------------------- |
4643| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是   | 自定义协议配置,最多支持同时配置10个自定义协议。 |
4644
4645**错误码:**
4646
4647以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4648
4649| 错误码ID | 错误信息                                                     |
4650| -------- | ------------------------------------------------------------ |
4651|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
4652| 17100020 | Failed to register custom schemes. |
4653
4654**示例:**
4655
4656```ts
4657// xxx.ets
4658import { webview } from '@kit.ArkWeb';
4659import { BusinessError } from '@kit.BasicServicesKit';
4660
4661@Entry
4662@Component
4663struct WebComponent {
4664  controller: webview.WebviewController = new webview.WebviewController();
4665  responseWeb: WebResourceResponse = new WebResourceResponse();
4666  scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true };
4667  scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true };
4668  scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true };
4669
4670  aboutToAppear(): void {
4671    try {
4672      webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]);
4673    } catch (error) {
4674      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
4675    }
4676  }
4677
4678  build() {
4679    Column() {
4680      Web({ src: 'www.example.com', controller: this.controller })
4681        .onInterceptRequest((event) => {
4682          if (event) {
4683            console.log('url:' + event.request.getRequestUrl());
4684          }
4685          return this.responseWeb;
4686        })
4687    }
4688  }
4689}
4690```
4691
4692### getCertificate<sup>10+</sup>
4693
4694getCertificate(): Promise<Array<cert.X509Cert>>
4695
4696获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。
4697
4698**系统能力:** SystemCapability.Web.Webview.Core
4699
4700**返回值:**
4701
4702| 类型       | 说明                                          |
4703| ---------- | --------------------------------------------- |
4704| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 |
4705
4706**错误码:**
4707
4708以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4709
4710| 错误码ID | 错误信息                                                     |
4711| -------- | ------------------------------------------------------------ |
4712| 17100001 | Init error. The WebviewController must be associated with a web component. |
4713
4714**示例:**
4715
4716```ts
4717// xxx.ets
4718import { webview } from '@kit.ArkWeb';
4719import { BusinessError } from '@kit.BasicServicesKit';
4720import { cert } from '@kit.DeviceCertificateKit';
4721
4722function Uint8ArrayToString(dataArray: Uint8Array) {
4723  let dataString = '';
4724  for (let i = 0; i < dataArray.length; i++) {
4725    dataString += String.fromCharCode(dataArray[i]);
4726  }
4727  return dataString;
4728}
4729
4730function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4731  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4732  for (let i = 0; i < x509CertArray.length; i++) {
4733    res += ', index = ' + i + ', issuer name = '
4734      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4735      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4736      + x509CertArray[i].getNotBeforeTime()
4737      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4738  }
4739  return res;
4740}
4741
4742@Entry
4743@Component
4744struct Index {
4745  // outputStr在UI界面显示调试信息
4746  @State outputStr: string = '';
4747  webviewCtl: webview.WebviewController = new webview.WebviewController();
4748
4749  build() {
4750    Row() {
4751      Column() {
4752        List({ space: 20, initialIndex: 0 }) {
4753          ListItem() {
4754            Button() {
4755              Text('load bad ssl')
4756                .fontSize(10)
4757                .fontWeight(FontWeight.Bold)
4758            }
4759            .type(ButtonType.Capsule)
4760            .onClick(() => {
4761              // 加载一个过期的证书网站,查看获取到的证书信息
4762              this.webviewCtl.loadUrl('https://expired.badssl.com');
4763            })
4764            .height(50)
4765          }
4766
4767          ListItem() {
4768            Button() {
4769              Text('load example')
4770                .fontSize(10)
4771                .fontWeight(FontWeight.Bold)
4772            }
4773            .type(ButtonType.Capsule)
4774            .onClick(() => {
4775              // 加载一个https网站,查看网站的证书信息
4776              this.webviewCtl.loadUrl('https://www.example.com');
4777            })
4778            .height(50)
4779          }
4780
4781          ListItem() {
4782            Button() {
4783              Text('getCertificate Promise')
4784                .fontSize(10)
4785                .fontWeight(FontWeight.Bold)
4786            }
4787            .type(ButtonType.Capsule)
4788            .onClick(() => {
4789              try {
4790                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4791                  this.outputStr = ParseX509CertInfo(x509CertArray);
4792                })
4793              } catch (error) {
4794                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4795              }
4796            })
4797            .height(50)
4798          }
4799
4800          ListItem() {
4801            Button() {
4802              Text('getCertificate AsyncCallback')
4803                .fontSize(10)
4804                .fontWeight(FontWeight.Bold)
4805            }
4806            .type(ButtonType.Capsule)
4807            .onClick(() => {
4808              try {
4809                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
4810                  if (error) {
4811                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4812                  } else {
4813                    this.outputStr = ParseX509CertInfo(x509CertArray);
4814                  }
4815                })
4816              } catch (error) {
4817                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4818              }
4819            })
4820            .height(50)
4821          }
4822        }
4823        .listDirection(Axis.Horizontal)
4824        .height('10%')
4825
4826        Text(this.outputStr)
4827          .width('100%')
4828          .fontSize(10)
4829
4830        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4831          .fileAccess(true)
4832          .javaScriptAccess(true)
4833          .domStorageAccess(true)
4834          .onlineImageAccess(true)
4835          .onPageEnd((e) => {
4836            if (e) {
4837              this.outputStr = 'onPageEnd : url = ' + e.url;
4838            }
4839          })
4840          .onSslErrorEventReceive((e) => {
4841            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
4842            e.handler.handleConfirm();
4843          })
4844          .width('100%')
4845          .height('70%')
4846      }
4847      .height('100%')
4848    }
4849  }
4850}
4851```
4852
4853### getCertificate<sup>10+</sup>
4854
4855getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void
4856
4857获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。
4858
4859**系统能力:** SystemCapability.Web.Webview.Core
4860
4861**参数:**
4862
4863| 参数名   | 类型                         | 必填 | 说明                                     |
4864| -------- | ---------------------------- | ---- | ---------------------------------------- |
4865| callback | AsyncCallback<Array<cert.X509Cert>> | 是   | 通过AsyncCallback异步返回当前网站的X509格式证书。 |
4866
4867**错误码:**
4868
4869以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
4870
4871| 错误码ID | 错误信息                                                     |
4872| -------- | ------------------------------------------------------------ |
4873| 17100001 | Init error. The WebviewController must be associated with a web component. |
4874| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4875
4876**示例:**
4877
4878```ts
4879// xxx.ets
4880import { webview } from '@kit.ArkWeb';
4881import { BusinessError } from '@kit.BasicServicesKit';
4882import { cert } from '@kit.DeviceCertificateKit';
4883
4884function Uint8ArrayToString(dataArray: Uint8Array) {
4885  let dataString = '';
4886  for (let i = 0; i < dataArray.length; i++) {
4887    dataString += String.fromCharCode(dataArray[i]);
4888  }
4889  return dataString;
4890}
4891
4892function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) {
4893  let res: string = 'getCertificate success: len = ' + x509CertArray.length;
4894  for (let i = 0; i < x509CertArray.length; i++) {
4895    res += ', index = ' + i + ', issuer name = '
4896      + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = '
4897      + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = '
4898      + x509CertArray[i].getNotBeforeTime()
4899      + ', valid end = ' + x509CertArray[i].getNotAfterTime();
4900  }
4901  return res;
4902}
4903
4904@Entry
4905@Component
4906struct Index {
4907  // outputStr在UI界面显示调试信息
4908  @State outputStr: string = '';
4909  webviewCtl: webview.WebviewController = new webview.WebviewController();
4910
4911  build() {
4912    Row() {
4913      Column() {
4914        List({ space: 20, initialIndex: 0 }) {
4915          ListItem() {
4916            Button() {
4917              Text('load bad ssl')
4918                .fontSize(10)
4919                .fontWeight(FontWeight.Bold)
4920            }
4921            .type(ButtonType.Capsule)
4922            .onClick(() => {
4923              // 加载一个过期的证书网站,查看获取到的证书信息
4924              this.webviewCtl.loadUrl('https://expired.badssl.com');
4925            })
4926            .height(50)
4927          }
4928
4929          ListItem() {
4930            Button() {
4931              Text('load example')
4932                .fontSize(10)
4933                .fontWeight(FontWeight.Bold)
4934            }
4935            .type(ButtonType.Capsule)
4936            .onClick(() => {
4937              // 加载一个https网站,查看网站的证书信息
4938              this.webviewCtl.loadUrl('https://www.example.com');
4939            })
4940            .height(50)
4941          }
4942
4943          ListItem() {
4944            Button() {
4945              Text('getCertificate Promise')
4946                .fontSize(10)
4947                .fontWeight(FontWeight.Bold)
4948            }
4949            .type(ButtonType.Capsule)
4950            .onClick(() => {
4951              try {
4952                this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => {
4953                  this.outputStr = ParseX509CertInfo(x509CertArray);
4954                })
4955              } catch (error) {
4956                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4957              }
4958            })
4959            .height(50)
4960          }
4961
4962          ListItem() {
4963            Button() {
4964              Text('getCertificate AsyncCallback')
4965                .fontSize(10)
4966                .fontWeight(FontWeight.Bold)
4967            }
4968            .type(ButtonType.Capsule)
4969            .onClick(() => {
4970              try {
4971                this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => {
4972                  if (error) {
4973                    this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message;
4974                  } else {
4975                    this.outputStr = ParseX509CertInfo(x509CertArray);
4976                  }
4977                })
4978              } catch (error) {
4979                this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message;
4980              }
4981            })
4982            .height(50)
4983          }
4984        }
4985        .listDirection(Axis.Horizontal)
4986        .height('10%')
4987
4988        Text(this.outputStr)
4989          .width('100%')
4990          .fontSize(10)
4991
4992        Web({ src: 'https://www.example.com', controller: this.webviewCtl })
4993          .fileAccess(true)
4994          .javaScriptAccess(true)
4995          .domStorageAccess(true)
4996          .onlineImageAccess(true)
4997          .onPageEnd((e) => {
4998            if (e) {
4999              this.outputStr = 'onPageEnd : url = ' + e.url;
5000            }
5001          })
5002          .onSslErrorEventReceive((e) => {
5003            // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com
5004            e.handler.handleConfirm();
5005          })
5006          .width('100%')
5007          .height('70%')
5008      }
5009      .height('100%')
5010    }
5011  }
5012}
5013```
5014
5015### setAudioMuted<sup>10+</sup>
5016
5017setAudioMuted(mute: boolean): void
5018
5019设置网页静音。
5020
5021**系统能力:** SystemCapability.Web.Webview.Core
5022
5023**参数:**
5024
5025| 参数名   | 类型    | 必填 | 说明                      |
5026| -------- | ------- | ---- | -------------------------------------- |
5027| mute | boolean | 是   | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 |
5028
5029**错误码:**
5030
5031以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5032
5033| 错误码ID | 错误信息                                                     |
5034| -------- | ------------------------------------------------------------ |
5035| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5036| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5037
5038**示例:**
5039
5040```ts
5041// xxx.ets
5042import { webview } from '@kit.ArkWeb';
5043
5044@Entry
5045@Component
5046struct WebComponent {
5047  controller: webview.WebviewController = new webview.WebviewController();
5048  @State muted: boolean = false;
5049
5050  build() {
5051    Column() {
5052      Button("Toggle Mute")
5053        .onClick(event => {
5054          if (event) {
5055            this.muted = !this.muted;
5056            this.controller.setAudioMuted(this.muted);
5057          }
5058        })
5059      Web({ src: 'www.example.com', controller: this.controller })
5060    }
5061  }
5062}
5063```
5064
5065### prefetchPage<sup>10+</sup>
5066
5067prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void
5068
5069在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。
5070
5071> **说明:**
5072>
5073> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。
5074
5075**系统能力:** SystemCapability.Web.Webview.Core
5076
5077**参数:**
5078
5079| 参数名             | 类型                             | 必填  | 说明                      |
5080| ------------------| --------------------------------| ---- | ------------- |
5081| url               | string                          | 是    | 预加载的url。|
5082| additionalHeaders | Array\<[WebHeader](#webheader)> | 否    | url的附加HTTP请求头。|
5083
5084**错误码:**
5085
5086以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5087
5088| 错误码ID  | 错误信息                                                      |
5089| -------- | ------------------------------------------------------------ |
5090| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5091| 17100002 | Invalid url.                                                 |
5092
5093**示例:**
5094
5095```ts
5096// xxx.ets
5097import { webview } from '@kit.ArkWeb';
5098import { BusinessError } from '@kit.BasicServicesKit';
5099
5100@Entry
5101@Component
5102struct WebComponent {
5103  controller: webview.WebviewController = new webview.WebviewController();
5104
5105  build() {
5106    Column() {
5107      Button('prefetchPopularPage')
5108        .onClick(() => {
5109          try {
5110            // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。
5111            this.controller.prefetchPage('https://www.example.com');
5112          } catch (error) {
5113            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5114          }
5115        })
5116      // 需要将'www.example1.com'替换成一个真实的网站地址。
5117      Web({ src: 'www.example1.com', controller: this.controller })
5118    }
5119  }
5120}
5121```
5122
5123### prefetchResource<sup>12+</sup>
5124
5125static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void
5126
5127根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。
5128
5129**系统能力:**  SystemCapability.Web.Webview.Core
5130
5131**参数:**
5132
5133| 参数名             | 类型                             |  必填  | 说明                                                              |
5134| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ |
5135| request           | [RequestInfo](#requestinfo12)   | 是   | 预获取请求的信息。                                                      |
5136| additionalHeaders | Array\<[WebHeader](#webheader)> | 否   | 预获取请求的附加HTTP请求头。                                             |
5137| cacheKey          | string                          | 否   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5138| cacheValidTime    | number                          | 否   | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。          |
5139
5140**错误码:**
5141
5142以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5143
5144| 错误码ID  | 错误信息                                                      |
5145| -------- | ------------------------------------------------------------ |
5146| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
5147| 17100002 | Invalid url.                                                 |
5148
5149**示例:**
5150
5151```ts
5152// xxx.ets
5153import { webview } from '@kit.ArkWeb';
5154import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5155
5156export default class EntryAbility extends UIAbility {
5157  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5158    console.log("EntryAbility onCreate");
5159    webview.WebviewController.initializeWebEngine();
5160    // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5161    webview.WebviewController.prefetchResource(
5162      {url:"https://www.example1.com/post?e=f&g=h",
5163        method:"POST",
5164        formData:"a=x&b=y",},
5165      [{headerKey:"c",
5166        headerValue:"z",},],
5167      "KeyX", 500);
5168    AppStorage.setOrCreate("abilityWant", want);
5169    console.log("EntryAbility onCreate done");
5170  }
5171}
5172```
5173
5174### clearPrefetchedResource<sup>12+</sup>
5175
5176static clearPrefetchedResource(cacheKeyList: Array\<string>): void
5177
5178根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。
5179
5180**系统能力:**  SystemCapability.Web.Webview.Core
5181
5182**参数:**
5183
5184| 参数名             | 类型        | 必填  | 说明                                                                       |
5185| ------------------| ----------- | ---- | ------------------------------------------------------------------------- |
5186| cacheKeyList      | Array\<string>      | 是   | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 |
5187
5188**示例:**
5189
5190```ts
5191// xxx.ets
5192import { webview } from '@kit.ArkWeb';
5193
5194@Entry
5195@Component
5196struct WebComponent {
5197  controller: webview.WebviewController = new webview.WebviewController();
5198  build() {
5199    Column() {
5200      Web({ src: "https://www.example.com/", controller: this.controller})
5201        .onAppear(() => {
5202          // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。
5203          webview.WebviewController.prefetchResource(
5204            {url:"https://www.example1.com/post?e=f&g=h",
5205              method:"POST",
5206              formData:"a=x&b=y",},
5207            [{headerKey:"c",
5208              headerValue:"z",},],
5209            "KeyX", 500);
5210        })
5211        .onPageEnd(() => {
5212          // 清除后续不再使用的预获取缓存。
5213          webview.WebviewController.clearPrefetchedResource(["KeyX",]);
5214        })
5215    }
5216  }
5217}
5218```
5219
5220### prepareForPageLoad<sup>10+</sup>
5221
5222static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void
5223
5224预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。
5225
5226**系统能力:**  SystemCapability.Web.Webview.Core
5227
5228**参数:**
5229
5230| 参数名          | 类型    |  必填  | 说明                                            |
5231| ---------------| ------- | ---- | ------------- |
5232| url            | string  | 是   | 预连接的url。|
5233| preconnectable | boolean | 是   | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。|
5234| numSockets     | number  | 是   | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。|
5235
5236**错误码:**
5237
5238以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5239
5240| 错误码ID  | 错误信息                                                      |
5241| -------- | ------------------------------------------------------------ |
5242| 17100002 | Invalid url.                                                 |
5243| 171000013| The number of preconnect sockets is invalid.                                                 |
5244
5245**示例:**
5246
5247```ts
5248// xxx.ets
5249import { webview } from '@kit.ArkWeb';
5250import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5251
5252export default class EntryAbility extends UIAbility {
5253  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5254    console.log("EntryAbility onCreate");
5255    webview.WebviewController.initializeWebEngine();
5256    // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。
5257    webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2);
5258    AppStorage.setOrCreate("abilityWant", want);
5259    console.log("EntryAbility onCreate done");
5260  }
5261}
5262```
5263
5264### setCustomUserAgent<sup>10+</sup>
5265
5266setCustomUserAgent(userAgent: string): void
5267
5268设置自定义用户代理,会覆盖系统的用户代理。
5269
5270当Web组件src设置了url时,建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。
5271
5272当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。
5273
5274默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5275
5276> **说明:**
5277>
5278>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。
5279
5280**系统能力:**  SystemCapability.Web.Webview.Core
5281
5282**参数:**
5283
5284| 参数名          | 类型    |  必填  | 说明                                            |
5285| ---------------| ------- | ---- | ------------- |
5286| userAgent      | string  | 是   | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 |
5287
5288**错误码:**
5289
5290以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5291
5292| 错误码ID  | 错误信息                                                      |
5293| -------- | ------------------------------------------------------------ |
5294| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5295| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5296
5297**示例:**
5298
5299```ts
5300// xxx.ets
5301import { webview } from '@kit.ArkWeb';
5302import { BusinessError } from '@kit.BasicServicesKit';
5303
5304@Entry
5305@Component
5306struct WebComponent {
5307  controller: webview.WebviewController = new webview.WebviewController();
5308  @State customUserAgent: string = ' DemoApp';
5309
5310  build() {
5311    Column() {
5312      Web({ src: 'www.example.com', controller: this.controller })
5313      .onControllerAttached(() => {
5314        console.log("onControllerAttached");
5315        try {
5316          let userAgent = this.controller.getUserAgent() + this.customUserAgent;
5317          this.controller.setCustomUserAgent(userAgent);
5318        } catch (error) {
5319          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5320        }
5321      })
5322    }
5323  }
5324}
5325```
5326
5327### setDownloadDelegate<sup>11+</sup>
5328
5329setDownloadDelegate(delegate: WebDownloadDelegate): void
5330
5331为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。
5332
5333**系统能力:**  SystemCapability.Web.Webview.Core
5334
5335**参数:**
5336
5337| 参数名          | 类型    |  必填  | 说明                                            |
5338| ---------------| ------- | ---- | ------------- |
5339| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
5340
5341**错误码:**
5342
5343以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5344
5345| 错误码ID  | 错误信息                                                      |
5346| -------- | ------------------------------------------------------------ |
5347| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5348
5349**示例:**
5350
5351```ts
5352// xxx.ets
5353import { webview } from '@kit.ArkWeb';
5354import { BusinessError } from '@kit.BasicServicesKit';
5355
5356@Entry
5357@Component
5358struct WebComponent {
5359  controller: webview.WebviewController = new webview.WebviewController();
5360  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5361
5362  build() {
5363    Column() {
5364      Button('setDownloadDelegate')
5365        .onClick(() => {
5366          try {
5367            this.controller.setDownloadDelegate(this.delegate);
5368          } catch (error) {
5369            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5370          }
5371        })
5372      Web({ src: 'www.example.com', controller: this.controller })
5373    }
5374  }
5375}
5376```
5377
5378### startDownload<sup>11+</sup>
5379
5380startDownload(url: string): void
5381
5382使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。
5383
5384**系统能力:**  SystemCapability.Web.Webview.Core
5385
5386**参数:**
5387
5388| 参数名          | 类型    |  必填  | 说明                                            |
5389| ---------------| ------- | ---- | ------------- |
5390| url      | string  | 是   | 下载地址。 |
5391
5392**错误码:**
5393
5394以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5395
5396| 错误码ID  | 错误信息                                                      |
5397| -------- | ------------------------------------------------------------ |
5398| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5399| 17100002 | Invalid url. |
5400
5401**示例:**
5402
5403```ts
5404// xxx.ets
5405import { webview } from '@kit.ArkWeb';
5406import { BusinessError } from '@kit.BasicServicesKit';
5407
5408@Entry
5409@Component
5410struct WebComponent {
5411  controller: webview.WebviewController = new webview.WebviewController();
5412  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
5413
5414  build() {
5415    Column() {
5416      Button('setDownloadDelegate')
5417        .onClick(() => {
5418          try {
5419            this.controller.setDownloadDelegate(this.delegate);
5420          } catch (error) {
5421            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5422          }
5423        })
5424      Button('startDownload')
5425        .onClick(() => {
5426          try {
5427            this.controller.startDownload('https://www.example.com');
5428          } catch (error) {
5429            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5430          }
5431        })
5432      Web({ src: 'www.example.com', controller: this.controller })
5433    }
5434  }
5435}
5436```
5437
5438### getCustomUserAgent<sup>10+</sup>
5439
5440getCustomUserAgent(): string
5441
5442获取自定义用户代理。
5443
5444默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md)
5445
5446**系统能力:**  SystemCapability.Web.Webview.Core
5447
5448**返回值:**
5449
5450| 类型   | 说明                      |
5451| ------ | ------------------------- |
5452| string | 用户自定义代理信息。 |
5453
5454**错误码:**
5455
5456以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5457
5458| 错误码ID  | 错误信息                                                      |
5459| -------- | ------------------------------------------------------------ |
5460| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5461
5462**示例:**
5463
5464```ts
5465// xxx.ets
5466import { webview } from '@kit.ArkWeb';
5467import { BusinessError } from '@kit.BasicServicesKit';
5468
5469@Entry
5470@Component
5471struct WebComponent {
5472  controller: webview.WebviewController = new webview.WebviewController();
5473  @State userAgent: string = '';
5474
5475  build() {
5476    Column() {
5477      Button('getCustomUserAgent')
5478        .onClick(() => {
5479          try {
5480            this.userAgent = this.controller.getCustomUserAgent();
5481            console.log("userAgent: " + this.userAgent);
5482          } catch (error) {
5483            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5484          }
5485        })
5486      Web({ src: 'www.example.com', controller: this.controller })
5487    }
5488  }
5489}
5490```
5491
5492### setConnectionTimeout<sup>11+</sup>
5493
5494static setConnectionTimeout(timeout: number): void
5495
5496设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。
5497
5498**系统能力:** SystemCapability.Web.Webview.Core
5499
5500**参数:**
5501
5502| 参数名          | 类型    |  必填  | 说明                                            |
5503| ---------------| ------- | ---- | ------------- |
5504| timeout        | number  | 是   | socket连接超时时间,以秒为单位,socket必须为大于0的整数。 |
5505
5506**错误码:**
5507
5508以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5509
5510| 错误码ID | 错误信息                                                     |
5511| -------- | ------------------------------------------------------------ |
5512| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
5513
5514**示例:**
5515
5516```ts
5517// xxx.ets
5518import { webview } from '@kit.ArkWeb';
5519import { BusinessError } from '@kit.BasicServicesKit';
5520
5521@Entry
5522@Component
5523struct WebComponent {
5524  controller: webview.WebviewController = new webview.WebviewController();
5525
5526  build() {
5527    Column() {
5528      Button('setConnectionTimeout')
5529        .onClick(() => {
5530          try {
5531            webview.WebviewController.setConnectionTimeout(5);
5532            console.log("setConnectionTimeout: 5s");
5533          } catch (error) {
5534            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5535          }
5536        })
5537      Web({ src: 'www.example.com', controller: this.controller })
5538        .onErrorReceive((event) => {
5539          if (event) {
5540            console.log('getErrorInfo:' + event.error.getErrorInfo());
5541            console.log('getErrorCode:' + event.error.getErrorCode());
5542          }
5543        })
5544    }
5545  }
5546}
5547```
5548
5549### warmupServiceWorker<sup>12+</sup>
5550
5551static warmupServiceWorker(url: string): void
5552
5553预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。
5554
5555**系统能力:**  SystemCapability.Web.Webview.Core
5556
5557**参数:**
5558
5559| 参数名          | 类型    |  必填  | 说明                                            |
5560| ---------------| ------- | ---- | ------------- |
5561| url            | string  | 是   | 需要预热ServiceWorker的url。|
5562
5563**错误码:**
5564
5565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5566
5567| 错误码ID  | 错误信息                                                      |
5568| -------- | ------------------------------------------------------------ |
5569| 17100002 | Invalid url.                                                 |
5570
5571**示例:**
5572
5573```ts
5574// xxx.ts
5575import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5576import { hilog } from '@kit.PerformanceAnalysisKit';
5577import { window } from '@kit.ArkUI';
5578import { webview } from '@kit.ArkWeb';
5579
5580export default class EntryAbility extends UIAbility {
5581    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
5582        console.log("EntryAbility onCreate");
5583        webview.WebviewController.warmupServiceWorker("https://www.example.com");
5584        AppStorage.setOrCreate("abilityWant", want);
5585    }
5586}
5587```
5588
5589### enableSafeBrowsing<sup>11+</sup>
5590
5591enableSafeBrowsing(enable: boolean): void
5592
5593<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。
5594本功能默认不生效,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)进行检测。
5595<!--RP1End-->
5596
5597**系统能力:** SystemCapability.Web.Webview.Core
5598
5599**参数:**
5600
5601| 参数名   | 类型    |  必填  | 说明                       |
5602| --------| ------- | ---- | ---------------------------|
5603|  enable | boolean | 是   | 是否启用检查网站安全风险的功能。 |
5604
5605**错误码:**
5606
5607以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5608
5609| 错误码ID | 错误信息                  |
5610| -------- | ----------------------- |
5611| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5612
5613**示例:**
5614
5615```ts
5616// xxx.ets
5617import { webview } from '@kit.ArkWeb';
5618import { BusinessError } from '@kit.BasicServicesKit';
5619
5620@Entry
5621@Component
5622struct WebComponent {
5623  controller: webview.WebviewController = new webview.WebviewController();
5624
5625  build() {
5626    Column() {
5627      Button('enableSafeBrowsing')
5628        .onClick(() => {
5629          try {
5630            this.controller.enableSafeBrowsing(true);
5631            console.log("enableSafeBrowsing: true");
5632          } catch (error) {
5633            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5634          }
5635        })
5636      Web({ src: 'www.example.com', controller: this.controller })
5637    }
5638  }
5639}
5640```
5641
5642### isSafeBrowsingEnabled<sup>11+</sup>
5643
5644isSafeBrowsingEnabled(): boolean
5645
5646获取当前网页是否启用了检查网站安全风险。
5647
5648**系统能力:** SystemCapability.Web.Webview.Core
5649
5650**返回值:**
5651
5652| 类型    | 说明                                     |
5653| ------- | --------------------------------------- |
5654| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。|
5655
5656**示例:**
5657
5658```ts
5659// xxx.ets
5660import { webview } from '@kit.ArkWeb';
5661
5662@Entry
5663@Component
5664struct WebComponent {
5665  controller: webview.WebviewController = new webview.WebviewController();
5666
5667  build() {
5668    Column() {
5669      Button('isSafeBrowsingEnabled')
5670        .onClick(() => {
5671          let result = this.controller.isSafeBrowsingEnabled();
5672          console.log("result: " + result);
5673        })
5674      Web({ src: 'www.example.com', controller: this.controller })
5675    }
5676  }
5677}
5678```
5679
5680### enableIntelligentTrackingPrevention<sup>12+</sup>
5681
5682enableIntelligentTrackingPrevention(enable: boolean): void
5683
5684启用智能防跟踪功能,默认该功能未启用。
5685
5686**系统能力:** SystemCapability.Web.Webview.Core
5687
5688**参数:**
5689
5690| 参数名   | 类型    |  必填  | 说明                       |
5691| --------| ------- | ---- | ---------------------------|
5692|  enable | boolean | 是   | 是否启用智能防跟踪功能。 |
5693
5694**错误码:**
5695
5696以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5697
5698| 错误码ID | 错误信息                  |
5699| -------- | ----------------------- |
5700| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5701|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5702
5703**示例:**
5704
5705```ts
5706// xxx.ets
5707import { webview } from '@kit.ArkWeb';
5708import { BusinessError } from '@kit.BasicServicesKit';
5709
5710@Entry
5711@Component
5712struct WebComponent {
5713  controller: webview.WebviewController = new webview.WebviewController();
5714
5715  build() {
5716    Column() {
5717      Button('enableIntelligentTrackingPrevention')
5718        .onClick(() => {
5719          try {
5720            this.controller.enableIntelligentTrackingPrevention(true);
5721            console.log("enableIntelligentTrackingPrevention: true");
5722          } catch (error) {
5723            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5724          }
5725        })
5726      Web({ src: 'www.example.com', controller: this.controller })
5727    }
5728  }
5729}
5730```
5731
5732### isIntelligentTrackingPreventionEnabled<sup>12+</sup>
5733
5734isIntelligentTrackingPreventionEnabled(): boolean
5735
5736获取当前Web是否启用了智能防跟踪功能。
5737
5738**系统能力:** SystemCapability.Web.Webview.Core
5739
5740**返回值:**
5741
5742| 类型    | 说明                                     |
5743| ------- | --------------------------------------- |
5744| boolean | 当前Web是否启用了智能防跟踪功能,默认为false。|
5745
5746**错误码:**
5747
5748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5749
5750| 错误码ID | 错误信息                  |
5751| -------- | ----------------------- |
5752| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5753
5754**示例:**
5755
5756```ts
5757// xxx.ets
5758import { webview } from '@kit.ArkWeb';
5759import { BusinessError } from '@kit.BasicServicesKit';
5760
5761@Entry
5762@Component
5763struct WebComponent {
5764  controller: webview.WebviewController = new webview.WebviewController();
5765
5766  build() {
5767    Column() {
5768      Button('isIntelligentTrackingPreventionEnabled')
5769        .onClick(() => {
5770          try {
5771            let result = this.controller.isIntelligentTrackingPreventionEnabled();
5772            console.log("result: " + result);
5773          } catch (error) {
5774            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5775          }
5776        })
5777      Web({ src: 'www.example.com', controller: this.controller })
5778    }
5779  }
5780}
5781```
5782
5783### addIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5784
5785static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5786
5787添加智能防跟踪功能绕过的域名列表。
5788
5789**系统能力:** SystemCapability.Web.Webview.Core
5790
5791**参数:**
5792
5793| 参数名       | 类型           | 必填  | 说明                      |
5794| ----------- | ------------- | ---- | ------------------------ |
5795| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5796
5797**错误码:**
5798
5799以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5800
5801| 错误码ID  | 错误信息                  |
5802| -------- | ------------------------ |
5803|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5804
5805**示例:**
5806
5807```ts
5808// xxx.ets
5809import { webview } from '@kit.ArkWeb';
5810import { BusinessError } from '@kit.BasicServicesKit';
5811
5812@Entry
5813@Component
5814struct WebComponent {
5815  controller: webview.WebviewController = new webview.WebviewController();
5816
5817  build() {
5818    Column() {
5819      Button('addIntelligentTrackingPreventionBypassingList')
5820        .onClick(() => {
5821          try {
5822            let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"];
5823            webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);
5824          } catch (error) {
5825            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5826          }
5827        })
5828      Web({ src: 'www.example.com', controller: this.controller })
5829    }
5830  }
5831}
5832```
5833
5834### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5835
5836static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void
5837
5838删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。
5839
5840**系统能力:** SystemCapability.Web.Webview.Core
5841
5842**参数:**
5843
5844| 参数名       | 类型           | 必填  | 说明                      |
5845| ----------- | ------------- | ---- | ------------------------ |
5846| hostList    | Array\<string> | 是   | 绕过智能防跟踪功能的域名列表。 |
5847
5848**错误码:**
5849
5850以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5851
5852| 错误码ID  | 错误信息                  |
5853| -------- | ------------------------ |
5854|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
5855
5856**示例:**
5857
5858```ts
5859// xxx.ets
5860import { webview } from '@kit.ArkWeb';
5861import { BusinessError } from '@kit.BasicServicesKit';
5862
5863@Entry
5864@Component
5865struct WebComponent {
5866  controller: webview.WebviewController = new webview.WebviewController();
5867
5868  build() {
5869    Column() {
5870      Button('removeIntelligentTrackingPreventionBypassingList')
5871        .onClick(() => {
5872          try {
5873            let hostList = ["www.test1.com", "www.test2.com"];
5874            webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);
5875          } catch (error) {
5876            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5877          }
5878        })
5879      Web({ src: 'www.example.com', controller: this.controller })
5880    }
5881  }
5882}
5883```
5884
5885### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup>
5886
5887static clearIntelligentTrackingPreventionBypassingList(): void
5888
5889删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。
5890
5891**系统能力:** SystemCapability.Web.Webview.Core
5892
5893**示例:**
5894
5895```ts
5896// xxx.ets
5897import { webview } from '@kit.ArkWeb';
5898
5899@Entry
5900@Component
5901struct WebComponent {
5902  controller: webview.WebviewController = new webview.WebviewController();
5903
5904  build() {
5905    Column() {
5906      Button('clearIntelligentTrackingPreventionBypassingList')
5907        .onClick(() => {
5908          webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();
5909      })
5910      Web({ src: 'www.example.com', controller: this.controller })
5911    }
5912  }
5913}
5914```
5915
5916### enableAdsBlock<sup>12+</sup>
5917
5918enableAdsBlock(enable: boolean): void
5919
5920启用广告过滤功能,默认该功能未启用。
5921
5922**系统能力:** SystemCapability.Web.Webview.Core
5923
5924**参数:**
5925
5926| 参数名   | 类型    |  必填  | 说明                       |
5927| --------| ------- | ---- | ---------------------------|
5928|  enable | boolean | 是   | 是否启用广告过滤功能。 |
5929
5930**错误码:**
5931
5932以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
5933
5934| 错误码ID | 错误信息                  |
5935| -------- | ----------------------- |
5936| 17100001 | Init error. The WebviewController must be associated with a Web component. |
5937|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
5938
5939**示例:**
5940
5941```ts
5942// xxx.ets
5943import { webview } from '@kit.ArkWeb';
5944import { BusinessError } from '@kit.BasicServicesKit';
5945
5946@Entry
5947@Component
5948struct WebComponent {
5949  controller: webview.WebviewController = new webview.WebviewController();
5950
5951  build() {
5952    Column() {
5953      Button('enableAdsBlock')
5954        .onClick(() => {
5955          try {
5956            this.controller.enableAdsBlock(true);
5957            console.log("enableAdsBlock: true")
5958          } catch (error) {
5959            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5960          }
5961        })
5962      Web({ src: 'www.example.com', controller: this.controller })
5963    }
5964  }
5965}
5966```
5967
5968### isAdsBlockEnabled<sup>12+</sup>
5969
5970isAdsBlockEnabled() : boolean
5971
5972查询广告过滤功能是否开启,默认该功能未启用。
5973
5974**系统能力:** SystemCapability.Web.Webview.Core
5975
5976**返回值:**
5977
5978| 类型                                                         | 说明                   |
5979| ------------------------------------------------------------ | ---------------------- |
5980| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 |
5981
5982**示例:**
5983
5984```ts
5985// xxx.ets
5986import { webview } from '@kit.ArkWeb';
5987import { BusinessError } from '@kit.BasicServicesKit';
5988
5989@Entry
5990@Component
5991struct WebComponent {
5992  controller: webview.WebviewController = new webview.WebviewController();
5993
5994  build() {
5995    Column() {
5996      Button('isAdsBlockEnabled')
5997        .onClick(() => {
5998          try {
5999            let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled();
6000            console.log("isAdsBlockEnabled:", isAdsBlockEnabled);
6001          } catch (error) {
6002            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6003          }
6004        })
6005      Web({ src: 'www.example.com', controller: this.controller })
6006    }
6007  }
6008}
6009```
6010
6011### isAdsBlockEnabledForCurPage<sup>12+</sup>
6012
6013isAdsBlockEnabledForCurPage() : boolean
6014
6015查询当前网页是否开启广告过滤功能。
6016当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。
6017
6018**系统能力:** SystemCapability.Web.Webview.Core
6019
6020**返回值:**
6021
6022| 类型                                                         | 说明                   |
6023| ------------------------------------------------------------ | ---------------------- |
6024| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 |
6025
6026**示例:**
6027
6028```ts
6029// xxx.ets
6030import { webview } from '@kit.ArkWeb';
6031import { BusinessError } from '@kit.BasicServicesKit';
6032
6033@Entry
6034@Component
6035struct WebComponent {
6036  controller: webview.WebviewController = new webview.WebviewController();
6037
6038  build() {
6039    Column() {
6040      Button('isAdsBlockEnabledForCurPage')
6041        .onClick(() => {
6042          try {
6043            let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage();
6044            console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage);
6045          } catch (error) {
6046            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6047          }
6048        })
6049      Web({ src: 'www.example.com', controller: this.controller })
6050    }
6051  }
6052}
6053```
6054
6055### setRenderProcessMode<sup>12+</sup>
6056
6057static setRenderProcessMode(mode: RenderProcessMode): void
6058
6059设置ArkWeb渲染子进程模式。
6060
6061**系统能力:** SystemCapability.Web.Webview.Core
6062
6063**参数:**
6064
6065| 参数名       | 类型           | 必填  | 说明                      |
6066| ----------- | ------------- | ---- | ------------------------ |
6067| mode        | [RenderProcessMode](#renderprocessmode12)| 是   | 渲染子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。|
6068
6069**错误码:**
6070
6071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6072
6073| 错误码ID  | 错误信息                  |
6074| -------- | ------------------------ |
6075|  401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6076
6077**示例:**
6078
6079```ts
6080// xxx.ets
6081import { webview } from '@kit.ArkWeb';
6082import { BusinessError } from '@kit.BasicServicesKit';
6083
6084@Entry
6085@Component
6086struct WebComponent {
6087  controller: webview.WebviewController = new webview.WebviewController();
6088
6089  build() {
6090    Column() {
6091      Button('setRenderProcessMode')
6092        .onClick(() => {
6093          try {
6094            webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE);
6095          } catch (error) {
6096            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6097          }
6098        })
6099      Web({ src: 'www.example.com', controller: this.controller })
6100    }
6101  }
6102}
6103```
6104### getRenderProcessMode<sup>12+</sup>
6105
6106static getRenderProcessMode(): RenderProcessMode
6107
6108查询ArkWeb的渲染子进程模式。
6109
6110**系统能力:** SystemCapability.Web.Webview.Core
6111
6112**返回值:**
6113
6114| 类型                                                         | 说明                   |
6115| ------------------------------------------------------------ | ---------------------- |
6116| [RenderProcessMode](#renderprocessmode12)| 渲染子进程模式类型。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。|
6117
6118
6119**示例:**
6120
6121```ts
6122// xxx.ets
6123import { webview } from '@kit.ArkWeb';
6124
6125@Entry
6126@Component
6127struct WebComponent {
6128  controller: webview.WebviewController = new webview.WebviewController();
6129
6130  build() {
6131    Column() {
6132      Button('getRenderProcessMode')
6133        .onClick(() => {
6134          let mode = webview.WebviewController.getRenderProcessMode();
6135          console.log("getRenderProcessMode: " + mode);
6136        })
6137      Web({ src: 'www.example.com', controller: this.controller })
6138    }
6139  }
6140}
6141```
6142
6143### terminateRenderProcess<sup>12+</sup>
6144
6145terminateRenderProcess(): boolean
6146
6147销毁渲染进程。
6148
6149调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。
6150
6151**系统能力:** SystemCapability.Web.Webview.Core
6152
6153**返回值:**
6154
6155| 类型                                                         | 说明                   |
6156| ------------------------------------------------------------ | ---------------------- |
6157| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。|
6158
6159**错误码:**
6160
6161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6162
6163| 错误码ID  | 错误信息                                                      |
6164| -------- | ------------------------------------------------------------ |
6165| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6166
6167**示例:**
6168
6169```ts
6170// xxx.ets
6171import { webview } from '@kit.ArkWeb';
6172
6173@Entry
6174@Component
6175struct WebComponent {
6176  controller: webview.WebviewController = new webview.WebviewController();
6177
6178  build() {
6179    Column() {
6180      Button('terminateRenderProcess')
6181        .onClick(() => {
6182          let result = this.controller.terminateRenderProcess();
6183          console.log("terminateRenderProcess result: " + result);
6184        })
6185      Web({ src: 'www.example.com', controller: this.controller })
6186    }
6187  }
6188}
6189```
6190
6191### postUrl<sup>11+</sup>
6192
6193postUrl(url: string, postData: ArrayBuffer): void
6194
6195使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。
6196
6197**系统能力:** SystemCapability.Web.Webview.Core
6198
6199**参数:**
6200
6201| 参数名  | 类型             | 必填 | 说明                  |
6202| ------- | ---------------- | ---- | :-------------------- |
6203| url     | string | 是   | 需要加载的 URL。      |
6204| postData | ArrayBuffer | 是   | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。|
6205
6206**错误码:**
6207
6208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6209
6210| 错误码ID | 错误信息                                                     |
6211| -------- | ------------------------------------------------------------ |
6212| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6213| 17100002 | Invalid url.                                                 |
6214| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
6215
6216**示例:**
6217
6218```ts
6219// xxx.ets
6220import { webview } from '@kit.ArkWeb';
6221import { BusinessError } from '@kit.BasicServicesKit';
6222
6223class TestObj {
6224  constructor() {
6225  }
6226
6227  test(str: string): ArrayBuffer {
6228    let buf = new ArrayBuffer(str.length);
6229    let buff = new Uint8Array(buf);
6230
6231    for (let i = 0; i < str.length; i++) {
6232      buff[i] = str.charCodeAt(i);
6233    }
6234    return buf;
6235  }
6236}
6237
6238@Entry
6239@Component
6240struct WebComponent {
6241  controller: webview.WebviewController = new webview.WebviewController();
6242  @State testObjtest: TestObj = new TestObj();
6243
6244  build() {
6245    Column() {
6246      Button('postUrl')
6247        .onClick(() => {
6248          try {
6249            // 数据转化为ArrayBuffer类型。
6250            let postData = this.testObjtest.test("Name=test&Password=test");
6251            this.controller.postUrl('www.example.com', postData);
6252          } catch (error) {
6253            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6254          }
6255        })
6256      Web({ src: '', controller: this.controller })
6257    }
6258  }
6259}
6260```
6261
6262### createWebPrintDocumentAdapter<sup>11+</sup>
6263
6264createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter
6265
6266创建web相关打印功能。
6267
6268**系统能力:** SystemCapability.Web.Webview.Core
6269
6270**参数:**
6271
6272| 参数名  | 类型    | 必填 | 说明                  |
6273| ------- | ------ | ---- | :-------------------- |
6274| jobName | string | 是   | 需要打印的文件名。      |
6275
6276**返回值:**
6277
6278| 类型                 | 说明                      |
6279| -------------------- | ------------------------- |
6280| print.printDocumentAdapter | 返回打印文档的适配器。 |
6281
6282**错误码:**
6283
6284以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6285
6286| 错误码ID | 错误信息                                                                    |
6287| -------- | -------------------------------------------------------------------------- |
6288| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6289| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6290
6291**示例:**
6292
6293```ts
6294// xxx.ets
6295import { webview } from '@kit.ArkWeb';
6296import { BusinessError, print } from '@kit.BasicServicesKit';
6297
6298@Entry
6299@Component
6300struct WebComponent {
6301  controller: webview.WebviewController = new webview.WebviewController();
6302
6303  build() {
6304    Column() {
6305      Button('createWebPrintDocumentAdapter')
6306        .onClick(() => {
6307          try {
6308            let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf');
6309            print.print('example_jobid', webPrintDocadapter, null, getContext());
6310          } catch (error) {
6311            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6312          }
6313        })
6314      Web({ src: 'www.example.com', controller: this.controller })
6315    }
6316  }
6317}
6318```
6319### isIncognitoMode<sup>11+</sup>
6320
6321isIncognitoMode(): boolean
6322
6323查询当前是否是隐私模式的Webview。
6324
6325**系统能力:** SystemCapability.Web.Webview.Core
6326
6327**返回值:**
6328
6329| 类型                 | 说明                      |
6330| -------------------- | ------------------------- |
6331| boolean              | 返回是否是隐私模式的Webview。 |
6332
6333**错误码:**
6334
6335以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6336
6337| 错误码ID | 错误信息                                                                    |
6338| -------- | -------------------------------------------------------------------------- |
6339| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6340
6341**示例:**
6342
6343```ts
6344// xxx.ets
6345import { webview } from '@kit.ArkWeb';
6346import { BusinessError } from '@kit.BasicServicesKit';
6347
6348@Entry
6349@Component
6350struct WebComponent {
6351  controller: webview.WebviewController = new webview.WebviewController();
6352
6353  build() {
6354    Column() {
6355      Button('isIncognitoMode')
6356        .onClick(() => {
6357          try {
6358            let result = this.controller.isIncognitoMode();
6359            console.log('isIncognitoMode' + result);
6360          } catch (error) {
6361            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6362          }
6363        })
6364      Web({ src: 'www.example.com', controller: this.controller })
6365    }
6366  }
6367}
6368```
6369
6370### getSecurityLevel<sup>11+</sup>
6371
6372getSecurityLevel(): SecurityLevel
6373
6374获取当前网页的安全级别。
6375
6376**系统能力:** SystemCapability.Web.Webview.Core
6377
6378**返回值:**
6379
6380| 类型                                | 说明                        |
6381| ----------------------------------- | --------------------------- |
6382| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 |
6383
6384**错误码:**
6385
6386以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6387
6388| 错误码ID | 错误信息                                                     |
6389| -------- | ------------------------------------------------------------ |
6390| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6391
6392**示例:**
6393
6394```ts
6395import { webview } from '@kit.ArkWeb';
6396
6397@Entry
6398@Component
6399struct WebComponent {
6400  controller: webview.WebviewController = new webview.WebviewController();
6401
6402  build() {
6403    Column() {
6404      Web({ src: 'www.example.com', controller: this.controller })
6405        .onPageEnd((event) => {
6406          if (event) {
6407            let securityLevel = this.controller.getSecurityLevel();
6408            console.info('securityLevel: ', securityLevel);
6409          }
6410        })
6411    }
6412  }
6413}
6414```
6415
6416### setScrollable<sup>12+</sup>
6417
6418setScrollable(enable: boolean, type?: ScrollType): void
6419
6420设置网页是否允许滚动。
6421
6422**系统能力:** SystemCapability.Web.Webview.Core
6423
6424**参数:**
6425
6426| 参数名 | 类型 | 必填 | 说明               |
6427| ------ | -------- | ---- | ---------------------- |
6428| enable     | boolean   | 是   | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 |
6429| type       | [ScrollType](#scrolltype12) |  否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。|
6430
6431**错误码:**
6432
6433以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6434
6435| 错误码ID | 错误信息                                                     |
6436| -------- | ------------------------------------------------------------ |
6437| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
6438| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6439
6440**示例:**
6441
6442```ts
6443// xxx.ets
6444import { webview } from '@kit.ArkWeb';
6445import { BusinessError } from '@kit.BasicServicesKit';
6446
6447@Entry
6448@Component
6449struct WebComponent {
6450  controller: webview.WebviewController = new webview.WebviewController();
6451
6452  build() {
6453    Column() {
6454      Button('setScrollable')
6455        .onClick(() => {
6456          try {
6457            this.controller.setScrollable(true);
6458          } catch (error) {
6459            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6460          }
6461        })
6462      Web({ src: 'www.example.com', controller: this.controller })
6463    }
6464  }
6465}
6466```
6467
6468### getScrollable<sup>12+</sup>
6469
6470getScrollable(): boolean
6471
6472获取当前网页是否允许滚动。
6473
6474**系统能力:** SystemCapability.Web.Webview.Core
6475
6476**返回值:**
6477
6478| 类型   | 说明           |
6479| ------ | -------------- |
6480| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 |
6481
6482**错误码:**
6483
6484以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6485
6486| 错误码ID | 错误信息                                                     |
6487| -------- | ------------------------------------------------------------ |
6488| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6489
6490**示例:**
6491
6492```ts
6493// xxx.ets
6494import { webview } from '@kit.ArkWeb';
6495import { BusinessError } from '@kit.BasicServicesKit';
6496
6497@Entry
6498@Component
6499struct WebComponent {
6500  controller: webview.WebviewController = new webview.WebviewController();
6501
6502  build() {
6503    Column() {
6504      Button('getScrollable')
6505        .onClick(() => {
6506          try {
6507            let scrollEnabled = this.controller.getScrollable();
6508            console.log("scrollEnabled: " + scrollEnabled);
6509          } catch (error) {
6510            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6511          }
6512        })
6513      Web({ src: 'www.example.com', controller: this.controller })
6514    }
6515  }
6516}
6517```
6518
6519### setPrintBackground<sup>12+</sup>
6520
6521setPrintBackground(enable: boolean): void
6522
6523设置是否打印网页背景。
6524
6525**系统能力:** SystemCapability.Web.Webview.Core
6526
6527**参数:**
6528
6529| 参数名   | 类型    | 必填 | 说明                      |
6530| -------- | ------- | ---- | -------------------------------------- |
6531| enable | boolean | 是   | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 |
6532
6533**错误码:**
6534
6535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6536
6537| 错误码ID | 错误信息                                                     |
6538| -------- | ------------------------------------------------------------ |
6539| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
6540| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6541
6542**示例:**
6543
6544```ts
6545import { webview } from '@kit.ArkWeb';
6546import { BusinessError } from '@kit.BasicServicesKit';
6547
6548@Entry
6549@Component
6550struct WebComponent {
6551  controller: webview.WebviewController = new webview.WebviewController();
6552
6553  build() {
6554    Column() {
6555      Button('setPrintBackground')
6556        .onClick(() => {
6557          try {
6558            this.controller.setPrintBackground(false);
6559          } catch (error) {
6560            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6561          }
6562        })
6563      Web({ src: 'www.example.com', controller: this.controller })
6564    }
6565  }
6566}
6567```
6568
6569### getPrintBackground<sup>12+</sup>
6570
6571getPrintBackground(): boolean
6572
6573查询webview是否打印网页背景。
6574
6575**系统能力:** SystemCapability.Web.Webview.Core
6576
6577**返回值:**
6578
6579| 类型                 | 说明                      |
6580| -------------------- | ------------------------- |
6581| boolean              | 返回Webview是否打印网页背景。 |
6582
6583**错误码:**
6584
6585以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6586
6587| 错误码ID | 错误信息                                                     |
6588| -------- | ------------------------------------------------------------ |
6589| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6590
6591**示例:**
6592
6593```ts
6594import { webview } from '@kit.ArkWeb';
6595import { BusinessError } from '@kit.BasicServicesKit';
6596
6597@Entry
6598@Component
6599struct WebComponent {
6600  controller: webview.WebviewController = new webview.WebviewController();
6601
6602  build() {
6603    Column() {
6604      Button('setPrintBackground')
6605        .onClick(() => {
6606          try {
6607            let enable = this.controller.getPrintBackground();
6608            console.log("getPrintBackground: " + enable);
6609          } catch (error) {
6610            console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6611          }
6612        })
6613      Web({ src: 'www.example.com', controller: this.controller })
6614    }
6615  }
6616}
6617```
6618
6619### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>
6620
6621getLastJavascriptProxyCallingFrameUrl(): string
6622
6623通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。
6624
6625**系统能力:** SystemCapability.Web.Webview.Core
6626
6627**错误码:**
6628
6629以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6630
6631| 错误码ID | 错误信息                                                     |
6632| -------- | ------------------------------------------------------------ |
6633| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6634
6635**示例:**
6636
6637```ts
6638// xxx.ets
6639import { webview } from '@kit.ArkWeb';
6640import { BusinessError } from '@kit.BasicServicesKit';
6641
6642class TestObj {
6643  mycontroller: webview.WebviewController;
6644
6645  constructor(controller: webview.WebviewController) {
6646    this.mycontroller = controller;
6647  }
6648
6649  test(testStr: string): string {
6650    console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6651    return testStr;
6652  }
6653
6654  toString(): void {
6655    console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6656  }
6657
6658  testNumber(testNum: number): number {
6659    console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6660    return testNum;
6661  }
6662
6663  testBool(testBol: boolean): boolean {
6664    console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6665    return testBol;
6666  }
6667}
6668
6669class WebObj {
6670  mycontroller: webview.WebviewController;
6671
6672  constructor(controller: webview.WebviewController) {
6673    this.mycontroller = controller;
6674  }
6675
6676  webTest(): string {
6677    console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6678    return "Web test";
6679  }
6680
6681  webString(): void {
6682    console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl());
6683  }
6684}
6685
6686@Entry
6687@Component
6688struct Index {
6689  controller: webview.WebviewController = new webview.WebviewController();
6690  @State testObjtest: TestObj = new TestObj(this.controller);
6691  @State webTestObj: WebObj = new WebObj(this.controller);
6692
6693  build() {
6694    Column() {
6695      Button('refresh')
6696        .onClick(() => {
6697          try {
6698            this.controller.refresh();
6699          } catch (error) {
6700            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6701          }
6702        })
6703      Button('Register JavaScript To Window')
6704        .onClick(() => {
6705          try {
6706            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
6707            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
6708          } catch (error) {
6709            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6710          }
6711        })
6712      Web({ src: $rawfile('index.html'), controller: this.controller })
6713        .javaScriptAccess(true)
6714    }
6715  }
6716}
6717```
6718
6719加载的html文件。
6720```html
6721<!-- index.html -->
6722<!DOCTYPE html>
6723<html>
6724    <meta charset="utf-8">
6725    <body>
6726      <button type="button" onclick="htmlTest()">Click Me!</button>
6727      <p id="demo"></p>
6728      <p id="webDemo"></p>
6729    </body>
6730    <script type="text/javascript">
6731    function htmlTest() {
6732      // This function call expects to return "ArkUI Web Component"
6733      let str=objName.test("webtest data");
6734      objName.testNumber(1);
6735      objName.testBool(true);
6736      document.getElementById("demo").innerHTML=str;
6737      console.log('objName.test result:'+ str)
6738
6739      // This function call expects to return "Web test"
6740      let webStr = objTestName.webTest();
6741      document.getElementById("webDemo").innerHTML=webStr;
6742      console.log('objTestName.webTest result:'+ webStr)
6743    }
6744</script>
6745</html>
6746```
6747
6748### pauseAllTimers<sup>12+</sup>
6749
6750pauseAllTimers(): void
6751
6752暂停所有WebView的定时器。
6753
6754**系统能力:** SystemCapability.Web.Webview.Core
6755
6756**错误码:**
6757
6758以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6759
6760| 错误码ID | 错误信息                                                     |
6761| -------- | ------------------------------------------------------------ |
6762| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6763
6764**示例:**
6765
6766```ts
6767import { webview } from '@kit.ArkWeb';
6768import { BusinessError } from '@kit.BasicServicesKit';
6769
6770@Entry
6771@Component
6772struct WebComponent {
6773  controller: webview.WebviewController = new webview.WebviewController();
6774
6775  build() {
6776    Column() {
6777      Row() {
6778        Button('PauseAllTimers')
6779          .onClick(() => {
6780            try {
6781              webview.WebviewController.pauseAllTimers();
6782            } catch (error) {
6783              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6784            }
6785          })
6786      }
6787      Web({ src: $rawfile("index.html"), controller: this.controller })
6788    }
6789  }
6790}
6791```
6792加载的html文件。
6793
6794```html
6795<!DOCTYPE html>
6796<html>
6797    <body>
6798        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6799        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6800        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6801    </body>
6802</html>
6803<script>
6804    var timer = null;
6805    var num = 0;
6806
6807    function startTimer() {
6808        timer = setInterval(function() {
6809            document.getElementById("show_num").value = ++num;
6810        }, 1000);
6811    }
6812</script>
6813```
6814
6815### resumeAllTimers<sup>12+</sup>
6816
6817resumeAllTimers(): void
6818
6819恢复从pauseAllTimers()接口中被暂停的所有的定时器。
6820
6821**系统能力:** SystemCapability.Web.Webview.Core
6822
6823**错误码:**
6824
6825以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6826
6827| 错误码ID | 错误信息                                                     |
6828| -------- | ------------------------------------------------------------ |
6829| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6830
6831**示例:**
6832
6833```ts
6834import { webview } from '@kit.ArkWeb';
6835import { BusinessError } from '@kit.BasicServicesKit';
6836
6837@Entry
6838@Component
6839struct WebComponent {
6840  controller: webview.WebviewController = new webview.WebviewController();
6841
6842  build() {
6843    Column() {
6844      Row() {
6845        Button('ResumeAllTimers')
6846          .onClick(() => {
6847            try {
6848              webview.WebviewController.resumeAllTimers();
6849            } catch (error) {
6850              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6851            }
6852          })
6853        Button('PauseAllTimers')
6854          .onClick(() => {
6855            try {
6856              webview.WebviewController.pauseAllTimers();
6857            } catch (error) {
6858              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6859            }
6860          })
6861      }
6862      Web({ src: $rawfile("index.html"), controller: this.controller })
6863    }
6864  }
6865}
6866```
6867加载的html文件。
6868
6869```html
6870<!DOCTYPE html>
6871<html>
6872    <body>
6873        <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button>
6874        <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button>
6875        <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num">
6876    </body>
6877</html>
6878<script>
6879    var timer = null;
6880    var num = 0;
6881
6882    function startTimer() {
6883        timer = setInterval(function() {
6884            document.getElementById("show_num").value = ++num;
6885        }, 1000);
6886    }
6887
6888    function resetTimer() {
6889        clearInterval(timer);
6890        document.getElementById("show_num").value = 0;
6891        num = 0;
6892    }
6893</script>
6894```
6895
6896### stopAllMedia<sup>12+</sup>
6897
6898stopAllMedia(): void
6899
6900控制网页所有音视频停止。
6901
6902**系统能力:** SystemCapability.Web.Webview.Core
6903
6904**错误码:**
6905
6906以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6907
6908| 错误码ID | 错误信息                                                     |
6909| -------- | ------------------------------------------------------------ |
6910| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6911
6912**示例:**
6913
6914```ts
6915// xxx.ets
6916import { webview } from '@kit.ArkWeb';
6917import { BusinessError } from '@kit.BasicServicesKit';
6918
6919@Entry
6920@Component
6921struct WebComponent {
6922  controller: webview.WebviewController = new webview.WebviewController();
6923
6924  build() {
6925    Column() {
6926      Button('stopAllMedia')
6927        .onClick(() => {
6928          try {
6929            this.controller.stopAllMedia();
6930          } catch (error) {
6931            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6932          }
6933        })
6934      Web({ src: 'www.example.com', controller: this.controller })
6935    }
6936  }
6937}
6938```
6939
6940### pauseAllMedia<sup>12+</sup>
6941
6942pauseAllMedia(): void
6943
6944控制网页所有音视频暂停。
6945
6946**系统能力:** SystemCapability.Web.Webview.Core
6947
6948**错误码:**
6949
6950以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6951
6952| 错误码ID | 错误信息                                                     |
6953| -------- | ------------------------------------------------------------ |
6954| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6955
6956**示例:**
6957
6958```ts
6959// xxx.ets
6960import { webview } from '@kit.ArkWeb';
6961import { BusinessError } from '@kit.BasicServicesKit';
6962
6963@Entry
6964@Component
6965struct WebComponent {
6966  controller: webview.WebviewController = new webview.WebviewController();
6967
6968  build() {
6969    Column() {
6970      Button('pauseAllMedia')
6971        .onClick(() => {
6972          try {
6973            this.controller.pauseAllMedia();
6974          } catch (error) {
6975            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
6976          }
6977        })
6978      Web({ src: 'www.example.com', controller: this.controller })
6979    }
6980  }
6981}
6982```
6983
6984### resumeAllMedia<sup>12+</sup>
6985
6986resumeAllMedia(): void
6987
6988控制网页被pauseAllMedia接口暂停的音视频继续播放。
6989
6990**系统能力:** SystemCapability.Web.Webview.Core
6991
6992**错误码:**
6993
6994以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
6995
6996| 错误码ID | 错误信息                                                     |
6997| -------- | ------------------------------------------------------------ |
6998| 17100001 | Init error. The WebviewController must be associated with a Web component. |
6999
7000**示例:**
7001
7002```ts
7003// xxx.ets
7004import { webview } from '@kit.ArkWeb';
7005import { BusinessError } from '@kit.BasicServicesKit';
7006
7007@Entry
7008@Component
7009struct WebComponent {
7010  controller: webview.WebviewController = new webview.WebviewController();
7011
7012  build() {
7013    Column() {
7014      Button('resumeAllMedia')
7015        .onClick(() => {
7016          try {
7017            this.controller.resumeAllMedia();
7018          } catch (error) {
7019            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7020          }
7021        })
7022      Web({ src: 'www.example.com', controller: this.controller })
7023    }
7024  }
7025}
7026```
7027
7028### closeAllMediaPresentations<sup>12+</sup>
7029
7030closeAllMediaPresentations(): void
7031
7032控制网页所有全屏视频关闭。
7033
7034**系统能力:** SystemCapability.Web.Webview.Core
7035
7036**错误码:**
7037
7038以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7039
7040| 错误码ID | 错误信息                                                     |
7041| -------- | ------------------------------------------------------------ |
7042| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7043
7044**示例:**
7045
7046```ts
7047// xxx.ets
7048import { webview } from '@kit.ArkWeb';
7049import { BusinessError } from '@kit.BasicServicesKit';
7050
7051@Entry
7052@Component
7053struct WebComponent {
7054  controller: webview.WebviewController = new webview.WebviewController();
7055
7056  build() {
7057    Column() {
7058      Button('closeAllMediaPresentations')
7059        .onClick(() => {
7060          try {
7061            this.controller.closeAllMediaPresentations();
7062          } catch (error) {
7063            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7064          }
7065        })
7066      Web({ src: 'www.example.com', controller: this.controller })
7067    }
7068  }
7069}
7070```
7071
7072### getMediaPlaybackState<sup>12+</sup>
7073
7074getMediaPlaybackState(): MediaPlaybackState
7075
7076查询当前所有音视频播控状态。
7077
7078**系统能力:** SystemCapability.Web.Webview.Core
7079
7080**返回值:**
7081
7082| 类型                                        | 说明                                                      |
7083| ------------------------------------------- | --------------------------------------------------------- |
7084| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 |
7085
7086**错误码:**
7087
7088以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7089
7090| 错误码ID | 错误信息                                                     |
7091| -------- | ------------------------------------------------------------ |
7092| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7093
7094**示例:**
7095
7096```ts
7097// xxx.ets
7098import { webview } from '@kit.ArkWeb';
7099import { BusinessError } from '@kit.BasicServicesKit';
7100
7101@Entry
7102@Component
7103struct WebComponent {
7104  controller: webview.WebviewController = new webview.WebviewController();
7105
7106  build() {
7107    Column() {
7108      Button('getMediaPlaybackState')
7109        .onClick(() => {
7110          try {
7111            console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState());
7112          } catch (error) {
7113            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7114          }
7115        })
7116      Web({ src: 'www.example.com', controller: this.controller })
7117    }
7118  }
7119}
7120```
7121
7122### setWebSchemeHandler<sup>12+</sup>
7123
7124setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7125
7126为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。
7127
7128**系统能力:** SystemCapability.Web.Webview.Core
7129
7130**参数:**
7131
7132| 参数名 | 类型   | 必填 | 说明                      |
7133| ------ | ------ | ---- | :------------------------ |
7134| scheme    | string | 是   | 要拦截的协议。 |
7135| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7136
7137**错误码:**
7138
7139以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7140
7141| 错误码ID | 错误信息                                                     |
7142| -------- | ------------------------------------------------------------ |
7143| 401      | Parameter error. Possible causes: 1. Incorrect parameter types.                                    |
7144| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7145
7146**示例:**
7147
7148```ts
7149// xxx.ets
7150import { webview } from '@kit.ArkWeb';
7151import { BusinessError } from '@kit.BasicServicesKit';
7152
7153@Entry
7154@Component
7155struct WebComponent {
7156  controller: webview.WebviewController = new webview.WebviewController();
7157  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7158
7159  build() {
7160    Column() {
7161      Button('setWebSchemeHandler')
7162        .onClick(() => {
7163          try {
7164            this.controller.setWebSchemeHandler('http', this.schemeHandler);
7165          } catch (error) {
7166            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7167          }
7168        })
7169      Web({ src: 'www.example.com', controller: this.controller })
7170    }
7171  }
7172}
7173```
7174
7175### clearWebSchemeHandler<sup>12+</sup>
7176
7177clearWebSchemeHandler(): void
7178
7179清除当前Web组件设置的所有WebSchemeHandler。
7180
7181**系统能力:** SystemCapability.Web.Webview.Core
7182
7183**错误码:**
7184
7185以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7186
7187| 错误码ID | 错误信息                                                     |
7188| -------- | ------------------------------------------------------------ |
7189| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7190
7191**示例:**
7192
7193```ts
7194// xxx.ets
7195import { webview } from '@kit.ArkWeb';
7196import { BusinessError } from '@kit.BasicServicesKit';
7197
7198@Entry
7199@Component
7200struct WebComponent {
7201  controller: webview.WebviewController = new webview.WebviewController();
7202
7203  build() {
7204    Column() {
7205      Button('clearWebSchemeHandler')
7206        .onClick(() => {
7207          try {
7208            this.controller.clearWebSchemeHandler();
7209          } catch (error) {
7210            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7211          }
7212        })
7213      Web({ src: 'www.example.com', controller: this.controller })
7214    }
7215  }
7216}
7217```
7218
7219### setServiceWorkerWebSchemeHandler<sup>12+</sup>
7220
7221setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void
7222
7223为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。
7224
7225**系统能力:** SystemCapability.Web.Webview.Core
7226
7227**参数:**
7228
7229| 参数名 | 类型   | 必填 | 说明                      |
7230| ------ | ------ | ---- | :------------------------ |
7231| scheme    | string | 是   | 要拦截的协议。 |
7232| handler    | [WebSchemeHandler](#webschemehandler12) | 是   | 拦截此协议的拦截器。 |
7233
7234**错误码:**
7235
7236以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7237
7238| 错误码ID | 错误信息                                                     |
7239| -------- | ------------------------------------------------------------ |
7240| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
7241
7242**示例:**
7243
7244```ts
7245// xxx.ets
7246import { webview } from '@kit.ArkWeb';
7247import { BusinessError } from '@kit.BasicServicesKit';
7248
7249@Entry
7250@Component
7251struct WebComponent {
7252  controller: webview.WebviewController = new webview.WebviewController();
7253  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
7254
7255  build() {
7256    Column() {
7257      Button('setWebSchemeHandler')
7258        .onClick(() => {
7259          try {
7260            webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler);
7261          } catch (error) {
7262            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7263          }
7264        })
7265      Web({ src: 'www.example.com', controller: this.controller })
7266    }
7267  }
7268}
7269```
7270
7271### clearServiceWorkerWebSchemeHandler<sup>12+</sup>
7272
7273clearServiceWorkerWebSchemeHandler(): void
7274
7275清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。
7276
7277**系统能力:** SystemCapability.Web.Webview.Core
7278
7279**示例:**
7280
7281```ts
7282// xxx.ets
7283import { webview } from '@kit.ArkWeb';
7284
7285@Entry
7286@Component
7287struct WebComponent {
7288  controller: webview.WebviewController = new webview.WebviewController();
7289
7290  build() {
7291    Column() {
7292      Button('clearServiceWorkerWebSchemeHandler')
7293        .onClick(() => {
7294          webview.WebviewController.clearServiceWorkerWebSchemeHandler();
7295        })
7296      Web({ src: 'www.example.com', controller: this.controller })
7297    }
7298  }
7299}
7300```
7301
7302### startCamera<sup>12+</sup>
7303
7304startCamera(): void
7305
7306开启当前网页摄像头捕获。
7307
7308**系统能力:** SystemCapability.Web.Webview.Core
7309
7310**错误码:**
7311
7312以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7313
7314| 错误码ID | 错误信息                                                     |
7315| -------- | ------------------------------------------------------------ |
7316| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7317
7318**示例:**
7319```ts
7320// xxx.ets
7321import { webview } from '@kit.ArkWeb';
7322import { BusinessError } from '@kit.BasicServicesKit';
7323import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
7324
7325let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
7326try {
7327  let context: Context = getContext(this) as common.UIAbilityContext;
7328  atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
7329    console.info('data:' + JSON.stringify(data));
7330    console.info('data permissions:' + data.permissions);
7331    console.info('data authResults:' + data.authResults);
7332  })
7333} catch (error) {
7334  console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7335}
7336
7337@Entry
7338@Component
7339struct WebComponent {
7340  controller: webview.WebviewController = new webview.WebviewController();
7341
7342  build() {
7343    Column() {
7344      Button("startCamera").onClick(() => {
7345        try {
7346          this.controller.startCamera();
7347        } catch (error) {
7348          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7349        }
7350      })
7351      Button("stopCamera").onClick(() => {
7352        try {
7353          this.controller.stopCamera();
7354        } catch (error) {
7355          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7356        }
7357      })
7358      Button("closeCamera").onClick(() => {
7359        try {
7360          this.controller.closeCamera();
7361        } catch (error) {
7362          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7363        }
7364      })
7365      Web({ src: $rawfile('index.html'), controller: this.controller })
7366        .onPermissionRequest((event) => {
7367          if (event) {
7368            AlertDialog.show({
7369              title: 'title',
7370              message: 'text',
7371              primaryButton: {
7372                value: 'deny',
7373                action: () => {
7374                  event.request.deny();
7375                }
7376              },
7377              secondaryButton: {
7378                value: 'onConfirm',
7379                action: () => {
7380                  event.request.grant(event.request.getAccessibleResource());
7381                }
7382              },
7383              cancel: () => {
7384                event.request.deny();
7385              }
7386            })
7387          }
7388        })
7389    }
7390  }
7391}
7392
7393```
7394加载的html文件。
7395 ```html
7396<!-- index.html -->
7397<!DOCTYPE html>
7398<html>
7399  <head>
7400    <meta charset="UTF-8">
7401  </head>
7402  <body>
7403    <video id="video" width="400px" height="400px" autoplay="autoplay">
7404    </video>
7405    <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" />
7406    <script>
7407      function getMedia() {
7408        let constraints = {
7409          video: {
7410            width: 500,
7411            height: 500
7412          },
7413          audio: true
7414        }
7415        let video = document.getElementById("video");
7416        let promise = navigator.mediaDevices.getUserMedia(constraints);
7417        promise.then(function(MediaStream) {
7418          video.srcObject = MediaStream;
7419          video.play();
7420        })
7421      }
7422    </script>
7423  </body>
7424</html>
7425 ```
7426
7427### stopCamera<sup>12+</sup>
7428
7429stopCamera(): void
7430
7431停止当前网页摄像头捕获。
7432
7433**系统能力:** SystemCapability.Web.Webview.Core
7434
7435**错误码:**
7436
7437以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7438
7439| 错误码ID | 错误信息                                                     |
7440| -------- | ------------------------------------------------------------ |
7441| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7442
7443**示例:**
7444
7445完整示例代码参考[startCamera](#startcamera12)。
7446
7447### closeCamera<sup>12+</sup>
7448
7449closeCamera(): void
7450
7451关闭当前网页摄像头捕获。
7452
7453**系统能力:** SystemCapability.Web.Webview.Core
7454
7455**错误码:**
7456
7457以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7458
7459| 错误码ID | 错误信息                                                     |
7460| -------- | ------------------------------------------------------------ |
7461| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7462
7463**示例:**
7464
7465完整示例代码参考[startCamera](#startcamera12)。
7466
7467### precompileJavaScript<sup>12+</sup>
7468
7469precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\>
7470
7471预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。
7472接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。
7473
7474**系统能力:** SystemCapability.Web.Webview.Core
7475
7476**参数:**
7477
7478| 参数名  | 类型    | 必填 | 说明                  |
7479| ------- | ------ | ---- | :-------------------- |
7480| url | string | 是   | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。      |
7481| script | string \| Uint8Array | 是   | 本地JavaScript的文本内容。内容不能为空。      |
7482| cacheOptions | [CacheOptions](#cacheoptions12) | 是   | 用于控制字节码缓存更新。      |
7483
7484**返回值:**
7485
7486| 类型                                | 说明                        |
7487| ----------------------------------- | --------------------------- |
7488| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 |
7489
7490**错误码:**
7491
7492以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
7493
7494| 错误码ID | 错误信息                                                     |
7495| -------- | ------------------------------------------------------------ |
7496| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
7497| 17100001 | Init error. The WebviewController must be associated with a Web component. |
7498
7499**示例:**
7500
7501接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例:
7502
75031. 首先,在EntryAbility中将UIContext存到localStorage中。
7504
7505   ```ts
7506   // EntryAbility.ets
7507   import { UIAbility } from '@kit.AbilityKit';
7508   import { window } from '@kit.ArkUI';
7509
7510   const localStorage: LocalStorage = new LocalStorage('uiContext');
7511
7512   export default class EntryAbility extends UIAbility {
7513     storage: LocalStorage = localStorage;
7514
7515     onWindowStageCreate(windowStage: window.WindowStage) {
7516       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
7517         if (err.code) {
7518           return;
7519         }
7520
7521         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
7522       });
7523     }
7524   }
7525   ```
7526
75272. 编写动态组件所需基础代码。
7528
7529   ```ts
7530   // DynamicComponent.ets
7531   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
7532
7533   export interface BuilderData {
7534     url: string;
7535     controller: WebviewController;
7536   }
7537
7538   const storage = LocalStorage.getShared();
7539
7540   export class NodeControllerImpl extends NodeController {
7541     private rootNode: BuilderNode<BuilderData[]> | null = null;
7542     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
7543
7544     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
7545       super();
7546       this.wrappedBuilder = wrappedBuilder;
7547     }
7548
7549     makeNode(): FrameNode | null {
7550       if (this.rootNode != null) {
7551         return this.rootNode.getFrameNode();
7552       }
7553       return null;
7554     }
7555
7556     initWeb(url: string, controller: WebviewController) {
7557       if(this.rootNode != null) {
7558         return;
7559       }
7560
7561       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
7562       if (!uiContext) {
7563         return;
7564       }
7565       this.rootNode = new BuilderNode(uiContext);
7566       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
7567     }
7568   }
7569
7570   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
7571     const baseNode = new NodeControllerImpl(wrappedBuilder);
7572     baseNode.initWeb(data.url, data.controller);
7573     return baseNode;
7574   }
7575   ```
7576
75773. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。
7578
7579   <!--code_no_check-->
7580   ```ts
7581   // PrecompileWebview.ets
7582   import { BuilderData } from "./DynamicComponent";
7583   import { Config, configs } from "./PrecompileConfig";
7584
7585   @Builder
7586   function WebBuilder(data: BuilderData) {
7587     Web({ src: data.url, controller: data.controller })
7588       .onControllerAttached(() => {
7589         precompile(data.controller, configs);
7590       })
7591       .fileAccess(true)
7592   }
7593
7594   export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7595
7596   export const precompile = async (controller: WebviewController, configs: Array<Config>) => {
7597     for (const config of configs) {
7598       let content = await readRawFile(config.localPath);
7599
7600       try {
7601         controller.precompileJavaScript(config.url, content, config.options)
7602           .then(errCode => {
7603             console.error("precompile successfully! " + errCode);
7604           }).catch((errCode: number) => {
7605             console.error("precompile failed. " + errCode);
7606         });
7607       } catch (err) {
7608         console.error("precompile failed. " + err.code + " " + err.message);
7609       }
7610     }
7611   }
7612
7613   async function readRawFile(path: string) {
7614     try {
7615       return await getContext().resourceManager.getRawFileContent(path);;
7616     } catch (err) {
7617       return new Uint8Array(0);
7618     }
7619   }
7620   ```
7621
7622JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。
7623
76244. 编写业务用组件代码。
7625
7626   <!--code_no_check-->
7627   ```ts
7628   // BusinessWebview.ets
7629   import { BuilderData } from "./DynamicComponent";
7630
7631   @Builder
7632   function WebBuilder(data: BuilderData) {
7633     // 此处组件可根据业务需要自行扩展
7634     Web({ src: data.url, controller: data.controller })
7635       .cacheMode(CacheMode.Default)
7636   }
7637
7638   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
7639   ```
7640
76415. 编写资源配置信息。
7642
7643   ```ts
7644   // PrecompileConfig.ets
7645   import { webview } from '@kit.ArkWeb'
7646
7647   export interface Config {
7648     url:  string,
7649     localPath: string, // 本地资源路径
7650     options: webview.CacheOptions
7651   }
7652
7653   export let configs: Array<Config> = [
7654     {
7655       url: "https://www.example.com/example.js",
7656       localPath: "example.js",
7657       options: {
7658         responseHeaders: [
7659           { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="},
7660           { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"}
7661         ]
7662       }
7663     }
7664   ]
7665   ```
7666
76676. 在页面中使用。
7668
7669   <!--code_no_check-->
7670   ```ts
7671   // Index.ets
7672   import { webview } from '@kit.ArkWeb';
7673   import { NodeController } from '@kit.ArkUI';
7674   import { createNode } from "./DynamicComponent"
7675   import { precompileWebview } from "./PrecompileWebview"
7676   import { businessWebview } from "./BusinessWebview"
7677
7678   @Entry
7679   @Component
7680   struct Index {
7681     @State precompileNode: NodeController | undefined = undefined;
7682     precompileController: webview.WebviewController = new webview.WebviewController();
7683
7684     @State businessNode: NodeController | undefined = undefined;
7685     businessController: webview.WebviewController = new webview.WebviewController();
7686
7687     aboutToAppear(): void {
7688       // 初始化用于注入本地资源的Web组件
7689       this.precompileNode = createNode(precompileWebview,
7690         { url: "https://www.example.com/empty.html", controller: this.precompileController});
7691     }
7692
7693     build() {
7694       Column() {
7695         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
7696         Button("加载页面")
7697           .onClick(() => {
7698             this.businessNode = createNode(businessWebview, {
7699               url:  "https://www.example.com/business.html",
7700               controller: this.businessController
7701             });
7702           })
7703         // 用于业务的Web组件
7704         NodeContainer(this.businessNode);
7705       }
7706     }
7707   }
7708   ```
7709
7710当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。
7711
7712### onCreateNativeMediaPlayer<sup>12+</sup>
7713
7714onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void
7715
7716注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。
7717如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。
7718
7719**系统能力:** SystemCapability.Web.Webview.Core
7720
7721**参数:**
7722
7723| 参数名 | 类型 | 必填 | 说明 |
7724|--------|------|------|------|
7725| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 |
7726
7727**示例:**
7728
7729```ts
7730// xxx.ets
7731import { webview } from '@kit.ArkWeb';
7732
7733class ActualNativeMediaPlayerListener {
7734  handler: webview.NativeMediaPlayerHandler;
7735
7736  constructor(handler: webview.NativeMediaPlayerHandler) {
7737    this.handler = handler;
7738  }
7739
7740  onPlaying() {
7741    // 本地播放器开始播放。
7742    this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING);
7743  }
7744  onPaused() {
7745    // 本地播放器暂停播放。
7746    this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED);
7747  }
7748  onSeeking() {
7749    // 本地播放器开始执行跳转到目标时间点。
7750    this.handler.handleSeeking();
7751  }
7752  onSeekDone() {
7753    // 本地播放器 seek 完成。
7754    this.handler.handleSeekFinished();
7755  }
7756  onEnded() {
7757    // 本地播放器播放完成。
7758    this.handler.handleEnded();
7759  }
7760  onVolumeChanged() {
7761    // 获取本地播放器的音量。
7762    let volume: number = getVolume();
7763    this.handler.handleVolumeChanged(volume);
7764  }
7765  onCurrentPlayingTimeUpdate() {
7766    // 更新播放时间。
7767    let currentTime: number = getCurrentPlayingTime();
7768    // 将时间单位换算成秒。
7769    let currentTimeInSeconds = convertToSeconds(currentTime);
7770    this.handler.handleTimeUpdate(currentTimeInSeconds);
7771  }
7772  onBufferedChanged() {
7773    // 缓存发生了变化。
7774    // 获取本地播放器的缓存时长。
7775    let bufferedEndTime: number = getCurrentBufferedTime();
7776    // 将时间单位换算成秒。
7777    let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime);
7778    this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds);
7779
7780    // 检查缓存状态。
7781    // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。
7782    let lastReadyState: webview.ReadyState = getLastReadyState();
7783    let currentReadyState:  webview.ReadyState = getCurrentReadyState();
7784    if (lastReadyState != currentReadyState) {
7785      this.handler.handleReadyStateChanged(currentReadyState);
7786    }
7787  }
7788  onEnterFullscreen() {
7789    // 本地播放器进入了全屏状态。
7790    let isFullscreen: boolean = true;
7791    this.handler.handleFullscreenChanged(isFullscreen);
7792  }
7793  onExitFullscreen() {
7794    // 本地播放器退出了全屏状态。
7795    let isFullscreen: boolean = false;
7796    this.handler.handleFullscreenChanged(isFullscreen);
7797  }
7798  onUpdateVideoSize(width: number, height: number) {
7799    // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。
7800    this.handler.handleVideoSizeChanged(width, height);
7801  }
7802  onDurationChanged(duration: number) {
7803    // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。
7804    this.handler.handleDurationChanged(duration);
7805  }
7806  onError(error: webview.MediaError, errorMessage: string) {
7807    // 本地播放器出错了,通知 ArkWeb 内核。
7808    this.handler.handleError(error, errorMessage);
7809  }
7810  onNetworkStateChanged(state: webview.NetworkState) {
7811    // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。
7812    this.handler.handleNetworkStateChanged(state);
7813  }
7814  onPlaybackRateChanged(playbackRate: number) {
7815    // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。
7816    this.handler.handlePlaybackRateChanged(playbackRate);
7817  }
7818  onMutedChanged(muted: boolean) {
7819    // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。
7820    this.handler.handleMutedChanged(muted);
7821  }
7822
7823  // ... 监听本地播放器其他的状态 ...
7824}
7825
7826class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge {
7827  constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) {
7828    // 1. 创建一个本地播放器的状态监听。
7829    let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler);
7830    // 2. 创建一个本地播放器。
7831    // 3. 监听该本地播放器。
7832    // ...
7833  }
7834
7835  updateRect(x: number, y: number, width: number, height: number) {
7836    // <video> 标签的位置和大小发生了变化。
7837    // 根据该信息变化,作出相应的改变。
7838  }
7839
7840  play() {
7841    // 启动本地播放器播放。
7842  }
7843
7844  pause() {
7845    // 暂停本地播放器播放。
7846  }
7847
7848  seek(targetTime: number) {
7849    // 本地播放器跳转到指定的时间点。
7850  }
7851
7852  release() {
7853    // 销毁本地播放器。
7854  }
7855
7856  setVolume(volume: number) {
7857    // ArkWeb 内核要求调整本地播放器的音量。
7858    // 设置本地播放器的音量。
7859  }
7860
7861  setMuted(muted: boolean) {
7862    // 将本地播放器静音或取消静音。
7863  }
7864
7865  setPlaybackRate(playbackRate: number) {
7866    // 调整本地播放器的播放速度。
7867  }
7868
7869  enterFullscreen() {
7870    // 将本地播放器设置为全屏播放。
7871  }
7872
7873  exitFullscreen() {
7874    // 将本地播放器退出全屏播放。
7875  }
7876
7877  resumePlayer() {
7878    // 重新创建应用内播放器。
7879    // 恢复应用内播放器的状态信息。
7880  }
7881
7882  suspendPlayer(type: webview.SuspendType) {
7883    // 记录应用内播放器的状态信息。
7884    // 销毁应用内播放器。
7885  }
7886}
7887
7888@Entry
7889@Component
7890struct WebComponent {
7891  controller: webview.WebviewController = new webview.WebviewController()
7892  build() {
7893    Column() {
7894      Web({ src: 'www.example.com', controller: this.controller })
7895        .enableNativeMediaPlayer({enable: true, shouldOverlay: false})
7896        .onPageBegin((event) => {
7897          this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => {
7898            if (!shouldHandle(mediaInfo)) {
7899              // 本地播放器不接管该媒体。
7900              // ArkWeb 内核将用自己的播放器来播放该媒体。
7901              return null;
7902            }
7903            let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo);
7904            return nativePlayer;
7905          });
7906        })
7907    }
7908  }
7909}
7910
7911// stub
7912function getVolume() {
7913  return 1;
7914}
7915function getCurrentPlayingTime() {
7916  return 1;
7917}
7918function getCurrentBufferedTime() {
7919  return 1;
7920}
7921function convertToSeconds(input: number) {
7922  return input;
7923}
7924function getLastReadyState() {
7925  return webview.ReadyState.HAVE_NOTHING;
7926}
7927function getCurrentReadyState() {
7928  return webview.ReadyState.HAVE_NOTHING;
7929}
7930function shouldHandle(mediaInfo: webview.MediaInfo) {
7931  return true;
7932}
7933```
7934
7935### enableWholeWebPageDrawing<sup>12+</sup>
7936
7937static enableWholeWebPageDrawing(): void
7938
7939设置开启网页全量绘制能力。仅在web初始化时设置。
7940
7941**系统能力:** SystemCapability.Web.Webview.Core
7942
7943**示例:**
7944
7945```ts
7946// xxx.ets
7947import { webview } from '@kit.ArkWeb';
7948import { BusinessError } from '@kit.BasicServicesKit';
7949
7950@Entry
7951@Component
7952struct WebComponent {
7953  controller: webview.WebviewController = new webview.WebviewController();
7954
7955  aboutToAppear(): void {
7956    try {
7957      webview.WebviewController.enableWholeWebPageDrawing();
7958    } catch (error) {
7959      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
7960    }
7961  }
7962
7963  build() {
7964    Column() {
7965      Web({ src: 'www.example.com', controller: this.controller })
7966    }
7967  }
7968}
7969```
7970
7971### webPageSnapshot<sup>12+</sup>
7972
7973webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void
7974
7975获取网页全量绘制结果。(本地资源网页暂不支持)
7976
7977**系统能力:** SystemCapability.Web.Webview.Core
7978
7979**参数:**
7980
7981| 参数名       | 类型           | 必填  | 说明                      |
7982| ----------- | ------------- | ---- | ------------------------ |
7983| info        | [SnapshotInfo](#snapshotinfo12)| 是   | 全量绘制结果入参。 |
7984| callback        | [SnapshotResult](#snapshotresult12)| 是   | 全量绘制回调结果。 |
7985
7986**示例:**
7987
7988```ts
7989// xxx.ets
7990import { webview } from '@kit.ArkWeb';
7991import { BusinessError } from '@kit.BasicServicesKit';
7992
7993@Entry
7994@Component
7995struct WebComponent {
7996  controller: webview.WebviewController = new webview.WebviewController();
7997
7998  build() {
7999    Column() {
8000      Button('webPageSnapshot')
8001        .onClick(() => {
8002          try {
8003            this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => {
8004              if (error) {
8005                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8006                return;
8007              }
8008              if (result) {
8009                console.info(`return value is:${result}`);
8010                //开发者可以根据需要处理返回结果
8011              }
8012            });
8013          } catch (error) {
8014            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8015          }
8016        })
8017      Web({ src: 'www.example.com', controller: this.controller })
8018    }
8019  }
8020}
8021```
8022
8023### injectOfflineResources<sup>12+</sup>
8024
8025injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void
8026
8027将本地离线资源注入到内存缓存中,以提升页面首次启动速度。
8028内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。
8029正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。
8030资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。
8031以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。
8032当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。
8033
8034**系统能力:** SystemCapability.Web.Webview.Core
8035
8036**参数:**
8037
8038| 参数名  | 类型    | 必填 | 说明                  |
8039| ------- | ------ | ---- | :-------------------- |
8040| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是   | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。      |
8041
8042**错误码:**
8043
8044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8045
8046| 错误码ID | 错误信息                                                     |
8047| -------- | ------------------------------------------------------------ |
8048| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed.                                     |
8049| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8050| 17100002 | Invalid url.                                                 |
8051
8052**示例:**
8053
8054接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例:
80551. 首先,在EntryAbility中将UIContext存到localStorage中。
8056
8057   ```ts
8058   // EntryAbility.ets
8059   import { UIAbility } from '@kit.AbilityKit';
8060   import { window } from '@kit.ArkUI';
8061
8062   const localStorage: LocalStorage = new LocalStorage('uiContext');
8063
8064   export default class EntryAbility extends UIAbility {
8065     storage: LocalStorage = localStorage;
8066
8067     onWindowStageCreate(windowStage: window.WindowStage) {
8068       windowStage.loadContent('pages/Index', this.storage, (err, data) => {
8069         if (err.code) {
8070           return;
8071         }
8072
8073         this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext());
8074       });
8075     }
8076   }
8077   ```
8078
80792. 编写动态组件所需基础代码。
8080
8081   ```ts
8082   // DynamicComponent.ets
8083   import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI';
8084
8085   export interface BuilderData {
8086     url: string;
8087     controller: WebviewController;
8088   }
8089
8090   const storage = LocalStorage.getShared();
8091
8092   export class NodeControllerImpl extends NodeController {
8093     private rootNode: BuilderNode<BuilderData[]> | null = null;
8094     private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;
8095
8096     constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) {
8097       super();
8098       this.wrappedBuilder = wrappedBuilder;
8099     }
8100
8101     makeNode(): FrameNode | null {
8102       if (this.rootNode != null) {
8103         return this.rootNode.getFrameNode();
8104       }
8105       return null;
8106     }
8107
8108     initWeb(url: string, controller: WebviewController) {
8109       if(this.rootNode != null) {
8110         return;
8111       }
8112
8113       const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext;
8114       if (!uiContext) {
8115         return;
8116       }
8117       this.rootNode = new BuilderNode(uiContext);
8118       this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });
8119     }
8120   }
8121
8122   export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => {
8123     const baseNode = new NodeControllerImpl(wrappedBuilder);
8124     baseNode.initWeb(data.url, data.controller);
8125     return baseNode;
8126   }
8127   ```
8128
81293. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。
8130
8131   <!--code_no_check-->
8132   ```ts
8133   // InjectWebview.ets
8134   import { webview } from '@kit.ArkWeb';
8135   import { resourceConfigs } from "./Resource";
8136   import { BuilderData } from "./DynamicComponent";
8137
8138   @Builder
8139   function WebBuilder(data: BuilderData) {
8140     Web({ src: data.url, controller: data.controller })
8141       .onControllerAttached(async () => {
8142         try {
8143           data.controller.injectOfflineResources(await getData ());
8144         } catch (err) {
8145           console.error("error: " + err.code + " " + err.message);
8146         }
8147       })
8148       .fileAccess(true)
8149   }
8150
8151   export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8152
8153   export async function getData() {
8154     const resourceMapArr: Array<webview.OfflineResourceMap> = [];
8155
8156     // 读取配置,从rawfile目录中读取文件内容
8157     for (let config of resourceConfigs) {
8158       let buf: Uint8Array = new Uint8Array(0);
8159       if (config.localPath) {
8160         buf = await readRawFile(config.localPath);
8161       }
8162
8163       resourceMapArr.push({
8164         urlList: config.urlList,
8165         resource: buf,
8166         responseHeaders: config.responseHeaders,
8167         type: config.type,
8168       })
8169     }
8170
8171     return resourceMapArr;
8172   }
8173
8174   export async function readRawFile(url: string) {
8175     try {
8176       return await getContext().resourceManager.getRawFileContent(url);
8177     } catch (err) {
8178       return new Uint8Array(0);
8179     }
8180   }
8181   ```
8182
81834. 编写业务用组件代码。
8184
8185   <!--code_no_check-->
8186   ```ts
8187   // BusinessWebview.ets
8188   import { BuilderData } from "./DynamicComponent";
8189
8190   @Builder
8191   function WebBuilder(data: BuilderData) {
8192     // 此处组件可根据业务需要自行扩展
8193     Web({ src: data.url, controller: data.controller })
8194       .cacheMode(CacheMode.Default)
8195   }
8196
8197   export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder);
8198   ```
8199
82005. 编写资源配置信息。
8201
8202   ```ts
8203   // Resource.ets
8204   import { webview } from '@kit.ArkWeb';
8205
8206   export interface ResourceConfig {
8207     urlList: Array<string>,
8208     type: webview.OfflineResourceType,
8209     responseHeaders: Array<Header>,
8210     localPath: string, // 本地资源存放在rawfile目录下的路径
8211   }
8212
8213   export const resourceConfigs: Array<ResourceConfig> = [
8214     {
8215       localPath: "example.png",
8216       urlList: [
8217         "https://www.example.com/",
8218         "https://www.example.com/path1/example.png",
8219         "https://www.example.com/path2/example.png",
8220       ],
8221       type: webview.OfflineResourceType.IMAGE,
8222       responseHeaders: [
8223         { headerKey: "Cache-Control", headerValue: "max-age=1000" },
8224         { headerKey: "Content-Type", headerValue: "image/png" },
8225       ]
8226     },
8227     {
8228       localPath: "example.js",
8229       urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址
8230         "https://www.example.com/example.js",
8231       ],
8232       type: webview.OfflineResourceType.CLASSIC_JS,
8233       responseHeaders: [
8234         // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头
8235         { headerKey: "Cross-Origin", headerValue:"anonymous" }
8236       ]
8237     },
8238   ];
8239   ```
8240
82416. 在页面中使用。
8242   <!--code_no_check-->
8243   ```ts
8244   // Index.ets
8245   import { webview } from '@kit.ArkWeb';
8246   import { NodeController } from '@kit.ArkUI';
8247   import { createNode } from "./DynamicComponent"
8248   import { injectWebview } from "./InjectWebview"
8249   import { businessWebview } from "./BusinessWebview"
8250
8251   @Entry
8252   @Component
8253   struct Index {
8254     @State injectNode: NodeController | undefined = undefined;
8255     injectController: webview.WebviewController = new webview.WebviewController();
8256
8257     @State businessNode: NodeController | undefined = undefined;
8258     businessController: webview.WebviewController = new webview.WebviewController();
8259
8260     aboutToAppear(): void {
8261       // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可
8262       this.injectNode = createNode(injectWebview,
8263           { url: "https://www.example.com/empty.html", controller: this.injectController});
8264     }
8265
8266     build() {
8267       Column() {
8268         // 在适当的时机加载业务用Web组件,本例以Button点击触发为例
8269         Button("加载页面")
8270           .onClick(() => {
8271             this.businessNode = createNode(businessWebview, {
8272               url: "https://www.example.com/business.html",
8273               controller: this.businessController
8274             });
8275           })
8276         // 用于业务的Web组件
8277         NodeContainer(this.businessNode);
8278       }
8279     }
8280   }
8281   ```
8282
82837. 加载的HTML网页示例。
8284
8285   ```HTML
8286   <!DOCTYPE html>
8287   <html lang="en">
8288   <head></head>
8289   <body>
8290     <img src="https://www.example.com/path1/request.png" />
8291     <img src="https://www.example.com/path2/request.png" />
8292     <script src="https://www.example.com/example.js" crossorigin="anonymous"></script>
8293   </body>
8294   </html>
8295   ```
8296
8297### setHostIP<sup>12+</sup>
8298
8299static setHostIP(hostName: string, address: string, aliveTime: number): void
8300
8301设置主机域名解析后的IP地址。
8302
8303**系统能力:** SystemCapability.Web.Webview.Core
8304
8305**参数:**
8306
8307| 参数名    | 类型 | 必填 | 说明                             |
8308| --------- | -------- | ---- | ------------------------------------ |
8309| hostName  | string   | 是   | 要添加DNS记录的主机域名。            |
8310| address   | string   | 是   | 主机域名解析地址(支持IPv4,IPv6)。 |
8311| aliveTime | number   | 是   | 缓存有效时间(秒)。                 |
8312
8313**错误码:**
8314
8315以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8316
8317| 错误码ID | 错误信息                 |
8318| -------- | ------------------------ |
8319| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8320
8321**示例:**
8322
8323请参考[clearHostIP](#clearhostip12)。
8324
8325### clearHostIP<sup>12+</sup>
8326
8327static clearHostIP(hostName: string): void
8328
8329清除指定主机域名解析后的IP地址。
8330
8331**系统能力:** SystemCapability.Web.Webview.Core
8332
8333**参数:**
8334
8335| 参数名   | 类型 | 必填 | 说明                  |
8336| -------- | -------- | ---- | ------------------------- |
8337| hostName | string   | 是   | 要清除DNS记录的主机域名。 |
8338
8339**错误码:**
8340
8341以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8342
8343| 错误码ID | 错误信息                 |
8344| -------- | ------------------------ |
8345| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. |
8346
8347**示例:**
8348
8349```ts
8350// xxx.ets
8351import { webview } from '@kit.ArkWeb';
8352import { BusinessError } from '@kit.BasicServicesKit';
8353
8354@Entry
8355@Component
8356struct WebComponent {
8357  controller: webview.WebviewController = new webview.WebviewController();
8358
8359  build() {
8360    Column() {
8361      // url加载前设置生效.
8362      Button('setHostIP')
8363        .onClick(() => {
8364          try {
8365            webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30);
8366          } catch (error) {
8367            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8368          }
8369        })
8370      Button('clearHostIP')
8371        .onClick(() => {
8372          try {
8373            webview.WebviewController.clearHostIP('www.example.com');
8374          } catch (error) {
8375            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8376          }
8377        })
8378      Web({ src: 'www.example.com', controller: this.controller })
8379    }
8380  }
8381}
8382```
8383
8384### getSurfaceId<sup>12+</sup>
8385
8386getSurfaceId(): string
8387
8388获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。
8389
8390**系统能力:** SystemCapability.Web.Webview.Core
8391
8392**返回值:**
8393
8394| 类型   | 说明                |
8395| ------ | ------------------- |
8396| string | ArkWeb持有Surface的ID。 |
8397
8398**示例:**
8399
8400```ts
8401// xxx.ets
8402import { webview } from '@kit.ArkWeb';
8403import { image } from '@kit.ImageKit';
8404import { BusinessError } from '@kit.BasicServicesKit';
8405
8406@Entry
8407@Component
8408struct Example{
8409  controller: webview.WebviewController = new webview.WebviewController();
8410
8411  @State imagePixelMap: image.PixelMap | undefined = undefined;
8412
8413  build(){
8414    Column(){
8415      Button("截图")
8416        .onClick(()=>{
8417          try {
8418            let surfaceId = this.controller.getSurfaceId();
8419            console.log("surfaceId: " + surfaceId);
8420            if(surfaceId.length != 0) {
8421              let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}}
8422              this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region)
8423            }
8424          } catch (error) {
8425            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8426          }
8427        })
8428      Image(this.imagePixelMap)
8429        .height(100)
8430      Web({src: 'www.example.com', controller: this.controller})
8431    }
8432  }
8433}
8434```
8435
8436### setUrlTrustList<sup>12+</sup>
8437
8438setUrlTrustList(urlTrustList: string): void
8439
8440设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。
8441
8442**系统能力:** SystemCapability.Web.Webview.Core
8443
8444**参数:**
8445
8446| 参数名  | 类型    | 必填 | 说明                  |
8447| ------- | ------ | ---- | :-------------------- |
8448| 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/>} |
8449
8450**白名单json格式参数**
8451| 字段   | 参数类型 | 必填 | 参数描述                  |
8452| -------- | -------- | ---- | ------------------------- |
8453| scheme | string   | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 |
8454| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 |
8455| port | number | 否 | 可选字段,不设置即不匹配该项。 |
8456| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。|
8457
8458**错误码:**
8459
8460以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8461
8462| 错误码ID | 错误信息                                                     |
8463| -------- | ------------------------------------------------------------ |
8464| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed.                                     |
8465| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8466
8467**示例:**
8468  ```ts
8469  // xxx.ets
8470  import { webview } from '@kit.ArkWeb';
8471  import { BusinessError } from '@kit.BasicServicesKit';
8472
8473  @Entry
8474  @Component
8475  struct WebComponent {
8476    controller: webview.WebviewController = new webview.WebviewController();
8477    urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}"
8478
8479    build() {
8480      Column() {
8481        Button('Setting the trustlist')
8482          .onClick(() => {
8483            try {
8484              // 设置白名单,只允许访问trust网页
8485              this.controller.setUrlTrustList(this.urltrustList);
8486            } catch (error) {
8487              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8488            }
8489          })
8490        Button('Cancel the trustlist.')
8491          .onClick(() => {
8492            try {
8493              // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问
8494              this.controller.setUrlTrustList("");
8495            } catch (error) {
8496              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8497            }
8498          })
8499        Button('Access the trust web')
8500          .onClick(() => {
8501            try {
8502              // 白名单生效,可以访问trust网页
8503              this.controller.loadUrl('http://trust.example.com/test');
8504            } catch (error) {
8505              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8506            }
8507          })
8508        Button('Access the untrust web')
8509          .onClick(() => {
8510            try {
8511              // 白名单生效,此时不可以访问untrust网页,并弹出错误页
8512              this.controller.loadUrl('http://untrust.example.com/test');
8513            } catch (error) {
8514              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8515            }
8516          })
8517        Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => {
8518          try {
8519            // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页
8520            this.controller.setUrlTrustList(this.urltrustList);
8521          } catch (error) {
8522            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8523          }
8524        })
8525      }
8526    }
8527  }
8528  ```
8529
8530### setPathAllowingUniversalAccess<sup>12+</sup>
8531
8532setPathAllowingUniversalAccess(pathList: Array\<string\>): void
8533
8534设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileAccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一:
8535
85361.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8537
8538* /data/storage/el2/base/files/example
8539* /data/storage/el2/base/haps/entry/files/example
8540
85412.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如:
8542
8543* /data/storage/el1/bundle/entry/resource/resfile
8544* /data/storage/el1/bundle/entry/resource/resfile/example
8545
8546当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileAccess)的行为为准。
8547
8548**系统能力:** SystemCapability.Web.Webview.Core
8549
8550**参数:**
8551
8552| 参数名   | 类型 | 必填 | 说明                  |
8553| -------- | -------- | ---- | ------------------------- |
8554| pathList | Array\<string\>   | 是   | 路径列表 |
8555
8556**错误码:**
8557
8558以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8559
8560| 错误码ID | 错误信息                 |
8561| -------- | ------------------------ |
8562| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. |
8563| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8564
8565**示例:**
8566
8567```ts
8568// xxx.ets
8569import { webview } from '@kit.ArkWeb';
8570import { BusinessError } from '@kit.BasicServicesKit';
8571
8572@Entry
8573@Component
8574struct WebComponent {
8575  controller: WebviewController = new webview.WebviewController();
8576
8577  build() {
8578    Row() {
8579      Web({ src: "", controller: this.controller })
8580        .onControllerAttached(() => {
8581          try {
8582            // 设置允许可以跨域访问的路径列表
8583            this.controller.setPathAllowingUniversalAccess([
8584              getContext().resourceDir,
8585              getContext().filesDir + "/example"
8586            ])
8587            this.controller.loadUrl("file://" + getContext().resourceDir + "/index.html")
8588          } catch (error) {
8589            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8590          }
8591        })
8592        .javaScriptAccess(true)
8593        .fileAccess(true)
8594        .domStorageAccess(true)
8595    }
8596  }
8597}
8598
8599```
8600
8601加载的html文件,位于应用资源目录resource/resfile/index.html8602```html
8603<!-- index.html -->
8604<!DOCTYPE html>
8605<html lang="en">
8606
8607<head>
8608    <meta charset="utf-8">
8609    <title>Demo</title>
8610    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
8611    <script>
8612		function getFile() {
8613			var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js";
8614			var xmlHttpReq = new XMLHttpRequest();
8615			xmlHttpReq.onreadystatechange = function(){
8616			    console.log("readyState:" + xmlHttpReq.readyState);
8617			    console.log("status:" + xmlHttpReq.status);
8618				if(xmlHttpReq.readyState == 4){
8619				    if (xmlHttpReq.status == 200) {
8620                // 如果ets侧正确设置路径列表,则此处能正常获取资源
8621				        const element = document.getElementById('text');
8622                        element.textContent = "load " + file + " success";
8623				    } else {
8624                // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误
8625				        const element = document.getElementById('text');
8626                        element.textContent = "load " + file + " failed";
8627				    }
8628				}
8629			}
8630			xmlHttpReq.open("GET", file);
8631			xmlHttpReq.send(null);
8632		}
8633
8634    </script>
8635</head>
8636
8637<body>
8638<div class="page">
8639    <button id="example" onclick="getFile()">stealFile</button>
8640</div>
8641<div id="text"></div>
8642</body>
8643
8644</html>
8645```
8646
8647html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/resfile/js/script.js8648<!--code_no_check-->
8649```javascript
8650const body = document.body;
8651const element = document.createElement('div');
8652element.textContent = 'success';
8653body.appendChild(element);
8654```
8655
8656### enableBackForwardCache<sup>12+</sup>
8657
8658static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void
8659
8660开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。
8661
8662需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。
8663
8664**系统能力:**  SystemCapability.Web.Webview.Core
8665
8666**参数:**
8667
8668| 参数名          | 类型    |  必填  | 说明                                            |
8669| ---------------| ------- | ---- | ------------- |
8670| features     |  [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是   | 允许使用特定的页面进入前进后退缓存中。|
8671
8672**示例:**
8673
8674```ts
8675// EntryAbility.ets
8676import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
8677import { hilog } from '@kit.PerformanceAnalysisKit';
8678import { window } from '@kit.ArkUI';
8679import { webview } from '@kit.ArkWeb';
8680
8681export default class EntryAbility extends UIAbility {
8682    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
8683        let features = new webview.BackForwardCacheSupportedFeatures();
8684        features.nativeEmbed = true;
8685        features.mediaTakeOver = true;
8686        // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和
8687        // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。
8688        webview.WebviewController.enableBackForwardCache(features);
8689        webview.WebviewController.initializeWebEngine();
8690        AppStorage.setOrCreate("abilityWant", want);
8691    }
8692}
8693```
8694
8695### setBackForwardCacheOptions<sup>12+</sup>
8696
8697setBackForwardCacheOptions(options: BackForwardCacheOptions): void
8698
8699可以设置Web组件中前进后退缓存的相关选项。
8700
8701**系统能力:**  SystemCapability.Web.Webview.Core
8702
8703**参数:**
8704
8705| 参数名          | 类型    |  必填  | 说明                                            |
8706| ---------------| ------- | ---- | ------------- |
8707| options     |  [BackForwardCacheOptions](#backforwardcacheoptions12) | 是   | 用来控制web组件前进后退缓存相关选项。|
8708
8709**错误码:**
8710
8711以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8712
8713| 错误码ID | 错误信息                                                     |
8714| -------- | ------------------------------------------------------------ |
8715| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8716
8717**示例:**
8718
8719```ts
8720// xxx.ts
8721import { webview } from '@kit.ArkWeb';
8722
8723@Entry
8724@Component
8725struct Index {
8726  controller: webview.WebviewController = new webview.WebviewController();
8727
8728  build() {
8729    Column() {
8730      Row() {
8731        Button("Add options").onClick((event: ClickEvent) => {
8732          let options = new webview.BackForwardCacheOptions();
8733          options.size = 3;
8734          options.timeToLive = 10;
8735          this.controller.setBackForwardCacheOptions(options);
8736        })
8737        Button("Backward").onClick((event: ClickEvent) => {
8738          this.controller.backward();
8739        })
8740        Button("Forward").onClick((event: ClickEvent) => {
8741          this.controller.forward();
8742        })
8743      }
8744      Web({ src: "https://www.example.com", controller: this.controller })
8745    }
8746    .height('100%')
8747    .width('100%')
8748  }
8749}
8750```
8751
8752### trimMemoryByPressureLevel<sup>14+</sup>
8753
8754trimMemoryByPressureLevel(level: number): void
8755
8756根据指定的内存压力等级,主动清理Web组件占用的缓存。
8757
8758**系统能力:** SystemCapability.Web.Webview.Core
8759
8760**参数:**
8761
8762| 参数名  | 类型    | 必填 | 说明                  |
8763| ------- | ------ | ---- | :-------------------- |
8764| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。|
8765
8766**错误码:**
8767
8768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
8769
8770| 错误码ID | 错误信息                                                     |
8771| -------- | ------------------------------------------------------------ |
8772| 401      | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed. |
8773
8774**示例:**
8775```ts
8776// xxx.ets
8777import { webview } from '@kit.ArkWeb';
8778import { BusinessError } from '@kit.BasicServicesKit';
8779
8780@Entry
8781@Component
8782struct WebComponent {
8783  controller: WebviewController = new webview.WebviewController();
8784  build() {
8785    Column() {
8786      Row() {
8787        Button('trim_Memory')
8788          .onClick(() => {
8789            try {
8790              // 设置当前内存压力等级为适中,释放少量内存
8791              webview.WebviewController.trimMemoryByPressureLevel(
8792                webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE);
8793            } catch (error) {
8794              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8795            }
8796          })
8797      }.height('10%')
8798      Web({ src: 'www.example.com', controller: this.controller })
8799    }
8800  }
8801}
8802```
8803
8804### createPdf<sup>14+</sup>
8805
8806createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void
8807
8808异步callback方式获取指定网页的数据流。
8809
8810**系统能力:** SystemCapability.Web.Webview.Core
8811
8812**参数:**
8813
8814| 参数名        | 类型                                    | 必填 | 说明                    |
8815| ------------- | --------------------------------------- | ---- | ----------------------- |
8816| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。       |
8817| callback      | AsyncCallback<[PdfData](#pdfdata14)>    | 是   | 回调返回网页PDF数据流。 |
8818
8819| 错误码ID | 错误信息                                                     |
8820| -------- | ------------------------------------------------------------ |
8821| 401      | Parameter error. Possible causes: Incorrect parameter types. |
8822| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8823
8824**示例**:
8825
8826```ts
8827import { fileIo as fs } from '@kit.CoreFileKit';
8828import { webview } from '@kit.ArkWeb';
8829import { BusinessError } from '@kit.BasicServicesKit';
8830import { common } from '@kit.AbilityKit';
8831
8832@Entry
8833@Component
8834struct Index {
8835  controller: webview.WebviewController = new webview.WebviewController();
8836  pdfConfig: webview.PdfConfiguration = {
8837    width: 8.27,
8838    height: 11.69,
8839    marginTop: 0,
8840    marginBottom: 0,
8841    marginRight: 0,
8842    marginLeft: 0,
8843    shouldPrintBackground: true
8844  }
8845
8846  build() {
8847    Column() {
8848      Button('SavePDF')
8849        .onClick(() => {
8850          this.controller.createPdf(
8851            this.pdfConfig,
8852            (error, result: webview.PdfData) => {
8853              try {
8854                // 获取组件上下文
8855                let context = getContext(this) as common.UIAbilityContext;
8856                // 获取沙箱路径,设置pdf文件名
8857                let filePath = context.filesDir + "/test.pdf";
8858                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
8859                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
8860                  console.info("createPDF write data to file succeed and size is:" + writeLen);
8861                }).catch((err: BusinessError) => {
8862                  console.error("createPDF write data to file failed with error message: " + err.message +
8863                    ", error code: " + err.code);
8864                }).finally(() => {
8865                  fs.closeSync(file);
8866                });
8867              } catch (resError) {
8868                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
8869              }
8870            });
8871        })
8872      Web({ src: "www.example.com", controller: this.controller })
8873    }
8874  }
8875}
8876```
8877
8878### createPdf<sup>14+</sup>
8879
8880createPdf(configuration: PdfConfiguration): Promise\<PdfData\>
8881
8882以Promise方式异步获取指定网页的数据流。
8883
8884**系统能力:** SystemCapability.Web.Webview.Core
8885
8886**参数:**
8887
8888| 参数名        | 类型                                    | 必填 | 说明              |
8889| ------------- | --------------------------------------- | ---- | ----------------- |
8890| configuration | [PdfConfiguration](#pdfconfiguration14) | 是   | 生成PDF所需参数。 |
8891
8892**返回值:**
8893
8894| 类型                           | 说明                          |
8895| ------------------------------ | ----------------------------- |
8896| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 |
8897
8898| 错误码ID | 错误信息                                                     |
8899| -------- | ------------------------------------------------------------ |
8900| 401      | Parameter error. Possible causes: Incorrect parameter types. |
8901| 17100001 | Init error. The WebviewController must be associated with a Web component. |
8902
8903**示例**:
8904
8905```ts
8906import { fileIo as fs } from '@kit.CoreFileKit';
8907import { webview } from '@kit.ArkWeb';
8908import { BusinessError } from '@kit.BasicServicesKit';
8909import { common } from '@kit.AbilityKit';
8910
8911@Entry
8912@Component
8913struct Index {
8914  controller: webview.WebviewController = new webview.WebviewController();
8915  pdfConfig: webview.PdfConfiguration = {
8916    width: 8.27,
8917    height: 11.69,
8918    marginTop: 0,
8919    marginBottom: 0,
8920    marginRight: 0,
8921    marginLeft: 0,
8922    shouldPrintBackground: true
8923  }
8924
8925  build() {
8926    Column() {
8927      Button('SavePDF')
8928        .onClick(() => {
8929          this.controller.createPdf(this.pdfConfig)
8930            .then((result: webview.PdfData) => {
8931              try {
8932                // 获取组件上下文
8933                let context = getContext(this) as common.UIAbilityContext;
8934                // 获取沙箱路径,设置pdf文件名
8935                let filePath = context.filesDir + "/test.pdf";
8936                let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
8937                fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => {
8938                  console.info("createPDF write data to file succeed and size is:" + writeLen);
8939                }).catch((err: BusinessError) => {
8940                  console.error("createPDF write data to file failed with error message: " + err.message +
8941                    ", error code: " + err.code);
8942                }).finally(() => {
8943                  fs.closeSync(file);
8944                });
8945              } catch (resError) {
8946                console.error(`ErrorCode: ${(resError as BusinessError).code},  Message: ${(resError as BusinessError).message}`);
8947              }
8948            })
8949        })
8950      Web({ src: "www.example.com", controller: this.controller })
8951    }
8952  }
8953}
8954```
8955
8956### getScrollOffset<sup>13+</sup>
8957
8958getScrollOffset(): ScrollOffset
8959
8960获取网页当前的滚动偏移量。
8961
8962**系统能力:** SystemCapability.Web.Webview.Core
8963
8964**返回值**
8965
8966| 类型                            | 说明                   |
8967| :------------------------------ | ---------------------- |
8968| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 |
8969
8970**示例:**
8971
8972```ts
8973import { webview } from '@kit.ArkWeb';
8974import { componentUtils } from '@kit.ArkUI';
8975
8976@Entry
8977@Component
8978struct WebComponent {
8979  @State testTitle: string = 'webScroll'
8980  controller: webview.WebviewController = new webview.WebviewController();
8981  @State controllerX: number =-100;
8982  @State controllerY: number =-100;
8983  @State mode: OverScrollMode = OverScrollMode.ALWAYS;
8984
8985  build() {
8986    Column() {
8987      Row() {
8988        Text(this.testTitle)
8989          .fontSize(30)
8990          .fontWeight(FontWeight.Bold)
8991          .margin(5)
8992      }
8993      Column() {
8994        Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`)
8995      }
8996      .margin({ top: 10, bottom: 10 })
8997      Web({ src: $rawfile("scrollByTo.html"), controller: this.controller })
8998        .key("web_01")
8999        .overScrollMode(this.mode)
9000        .onTouch((event) => {
9001          this.controllerX = this.controller.getScrollOffset().x;
9002          this.controllerY = this.controller.getScrollOffset().y;
9003          let componentInfo = componentUtils.getRectangleById("web_01");
9004          let webHeight = px2vp(componentInfo.size.height);
9005          let pageHeight = this.controller.getPageHeight();
9006          if (this.controllerY < 0) {
9007            // case1:网页向下过滚动时,可直接使用ScrollOffset.y
9008            console.log(`get downwards overscroll offsetY = ${this.controllerY}`);
9009          } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) {
9010            // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量
9011            console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`);
9012          } else {
9013            // case3:网页未发生过滚动时,可直接使用ScrollOffset.y
9014            console.log(`get scroll offsetY = ${this.controllerY}`);
9015          }
9016        })
9017        .height(600)
9018    }
9019    .width('100%')
9020    .height('100%')
9021  }
9022}
9023```
9024
9025## WebCookieManager
9026
9027通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。
9028
9029### getCookie<sup>(deprecated)</sup>
9030
9031static getCookie(url: string): string
9032
9033获取指定url对应cookie的值。
9034
9035> **说明:**
9036>
9037> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代
9038
9039**系统能力:** SystemCapability.Web.Webview.Core
9040
9041**参数:**
9042
9043| 参数名 | 类型   | 必填 | 说明                      |
9044| ------ | ------ | ---- | :------------------------ |
9045| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9046
9047**返回值:**
9048
9049| 类型   | 说明                      |
9050| ------ | ------------------------- |
9051| string | 指定url对应的cookie的值。 |
9052
9053**错误码:**
9054
9055以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9056
9057| 错误码ID | 错误信息                                               |
9058| -------- | ------------------------------------------------------ |
9059| 17100002 | Invalid url.                                           |
9060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9061
9062**示例:**
9063
9064```ts
9065// xxx.ets
9066import { webview } from '@kit.ArkWeb';
9067import { BusinessError } from '@kit.BasicServicesKit';
9068
9069@Entry
9070@Component
9071struct WebComponent {
9072  controller: webview.WebviewController = new webview.WebviewController();
9073
9074  build() {
9075    Column() {
9076      Button('getCookie')
9077        .onClick(() => {
9078          try {
9079            let value = webview.WebCookieManager.getCookie('https://www.example.com');
9080            console.log("value: " + value);
9081          } catch (error) {
9082            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9083          }
9084        })
9085      Web({ src: 'www.example.com', controller: this.controller })
9086    }
9087  }
9088}
9089```
9090
9091### fetchCookieSync<sup>11+</sup>
9092
9093static fetchCookieSync(url: string, incognito?: boolean): string
9094
9095获取指定url对应cookie的值。
9096
9097**系统能力:** SystemCapability.Web.Webview.Core
9098
9099**参数:**
9100
9101| 参数名 | 类型   | 必填 | 说明                      |
9102| ------ | ------ | ---- | :------------------------ |
9103| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9104| incognito    | boolean | 否   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9105
9106**返回值:**
9107
9108| 类型   | 说明                      |
9109| ------ | ------------------------- |
9110| string | 指定url对应的cookie的值。 |
9111
9112**错误码:**
9113
9114以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9115
9116| 错误码ID | 错误信息                                               |
9117| -------- | ------------------------------------------------------ |
9118| 17100002 | Invalid url.                                           |
9119| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9120
9121**示例:**
9122
9123```ts
9124// xxx.ets
9125import { webview } from '@kit.ArkWeb';
9126import { BusinessError } from '@kit.BasicServicesKit';
9127
9128@Entry
9129@Component
9130struct WebComponent {
9131  controller: webview.WebviewController = new webview.WebviewController();
9132
9133  build() {
9134    Column() {
9135      Button('fetchCookieSync')
9136        .onClick(() => {
9137          try {
9138            let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com');
9139            console.log("fetchCookieSync cookie = " + value);
9140          } catch (error) {
9141            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9142          }
9143        })
9144      Web({ src: 'www.example.com', controller: this.controller })
9145    }
9146  }
9147}
9148```
9149
9150### fetchCookie<sup>11+</sup>
9151
9152static fetchCookie(url: string, callback: AsyncCallback\<string>): void
9153
9154异步callback方式获取指定url对应cookie的值。
9155
9156**系统能力:** SystemCapability.Web.Webview.Core
9157
9158**参数:**
9159
9160| 参数名 | 类型   | 必填 | 说明                      |
9161| ------ | ------ | ---- | :------------------------ |
9162| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9163| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie |
9164
9165**错误码:**
9166
9167以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9168
9169| 错误码ID | 错误信息                                               |
9170| -------- | ------------------------------------------------------ |
9171| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9172| 17100002 | Invalid url.                                           |
9173
9174**示例:**
9175
9176```ts
9177// xxx.ets
9178import { webview } from '@kit.ArkWeb';
9179import { BusinessError } from '@kit.BasicServicesKit';
9180
9181@Entry
9182@Component
9183struct WebComponent {
9184  controller: webview.WebviewController = new webview.WebviewController();
9185
9186  build() {
9187    Column() {
9188      Button('fetchCookie')
9189        .onClick(() => {
9190          try {
9191            webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => {
9192              if (error) {
9193                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9194                return;
9195              }
9196              if (cookie) {
9197                console.log('fetchCookie cookie = ' + cookie);
9198              }
9199            })
9200          } catch (error) {
9201            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9202          }
9203        })
9204      Web({ src: 'www.example.com', controller: this.controller })
9205    }
9206  }
9207}
9208```
9209
9210### fetchCookie<sup>11+</sup>
9211
9212static fetchCookie(url: string): Promise\<string>
9213
9214以Promise方式异步获取指定url对应cookie的值。
9215
9216**系统能力:** SystemCapability.Web.Webview.Core
9217
9218**参数:**
9219
9220| 参数名 | 类型   | 必填 | 说明                      |
9221| ------ | ------ | ---- | :------------------------ |
9222| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9223
9224**返回值:**
9225
9226| 类型   | 说明                      |
9227| ------ | ------------------------- |
9228| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9229
9230**错误码:**
9231
9232以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9233
9234| 错误码ID | 错误信息                                               |
9235| -------- | ------------------------------------------------------ |
9236| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9237| 17100002 | Invalid url.                                           |
9238
9239**示例:**
9240
9241```ts
9242// xxx.ets
9243import { webview } from '@kit.ArkWeb';
9244import { BusinessError } from '@kit.BasicServicesKit';
9245
9246@Entry
9247@Component
9248struct WebComponent {
9249  controller: webview.WebviewController = new webview.WebviewController();
9250
9251  build() {
9252    Column() {
9253      Button('fetchCookie')
9254        .onClick(() => {
9255          try {
9256            webview.WebCookieManager.fetchCookie('https://www.example.com')
9257              .then(cookie => {
9258                console.log("fetchCookie cookie = " + cookie);
9259              })
9260              .catch((error: BusinessError) => {
9261                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9262              })
9263          } catch (error) {
9264            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9265          }
9266        })
9267      Web({ src: 'www.example.com', controller: this.controller })
9268    }
9269  }
9270}
9271```
9272
9273### fetchCookie<sup>14+</sup>
9274
9275static fetchCookie(url: string, incognito: boolean): Promise\<string>
9276
9277以Promise方式异步获取指定url对应cookie的值。
9278
9279**系统能力:** SystemCapability.Web.Webview.Core
9280
9281**参数:**
9282
9283| 参数名 | 类型   | 必填 | 说明                      |
9284| ------ | ------ | ---- | :------------------------ |
9285| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9286| incognito    | boolean | 是   | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 |
9287
9288**返回值:**
9289
9290| 类型   | 说明                      |
9291| ------ | ------------------------- |
9292| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 |
9293
9294**错误码:**
9295
9296以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9297
9298| 错误码ID | 错误信息                                               |
9299| -------- | ------------------------------------------------------ |
9300| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9301| 17100002 | Invalid url.                                           |
9302
9303**示例:**
9304
9305```ts
9306// xxx.ets
9307import { webview } from '@kit.ArkWeb';
9308import { BusinessError } from '@kit.BasicServicesKit';
9309
9310@Entry
9311@Component
9312struct WebComponent {
9313  controller: webview.WebviewController = new webview.WebviewController();
9314
9315  build() {
9316    Column() {
9317      Button('fetchCookie')
9318        .onClick(() => {
9319          try {
9320            webview.WebCookieManager.fetchCookie('https://www.example.com', false)
9321              .then(cookie => {
9322                console.log("fetchCookie cookie = " + cookie);
9323              })
9324              .catch((error: BusinessError) => {
9325                console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
9326              })
9327          } catch (error) {
9328            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9329          }
9330        })
9331      Web({ src: 'www.example.com', controller: this.controller })
9332    }
9333  }
9334}
9335```
9336
9337### setCookie<sup>(deprecated)</sup>
9338
9339static setCookie(url: string, value: string): void
9340
9341为指定url设置单个cookie的值。
9342
9343> **说明:**
9344>
9345> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代
9346
9347**系统能力:** SystemCapability.Web.Webview.Core
9348
9349**参数:**
9350
9351| 参数名 | 类型   | 必填 | 说明                      |
9352| ------ | ------ | ---- | :------------------------ |
9353| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9354| value  | string | 是   | 要设置的cookie的值。      |
9355
9356**错误码:**
9357
9358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9359
9360| 错误码ID | 错误信息                                               |
9361| -------- | ------------------------------------------------------ |
9362| 17100002 | Invalid url.                                           |
9363| 17100005 | Invalid cookie value.                                  |
9364| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9365
9366**示例:**
9367
9368```ts
9369// xxx.ets
9370import { webview } from '@kit.ArkWeb';
9371import { BusinessError } from '@kit.BasicServicesKit';
9372
9373@Entry
9374@Component
9375struct WebComponent {
9376  controller: webview.WebviewController = new webview.WebviewController();
9377
9378  build() {
9379    Column() {
9380      Button('setCookie')
9381        .onClick(() => {
9382          try {
9383            webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
9384          } catch (error) {
9385            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9386          }
9387        })
9388      Web({ src: 'www.example.com', controller: this.controller })
9389    }
9390  }
9391}
9392```
9393
9394### configCookieSync<sup>11+</sup>
9395
9396static configCookieSync(url: string, value: string, incognito?: boolean): void
9397
9398为指定url设置cookie的值。
9399
9400> **说明:**
9401>
9402>configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
9403
9404>同步cookie的时机建议在Web组件加载之前完成。
9405
9406**系统能力:** SystemCapability.Web.Webview.Core
9407
9408**参数:**
9409
9410| 参数名 | 类型   | 必填 | 说明                      |
9411| ------ | ------ | ---- | :------------------------ |
9412| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9413| value  | string | 是   | 要设置的cookie的值。      |
9414| incognito    | boolean | 否   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9415
9416**错误码:**
9417
9418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9419
9420| 错误码ID | 错误信息                                               |
9421| -------- | ------------------------------------------------------ |
9422| 17100002 | Invalid url.                                           |
9423| 17100005 | Invalid cookie value.                                  |
9424| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9425
9426**示例:**
9427
9428```ts
9429// xxx.ets
9430import { webview } from '@kit.ArkWeb';
9431import { BusinessError } from '@kit.BasicServicesKit';
9432
9433@Entry
9434@Component
9435struct WebComponent {
9436  controller: webview.WebviewController = new webview.WebviewController();
9437
9438  build() {
9439    Column() {
9440      Button('configCookieSync')
9441        .onClick(() => {
9442          try {
9443            // 仅支持设置单个cookie值。
9444            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b');
9445          } catch (error) {
9446            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9447          }
9448        })
9449      Web({ src: 'www.example.com', controller: this.controller })
9450    }
9451  }
9452}
9453```
9454
9455### configCookieSync<sup>14+</sup>
9456
9457static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void
9458
9459为指定url设置cookie的值。
9460
9461**系统能力:** SystemCapability.Web.Webview.Core
9462
9463**参数:**
9464
9465| 参数名 | 类型   | 必填 | 说明                      |
9466| ------ | ------ | ---- | :------------------------ |
9467| url    | string | 是   | 要设置的cookie所属的url,建议使用完整的url。 |
9468| value  | string | 是   | 要设置的cookie的值。      |
9469| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9470| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9471
9472**错误码:**
9473
9474以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9475
9476| 错误码ID | 错误信息                                               |
9477| -------- | ------------------------------------------------------ |
9478| 17100002 | Invalid url.                                           |
9479| 17100005 | Invalid cookie value.                                  |
9480| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9481
9482**示例:**
9483
9484```ts
9485// xxx.ets
9486import { webview } from '@kit.ArkWeb';
9487import { BusinessError } from '@kit.BasicServicesKit';
9488
9489@Entry
9490@Component
9491struct WebComponent {
9492  controller: webview.WebviewController = new webview.WebviewController();
9493
9494  build() {
9495    Column() {
9496      Button('configCookieSync')
9497        .onClick(() => {
9498          try {
9499            // 仅支持设置单个cookie值。
9500            webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false);
9501          } catch (error) {
9502            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9503          }
9504        })
9505      Web({ src: 'www.example.com', controller: this.controller })
9506    }
9507  }
9508}
9509```
9510
9511### configCookie<sup>11+</sup>
9512
9513static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void
9514
9515异步callback方式为指定url设置单个cookie的值。
9516
9517**系统能力:** SystemCapability.Web.Webview.Core
9518
9519**参数:**
9520
9521| 参数名 | 类型   | 必填 | 说明                      |
9522| ------ | ------ | ---- | :------------------------ |
9523| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9524| value  | string | 是   | 要设置的cookie的值。      |
9525| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 |
9526
9527**错误码:**
9528
9529以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9530
9531| 错误码ID | 错误信息                                               |
9532| -------- | ------------------------------------------------------ |
9533| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9534| 17100002 | Invalid url.                                           |
9535| 17100005 | Invalid cookie value.                                  |
9536
9537**示例:**
9538
9539```ts
9540// xxx.ets
9541import { webview } from '@kit.ArkWeb';
9542import { BusinessError } from '@kit.BasicServicesKit';
9543
9544@Entry
9545@Component
9546struct WebComponent {
9547  controller: webview.WebviewController = new webview.WebviewController();
9548
9549  build() {
9550    Column() {
9551      Button('configCookie')
9552        .onClick(() => {
9553          try {
9554            webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => {
9555              if (error) {
9556                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9557              }
9558            })
9559          } catch (error) {
9560            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9561          }
9562        })
9563      Web({ src: 'www.example.com', controller: this.controller })
9564    }
9565  }
9566}
9567```
9568
9569### configCookie<sup>11+</sup>
9570
9571static configCookie(url: string, value: string): Promise\<void>
9572
9573以异步Promise方式为指定url设置单个cookie的值。
9574
9575**系统能力:** SystemCapability.Web.Webview.Core
9576
9577**参数:**
9578
9579| 参数名 | 类型   | 必填 | 说明                      |
9580| ------ | ------ | ---- | :------------------------ |
9581| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9582| value  | string | 是   | 要设置的cookie的值。      |
9583
9584**返回值:**
9585
9586| 类型   | 说明                      |
9587| ------ | ------------------------- |
9588| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9589
9590**错误码:**
9591
9592以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9593
9594| 错误码ID | 错误信息                                                |
9595| -------- | ------------------------------------------------------ |
9596| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9597| 17100002 | Invalid url.                                           |
9598| 17100005 | Invalid cookie value.                                  |
9599
9600**示例:**
9601
9602```ts
9603// xxx.ets
9604import { webview } from '@kit.ArkWeb';
9605import { BusinessError } from '@kit.BasicServicesKit';
9606
9607@Entry
9608@Component
9609struct WebComponent {
9610  controller: webview.WebviewController = new webview.WebviewController();
9611
9612  build() {
9613    Column() {
9614      Button('configCookie')
9615        .onClick(() => {
9616          try {
9617            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b')
9618              .then(() => {
9619                console.log('configCookie success!');
9620              })
9621              .catch((error: BusinessError) => {
9622                console.log('error: ' + JSON.stringify(error));
9623              })
9624          } catch (error) {
9625            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9626          }
9627        })
9628      Web({ src: 'www.example.com', controller: this.controller })
9629    }
9630  }
9631}
9632```
9633
9634### configCookie<sup>14+</sup>
9635
9636static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void>
9637
9638以异步Promise方式为指定url设置单个cookie的值。
9639
9640**系统能力:** SystemCapability.Web.Webview.Core
9641
9642**参数:**
9643
9644| 参数名 | 类型   | 必填 | 说明                      |
9645| ------ | ------ | ---- | :------------------------ |
9646| url    | string | 是   | 要获取的cookie所属的url,建议使用完整的url。 |
9647| value  | string | 是   | 要设置的cookie的值。      |
9648| incognito    | boolean | 是   | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 |
9649| includeHttpOnly    | boolean | 是   | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 |
9650
9651**返回值:**
9652
9653| 类型   | 说明                      |
9654| ------ | ------------------------- |
9655| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 |
9656
9657**错误码:**
9658
9659以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9660
9661| 错误码ID | 错误信息                                                |
9662| -------- | ------------------------------------------------------ |
9663| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
9664| 17100002 | Invalid url.                                           |
9665| 17100005 | Invalid cookie value.                                  |
9666
9667**示例:**
9668
9669```ts
9670// xxx.ets
9671import { webview } from '@kit.ArkWeb';
9672import { BusinessError } from '@kit.BasicServicesKit';
9673
9674@Entry
9675@Component
9676struct WebComponent {
9677  controller: webview.WebviewController = new webview.WebviewController();
9678
9679  build() {
9680    Column() {
9681      Button('configCookie')
9682        .onClick(() => {
9683          try {
9684            webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false)
9685              .then(() => {
9686                console.log('configCookie success!');
9687              })
9688              .catch((error: BusinessError) => {
9689                console.log('error: ' + JSON.stringify(error));
9690              })
9691          } catch (error) {
9692            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9693          }
9694        })
9695      Web({ src: 'www.example.com', controller: this.controller })
9696    }
9697  }
9698}
9699```
9700
9701### saveCookieAsync
9702
9703static saveCookieAsync(callback: AsyncCallback\<void>): void
9704
9705将当前存在内存中的cookie异步保存到磁盘中。
9706
9707**系统能力:** SystemCapability.Web.Webview.Core
9708
9709**参数:**
9710
9711| 参数名   | 类型                   | 必填 | 说明                                               |
9712| -------- | ---------------------- | ---- | :------------------------------------------------- |
9713| callback | AsyncCallback\<void> | 是   | callback回调,用于获取cookie是否成功保存。 |
9714
9715**错误码:**
9716
9717以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9718
9719| 错误码ID | 错误信息                                                |
9720| -------- | ------------------------------------------------------ |
9721| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9722
9723**示例:**
9724
9725```ts
9726// xxx.ets
9727import { webview } from '@kit.ArkWeb';
9728import { BusinessError } from '@kit.BasicServicesKit';
9729
9730@Entry
9731@Component
9732struct WebComponent {
9733  controller: webview.WebviewController = new webview.WebviewController();
9734
9735  build() {
9736    Column() {
9737      Button('saveCookieAsync')
9738        .onClick(() => {
9739          try {
9740            webview.WebCookieManager.saveCookieAsync((error) => {
9741              if (error) {
9742                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9743              }
9744            })
9745          } catch (error) {
9746            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9747          }
9748        })
9749      Web({ src: 'www.example.com', controller: this.controller })
9750    }
9751  }
9752}
9753```
9754
9755### saveCookieAsync
9756
9757static saveCookieAsync(): Promise\<void>
9758
9759将当前存在内存中的cookie以Promise方法异步保存到磁盘中。
9760
9761**系统能力:** SystemCapability.Web.Webview.Core
9762
9763**返回值:**
9764
9765| 类型             | 说明                                      |
9766| ---------------- | ----------------------------------------- |
9767| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 |
9768
9769**错误码:**
9770
9771以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9772
9773| 错误码ID | 错误信息                                                |
9774| -------- | ------------------------------------------------------ |
9775| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9776
9777**示例:**
9778
9779```ts
9780// xxx.ets
9781import { webview } from '@kit.ArkWeb';
9782import { BusinessError } from '@kit.BasicServicesKit';
9783
9784@Entry
9785@Component
9786struct WebComponent {
9787  controller: webview.WebviewController = new webview.WebviewController();
9788
9789  build() {
9790    Column() {
9791      Button('saveCookieAsync')
9792        .onClick(() => {
9793          try {
9794            webview.WebCookieManager.saveCookieAsync()
9795              .then(() => {
9796                console.log("saveCookieAsyncCallback success!");
9797              })
9798              .catch((error: BusinessError) => {
9799                console.error("error: " + error);
9800              });
9801          } catch (error) {
9802            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9803          }
9804        })
9805      Web({ src: 'www.example.com', controller: this.controller })
9806    }
9807  }
9808}
9809```
9810
9811### putAcceptCookieEnabled
9812
9813static putAcceptCookieEnabled(accept: boolean): void
9814
9815设置WebCookieManager实例是否拥有发送和接收cookie的权限。
9816
9817**系统能力:** SystemCapability.Web.Webview.Core
9818
9819**参数:**
9820
9821| 参数名 | 类型    | 必填 | 说明                                 |
9822| ------ | ------- | ---- | :----------------------------------- |
9823| accept | boolean | 是   | 设置是否拥有发送和接收cookie的权限,默认为true。 |
9824
9825**错误码:**
9826
9827以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9828
9829| 错误码ID | 错误信息                                                |
9830| -------- | ------------------------------------------------------ |
9831| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9832
9833**示例:**
9834
9835```ts
9836// xxx.ets
9837import { webview } from '@kit.ArkWeb';
9838import { BusinessError } from '@kit.BasicServicesKit';
9839
9840@Entry
9841@Component
9842struct WebComponent {
9843  controller: webview.WebviewController = new webview.WebviewController();
9844
9845  build() {
9846    Column() {
9847      Button('putAcceptCookieEnabled')
9848        .onClick(() => {
9849          try {
9850            webview.WebCookieManager.putAcceptCookieEnabled(false);
9851          } catch (error) {
9852            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9853          }
9854        })
9855      Web({ src: 'www.example.com', controller: this.controller })
9856    }
9857  }
9858}
9859```
9860
9861### isCookieAllowed
9862
9863static isCookieAllowed(): boolean
9864
9865获取WebCookieManager实例是否拥有发送和接收cookie的权限。
9866
9867**系统能力:** SystemCapability.Web.Webview.Core
9868
9869**返回值:**
9870
9871| 类型    | 说明                             |
9872| ------- | -------------------------------- |
9873| boolean | 是否拥有发送和接收cookie的权限,默认为true。 |
9874
9875**示例:**
9876
9877```ts
9878// xxx.ets
9879import { webview } from '@kit.ArkWeb';
9880
9881@Entry
9882@Component
9883struct WebComponent {
9884  controller: webview.WebviewController = new webview.WebviewController();
9885
9886  build() {
9887    Column() {
9888      Button('isCookieAllowed')
9889        .onClick(() => {
9890          let result = webview.WebCookieManager.isCookieAllowed();
9891          console.log("result: " + result);
9892        })
9893      Web({ src: 'www.example.com', controller: this.controller })
9894    }
9895  }
9896}
9897```
9898
9899### putAcceptThirdPartyCookieEnabled
9900
9901static putAcceptThirdPartyCookieEnabled(accept: boolean): void
9902
9903设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
9904
9905**系统能力:** SystemCapability.Web.Webview.Core
9906
9907**参数:**
9908
9909| 参数名 | 类型    | 必填 | 说明                                       |
9910| ------ | ------- | ---- | :----------------------------------------- |
9911| accept | boolean | 是   | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 |
9912
9913**错误码:**
9914
9915以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
9916
9917| 错误码ID | 错误信息                                                |
9918| -------- | ------------------------------------------------------ |
9919| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
9920
9921**示例:**
9922
9923```ts
9924// xxx.ets
9925import { webview } from '@kit.ArkWeb';
9926import { BusinessError } from '@kit.BasicServicesKit';
9927
9928@Entry
9929@Component
9930struct WebComponent {
9931  controller: webview.WebviewController = new webview.WebviewController();
9932
9933  build() {
9934    Column() {
9935      Button('putAcceptThirdPartyCookieEnabled')
9936        .onClick(() => {
9937          try {
9938            webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
9939          } catch (error) {
9940            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
9941          }
9942        })
9943      Web({ src: 'www.example.com', controller: this.controller })
9944    }
9945  }
9946}
9947```
9948
9949### isThirdPartyCookieAllowed
9950
9951static isThirdPartyCookieAllowed(): boolean
9952
9953获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。
9954
9955**系统能力:** SystemCapability.Web.Webview.Core
9956
9957**返回值:**
9958
9959| 类型    | 说明                                   |
9960| ------- | -------------------------------------- |
9961| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 |
9962
9963**示例:**
9964
9965```ts
9966// xxx.ets
9967import { webview } from '@kit.ArkWeb';
9968
9969@Entry
9970@Component
9971struct WebComponent {
9972  controller: webview.WebviewController = new webview.WebviewController();
9973
9974  build() {
9975    Column() {
9976      Button('isThirdPartyCookieAllowed')
9977        .onClick(() => {
9978          let result = webview.WebCookieManager.isThirdPartyCookieAllowed();
9979          console.log("result: " + result);
9980        })
9981      Web({ src: 'www.example.com', controller: this.controller })
9982    }
9983  }
9984}
9985```
9986
9987### existCookie
9988
9989static existCookie(incognito?: boolean): boolean
9990
9991获取是否存在cookie。
9992
9993**系统能力:** SystemCapability.Web.Webview.Core
9994
9995**参数:**
9996
9997| 参数名 | 类型    | 必填 | 说明                                       |
9998| ------ | ------- | ---- | :----------------------------------------- |
9999| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 |
10000
10001**返回值:**
10002
10003| 类型    | 说明                                   |
10004| ------- | -------------------------------------- |
10005| boolean | true表示存在cookie,false表示不存在cookie。 |
10006
10007**示例:**
10008
10009```ts
10010// xxx.ets
10011import { webview } from '@kit.ArkWeb';
10012
10013@Entry
10014@Component
10015struct WebComponent {
10016  controller: webview.WebviewController = new webview.WebviewController();
10017
10018  build() {
10019    Column() {
10020      Button('existCookie')
10021        .onClick(() => {
10022          let result = webview.WebCookieManager.existCookie();
10023          console.log("result: " + result);
10024        })
10025      Web({ src: 'www.example.com', controller: this.controller })
10026    }
10027  }
10028}
10029```
10030
10031### deleteEntireCookie<sup>(deprecated)</sup>
10032
10033static deleteEntireCookie(): void
10034
10035清除所有cookie。
10036
10037> **说明:**
10038>
10039> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代
10040
10041**系统能力:** SystemCapability.Web.Webview.Core
10042
10043**示例:**
10044
10045```ts
10046// xxx.ets
10047import { webview } from '@kit.ArkWeb';
10048
10049@Entry
10050@Component
10051struct WebComponent {
10052  controller: webview.WebviewController = new webview.WebviewController();
10053
10054  build() {
10055    Column() {
10056      Button('deleteEntireCookie')
10057        .onClick(() => {
10058          webview.WebCookieManager.deleteEntireCookie();
10059        })
10060      Web({ src: 'www.example.com', controller: this.controller })
10061    }
10062  }
10063}
10064```
10065
10066### clearAllCookiesSync<sup>11+</sup>
10067
10068static clearAllCookiesSync(incognito?: boolean): void
10069
10070清除所有cookie。
10071
10072**系统能力:** SystemCapability.Web.Webview.Core
10073
10074**参数:**
10075
10076| 参数名 | 类型    | 必填 | 说明                                       |
10077| ------ | ------- | ---- | :----------------------------------------- |
10078| incognito    | boolean | 否   | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 |
10079
10080**示例:**
10081
10082```ts
10083// xxx.ets
10084import { webview } from '@kit.ArkWeb';
10085
10086@Entry
10087@Component
10088struct WebComponent {
10089  controller: webview.WebviewController = new webview.WebviewController();
10090
10091  build() {
10092    Column() {
10093      Button('clearAllCookiesSync')
10094        .onClick(() => {
10095          webview.WebCookieManager.clearAllCookiesSync();
10096        })
10097      Web({ src: 'www.example.com', controller: this.controller })
10098    }
10099  }
10100}
10101```
10102
10103### clearAllCookies<sup>11+</sup>
10104
10105static clearAllCookies(callback: AsyncCallback\<void>): void
10106
10107异步callback方式清除所有cookie。
10108
10109**系统能力:** SystemCapability.Web.Webview.Core
10110
10111**参数:**
10112
10113| 参数名   | 类型                   | 必填 | 说明                                               |
10114| -------- | ---------------------- | ---- | :------------------------------------------------- |
10115| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有cookie是否成功。 |
10116
10117**错误码:**
10118
10119以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10120
10121| 错误码ID | 错误信息                                                |
10122| -------- | ------------------------------------------------------ |
10123| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10124
10125**示例:**
10126
10127```ts
10128// xxx.ets
10129import { webview } from '@kit.ArkWeb';
10130import { BusinessError } from '@kit.BasicServicesKit';
10131
10132@Entry
10133@Component
10134struct WebComponent {
10135  controller: webview.WebviewController = new webview.WebviewController();
10136
10137  build() {
10138    Column() {
10139      Button('clearAllCookies')
10140        .onClick(() => {
10141          try {
10142            webview.WebCookieManager.clearAllCookies((error) => {
10143              if (error) {
10144                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10145              }
10146            })
10147          } catch (error) {
10148            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10149          }
10150        })
10151      Web({ src: 'www.example.com', controller: this.controller })
10152    }
10153  }
10154}
10155```
10156
10157### clearAllCookies<sup>11+</sup>
10158
10159static clearAllCookies(): Promise\<void>
10160
10161异步promise方式清除所有cookie。
10162
10163**系统能力:** SystemCapability.Web.Webview.Core
10164
10165**返回值:**
10166
10167| 类型             | 说明                                      |
10168| ---------------- | ----------------------------------------- |
10169| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 |
10170
10171**错误码:**
10172
10173以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10174
10175| 错误码ID | 错误信息                                                |
10176| -------- | ------------------------------------------------------ |
10177| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10178
10179**示例:**
10180
10181```ts
10182// xxx.ets
10183import { webview } from '@kit.ArkWeb';
10184import { BusinessError } from '@kit.BasicServicesKit';
10185
10186@Entry
10187@Component
10188struct WebComponent {
10189  controller: webview.WebviewController = new webview.WebviewController();
10190
10191  build() {
10192    Column() {
10193      Button('clearAllCookies')
10194        .onClick(() => {
10195          try {
10196            webview.WebCookieManager.clearAllCookies()
10197              .then(() => {
10198                console.log("clearAllCookies success!");
10199              })
10200              .catch((error: BusinessError) => {
10201                console.error("error: " + error);
10202              });
10203          } catch (error) {
10204            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10205          }
10206        })
10207      Web({ src: 'www.example.com', controller: this.controller })
10208    }
10209  }
10210}
10211```
10212
10213### deleteSessionCookie<sup>(deprecated)</sup>
10214
10215static deleteSessionCookie(): void
10216
10217清除所有会话cookie。
10218
10219> **说明:**
10220>
10221> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代
10222
10223**系统能力:** SystemCapability.Web.Webview.Core
10224
10225**示例:**
10226
10227```ts
10228// xxx.ets
10229import { webview } from '@kit.ArkWeb';
10230
10231@Entry
10232@Component
10233struct WebComponent {
10234  controller: webview.WebviewController = new webview.WebviewController();
10235
10236  build() {
10237    Column() {
10238      Button('deleteSessionCookie')
10239        .onClick(() => {
10240          webview.WebCookieManager.deleteSessionCookie();
10241        })
10242      Web({ src: 'www.example.com', controller: this.controller })
10243    }
10244  }
10245}
10246```
10247
10248### clearSessionCookieSync<sup>11+</sup>
10249
10250static clearSessionCookieSync(): void
10251
10252清除所有会话cookie。
10253
10254**系统能力:** SystemCapability.Web.Webview.Core
10255
10256**示例:**
10257
10258```ts
10259// xxx.ets
10260import { webview } from '@kit.ArkWeb';
10261
10262@Entry
10263@Component
10264struct WebComponent {
10265  controller: webview.WebviewController = new webview.WebviewController();
10266
10267  build() {
10268    Column() {
10269      Button('clearSessionCookieSync')
10270        .onClick(() => {
10271          webview.WebCookieManager.clearSessionCookieSync();
10272        })
10273      Web({ src: 'www.example.com', controller: this.controller })
10274    }
10275  }
10276}
10277```
10278
10279### clearSessionCookie<sup>11+</sup>
10280
10281static clearSessionCookie(callback: AsyncCallback\<void>): void
10282
10283异步callback方式清除所有会话cookie。
10284
10285**系统能力:** SystemCapability.Web.Webview.Core
10286
10287**参数:**
10288
10289| 参数名   | 类型                   | 必填 | 说明                                               |
10290| -------- | ---------------------- | ---- | :------------------------------------------------- |
10291| callback | AsyncCallback\<void> | 是   | callback回调,用于获取清除所有会话cookie是否成功。 |
10292
10293**错误码:**
10294
10295以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10296
10297| 错误码ID | 错误信息                                                |
10298| -------- | ------------------------------------------------------ |
10299| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
10300
10301**示例:**
10302
10303```ts
10304// xxx.ets
10305import { webview } from '@kit.ArkWeb';
10306import { BusinessError } from '@kit.BasicServicesKit';
10307
10308@Entry
10309@Component
10310struct WebComponent {
10311  controller: webview.WebviewController = new webview.WebviewController();
10312
10313  build() {
10314    Column() {
10315      Button('clearSessionCookie')
10316        .onClick(() => {
10317          try {
10318            webview.WebCookieManager.clearSessionCookie((error) => {
10319              if (error) {
10320                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10321              }
10322            })
10323          } catch (error) {
10324            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10325          }
10326        })
10327      Web({ src: 'www.example.com', controller: this.controller })
10328    }
10329  }
10330}
10331```
10332
10333### clearSessionCookie<sup>11+</sup>
10334
10335static clearSessionCookie(): Promise\<void>
10336
10337异步promise方式清除所有会话cookie。
10338
10339**系统能力:** SystemCapability.Web.Webview.Core
10340
10341**返回值:**
10342
10343| 类型             | 说明                                      |
10344| ---------------- | ----------------------------------------- |
10345| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 |
10346
10347**错误码:**
10348
10349以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10350
10351| 错误码ID | 错误信息                                                |
10352| -------- | ------------------------------------------------------ |
10353| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
10354
10355**示例:**
10356
10357```ts
10358// xxx.ets
10359import { webview } from '@kit.ArkWeb';
10360import { BusinessError } from '@kit.BasicServicesKit';
10361
10362@Entry
10363@Component
10364struct WebComponent {
10365  controller: webview.WebviewController = new webview.WebviewController();
10366
10367  build() {
10368    Column() {
10369      Button('clearSessionCookie')
10370        .onClick(() => {
10371          try {
10372            webview.WebCookieManager.clearSessionCookie()
10373              .then(() => {
10374                console.log("clearSessionCookie success!");
10375              })
10376              .catch((error: BusinessError) => {
10377                console.error("error: " + error);
10378              });
10379          } catch (error) {
10380            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10381          }
10382        })
10383      Web({ src: 'www.example.com', controller: this.controller })
10384    }
10385  }
10386}
10387```
10388
10389## WebStorage
10390
10391通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。
10392
10393> **说明:**
10394>
10395> 目前调用WebStorage下的方法,都需要先加载Web组件。
10396
10397### deleteOrigin
10398
10399static deleteOrigin(origin: string): void
10400
10401清除指定源所使用的存储。
10402
10403**系统能力:** SystemCapability.Web.Webview.Core
10404
10405**参数:**
10406
10407| 参数名 | 类型   | 必填 | 说明                     |
10408| ------ | ------ | ---- | ------------------------ |
10409| origin | string | 是   | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 |
10410
10411**错误码:**
10412
10413以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10414
10415| 错误码ID | 错误信息                                               |
10416| -------- | ------------------------------------------------------ |
10417| 17100011 | Invalid origin.                             |
10418| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10419
10420**示例:**
10421
10422```ts
10423// xxx.ets
10424import { webview } from '@kit.ArkWeb';
10425import { BusinessError } from '@kit.BasicServicesKit';
10426
10427@Entry
10428@Component
10429struct WebComponent {
10430  controller: webview.WebviewController = new webview.WebviewController();
10431  origin: string = "resource://rawfile/";
10432
10433  build() {
10434    Column() {
10435      Button('deleteOrigin')
10436        .onClick(() => {
10437          try {
10438            webview.WebStorage.deleteOrigin(this.origin);
10439          } catch (error) {
10440            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10441          }
10442
10443        })
10444      Web({ src: $rawfile('index.html'), controller: this.controller })
10445        .databaseAccess(true)
10446    }
10447  }
10448}
10449```
10450
10451加载的html文件。
10452 ```html
10453  <!-- index.html -->
10454  <!DOCTYPE html>
10455  <html>
10456  <head>
10457    <meta charset="UTF-8">
10458    <title>test</title>
10459    <script type="text/javascript">
10460
10461      var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024);
10462      var msg;
10463
10464      db.transaction(function(tx){
10465        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")');
10466        tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")');
10467        msg = '<p>数据表已创建,且插入了两条数据。</p>';
10468
10469        document.querySelector('#status').innerHTML = msg;
10470      });
10471
10472      db.transaction(function(tx){
10473        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
10474          var len = results.rows.length,i;
10475          msg = "<p>查询记录条数:" + len + "</p>";
10476
10477          document.querySelector('#status').innerHTML += msg;
10478
10479              for(i = 0; i < len; i++){
10480                msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
10481
10482          document.querySelector('#status').innerHTML += msg;
10483          }
10484        },null);
10485      });
10486
10487      </script>
10488  </head>
10489  <body>
10490  <div id="status" name="status">状态信息</div>
10491  </body>
10492  </html>
10493 ```
10494
10495### getOrigins
10496
10497static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void
10498
10499以回调方式异步获取当前使用Web SQL数据库的所有源的信息。
10500
10501**系统能力:** SystemCapability.Web.Webview.Core
10502
10503**参数:**
10504
10505| 参数名   | 类型                                   | 必填 | 说明                                                   |
10506| -------- | -------------------------------------- | ---- | ------------------------------------------------------ |
10507| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是   | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10508
10509**错误码:**
10510
10511以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10512
10513| 错误码ID | 错误信息                                               |
10514| -------- | ------------------------------------------------------ |
10515| 17100012 | Invalid web storage origin.                             |
10516| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10517
10518**示例:**
10519
10520```ts
10521// xxx.ets
10522import { webview } from '@kit.ArkWeb';
10523import { BusinessError } from '@kit.BasicServicesKit';
10524
10525@Entry
10526@Component
10527struct WebComponent {
10528  controller: webview.WebviewController = new webview.WebviewController();
10529
10530  build() {
10531    Column() {
10532      Button('getOrigins')
10533        .onClick(() => {
10534          try {
10535            webview.WebStorage.getOrigins((error, origins) => {
10536              if (error) {
10537                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10538                return;
10539              }
10540              for (let i = 0; i < origins.length; i++) {
10541                console.log('origin: ' + origins[i].origin);
10542                console.log('usage: ' + origins[i].usage);
10543                console.log('quota: ' + origins[i].quota);
10544              }
10545            })
10546          } catch (error) {
10547            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10548          }
10549
10550        })
10551      Web({ src: $rawfile('index.html'), controller: this.controller })
10552        .databaseAccess(true)
10553    }
10554  }
10555}
10556```
10557
10558加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10559
10560### getOrigins
10561
10562static getOrigins(): Promise\<Array\<WebStorageOrigin>>
10563
10564以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。
10565
10566**系统能力:** SystemCapability.Web.Webview.Core
10567
10568**返回值:**
10569
10570| 类型                             | 说明                                                         |
10571| -------------------------------- | ------------------------------------------------------------ |
10572| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 |
10573
10574**错误码:**
10575
10576以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10577
10578| 错误码ID | 错误信息                                               |
10579| -------- | ------------------------------------------------------ |
10580| 17100012 | Invalid web storage origin.                             |
10581| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10582
10583**示例:**
10584
10585```ts
10586// xxx.ets
10587import { webview } from '@kit.ArkWeb';
10588import { BusinessError } from '@kit.BasicServicesKit';
10589
10590@Entry
10591@Component
10592struct WebComponent {
10593  controller: webview.WebviewController = new webview.WebviewController();
10594
10595  build() {
10596    Column() {
10597      Button('getOrigins')
10598        .onClick(() => {
10599          try {
10600            webview.WebStorage.getOrigins()
10601              .then(origins => {
10602                for (let i = 0; i < origins.length; i++) {
10603                  console.log('origin: ' + origins[i].origin);
10604                  console.log('usage: ' + origins[i].usage);
10605                  console.log('quota: ' + origins[i].quota);
10606                }
10607              })
10608              .catch((e: BusinessError) => {
10609                console.log('error: ' + JSON.stringify(e));
10610              })
10611          } catch (error) {
10612            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10613          }
10614
10615        })
10616      Web({ src: $rawfile('index.html'), controller: this.controller })
10617        .databaseAccess(true)
10618    }
10619  }
10620}
10621```
10622
10623加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10624
10625### getOriginQuota
10626
10627static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void
10628
10629使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10630
10631**系统能力:** SystemCapability.Web.Webview.Core
10632
10633**参数:**
10634
10635| 参数名   | 类型                  | 必填 | 说明               |
10636| -------- | --------------------- | ---- | ------------------ |
10637| origin   | string                | 是   | 指定源的字符串索引 |
10638| callback | AsyncCallback\<number> | 是   | 指定源的存储配额   |
10639
10640**错误码:**
10641
10642以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10643
10644| 错误码ID | 错误信息                                               |
10645| -------- | ------------------------------------------------------ |
10646| 17100011 | Invalid origin.                             |
10647| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10648
10649**示例:**
10650
10651```ts
10652// xxx.ets
10653import { webview } from '@kit.ArkWeb';
10654import { BusinessError } from '@kit.BasicServicesKit';
10655
10656@Entry
10657@Component
10658struct WebComponent {
10659  controller: webview.WebviewController = new webview.WebviewController();
10660  origin: string = "resource://rawfile/";
10661
10662  build() {
10663    Column() {
10664      Button('getOriginQuota')
10665        .onClick(() => {
10666          try {
10667            webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
10668              if (error) {
10669                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10670                return;
10671              }
10672              console.log('quota: ' + quota);
10673            })
10674          } catch (error) {
10675            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10676          }
10677
10678        })
10679      Web({ src: $rawfile('index.html'), controller: this.controller })
10680        .databaseAccess(true)
10681    }
10682  }
10683}
10684```
10685
10686加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10687
10688### getOriginQuota
10689
10690static getOriginQuota(origin: string): Promise\<number>
10691
10692以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。
10693
10694**系统能力:** SystemCapability.Web.Webview.Core
10695
10696**参数:**
10697
10698| 参数名 | 类型   | 必填 | 说明               |
10699| ------ | ------ | ---- | ------------------ |
10700| origin | string | 是   | 指定源的字符串索引 |
10701
10702**返回值:**
10703
10704| 类型            | 说明                                    |
10705| --------------- | --------------------------------------- |
10706| Promise\<number> | Promise实例,用于获取指定源的存储配额。 |
10707
10708**错误码:**
10709
10710以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10711
10712| 错误码ID | 错误信息                                               |
10713| -------- | ------------------------------------------------------ |
10714| 17100011 | Invalid origin.                             |
10715| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10716
10717**示例:**
10718
10719```ts
10720// xxx.ets
10721import { webview } from '@kit.ArkWeb';
10722import { BusinessError } from '@kit.BasicServicesKit';
10723
10724@Entry
10725@Component
10726struct WebComponent {
10727  controller: webview.WebviewController = new webview.WebviewController();
10728  origin: string = "resource://rawfile/";
10729
10730  build() {
10731    Column() {
10732      Button('getOriginQuota')
10733        .onClick(() => {
10734          try {
10735            webview.WebStorage.getOriginQuota(this.origin)
10736              .then(quota => {
10737                console.log('quota: ' + quota);
10738              })
10739              .catch((e: BusinessError) => {
10740                console.log('error: ' + JSON.stringify(e));
10741              })
10742          } catch (error) {
10743            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10744          }
10745
10746        })
10747      Web({ src: $rawfile('index.html'), controller: this.controller })
10748        .databaseAccess(true)
10749    }
10750  }
10751}
10752```
10753
10754加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10755
10756### getOriginUsage
10757
10758static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void
10759
10760以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10761
10762**系统能力:** SystemCapability.Web.Webview.Core
10763
10764**参数:**
10765
10766| 参数名   | 类型                  | 必填 | 说明               |
10767| -------- | --------------------- | ---- | ------------------ |
10768| origin   | string                | 是   | 指定源的字符串索引 |
10769| callback | AsyncCallback\<number> | 是   | 指定源的存储量。   |
10770
10771**错误码:**
10772
10773以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10774
10775| 错误码ID | 错误信息                                               |
10776| -------- | ------------------------------------------------------ |
10777| 17100011 | Invalid origin.                             |
10778| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10779
10780**示例:**
10781
10782```ts
10783// xxx.ets
10784import { webview } from '@kit.ArkWeb';
10785import { BusinessError } from '@kit.BasicServicesKit';
10786
10787@Entry
10788@Component
10789struct WebComponent {
10790  controller: webview.WebviewController = new webview.WebviewController();
10791  origin: string = "resource://rawfile/";
10792
10793  build() {
10794    Column() {
10795      Button('getOriginUsage')
10796        .onClick(() => {
10797          try {
10798            webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
10799              if (error) {
10800                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10801                return;
10802              }
10803              console.log('usage: ' + usage);
10804            })
10805          } catch (error) {
10806            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10807          }
10808
10809        })
10810      Web({ src: $rawfile('index.html'), controller: this.controller })
10811        .databaseAccess(true)
10812    }
10813  }
10814}
10815```
10816
10817加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10818
10819### getOriginUsage
10820
10821static getOriginUsage(origin: string): Promise\<number>
10822
10823以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。
10824
10825**系统能力:** SystemCapability.Web.Webview.Core
10826
10827**参数:**
10828
10829| 参数名 | 类型   | 必填 | 说明               |
10830| ------ | ------ | ---- | ------------------ |
10831| origin | string | 是   | 指定源的字符串索引 |
10832
10833**返回值:**
10834
10835| 类型            | 说明                                  |
10836| --------------- | ------------------------------------- |
10837| Promise\<number> | Promise实例,用于获取指定源的存储量。 |
10838
10839**错误码:**
10840
10841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10842
10843| 错误码ID | 错误信息                                              |
10844| -------- | ----------------------------------------------------- |
10845| 17100011 | Invalid origin.                            |
10846| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10847
10848**示例:**
10849
10850```ts
10851// xxx.ets
10852import { webview } from '@kit.ArkWeb';
10853import { BusinessError } from '@kit.BasicServicesKit';
10854
10855@Entry
10856@Component
10857struct WebComponent {
10858  controller: webview.WebviewController = new webview.WebviewController();
10859  origin: string = "resource://rawfile/";
10860
10861  build() {
10862    Column() {
10863      Button('getOriginUsage')
10864        .onClick(() => {
10865          try {
10866            webview.WebStorage.getOriginUsage(this.origin)
10867              .then(usage => {
10868                console.log('usage: ' + usage);
10869              }).catch((e: BusinessError) => {
10870              console.error('error: ' + JSON.stringify(e));
10871            })
10872          } catch (error) {
10873            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10874          }
10875        })
10876      Web({ src: $rawfile('index.html'), controller: this.controller })
10877        .databaseAccess(true)
10878    }
10879  }
10880}
10881```
10882
10883加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。
10884
10885### deleteAllData
10886
10887static deleteAllData(incognito?: boolean): void
10888
10889清除Web SQL数据库当前使用的所有存储。
10890
10891**系统能力:** SystemCapability.Web.Webview.Core
10892
10893**参数:**
10894
10895| 参数名 | 类型   | 必填 | 说明               |
10896| ------ | ------ | ---- | ------------------ |
10897| incognito<sup>11+</sup>    | boolean | 否   | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 |
10898
10899**示例:**
10900
10901```ts
10902// xxx.ets
10903import { webview } from '@kit.ArkWeb';
10904import { BusinessError } from '@kit.BasicServicesKit';
10905
10906@Entry
10907@Component
10908struct WebComponent {
10909  controller: webview.WebviewController = new webview.WebviewController();
10910
10911  build() {
10912    Column() {
10913      Button('deleteAllData')
10914        .onClick(() => {
10915          try {
10916            webview.WebStorage.deleteAllData();
10917          } catch (error) {
10918            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10919          }
10920        })
10921      Web({ src: $rawfile('index.html'), controller: this.controller })
10922        .databaseAccess(true)
10923    }
10924  }
10925}
10926```
10927
10928加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。
10929
10930## WebDataBase
10931
10932Web组件数据库管理对象。
10933
10934> **说明:**
10935>
10936> 目前调用WebDataBase下的方法,都需要先加载Web组件。
10937
10938### getHttpAuthCredentials
10939
10940static getHttpAuthCredentials(host: string, realm: string): Array\<string>
10941
10942检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。
10943
10944**系统能力:** SystemCapability.Web.Webview.Core
10945
10946**参数:**
10947
10948| 参数名 | 类型   | 必填 | 说明                         |
10949| ------ | ------ | ---- | ---------------------------- |
10950| host   | string | 是   | HTTP身份验证凭据应用的主机。 |
10951| realm  | string | 是   | HTTP身份验证凭据应用的域。   |
10952
10953**返回值:**
10954
10955| 类型  | 说明                                         |
10956| ----- | -------------------------------------------- |
10957| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 |
10958
10959**错误码:**
10960
10961以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
10962
10963| 错误码ID | 错误信息                                                |
10964| -------- | ------------------------------------------------------ |
10965| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
10966
10967**示例:**
10968
10969```ts
10970// xxx.ets
10971import { webview } from '@kit.ArkWeb';
10972import { BusinessError } from '@kit.BasicServicesKit';
10973
10974@Entry
10975@Component
10976struct WebComponent {
10977  controller: webview.WebviewController = new webview.WebviewController();
10978  host: string = "www.spincast.org";
10979  realm: string = "protected example";
10980  username_password: string[] = [];
10981
10982  build() {
10983    Column() {
10984      Button('getHttpAuthCredentials')
10985        .onClick(() => {
10986          try {
10987            this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
10988            console.log('num: ' + this.username_password.length);
10989          } catch (error) {
10990            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
10991          }
10992        })
10993      Web({ src: 'www.example.com', controller: this.controller })
10994    }
10995  }
10996}
10997```
10998
10999### saveHttpAuthCredentials
11000
11001static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void
11002
11003保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。
11004
11005**系统能力:** SystemCapability.Web.Webview.Core
11006
11007**参数:**
11008
11009| 参数名   | 类型   | 必填 | 说明                         |
11010| -------- | ------ | ---- | ---------------------------- |
11011| host     | string | 是   | HTTP身份验证凭据应用的主机。 |
11012| realm    | string | 是   | HTTP身份验证凭据应用的域。   |
11013| username | string | 是   | 用户名。                     |
11014| password | string | 是   | 密码。                       |
11015
11016**错误码:**
11017
11018以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11019
11020| 错误码ID | 错误信息                                                |
11021| -------- | ------------------------------------------------------ |
11022| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11023
11024**示例:**
11025
11026```ts
11027// xxx.ets
11028import { webview } from '@kit.ArkWeb';
11029import { BusinessError } from '@kit.BasicServicesKit';
11030
11031@Entry
11032@Component
11033struct WebComponent {
11034  controller: webview.WebviewController = new webview.WebviewController();
11035  host: string = "www.spincast.org";
11036  realm: string = "protected example";
11037
11038  build() {
11039    Column() {
11040      Button('saveHttpAuthCredentials')
11041        .onClick(() => {
11042          try {
11043            webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
11044          } catch (error) {
11045            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11046          }
11047        })
11048      Web({ src: 'www.example.com', controller: this.controller })
11049    }
11050  }
11051}
11052```
11053
11054### existHttpAuthCredentials
11055
11056static existHttpAuthCredentials(): boolean
11057
11058判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。
11059
11060**系统能力:** SystemCapability.Web.Webview.Core
11061
11062**返回值:**
11063
11064| 类型    | 说明                                                         |
11065| ------- | ------------------------------------------------------------ |
11066| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false |
11067
11068**示例:**
11069
11070```ts
11071// xxx.ets
11072import { webview } from '@kit.ArkWeb';
11073import { BusinessError } from '@kit.BasicServicesKit';
11074
11075@Entry
11076@Component
11077struct WebComponent {
11078  controller: webview.WebviewController = new webview.WebviewController();
11079
11080  build() {
11081    Column() {
11082      Button('existHttpAuthCredentials')
11083        .onClick(() => {
11084          try {
11085            let result = webview.WebDataBase.existHttpAuthCredentials();
11086          } catch (error) {
11087            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11088          }
11089        })
11090      Web({ src: 'www.example.com', controller: this.controller })
11091    }
11092  }
11093}
11094```
11095
11096### deleteHttpAuthCredentials
11097
11098static deleteHttpAuthCredentials(): void
11099
11100清除所有已保存的HTTP身份验证凭据,该方法为同步方法。
11101
11102**系统能力:** SystemCapability.Web.Webview.Core
11103
11104**示例:**
11105
11106```ts
11107// xxx.ets
11108import { webview } from '@kit.ArkWeb';
11109import { BusinessError } from '@kit.BasicServicesKit';
11110
11111@Entry
11112@Component
11113struct WebComponent {
11114  controller: webview.WebviewController = new webview.WebviewController();
11115
11116  build() {
11117    Column() {
11118      Button('deleteHttpAuthCredentials')
11119        .onClick(() => {
11120          try {
11121            webview.WebDataBase.deleteHttpAuthCredentials();
11122          } catch (error) {
11123            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11124          }
11125        })
11126      Web({ src: 'www.example.com', controller: this.controller })
11127    }
11128  }
11129}
11130```
11131
11132## GeolocationPermissions
11133
11134Web组件地理位置权限管理对象。
11135
11136> **说明:**
11137>
11138> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。
11139
11140### 需要权限
11141
11142访问地理位置时需添加权限:ohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。
11143
11144### allowGeolocation
11145
11146static allowGeolocation(origin: string, incognito?: boolean): void
11147
11148允许指定来源使用地理位置接口。
11149
11150**系统能力:** SystemCapability.Web.Webview.Core
11151
11152**参数:**
11153
11154| 参数名 | 类型   | 必填 | 说明               |
11155| ------ | ------ | ---- | ------------------ |
11156| origin | string | 是   |指定源的字符串索引 |
11157| incognito<sup>11+</sup>    | boolean | 否   | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 |
11158
11159**错误码:**
11160
11161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11162
11163| 错误码ID | 错误信息                                               |
11164| -------- | ------------------------------------------------------ |
11165| 17100011 | Invalid origin.                             |
11166| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11167
11168**示例:**
11169
11170```ts
11171// xxx.ets
11172import { webview } from '@kit.ArkWeb';
11173import { BusinessError } from '@kit.BasicServicesKit';
11174
11175@Entry
11176@Component
11177struct WebComponent {
11178  controller: webview.WebviewController = new webview.WebviewController();
11179  origin: string = "file:///";
11180
11181  build() {
11182    Column() {
11183      Button('allowGeolocation')
11184        .onClick(() => {
11185          try {
11186            webview.GeolocationPermissions.allowGeolocation(this.origin);
11187          } catch (error) {
11188            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11189          }
11190        })
11191      Web({ src: 'www.example.com', controller: this.controller })
11192    }
11193  }
11194}
11195```
11196
11197### deleteGeolocation
11198
11199static deleteGeolocation(origin: string, incognito?: boolean): void
11200
11201清除指定来源的地理位置权限状态。
11202
11203**系统能力:** SystemCapability.Web.Webview.Core
11204
11205**参数:**
11206
11207| 参数名 | 类型   | 必填 | 说明               |
11208| ------ | ------ | ---- | ------------------ |
11209| origin | string | 是   | 指定源的字符串索引 |
11210| incognito<sup>11+</sup>   | boolean | 否   | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 |
11211
11212**错误码:**
11213
11214以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11215
11216| 错误码ID | 错误信息                                               |
11217| -------- | ------------------------------------------------------ |
11218| 17100011 | Invalid origin.                             |
11219| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
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  origin: string = "file:///";
11233
11234  build() {
11235    Column() {
11236      Button('deleteGeolocation')
11237        .onClick(() => {
11238          try {
11239            webview.GeolocationPermissions.deleteGeolocation(this.origin);
11240          } catch (error) {
11241            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11242          }
11243        })
11244      Web({ src: 'www.example.com', controller: this.controller })
11245    }
11246  }
11247}
11248```
11249
11250### getAccessibleGeolocation
11251
11252static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void
11253
11254以回调方式异步获取指定源的地理位置权限状态。
11255
11256**系统能力:** SystemCapability.Web.Webview.Core
11257
11258**参数:**
11259
11260| 参数名   | 类型                   | 必填 | 说明                                                         |
11261| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
11262| origin   | string                 | 是   | 指定源的字符串索引                                           |
11263| callback | AsyncCallback\<boolean> | 是   | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11264| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 |
11265
11266**错误码:**
11267
11268以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11269
11270| 错误码ID | 错误信息                                               |
11271| -------- | ------------------------------------------------------ |
11272| 17100011 | Invalid origin.                             |
11273| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11274
11275**示例:**
11276
11277```ts
11278// xxx.ets
11279import { webview } from '@kit.ArkWeb';
11280import { BusinessError } from '@kit.BasicServicesKit';
11281
11282@Entry
11283@Component
11284struct WebComponent {
11285  controller: webview.WebviewController = new webview.WebviewController();
11286  origin: string = "file:///";
11287
11288  build() {
11289    Column() {
11290      Button('getAccessibleGeolocation')
11291        .onClick(() => {
11292          try {
11293            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
11294              if (error) {
11295                console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11296                return;
11297              }
11298              console.log('getAccessibleGeolocationAsync result: ' + result);
11299            });
11300          } catch (error) {
11301            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11302          }
11303        })
11304      Web({ src: 'www.example.com', controller: this.controller })
11305    }
11306  }
11307}
11308```
11309
11310### getAccessibleGeolocation
11311
11312static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean>
11313
11314以Promise方式异步获取指定源的地理位置权限状态。
11315
11316**系统能力:** SystemCapability.Web.Webview.Core
11317
11318**参数:**
11319
11320| 参数名 | 类型 | 必填 | 说明             |
11321| ------ | -------- | ---- | -------------------- |
11322| origin | string   | 是   | 指定源的字符串索引。 |
11323| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 |
11324
11325**返回值:**
11326
11327| 类型             | 说明                                                         |
11328| ---------------- | ------------------------------------------------------------ |
11329| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 |
11330
11331**错误码:**
11332
11333以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11334
11335| 错误码ID | 错误信息                                               |
11336| -------- | ------------------------------------------------------ |
11337| 17100011 | Invalid origin.                             |
11338| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11339
11340**示例:**
11341
11342```ts
11343// xxx.ets
11344import { webview } from '@kit.ArkWeb';
11345import { BusinessError } from '@kit.BasicServicesKit';
11346
11347@Entry
11348@Component
11349struct WebComponent {
11350  controller: webview.WebviewController = new webview.WebviewController();
11351  origin: string = "file:///";
11352
11353  build() {
11354    Column() {
11355      Button('getAccessibleGeolocation')
11356        .onClick(() => {
11357          try {
11358            webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
11359              .then(result => {
11360                console.log('getAccessibleGeolocationPromise result: ' + result);
11361              }).catch((error: BusinessError) => {
11362              console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11363            });
11364          } catch (error) {
11365            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11366          }
11367        })
11368      Web({ src: 'www.example.com', controller: this.controller })
11369    }
11370  }
11371}
11372```
11373
11374### getStoredGeolocation
11375
11376static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void
11377
11378以回调方式异步获取已存储地理位置权限状态的所有源信息。
11379
11380**系统能力:** SystemCapability.Web.Webview.Core
11381
11382**参数:**
11383
11384| 参数名   | 类型                         | 必填 | 说明                                     |
11385| -------- | ---------------------------- | ---- | ---------------------------------------- |
11386| callback | AsyncCallback\<Array\<string>> | 是   | 返回已存储地理位置权限状态的所有源信息。 |
11387| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 |
11388
11389**错误码:**
11390
11391以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11392
11393| 错误码ID | 错误信息                                                |
11394| -------- | ------------------------------------------------------ |
11395| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11396
11397**示例:**
11398
11399```ts
11400// xxx.ets
11401import { webview } from '@kit.ArkWeb';
11402import { BusinessError } from '@kit.BasicServicesKit';
11403
11404@Entry
11405@Component
11406struct WebComponent {
11407  controller: webview.WebviewController = new webview.WebviewController();
11408
11409  build() {
11410    Column() {
11411      Button('getStoredGeolocation')
11412        .onClick(() => {
11413          try {
11414            webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
11415              if (error) {
11416                console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11417                return;
11418              }
11419              let origins_str: string = origins.join();
11420              console.log('getStoredGeolocationAsync origins: ' + origins_str);
11421            });
11422          } catch (error) {
11423            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11424          }
11425        })
11426      Web({ src: 'www.example.com', controller: this.controller })
11427    }
11428  }
11429}
11430```
11431
11432### getStoredGeolocation
11433
11434static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>>
11435
11436以Promise方式异步获取已存储地理位置权限状态的所有源信息。
11437
11438**系统能力:** SystemCapability.Web.Webview.Core
11439
11440**参数:**
11441
11442| 参数名   | 类型                         | 必填 | 说明                                     |
11443| -------- | ---------------------------- | ---- | ---------------------------------------- |
11444| incognito<sup>11+</sup>   | boolean | 否   | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 |
11445
11446**返回值:**
11447
11448| 类型                   | 说明                                                      |
11449| ---------------------- | --------------------------------------------------------- |
11450| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 |
11451
11452**错误码:**
11453
11454以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11455
11456| 错误码ID | 错误信息                                                |
11457| -------- | ------------------------------------------------------ |
11458| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11459
11460**示例:**
11461
11462```ts
11463// xxx.ets
11464import { webview } from '@kit.ArkWeb';
11465import { BusinessError } from '@kit.BasicServicesKit';
11466
11467@Entry
11468@Component
11469struct WebComponent {
11470  controller: webview.WebviewController = new webview.WebviewController();
11471
11472  build() {
11473    Column() {
11474      Button('getStoredGeolocation')
11475        .onClick(() => {
11476          try {
11477            webview.GeolocationPermissions.getStoredGeolocation()
11478              .then(origins => {
11479                let origins_str: string = origins.join();
11480                console.log('getStoredGeolocationPromise origins: ' + origins_str);
11481              }).catch((error: BusinessError) => {
11482              console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code},  Message: ${error.message}`);
11483            });
11484          } catch (error) {
11485            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11486          }
11487        })
11488      Web({ src: 'www.example.com', controller: this.controller })
11489    }
11490  }
11491}
11492```
11493
11494### deleteAllGeolocation
11495
11496static deleteAllGeolocation(incognito?: boolean): void
11497
11498清除所有来源的地理位置权限状态。
11499
11500**系统能力:** SystemCapability.Web.Webview.Core
11501
11502**参数:**
11503
11504| 参数名   | 类型                         | 必填 | 说明                                     |
11505| -------- | ---------------------------- | ---- | ---------------------------------------- |
11506| incognito<sup>11+</sup>    | boolean | 否   | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 |
11507
11508**示例:**
11509
11510```ts
11511// xxx.ets
11512import { webview } from '@kit.ArkWeb';
11513import { BusinessError } from '@kit.BasicServicesKit';
11514
11515@Entry
11516@Component
11517struct WebComponent {
11518  controller: webview.WebviewController = new webview.WebviewController();
11519
11520  build() {
11521    Column() {
11522      Button('deleteAllGeolocation')
11523        .onClick(() => {
11524          try {
11525            webview.GeolocationPermissions.deleteAllGeolocation();
11526          } catch (error) {
11527            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
11528          }
11529        })
11530      Web({ src: 'www.example.com', controller: this.controller })
11531    }
11532  }
11533}
11534```
11535## WebHeader
11536
11537Web组件返回的请求/响应头对象。
11538
11539**系统能力:** SystemCapability.Web.Webview.Core
11540
11541| 名称        | 类型   | 可读 | 可写 |说明                 |
11542| ----------- | ------ | -----|------|------------------- |
11543| headerKey   | string | 是 | 是 | 请求/响应头的key。   |
11544| headerValue | string | 是 | 是 | 请求/响应头的value。 |
11545
11546## RequestInfo<sup>12+</sup>
11547
11548Web组件发送的资源请求信息。
11549
11550**系统能力:**: SystemCapability.Web.Webview.Core
11551
11552| 名称      | 类型   | 可读 | 可写 |说明        |
11553| ---------| ------ | -----|------|--------  |
11554| url      | string | 是 | 是 | 请求的链接。    |
11555| method   | string | 是 | 是 | 请求的方法。    |
11556| formData | string | 是 | 是 | 请求的表单数据。 |
11557
11558## WebHitTestType
11559
11560[getHitTest](#gethittest)接口用于指示游标节点。
11561
11562**系统能力:** SystemCapability.Web.Webview.Core
11563
11564| 名称          | 值 | 说明                                      |
11565| ------------- | -- |----------------------------------------- |
11566| EditText      | 0 |可编辑的区域。                            |
11567| Email         | 1 |电子邮件地址。                            |
11568| HttpAnchor    | 2 |超链接,其中src为http。                     |
11569| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 |
11570| Img           | 4 |HTML::img标签。                           |
11571| Map           | 5 |地理地址。                                |
11572| Phone         | 6 |电话号码。                                |
11573| Unknown       | 7 |未知内容。                                |
11574
11575## SecurityLevel<sup>11+</sup>
11576
11577当前网页的安全级别。
11578
11579**系统能力:** SystemCapability.Web.Webview.Core
11580
11581| 名称          | 值 | 说明                                      |
11582| ------------- | -- |----------------------------------------- |
11583| NONE          | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。|
11584| SECURE        | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。|
11585| WARNING       | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。|
11586| DANGEROUS     | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 |
11587
11588##  HitTestValue
11589
11590提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。
11591
11592**系统能力:** SystemCapability.Web.Webview.Core
11593
11594| 名称 | 类型 | 可读 | 可写 | 说明|
11595| ---- | ---- | ---- | ---- |---- |
11596| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。|
11597| extra | string        | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 |
11598
11599## WebMessage
11600
11601type WebMessage = ArrayBuffer | string
11602
11603用于描述[WebMessagePort](#webmessageport)所支持的数据类型。
11604
11605**系统能力:** SystemCapability.Web.Webview.Core
11606
11607| 类型       | 说明                                     |
11608| -------- | -------------------------------------- |
11609| string   | 字符串类型数据。 |
11610| ArrayBuffer   | 二进制类型数据。 |
11611
11612## JsMessageType<sup>10+</sup>
11613
11614[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。
11615
11616**系统能力:** SystemCapability.Web.Webview.Core
11617
11618| 名称         | 值 | 说明                              |
11619| ------------ | -- |--------------------------------- |
11620| NOT_SUPPORT  | 0 |不支持的数据类型。|
11621| STRING       | 1 |字符串类型。|
11622| NUMBER       | 2 |数值类型。|
11623| BOOLEAN      | 3 |布尔类型。|
11624| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11625| ARRAY        | 5 |数组类型|
11626
11627## WebMessageType<sup>10+</sup>
11628
11629[webMessagePort](#webmessageport)接口所支持的数据类型。
11630
11631**系统能力:** SystemCapability.Web.Webview.Core
11632
11633| 名称         | 值 | 说明                            |
11634| ------------ | -- |------------------------------- |
11635| NOT_SUPPORT  | 0 |不支持的数据类型。|
11636| STRING       | 1 |字符串类型。|
11637| NUMBER       | 2 |数值类型。|
11638| BOOLEAN      | 3 |布尔类型。|
11639| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。|
11640| ARRAY        | 5 |数组类型。|
11641| ERROR        | 6 |错误类型。|
11642
11643## MediaPlaybackState<sup>12+</sup>
11644
11645当前网页的播控状态。
11646
11647**系统能力:** SystemCapability.Web.Webview.Core
11648
11649| 名称    | 值   | 说明               |
11650| ------- | ---- | ------------------ |
11651| NONE    | 0    | 页面无音视频启播。 |
11652| PLAYING | 1    | 页面音视频播放中。 |
11653| PAUSED  | 2    | 页面音视频暂停。   |
11654| STOPPED | 3    | 页面音视频停止。   |
11655
11656## RenderProcessMode<sup>12+</sup>
11657
11658ArkWeb渲染子进程模式类型。
11659
11660**系统能力:** SystemCapability.Web.Webview.Core
11661
11662| 名称          | 值 | 说明                                      |
11663| ------------- | -- |----------------------------------------- |
11664| SINGLE        | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。|
11665| MULTIPLE      | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。|
11666
11667
11668## JsMessageExt<sup>10+</sup>
11669
11670[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。
11671
11672### getType<sup>10+</sup>
11673
11674getType(): JsMessageType
11675
11676获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11677
11678**系统能力:** SystemCapability.Web.Webview.Core
11679
11680**返回值:**
11681
11682| 类型           | 说明                                                      |
11683| --------------| --------------------------------------------------------- |
11684| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 |
11685
11686### getString<sup>10+</sup>
11687
11688getString(): string
11689
11690获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11691
11692**系统能力:** SystemCapability.Web.Webview.Core
11693
11694**返回值:**
11695
11696| 类型           | 说明          |
11697| --------------| ------------- |
11698| string | 返回字符串类型的数据。 |
11699
11700**错误码:**
11701
11702以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11703
11704| 错误码ID | 错误信息                              |
11705| -------- | ------------------------------------- |
11706| 17100014 | The type and value of the message do not match. |
11707
11708### getNumber<sup>10+</sup>
11709
11710getNumber(): number
11711
11712获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11713
11714**系统能力:** SystemCapability.Web.Webview.Core
11715
11716**返回值:**
11717
11718| 类型           | 说明          |
11719| --------------| ------------- |
11720| number | 返回数值类型的数据。 |
11721
11722**错误码:**
11723
11724以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11725
11726| 错误码ID | 错误信息                              |
11727| -------- | ------------------------------------- |
11728| 17100014 | The type and value of the message do not match. |
11729
11730### getBoolean<sup>10+</sup>
11731
11732getBoolean(): boolean
11733
11734获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11735
11736**系统能力:** SystemCapability.Web.Webview.Core
11737
11738**返回值:**
11739
11740| 类型           | 说明          |
11741| --------------| ------------- |
11742| boolean | 返回布尔类型的数据。 |
11743
11744**错误码:**
11745
11746以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11747
11748| 错误码ID | 错误信息                              |
11749| -------- | ------------------------------------- |
11750| 17100014 | The type and value of the message do not match. |
11751
11752### getArrayBuffer<sup>10+</sup>
11753
11754getArrayBuffer(): ArrayBuffer
11755
11756获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11757
11758**系统能力:** SystemCapability.Web.Webview.Core
11759
11760**返回值:**
11761
11762| 类型           | 说明          |
11763| --------------| ------------- |
11764| ArrayBuffer | 返回原始二进制数据。 |
11765
11766**错误码:**
11767
11768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11769
11770| 错误码ID | 错误信息                              |
11771| -------- | ------------------------------------- |
11772| 17100014 | The type and value of the message do not match. |
11773
11774### getArray<sup>10+</sup>
11775
11776getArray(): Array\<string | number | boolean\>
11777
11778获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。
11779
11780**系统能力:** SystemCapability.Web.Webview.Core
11781
11782**返回值:**
11783
11784| 类型           | 说明          |
11785| --------------| ------------- |
11786| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
11787
11788**错误码:**
11789
11790以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11791
11792| 错误码ID | 错误信息                              |
11793| -------- | ------------------------------------- |
11794| 17100014 | The type and value of the message do not match. |
11795
11796## WebMessageExt<sup>10+</sup>
11797
11798[webMessagePort](#webmessageport)接口接收、发送的数据对象。
11799
11800### getType<sup>10+</sup>
11801
11802getType(): WebMessageType
11803
11804获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11805
11806**系统能力:** SystemCapability.Web.Webview.Core
11807
11808**返回值:**
11809
11810| 类型           | 说明                                                      |
11811| --------------| --------------------------------------------------------- |
11812| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
11813
11814### getString<sup>10+</sup>
11815
11816getString(): string
11817
11818获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11819
11820**系统能力:** SystemCapability.Web.Webview.Core
11821
11822**返回值:**
11823
11824| 类型           | 说明          |
11825| --------------| ------------- |
11826| string | 返回字符串类型的数据。 |
11827
11828**错误码:**
11829
11830以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11831
11832| 错误码ID | 错误信息                              |
11833| -------- | ------------------------------------- |
11834| 17100014 | The type and value of the message do not match. |
11835
11836### getNumber<sup>10+</sup>
11837
11838getNumber(): number
11839
11840获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11841
11842**系统能力:** SystemCapability.Web.Webview.Core
11843
11844**返回值:**
11845
11846| 类型           | 说明          |
11847| --------------| ------------- |
11848| number | 返回数值类型的数据。 |
11849
11850**错误码:**
11851
11852以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11853
11854| 错误码ID | 错误信息                              |
11855| -------- | ------------------------------------- |
11856| 17100014 | The type and value of the message do not match. |
11857
11858### getBoolean<sup>10+</sup>
11859
11860getBoolean(): boolean
11861
11862获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11863
11864**系统能力:** SystemCapability.Web.Webview.Core
11865
11866**返回值:**
11867
11868| 类型           | 说明          |
11869| --------------| ------------- |
11870| boolean | 返回布尔类型的数据。 |
11871
11872**错误码:**
11873
11874以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11875
11876| 错误码ID | 错误信息                              |
11877| -------- | ------------------------------------- |
11878| 17100014 | The type and value of the message do not match. |
11879
11880### getArrayBuffer<sup>10+</sup>
11881
11882getArrayBuffer(): ArrayBuffer
11883
11884获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11885
11886**系统能力:** SystemCapability.Web.Webview.Core
11887
11888**返回值:**
11889
11890| 类型           | 说明          |
11891| --------------| ------------- |
11892| ArrayBuffer | 返回原始二进制数据。 |
11893
11894**错误码:**
11895
11896以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11897
11898| 错误码ID | 错误信息                              |
11899| -------- | ------------------------------------- |
11900| 17100014 | The type and value of the message do not match. |
11901
11902### getArray<sup>10+</sup>
11903
11904getArray(): Array\<string | number | boolean\>
11905
11906获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11907
11908**系统能力:** SystemCapability.Web.Webview.Core
11909
11910**返回值:**
11911
11912| 类型           | 说明          |
11913| --------------| ------------- |
11914| Array\<string \| number \| boolean\> | 返回数组类型的数据。 |
11915
11916**错误码:**
11917
11918以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11919
11920| 错误码ID | 错误信息                              |
11921| -------- | ------------------------------------- |
11922| 17100014 | The type and value of the message do not match. |
11923
11924### getError<sup>10+</sup>
11925
11926getError(): Error
11927
11928获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11929
11930**系统能力:** SystemCapability.Web.Webview.Core
11931
11932**返回值:**
11933
11934| 类型           | 说明          |
11935| --------------| ------------- |
11936| Error | 返回错误对象类型的数据。 |
11937
11938**错误码:**
11939
11940以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
11941
11942| 错误码ID | 错误信息                              |
11943| -------- | ------------------------------------- |
11944| 17100014 | The type and value of the message do not match. |
11945
11946### setType<sup>10+</sup>
11947
11948setType(type: WebMessageType): void
11949
11950设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11951
11952**系统能力:** SystemCapability.Web.Webview.Core
11953
11954**参数:**
11955
11956| 参数名 | 类型   | 必填 | 说明                   |
11957| ------ | ------ | ---- | ---------------------- |
11958| type  | [WebMessageType](#webmessagetype10) | 是   | [webMessagePort](#webmessageport)接口所支持的数据类型。 |
11959
11960**错误码:**
11961
11962| 错误码ID | 错误信息                              |
11963| -------- | ------------------------------------- |
11964| 17100014 | The type and value of the message do not match. |
11965| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11966
11967### setString<sup>10+</sup>
11968
11969setString(message: string): void
11970
11971设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11972
11973**系统能力:** SystemCapability.Web.Webview.Core
11974
11975**参数:**
11976
11977| 参数名 | 类型   | 必填 | 说明                   |
11978| ------ | ------ | ---- | -------------------- |
11979| message  | string | 是   | 字符串类型数据。 |
11980
11981**错误码:**
11982
11983| 错误码ID | 错误信息                              |
11984| -------- | ------------------------------------- |
11985| 17100014 | The type and value of the message do not match. |
11986| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
11987
11988### setNumber<sup>10+</sup>
11989
11990setNumber(message: number): void
11991
11992设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
11993
11994**系统能力:** SystemCapability.Web.Webview.Core
11995
11996**参数:**
11997
11998| 参数名 | 类型   | 必填 | 说明                   |
11999| ------ | ------ | ---- | -------------------- |
12000| message  | number | 是   | 数值类型数据。 |
12001
12002**错误码:**
12003
12004| 错误码ID | 错误信息                              |
12005| -------- | ------------------------------------- |
12006| 17100014 | The type and value of the message do not match. |
12007| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12008
12009### setBoolean<sup>10+</sup>
12010
12011setBoolean(message: boolean): void
12012
12013设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12014
12015**系统能力:** SystemCapability.Web.Webview.Core
12016
12017**参数:**
12018
12019| 参数名 | 类型   | 必填 | 说明                   |
12020| ------ | ------ | ---- | -------------------- |
12021| message  | boolean | 是   | 布尔类型数据。 |
12022
12023**错误码:**
12024
12025| 错误码ID | 错误信息                              |
12026| -------- | ------------------------------------- |
12027| 17100014 | The type and value of the message do not match. |
12028| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12029
12030### setArrayBuffer<sup>10+</sup>
12031
12032setArrayBuffer(message: ArrayBuffer): void
12033
12034设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12035
12036**系统能力:** SystemCapability.Web.Webview.Core
12037
12038**参数:**
12039
12040| 参数名 | 类型   | 必填 | 说明                   |
12041| ------ | ------ | ---- | -------------------- |
12042| message  | ArrayBuffer | 是   | 原始二进制类型数据。 |
12043
12044**错误码:**
12045
12046以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12047
12048| 错误码ID | 错误信息                              |
12049| -------- | ------------------------------------- |
12050| 17100014 | The type and value of the message do not match. |
12051| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12052
12053### setArray<sup>10+</sup>
12054
12055setArray(message: Array\<string | number | boolean\>): void
12056
12057设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12058
12059**系统能力:** SystemCapability.Web.Webview.Core
12060
12061**参数:**
12062
12063| 参数名 | 类型   | 必填 | 说明                   |
12064| ------ | ------ | ---- | -------------------- |
12065| message  | Array\<string \| number \| boolean\> | 是   | 数组类型数据。 |
12066
12067**错误码:**
12068
12069以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12070
12071| 错误码ID | 错误信息                              |
12072| -------- | ------------------------------------- |
12073| 17100014 | The type and value of the message do not match. |
12074| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12075
12076### setError<sup>10+</sup>
12077
12078setError(message: Error): void
12079
12080设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。
12081
12082**系统能力:** SystemCapability.Web.Webview.Core
12083
12084**参数:**
12085
12086| 参数名 | 类型   | 必填 | 说明                   |
12087| ------ | ------ | ---- | -------------------- |
12088| message  | Error | 是   | 错误对象类型数据。 |
12089
12090**错误码:**
12091
12092以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12093
12094| 错误码ID | 错误信息                              |
12095| -------- | ------------------------------------- |
12096| 17100014 | The type and value of the message do not match. |
12097| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12098
12099## WebStorageOrigin
12100
12101提供Web SQL数据库的使用信息。
12102
12103**系统能力:** SystemCapability.Web.Webview.Core
12104
12105| 名称   | 类型   | 可读 | 可写 | 说明 |
12106| ------ | ------ | ---- | ---- | ---- |
12107| origin | string | 是  | 是 | 指定源的字符串索引。 |
12108| usage  | number | 是  | 是 | 指定源的存储量。     |
12109| quota  | number | 是  | 是 | 指定源的存储配额。   |
12110
12111## BackForwardList
12112
12113当前Webview的历史信息列表。
12114
12115**系统能力:** SystemCapability.Web.Webview.Core
12116
12117| 名称         | 类型   | 可读 | 可写 | 说明                                                         |
12118| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ |
12119| currentIndex | number | 是   | 是   | 当前在页面历史列表中的索引。                                 |
12120| size         | number | 是   | 是   | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 |
12121
12122### getItemAtIndex
12123
12124getItemAtIndex(index: number): HistoryItem
12125
12126获取历史列表中指定索引的历史记录项信息。
12127
12128**系统能力:** SystemCapability.Web.Webview.Core
12129
12130**参数:**
12131
12132| 参数名 | 类型   | 必填 | 说明                   |
12133| ------ | ------ | ---- | ---------------------- |
12134| index  | number | 是   | 指定历史列表中的索引。 |
12135
12136**返回值:**
12137
12138| 类型                        | 说明         |
12139| --------------------------- | ------------ |
12140| [HistoryItem](#historyitem) | 历史记录项。 |
12141
12142**错误码:**
12143
12144以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
12145
12146| 错误码ID | 错误信息                                                |
12147| -------- | ------------------------------------------------------ |
12148| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
12149
12150**示例:**
12151
12152```ts
12153// xxx.ets
12154import { webview } from '@kit.ArkWeb';
12155import { BusinessError } from '@kit.BasicServicesKit';
12156import { image } from '@kit.ImageKit';
12157
12158@Entry
12159@Component
12160struct WebComponent {
12161  controller: webview.WebviewController = new webview.WebviewController();
12162  @State icon: image.PixelMap | undefined = undefined;
12163
12164  build() {
12165    Column() {
12166      Button('getBackForwardEntries')
12167        .onClick(() => {
12168          try {
12169            let list = this.controller.getBackForwardEntries();
12170            let historyItem = list.getItemAtIndex(list.currentIndex);
12171            console.log("HistoryItem: " + JSON.stringify(historyItem));
12172            this.icon = historyItem.icon;
12173          } catch (error) {
12174            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12175          }
12176        })
12177      Web({ src: 'www.example.com', controller: this.controller })
12178    }
12179  }
12180}
12181```
12182
12183## HistoryItem
12184
12185页面历史记录项。
12186
12187**系统能力:** SystemCapability.Web.Webview.Core
12188
12189| 名称          | 类型                                   | 可读 | 可写 | 说明                         |
12190| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- |
12191| icon          | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | 否   | 历史页面图标的PixelMap对象。 |
12192| historyUrl    | string                                 | 是   | 是   | 历史记录项的url地址。        |
12193| historyRawUrl | string                                 | 是   | 是   | 历史记录项的原始url地址。    |
12194| title         | string                                 | 是   | 是   | 历史记录项的标题。           |
12195
12196## WebCustomScheme
12197
12198自定义协议配置。
12199
12200**系统能力:** SystemCapability.Web.Webview.Core
12201
12202| 名称           | 类型       | 可读 | 可写 | 说明                         |
12203| -------------- | --------- | ---- | ---- | ---------------------------- |
12204| schemeName     | string    | 是   | 是   | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。        |
12205| isSupportCORS  | boolean   | 是   | 是   | 是否支持跨域请求。    |
12206| isSupportFetch | boolean   | 是   | 是   | 是否支持fetch请求。           |
12207| isStandard<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。           |
12208| isLocal<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“FILE”的安全规则相同的安全规则来处理。           |
12209| isDisplayIsolated<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。           |
12210| isSecure<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。           |
12211| isCspBypassing<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。在大多数情况下,当设置isStandard为true时,不应设置此值。         |
12212| isCodeCacheSupported<sup>12+</sup> | boolean   | 是   | 是   | 设置了该选项的scheme的js资源,支持生成code cache。         |
12213
12214## SecureDnsMode<sup>10+</sup>
12215
12216Web组件使用HTTPDNS的模式。
12217
12218**系统能力:** SystemCapability.Web.Webview.Core
12219
12220| 名称          | 值 | 说明                                      |
12221| ------------- | -- |----------------------------------------- |
12222| OFF                                  | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。|
12223| AUTO                                 | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。|
12224| SECURE_ONLY                          | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|
12225
12226## WebDownloadState<sup>11+</sup>
12227
12228下载任务的状态。
12229
12230**系统能力:** SystemCapability.Web.Webview.Core
12231
12232| 名称          | 值 | 说明                                      |
12233| ------------- | -- |----------------------------------------- |
12234| IN_PROGRESS                                  | 0 |下载任务正在进行中。|
12235| COMPLETED                                 | 1 |下载任务已经完成。|
12236| CANCELED                          | 2 |下载任务已经被取消。|
12237| INTERRUPTED                          | 3 |下载任务被中断。|
12238| PENDING                          | 4 |下载任务等待开始。|
12239| PAUSED                          | 5 |下载任务已经被暂停。|
12240| UNKNOWN                          | 6 |下载任务未知状态。|
12241
12242## WebDownloadErrorCode<sup>11+</sup>
12243
12244下载任务的错误码。
12245
12246**系统能力:** SystemCapability.Web.Webview.Core
12247
12248| 名称          | 值 | 说明                                      |
12249| ------------- | -- |----------------------------------------- |
12250| ERROR_UNKNOWN                                  | 0 |未知的错误。|
12251| FILE_FAILED | 1 |  常规文件操作失败。|
12252| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。|
12253| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。|
12254| FILE_NAME_TOO_LONG | 5 | 文件名字过长。|
12255| FILE_TOO_LARGE | 6 | 文件太大。|
12256| FILE_TRANSIENT_ERROR | 10 |  出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。|
12257| FILE_BLOCKED | 11 |  由于某些本地策略,文件被阻止访问。|
12258| FILE_TOO_SHORT | 13 |  当尝试恢复下载时,发现文件不够长,可能该文件已不存在。|
12259| FILE_HASH_MISMATCH | 14 |  哈希不匹配。|
12260| FILE_SAME_AS_SOURCE | 15 |  文件已存在。|
12261| NETWORK_FAILED | 20 |  一般网络错误。|
12262| NETWORK_TIMEOUT | 21 | 网络超时。|
12263| NETWORK_DISCONNECTED | 22 | 网络断开连接。|
12264| NETWORK_SERVER_DOWN | 23 |  服务器关闭。|
12265| NETWORK_INVALID_REQUEST | 24 |  无效的网络请求,可能重定向到不支持的方案或无效的URL。|
12266| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。|
12267| SERVER_NO_RANGE | 31 |  服务器不支持范围请求。|
12268| SERVER_BAD_CONTENT | 33 |   服务器没有请求的数据。|
12269| SERVER_UNAUTHORIZED | 34 |  服务器不允许下载该文件。|
12270| SERVER_CERT_PROBLEM | 35 |  服务器证书错误。|
12271| SERVER_FORBIDDEN | 36 |  服务器访问被禁止。|
12272| SERVER_UNREACHABLE | 37 |  无法访问服务器。|
12273| SERVER_CONTENT_LENGTH_MISMATCH | 38 |  接收到的数据与内容长度不匹配。|
12274| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。|
12275| USER_CANCELED | 40 | 用户取消了下载。|
12276| USER_SHUTDOWN | 41 | 用户关闭了应用。|
12277| CRASH | 50 | 应用发生了崩溃。|
12278
12279## WebDownloadItem<sup>11+</sup>
12280
12281 表示下载任务,您可以使用此对象来操作相应的下载任务。
12282
12283> **说明:**
12284>
12285> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
12286
12287### getGuid<sup>11+</sup>
12288
12289getGuid(): string
12290
12291获取下载任务的唯一ID。
12292
12293**系统能力:** SystemCapability.Web.Webview.Core
12294
12295**返回值:**
12296
12297| 类型   | 说明                      |
12298| ------ | ------------------------- |
12299| string | 下载任务的唯一ID。 |
12300
12301**示例:**
12302
12303```ts
12304// xxx.ets
12305import { webview } from '@kit.ArkWeb';
12306import { BusinessError } from '@kit.BasicServicesKit';
12307
12308@Entry
12309@Component
12310struct WebComponent {
12311  controller: webview.WebviewController = new webview.WebviewController();
12312  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12313
12314  build() {
12315    Column() {
12316      Button('setDownloadDelegate')
12317        .onClick(() => {
12318          try {
12319            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12320              console.log("will start a download.");
12321              // 传入一个下载路径,并开始下载。
12322              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12323            })
12324            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12325              console.log("download update guid: " + webDownloadItem.getGuid());
12326            })
12327            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12328              console.log("download failed guid: " + webDownloadItem.getGuid());
12329            })
12330            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12331              console.log("download finish guid: " + webDownloadItem.getGuid());
12332            })
12333            this.controller.setDownloadDelegate(this.delegate);
12334          } catch (error) {
12335            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12336          }
12337        })
12338      Button('startDownload')
12339        .onClick(() => {
12340          try {
12341            this.controller.startDownload('https://www.example.com');
12342          } catch (error) {
12343            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12344          }
12345        })
12346      Web({ src: 'www.example.com', controller: this.controller })
12347    }
12348  }
12349}
12350```
12351
12352### getCurrentSpeed<sup>11+</sup>
12353
12354getCurrentSpeed(): number
12355
12356获取下载的速度,单位:字节每秒。
12357
12358**系统能力:** SystemCapability.Web.Webview.Core
12359
12360**返回值:**
12361
12362| 类型   | 说明                      |
12363| ------ | ------------------------- |
12364| number | 下载的速度(字节每秒)。 |
12365
12366**示例:**
12367
12368```ts
12369// xxx.ets
12370import { webview } from '@kit.ArkWeb';
12371import { BusinessError } from '@kit.BasicServicesKit';
12372
12373@Entry
12374@Component
12375struct WebComponent {
12376  controller: webview.WebviewController = new webview.WebviewController();
12377  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12378
12379  build() {
12380    Column() {
12381      Button('setDownloadDelegate')
12382        .onClick(() => {
12383          try {
12384            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12385              console.log("will start a download.");
12386              // 传入一个下载路径,并开始下载。
12387              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12388            })
12389            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12390              console.log("download update current speed: " + webDownloadItem.getCurrentSpeed());
12391            })
12392            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12393              console.log("download failed guid: " + webDownloadItem.getGuid());
12394            })
12395            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12396              console.log("download finish guid: " + webDownloadItem.getGuid());
12397            })
12398            this.controller.setDownloadDelegate(this.delegate);
12399          } catch (error) {
12400            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12401          }
12402        })
12403      Button('startDownload')
12404        .onClick(() => {
12405          try {
12406            this.controller.startDownload('https://www.example.com');
12407          } catch (error) {
12408            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12409          }
12410        })
12411      Web({ src: 'www.example.com', controller: this.controller })
12412    }
12413  }
12414}
12415```
12416
12417### getPercentComplete<sup>11+</sup>
12418
12419getPercentComplete(): number
12420
12421获取下载的进度,100代表下载完成。
12422
12423**系统能力:** SystemCapability.Web.Webview.Core
12424
12425**返回值:**
12426
12427| 类型   | 说明                      |
12428| ------ | ------------------------- |
12429| number | 下载完成的进度,100代表下载完成。 |
12430
12431**示例:**
12432
12433```ts
12434// xxx.ets
12435import { webview } from '@kit.ArkWeb';
12436import { BusinessError } from '@kit.BasicServicesKit';
12437
12438@Entry
12439@Component
12440struct WebComponent {
12441  controller: webview.WebviewController = new webview.WebviewController();
12442  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12443
12444  build() {
12445    Column() {
12446      Button('setDownloadDelegate')
12447        .onClick(() => {
12448          try {
12449            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12450              console.log("will start a download.");
12451              // 传入一个下载路径,并开始下载。
12452              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12453            })
12454            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12455              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12456            })
12457            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12458              console.log("download failed guid: " + webDownloadItem.getGuid());
12459            })
12460            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12461              console.log("download finish guid: " + webDownloadItem.getGuid());
12462            })
12463            this.controller.setDownloadDelegate(this.delegate);
12464          } catch (error) {
12465            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12466          }
12467        })
12468      Button('startDownload')
12469        .onClick(() => {
12470          try {
12471            this.controller.startDownload('https://www.example.com');
12472          } catch (error) {
12473            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12474          }
12475        })
12476      Web({ src: 'www.example.com', controller: this.controller })
12477    }
12478  }
12479}
12480```
12481
12482### getTotalBytes<sup>11+</sup>
12483
12484getTotalBytes(): number
12485
12486获取待下载文件的总长度。
12487
12488**系统能力:** SystemCapability.Web.Webview.Core
12489
12490**返回值:**
12491
12492| 类型   | 说明                      |
12493| ------ | ------------------------- |
12494| number | 待下载文件的总长度。 |
12495
12496**示例:**
12497
12498```ts
12499// xxx.ets
12500import { webview } from '@kit.ArkWeb';
12501import { BusinessError } from '@kit.BasicServicesKit';
12502
12503@Entry
12504@Component
12505struct WebComponent {
12506  controller: webview.WebviewController = new webview.WebviewController();
12507  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12508
12509  build() {
12510    Column() {
12511      Button('setDownloadDelegate')
12512        .onClick(() => {
12513          try {
12514            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12515              console.log("will start a download.");
12516              // 传入一个下载路径,并开始下载。
12517              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12518            })
12519            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12520              console.log("download update total bytes: " + webDownloadItem.getTotalBytes());
12521            })
12522            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12523              console.log("download failed guid: " + webDownloadItem.getGuid());
12524            })
12525            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12526              console.log("download finish guid: " + webDownloadItem.getGuid());
12527            })
12528            this.controller.setDownloadDelegate(this.delegate);
12529          } catch (error) {
12530            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12531          }
12532        })
12533      Button('startDownload')
12534        .onClick(() => {
12535          try {
12536            this.controller.startDownload('https://www.example.com');
12537          } catch (error) {
12538            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12539          }
12540        })
12541      Web({ src: 'www.example.com', controller: this.controller })
12542    }
12543  }
12544}
12545```
12546
12547### getState<sup>11+</sup>
12548
12549getState(): WebDownloadState
12550
12551获取下载的状态。
12552
12553**系统能力:** SystemCapability.Web.Webview.Core
12554
12555**返回值:**
12556
12557| 类型   | 说明                      |
12558| ------ | ------------------------- |
12559| [WebDownloadState](#webdownloadstate11) | 下载的状态。 |
12560
12561**示例:**
12562
12563```ts
12564// xxx.ets
12565import { webview } from '@kit.ArkWeb';
12566import { BusinessError } from '@kit.BasicServicesKit';
12567
12568@Entry
12569@Component
12570struct WebComponent {
12571  controller: webview.WebviewController = new webview.WebviewController();
12572  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12573
12574  build() {
12575    Column() {
12576      Button('setDownloadDelegate')
12577        .onClick(() => {
12578          try {
12579            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12580              console.log("will start a download.");
12581              // 传入一个下载路径,并开始下载。
12582              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12583            })
12584            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12585              console.log("download update download state: " + webDownloadItem.getState());
12586            })
12587            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12588              console.log("download failed guid: " + webDownloadItem.getGuid());
12589            })
12590            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12591              console.log("download finish guid: " + webDownloadItem.getGuid());
12592            })
12593            this.controller.setDownloadDelegate(this.delegate);
12594          } catch (error) {
12595            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12596          }
12597        })
12598      Button('startDownload')
12599        .onClick(() => {
12600          try {
12601            this.controller.startDownload('https://www.example.com');
12602          } catch (error) {
12603            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12604          }
12605        })
12606      Web({ src: 'www.example.com', controller: this.controller })
12607    }
12608  }
12609}
12610```
12611
12612### getLastErrorCode<sup>11+</sup>
12613
12614getLastErrorCode(): WebDownloadErrorCode
12615
12616获取下载的错误码。
12617
12618**系统能力:** SystemCapability.Web.Webview.Core
12619
12620**返回值:**
12621
12622| 类型   | 说明                      |
12623| ------ | ------------------------- |
12624| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 |
12625
12626**示例:**
12627
12628```ts
12629// xxx.ets
12630import { webview } from '@kit.ArkWeb';
12631import { BusinessError } from '@kit.BasicServicesKit';
12632
12633@Entry
12634@Component
12635struct WebComponent {
12636  controller: webview.WebviewController = new webview.WebviewController();
12637  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12638
12639  build() {
12640    Column() {
12641      Button('setDownloadDelegate')
12642        .onClick(() => {
12643          try {
12644            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12645              console.log("will start a download.");
12646              // 传入一个下载路径,并开始下载。
12647              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12648            })
12649            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12650              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12651            })
12652            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12653              console.log("download failed guid: " + webDownloadItem.getGuid());
12654              console.log("download error code: " + webDownloadItem.getLastErrorCode());
12655            })
12656            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12657              console.log("download finish guid: " + webDownloadItem.getGuid());
12658            })
12659            this.controller.setDownloadDelegate(this.delegate);
12660          } catch (error) {
12661            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12662          }
12663        })
12664      Button('startDownload')
12665        .onClick(() => {
12666          try {
12667            this.controller.startDownload('https://www.example.com');
12668          } catch (error) {
12669            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12670          }
12671        })
12672      Web({ src: 'www.example.com', controller: this.controller })
12673    }
12674  }
12675}
12676```
12677
12678### getMethod<sup>11+</sup>
12679
12680getMethod(): string
12681
12682获取下载任务的请求方式。
12683
12684**系统能力:** SystemCapability.Web.Webview.Core
12685
12686**返回值:**
12687
12688| 类型   | 说明                      |
12689| ------ | ------------------------- |
12690| string | 下载的请求方式。 |
12691
12692**示例:**
12693
12694```ts
12695// xxx.ets
12696import { webview } from '@kit.ArkWeb';
12697import { BusinessError } from '@kit.BasicServicesKit';
12698
12699@Entry
12700@Component
12701struct WebComponent {
12702  controller: webview.WebviewController = new webview.WebviewController();
12703  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12704
12705  build() {
12706    Column() {
12707      Button('setDownloadDelegate')
12708        .onClick(() => {
12709          try {
12710            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12711              console.log("will start a download, method:" + webDownloadItem.getMethod());
12712              // 传入一个下载路径,并开始下载。
12713              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12714            })
12715            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12716              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12717            })
12718            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12719              console.log("download failed guid: " + webDownloadItem.getGuid());
12720            })
12721            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12722              console.log("download finish guid: " + webDownloadItem.getGuid());
12723            })
12724            this.controller.setDownloadDelegate(this.delegate);
12725          } catch (error) {
12726            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12727          }
12728        })
12729      Button('startDownload')
12730        .onClick(() => {
12731          try {
12732            this.controller.startDownload('https://www.example.com');
12733          } catch (error) {
12734            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12735          }
12736        })
12737      Web({ src: 'www.example.com', controller: this.controller })
12738    }
12739  }
12740}
12741```
12742
12743### getMimeType<sup>11+</sup>
12744
12745getMimeType(): string
12746
12747获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
12748
12749**系统能力:** SystemCapability.Web.Webview.Core
12750
12751**返回值:**
12752
12753| 类型   | 说明                      |
12754| ------ | ------------------------- |
12755| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
12756
12757**示例:**
12758
12759```ts
12760// xxx.ets
12761import { webview } from '@kit.ArkWeb';
12762import { BusinessError } from '@kit.BasicServicesKit';
12763
12764@Entry
12765@Component
12766struct WebComponent {
12767  controller: webview.WebviewController = new webview.WebviewController();
12768  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12769
12770  build() {
12771    Column() {
12772      Button('setDownloadDelegate')
12773        .onClick(() => {
12774          try {
12775            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12776              console.log("will start a download, mime type:" + webDownloadItem.getMimeType());
12777              // 传入一个下载路径,并开始下载。
12778              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12779            })
12780            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12781              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12782            })
12783            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12784              console.log("download failed guid: " + webDownloadItem.getGuid());
12785            })
12786            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12787              console.log("download finish guid: " + webDownloadItem.getGuid());
12788            })
12789            this.controller.setDownloadDelegate(this.delegate);
12790          } catch (error) {
12791            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12792          }
12793        })
12794      Button('startDownload')
12795        .onClick(() => {
12796          try {
12797            this.controller.startDownload('https://www.example.com');
12798          } catch (error) {
12799            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12800          }
12801        })
12802      Web({ src: 'www.example.com', controller: this.controller })
12803    }
12804  }
12805}
12806```
12807
12808### getUrl<sup>11+</sup>
12809
12810getUrl(): string
12811
12812获取下载的请求地址。
12813
12814**系统能力:** SystemCapability.Web.Webview.Core
12815
12816**返回值:**
12817
12818| 类型   | 说明                      |
12819| ------ | ------------------------- |
12820| string | 下载的请求地址。 |
12821
12822**示例:**
12823
12824```ts
12825// xxx.ets
12826import { webview } from '@kit.ArkWeb';
12827import { BusinessError } from '@kit.BasicServicesKit';
12828
12829@Entry
12830@Component
12831struct WebComponent {
12832  controller: webview.WebviewController = new webview.WebviewController();
12833  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12834
12835  build() {
12836    Column() {
12837      Button('setDownloadDelegate')
12838        .onClick(() => {
12839          try {
12840            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12841              console.log("will start a download, url:" + webDownloadItem.getUrl());
12842              // 传入一个下载路径,并开始下载。
12843              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12844            })
12845            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12846              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12847            })
12848            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12849              console.log("download failed guid: " + webDownloadItem.getGuid());
12850            })
12851            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12852              console.log("download finish guid: " + webDownloadItem.getGuid());
12853            })
12854            this.controller.setDownloadDelegate(this.delegate);
12855          } catch (error) {
12856            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12857          }
12858        })
12859      Button('startDownload')
12860        .onClick(() => {
12861          try {
12862            this.controller.startDownload('https://www.example.com');
12863          } catch (error) {
12864            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12865          }
12866        })
12867      Web({ src: 'www.example.com', controller: this.controller })
12868    }
12869  }
12870}
12871```
12872
12873### getSuggestedFileName<sup>11+</sup>
12874
12875getSuggestedFileName(): string
12876
12877获取下载的建议文件名。
12878
12879**系统能力:** SystemCapability.Web.Webview.Core
12880
12881**返回值:**
12882
12883| 类型   | 说明                      |
12884| ------ | ------------------------- |
12885| string | 下载的建议文件名。 |
12886
12887**示例:**
12888
12889```ts
12890// xxx.ets
12891import { webview } from '@kit.ArkWeb';
12892import { BusinessError } from '@kit.BasicServicesKit';
12893
12894@Entry
12895@Component
12896struct WebComponent {
12897  controller: webview.WebviewController = new webview.WebviewController();
12898  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12899
12900  build() {
12901    Column() {
12902      Button('setDownloadDelegate')
12903        .onClick(() => {
12904          try {
12905            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12906              console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
12907              // 传入一个下载路径,并开始下载。
12908              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12909            })
12910            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12911              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12912            })
12913            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12914              console.log("download failed guid: " + webDownloadItem.getGuid());
12915            })
12916            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12917              console.log("download finish guid: " + webDownloadItem.getGuid());
12918            })
12919            this.controller.setDownloadDelegate(this.delegate);
12920          } catch (error) {
12921            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12922          }
12923        })
12924      Button('startDownload')
12925        .onClick(() => {
12926          try {
12927            this.controller.startDownload('https://www.example.com');
12928          } catch (error) {
12929            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12930          }
12931        })
12932      Web({ src: 'www.example.com', controller: this.controller })
12933    }
12934  }
12935}
12936```
12937
12938### getReceivedBytes<sup>11+</sup>
12939
12940getReceivedBytes(): number
12941
12942获取已经接收的字节数。
12943
12944**系统能力:** SystemCapability.Web.Webview.Core
12945
12946**返回值:**
12947
12948| 类型   | 说明                      |
12949| ------ | ------------------------- |
12950| number | 已经接收的字节数。 |
12951
12952**示例:**
12953
12954```ts
12955// xxx.ets
12956import { webview } from '@kit.ArkWeb';
12957import { BusinessError } from '@kit.BasicServicesKit';
12958
12959@Entry
12960@Component
12961struct WebComponent {
12962  controller: webview.WebviewController = new webview.WebviewController();
12963  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
12964
12965  build() {
12966    Column() {
12967      Button('setDownloadDelegate')
12968        .onClick(() => {
12969          try {
12970            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
12971              console.log("will start a download.");
12972              // 传入一个下载路径,并开始下载。
12973              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
12974            })
12975            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
12976              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
12977              console.log("download update received bytes: " + webDownloadItem.getReceivedBytes());
12978            })
12979            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
12980              console.log("download failed guid: " + webDownloadItem.getGuid());
12981            })
12982            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
12983              console.log("download finish guid: " + webDownloadItem.getGuid());
12984            })
12985            this.controller.setDownloadDelegate(this.delegate);
12986          } catch (error) {
12987            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12988          }
12989        })
12990      Button('startDownload')
12991        .onClick(() => {
12992          try {
12993            this.controller.startDownload('https://www.example.com');
12994          } catch (error) {
12995            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
12996          }
12997        })
12998      Web({ src: 'www.example.com', controller: this.controller })
12999    }
13000  }
13001}
13002```
13003
13004### getFullPath<sup>11+</sup>
13005
13006getFullPath(): string
13007
13008获取下载文件在磁盘上的全路径。
13009
13010**系统能力:** SystemCapability.Web.Webview.Core
13011
13012**返回值:**
13013
13014| 类型   | 说明                      |
13015| ------ | ------------------------- |
13016| string | 下载文件在磁盘上的全路径。 |
13017
13018**示例:**
13019
13020```ts
13021// xxx.ets
13022import { webview } from '@kit.ArkWeb';
13023import { BusinessError } from '@kit.BasicServicesKit';
13024
13025@Entry
13026@Component
13027struct WebComponent {
13028  controller: webview.WebviewController = new webview.WebviewController();
13029  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13030
13031  build() {
13032    Column() {
13033      Button('setDownloadDelegate')
13034        .onClick(() => {
13035          try {
13036            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13037              console.log("will start a download.");
13038              // 传入一个下载路径,并开始下载。
13039              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13040            })
13041            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13042              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13043            })
13044            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13045              console.log("download failed guid: " + webDownloadItem.getGuid());
13046            })
13047            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13048              console.log("download finish guid: " + webDownloadItem.getGuid());
13049              console.log("download finish full path: " + webDownloadItem.getFullPath());
13050            })
13051            this.controller.setDownloadDelegate(this.delegate);
13052          } catch (error) {
13053            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13054          }
13055        })
13056      Button('startDownload')
13057        .onClick(() => {
13058          try {
13059            this.controller.startDownload('https://www.example.com');
13060          } catch (error) {
13061            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13062          }
13063        })
13064      Web({ src: 'www.example.com', controller: this.controller })
13065    }
13066  }
13067}
13068```
13069
13070### serialize<sup>11+</sup>
13071
13072serialize(): Uint8Array
13073
13074将失败的下载序列化到一个字节数组。
13075
13076**系统能力:** SystemCapability.Web.Webview.Core
13077
13078**返回值:**
13079
13080| 类型   | 说明                      |
13081| ------ | ------------------------- |
13082| Uint8Array | 失败的下载序列化后的字节数组。 |
13083
13084**示例:**
13085
13086```ts
13087// xxx.ets
13088import { webview } from '@kit.ArkWeb';
13089import { BusinessError } from '@kit.BasicServicesKit';
13090
13091@Entry
13092@Component
13093struct WebComponent {
13094  controller: webview.WebviewController = new webview.WebviewController();
13095  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13096  failedData: Uint8Array = new Uint8Array();
13097
13098  build() {
13099    Column() {
13100      Button('setDownloadDelegate')
13101        .onClick(() => {
13102          try {
13103            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13104              console.log("will start a download.");
13105              // 传入一个下载路径,并开始下载。
13106              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13107            })
13108            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13109              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13110            })
13111            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13112              console.log("download failed guid: " + webDownloadItem.getGuid());
13113              // 序列化失败的下载到一个字节数组。
13114              this.failedData = webDownloadItem.serialize();
13115            })
13116            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13117              console.log("download finish guid: " + webDownloadItem.getGuid());
13118            })
13119            this.controller.setDownloadDelegate(this.delegate);
13120          } catch (error) {
13121            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13122          }
13123        })
13124      Button('startDownload')
13125        .onClick(() => {
13126          try {
13127            this.controller.startDownload('https://www.example.com');
13128          } catch (error) {
13129            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13130          }
13131        })
13132      Web({ src: 'www.example.com', controller: this.controller })
13133    }
13134  }
13135}
13136```
13137
13138### deserialize<sup>11+</sup>
13139
13140static deserialize(serializedData: Uint8Array): WebDownloadItem
13141
13142将序列化后的字节数组反序列化为一个WebDownloadItem对象。
13143
13144**系统能力:** SystemCapability.Web.Webview.Core
13145
13146**参数:**
13147
13148| 参数名              | 类型    | 必填   |  说明 |
13149| ------------------ | ------- | ---- | ------------- |
13150| serializedData | Uint8Array | 是   | 序列化后的下载。|
13151
13152**返回值:**
13153
13154| 类型   | 说明                      |
13155| ------ | ------------------------- |
13156| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 |
13157
13158**错误码:**
13159
13160以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13161
13162| 错误码ID | 错误信息                                                     |
13163| -------- | ------------------------------------------------------------ |
13164| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13165
13166**示例:**
13167
13168```ts
13169// xxx.ets
13170import { webview } from '@kit.ArkWeb';
13171import { BusinessError } from '@kit.BasicServicesKit';
13172
13173@Entry
13174@Component
13175struct WebComponent {
13176  controller: webview.WebviewController = new webview.WebviewController();
13177  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13178  failedData: Uint8Array = new Uint8Array();
13179
13180  build() {
13181    Column() {
13182      Button('setDownloadDelegate')
13183        .onClick(() => {
13184          try {
13185            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13186              console.log("will start a download.");
13187              // 传入一个下载路径,并开始下载。
13188              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13189            })
13190            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13191              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13192            })
13193            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13194              console.log("download failed guid: " + webDownloadItem.getGuid());
13195              // 序列化失败的下载到一个字节数组。
13196              this.failedData = webDownloadItem.serialize();
13197            })
13198            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13199              console.log("download finish guid: " + webDownloadItem.getGuid());
13200            })
13201            this.controller.setDownloadDelegate(this.delegate);
13202          } catch (error) {
13203            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13204          }
13205        })
13206      Button('startDownload')
13207        .onClick(() => {
13208          try {
13209            this.controller.startDownload('https://www.example.com');
13210          } catch (error) {
13211            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13212          }
13213        })
13214      Button('resumeDownload')
13215        .onClick(() => {
13216          try {
13217            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13218          } catch (error) {
13219            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13220          }
13221        })
13222      Web({ src: 'www.example.com', controller: this.controller })
13223    }
13224  }
13225}
13226```
13227
13228### start<sup>11+</sup>
13229
13230start(downloadPath: string): void
13231
13232开始一个下载,参数为下载文件的磁盘存储路径(包含文件名)。该接口需要在WebDownloadDelegate的onBeforeDownload回调中使用,如果在WebDownloadDelegate的onBeforeDownload中不调用start('xxx')该下载任务会一直处于PENDING状态。
13233
13234**系统能力:** SystemCapability.Web.Webview.Core
13235
13236**参数:**
13237
13238| 参数名 | 类型                   | 必填 | 说明                             |
13239| ------ | ---------------------- | ---- | ------------------------------|
13240| downloadPath   | string     | 是  | 下载文件的路径(包含文件名)。|
13241
13242**错误码:**
13243
13244以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13245
13246| 错误码ID | 错误信息                                                     |
13247| -------- | ------------------------------------------------------------ |
13248| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
13249
13250**示例:**
13251
13252```ts
13253// xxx.ets
13254import { webview } from '@kit.ArkWeb';
13255import { BusinessError } from '@kit.BasicServicesKit';
13256
13257@Entry
13258@Component
13259struct WebComponent {
13260  controller: webview.WebviewController = new webview.WebviewController();
13261  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13262  failedData: Uint8Array = new Uint8Array();
13263
13264  build() {
13265    Column() {
13266      Button('setDownloadDelegate')
13267        .onClick(() => {
13268          try {
13269            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13270              console.log("will start a download.");
13271              // 传入一个下载路径,并开始下载。
13272              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13273            })
13274            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13275              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13276            })
13277            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13278              console.log("download failed guid: " + webDownloadItem.getGuid());
13279              // 序列化失败的下载到一个字节数组。
13280              this.failedData = webDownloadItem.serialize();
13281            })
13282            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13283              console.log("download finish guid: " + webDownloadItem.getGuid());
13284            })
13285            this.controller.setDownloadDelegate(this.delegate);
13286          } catch (error) {
13287            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13288          }
13289        })
13290      Button('startDownload')
13291        .onClick(() => {
13292          try {
13293            this.controller.startDownload('https://www.example.com');
13294          } catch (error) {
13295            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13296          }
13297        })
13298      Button('resumeDownload')
13299        .onClick(() => {
13300          try {
13301            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13302          } catch (error) {
13303            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13304          }
13305        })
13306      Web({ src: 'www.example.com', controller: this.controller })
13307    }
13308  }
13309}
13310```
13311
13312### cancel<sup>11+</sup>
13313
13314cancel(): void
13315
13316取消一个正在下载的下载任务。
13317
13318**系统能力:** SystemCapability.Web.Webview.Core
13319
13320**示例:**
13321
13322```ts
13323// xxx.ets
13324import { webview } from '@kit.ArkWeb';
13325import { BusinessError } from '@kit.BasicServicesKit';
13326
13327@Entry
13328@Component
13329struct WebComponent {
13330  controller: webview.WebviewController = new webview.WebviewController();
13331  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13332  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13333  failedData: Uint8Array = new Uint8Array();
13334
13335  build() {
13336    Column() {
13337      Button('setDownloadDelegate')
13338        .onClick(() => {
13339          try {
13340            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13341              console.log("will start a download.");
13342              // 传入一个下载路径,并开始下载。
13343              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13344            })
13345            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13346              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13347              this.download = webDownloadItem;
13348            })
13349            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13350              console.log("download failed guid: " + webDownloadItem.getGuid());
13351              // 序列化失败的下载到一个字节数组。
13352              this.failedData = webDownloadItem.serialize();
13353            })
13354            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13355              console.log("download finish guid: " + webDownloadItem.getGuid());
13356            })
13357            this.controller.setDownloadDelegate(this.delegate);
13358          } catch (error) {
13359            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13360          }
13361        })
13362      Button('startDownload')
13363        .onClick(() => {
13364          try {
13365            this.controller.startDownload('https://www.example.com');
13366          } catch (error) {
13367            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13368          }
13369        })
13370      Button('resumeDownload')
13371        .onClick(() => {
13372          try {
13373            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13374          } catch (error) {
13375            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13376          }
13377        })
13378      Button('cancel')
13379        .onClick(() => {
13380          try {
13381            this.download.cancel();
13382          } catch (error) {
13383            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13384          }
13385        })
13386      Web({ src: 'www.example.com', controller: this.controller })
13387    }
13388  }
13389}
13390```
13391
13392### pause<sup>11+</sup>
13393
13394pause(): void
13395
13396暂停一个正在下载的下载任务。
13397
13398**系统能力:** SystemCapability.Web.Webview.Core
13399
13400**错误码:**
13401
13402以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13403
13404| 错误码ID  | 错误信息                                                      |
13405| -------- | ------------------------------------------------------------ |
13406| 17100019 | The download task is not started yet. |
13407
13408**示例:**
13409
13410```ts
13411// xxx.ets
13412import { webview } from '@kit.ArkWeb';
13413import { BusinessError } from '@kit.BasicServicesKit';
13414
13415@Entry
13416@Component
13417struct WebComponent {
13418  controller: webview.WebviewController = new webview.WebviewController();
13419  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13420  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13421  failedData: Uint8Array = new Uint8Array();
13422
13423  build() {
13424    Column() {
13425      Button('setDownloadDelegate')
13426        .onClick(() => {
13427          try {
13428            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13429              console.log("will start a download.");
13430              // 传入一个下载路径,并开始下载。
13431              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13432            })
13433            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13434              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13435              this.download = webDownloadItem;
13436            })
13437            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13438              console.log("download failed guid: " + webDownloadItem.getGuid());
13439              // 序列化失败的下载到一个字节数组。
13440              this.failedData = webDownloadItem.serialize();
13441            })
13442            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13443              console.log("download finish guid: " + webDownloadItem.getGuid());
13444            })
13445            this.controller.setDownloadDelegate(this.delegate);
13446          } catch (error) {
13447            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13448          }
13449        })
13450      Button('startDownload')
13451        .onClick(() => {
13452          try {
13453            this.controller.startDownload('https://www.example.com');
13454          } catch (error) {
13455            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13456          }
13457        })
13458      Button('resumeDownload')
13459        .onClick(() => {
13460          try {
13461            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13462          } catch (error) {
13463            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13464          }
13465        })
13466      Button('cancel')
13467        .onClick(() => {
13468          try {
13469            this.download.cancel();
13470          } catch (error) {
13471            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13472          }
13473        })
13474      Button('pause')
13475        .onClick(() => {
13476          try {
13477            this.download.pause();
13478          } catch (error) {
13479            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13480          }
13481        })
13482      Web({ src: 'www.example.com', controller: this.controller })
13483    }
13484  }
13485}
13486```
13487
13488### resume<sup>11+</sup>
13489
13490resume(): void
13491
13492恢复一个暂停的下载任务。
13493
13494**系统能力:** SystemCapability.Web.Webview.Core
13495
13496**错误码:**
13497
13498以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
13499
13500| 错误码ID  | 错误信息                                                      |
13501| -------- | ------------------------------------------------------------ |
13502| 17100016 | The download task is not paused. |
13503
13504**示例:**
13505
13506```ts
13507// xxx.ets
13508import { webview } from '@kit.ArkWeb';
13509import { BusinessError } from '@kit.BasicServicesKit';
13510
13511@Entry
13512@Component
13513struct WebComponent {
13514  controller: webview.WebviewController = new webview.WebviewController();
13515  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13516  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13517  failedData: Uint8Array = new Uint8Array();
13518
13519  build() {
13520    Column() {
13521      Button('setDownloadDelegate')
13522        .onClick(() => {
13523          try {
13524            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13525              console.log("will start a download.");
13526              // 传入一个下载路径,并开始下载。
13527              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13528            })
13529            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13530              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13531              this.download = webDownloadItem;
13532            })
13533            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13534              console.log("download failed guid: " + webDownloadItem.getGuid());
13535              // 序列化失败的下载到一个字节数组。
13536              this.failedData = webDownloadItem.serialize();
13537            })
13538            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13539              console.log("download finish guid: " + webDownloadItem.getGuid());
13540            })
13541            this.controller.setDownloadDelegate(this.delegate);
13542          } catch (error) {
13543            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13544          }
13545        })
13546      Button('startDownload')
13547        .onClick(() => {
13548          try {
13549            this.controller.startDownload('https://www.example.com');
13550          } catch (error) {
13551            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13552          }
13553        })
13554      Button('resumeDownload')
13555        .onClick(() => {
13556          try {
13557            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13558          } catch (error) {
13559            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13560          }
13561        })
13562      Button('cancel')
13563        .onClick(() => {
13564          try {
13565            this.download.cancel();
13566          } catch (error) {
13567            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13568          }
13569        })
13570      Button('pause')
13571        .onClick(() => {
13572          try {
13573            this.download.pause();
13574          } catch (error) {
13575            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13576          }
13577        })
13578      Button('resume')
13579        .onClick(() => {
13580          try {
13581            this.download.resume();
13582          } catch (error) {
13583            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13584          }
13585        })
13586      Web({ src: 'www.example.com', controller: this.controller })
13587    }
13588  }
13589}
13590```
13591
13592## WebDownloadDelegate<sup>11+</sup>
13593
13594 下载任务的状态会通过该类的回调接口通知给用户。
13595
13596### onBeforeDownload<sup>11+</sup>
13597
13598onBeforeDownload(callback: Callback\<WebDownloadItem>): void
13599
13600下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。
13601
13602**系统能力:** SystemCapability.Web.Webview.Core
13603
13604**参数:**
13605
13606| 参数名  | 类型   | 必填 | 说明           |
13607| ------- | ------ | ---- | :------------- |
13608| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 触发下载的回调。 |
13609
13610**示例:**
13611
13612```ts
13613// xxx.ets
13614import { webview } from '@kit.ArkWeb';
13615import { BusinessError } from '@kit.BasicServicesKit';
13616
13617@Entry
13618@Component
13619struct WebComponent {
13620  controller: webview.WebviewController = new webview.WebviewController();
13621  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13622  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13623  failedData: Uint8Array = new Uint8Array();
13624
13625  build() {
13626    Column() {
13627      Button('setDownloadDelegate')
13628        .onClick(() => {
13629          try {
13630            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13631              console.log("will start a download.");
13632              // 传入一个下载路径,并开始下载。
13633              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13634            })
13635            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13636              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13637              this.download = webDownloadItem;
13638            })
13639            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13640              console.log("download failed guid: " + webDownloadItem.getGuid());
13641              // 序列化失败的下载到一个字节数组。
13642              this.failedData = webDownloadItem.serialize();
13643            })
13644            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13645              console.log("download finish guid: " + webDownloadItem.getGuid());
13646            })
13647            this.controller.setDownloadDelegate(this.delegate);
13648          } catch (error) {
13649            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13650          }
13651        })
13652      Button('startDownload')
13653        .onClick(() => {
13654          try {
13655            this.controller.startDownload('https://www.example.com');
13656          } catch (error) {
13657            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13658          }
13659        })
13660      Button('resumeDownload')
13661        .onClick(() => {
13662          try {
13663            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13664          } catch (error) {
13665            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13666          }
13667        })
13668      Button('cancel')
13669        .onClick(() => {
13670          try {
13671            this.download.cancel();
13672          } catch (error) {
13673            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13674          }
13675        })
13676      Button('pause')
13677        .onClick(() => {
13678          try {
13679            this.download.pause();
13680          } catch (error) {
13681            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13682          }
13683        })
13684      Button('resume')
13685        .onClick(() => {
13686          try {
13687            this.download.resume();
13688          } catch (error) {
13689            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13690          }
13691        })
13692      Web({ src: 'www.example.com', controller: this.controller })
13693    }
13694  }
13695}
13696```
13697
13698### onDownloadUpdated<sup>11+</sup>
13699
13700onDownloadUpdated(callback: Callback\<WebDownloadItem>): void
13701
13702下载过程中的回调,通过该回调的参数可以了解下载进度等信息。
13703
13704**系统能力:** SystemCapability.Web.Webview.Core
13705
13706**参数:**
13707
13708| 参数名  | 类型   | 必填 | 说明           |
13709| ------- | ------ | ---- | :------------- |
13710| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已更新。 |
13711
13712**示例:**
13713
13714```ts
13715// xxx.ets
13716import { webview } from '@kit.ArkWeb';
13717import { BusinessError } from '@kit.BasicServicesKit';
13718
13719@Entry
13720@Component
13721struct WebComponent {
13722  controller: webview.WebviewController = new webview.WebviewController();
13723  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13724  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13725  failedData: Uint8Array = new Uint8Array();
13726
13727  build() {
13728    Column() {
13729      Button('setDownloadDelegate')
13730        .onClick(() => {
13731          try {
13732            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13733              console.log("will start a download.");
13734              // 传入一个下载路径,并开始下载。
13735              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13736            })
13737            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13738              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13739              this.download = webDownloadItem;
13740            })
13741            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13742              console.log("download failed guid: " + webDownloadItem.getGuid());
13743              // 序列化失败的下载到一个字节数组。
13744              this.failedData = webDownloadItem.serialize();
13745            })
13746            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13747              console.log("download finish guid: " + webDownloadItem.getGuid());
13748            })
13749            this.controller.setDownloadDelegate(this.delegate);
13750          } catch (error) {
13751            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13752          }
13753        })
13754      Button('startDownload')
13755        .onClick(() => {
13756          try {
13757            this.controller.startDownload('https://www.example.com');
13758          } catch (error) {
13759            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13760          }
13761        })
13762      Button('resumeDownload')
13763        .onClick(() => {
13764          try {
13765            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13766          } catch (error) {
13767            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13768          }
13769        })
13770      Button('cancel')
13771        .onClick(() => {
13772          try {
13773            this.download.cancel();
13774          } catch (error) {
13775            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13776          }
13777        })
13778      Button('pause')
13779        .onClick(() => {
13780          try {
13781            this.download.pause();
13782          } catch (error) {
13783            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13784          }
13785        })
13786      Button('resume')
13787        .onClick(() => {
13788          try {
13789            this.download.resume();
13790          } catch (error) {
13791            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13792          }
13793        })
13794      Web({ src: 'www.example.com', controller: this.controller })
13795    }
13796  }
13797}
13798```
13799
13800### onDownloadFinish<sup>11+</sup>
13801
13802onDownloadFinish(callback: Callback\<WebDownloadItem>): void
13803
13804下载完成的通知。
13805
13806**系统能力:** SystemCapability.Web.Webview.Core
13807
13808**参数:**
13809
13810| 参数名  | 类型   | 必填 | 说明           |
13811| ------- | ------ | ---- | :------------- |
13812| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载的回调已完成。 |
13813
13814**示例:**
13815
13816```ts
13817// xxx.ets
13818import { webview } from '@kit.ArkWeb';
13819import { BusinessError } from '@kit.BasicServicesKit';
13820
13821@Entry
13822@Component
13823struct WebComponent {
13824  controller: webview.WebviewController = new webview.WebviewController();
13825  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13826  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13827  failedData: Uint8Array = new Uint8Array();
13828
13829  build() {
13830    Column() {
13831      Button('setDownloadDelegate')
13832        .onClick(() => {
13833          try {
13834            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13835              console.log("will start a download.");
13836              // 传入一个下载路径,并开始下载。
13837              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13838            })
13839            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13840              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13841              this.download = webDownloadItem;
13842            })
13843            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13844              console.log("download failed guid: " + webDownloadItem.getGuid());
13845              // 序列化失败的下载到一个字节数组。
13846              this.failedData = webDownloadItem.serialize();
13847            })
13848            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13849              console.log("download finish guid: " + webDownloadItem.getGuid());
13850            })
13851            this.controller.setDownloadDelegate(this.delegate);
13852          } catch (error) {
13853            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13854          }
13855        })
13856      Button('startDownload')
13857        .onClick(() => {
13858          try {
13859            this.controller.startDownload('https://www.example.com');
13860          } catch (error) {
13861            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13862          }
13863        })
13864      Button('resumeDownload')
13865        .onClick(() => {
13866          try {
13867            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13868          } catch (error) {
13869            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13870          }
13871        })
13872      Button('cancel')
13873        .onClick(() => {
13874          try {
13875            this.download.cancel();
13876          } catch (error) {
13877            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13878          }
13879        })
13880      Button('pause')
13881        .onClick(() => {
13882          try {
13883            this.download.pause();
13884          } catch (error) {
13885            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13886          }
13887        })
13888      Button('resume')
13889        .onClick(() => {
13890          try {
13891            this.download.resume();
13892          } catch (error) {
13893            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13894          }
13895        })
13896      Web({ src: 'www.example.com', controller: this.controller })
13897    }
13898  }
13899}
13900```
13901
13902### onDownloadFailed<sup>11+</sup>
13903
13904onDownloadFailed(callback: Callback\<WebDownloadItem>): void
13905
13906下载失败的通知。
13907
13908**系统能力:** SystemCapability.Web.Webview.Core
13909
13910**参数:**
13911
13912| 参数名  | 类型   | 必填 | 说明           |
13913| ------- | ------ | ---- | :------------- |
13914| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是   | 下载回调失败。 |
13915
13916**示例:**
13917
13918```ts
13919// xxx.ets
13920import { webview } from '@kit.ArkWeb';
13921import { BusinessError } from '@kit.BasicServicesKit';
13922
13923@Entry
13924@Component
13925struct WebComponent {
13926  controller: webview.WebviewController = new webview.WebviewController();
13927  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
13928  download: webview.WebDownloadItem = new webview.WebDownloadItem();
13929  failedData: Uint8Array = new Uint8Array();
13930
13931  build() {
13932    Column() {
13933      Button('setDownloadDelegate')
13934        .onClick(() => {
13935          try {
13936            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
13937              console.log("will start a download.");
13938              // 传入一个下载路径,并开始下载。
13939              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
13940            })
13941            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
13942              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
13943              this.download = webDownloadItem;
13944            })
13945            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
13946              console.log("download failed guid: " + webDownloadItem.getGuid());
13947              // 序列化失败的下载到一个字节数组。
13948              this.failedData = webDownloadItem.serialize();
13949            })
13950            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
13951              console.log("download finish guid: " + webDownloadItem.getGuid());
13952            })
13953            this.controller.setDownloadDelegate(this.delegate);
13954          } catch (error) {
13955            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13956          }
13957        })
13958      Button('startDownload')
13959        .onClick(() => {
13960          try {
13961            this.controller.startDownload('https://www.example.com');
13962          } catch (error) {
13963            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13964          }
13965        })
13966      Button('resumeDownload')
13967        .onClick(() => {
13968          try {
13969            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
13970          } catch (error) {
13971            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13972          }
13973        })
13974      Button('cancel')
13975        .onClick(() => {
13976          try {
13977            this.download.cancel();
13978          } catch (error) {
13979            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13980          }
13981        })
13982      Button('pause')
13983        .onClick(() => {
13984          try {
13985            this.download.pause();
13986          } catch (error) {
13987            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13988          }
13989        })
13990      Button('resume')
13991        .onClick(() => {
13992          try {
13993            this.download.resume();
13994          } catch (error) {
13995            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
13996          }
13997        })
13998      Web({ src: 'www.example.com', controller: this.controller })
13999    }
14000  }
14001}
14002```
14003
14004## WebDownloadManager<sup>11+</sup>
14005
14006可以通过该类提供的接口来恢复失败的下载任务。
14007
14008### setDownloadDelegate<sup>11+</sup>
14009
14010static setDownloadDelegate(delegate: WebDownloadDelegate): void
14011
14012设置用于接收从WebDownloadManager触发的下载进度的委托。
14013
14014**系统能力:** SystemCapability.Web.Webview.Core
14015
14016**参数:**
14017
14018| 参数名          | 类型    |  必填  | 说明                                            |
14019| ---------------| ------- | ---- | ------------- |
14020| delegate      | [WebDownloadDelegate](#webdownloaddelegate11)  | 是   | 用来接收下载进回调的委托。 |
14021
14022**示例:**
14023
14024```ts
14025// xxx.ets
14026import { webview } from '@kit.ArkWeb';
14027import { BusinessError } from '@kit.BasicServicesKit';
14028
14029@Entry
14030@Component
14031struct WebComponent {
14032  controller: webview.WebviewController = new webview.WebviewController();
14033  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14034  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14035  failedData: Uint8Array = new Uint8Array();
14036
14037  build() {
14038    Column() {
14039      Button('setDownloadDelegate')
14040        .onClick(() => {
14041          try {
14042            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14043              console.log("will start a download.");
14044              // 传入一个下载路径,并开始下载。
14045              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14046            })
14047            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14048              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14049              this.download = webDownloadItem;
14050            })
14051            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14052              console.log("download failed guid: " + webDownloadItem.getGuid());
14053              // 序列化失败的下载到一个字节数组。
14054              this.failedData = webDownloadItem.serialize();
14055            })
14056            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14057              console.log("download finish guid: " + webDownloadItem.getGuid());
14058            })
14059            this.controller.setDownloadDelegate(this.delegate);
14060            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14061          } catch (error) {
14062            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14063          }
14064        })
14065      Button('startDownload')
14066        .onClick(() => {
14067          try {
14068            this.controller.startDownload('https://www.example.com');
14069          } catch (error) {
14070            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14071          }
14072        })
14073      Button('resumeDownload')
14074        .onClick(() => {
14075          try {
14076            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14077          } catch (error) {
14078            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14079          }
14080        })
14081      Button('cancel')
14082        .onClick(() => {
14083          try {
14084            this.download.cancel();
14085          } catch (error) {
14086            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14087          }
14088        })
14089      Button('pause')
14090        .onClick(() => {
14091          try {
14092            this.download.pause();
14093          } catch (error) {
14094            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14095          }
14096        })
14097      Button('resume')
14098        .onClick(() => {
14099          try {
14100            this.download.resume();
14101          } catch (error) {
14102            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14103          }
14104        })
14105      Web({ src: 'www.example.com', controller: this.controller })
14106    }
14107  }
14108}
14109```
14110
14111### resumeDownload<sup>11+</sup>
14112
14113static resumeDownload(webDownloadItem: WebDownloadItem): void
14114
14115恢复一个失败的下载任务。
14116
14117**系统能力:** SystemCapability.Web.Webview.Core
14118
14119**参数:**
14120
14121| 参数名          | 类型    |  必填  | 说明                                            |
14122| ---------------| ------- | ---- | ------------- |
14123| webDownloadItem      | [WebDownloadItem](#webdownloaditem11)  | 是   | 待恢复的下载任务。 |
14124
14125**错误码:**
14126
14127以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14128
14129| 错误码ID | 错误信息                              |
14130| -------- | ------------------------------------- |
14131| 17100018 | No WebDownloadDelegate has been set yet. |
14132
14133**示例:**
14134
14135```ts
14136// xxx.ets
14137import { webview } from '@kit.ArkWeb';
14138import { BusinessError } from '@kit.BasicServicesKit';
14139
14140@Entry
14141@Component
14142struct WebComponent {
14143  controller: webview.WebviewController = new webview.WebviewController();
14144  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
14145  download: webview.WebDownloadItem = new webview.WebDownloadItem();
14146  failedData: Uint8Array = new Uint8Array();
14147
14148  build() {
14149    Column() {
14150      Button('setDownloadDelegate')
14151        .onClick(() => {
14152          try {
14153            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
14154              console.log("will start a download.");
14155              // 传入一个下载路径,并开始下载。
14156              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
14157            })
14158            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
14159              console.log("download update percent complete: " + webDownloadItem.getPercentComplete());
14160              this.download = webDownloadItem;
14161            })
14162            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
14163              console.log("download failed guid: " + webDownloadItem.getGuid());
14164              // 序列化失败的下载到一个字节数组。
14165              this.failedData = webDownloadItem.serialize();
14166            })
14167            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
14168              console.log("download finish guid: " + webDownloadItem.getGuid());
14169            })
14170            this.controller.setDownloadDelegate(this.delegate);
14171            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
14172          } catch (error) {
14173            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14174          }
14175        })
14176      Button('startDownload')
14177        .onClick(() => {
14178          try {
14179            this.controller.startDownload('https://www.example.com');
14180          } catch (error) {
14181            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14182          }
14183        })
14184      Button('resumeDownload')
14185        .onClick(() => {
14186          try {
14187            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
14188          } catch (error) {
14189            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14190          }
14191        })
14192      Button('cancel')
14193        .onClick(() => {
14194          try {
14195            this.download.cancel();
14196          } catch (error) {
14197            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14198          }
14199        })
14200      Button('pause')
14201        .onClick(() => {
14202          try {
14203            this.download.pause();
14204          } catch (error) {
14205            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14206          }
14207        })
14208      Button('resume')
14209        .onClick(() => {
14210          try {
14211            this.download.resume();
14212          } catch (error) {
14213            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14214          }
14215        })
14216      Web({ src: 'www.example.com', controller: this.controller })
14217    }
14218  }
14219}
14220```
14221
14222## WebHttpBodyStream<sup>12+</sup>
14223
14224POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。
14225
14226### initialize<sup>12+</sup>
14227
14228initialize(): Promise\<void\>
14229
14230初始化WebHttpBodyStream。
14231
14232**系统能力:** SystemCapability.Web.Webview.Core
14233
14234**返回值:**
14235
14236| 类型   | 说明                      |
14237| ------ | ------------------------- |
14238| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 |
14239
14240**错误码:**
14241
14242以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14243
14244| 错误码ID | 错误信息                              |
14245| -------- | ------------------------------------- |
14246| 17100022 | Failed to initialize the HTTP body stream. |
14247
14248**示例:**
14249
14250```ts
14251// xxx.ets
14252import { webview } from '@kit.ArkWeb';
14253import { BusinessError } from '@kit.BasicServicesKit';
14254import { buffer } from '@kit.ArkTS';
14255import { WebNetErrorList } from '@ohos.web.netErrorList'
14256
14257@Entry
14258@Component
14259struct WebComponent {
14260  controller: webview.WebviewController = new webview.WebviewController();
14261  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14262  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
14263
14264  build() {
14265    Column() {
14266      Button('postUrl')
14267        .onClick(() => {
14268          try {
14269            let postData = buffer.from(this.htmlData);
14270            this.controller.postUrl('https://www.example.com', postData.buffer);
14271          } catch (error) {
14272            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14273          }
14274        })
14275      Web({ src: 'https://www.example.com', controller: this.controller })
14276        .onControllerAttached(() => {
14277          try {
14278            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
14279              console.log("[schemeHandler] onRequestStart");
14280              try {
14281                let stream = request.getHttpBodyStream();
14282                if (stream) {
14283                  stream.initialize().then(() => {
14284                    if (!stream) {
14285                      return;
14286                    }
14287                    console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize());
14288                    console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14289                    console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked());
14290                    console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14291                    console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory());
14292                    stream.read(stream.getSize()).then((buffer) => {
14293                      if (!stream) {
14294                        return;
14295                      }
14296                      console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength);
14297                      console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
14298                      console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
14299                    }).catch((error: BusinessError) => {
14300                      console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14301                    })
14302                  }).catch((error: BusinessError) => {
14303                    console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
14304                  })
14305                } else {
14306                  console.log("[schemeHandler] onRequestStart has no http body stream");
14307                }
14308              } catch (error) {
14309                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14310              }
14311
14312              return false;
14313            })
14314
14315            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
14316              console.log("[schemeHandler] onRequestStop");
14317            });
14318
14319            this.controller.setWebSchemeHandler('https', this.schemeHandler);
14320          } catch (error) {
14321            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14322          }
14323        })
14324        .javaScriptAccess(true)
14325        .domStorageAccess(true)
14326    }
14327  }
14328}
14329
14330```
14331
14332### read<sup>12+</sup>
14333
14334read(size: number): Promise\<ArrayBuffer\>
14335
14336读取WebHttpBodyStream中的数据。
14337
14338**系统能力:** SystemCapability.Web.Webview.Core
14339
14340**参数:**
14341
14342| 参数名   | 类型    |  必填  | 说明                       |
14343| --------| ------- | ---- | ---------------------------|
14344|  size | number | 是   | 读取WebHttpBodyStream中的字节数。 |
14345
14346**返回值:**
14347
14348| 类型   | 说明                      |
14349| ------ | ------------------------- |
14350| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 |
14351
14352**错误码:**
14353
14354以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14355
14356| 错误码ID | 错误信息                              |
14357| -------- | ------------------------------------- |
14358|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
14359
14360**示例:**
14361
14362完整示例代码参考[initialize](#initialize12)。
14363
14364### getSize<sup>12+</sup>
14365
14366getSize(): number
14367
14368获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。
14369
14370**系统能力:** SystemCapability.Web.Webview.Core
14371
14372**返回值:**
14373
14374| 类型   | 说明                      |
14375| ------ | ------------------------- |
14376| number | 获取WebHttpBodyStream中的数据大小。 |
14377
14378**示例:**
14379
14380完整示例代码参考[initialize](#initialize12)。
14381
14382### getPosition<sup>12+</sup>
14383
14384getPosition(): number
14385
14386读取WebHttpBodyStream中当前的读取位置。
14387
14388**系统能力:** SystemCapability.Web.Webview.Core
14389
14390**返回值:**
14391
14392| 类型   | 说明                      |
14393| ------ | ------------------------- |
14394| number | WebHttpBodyStream中当前的读取位置。 |
14395
14396**示例:**
14397
14398完整示例代码参考[initialize](#initialize12)。
14399
14400### isChunked<sup>12+</sup>
14401
14402isChunked(): boolean
14403
14404WebHttpBodyStream是否采用分块传输。
14405
14406**系统能力:** SystemCapability.Web.Webview.Core
14407
14408**返回值:**
14409
14410| 类型   | 说明                      |
14411| ------ | ------------------------- |
14412| boolean | WebHttpBodyStream是否采用分块传输。 |
14413
14414**示例:**
14415
14416完整示例代码参考[initialize](#initialize12)。
14417
14418### isEof<sup>12+</sup>
14419
14420isEof(): boolean
14421
14422判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。
14423
14424**系统能力:** SystemCapability.Web.Webview.Core
14425
14426**返回值:**
14427
14428| 类型   | 说明                      |
14429| ------ | ------------------------- |
14430| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 |
14431
14432**示例:**
14433
14434完整示例代码参考[initialize](#initialize12)。
14435
14436### isInMemory<sup>12+</sup>
14437
14438isInMemory(): boolean
14439
14440判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。
14441
14442**系统能力:** SystemCapability.Web.Webview.Core
14443
14444**返回值:**
14445
14446| 类型   | 说明                      |
14447| ------ | ------------------------- |
14448| boolean | WebHttpBodyStream中的上传数据是否在内存中。 |
14449
14450**示例:**
14451
14452完整示例代码参考[initialize](#initialize12)。
14453
14454## WebSchemeHandlerRequest<sup>12+</sup>
14455
14456通过WebSchemeHandler拦截到的请求。
14457
14458### getHeader<sup>12+</sup>
14459
14460getHeader(): Array\<WebHeader\>
14461
14462获取资源请求头信息。
14463
14464**系统能力:** SystemCapability.Web.Webview.Core
14465
14466**返回值:**
14467
14468| 类型                         | 说明         |
14469| -------------------------- | ---------- |
14470| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 |
14471
14472**示例:**
14473
14474完整示例代码参考[onRequestStart](#onrequeststart12)。
14475
14476### getRequestUrl<sup>12+</sup>
14477
14478getRequestUrl(): string
14479
14480获取资源请求的URL信息。
14481
14482**系统能力:** SystemCapability.Web.Webview.Core
14483
14484**返回值:**
14485
14486| 类型     | 说明            |
14487| ------ | ------------- |
14488| string | 返回资源请求的URL信息。 |
14489
14490**示例:**
14491
14492完整示例代码参考[onRequestStart](#onrequeststart12)。
14493
14494### getRequestMethod<sup>12+</sup>
14495
14496getRequestMethod(): string
14497
14498获取请求方法。
14499
14500**系统能力:** SystemCapability.Web.Webview.Core
14501
14502**返回值:**
14503
14504| 类型     | 说明            |
14505| ------ | ------------- |
14506| string | 返回请求方法。 |
14507
14508**示例:**
14509
14510完整示例代码参考[onRequestStart](#onrequeststart12)。
14511
14512### getReferrer<sup>12+</sup>
14513
14514getReferrer(): string
14515
14516获取referrer。
14517
14518**系统能力:** SystemCapability.Web.Webview.Core
14519
14520**返回值:**
14521
14522| 类型     | 说明            |
14523| ------ | ------------- |
14524| string | 获取到的referrer。 |
14525
14526**示例:**
14527
14528完整示例代码参考[onRequestStart](#onrequeststart12)。
14529
14530### isMainFrame<sup>12+</sup>
14531
14532isMainFrame(): boolean
14533
14534判断资源请求是否为主frame。
14535
14536**系统能力:** SystemCapability.Web.Webview.Core
14537
14538**返回值:**
14539
14540| 类型     | 说明            |
14541| ------ | ------------- |
14542| boolean | 判断资源请求是否为主frame。 |
14543
14544**示例:**
14545
14546完整示例代码参考[onRequestStart](#onrequeststart12)。
14547
14548### hasGesture<sup>12+</sup>
14549
14550hasGesture(): boolean
14551
14552获取资源请求是否与手势(如点击)相关联。
14553
14554**系统能力:** SystemCapability.Web.Webview.Core
14555
14556**返回值:**
14557
14558| 类型     | 说明            |
14559| ------ | ------------- |
14560| boolean | 返回资源请求是否与手势(如点击)相关联。 |
14561
14562**示例:**
14563
14564完整示例代码参考[onRequestStart](#onrequeststart12)。
14565
14566### getHttpBodyStream<sup>12+</sup>
14567
14568getHttpBodyStream(): WebHttpBodyStream | null
14569
14570获取资源请求中的WebHttpBodyStream。
14571
14572**系统能力:** SystemCapability.Web.Webview.Core
14573
14574**返回值:**
14575
14576| 类型     | 说明            |
14577| ------ | ------------- |
14578| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 |
14579
14580**示例:**
14581
14582完整示例代码参考[onRequestStart](#onrequeststart12)。
14583
14584### getRequestResourceType<sup>12+</sup>
14585
14586getRequestResourceType(): WebResourceType
14587
14588获取资源请求的资源类型。
14589
14590**系统能力:** SystemCapability.Web.Webview.Core
14591
14592**返回值:**
14593
14594| 类型     | 说明            |
14595| ------ | ------------- |
14596| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 |
14597
14598**示例:**
14599
14600完整示例代码参考[onRequestStart](#onrequeststart12)。
14601
14602### getFrameUrl<sup>12+</sup>
14603
14604getFrameUrl(): string
14605
14606获取触发此请求的Frame的URL。
14607
14608**系统能力:** SystemCapability.Web.Webview.Core
14609
14610**返回值:**
14611
14612| 类型     | 说明            |
14613| ------ | ------------- |
14614| string | 返回触发此请求的Frame的URL。 |
14615
14616**示例:**
14617
14618完整示例代码参考[onRequestStart](#onrequeststart12)。
14619
14620## WebSchemeHandlerResponse<sup>12+</sup>
14621
14622请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。
14623
14624### constructor<sup>12+</sup>
14625
14626constructor()
14627
14628Response的构造函数。
14629
14630**系统能力:** SystemCapability.Web.Webview.Core
14631
14632**示例:**
14633
14634```ts
14635// xxx.ets
14636import { webview } from '@kit.ArkWeb';
14637import { BusinessError } from '@kit.BasicServicesKit';
14638import { WebNetErrorList } from '@ohos.web.netErrorList';
14639
14640@Entry
14641@Component
14642struct WebComponent {
14643  controller: webview.WebviewController = new webview.WebviewController();
14644  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
14645
14646  build() {
14647    Column() {
14648      Button('response').onClick(() => {
14649        let response = new webview.WebSchemeHandlerResponse();
14650        try {
14651          response.setUrl("http://www.example.com")
14652          response.setStatus(200)
14653          response.setStatusText("OK")
14654          response.setMimeType("text/html")
14655          response.setEncoding("utf-8")
14656          response.setHeaderByName("header1", "value1", false)
14657          response.setNetErrorCode(WebNetErrorList.NET_OK)
14658          console.log("[schemeHandler] getUrl:" + response.getUrl())
14659          console.log("[schemeHandler] getStatus:" + response.getStatus())
14660          console.log("[schemeHandler] getStatusText:" + response.getStatusText())
14661          console.log("[schemeHandler] getMimeType:" + response.getMimeType())
14662          console.log("[schemeHandler] getEncoding:" + response.getEncoding())
14663          console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1"))
14664          console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode())
14665
14666        } catch (error) {
14667          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
14668        }
14669      })
14670      Web({ src: 'https://www.example.com', controller: this.controller })
14671    }
14672  }
14673}
14674
14675```
14676
14677### setUrl<sup>12+</sup>
14678
14679setUrl(url: string): void
14680
14681给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。
14682
14683**系统能力:** SystemCapability.Web.Webview.Core
14684
14685**参数:**
14686
14687| 参数名   | 类型    |  必填  | 说明                       |
14688| --------| ------- | ---- | ---------------------------|
14689|  url | string | 是   | 即将要跳转的URL。 |
14690
14691**示例:**
14692
14693示例完整示例代码参考[constructor](#constructor12)。
14694
14695**错误码:**
14696
14697以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14698
14699| 错误码ID | 错误信息                  |
14700| -------- | ----------------------- |
14701|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14702
14703### setNetErrorCode<sup>12+</sup>
14704
14705setNetErrorCode(code: WebNetErrorList): void
14706
14707给当前的Response设置网络错误码。
14708
14709**系统能力:** SystemCapability.Web.Webview.Core
14710
14711**参数:**
14712
14713| 参数名   | 类型    |  必填  | 说明                       |
14714| --------| ------- | ---- | ---------------------------|
14715|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
14716
14717**错误码:**
14718
14719以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14720
14721| 错误码ID | 错误信息                  |
14722| -------- | ----------------------- |
14723|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
14724
14725**示例:**
14726
14727示例完整示例代码参考[constructor](#constructor12)。
14728
14729### setStatus<sup>12+</sup>
14730
14731setStatus(code: number): void
14732
14733给当前的Response设置HTTP状态码。
14734
14735**系统能力:** SystemCapability.Web.Webview.Core
14736
14737**参数:**
14738
14739| 参数名   | 类型    |  必填  | 说明                       |
14740| --------| ------- | ---- | ---------------------------|
14741|  code | number | 是   | Http状态码。 |
14742
14743**错误码:**
14744
14745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14746
14747| 错误码ID | 错误信息                  |
14748| -------- | ----------------------- |
14749|  401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
14750
14751**示例:**
14752
14753示例完整示例代码参考[constructor](#constructor12)。
14754
14755### setStatusText<sup>12+</sup>
14756
14757setStatusText(text: string): void
14758
14759给当前的Response设置状态文本。
14760
14761**系统能力:** SystemCapability.Web.Webview.Core
14762
14763**参数:**
14764
14765| 参数名   | 类型    |  必填  | 说明                       |
14766| --------| ------- | ---- | ---------------------------|
14767|  text | string | 是   | 状态文本。 |
14768
14769**错误码:**
14770
14771以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14772
14773| 错误码ID | 错误信息                  |
14774| -------- | ----------------------- |
14775|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14776
14777**示例:**
14778
14779示例完整示例代码参考[constructor](#constructor12)。
14780
14781### setMimeType<sup>12+</sup>
14782
14783setMimeType(type: string): void
14784
14785给当前的Response设置媒体类型。
14786
14787**系统能力:** SystemCapability.Web.Webview.Core
14788
14789**参数:**
14790
14791| 参数名   | 类型    |  必填  | 说明                       |
14792| --------| ------- | ---- | ---------------------------|
14793|  type | string | 是   | 媒体类型。 |
14794
14795**错误码:**
14796
14797以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14798
14799| 错误码ID | 错误信息                  |
14800| -------- | ----------------------- |
14801|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14802
14803**示例:**
14804
14805示例完整示例代码参考[constructor](#constructor12)。
14806
14807### setEncoding<sup>12+</sup>
14808
14809setEncoding(encoding: string): void
14810
14811给当前的Response设置字符集。
14812
14813**系统能力:** SystemCapability.Web.Webview.Core
14814
14815**参数:**
14816
14817| 参数名   | 类型    |  必填  | 说明                       |
14818| --------| ------- | ---- | ---------------------------|
14819|  encoding | string | 是   | 字符集。 |
14820
14821**错误码:**
14822
14823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14824
14825| 错误码ID | 错误信息                  |
14826| -------- | ----------------------- |
14827|  401 | Parameter error. Possible causes: 1. Incorrect parameter types.    |
14828
14829**示例:**
14830
14831示例完整示例代码参考[constructor](#constructor12)。
14832
14833### setHeaderByName<sup>12+</sup>
14834
14835setHeaderByName(name: string, value: string, overwrite: boolean): void
14836
14837给当前的Response设置头信息。
14838
14839**系统能力:** SystemCapability.Web.Webview.Core
14840
14841**参数:**
14842
14843| 参数名   | 类型    |  必填  | 说明                       |
14844| --------| ------- | ---- | ---------------------------|
14845|  name | string | 是   | 头部(header)的名称。 |
14846|  value | string | 是   | 头部(header)的值。 |
14847|  overwrite | boolean | 是   | 如果为true,将覆盖现有的头部,否则不覆盖。 |
14848
14849**错误码:**
14850
14851以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
14852
14853| 错误码ID | 错误信息                  |
14854| -------- | ----------------------- |
14855|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.    |
14856
14857**示例:**
14858
14859示例完整示例代码参考[constructor](#constructor12)。
14860
14861### getUrl<sup>12+</sup>
14862
14863getUrl(): string
14864
14865获取重定向或由于HSTS而更改后的URL。
14866风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12)
14867
14868**系统能力:** SystemCapability.Web.Webview.Core
14869
14870**返回值:**
14871
14872| 类型    | 说明                                     |
14873| ------- | --------------------------------------- |
14874| string | 获取经过重定向或由于HSTS而更改后的URL。|
14875
14876**示例:**
14877
14878示例完整示例代码参考[constructor](#constructor12)。
14879
14880### getNetErrorCode<sup>12+</sup>
14881
14882getNetErrorCode(): WebNetErrorList
14883
14884获取Response的网络错误码。
14885
14886**系统能力:** SystemCapability.Web.Webview.Core
14887
14888**返回值:**
14889
14890| 类型    | 说明                                     |
14891| ------- | --------------------------------------- |
14892| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。|
14893
14894**示例:**
14895
14896示例完整示例代码参考[constructor](#constructor12)。
14897
14898### getStatus<sup>12+</sup>
14899
14900getStatus(): number
14901
14902获取Response的Http状态码。
14903
14904**系统能力:** SystemCapability.Web.Webview.Core
14905
14906**返回值:**
14907
14908| 类型    | 说明                                     |
14909| ------- | --------------------------------------- |
14910| number | 获取Response的Http状态码。|
14911
14912**示例:**
14913
14914示例完整示例代码参考[constructor](#constructor12)。
14915
14916### getStatusText<sup>12+</sup>
14917
14918getStatusText(): string
14919
14920获取Response的状态文本。
14921
14922**系统能力:** SystemCapability.Web.Webview.Core
14923
14924**返回值:**
14925
14926| 类型    | 说明                                     |
14927| ------- | --------------------------------------- |
14928| string | 状态文本。|
14929
14930**示例:**
14931
14932示例完整示例代码参考[constructor](#constructor12)。
14933
14934### getMimeType<sup>12+</sup>
14935
14936getMimeType(): string
14937
14938获取Response的媒体类型。
14939
14940**系统能力:** SystemCapability.Web.Webview.Core
14941
14942**返回值:**
14943
14944| 类型    | 说明                                     |
14945| ------- | --------------------------------------- |
14946| string | 媒体类型。|
14947
14948**示例:**
14949
14950示例完整示例代码参考[constructor](#constructor12)。
14951
14952### getEncoding<sup>12+</sup>
14953
14954getEncoding(): string
14955
14956获取Response的字符集。
14957
14958**系统能力:** SystemCapability.Web.Webview.Core
14959
14960**返回值:**
14961
14962| 类型    | 说明                                     |
14963| ------- | --------------------------------------- |
14964| string | 字符集。|
14965
14966**示例:**
14967
14968示例完整示例代码参考[constructor](#constructor12)。
14969
14970### getHeaderByName<sup>12+</sup>
14971
14972getHeaderByName(name: string): string
14973
14974获取Response的字符集。
14975
14976**系统能力:** SystemCapability.Web.Webview.Core
14977
14978**参数:**
14979
14980| 参数名  | 类型             | 必填 | 说明                  |
14981| ------- | ---------------- | ---- | -------------------- |
14982| name     | string | 是   | 头部(header)的名称。      |
14983
14984
14985**返回值:**
14986
14987| 类型    | 说明                                     |
14988| ------- | --------------------------------------- |
14989| string | 头部(header)的值。|
14990
14991**示例:**
14992
14993示例完整示例代码参考[constructor](#constructor12)。
14994
14995## WebResourceHandler<sup>12+</sup>
14996
14997通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。
14998
14999### didReceiveResponse<sup>12+</sup>
15000
15001didReceiveResponse(response: WebSchemeHandlerResponse): void
15002
15003将构造的响应头传递给被拦截的请求。
15004
15005**系统能力:** SystemCapability.Web.Webview.Core
15006
15007**参数:**
15008
15009| 参数名          | 类型    |  必填  | 说明                                            |
15010| ---------------| ------- | ---- | ------------- |
15011| response      | [WebSchemeHandlerResponse](#webschemehandlerresponse12)  | 是   | 该拦截请求的响应。 |
15012
15013**错误码:**
15014
15015以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15016
15017| 错误码ID | 错误信息                              |
15018| -------- | ------------------------------------- |
15019|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15020| 17100021 | The resource handler is invalid. |
15021
15022**示例:**
15023
15024示例请参考[OnRequestStart](#onrequeststart12)。
15025
15026### didReceiveResponseBody<sup>12+</sup>
15027
15028didReceiveResponseBody(data: ArrayBuffer): void
15029
15030将构造的响应体传递给被拦截的请求。
15031
15032**系统能力:** SystemCapability.Web.Webview.Core
15033
15034**参数:**
15035
15036| 参数名          | 类型    |  必填  | 说明                                            |
15037| ---------------| ------- | ---- | ------------- |
15038| data      | ArrayBuffer  | 是   | 响应体数据。 |
15039
15040**错误码:**
15041
15042以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15043
15044| 错误码ID | 错误信息                              |
15045| -------- | ------------------------------------- |
15046|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.    |
15047| 17100021 | The resource handler is invalid. |
15048
15049**示例:**
15050
15051示例请参考[OnRequestStart](#onrequeststart12)。
15052
15053### didFinish<sup>12+</sup>
15054
15055didFinish(): void
15056
15057通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15058
15059**系统能力:** SystemCapability.Web.Webview.Core
15060
15061**错误码:**
15062
15063以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15064
15065| 错误码ID | 错误信息                              |
15066| -------- | ------------------------------------- |
15067| 17100021 | The resource handler is invalid. |
15068
15069**示例:**
15070
15071示例请参考[OnRequestStart](#onrequeststart12)。
15072
15073### didFail<sup>12+</sup>
15074
15075didFail(code: WebNetErrorList): void
15076
15077通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。
15078
15079**系统能力:** SystemCapability.Web.Webview.Core
15080
15081**参数:**
15082
15083| 参数名   | 类型    |  必填  | 说明                       |
15084| --------| ------- | ---- | ---------------------------|
15085|  code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是   | 网络错误码。 |
15086
15087**错误码:**
15088
15089以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15090
15091| 错误码ID | 错误信息                              |
15092| -------- | ------------------------------------- |
15093| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. |
15094| 17100021 | The resource handler is invalid. |
15095
15096**系统能力:** SystemCapability.Web.Webview.Core
15097
15098**示例:**
15099
15100示例请参考[OnRequestStart](#onrequeststart12)。
15101
15102## WebSchemeHandler<sup>12+</sup>
15103
15104用于拦截指定scheme的请求的拦截器。
15105
15106### onRequestStart<sup>12+</sup>
15107
15108onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void
15109
15110当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。
15111
15112**系统能力:** SystemCapability.Web.Webview.Core
15113
15114**参数**:
15115
15116| 参数名   | 类型                 | 必填 | 说明       |
15117| -------- | -------------------- | ---- | ---------- |
15118| callback   | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 |
15119
15120**错误码:**
15121
15122以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15123
15124| 错误码ID | 错误信息                              |
15125| -------- | ------------------------------------- |
15126| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
15127
15128**示例:**
15129
15130```ts
15131// xxx.ets
15132import { webview } from '@kit.ArkWeb';
15133import { BusinessError } from '@kit.BasicServicesKit';
15134import { buffer } from '@kit.ArkTS';
15135import { WebNetErrorList } from '@ohos.web.netErrorList';
15136
15137@Entry
15138@Component
15139struct WebComponent {
15140  controller: webview.WebviewController = new webview.WebviewController();
15141  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
15142  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
15143
15144  build() {
15145    Column() {
15146      Web({ src: 'https://www.example.com', controller: this.controller })
15147        .onControllerAttached(() => {
15148          try {
15149            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
15150              console.log("[schemeHandler] onRequestStart");
15151              try {
15152                console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl());
15153                console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod());
15154                console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer());
15155                console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame());
15156                console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture());
15157                console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length);
15158                console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType());
15159                console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl());
15160                let header = request.getHeader();
15161                for (let i = 0; i < header.length; i++) {
15162                  console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue);
15163                }
15164                let stream = request.getHttpBodyStream();
15165                if (stream) {
15166                  console.log("[schemeHandler] onRequestStart has http body stream");
15167                } else {
15168                  console.log("[schemeHandler] onRequestStart has no http body stream");
15169                }
15170              } catch (error) {
15171                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15172              }
15173
15174              if (request.getRequestUrl().endsWith("example.com")) {
15175                return false;
15176              }
15177
15178              let response = new webview.WebSchemeHandlerResponse();
15179              try {
15180                response.setNetErrorCode(WebNetErrorList.NET_OK);
15181                response.setStatus(200);
15182                response.setStatusText("OK");
15183                response.setMimeType("text/html");
15184                response.setEncoding("utf-8");
15185                response.setHeaderByName("header1", "value1", false);
15186              } catch (error) {
15187                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15188              }
15189
15190              // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。
15191              let buf = buffer.from(this.htmlData)
15192              try {
15193                if (buf.length == 0) {
15194                  console.log("[schemeHandler] length 0");
15195                  resourceHandler.didReceiveResponse(response);
15196                  // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail
15197                  resourceHandler.didFail(WebNetErrorList.ERR_FAILED);
15198                } else {
15199                  console.log("[schemeHandler] length 1");
15200                  resourceHandler.didReceiveResponse(response);
15201                  resourceHandler.didReceiveResponseBody(buf.buffer);
15202                  resourceHandler.didFinish();
15203                }
15204              } catch (error) {
15205                console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15206              }
15207              return true;
15208            })
15209
15210            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
15211              console.log("[schemeHandler] onRequestStop");
15212            });
15213
15214            this.controller.setWebSchemeHandler('https', this.schemeHandler);
15215          } catch (error) {
15216            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
15217          }
15218        })
15219        .javaScriptAccess(true)
15220        .domStorageAccess(true)
15221    }
15222  }
15223}
15224```
15225### onRequestStop<sup>12+</sup>
15226
15227onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void
15228
15229当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点:
15230
152311.WebResourceHandler调用didFail或者didFinish。
15232
152332.此请求因为其他原因中断。
15234
15235**系统能力:** SystemCapability.Web.Webview.Core
15236
15237**参数**:
15238
15239| 参数名   | 类型                 | 必填 | 说明       |
15240| -------- | -------------------- | ---- | ---------- |
15241| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是   | 对应请求结束的回调函数。 |
15242
15243**错误码:**
15244
15245以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15246
15247| 错误码ID | 错误信息                              |
15248| -------- | ------------------------------------- |
15249| 401 | Invalid input parameter. |
15250
15251**示例:**
15252
15253完整示例代码参考[onRequestStart](#onrequeststart12)。
15254
15255## CacheOptions<sup>12+</sup>
15256
15257Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。
15258
15259**系统能力:** SystemCapability.Web.Webview.Core
15260
15261| 名称        | 类型   | 可读 | 可写 |说明                 |
15262| ----------- | ------ | -----|------|------------------- |
15263| responseHeaders   | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。   |
15264
15265## PlaybackStatus<sup>12+</sup>
15266
15267[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。
15268
15269**系统能力:** SystemCapability.Web.Webview.Core
15270
15271| 名称 | 值 | 说明 |
15272|------|----|------|
15273| PAUSED  | 0 | 播放状态为播放状态。 |
15274| PLAYING | 1 | 播放状态为暂停状态。 |
15275
15276## NetworkState<sup>12+<sup>
15277
15278播放器的网络状态。
15279
15280**系统能力:** SystemCapability.Web.Webview.Core
15281
15282| 名称 | 值 | 说明 |
15283|------|----|------|
15284| EMPTY         | 0 | 播放器还没有开始下载数据。 |
15285| IDLE          | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 |
15286| LOADING       | 2 | 播放器正在下载媒体数据。 |
15287| NETWORK_ERROR | 3 | 发生了网络错误。 |
15288
15289## ReadyState<sup>12+<sup>
15290
15291播放器的缓存状态。
15292
15293**系统能力:** SystemCapability.Web.Webview.Core
15294
15295| 名称 | 值 | 说明 |
15296|------|----|------|
15297| HAVE_NOTHING      | 0 | 没有缓存。 |
15298| HAVE_METADATA     | 1 | 只缓存了媒体元数据。 |
15299| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 |
15300| HAVE_FUTURE_DATA  | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 |
15301| HAVE_ENOUGH_DATA  | 4 | 缓存了足够的数据,保证播放流畅。 |
15302
15303## MediaError<sup>12+<sup>
15304
15305播放器的错误类型。
15306
15307**系统能力:** SystemCapability.Web.Webview.Core
15308
15309| 名称 | 值 | 说明 |
15310|------|----|------|
15311| NETWORK_ERROR | 1 | 网络错误。 |
15312| FORMAT_ERROR  | 2 | 媒体格式错误。 |
15313| DECODE_ERROR  | 3 | 解码错误。 |
15314
15315## NativeMediaPlayerHandler<sup>12+<sup>
15316
15317[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。
15318应用通过该对象,将播放器的状态报告给ArkWeb内核。
15319
15320### handleStatusChanged<sup>12+<sup>
15321
15322handleStatusChanged(status: PlaybackStatus): void
15323
15324当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。
15325
15326**系统能力:** SystemCapability.Web.Webview.Core
15327
15328**参数:**
15329
15330| 参数名 | 类型 | 必填 | 说明 |
15331|--------|------|------|------|
15332| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 |
15333
15334**示例:**
15335
15336完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15337
15338### handleVolumeChanged<sup>12+<sup>
15339
15340handleVolumeChanged(volume: number): void
15341
15342当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。
15343
15344**系统能力:** SystemCapability.Web.Webview.Core
15345
15346**参数:**
15347
15348| 参数名 | 类型 | 必填 | 说明 |
15349|--------|------|------|------|
15350| volume | number | 是 | 播放器的音量。 |
15351
15352**示例:**
15353
15354完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15355
15356### handleMutedChanged<sup>12+<sup>
15357
15358handleMutedChanged(muted: boolean): void
15359
15360当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。
15361
15362**系统能力:** SystemCapability.Web.Webview.Core
15363
15364**参数:**
15365
15366| 参数名 | 类型 | 必填 | 说明 |
15367|--------|------|------|------|
15368| muted | boolean | 是 | 当前播放器是否静音。 |
15369
15370**示例:**
15371
15372完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15373
15374### handlePlaybackRateChanged<sup>12+<sup>
15375
15376handlePlaybackRateChanged(playbackRate: number): void
15377
15378当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。
15379
15380**系统能力:** SystemCapability.Web.Webview.Core
15381
15382**参数:**
15383
15384| 参数名 | 类型 | 必填 | 说明 |
15385|--------|------|------|------|
15386| playbackRate | number | 是 | 播放速率。 |
15387
15388**示例:**
15389
15390完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15391
15392### handleDurationChanged<sup>12+<sup>
15393
15394handleDurationChanged(duration: number): void
15395
15396当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。
15397
15398**系统能力:** SystemCapability.Web.Webview.Core
15399
15400**参数:**
15401
15402| 参数名 | 类型 | 必填 | 说明 |
15403|--------|------|------|------|
15404| duration | number | 是 | 媒体的总时长。单位: 秒 。 |
15405
15406**示例:**
15407
15408完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15409
15410### handleTimeUpdate<sup>12+<sup>
15411
15412handleTimeUpdate(currentPlayTime: number): void
15413
15414当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。
15415
15416**系统能力:** SystemCapability.Web.Webview.Core
15417
15418**参数:**
15419
15420| 参数名 | 类型 | 必填 | 说明 |
15421|--------|------|------|------|
15422| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。  |
15423
15424**示例:**
15425
15426完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15427
15428### handleBufferedEndTimeChanged<sup>12+<sup>
15429
15430handleBufferedEndTimeChanged(bufferedEndTime: number): void
15431
15432当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。
15433
15434**系统能力:** SystemCapability.Web.Webview.Core
15435
15436**参数:**
15437
15438| 参数名 | 类型 | 必填 | 说明 |
15439|--------|------|------|------|
15440| bufferedEndTime | number | 是 | 媒体缓冲的时长。 |
15441
15442**示例:**
15443
15444完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15445
15446### handleEnded<sup>12+<sup>
15447
15448handleEnded(): void
15449
15450当媒体播放结束时,调用该方法通知给 ArkWeb 内核。
15451
15452**系统能力:** SystemCapability.Web.Webview.Core
15453
15454**示例:**
15455
15456完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15457
15458### handleNetworkStateChanged<sup>12+<sup>
15459
15460handleNetworkStateChanged(state: NetworkState): void
15461
15462当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。
15463
15464**系统能力:** SystemCapability.Web.Webview.Core
15465
15466**参数:**
15467
15468| 参数名 | 类型 | 必填 | 说明 |
15469|--------|------|------|------|
15470| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 |
15471
15472**示例:**
15473
15474完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15475
15476### handleReadyStateChanged<sup>12+<sup>
15477
15478handleReadyStateChanged(state: ReadyState): void
15479
15480当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。
15481
15482**系统能力:** SystemCapability.Web.Webview.Core
15483
15484**参数:**
15485
15486| 参数名 | 类型 | 必填 | 说明 |
15487|--------|------|------|------|
15488| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 |
15489
15490**示例:**
15491
15492完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15493
15494### handleFullscreenChanged<sup>12+<sup>
15495
15496handleFullscreenChanged(fullscreen: boolean): void
15497
15498当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。
15499
15500**系统能力:** SystemCapability.Web.Webview.Core
15501
15502**参数:**
15503
15504| 参数名 | 类型 | 必填 | 说明 |
15505|--------|------|------|------|
15506| fullscreen | boolean | 是 | 是否全屏。 |
15507
15508**示例:**
15509
15510完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15511
15512### handleSeeking<sup>12+<sup>
15513
15514handleSeeking(): void
15515
15516当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。
15517
15518**系统能力:** SystemCapability.Web.Webview.Core
15519
15520**示例:**
15521
15522完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15523
15524### handleSeekFinished<sup>12+<sup>
15525
15526handleSeekFinished(): void
15527
15528当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。
15529
15530**系统能力:** SystemCapability.Web.Webview.Core
15531
15532**示例:**
15533
15534完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15535
15536### handleError<sup>12+<sup>
15537
15538handleError(error: MediaError, errorMessage: string): void
15539
15540当播放器发生错误时, 调用该方法通知 ArkWeb 内核。
15541
15542**系统能力:** SystemCapability.Web.Webview.Core
15543
15544**参数:**
15545
15546| 参数名 | 类型 | 必填 | 说明 |
15547|--------|------|------|------|
15548| error | [MediaError](#mediaerror12) | 是 | 错误类型。 |
15549| errorMessage | string | 是 | 错误的详细描述。 |
15550
15551**示例:**
15552
15553完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15554
15555### handleVideoSizeChanged<sup>12+<sup>
15556
15557handleVideoSizeChanged(width: number, height: number): void
15558
15559当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。
15560
15561**系统能力:** SystemCapability.Web.Webview.Core
15562
15563**参数:**
15564
15565| 参数名 | 类型 | 必填 | 说明 |
15566|--------|------|------|------|
15567| width  | number | 是 | 视频的宽。 |
15568| height | number | 是 | 视频的高。 |
15569
15570**示例:**
15571
15572完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15573
15574## SuspendType<sup>12+<sup>
15575
15576表示播放器的挂起类型。
15577
15578**系统能力:** SystemCapability.Web.Webview.Core
15579
15580| 名称 | 值 | 说明 |
15581|------|----|------|
15582| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 |
15583| ENTER_BACKGROUND         | 1 | 页面进后台。 |
15584| AUTO_CLEANUP             | 2 | 系统自动清理。 |
15585
15586## NativeMediaPlayerBridge<sup>12+<sup>
15587
15588[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。
15589接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。
15590ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。
15591
15592### updateRect<sup>12+<sup>
15593
15594updateRect(x: number, y: number, width: number, height: number): void
15595
15596更新 surface 位置信息。
15597
15598**系统能力:** SystemCapability.Web.Webview.Core
15599
15600**参数:**
15601
15602| 参数名 | 类型 | 必填 | 说明 |
15603|--------|------|------|------|
15604| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 |
15605| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 |
15606| width  | number | 是 | surface 的宽度。 |
15607| height | number | 是 | surface 的高度。 |
15608
15609**示例:**
15610
15611完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15612
15613### play<sup>12+<sup>
15614
15615play(): void
15616
15617播放视频。
15618
15619**系统能力:** SystemCapability.Web.Webview.Core
15620
15621**示例:**
15622
15623完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15624
15625### pause<sup>12+<sup>
15626
15627pause(): void
15628
15629暂停播放。
15630
15631**系统能力:** SystemCapability.Web.Webview.Core
15632
15633**示例:**
15634
15635完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15636
15637### seek<sup>12+<sup>
15638
15639seek(targetTime: number): void
15640
15641播放跳转到某个时间点。
15642
15643**系统能力:** SystemCapability.Web.Webview.Core
15644
15645**参数:**
15646
15647| 参数名 | 类型 | 必填 | 说明 |
15648|--------|------|------|------|
15649| targetTime | number | 是 | 单位: 秒。 |
15650
15651**示例:**
15652
15653完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15654
15655### setVolume<sup>12+<sup>
15656
15657setVolume(volume: number): void
15658
15659设置播放器音量值。
15660取值范围: [0, 1.0]
15661
15662**参数:**
15663
15664| 参数名 | 类型 | 必填 | 说明 |
15665|--------|------|------|------|
15666| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 |
15667
15668**系统能力:** SystemCapability.Web.Webview.Core
15669
15670**示例:**
15671
15672完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15673
15674### setMuted<sup>12+<sup>
15675
15676setMuted(muted: boolean): void
15677
15678设置静音状态。
15679
15680**系统能力:** SystemCapability.Web.Webview.Core
15681
15682**参数:**
15683
15684| 参数名 | 类型 | 必填 | 说明 |
15685|--------|------|------|------|
15686| muted | boolean | 是 | 是否静音。 |
15687
15688**示例:**
15689
15690完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15691
15692### setPlaybackRate<sup>12+<sup>
15693
15694setPlaybackRate(playbackRate: number): void
15695
15696设置播放速度。
15697取值范围: [0, 10.0]
15698
15699**系统能力:** SystemCapability.Web.Webview.Core
15700
15701**参数:**
15702
15703| 参数名 | 类型 | 必填 | 说明 |
15704|--------|------|------|------|
15705| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 |
15706
15707**示例:**
15708
15709完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15710
15711### release<sup>12+<sup>
15712
15713release(): void
15714
15715销毁播放器。
15716
15717**系统能力:** SystemCapability.Web.Webview.Core
15718
15719**示例:**
15720
15721完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15722
15723### enterFullscreen<sup>12+<sup>
15724
15725enterFullscreen(): void
15726
15727播放器进入全屏。
15728
15729**系统能力:** SystemCapability.Web.Webview.Core
15730
15731**示例:**
15732
15733完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15734
15735### exitFullscreen<sup>12+<sup>
15736
15737exitFullscreen(): void
15738
15739播放器退出全屏。
15740
15741**系统能力:** SystemCapability.Web.Webview.Core
15742
15743**示例:**
15744
15745完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15746
15747### resumePlayer<sup>12+<sup>
15748
15749resumePlayer?(): void
15750
15751通知应用重建应用内播放器,并恢复应用内播放器的状态信息。
15752
15753**系统能力:** SystemCapability.Web.Webview.Core
15754
15755**示例:**
15756
15757完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15758
15759### suspendPlayer<sup>12+<sup>
15760
15761suspendPlayer?(type: SuspendType): void
15762
15763通知应用销毁应用内播放器,并保存应用内播放器的状态信息。
15764
15765**系统能力:** SystemCapability.Web.Webview.Core
15766
15767**参数:**
15768
15769| 参数名 | 类型 | 必填 | 说明 |
15770|--------|------|------|------|
15771| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。|
15772
15773**示例:**
15774
15775完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15776
15777## MediaType<sup>12+<sup>
15778
15779表示媒体类型。
15780
15781**系统能力:** SystemCapability.Web.Webview.Core
15782
15783| 名称 | 值 | 说明 |
15784|------|----|------|
15785| VIDEO | 0 | 视频。 |
15786| AUDIO | 1 | 音频。 |
15787
15788## SourceType<sup>12+<sup>
15789
15790表示媒体源的类型。
15791
15792**系统能力:** SystemCapability.Web.Webview.Core
15793
15794| 名称 | 值 | 说明 |
15795|------|----|------|
15796| URL | 0 | 媒体源的类型是 URL 。 |
15797| MSE | 1 | 媒体源的类型是 blob 。 |
15798
15799## MediaSourceInfo<sup>12+<sup>
15800
15801表示媒体源的信息。
15802
15803**系统能力:** SystemCapability.Web.Webview.Core
15804
15805| 名称 | 类型 | 必填 | 说明 |
15806|------|------|------|------|
15807| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 |
15808| source | string | 是 | 媒体源地址。 |
15809| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 |
15810
15811## NativeMediaPlayerSurfaceInfo<sup>12+<sup>
15812
15813[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。
15814
15815**系统能力:** SystemCapability.Web.Webview.Core
15816
15817| 名称 | 类型 | 必填 | 说明 |
15818|------|------|------|------|
15819| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 |
15820| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 |
15821
15822## Preload<sup>12+<sup>
15823
15824播放器预加载媒体数据。
15825
15826**系统能力:** SystemCapability.Web.Webview.Core
15827
15828| 名称 | 值 | 说明 |
15829|------|----|------|
15830| NONE     | 0 | 不预加载。 |
15831| METADATA | 1 | 只预加载媒体的元数据。 |
15832| AUTO     | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 |
15833
15834## MediaInfo<sup>12+<sup>
15835
15836[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。
15837包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。
15838
15839**系统能力:** SystemCapability.Web.Webview.Core
15840
15841| 名称 | 类型 | 必填 | 说明 |
15842|------|------|------|------|
15843| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。|
15844| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 |
15845| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 |
15846| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 |
15847| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。 |
15848| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 |
15849| muted | boolean | 是 | 是否要求静音播放。 |
15850| posterUrl | string | 是 | 海报的地址。 |
15851| preload | [Preload](#preload12) | 是 | 是否需要预加载。 |
15852| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 |
15853| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 |
15854
15855
15856## CreateNativeMediaPlayerCallback<sup>12+<sup>
15857
15858type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge
15859
15860[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。
15861一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。
15862
15863**系统能力:** SystemCapability.Web.Webview.Core
15864
15865**参数:**
15866
15867| 参数名 | 类型 | 必填 | 说明 |
15868|--------|------|------|------|
15869| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 |
15870| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 |
15871
15872**返回值:**
15873
15874| 类型 | 说明 |
15875|------|------|
15876| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 |
15877
15878**示例:**
15879
15880完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。
15881
15882## OfflineResourceMap<sup>12+</sup>
15883
15884本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。
15885
15886**系统能力:** SystemCapability.Web.Webview.Core
15887
15888| 名称        | 类型   | 可读 | 可写 |说明                 |
15889| ----------- | ------ | -----|------|------------------- |
15890| urlList | Array\<string\> | 是   | 是   | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。      |
15891| resource | Uint8Array | 是   | 是   | 本地离线资源的内容。      |
15892| 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。      |
15893| type | [OfflineResourceType](#offlineresourcetype12) | 是   | 是   | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。      |
15894
15895## OfflineResourceType<sup>12+</sup>
15896
15897[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。
15898
15899**系统能力:** SystemCapability.Web.Webview.Core
15900
15901| 名称         | 值 | 说明                              |
15902| ------------ | -- |--------------------------------- |
15903| IMAGE  | 0 | 图片类型的资源。 |
15904| CSS       | 1 | CSS类型的资源。|
15905| CLASSIC_JS       | 2 | 通过<script src="" /\>标签加载的Javascript资源。|
15906| MODULE_JS      | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。|
15907
15908## WebResourceType<sup>12+</sup>
15909
15910资源请求的资源类型。
15911
15912**系统能力:** SystemCapability.Web.Webview.Core
15913
15914| 名称         | 值 | 说明                              |
15915| ------------ | -- |--------------------------------- |
15916| MAIN_FRAME | 0 | 顶层页面。 |
15917| SUB_FRAME | 1 | Frame或Iframe。 |
15918| STYLE_SHEET | 2 | CSS样式表。 |
15919| SCRIPT | 3 | 外部脚本。 |
15920| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 |
15921| FONT_RESOURCE | 5 | 字体。 |
15922| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 |
15923| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 |
15924| MEDIA | 8 | 媒体资源。 |
15925| WORKER | 9 | 专用工作线程的主资源。 |
15926| SHARED_WORKER | 10 | 共享工作线程的主资源。 |
15927| PREFETCH | 11 | 明确的预取请求。 |
15928| FAVICON | 12 | 网站图标。 |
15929| XHR | 13 | XMLHttpRequest。 |
15930| PING | 14 | <a ping\>/sendBeacon的Ping请求。 |
15931| SERVICE_WORKER | 15 | service worker的主资源。 |
15932| CSP_REPORT | 16 | 内容安全策略违规报告。 |
15933| PLUGIN_RESOURCE | 17 | 插件请求的资源。 |
15934| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 |
15935| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 |
15936
15937## RectEvent<sup>12+<sup>
15938
15939矩形定义。
15940
15941**系统能力:** SystemCapability.Web.Webview.Core
15942
15943| 名称           | 类型       | 可读 | 可写 | 说明                         |
15944| -------------- | --------- | ---- | ---- | ---------------------------- |
15945| x  | number   | 是   | 是   | 矩形区域左上角x坐标。    |
15946| y  | number   | 是   | 是   | 矩形区域左上角y坐标。    |
15947| width  | number   | 是   | 是   | 矩形的宽度。    |
15948| height  | number   | 是   | 是   | 矩形的高度。    |
15949
15950## BackForwardCacheSupportedFeatures<sup>12+<sup>
15951
15952选择性允许使用以下特性的页面进入前进后退缓存。
15953
15954**系统能力:** SystemCapability.Web.Webview.Core
15955
15956| 名称 | 类型 | 必填 | 说明 |
15957|------|------|------|------|
15958| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为同层渲染元素创建的原生控件的生命周期,避免造成泄漏。 |
15959| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为视频元素创建的原生控件的生命周期,避免造成泄漏。|
15960
15961## BackForwardCacheOptions<sup>12+<sup>
15962
15963前进后退缓存相关设置对象,用来控制web组件前进后退缓存相关选项。
15964
15965**系统能力:** SystemCapability.Web.Webview.Core
15966
15967| 名称 | 类型 | 必填 | 说明 |
15968|------|------|------|------|
15969| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 |
15970| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。|
15971
15972## AdsBlockManager<sup>12+</sup>
15973
15974通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。
15975
15976### setAdsBlockRules<sup>12+</sup>
15977
15978static setAdsBlockRules(rulesFile: string, replace: boolean): void
15979
15980向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。
15981
15982> **说明:**
15983>
15984> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。
15985
15986**系统能力:** SystemCapability.Web.Webview.Core
15987
15988**参数:**
15989
15990| 参数名     | 类型   | 必填 | 说明                               |
15991| ---------- | ------ | ---- | -------------------------------- |
15992| rulesFile | string | 是   | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 |
15993| replace   | boolean | 是   | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 |
15994
15995**错误码:**
15996
15997以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
15998
15999| 错误码ID | 错误信息                  |
16000| -------- | ----------------------- |
16001|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16002
16003**示例:**
16004
16005```ts
16006// xxx.ets
16007import { webview } from '@kit.ArkWeb';
16008import { picker, fileUri } from '@kit.CoreFileKit';
16009
16010// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中
16011@Entry
16012@Component
16013struct WebComponent {
16014  controller: webview.WebviewController = new webview.WebviewController();
16015
16016  build() {
16017    Row() {
16018      Flex() {
16019        Button({ type: ButtonType.Capsule }) {
16020          Text("setAdsBlockRules")
16021        }
16022        .onClick(() => {
16023          try {
16024            let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions();
16025            let documentPicker: ESObject = new picker.DocumentViewPicker();
16026            documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => {
16027              if (documentSelectResult && documentSelectResult.length > 0) {
16028                let fileRealPath = new fileUri.FileUri(documentSelectResult[0]);
16029                console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath);
16030                webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true);
16031              }
16032            })
16033          } catch (err) {
16034            console.error('DocumentViewPicker.select failed with err:' + err);
16035          }
16036        })
16037      }
16038    }
16039  }
16040}
16041```
16042
16043### addAdsBlockDisallowedList<sup>12+</sup>
16044
16045static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16046
16047向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。
16048
16049> **说明:**
16050>
16051> 此接口设置的域名不会持久化,应用重启需要重新设置。
16052>
16053> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。
16054
16055**系统能力:** SystemCapability.Web.Webview.Core
16056
16057**参数:**
16058
16059| 参数名     | 类型   | 必填 | 说明                               |
16060| ---------- | ------ | ---- | -------------------------------- |
16061| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16062
16063**错误码:**
16064
16065以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16066
16067| 错误码ID | 错误信息                  |
16068| -------- | ----------------------- |
16069|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16070
16071**示例:**
16072
16073```ts
16074// xxx.ets
16075import { webview } from '@kit.ArkWeb';
16076
16077// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16078@Entry
16079@Component
16080struct WebComponent {
16081  main_url: string = 'https://www.example.com';
16082  text_input_controller: TextInputController = new TextInputController();
16083  controller: webview.WebviewController = new webview.WebviewController();
16084  @State input_text: string = 'https://www.example.com';
16085
16086  build() {
16087    Column() {
16088      Row() {
16089        Flex() {
16090          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16091            .id("input_url")
16092            .height(40)
16093            .margin(5)
16094            .borderColor(Color.Blue)
16095            .onChange((value: string) => {
16096              this.input_text = value;
16097            })
16098
16099          Button({type: ButtonType.Capsule}) { Text("Go") }
16100          .onClick(() => {
16101            this.controller.loadUrl(this.input_text);
16102          })
16103
16104          Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") }
16105          .onClick(() => {
16106            let arrDomainSuffixes = new Array<string>();
16107            arrDomainSuffixes.push('example.com');
16108            arrDomainSuffixes.push('abcdefg.cn');
16109            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes);
16110          })
16111        }
16112      }
16113      Web({ src: this.main_url, controller: this.controller })
16114        .onControllerAttached(()=>{
16115          this.controller.enableAdsBlock(true);
16116        })
16117    }
16118  }
16119}
16120```
16121
16122### removeAdsBlockDisallowedList<sup>12+</sup>
16123
16124static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void
16125
16126从AdsBlockManager的DisallowedList中删除一组域名。
16127
16128> **说明:**
16129>
16130> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16131
16132**系统能力:** SystemCapability.Web.Webview.Core
16133
16134**参数:**
16135
16136| 参数名     | 类型   | 必填 | 说明                               |
16137| ---------- | ------ | ---- | -------------------------------- |
16138| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16139
16140**错误码:**
16141
16142以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16143
16144| 错误码ID | 错误信息                  |
16145| -------- | ----------------------- |
16146|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16147
16148**示例:**
16149
16150```ts
16151// xxx.ets
16152import { webview } from '@kit.ArkWeb';
16153
16154// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16155@Entry
16156@Component
16157struct WebComponent {
16158  main_url: string = 'https://www.example.com';
16159  text_input_controller: TextInputController = new TextInputController();
16160  controller: webview.WebviewController = new webview.WebviewController();
16161  @State input_text: string = 'https://www.example.com';
16162
16163  build() {
16164    Column() {
16165      Row() {
16166        Flex() {
16167          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16168            .id("input_url")
16169            .height(40)
16170            .margin(5)
16171            .borderColor(Color.Blue)
16172            .onChange((value: string) => {
16173              this.input_text = value;
16174            })
16175
16176          Button({type: ButtonType.Capsule}) { Text("Go") }
16177          .onClick(() => {
16178            this.controller.loadUrl(this.input_text);
16179          })
16180
16181          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") }
16182          .onClick(() => {
16183            let arrDomainSuffixes = new Array<string>();
16184            arrDomainSuffixes.push('example.com');
16185            arrDomainSuffixes.push('abcdefg.cn');
16186            webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes);
16187          })
16188        }
16189      }
16190      Web({ src: this.main_url, controller: this.controller })
16191        .onControllerAttached(()=>{
16192          this.controller.enableAdsBlock(true);
16193        })
16194    }
16195  }
16196}
16197```
16198
16199### clearAdsBlockDisallowedList<sup>12+</sup>
16200
16201static clearAdsBlockDisallowedList(): void
16202
16203清空AdsBlockManager的DisallowedList。
16204
16205**系统能力:** SystemCapability.Web.Webview.Core
16206
16207**示例:**
16208
16209```ts
16210// xxx.ets
16211import { webview } from '@kit.ArkWeb';
16212
16213@Entry
16214@Component
16215struct WebComponent {
16216  main_url: string = 'https://www.example.com';
16217  text_input_controller: TextInputController = new TextInputController();
16218  controller: webview.WebviewController = new webview.WebviewController();
16219  @State input_text: string = 'https://www.example.com';
16220
16221  build() {
16222    Column() {
16223      Row() {
16224        Flex() {
16225          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16226            .id("input_url")
16227            .height(40)
16228            .margin(5)
16229            .borderColor(Color.Blue)
16230            .onChange((value: string) => {
16231              this.input_text = value;
16232            })
16233
16234          Button({type: ButtonType.Capsule}) { Text("Go") }
16235          .onClick(() => {
16236            this.controller.loadUrl(this.input_text);
16237          })
16238
16239          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") }
16240          .onClick(() => {
16241            webview.AdsBlockManager.clearAdsBlockDisallowedList();
16242          })
16243        }
16244      }
16245      Web({ src: this.main_url, controller: this.controller })
16246        .onControllerAttached(()=>{
16247          this.controller.enableAdsBlock(true);
16248        })
16249    }
16250  }
16251}
16252```
16253
16254### addAdsBlockAllowedList<sup>12+</sup>
16255
16256static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16257
16258向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。
16259
16260> **说明:**
16261>
16262> 此接口设置的域名不会持久化,应用重启需要重新设置。
16263>
16264> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。
16265
16266**系统能力:** SystemCapability.Web.Webview.Core
16267
16268**参数:**
16269
16270| 参数名     | 类型   | 必填 | 说明                               |
16271| ---------- | ------ | ---- | -------------------------------- |
16272| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16273
16274**错误码:**
16275
16276以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16277
16278| 错误码ID | 错误信息                  |
16279| -------- | ----------------------- |
16280|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16281
16282**示例:**
16283
16284```ts
16285// xxx.ets
16286import { webview } from '@kit.ArkWeb';
16287
16288// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略
16289@Entry
16290@Component
16291struct WebComponent {
16292  main_url: string = 'https://www.example.com';
16293  text_input_controller: TextInputController = new TextInputController();
16294  controller: webview.WebviewController = new webview.WebviewController();
16295  @State input_text: string = 'https://www.example.com';
16296
16297  build() {
16298    Column() {
16299      Row() {
16300        Flex() {
16301          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16302            .id("input_url")
16303            .height(40)
16304            .margin(5)
16305            .borderColor(Color.Blue)
16306            .onChange((value: string) => {
16307              this.input_text = value;
16308            })
16309
16310          Button({type: ButtonType.Capsule}) { Text("Go") }
16311          .onClick(() => {
16312            this.controller.loadUrl(this.input_text);
16313          })
16314
16315          Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") }
16316          .onClick(() => {
16317            let arrDisallowDomainSuffixes = new Array<string>();
16318            arrDisallowDomainSuffixes.push('example.com');
16319            webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes);
16320
16321            let arrAllowedDomainSuffixes = new Array<string>();
16322            arrAllowedDomainSuffixes.push('news.example.com');
16323            webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes);
16324          })
16325        }
16326      }
16327      Web({ src: this.main_url, controller: this.controller })
16328        .onControllerAttached(()=>{
16329          this.controller.enableAdsBlock(true)
16330        })
16331    }
16332  }
16333}
16334```
16335
16336### removeAdsBlockAllowedList<sup>12+</sup>
16337
16338static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void
16339
16340从AdsBlockManager的AllowedList中删除一组域名。
16341
16342> **说明:**
16343>
16344> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。
16345
16346**系统能力:** SystemCapability.Web.Webview.Core
16347
16348**参数:**
16349
16350| 参数名     | 类型   | 必填 | 说明                               |
16351| ---------- | ------ | ---- | -------------------------------- |
16352| domainSuffixes | Array\<string\> | 是   | 一组域名列表,例如['example.com', 'abcd.efg.com'] |
16353
16354**错误码:**
16355
16356以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
16357
16358| 错误码ID | 错误信息                  |
16359| -------- | ----------------------- |
16360|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
16361
16362**示例:**
16363
16364```ts
16365// xxx.ets
16366import { webview } from '@kit.ArkWeb';
16367
16368// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素
16369@Entry
16370@Component
16371struct WebComponent {
16372  main_url: string = 'https://www.example.com';
16373  text_input_controller: TextInputController = new TextInputController();
16374  controller: webview.WebviewController = new webview.WebviewController();
16375  @State input_text: string = 'https://www.example.com';
16376
16377  build() {
16378    Column() {
16379      Row() {
16380        Flex() {
16381          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16382            .id("input_url")
16383            .height(40)
16384            .margin(5)
16385            .borderColor(Color.Blue)
16386            .onChange((value: string) => {
16387              this.input_text = value;
16388            })
16389
16390          Button({type: ButtonType.Capsule}) { Text("Go") }
16391          .onClick(() => {
16392            this.controller.loadUrl(this.input_text);
16393          })
16394
16395          Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") }
16396          .onClick(() => {
16397            let arrDomainSuffixes = new Array<string>();
16398            arrDomainSuffixes.push('example.com');
16399            arrDomainSuffixes.push('abcdefg.cn');
16400            webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes);
16401          })
16402        }
16403      }
16404      Web({ src: this.main_url, controller: this.controller })
16405        .onControllerAttached(()=>{
16406          this.controller.enableAdsBlock(true);
16407        })
16408    }
16409  }
16410}
16411```
16412
16413### clearAdsBlockAllowedList<sup>12+</sup>
16414
16415static clearAdsBlockAllowedList(): void
16416
16417清空AdsBlockManager的AllowedList。
16418
16419**系统能力:** SystemCapability.Web.Webview.Core
16420
16421**示例:**
16422
16423```ts
16424// xxx.ets
16425import { webview } from '@kit.ArkWeb';
16426
16427@Entry
16428@Component
16429struct WebComponent {
16430  main_url: string = 'https://www.example.com';
16431  text_input_controller: TextInputController = new TextInputController();
16432  controller: webview.WebviewController = new webview.WebviewController();
16433  @State input_text: string = 'https://www.example.com';
16434
16435
16436  build() {
16437    Column() {
16438      Row() {
16439        Flex() {
16440          TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller})
16441            .id("input_url")
16442            .height(40)
16443            .margin(5)
16444            .borderColor(Color.Blue)
16445            .onChange((value: string) => {
16446              this.input_text = value;
16447            })
16448
16449          Button({type: ButtonType.Capsule}) { Text("Go") }
16450          .onClick(() => {
16451            this.controller.loadUrl(this.input_text);
16452          })
16453
16454          Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") }
16455          .onClick(() => {
16456            webview.AdsBlockManager.clearAdsBlockAllowedList();
16457          })
16458        }
16459      }
16460      Web({ src: this.main_url, controller: this.controller })
16461      .onControllerAttached(()=>{
16462        this.controller.enableAdsBlock(true);
16463      })
16464    }
16465  }
16466}
16467```
16468
16469## SnapshotInfo<sup>12+</sup>
16470
16471获取全量绘制结果入参。
16472
16473**系统能力:** SystemCapability.Web.Webview.Core
16474
16475| 名称 | 类型 |  必填 | 说明 |
16476|------|------|------|------|
16477| id | string | 否 | snapshot的id。|
16478| 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。)|
16479
16480## SnapshotResult<sup>12+</sup>
16481
16482全量绘制回调结果。
16483
16484**系统能力:** SystemCapability.Web.Webview.Core
16485
16486| 名称 | 类型 | 必填 |  说明 |
16487|------|------|--|---------|
16488| id | string | 否 | snapshot的id。|
16489| status | boolean | 否 |  snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。|
16490| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions)   | 否 | web绘制的真实尺寸,number类型,单位vp。|
16491| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。|
16492
16493## ScrollType<sup>12+</sup>
16494
16495Scroll滚动类型,用于[setScrollable](#setscrollable12)。
16496
16497**系统能力:** SystemCapability.Web.Webview.Core
16498
16499| 名称         | 值 | 说明                              |
16500| ------------ | -- |--------------------------------- |
16501| EVENT  | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。|
16502
16503## PressureLevel<sup>14+</sup>
16504
16505内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。
16506
16507**系统能力:** SystemCapability.Web.Webview.Core
16508
16509| 名称 | 值 | 说明 |
16510| ------------------------------- | - | ---------- |
16511| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 |
16512| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 |
16513
16514##  PdfConfiguration<sup>14+</sup>
16515
16516createPdf函数输入参数。
16517
16518> **说明:**
16519>
16520> 英寸与像素之间转换公式:像素 = 96 * 英寸。
16521
16522**系统能力:** SystemCapability.Web.Webview.Core
16523
16524| 名称                  | 类型    | 必填 | 说明                                                         |
16525| --------------------- | ------- | ---- | ------------------------------------------------------------ |
16526| width                 | number  | 是   | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。   |
16527| height                | number  | 是   | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。  |
16528| scale                 | number  | 否   | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 |
16529| marginTop             | number  | 是   | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16530| marginBottom          | number  | 是   | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16531| marginRight           | number  | 是   | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16532| marginLeft            | number  | 是   | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 |
16533| shouldPrintBackground | boolean | 否   | 是否打印背景颜色。默认值:false。                            |
16534
16535## PdfData<sup>14+</sup>
16536
16537createPdf函数输出数据流类。
16538
16539> **说明:**
16540>
16541> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。
16542
16543### pdfArrayBuffer<sup>14+</sup>
16544
16545pdfArrayBuffer(): Uint8Array
16546
16547获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。
16548
16549**系统能力:** SystemCapability.Web.Webview.Core
16550
16551**返回值:**
16552
16553| 类型       | 说明     |
16554| ---------- | -------- |
16555| Uint8Array | 数据流。 |
16556
16557## ScrollOffset<sup>13+</sup>
16558
16559网页当前的滚动偏移量。
16560
16561**系统能力:** SystemCapability.Web.Webview.Core
16562
16563| 名称 | 类型   | 可读 | 可写 | 说明                                                         |
16564| ---- | ------ | ---- | ---- | ------------------------------------------------------------ |
16565| x    | number | 是   | 是   | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 |
16566| y    | number | 是   | 是   | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 |
16567