1# Web
2
3提供具有网页显示能力的Web组件,[@ohos.web.webview](js-apis-webview.md)提供web控制能力。
4
5> **说明:**
6>
7> - 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。
9
10## 需要权限
11
12访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。
13
14## 子组件
15
1617
18## 接口
19
20Web(value: WebOptions)
21
22> **说明:**
23>
24> 不支持转场动画。
25>
26> 同一页面的多个Web组件,必须绑定不同的WebviewController。
27
28**系统能力:** SystemCapability.Web.Webview.Core
29
30**参数:**
31
32| 参数名        | 类型                                     | 必填   | 说明                                     |
33| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
34| value        | [WebOptions](#weboptions)   | 是    | 定义Web选项。 |
35
36**示例:**
37
38加载在线网页。
39
40  ```ts
41  // xxx.ets
42  import { webview } from '@kit.ArkWeb';
43
44  @Entry
45  @Component
46  struct WebComponent {
47    controller: webview.WebviewController = new webview.WebviewController();
48
49    build() {
50      Column() {
51        Web({ src: 'www.example.com', controller: this.controller })
52      }
53    }
54  }
55  ```
56
57隐私模式Webview加载在线网页。
58
59  ```ts
60  // xxx.ets
61  import { webview } from '@kit.ArkWeb';
62
63  @Entry
64  @Component
65  struct WebComponent {
66    controller: webview.WebviewController = new webview.WebviewController();
67
68    build() {
69      Column() {
70        Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true })
71      }
72    }
73  }
74  ```
75
76Web组件同步渲染模式。
77
78  ```ts
79  // xxx.ets
80  import { webview } from '@kit.ArkWeb';
81
82  @Entry
83  @Component
84  struct WebComponent {
85    controller: webview.WebviewController = new webview.WebviewController();
86
87    build() {
88      Column() {
89        Web({ src: 'www.example.com', controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
90      }
91    }
92  }
93  ```
94
95Web组件指定共享渲染进程。
96
97  ```ts
98  // xxx.ets
99  import { webview } from '@kit.ArkWeb';
100
101  @Entry
102  @Component
103  struct WebComponent {
104    controller: webview.WebviewController = new webview.WebviewController();
105
106    build() {
107      Column() {
108        Web({ src: 'www.example.com', controller: this.controller, sharedRenderProcessToken: "111" })
109        Web({ src: 'www.w3.org', controller: this.controller, sharedRenderProcessToken: "111" })
110      }
111    }
112  }
113  ```
114
115加载本地网页。
116
117通过$rawfile方式加载。
118  ```ts
119  // xxx.ets
120  import { webview } from '@kit.ArkWeb';
121
122  @Entry
123  @Component
124  struct WebComponent {
125    controller: webview.WebviewController = new webview.WebviewController();
126
127    build() {
128      Column() {
129        // 通过$rawfile加载本地资源文件。
130        Web({ src: $rawfile("index.html"), controller: this.controller })
131      }
132    }
133  }
134  ```
135
136通过resources协议加载,适用Webview加载带有"#"路由的链接。
137  ```ts
138  // xxx.ets
139  import { webview } from '@kit.ArkWeb';
140
141  @Entry
142  @Component
143  struct WebComponent {
144    controller: webview.WebviewController = new webview.WebviewController();
145
146    build() {
147      Column() {
148        // 通过resource协议加载本地资源文件。
149        Web({ src: "resource://rawfile/index.html", controller: this.controller })
150      }
151    }
152  }
153  ```
154
155加载沙箱路径下的本地资源文件,需要开启应用中文件系统的访问[fileAccess](#fileaccess)权限。
156
1571. 通过构造的单例对象GlobalContext获取沙箱路径。
158
159   ```ts
160   // GlobalContext.ets
161   export class GlobalContext {
162     private constructor() {}
163     private static instance: GlobalContext;
164     private _objects = new Map<string, Object>();
165
166     public static getContext(): GlobalContext {
167       if (!GlobalContext.instance) {
168         GlobalContext.instance = new GlobalContext();
169       }
170       return GlobalContext.instance;
171     }
172
173     getObject(value: string): Object | undefined {
174       return this._objects.get(value);
175     }
176
177     setObject(key: string, objectClass: Object): void {
178       this._objects.set(key, objectClass);
179     }
180   }
181   ```
182
183   ```ts
184   // xxx.ets
185   import { webview } from '@kit.ArkWeb';
186   import { GlobalContext } from '../GlobalContext';
187
188   let url = 'file://' + GlobalContext.getContext().getObject("filesDir") + '/index.html';
189
190   @Entry
191   @Component
192   struct WebComponent {
193     controller: webview.WebviewController = new webview.WebviewController();
194
195     build() {
196       Column() {
197         // 加载沙箱路径文件。
198         Web({ src: url, controller: this.controller })
199         .fileAccess(true)
200       }
201     }
202   }
203   ```
204
2052. 修改EntryAbility.ets206
207   以filesDir为例,获取沙箱路径。若想获取其他路径,请参考[应用文件路径](../../application-models/application-context-stage.md#获取应用文件路径)。
208
209   ```ts
210   // xxx.ets
211   import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
212   import { webview } from '@kit.ArkWeb';
213   import { GlobalContext } from '../GlobalContext';
214
215   export default class EntryAbility extends UIAbility {
216     onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
217       // 通过在GlobalContext对象上绑定filesDir,可以实现UIAbility组件与UI之间的数据同步。
218       GlobalContext.getContext().setObject("filesDir", this.context.filesDir);
219       console.log("Sandbox path is " + GlobalContext.getContext().getObject("filesDir"));
220     }
221   }
222   ```
223
224   加载的html文件。
225
226   ```html
227   <!-- index.html -->
228   <!DOCTYPE html>
229   <html>
230       <body>
231           <p>Hello World</p>
232       </body>
233   </html>
234   ```
235
236## WebOptions
237
238通过[接口](#接口)定义Web选项。
239
240**系统能力:** SystemCapability.Web.Webview.Core
241
242| 名称        | 类型                                     | 必填   | 说明                                     |
243| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
244| src        | string \| [Resource](../apis-arkui/arkui-ts/ts-types.md#resource)   | 是    | 网页资源地址。如果访问本地资源文件,请使用$rawfile或者resource协议。如果加载应用包外沙箱路径的本地资源文件(文件支持html和txt类型),请使用file://沙箱文件路径。<br>src不能通过状态变量(例如:@State)动态更改地址,如需更改,请通过[loadUrl()](js-apis-webview.md#loadurl)重新加载。 |
245| controller | [WebController](#webcontroller) \| [WebviewController<sup>9+</sup>](#webviewcontroller9)  | 是    | 控制器。从API Version 9开始,WebController不再维护,建议使用WebviewController替代。 |
246| renderMode<sup>12+</sup> | [RenderMode](#rendermode12枚举说明)| 否   | 表示当前Web组件的渲染方式,RenderMode.ASYNC_RENDER表示Web组件自渲染,RenderMode.SYNC_RENDER表示支持Web组件统一渲染能力,默认值RenderMode.ASYNC_RENDER, 该模式不支持动态调整。 |
247| incognitoMode<sup>11+</sup> | boolean | 否 | 表示当前创建的webview是否是隐私模式。true表示创建隐私模式的webview, false表示创建正常模式的webview。<br> 默认值:false |
248| sharedRenderProcessToken<sup>12+</sup> | string | 否 | 表示当前Web组件指定共享渲染进程的token, 多渲染进程模式下,相同token的Web组件会优先尝试复用与token相绑定的渲染进程。token与渲染进程的绑定发生在渲染进程的初始化阶段。当渲染进程没有关联的Web组件时,其与token绑定关系将被移除。<br> 默认值: ""  |
249
250## WebviewController<sup>9+</sup>
251
252type WebviewController = WebviewController
253
254提供Web控制器的方法。
255
256**系统能力:** SystemCapability.Web.Webview.Core
257
258| 类型     | 说明       |
259| ------ | ---------- |
260| [WebviewController](js-apis-webview.md#webviewcontroller)  | 通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 |
261
262## 属性
263
264通用属性仅支持[aspectRatio](../apis-arkui/arkui-ts/ts-universal-attributes-layout-constraints.md#aspectratio)、[backdropBlur](../apis-arkui/arkui-ts/ts-universal-attributes-background.md#backdropblur)、[backgroundColor](../apis-arkui/arkui-ts/ts-universal-attributes-background.md#backgroundcolor)、[bindContentCover](../apis-arkui/arkui-ts/ts-universal-attributes-modal-transition.md#bindcontentcover)、[bindContextMenu](../apis-arkui/arkui-ts/ts-universal-attributes-menu.md#bindcontextmenu8)、[bindMenu ](../apis-arkui/arkui-ts/ts-universal-attributes-menu.md#bindmenu)、[bindSheet](../apis-arkui/arkui-ts/ts-universal-attributes-sheet-transition.md#bindsheet)、[borderColor](../apis-arkui/arkui-ts/ts-universal-attributes-border.md#bordercolor)、[borderRadius](../apis-arkui/arkui-ts/ts-universal-attributes-border.md#borderradius)、[borderStyle](../apis-arkui/arkui-ts/ts-universal-attributes-border.md#borderstyle)、[borderWidth](../apis-arkui/arkui-ts/ts-universal-attributes-border.md#borderwidth)、[clip](../apis-arkui/arkui-ts/ts-universal-attributes-sharp-clipping.md#clip)、[constraintSize](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#constraintsize)、[defaultFocus](../apis-arkui/arkui-ts/ts-universal-attributes-focus.md#defaultfocus9)、[focusable](../apis-arkui/arkui-ts/ts-universal-attributes-focus.md#focusable)、[tabIndex](../apis-arkui/arkui-ts/ts-universal-attributes-focus.md#tabindex9)、[groupDefaultFocus](../apis-arkui/arkui-ts/ts-universal-attributes-focus.md#groupdefaultfocus9)、[displayPriority](../apis-arkui/arkui-ts/ts-universal-attributes-layout-constraints.md#displaypriority)、[enabled](../apis-arkui/arkui-ts/ts-universal-attributes-enable.md#enabled)、[flexBasis](../apis-arkui/arkui-ts/ts-universal-attributes-flex-layout.md#flexbasis)、[flexShrink](../apis-arkui/arkui-ts/ts-universal-attributes-flex-layout.md#flexshrink)、[layoutWeight](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#layoutweight)、[id](../apis-arkui/arkui-ts/ts-universal-attributes-component-id.md)、[gridOffset](../apis-arkui/arkui-ts/ts-universal-attributes-grid.md)、[gridSpan](../apis-arkui/arkui-ts/ts-universal-attributes-grid.md)、[useSizeType](../apis-arkui/arkui-ts/ts-universal-attributes-grid.md)、[height](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#height)、[touchable](../apis-arkui/arkui-ts/ts-universal-attributes-click.md)、[margin](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#margin)、[markAnchor](../apis-arkui/arkui-ts/ts-universal-attributes-location.md#markanchor)、[offset](../apis-arkui/arkui-ts/ts-universal-attributes-location.md#offset)、[width](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#width)、[zIndex](../apis-arkui/arkui-ts/ts-universal-attributes-z-order.md#zindex)、[visibility](../apis-arkui/arkui-ts/ts-universal-attributes-visibility.md#visibility)、[scale](../apis-arkui/arkui-ts/ts-universal-attributes-transformation.md#scale)、[translate](../apis-arkui/arkui-ts/ts-universal-attributes-transformation.md#translate)、[responseRegion](../apis-arkui/arkui-ts/ts-universal-attributes-touch-target.md#responseregion)、[size](../apis-arkui/arkui-ts/ts-universal-attributes-size.md#size)、[opacity](../apis-arkui/arkui-ts/ts-universal-attributes-opacity.md#opacity)、[shadow](../apis-arkui/arkui-ts/ts-universal-attributes-image-effect.md#shadow)、[sharedTransition](../apis-arkui/arkui-ts/ts-transition-animation-shared-elements.md)、[transition](../apis-arkui/arkui-ts/ts-transition-animation-component.md)。
265
266### domStorageAccess
267
268domStorageAccess(domStorageAccess: boolean)
269
270设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。
271
272**系统能力:** SystemCapability.Web.Webview.Core
273
274**参数:**
275
276| 参数名              | 类型    | 必填   | 说明                                 |
277| ---------------- | ------- | ---- | ------------------------------------ |
278| domStorageAccess | boolean | 是    | 设置是否开启文档对象模型存储接口(DOM Storage API)权限。默认值:false。 |
279
280**示例:**
281
282  ```ts
283  // xxx.ets
284  import { webview } from '@kit.ArkWeb';
285
286  @Entry
287  @Component
288  struct WebComponent {
289    controller: webview.WebviewController = new webview.WebviewController();
290
291    build() {
292      Column() {
293        Web({ src: 'www.example.com', controller: this.controller })
294          .domStorageAccess(true)
295      }
296    }
297  }
298  ```
299
300### fileAccess
301
302fileAccess(fileAccess: boolean)
303
304设置是否开启应用中文件系统的访问。[$rawfile(filepath/filename)](../../quick-start/resource-categories-and-access.md)中rawfile路径的文件不受该属性影响而限制访问。
305
306从API version 12开始,fileAccess默认不启用。同时,当fileAccess为false的时候,仅只读资源目录/data/storage/el1/bundle/entry/resources/resfile里面的file协议资源依然可以访问,不受fileAccess管控。
307
308**系统能力:** SystemCapability.Web.Webview.Core
309
310**参数:**
311
312| 参数名        | 类型    | 必填   | 说明                   |
313| ---------- | ------- | ---- | ---------------------- |
314| fileAccess | boolean | 是    | API version 11及以前:默认为true,启动应用中文件系统的访问。API version 12及以后:默认为false,不启用应用中文件系统的访问。 |
315
316**示例:**
317
318  ```ts
319  // xxx.ets
320  import { webview } from '@kit.ArkWeb';
321
322  @Entry
323  @Component
324  struct WebComponent {
325    controller: webview.WebviewController = new webview.WebviewController();
326
327    build() {
328      Column() {
329        Web({ src: 'www.example.com', controller: this.controller })
330          .fileAccess(true)
331      }
332    }
333  }
334  ```
335
336### imageAccess
337
338imageAccess(imageAccess: boolean)
339
340设置是否允许自动加载图片资源,默认允许。
341
342**系统能力:** SystemCapability.Web.Webview.Core
343
344**参数:**
345
346| 参数名         | 类型    | 必填   | 说明            |
347| ----------- | ------- | ---- | --------------- |
348| imageAccess | boolean | 是    | 设置是否允许自动加载图片资源。默认值:true。 |
349
350**示例:**
351  ```ts
352  // xxx.ets
353  import { webview } from '@kit.ArkWeb';
354
355  @Entry
356  @Component
357  struct WebComponent {
358    controller: webview.WebviewController = new webview.WebviewController();
359
360    build() {
361      Column() {
362        Web({ src: 'www.example.com', controller: this.controller })
363          .imageAccess(true)
364      }
365    }
366  }
367  ```
368
369### javaScriptProxy
370
371javaScriptProxy(javaScriptProxy: JavaScriptProxy)
372
373注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。所有参数不支持更新。注册对象时,同步与异步方法列表请至少选择一项不为空,可同时注册两类方法。同一方法在同步与异步列表中重复注册,将默认异步调用。此接口只支持注册一个对象,若需要注册多个对象请使用[registerJavaScriptProxy<sup>9+</sup>](js-apis-webview.md#registerjavascriptproxy)。
374
375**系统能力:** SystemCapability.Web.Webview.Core
376
377**参数:**
378
379| 参数名        | 类型                                     | 必填   | 说明                                     |
380| ---------- | ---------------------------------------- | ---- |---------------------------------------- |
381| javaScriptProxy     | [JavaScriptProxy](#javascriptproxy12)                                   | 是    |  参与注册的对象。只能声明方法,不能声明属性。                   |
382
383**示例:**
384
385  ```ts
386  // xxx.ets
387  import { webview } from '@kit.ArkWeb';
388
389  class TestObj {
390    constructor() {
391    }
392
393    test(data1: string, data2: string, data3: string): string {
394      console.log("data1:" + data1);
395      console.log("data2:" + data2);
396      console.log("data3:" + data3);
397      return "AceString";
398    }
399
400    asyncTest(data: string): void {
401      console.log("async data:" + data);
402    }
403
404    toString(): void {
405      console.log('toString' + "interface instead.");
406    }
407  }
408
409  @Entry
410  @Component
411  struct WebComponent {
412    controller: webview.WebviewController = new webview.WebviewController();
413    testObj = new TestObj();
414    build() {
415      Column() {
416        Button('deleteJavaScriptRegister')
417          .onClick(() => {
418            try {
419              this.controller.deleteJavaScriptRegister("objName");
420            } catch (error) {
421              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
422            }
423          })
424        Web({ src: 'www.example.com', controller: this.controller })
425          .javaScriptAccess(true)
426          .javaScriptProxy({
427            object: this.testObj,
428            name: "objName",
429            methodList: ["test", "toString"],
430            asyncMethodList: ["asyncTest"],
431            controller: this.controller,
432        })
433      }
434    }
435  }
436  ```
437
438### javaScriptAccess
439
440javaScriptAccess(javaScriptAccess: boolean)
441
442设置是否允许执行JavaScript脚本,默认允许执行。
443
444**系统能力:** SystemCapability.Web.Webview.Core
445
446**参数:**
447
448| 参数名              | 类型    | 必填   | 说明                |
449| ---------------- | ------- | ---- | ------------------- |
450| javaScriptAccess | boolean | 是    | 是否允许执行JavaScript脚本。默认值:true。 |
451
452**示例:**
453
454  ```ts
455  // xxx.ets
456  import { webview } from '@kit.ArkWeb';
457
458  @Entry
459  @Component
460  struct WebComponent {
461    controller: webview.WebviewController = new webview.WebviewController();
462    build() {
463      Column() {
464        Web({ src: 'www.example.com', controller: this.controller })
465          .javaScriptAccess(true)
466      }
467    }
468  }
469  ```
470
471### overScrollMode<sup>11+</sup>
472
473overScrollMode(mode: OverScrollMode)
474
475设置Web过滚动模式,默认关闭。当过滚动模式开启时,当用户在Web根页面上滑动到边缘时,Web会通过弹性动画弹回界面,根页面上的内部页面不会触发回弹。
476
477**系统能力:** SystemCapability.Web.Webview.Core
478
479**参数:**
480
481| 参数名  | 类型                                    | 必填   | 说明               |
482| ---- | --------------------------------------- | ---- | ------------------ |
483| mode | [OverScrollMode](#overscrollmode11枚举说明) | 是    | 设置Web的过滚动模式为关闭或开启。默认值:OverScrollMode.NEVER。 |
484
485**示例:**
486
487  ```ts
488  // xxx.ets
489  import { webview } from '@kit.ArkWeb';
490
491  @Entry
492  @Component
493  struct WebComponent {
494    controller: webview.WebviewController = new webview.WebviewController();
495    @State mode: OverScrollMode = OverScrollMode.ALWAYS;
496    build() {
497      Column() {
498        Web({ src: 'www.example.com', controller: this.controller })
499          .overScrollMode(this.mode)
500      }
501    }
502  }
503  ```
504
505### mixedMode
506
507mixedMode(mixedMode: MixedMode)
508
509设置是否允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容,默认不允许加载HTTP和HTTPS混合内容。
510
511**系统能力:** SystemCapability.Web.Webview.Core
512
513**参数:**
514
515| 参数名       | 类型                        | 必填   | 说明      |
516| --------- | --------------------------- | ---- | --------- |
517| mixedMode | [MixedMode](#mixedmode枚举说明) | 是    | 要设置的混合内容。默认值:MixedMode.None。 |
518
519**示例:**
520
521  ```ts
522  // xxx.ets
523  import { webview } from '@kit.ArkWeb';
524
525  @Entry
526  @Component
527  struct WebComponent {
528    controller: webview.WebviewController = new webview.WebviewController();
529    @State mode: MixedMode = MixedMode.All;
530    build() {
531      Column() {
532        Web({ src: 'www.example.com', controller: this.controller })
533          .mixedMode(this.mode)
534      }
535    }
536  }
537  ```
538
539### onlineImageAccess
540
541onlineImageAccess(onlineImageAccess: boolean)
542
543设置是否允许从网络加载图片资源(通过HTTP和HTTPS访问的资源),默认允许访问。
544
545**系统能力:** SystemCapability.Web.Webview.Core
546
547**参数:**
548
549| 参数名               | 类型    | 必填   | 说明             |
550| ----------------- | ------- | ---- | ---------------- |
551| onlineImageAccess | boolean | 是    | 设置是否允许从网络加载图片资源。默认值:true。 |
552
553**示例:**
554
555  ```ts
556  // xxx.ets
557  import { webview } from '@kit.ArkWeb';
558
559  @Entry
560  @Component
561  struct WebComponent {
562    controller: webview.WebviewController = new webview.WebviewController();
563
564    build() {
565      Column() {
566        Web({ src: 'www.example.com', controller: this.controller })
567          .onlineImageAccess(true)
568      }
569    }
570  }
571  ```
572
573### zoomAccess
574
575zoomAccess(zoomAccess: boolean)
576
577设置是否支持手势进行缩放,默认允许执行缩放。
578
579**系统能力:** SystemCapability.Web.Webview.Core
580
581**参数:**
582
583| 参数名        | 类型    | 必填   | 说明          |
584| ---------- | ------- | ---- | ------------- |
585| zoomAccess | boolean | 是    | 设置是否支持手势进行缩放。默认值:true。 |
586
587**示例:**
588
589  ```ts
590  // xxx.ets
591  import { webview } from '@kit.ArkWeb';
592
593  @Entry
594  @Component
595  struct WebComponent {
596    controller: webview.WebviewController = new webview.WebviewController();
597
598    build() {
599      Column() {
600        Web({ src: 'www.example.com', controller: this.controller })
601          .zoomAccess(true)
602      }
603    }
604  }
605  ```
606
607### overviewModeAccess
608
609overviewModeAccess(overviewModeAccess: boolean)
610
611设置是否使用概览模式加载网页,默认使用该方式。当前仅支持移动设备。
612
613**系统能力:** SystemCapability.Web.Webview.Core
614
615**参数:**
616
617| 参数名                | 类型    | 必填   | 说明            |
618| ------------------ | ------- | ---- | --------------- |
619| overviewModeAccess | boolean | 是    | 设置是否使用概览模式加载网页。默认值:true。 |
620
621**示例:**
622
623  ```ts
624  // xxx.ets
625  import { webview } from '@kit.ArkWeb';
626
627  @Entry
628  @Component
629  struct WebComponent {
630    controller: webview.WebviewController = new webview.WebviewController();
631
632    build() {
633      Column() {
634        Web({ src: 'www.example.com', controller: this.controller })
635          .overviewModeAccess(true)
636      }
637    }
638  }
639  ```
640
641### databaseAccess
642
643databaseAccess(databaseAccess: boolean)
644
645设置是否开启数据库存储API权限,默认不开启。
646
647**系统能力:** SystemCapability.Web.Webview.Core
648
649**参数:**
650
651| 参数名            | 类型    | 必填   | 说明              |
652| -------------- | ------- | ---- | ----------------- |
653| databaseAccess | boolean | 是    | 设置是否开启数据库存储API权限。默认值:false。 |
654
655**示例:**
656
657  ```ts
658  // xxx.ets
659  import { webview } from '@kit.ArkWeb';
660
661  @Entry
662  @Component
663  struct WebComponent {
664    controller: webview.WebviewController = new webview.WebviewController();
665
666    build() {
667      Column() {
668        Web({ src: 'www.example.com', controller: this.controller })
669          .databaseAccess(true)
670      }
671    }
672  }
673  ```
674
675### geolocationAccess
676
677geolocationAccess(geolocationAccess: boolean)
678
679设置是否开启获取地理位置权限,默认开启。具体使用方式参考[管理位置权限](../../web/web-geolocation-permission.md)。
680
681**系统能力:** SystemCapability.Web.Webview.Core
682
683**参数:**
684
685| 参数名               | 类型    | 必填   | 说明            |
686| ----------------- | ------- | ---- | --------------- |
687| geolocationAccess | boolean | 是    | 设置是否开启获取地理位置权限。默认值:true。 |
688
689**示例:**
690
691  ```ts
692  // xxx.ets
693  import { webview } from '@kit.ArkWeb';
694
695  @Entry
696  @Component
697  struct WebComponent {
698    controller: webview.WebviewController = new webview.WebviewController();
699
700    build() {
701      Column() {
702        Web({ src: 'www.example.com', controller: this.controller })
703          .geolocationAccess(true)
704      }
705    }
706  }
707  ```
708
709### mediaPlayGestureAccess<sup>9+</sup>
710
711mediaPlayGestureAccess(access: boolean)
712
713设置有声视频播放是否需要用户手动点击,静音视频播放不受该接口管控,默认需要。
714
715**系统能力:** SystemCapability.Web.Webview.Core
716
717**参数:**
718
719| 参数名    | 类型    | 必填   | 说明                |
720| ------ | ------- | ---- | ------------------- |
721| access | boolean | 是    | 设置有声视频播放是否需要用户手动点击。默认值:true。 |
722
723**示例:**
724
725  ```ts
726  // xxx.ets
727  import { webview } from '@kit.ArkWeb';
728
729  @Entry
730  @Component
731  struct WebComponent {
732    controller: webview.WebviewController = new webview.WebviewController();
733    @State access: boolean = true;
734
735    build() {
736      Column() {
737        Web({ src: 'www.example.com', controller: this.controller })
738          .mediaPlayGestureAccess(this.access)
739      }
740    }
741  }
742  ```
743
744### multiWindowAccess<sup>9+</sup>
745
746multiWindowAccess(multiWindow: boolean)
747
748设置是否开启多窗口权限,默认不开启。
749使能多窗口权限时,需要实现onWindowNew事件,示例代码参考[onWindowNew事件](#onwindownew9)。
750
751**系统能力:** SystemCapability.Web.Webview.Core
752
753**参数:**
754
755| 参数名         | 类型    | 必填   | 说明         |
756| ----------- | ------- | ---- | ------------ |
757| multiWindow | boolean | 是    | 设置是否开启多窗口权限。默认值:false。 |
758
759**示例:**
760
761  ```ts
762  // xxx.ets
763  import { webview } from '@kit.ArkWeb';
764
765  @Entry
766  @Component
767  struct WebComponent {
768    controller: webview.WebviewController = new webview.WebviewController();
769
770    build() {
771      Column() {
772        Web({ src: 'www.example.com', controller: this.controller })
773        .multiWindowAccess(false)
774      }
775    }
776  }
777  ```
778
779### horizontalScrollBarAccess<sup>9+</sup>
780
781horizontalScrollBarAccess(horizontalScrollBar: boolean)
782
783设置是否显示横向滚动条,包括系统默认滚动条和用户自定义滚动条。默认显示。
784
785> **说明:**
786>
787> - 通过@State变量控制横向滚动条的隐藏/显示后,需要调用controller.refresh()生效。
788> - 通过@State变量频繁动态改变时,建议切换开关变量和Web组件一一对应。
789
790**系统能力:** SystemCapability.Web.Webview.Core
791
792**参数:**
793
794| 参数名                 | 类型    | 必填   | 说明         |
795| ------------------- | ------- | ---- | ------------ |
796| horizontalScrollBar | boolean | 是    | 设置是否显示横向滚动条。默认值:true。 |
797
798**示例:**
799
800  ```ts
801  // xxx.ets
802  import { webview } from '@kit.ArkWeb';
803  import { BusinessError } from '@kit.BasicServicesKit';
804
805  @Entry
806  @Component
807  struct WebComponent {
808    controller: webview.WebviewController = new webview.WebviewController();
809    @State isShow: boolean = true;
810    @State btnMsg: string ="隐藏滚动条";
811
812    build() {
813      Column() {
814        // 通过@State变量改变横向滚动条的隐藏/显示后,需调用this.controller.refresh()后生效
815        Button('refresh')
816          .onClick(() => {
817            if(this.isShow){
818              this.isShow = false;
819              this.btnMsg="显示滚动条";
820            }else{
821              this.isShow = true;
822              this.btnMsg="隐藏滚动条";
823            }
824            try {
825              this.controller.refresh();
826            } catch (error) {
827              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
828            }
829          }).height("10%").width("40%")
830        Web({ src: $rawfile('index.html'), controller: this.controller }).height("90%")
831          .horizontalScrollBarAccess(this.isShow)
832      }
833    }
834  }
835  ```
836
837  加载的html文件。
838  ```html
839  <!--index.html-->
840  <!DOCTYPE html>
841  <html>
842  <head>
843      <meta name="viewport" id="viewport" content="width=device-width,initial-scale=1.0">
844      <title>Demo</title>
845      <style>
846          body {
847            width:3000px;
848            height:6000px;
849            padding-right:170px;
850            padding-left:170px;
851            border:5px solid blueviolet
852          }
853      </style>
854  </head>
855  <body>
856  Scroll Test
857  </body>
858  </html>
859  ```
860
861### verticalScrollBarAccess<sup>9+</sup>
862
863verticalScrollBarAccess(verticalScrollBar: boolean)
864
865设置是否显示纵向滚动条,包括系统默认滚动条和用户自定义滚动条。默认显示。
866
867> **说明:**
868>
869> - 通过@State变量控制纵向滚动条的隐藏/显示后,需要调用controller.refresh()生效。
870> - 通过@State变量频繁动态改变时,建议切换开关变量和Web组件一一对应。
871
872**系统能力:** SystemCapability.Web.Webview.Core
873
874**参数:**
875
876| 参数名               | 类型    | 必填   | 说明         |
877| ----------------- | ------- | ---- | ------------ |
878| verticalScrollBar | boolean | 是    | 设置是否显示纵向滚动条。默认值:true。 |
879
880**示例:**
881
882  ```ts
883  // xxx.ets
884  import { webview } from '@kit.ArkWeb';
885  import { BusinessError } from '@kit.BasicServicesKit';
886
887  @Entry
888  @Component
889  struct WebComponent {
890    controller: webview.WebviewController = new webview.WebviewController();
891    @State isShow: boolean = true;
892    @State btnMsg: string ="隐藏滚动条";
893
894    build() {
895      Column() {
896        // 通过@State变量改变横向滚动条的隐藏/显示后,需调用this.controller.refresh()后生效
897        Button(this.btnMsg)
898          .onClick(() => {
899            if(this.isShow){
900              this.isShow = false;
901              this.btnMsg="显示滚动条";
902            }else{
903              this.isShow = true;
904              this.btnMsg="隐藏滚动条";
905            }
906            try {
907              this.controller.refresh();
908            } catch (error) {
909              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
910            }
911          }).height("10%").width("40%")
912        Web({ src: $rawfile('index.html'), controller: this.controller }).height("90%")
913          .verticalScrollBarAccess(this.isShow)
914      }
915    }
916  }
917  ```
918
919  加载的html文件。
920  ```html
921  <!--index.html-->
922  <!DOCTYPE html>
923  <html>
924  <head>
925      <meta name="viewport" id="viewport" content="width=device-width,initial-scale=1.0">
926      <title>Demo</title>
927      <style>
928          body {
929            width:3000px;
930            height:6000px;
931            padding-right:170px;
932            padding-left:170px;
933            border:5px solid blueviolet
934          }
935      </style>
936  </head>
937  <body>
938  Scroll Test
939  </body>
940  </html>
941  ```
942
943### password<sup>(deprecated)</sup>
944
945password(password: boolean)
946
947设置是否应保存密码。该接口为空接口。
948
949> **说明:**
950>
951> 从API version 10开始废弃,并且不再提供新的接口作为替代。
952
953**系统能力:** SystemCapability.Web.Webview.Core
954
955### cacheMode
956
957cacheMode(cacheMode: CacheMode)
958
959设置缓存模式。
960
961**系统能力:** SystemCapability.Web.Webview.Core
962
963**参数:**
964
965| 参数名       | 类型                        | 必填   | 说明      |
966| --------- | --------------------------- | ---- | --------- |
967| cacheMode | [CacheMode](#cachemode枚举说明) | 是    | 要设置的缓存模式。默认值:CacheMode.Default。 |
968
969**示例:**
970
971  ```ts
972  // xxx.ets
973  import { webview } from '@kit.ArkWeb';
974
975  @Entry
976  @Component
977  struct WebComponent {
978    controller: webview.WebviewController = new webview.WebviewController();
979    @State mode: CacheMode = CacheMode.None;
980
981    build() {
982      Column() {
983        Web({ src: 'www.example.com', controller: this.controller })
984          .cacheMode(this.mode)
985      }
986    }
987  }
988  ```
989
990### copyOptions<sup>11+</sup>
991
992copyOptions(value: CopyOptions)
993
994设置剪贴板复制范围选项。
995
996**系统能力:** SystemCapability.Web.Webview.Core
997
998**参数:**
999
1000| 参数名       | 类型                        | 必填   | 说明      |
1001| --------- | --------------------------- | ---- | --------- |
1002| value | [CopyOptions](../apis-arkui/arkui-ts/ts-appendix-enums.md#copyoptions9) | 是    | 要设置的剪贴板复制范围选项。默认值:CopyOptions.LocalDevice。 |
1003
1004**示例:**
1005
1006  ```ts
1007import { webview } from '@kit.ArkWeb';
1008
1009@Entry
1010@Component
1011struct WebComponent {
1012  controller: webview.WebviewController = new webview.WebviewController();
1013
1014  build() {
1015    Column() {
1016      Web({ src: 'www.example.com', controller: this.controller })
1017        .copyOptions(CopyOptions.None)
1018    }
1019  }
1020}
1021  ```
1022
1023### textZoomAtio<sup>(deprecated)</sup>
1024
1025textZoomAtio(textZoomAtio: number)
1026
1027设置页面的文本缩放百分比,默认为100。
1028
1029**系统能力:** SystemCapability.Web.Webview.Core
1030
1031从API version 9开始不再维护,建议使用[textZoomRatio<sup>9+</sup>](#textzoomratio9)代替。
1032
1033**参数:**
1034
1035| 参数名          | 类型   | 必填  | 说明                             |
1036| ------------ | ------ | ---- | -------------------------------- |
1037| textZoomAtio | number | 是   | 要设置的页面的文本缩放百分比。取值为整数,范围为(0, +∞)。默认值:100。 |
1038
1039**示例:**
1040
1041  ```ts
1042  // xxx.ets
1043  @Entry
1044  @Component
1045  struct WebComponent {
1046    controller: WebController = new WebController()
1047    @State ratio: number = 150
1048    build() {
1049      Column() {
1050        Web({ src: 'www.example.com', controller: this.controller })
1051          .textZoomAtio(this.ratio)
1052      }
1053    }
1054  }
1055  ```
1056
1057### textZoomRatio<sup>9+</sup>
1058
1059textZoomRatio(textZoomRatio: number)
1060
1061设置页面的文本缩放百分比,默认为100。
1062
1063**系统能力:** SystemCapability.Web.Webview.Core
1064
1065**参数:**
1066
1067| 参数名           | 类型   | 必填   | 说明                             |
1068| ------------- | ------ | ---- | -------------------------------- |
1069| textZoomRatio | number | 是    | 要设置的页面的文本缩放百分比。取值为整数,范围为(0, +∞)。默认值:100。 |
1070
1071**示例:**
1072
1073  ```ts
1074  // xxx.ets
1075  import { webview } from '@kit.ArkWeb';
1076
1077  @Entry
1078  @Component
1079  struct WebComponent {
1080    controller: webview.WebviewController = new webview.WebviewController();
1081    @State ratio: number = 150;
1082
1083    build() {
1084      Column() {
1085        Web({ src: 'www.example.com', controller: this.controller })
1086          .textZoomRatio(this.ratio)
1087      }
1088    }
1089  }
1090  ```
1091
1092### initialScale<sup>9+</sup>
1093
1094initialScale(percent: number)
1095
1096设置整体页面的缩放百分比,默认为100。
1097
1098**系统能力:** SystemCapability.Web.Webview.Core
1099
1100**参数:**
1101
1102| 参数名     | 类型   | 必填   | 说明                          |
1103| ------- | ------ | ---- | ----------------------------- |
1104| percent | number | 是    | 要设置的整体页面的缩放百分比。默认值:100。 |
1105
1106**示例:**
1107
1108  ```ts
1109  // xxx.ets
1110  import { webview } from '@kit.ArkWeb';
1111
1112  @Entry
1113  @Component
1114  struct WebComponent {
1115    controller: webview.WebviewController = new webview.WebviewController();
1116    @State percent: number = 100;
1117
1118    build() {
1119      Column() {
1120        Web({ src: 'www.example.com', controller: this.controller })
1121          .initialScale(this.percent)
1122      }
1123    }
1124  }
1125  ```
1126
1127### userAgent<sup>(deprecated)</sup>
1128
1129userAgent(userAgent: string)
1130
1131设置用户代理。
1132
1133> **说明:**
1134>
1135> 从API version 8开始支持,从API version 10开始废弃。建议使用[setCustomUserAgent](js-apis-webview.md#setcustomuseragent10)<sup>10+</sup>替代。
1136
1137**系统能力:** SystemCapability.Web.Webview.Core
1138
1139**参数:**
1140
1141| 参数名       | 类型   | 必填   | 说明      |
1142| --------- | ------ | ---- | --------- |
1143| userAgent | string | 是    | 要设置的用户代理。 |
1144
1145**示例:**
1146
1147  ```ts
1148  // xxx.ets
1149  import { webview } from '@kit.ArkWeb';
1150
1151  @Entry
1152  @Component
1153  struct WebComponent {
1154    controller: webview.WebviewController = new webview.WebviewController();
1155    @State userAgent:string = 'Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile DemoApp';
1156
1157    build() {
1158      Column() {
1159        Web({ src: 'www.example.com', controller: this.controller })
1160          .userAgent(this.userAgent)
1161      }
1162    }
1163  }
1164  ```
1165
1166### blockNetwork<sup>9+</sup>
1167
1168blockNetwork(block: boolean)
1169
1170设置Web组件是否阻止从网络加载资源。
1171
1172**系统能力:** SystemCapability.Web.Webview.Core
1173
1174**参数:**
1175
1176| 参数名   | 类型    | 必填   | 说明                |
1177| ----- | ------- | ---- | ------------------- |
1178| block | boolean | 是    | 设置Web组件是否阻止从网络加载资源。默认值:false。 |
1179
1180**示例:**
1181
1182  ```ts
1183  // xxx.ets
1184  import { webview } from '@kit.ArkWeb';
1185
1186  @Entry
1187  @Component
1188  struct WebComponent {
1189    controller: webview.WebviewController = new webview.WebviewController();
1190    @State block: boolean = true;
1191
1192    build() {
1193      Column() {
1194        Web({ src: 'www.example.com', controller: this.controller })
1195          .blockNetwork(this.block)
1196      }
1197    }
1198  }
1199  ```
1200
1201### defaultFixedFontSize<sup>9+</sup>
1202
1203defaultFixedFontSize(size: number)
1204
1205设置网页的默认等宽字体大小。
1206
1207**系统能力:** SystemCapability.Web.Webview.Core
1208
1209**参数:**
1210
1211| 参数名  | 类型   | 必填   | 说明                                     |
1212| ---- | ------ | ---- | ---------------------------------------- |
1213| size | number | 是    | 设置网页的默认等宽字体大小,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。默认值:13。 |
1214
1215**示例:**
1216
1217  ```ts
1218  // xxx.ets
1219  import { webview } from '@kit.ArkWeb';
1220
1221  @Entry
1222  @Component
1223  struct WebComponent {
1224    controller: webview.WebviewController = new webview.WebviewController();
1225    @State fontSize: number = 16;
1226
1227    build() {
1228      Column() {
1229        Web({ src: 'www.example.com', controller: this.controller })
1230          .defaultFixedFontSize(this.fontSize)
1231      }
1232    }
1233  }
1234  ```
1235
1236### defaultFontSize<sup>9+</sup>
1237
1238defaultFontSize(size: number)
1239
1240设置网页的默认字体大小。
1241
1242**系统能力:** SystemCapability.Web.Webview.Core
1243
1244**参数:**
1245
1246| 参数名  | 类型   | 必填   | 说明                                     |
1247| ---- | ------ | ---- | ---------------------------------------- |
1248| size | number | 是    | 设置网页的默认字体大小,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。默认值:16。 |
1249
1250**示例:**
1251
1252  ```ts
1253  // xxx.ets
1254  import { webview } from '@kit.ArkWeb';
1255
1256  @Entry
1257  @Component
1258  struct WebComponent {
1259    controller: webview.WebviewController = new webview.WebviewController();
1260    @State fontSize: number = 13;
1261
1262    build() {
1263      Column() {
1264        Web({ src: 'www.example.com', controller: this.controller })
1265          .defaultFontSize(this.fontSize)
1266      }
1267    }
1268  }
1269  ```
1270
1271### minFontSize<sup>9+</sup>
1272
1273minFontSize(size: number)
1274
1275设置网页字体大小最小值。
1276
1277**系统能力:** SystemCapability.Web.Webview.Core
1278
1279**参数:**
1280
1281| 参数名  | 类型   | 必填   | 说明                                     |
1282| ---- | ------ | ---- | ---------------------------------------- |
1283| size | number | 是    | 设置网页字体大小最小值,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。默认值:8。 |
1284
1285**示例:**
1286
1287  ```ts
1288  // xxx.ets
1289  import { webview } from '@kit.ArkWeb';
1290
1291  @Entry
1292  @Component
1293  struct WebComponent {
1294    controller: webview.WebviewController = new webview.WebviewController();
1295    @State fontSize: number = 13;
1296
1297    build() {
1298      Column() {
1299        Web({ src: 'www.example.com', controller: this.controller })
1300          .minFontSize(this.fontSize)
1301      }
1302    }
1303  }
1304  ```
1305
1306### minLogicalFontSize<sup>9+</sup>
1307
1308minLogicalFontSize(size: number)
1309
1310设置网页逻辑字体大小最小值。
1311
1312**系统能力:** SystemCapability.Web.Webview.Core
1313
1314**参数:**
1315
1316| 参数名  | 类型   | 必填   | 说明                                     |
1317| ---- | ------ | ---- | ---------------------------------------- |
1318| size | number | 是    | 设置网页逻辑字体大小最小值,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。默认值:8。 |
1319
1320**示例:**
1321
1322  ```ts
1323  // xxx.ets
1324  import { webview } from '@kit.ArkWeb';
1325
1326  @Entry
1327  @Component
1328  struct WebComponent {
1329    controller: webview.WebviewController = new webview.WebviewController();
1330    @State fontSize: number = 13;
1331
1332    build() {
1333      Column() {
1334        Web({ src: 'www.example.com', controller: this.controller })
1335          .minLogicalFontSize(this.fontSize)
1336      }
1337    }
1338  }
1339  ```
1340
1341### webFixedFont<sup>9+</sup>
1342
1343webFixedFont(family: string)
1344
1345设置网页的fixed font字体库。
1346
1347**系统能力:** SystemCapability.Web.Webview.Core
1348
1349**参数:**
1350
1351| 参数名    | 类型   | 必填   | 说明                |
1352| ------ | ------ | ---- | ------------------- |
1353| family | string | 是    | 设置网页的fixed font字体库。默认值:monospace。 |
1354
1355**示例:**
1356
1357  ```ts
1358  // xxx.ets
1359  import { webview } from '@kit.ArkWeb';
1360
1361  @Entry
1362  @Component
1363  struct WebComponent {
1364    controller: webview.WebviewController = new webview.WebviewController();
1365    @State family: string = "monospace";
1366
1367    build() {
1368      Column() {
1369        Web({ src: 'www.example.com', controller: this.controller })
1370          .webFixedFont(this.family)
1371      }
1372    }
1373  }
1374  ```
1375
1376### webSansSerifFont<sup>9+</sup>
1377
1378webSansSerifFont(family: string)
1379
1380设置网页的sans serif font字体库。
1381
1382**系统能力:** SystemCapability.Web.Webview.Core
1383
1384**参数:**
1385
1386| 参数名    | 类型   | 必填   | 说明                     |
1387| ------ | ------ | ---- | ------------------------ |
1388| family | string | 是    | 设置网页的sans serif font字体库。默认值:sans-serif。 |
1389
1390**示例:**
1391
1392  ```ts
1393  // xxx.ets
1394  import { webview } from '@kit.ArkWeb';
1395
1396  @Entry
1397  @Component
1398  struct WebComponent {
1399    controller: webview.WebviewController = new webview.WebviewController();
1400    @State family: string = "sans-serif";
1401
1402    build() {
1403      Column() {
1404        Web({ src: 'www.example.com', controller: this.controller })
1405          .webSansSerifFont(this.family)
1406      }
1407    }
1408  }
1409  ```
1410
1411### webSerifFont<sup>9+</sup>
1412
1413webSerifFont(family: string)
1414
1415设置网页的serif font字体库。
1416
1417**系统能力:** SystemCapability.Web.Webview.Core
1418
1419**参数:**
1420
1421| 参数名    | 类型   | 必填   | 说明                |
1422| ------ | ------ | ---- | ------------------- |
1423| family | string | 是    | 设置网页的serif font字体库。默认值:serif。 |
1424
1425**示例:**
1426
1427  ```ts
1428  // xxx.ets
1429  import { webview } from '@kit.ArkWeb';
1430
1431  @Entry
1432  @Component
1433  struct WebComponent {
1434    controller: webview.WebviewController = new webview.WebviewController();
1435    @State family: string = "serif";
1436
1437    build() {
1438      Column() {
1439        Web({ src: 'www.example.com', controller: this.controller })
1440          .webSerifFont(this.family)
1441      }
1442    }
1443  }
1444  ```
1445
1446### webStandardFont<sup>9+</sup>
1447
1448webStandardFont(family: string)
1449
1450设置网页的standard font字体库。
1451
1452**系统能力:** SystemCapability.Web.Webview.Core
1453
1454**参数:**
1455
1456| 参数名    | 类型   | 必填   | 说明                   |
1457| ------ | ------ | ---- | ---------------------- |
1458| family | string | 是    | 设置网页的standard font字体库。默认值:sans serif。 |
1459
1460**示例:**
1461
1462  ```ts
1463  // xxx.ets
1464  import { webview } from '@kit.ArkWeb';
1465
1466  @Entry
1467  @Component
1468  struct WebComponent {
1469    controller: webview.WebviewController = new webview.WebviewController();
1470    @State family: string = "sans-serif";
1471
1472    build() {
1473      Column() {
1474        Web({ src: 'www.example.com', controller: this.controller })
1475          .webStandardFont(this.family)
1476      }
1477    }
1478  }
1479  ```
1480
1481### webFantasyFont<sup>9+</sup>
1482
1483webFantasyFont(family: string)
1484
1485设置网页的fantasy font字体库。
1486
1487**系统能力:** SystemCapability.Web.Webview.Core
1488
1489**参数:**
1490
1491| 参数名    | 类型   | 必填   | 说明                  |
1492| ------ | ------ | ---- | --------------------- |
1493| family | string | 是    | 设置网页的fantasy font字体库。默认值:fantasy。 |
1494
1495**示例:**
1496
1497  ```ts
1498  // xxx.ets
1499  import { webview } from '@kit.ArkWeb';
1500  @Entry
1501  @Component
1502  struct WebComponent {
1503    controller: webview.WebviewController = new webview.WebviewController();
1504    @State family: string = "fantasy";
1505
1506    build() {
1507      Column() {
1508        Web({ src: 'www.example.com', controller: this.controller })
1509          .webFantasyFont(this.family)
1510      }
1511    }
1512  }
1513  ```
1514
1515### webCursiveFont<sup>9+</sup>
1516
1517webCursiveFont(family: string)
1518
1519设置网页的cursive font字体库。
1520
1521**系统能力:** SystemCapability.Web.Webview.Core
1522
1523**参数:**
1524
1525| 参数名    | 类型   | 必填   | 说明                  |
1526| ------ | ------ | ---- | --------------------- |
1527| family | string | 是    | 设置网页的cursive font字体库。默认值:cursive。 |
1528
1529**示例:**
1530
1531  ```ts
1532  // xxx.ets
1533  import { webview } from '@kit.ArkWeb';
1534
1535  @Entry
1536  @Component
1537  struct WebComponent {
1538    controller: webview.WebviewController = new webview.WebviewController();
1539    @State family: string = "cursive";
1540
1541    build() {
1542      Column() {
1543        Web({ src: 'www.example.com', controller: this.controller })
1544          .webCursiveFont(this.family)
1545      }
1546    }
1547  }
1548  ```
1549
1550### darkMode<sup>9+</sup>
1551
1552darkMode(mode: WebDarkMode)
1553
1554设置Web深色模式,默认关闭。当深色模式开启时,Web将启用媒体查询prefers-color-scheme中网页所定义的深色样式,若网页未定义深色样式,则保持原状。如需开启强制深色模式,建议配合[forceDarkAccess](#forcedarkaccess9)使用。
1555
1556**系统能力:** SystemCapability.Web.Webview.Core
1557
1558**参数:**
1559
1560| 参数名  | 类型                             | 必填   | 说明                   |
1561| ---- | -------------------------------- | ---- | ---------------------- |
1562| mode | [WebDarkMode](#webdarkmode9枚举说明) | 是    | 设置Web的深色模式为关闭、开启或跟随系统。默认值:WebDarkMode.Off。 |
1563
1564**示例:**
1565
1566  ```ts
1567  // xxx.ets
1568  import { webview } from '@kit.ArkWeb';
1569
1570  @Entry
1571  @Component
1572  struct WebComponent {
1573    controller: webview.WebviewController = new webview.WebviewController();
1574    @State mode: WebDarkMode = WebDarkMode.On;
1575
1576    build() {
1577      Column() {
1578        Web({ src: 'www.example.com', controller: this.controller })
1579          .darkMode(this.mode)
1580      }
1581    }
1582  }
1583  ```
1584
1585### forceDarkAccess<sup>9+</sup>
1586
1587forceDarkAccess(access: boolean)
1588
1589设置网页是否开启强制深色模式。默认关闭。该属性仅在[darkMode](#darkmode9)开启深色模式时生效。
1590
1591**系统能力:** SystemCapability.Web.Webview.Core
1592
1593**参数:**
1594
1595| 参数名    | 类型    | 必填   | 说明            |
1596| ------ | ------- | ---- | --------------- |
1597| access | boolean | 是    | 设置网页是否开启强制深色模式。默认值:false。 |
1598
1599**示例:**
1600
1601  ```ts
1602  // xxx.ets
1603  import { webview } from '@kit.ArkWeb';
1604
1605  @Entry
1606  @Component
1607  struct WebComponent {
1608    controller: webview.WebviewController = new webview.WebviewController();
1609    @State mode: WebDarkMode = WebDarkMode.On;
1610    @State access: boolean = true;
1611
1612    build() {
1613      Column() {
1614        Web({ src: 'www.example.com', controller: this.controller })
1615          .darkMode(this.mode)
1616          .forceDarkAccess(this.access)
1617      }
1618    }
1619  }
1620  ```
1621
1622### tableData<sup>(deprecated)</sup>
1623
1624tableData(tableData: boolean)
1625
1626设置是否应保存表单数据。该接口为空接口。
1627
1628> **说明:**
1629>
1630> 从API version 10开始废弃,并且不再提供新的接口作为替代。
1631
1632**系统能力:** SystemCapability.Web.Webview.Core
1633
1634### wideViewModeAccess<sup>(deprecated)</sup>
1635
1636wideViewModeAccess(wideViewModeAccess: boolean)
1637
1638设置web是否支持html中meta标签的viewport属性。该接口为空接口。
1639
1640> **说明:**
1641>
1642> 从API version 10开始废弃,并且不再提供新的接口作为替代。
1643
1644**系统能力:** SystemCapability.Web.Webview.Core
1645
1646### pinchSmooth<sup>9+</sup>
1647
1648pinchSmooth(isEnabled: boolean)
1649
1650设置网页是否开启捏合流畅模式,默认不开启。
1651
1652**系统能力:** SystemCapability.Web.Webview.Core
1653
1654**参数:**
1655
1656| 参数名       | 类型    | 必填   | 说明          |
1657| --------- | ------- | ---- | ------------- |
1658| isEnabled | boolean | 是    | 网页是否开启捏合流畅模式。默认值:false。 |
1659
1660**示例:**
1661
1662  ```ts
1663  // xxx.ets
1664  import { webview } from '@kit.ArkWeb';
1665
1666  @Entry
1667  @Component
1668  struct WebComponent {
1669    controller: webview.WebviewController = new webview.WebviewController();
1670
1671    build() {
1672      Column() {
1673        Web({ src: 'www.example.com', controller: this.controller })
1674          .pinchSmooth(true)
1675      }
1676    }
1677  }
1678  ```
1679
1680### allowWindowOpenMethod<sup>10+</sup>
1681
1682allowWindowOpenMethod(flag: boolean)
1683
1684设置网页是否可以通过JavaScript自动打开新窗口。
1685
1686该属性为true时,可通过JavaScript自动打开新窗口。该属性为false时,用户行为仍可通过JavaScript自动打开新窗口,但非用户行为不能通过JavaScript自动打开新窗口。此处的用户行为是指,在用户对Web组件进行点击等操作后,同时在5秒内请求打开新窗口(window.open)的行为。
1687
1688该属性仅在[javaScriptAccess](#javascriptaccess)开启时生效。
1689
1690该属性在[multiWindowAccess](#multiwindowaccess9)开启时打开新窗口,关闭时打开本地窗口。
1691
1692该属性的默认值与系统属性persist.web.allowWindowOpenMethod.enabled 保持一致,如果未设置系统属性则默认值为false。
1693
1694检查系统配置项persist.web.allowWindowOpenMethod.enabled 是否开启。
1695
1696通过`hdc shell param get persist.web.allowWindowOpenMethod.enabled` 查看,若配置项为0或不存在,
1697可通过命令`hdc shell param set persist.web.allowWindowOpenMethod.enabled 1` 开启配置。
1698
1699**系统能力:** SystemCapability.Web.Webview.Core
1700
1701**参数:**
1702
1703| 参数名  | 类型    | 必填    | 说明                      |
1704| ---- | ------- | ---- | ------------------------- |
1705| flag | boolean | 是    | 网页是否可以通过JavaScript自动打开窗口。默认值与系统参数关联,当系统参数persist.web.allowWindowOpenMethod.enabled为true时,默认值为true, 否则为false。 |
1706
1707**示例:**
1708
1709  ```ts
1710  // xxx.ets
1711  import { webview } from '@kit.ArkWeb';
1712
1713  // 在同一page页有两个Web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
1714  @CustomDialog
1715  struct NewWebViewComp {
1716    controller?: CustomDialogController;
1717    webviewController1: webview.WebviewController = new webview.WebviewController();
1718
1719    build() {
1720      Column() {
1721        Web({ src: "", controller: this.webviewController1 })
1722          .javaScriptAccess(true)
1723          .multiWindowAccess(false)
1724          .onWindowExit(() => {
1725            console.info("NewWebViewComp onWindowExit");
1726            if (this.controller) {
1727              this.controller.close();
1728            }
1729          })
1730      }
1731    }
1732  }
1733
1734  @Entry
1735  @Component
1736  struct WebComponent {
1737    controller: webview.WebviewController = new webview.WebviewController();
1738    dialogController: CustomDialogController | null = null;
1739
1740    build() {
1741      Column() {
1742        Web({ src: 'www.example.com', controller: this.controller })
1743          .javaScriptAccess(true)
1744          // 需要使能multiWindowAccess
1745          .multiWindowAccess(true)
1746          .allowWindowOpenMethod(true)
1747          .onWindowNew((event) => {
1748            if (this.dialogController) {
1749              this.dialogController.close();
1750            }
1751            let popController: webview.WebviewController = new webview.WebviewController();
1752            this.dialogController = new CustomDialogController({
1753              builder: NewWebViewComp({ webviewController1: popController })
1754            })
1755            this.dialogController.open();
1756            // 将新窗口对应WebviewController返回给Web内核。
1757            // 若不调用event.handler.setWebController接口,会造成render进程阻塞。
1758            // 如果没有创建新窗口,调用event.handler.setWebController接口时设置成null,通知Web没有创建新窗口。
1759            event.handler.setWebController(popController);
1760          })
1761      }
1762    }
1763  }
1764  ```
1765
1766### mediaOptions<sup>10+</sup>
1767
1768mediaOptions(options: WebMediaOptions)
1769
1770设置Web媒体播放的策略,其中包括:Web中的音频在重新获焦后能够自动续播的有效期、应用内多个Web实例的音频是否独占。
1771
1772> **说明:**
1773>
1774> - 同一Web实例中的多个音频均视为同一音频。
1775> - 该媒体播放策略将同时管控有声视频。
1776> - 属性参数更新后需重新播放音频方可生效。
1777> - 建议为所有Web组件设置相同的audioExclusive值。
1778> - 音视频互相打断在应用内和应用间生效,续播只在应用间生效。
1779
1780**系统能力:** SystemCapability.Web.Webview.Core
1781
1782**参数:**
1783
1784| 参数名     | 类型                                  | 必填   | 说明                                     |
1785| ------- | ------------------------------------- | ---- | ---------------------------------------- |
1786| options | [WebMediaOptions](#webmediaoptions10) | 是    | 设置Web的媒体策略。其中,resumeInterval的默认值为0表示不自动续播。默认值:{resumeInterval: 0, audioExclusive: true}。 |
1787
1788**示例:**
1789
1790  ```ts
1791  // xxx.ets
1792  import { webview } from '@kit.ArkWeb';
1793
1794  @Entry
1795  @Component
1796  struct WebComponent {
1797    controller: webview.WebviewController = new webview.WebviewController();
1798    @State options: WebMediaOptions = {resumeInterval: 10, audioExclusive: true};
1799
1800    build() {
1801      Column() {
1802        Web({ src: 'www.example.com', controller: this.controller })
1803          .mediaOptions(this.options)
1804      }
1805    }
1806  }
1807  ```
1808
1809### javaScriptOnDocumentStart<sup>11+</sup>
1810
1811javaScriptOnDocumentStart(scripts: Array\<ScriptItem>)
1812
1813将JavaScript脚本注入到Web组件中,当指定页面或者文档开始加载时,该脚本将在其来源与scriptRules匹配的任何页面中执行。
1814
1815> **说明:**
1816>
1817> - 该脚本将在页面的任何JavaScript代码之前运行,并且DOM树此时可能尚未加载、渲染完毕。
1818
1819**系统能力:** SystemCapability.Web.Webview.Core
1820
1821**参数:**
1822
1823| 参数名     | 类型                                | 必填   | 说明               |
1824| ------- | ----------------------------------- | ---- | ------------------ |
1825| scripts | Array\<[ScriptItem](#scriptitem11)> | 是    | 需要注入的ScriptItem数组 |
1826
1827**ets示例:**
1828
1829  ```ts
1830  // xxx.ets
1831  import { webview } from '@kit.ArkWeb';
1832
1833  @Entry
1834  @Component
1835  struct Index {
1836      controller: webview.WebviewController = new webview.WebviewController();
1837      private localStorage: string =
1838          "if (typeof(Storage) !== 'undefined') {" +
1839          "   localStorage.setItem('color', 'Red');" +
1840          "}";
1841      @State scripts: Array<ScriptItem> = [
1842          { script: this.localStorage, scriptRules: ["*"] }
1843      ];
1844
1845      build() {
1846          Column({ space: 20 }) {
1847              Web({ src: $rawfile('index.html'), controller: this.controller })
1848                  .javaScriptAccess(true)
1849                  .domStorageAccess(true)
1850                  .backgroundColor(Color.Grey)
1851                  .javaScriptOnDocumentStart(this.scripts)
1852                  .width('100%')
1853                  .height('100%')
1854          }
1855      }
1856  }
1857  ```
1858**HTML示例:**
1859
1860```html
1861<!-- index.html -->
1862<!DOCTYPE html>
1863<html>
1864  <head>
1865    <meta charset="utf-8">
1866  </head>
1867  <body style="font-size: 30px;" onload='bodyOnLoadLocalStorage()'>
1868      Hello world!
1869      <div id="result"></div>
1870  </body>
1871  <script type="text/javascript">
1872    function bodyOnLoadLocalStorage() {
1873      if (typeof(Storage) !== 'undefined') {
1874        document.getElementById('result').innerHTML = localStorage.getItem('color');
1875      } else {
1876        document.getElementById('result').innerHTML = 'Your browser does not support localStorage.';
1877      }
1878    }
1879  </script>
1880</html>
1881```
1882
1883### javaScriptOnDocumentEnd<sup>11+</sup>
1884
1885javaScriptOnDocumentEnd(scripts: Array\<ScriptItem>)
1886
1887将JavaScript脚本注入到Web组件中,当指定页面或者文档加载完成时,该脚本将在其来源与scriptRules匹配的任何页面中执行。
1888
1889> **说明:**
1890>
1891> - 该脚本将在页面的任何JavaScript代码之后运行,并且DOM树此时已经加载、渲染完毕。
1892
1893**系统能力:** SystemCapability.Web.Webview.Core
1894
1895**参数:**
1896
1897| 参数名     | 类型                                | 必填   | 说明               |
1898| ------- | ----------------------------------- | ---- | ------------------ |
1899| scripts | Array\<[ScriptItem](#scriptitem11)> | 是    | 需要注入的ScriptItem数组 |
1900
1901**示例:**
1902
1903  ```ts
1904// xxx.ets
1905import { webview } from '@kit.ArkWeb';
1906
1907@Entry
1908@Component
1909struct Index {
1910  controller: webview.WebviewController = new webview.WebviewController();
1911  private jsStr: string =
1912    "window.document.getElementById(\"result\").innerHTML = 'this is msg from javaScriptOnDocumentEnd'";
1913  @State scripts: Array<ScriptItem> = [
1914    { script: this.jsStr, scriptRules: ["*"] }
1915  ];
1916
1917  build() {
1918    Column({ space: 20 }) {
1919      Web({ src: $rawfile('index.html'), controller: this.controller })
1920        .javaScriptAccess(true)
1921        .domStorageAccess(true)
1922        .backgroundColor(Color.Grey)
1923        .javaScriptOnDocumentEnd(this.scripts)
1924        .width('100%')
1925        .height('100%')
1926    }
1927  }
1928}
1929  ```
1930
1931```html
1932<!DOCTYPE html>
1933<html>
1934<head>
1935    <meta charset="utf-8">
1936</head>
1937<body style="font-size: 30px;">
1938Hello world!
1939<div id="result">test msg</div>
1940</body>
1941</html>
1942```
1943
1944### layoutMode<sup>11+</sup>
1945
1946layoutMode(mode: WebLayoutMode)
1947
1948设置Web布局模式。
1949
1950> **说明:**
1951>
1952> 目前只支持两种Web布局模式,分别为Web布局跟随系统(WebLayoutMode.NONE)和Web组件高度基于前端页面高度的自适应网页布局(WebLayoutMode.FIT_CONTENT)。
1953>
1954> Web组件高度基于前端页面自适应布局有如下限制:
1955> - 如果Web组件宽或长度超过7680px,请在Web组件创建的时候指定RenderMode.SYNC_RENDER模式,否则会整个白屏。
1956> - Web组件创建后不支持动态切换layoutMode模式
1957> - Web组件宽高规格:指定RenderMode.SYNC_RENDER模式时,分别不超过50万px;指定RenderMode.ASYNC_RENDER模式时,分别不超过7680px。
1958> - 频繁更改页面宽高会触发Web组件重新布局,影响体验。
1959> - 不支持瀑布流网页(下拉到底部加载更多)。
1960> - 仅支持高度自适应,不支持宽度自适应。
1961> - 由于高度自适应网页高度,您无法通过修改组件高度属性来修改组件高度。
1962
1963**系统能力:** SystemCapability.Web.Webview.Core
1964
1965**参数:**
1966
1967| 参数名  | 类型                                  | 必填   | 说明                  |
1968| ---- | ------------------------------------- | ---- | --------------------- |
1969| mode | [WebLayoutMode](#weblayoutmode11枚举说明) | 是    | 设置web布局模式,跟随系统或自适应布局。默认值:WebLayoutMode.NONE。 |
1970
1971**示例:**
1972
1973  1、指明layoutMode为WebLayoutMode.FIT_CONTENT模式,为避免默认渲染模式下(RenderMode.ASYNC_RENDER)视口高度超过7680px导致页面渲染出错,需要显式指明渲染模式(RenderMode.SYNC_RENDER)。
1974  ```ts
1975  // xxx.ets
1976  import { webview } from '@kit.ArkWeb';
1977
1978  @Entry
1979  @Component
1980  struct WebComponent {
1981    controller: webview.WebviewController = new webview.WebviewController();
1982    mode: WebLayoutMode = WebLayoutMode.FIT_CONTENT;
1983
1984    build() {
1985      Column() {
1986        Web({ src: 'www.example.com', controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
1987          .layoutMode(this.mode)
1988      }
1989    }
1990  }
1991  ```
1992
1993  2、指明layoutMode为WebLayoutMode.FIT_CONTENT模式,为避免嵌套滚动场景下,Web滚动到边缘时会优先触发过滚动的过界回弹效果影响用户体验,建议指定overScrollMode为OverScrollMode.NEVER1994  ```ts
1995  // xxx.ets
1996  import { webview } from '@kit.ArkWeb';
1997
1998  @Entry
1999  @Component
2000  struct WebComponent {
2001    controller: webview.WebviewController = new webview.WebviewController();
2002    layoutMode: WebLayoutMode = WebLayoutMode.FIT_CONTENT;
2003    @State overScrollMode: OverScrollMode = OverScrollMode.NEVER;
2004
2005    build() {
2006      Column() {
2007        Web({ src: 'www.example.com', controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
2008          .layoutMode(this.layoutMode)
2009          .overScrollMode(this.overScrollMode)
2010      }
2011    }
2012  }
2013  ```
2014
2015### nestedScroll<sup>11+</sup>
2016
2017nestedScroll(value: NestedScrollOptions | NestedScrollOptionsExt)
2018
2019调用以设置嵌套滚动选项。
2020
2021> **说明:**
2022>
2023> - 可以设置上下左右四个方向,或者设置向前、向后两个方向的嵌套滚动模式,实现与父组件的滚动联动。
2024> - value为NestedScrollOptionsExt(上下左右四个方向)类型时,scrollUp、scrollDown、scrollLeft、scrollRight默认滚动选项为[NestedScrollMode.SELF_FIRST](../apis-arkui/arkui-ts/ts-appendix-enums.md#nestedscrollmode10)。
2025> - value为NestedScrollOptions(向前、向后两个方向)类型时,scrollForward、scrollBackward默认滚动选项为NestedScrollMode.SELF_FIRST2026> - 支持嵌套滚动的容器:[Grid](../apis-arkui/arkui-ts/ts-container-grid.md)、[List](../apis-arkui/arkui-ts/ts-container-list.md)、[Scroll](../apis-arkui/arkui-ts/ts-container-scroll.md)、[Swiper](../apis-arkui/arkui-ts/ts-container-swiper.md)、[Tabs](../apis-arkui/arkui-ts/ts-container-tabs.md)、[WaterFlow](../apis-arkui/arkui-ts/ts-container-waterflow.md)、[Refresh](../apis-arkui/arkui-ts/ts-container-refresh.md)、[bindSheet](../apis-arkui/arkui-ts/ts-universal-attributes-sheet-transition.md#bindsheet)。
2027> - 支持嵌套滚动的输入事件:使用手势、鼠标、触控板。
2028> - 嵌套滚动场景下,由于Web滚动到边缘时会优先触发过滚动的过界回弹效果,建议设置overScrollMode为OverScrollMode.NEVER,避免影响此场景的用户体验。
2029
2030**系统能力:** SystemCapability.Web.Webview.Core
2031
2032**参数:**
2033
2034| 参数名   | 类型                                     | 必填   | 说明             |
2035| ----- | ---------------------------------------- | ---- | ---------------- |
2036| value | [NestedScrollOptions](../apis-arkui/arkui-ts/ts-container-scrollable-common.md#nestedscrolloptions10对象说明) \| [NestedScrollOptionsExt](#nestedscrolloptionsext14对象说明)<sup>14+</sup> | 是    | 可滚动组件滚动时的嵌套滚动选项。 |
2037
2038**示例:**
2039
2040  ```ts
2041  // xxx.ets
2042  import { webview } from '@kit.ArkWeb';
2043  @Entry
2044  @Component
2045  struct WebComponent {
2046    controller: webview.WebviewController = new webview.WebviewController();
2047
2048    build() {
2049      Column() {
2050        Web({ src: 'www.example.com', controller: this.controller })
2051          .nestedScroll({
2052            scrollForward: NestedScrollMode.SELF_FIRST,
2053            scrollBackward: NestedScrollMode.SELF_FIRST,
2054          })
2055      }
2056    }
2057  }
2058  ```
2059  ```ts
2060  // xxx.ets
2061  import { webview } from '@kit.ArkWeb';
2062  @Entry
2063  @Component
2064  struct WebComponent {
2065    controller: webview.WebviewController = new webview.WebviewController()
2066    build() {
2067      Scroll(){
2068        Column() {
2069          Text("嵌套Web")
2070            .height("25%")
2071            .width("100%")
2072            .fontSize(30)
2073            .backgroundColor(Color.Yellow)
2074          Web({ src: $rawfile('index.html'),
2075                controller: this.controller })
2076            .nestedScroll({
2077              scrollUp: NestedScrollMode.SELF_FIRST,
2078              scrollDown: NestedScrollMode.PARENT_FIRST,
2079              scrollLeft: NestedScrollMode.SELF_FIRST,
2080              scrollRight: NestedScrollMode.SELF_FIRST,
2081            })
2082        }
2083      }
2084    }
2085  }
2086  ```
2087  加载的html文件。
2088  ```html
2089  <!-- index.html -->
2090  <!DOCTYPE html>
2091  <html>
2092  <head>
2093    <style>
2094      .blue {
2095        background-color: lightblue;
2096      }
2097      .green {
2098        background-color: lightgreen;
2099      }
2100      .blue, .green {
2101       width: 100%;
2102  	 font-size:70px;
2103  	 height:1000px;
2104      }
2105    </style>
2106  </head>
2107  <body>
2108    <div class="blue" align="center" >滚动1</div>
2109    <div class="green" align="center">滚动2</div>
2110    <div class="blue" align="center">滚动3</div>
2111    <div class="green" align="center">滚动4</div>
2112    <div class="blue" align="center">滚动5</div>
2113    <div class="green" align="center">滚动6</div>
2114    <div class="blue" align="center">滚动7</div>
2115  </body>
2116  </html>
2117  ```
2118
2119### enableNativeEmbedMode<sup>11+</sup>
2120
2121enableNativeEmbedMode(mode: boolean)
2122
2123设置是否开启同层渲染功能,默认不开启。
2124
2125**系统能力:** SystemCapability.Web.Webview.Core
2126
2127**参数:**
2128
2129| 参数名   | 类型                      | 必填   | 说明             |
2130| ----- | ---------------------------------------- | ---- | ---------------- |
2131| mode |  boolean | 是    | 是否开启同层渲染功能。默认值:false。 |
2132
2133**示例:**
2134
2135  ```ts
2136  // xxx.ets
2137  import { webview } from '@kit.ArkWeb';
2138  @Entry
2139  @Component
2140  struct WebComponent {
2141    controller: webview.WebviewController = new webview.WebviewController();
2142
2143    build() {
2144      Column() {
2145        Web({ src: 'www.example.com', controller: this.controller })
2146          .enableNativeEmbedMode(true)
2147      }
2148    }
2149  }
2150  ```
2151### forceDisplayScrollBar<sup>14+</sup>
2152
2153forceDisplayScrollBar(enabled: boolean)
2154
2155
2156设置滚动条是否常驻。默认不常驻,在常驻状态下,当页面大小超过一页时,滚动条出现且不消失。
2157
2158全量展开模式下不支持滚动条常驻,即layoutMode为WebLayoutMode.FIT_CONTENT模式时,参数enabled为false。
2159
2160**系统能力:** SystemCapability.Web.Webview.Core
2161
2162**参数:**
2163
2164| 参数名  | 类型 | 必填 | 说明           |
2165| ------- | -------- | ---- | ------------------ |
2166| enabled | boolean  | 是   | 滚动条是否常驻。默认值:false。 |
2167
2168
2169**示例:**
2170
2171  ```ts
2172  // xxx.ets
2173  import { webview } from '@kit.ArkWeb';
2174
2175  @Entry
2176  @Component
2177  struct WebComponent {
2178    controller: webview.WebviewController = new webview.WebviewController();
2179
2180    build() {
2181      Column() {
2182        Web({ src: $rawfile('index.html'), controller: this.controller })
2183          .forceDisplayScrollBar(true)
2184      }
2185    }
2186  }
2187  ```
2188
2189  加载的html文件。
2190  ```html
2191  <!--index.html-->
2192  <!DOCTYPE html>
2193  <html>
2194  <head>
2195      <meta name="viewport" content="width=device-width, initial-scale=1.0">
2196      <title>Demo</title>
2197      <style>
2198        body {
2199          width:2560px;
2200          height:2560px;
2201          padding-right:170px;
2202          padding-left:170px;
2203          border:5px solid blueviolet
2204        }
2205      </style>
2206  </head>
2207  <body>
2208  Scroll Test
2209  </body>
2210  </html>
2211  ```
2212### registerNativeEmbedRule<sup>12+</sup>
2213
2214registerNativeEmbedRule(tag: string, type: string)
2215
2216注册使用同层渲染的HTML标签名和类型。标签名仅支持使用object和embed。标签类型只能使用ASCII可显示字符。
2217
2218若指定类型与w3c定义的object或embed标准类型重合,ArkWeb内核将其识别为非同层标签。
2219
2220本接口同样受enableNativeEmbedMode接口控制,在未使能同层渲染时本接口无效。在不使用本接口的情况下,ArkWeb内核默认将"native/"前缀类型的embed标签识别为同层标签。
2221
2222**系统能力:** SystemCapability.Web.Webview.Core
2223
2224**参数:**
2225
2226| 参数名  | 类型   | 必填   | 说明             |
2227|------|--------| ---- |------------------|
2228| tag  | string | 是    | 标签名。             |
2229| type | string | 是   | 标签类型,内核使用前缀匹配此参数。 |
2230
2231**示例:**
2232
2233  ```ts
2234  // xxx.ets
2235  import { webview } from '@kit.ArkWeb';
2236
2237  @Entry
2238  @Component
2239  struct WebComponent {
2240    controller: webview.WebviewController = new webview.WebviewController();
2241
2242    build() {
2243      Column() {
2244        Web({ src: 'www.example.com', controller: this.controller })
2245          .enableNativeEmbedMode(true)
2246          .registerNativeEmbedRule("object", "application/view")
2247      }
2248    }
2249  }
2250  ```
2251### defaultTextEncodingFormat<sup>12+</sup>
2252
2253defaultTextEncodingFormat(textEncodingFormat: string)
2254
2255设置网页的默认字符编码。
2256
2257**系统能力:** SystemCapability.Web.Webview.Core
2258
2259**参数:**
2260
2261| 参数名  | 类型   | 必填   | 说明                                     |
2262| ---- | ------ | ---- | ---------------------------------------- |
2263| textEncodingFormat | string | 是    | 默认字符编码。默认值:"UTF-8"。 |
2264
2265  **示例:**
2266
2267  ```ts
2268  // xxx.ets
2269  import { webview } from '@kit.ArkWeb';
2270
2271  @Entry
2272  @Component
2273  struct WebComponent {
2274    controller: webview.WebviewController = new webview.WebviewController();
2275
2276    build() {
2277      Column() {
2278        Web({ src: $rawfile('index.html'), controller: this.controller })
2279          // 设置高
2280          .height(500)
2281          .defaultTextEncodingFormat("UTF-8")
2282          .javaScriptAccess(true)
2283      }
2284    }
2285  }
2286  ```
2287
2288```html
2289
2290<!doctype html>
2291<html>
2292<head>
2293    <meta name="viewport" content="width=device-width" />
2294    <title>My test html5 page</title>
2295</head>
2296<body>
2297    hello world, 你好世界!
2298</body>
2299</html>
2300```
2301### metaViewport<sup>12+</sup>
2302
2303metaViewport(enabled: boolean)
2304
2305设置meta标签的viewport属性是否可用。
2306
2307> **说明:**
2308>
2309> - 设置false不支持meta标签viewport属性,将不解析viewport属性,进行默认布局。
2310> - 设置true支持meta标签viewport属性,将解析viewport属性,并根据viewport属性布局。
2311> - 如果设置为异常值将无效。
2312> - 如果设备为2in1,不支持viewport属性。设置为true或者false均不会解析viewport属性,进行默认布局。
2313> - 如果设备为Tablet,设置为true或false均会解析meta标签viewport-fit属性。当viewport-fit=cover时,可通过CSS属性获取安全区域大小。
2314> - 当前通过UserAgent中是否含有"Mobile"字段来判断是否开启前端HTML页面中meta标签的viewport属性。当UserAgent中不含有"Mobile"字段时,meta标签中viewport属性默认关闭,此时可通过显性设置metaViewport属性为true来覆盖关闭状态。
2315
2316**系统能力:** SystemCapability.Web.Webview.Core
2317
2318**参数:**
2319
2320| 参数名 | 类型 | 必填 | 说明                         |
2321| ------ | -------- | ---- | -------------------------------- |
2322| enabled | boolean  | 是   | 是否支持meta标签的viewport属性。默认值:true。 |
2323
2324**示例:**
2325
2326  ```ts
2327// xxx.ets
2328import { webview } from '@kit.ArkWeb';
2329
2330@Entry
2331@Component
2332struct WebComponent {
2333  controller: webview.WebviewController = new webview.WebviewController();
2334
2335  build() {
2336    Column() {
2337      Web({ src: $rawfile('index.html'), controller: this.controller })
2338        .metaViewport(true)
2339    }
2340  }
2341}
2342  ```
2343
2344```html
2345<!doctype html>
2346<html>
2347<head>
2348    <meta name="viewport" content="width=device-width, initial-scale=1.0">
2349</head>
2350<body>
2351	<p>hello world, 你好世界!</p>
2352</body>
2353</html>
2354```
2355
2356### textAutosizing<sup>12+</sup>
2357
2358textAutosizing(textAutosizing: boolean)
2359
2360设置使能文本自动调整大小。
2361
2362**系统能力:** SystemCapability.Web.Webview.Core
2363
2364**参数:**
2365
2366| 参数名  | 类型   | 必填   | 说明                                     |
2367| ---- | ------ | ---- | ---------------------------------------- |
2368| textAutosizing | boolean | 是    | 文本自动调整大小。默认值:true。 |
2369
2370  **示例:**
2371
2372  ```ts
2373  // xxx.ets
2374  import { webview } from '@kit.ArkWeb';
2375
2376  @Entry
2377  @Component
2378  struct WebComponent {
2379    controller: webview.WebviewController = new webview.WebviewController();
2380
2381    build() {
2382      Column() {
2383        Web({ src: 'www.example.com', controller: this.controller })
2384          .textAutosizing(false)
2385      }
2386    }
2387  }
2388  ```
2389### enableNativeMediaPlayer<sup>12+</sup>
2390
2391enableNativeMediaPlayer(config: NativeMediaPlayerConfig)
2392
2393开启[应用接管网页媒体播放功能](../../web/app-takeovers-web-media.md)。
2394
2395**系统能力:** SystemCapability.Web.Webview.Core
2396
2397**参数:**
2398
2399| 参数名  | 类型   | 必填   | 说明 |
2400| ---- | ------ | ---- | ---------------------|
2401| config | [NativeMediaPlayerConfig](#nativemediaplayerconfig12) | 是    | enable: 是否开启该功能。<br/> shouldOverlay: 该功能开启后, 应用接管网页视频的播放器画面是否覆盖网页内容。默认值:{enable: false, shouldOverlay: false}。|
2402
2403  **示例:**
2404
2405  ```ts
2406  // xxx.ets
2407  import { webview } from '@kit.ArkWeb';
2408
2409  @Entry
2410  @Component
2411  struct WebComponent {
2412    controller: webview.WebviewController = new webview.WebviewController();
2413
2414    build() {
2415      Column() {
2416        Web({ src: 'www.example.com', controller: this.controller })
2417          .enableNativeMediaPlayer({enable: true, shouldOverlay: false})
2418      }
2419    }
2420  }
2421  ```
2422
2423### selectionMenuOptions<sup>12+</sup>
2424
2425selectionMenuOptions(expandedMenuOptions: Array\<ExpandedMenuItemOptions>)
2426
2427Web组件自定义菜单扩展项接口,允许用户设置扩展项的文本内容、图标、回调方法。
2428
2429该接口只支持选中纯文本,当选中内容包含图片及其他非文本内容时,action信息中会显示乱码。
2430
2431**系统能力:** SystemCapability.Web.Webview.Core
2432
2433**参数:**
2434
2435| 参数名              | 类型                                                         | 必填   | 说明          |
2436| ------------------- | ----------------------------------------------------------    | ---- | ------------- |
2437| expandedMenuOptions | Array<[ExpandedMenuItemOptions](#expandedmenuitemoptions12)> | 是    | 扩展菜单选项。<br/>菜单项数量,及菜单的content大小、startIcon图标尺寸,与ArkUI [Menu](../apis-arkui/arkui-ts/ts-basic-components-menu.md)组件保持一致。|
2438
2439**示例:**
2440
2441  ```ts
2442  // xxx.ets
2443  import { webview } from '@kit.ArkWeb';
2444
2445  @Entry
2446  @Component
2447  struct WebComponent {
2448    controller: webview.WebviewController = new webview.WebviewController();
2449    @State menuOptionArray: Array<ExpandedMenuItemOptions> = [
2450      {content: 'Apple', startIcon: $r('app.media.icon'), action: (selectedText) => {
2451        console.info('select info ' + selectedText.toString());
2452      }},
2453      {content: '香蕉', startIcon: $r('app.media.icon'), action: (selectedText) => {
2454        console.info('select info ' + selectedText.toString());
2455      }}
2456    ];
2457
2458    build() {
2459      Column() {
2460        Web({ src: $rawfile("index.html"), controller: this.controller })
2461        .selectionMenuOptions(this.menuOptionArray)
2462      }
2463    }
2464  }
2465  ```
2466
2467  加载的html文件。
2468  ```html
2469  <!--index.html-->
2470  <!DOCTYPE html>
2471  <html>
2472  <head>
2473    <title>测试网页</title>
2474  </head>
2475  <body>
2476    <h1>selectionMenuOptions Demo</h1>
2477    <span>selection menu options</span>
2478  </body>
2479  </html>
2480  ```
2481
2482### onAdsBlocked<sup>12+</sup>
2483
2484onAdsBlocked(callback: OnAdsBlockedCallback)
2485
2486一个页面发生广告过滤后,通过此回调接口通知过滤的详细信息。由于页面可能随时发生变化并不断产生网络请求,为了减少通知频次、降低对页面加载过程的影响,仅在页面加载完成时进行首次通知,此后发生的过滤将间隔1秒钟上报,无广告过滤则无通知。
2487
2488**系统能力:** SystemCapability.Web.Webview.Core
2489
2490**参数:**
2491
2492| 参数名    | 类型   | 必填   | 说明                  |
2493| ------ | ------ | ---- | --------------------- |
2494| callback       | [OnAdsBlockedCallback](#onadsblockedcallback12) | 是 | onAdsBlocked的回调。 |
2495
2496**示例:**
2497
2498  ```ts
2499  // xxx.ets
2500  import { webview } from '@kit.ArkWeb';
2501
2502  @Entry
2503  @Component
2504  struct WebComponent {
2505    @State totalAdsBlockCounts: number = 0;
2506    controller: webview.WebviewController = new webview.WebviewController();
2507
2508    build() {
2509      Column() {
2510        Web({ src: 'https://www.example.com', controller: this.controller })
2511        .onAdsBlocked((details: AdsBlockedDetails) => {
2512          if (details) {
2513            console.log(' Blocked ' + details.adsBlocked.length + ' in ' + details.url);
2514            let adList: Array<string> = Array.from(new Set(details.adsBlocked));
2515            this.totalAdsBlockCounts += adList.length;
2516            console.log('Total blocked counts :' + this.totalAdsBlockCounts);
2517          }
2518        })
2519      }
2520    }
2521  }
2522  ```
2523
2524### keyboardAvoidMode<sup>12+</sup>
2525
2526keyboardAvoidMode(mode: WebKeyboardAvoidMode)
2527
2528Web组件自定义软件键盘避让模式。
2529
2530当UIContext设置的键盘避让模式为[KeyboardAvoidMode.RESIZE](../apis-arkui/js-apis-arkui-UIContext.md#keyboardavoidmode11)模式时,该接口功能不生效。
2531
2532**系统能力:** SystemCapability.Web.Webview.Core
2533
2534**参数:**
2535
2536| 参数名              | 类型                              | 必填   | 说明          |
2537| ------------------- | ------------------------------   | ------ | ------------- |
2538| mode | [WebKeyboardAvoidMode](#webkeyboardavoidmode12) | 是     | Web软键盘避让模式。<br>默认是WebKeyboardAvoidMode.RESIZE_CONTENT避让行为。<br>嵌套滚动场景下不推荐使用web软键盘避让,包括RESIZE_VISUAL与RESIZE_CONTENT。|
2539
2540**示例:**
2541
2542  ```ts
2543  // xxx.ets
2544  import { webview } from '@kit.ArkWeb';
2545
2546  @Entry
2547  @Component
2548  struct WebComponent {
2549    controller: webview.WebviewController = new webview.WebviewController();
2550    @State avoidMode: WebKeyboardAvoidMode = WebKeyboardAvoidMode.RESIZE_VISUAL;
2551
2552    build() {
2553      Column() {
2554        Web({ src: $rawfile("index.html"), controller: this.controller })
2555        .keyboardAvoidMode(this.avoidMode)
2556      }
2557    }
2558  }
2559  ```
2560
2561  加载的html文件。
2562  ```html
2563  <!--index.html-->
2564  <!DOCTYPE html>
2565  <html>
2566  <head>
2567    <title>测试网页</title>
2568  </head>
2569  <body>
2570    <input type="text" placeholder="Text">
2571  </body>
2572  </html>
2573  ```
2574
2575### editMenuOptions<sup>12+</sup>
2576
2577editMenuOptions(editMenu: EditMenuOptions)
2578
2579Web组件自定义文本选择菜单。
2580
2581用户可以通过该属性设置自定义的文本菜单。
2582
2583在[onCreateMenu](../apis-arkui/arkui-ts/ts-text-common.md#oncreatemenu)中,可以修改、增加、删除菜单选项,如果希望不显示文本菜单,需要返回空数组。
2584
2585在[onMenuItemClick](../apis-arkui/arkui-ts/ts-text-common.md#onmenuitemclick)中,可以自定义菜单选项的回调函数。该函数在菜单选项被点击后触发,并根据返回值决定是否执行系统默认的回调。返回true不执行系统回调,返回false继续执行系统回调。
2586
2587本接口在与[selectionMenuOptions](#selectionmenuoptions12)同时使用时,会使selectionMenuOptions不生效。
2588
2589**系统能力:** SystemCapability.Web.Webview.Core
2590
2591**参数:**
2592
2593| 参数名              | 类型                              | 必填   | 说明          |
2594| ------------------- | ------------------------------   | ------ | ------------- |
2595| editMenu | [EditMenuOptions](../apis-arkui/arkui-ts/ts-text-common.md#editmenuoptions) | 是     | Web自定义文本菜单选项。<br>菜单项数量,及菜单的content大小、icon图标尺寸,与ArkUI [Menu](../apis-arkui/arkui-ts/ts-basic-components-menu.md)组件保持一致。<br>菜单中系统自带的id枚举值([TextMenuItemId](../apis-arkui/arkui-ts/ts-text-common.md#textmenuitemid12))在Web中仅支持CUT、COPY、PASTE、SELECT_ALL四项。<br>onMenuItemClick函数中textRange参数在web中无意义,传入值为-1。|
2596
2597**示例**
2598
2599```ts
2600// xxx.ets
2601import { webview } from '@kit.ArkWeb';
2602
2603@Entry
2604@Component
2605struct WebComponent {
2606  controller: webview.WebviewController = new webview.WebviewController();
2607
2608  onCreateMenu(menuItems: Array<TextMenuItem>): Array<TextMenuItem> {
2609    let items = menuItems.filter((menuItem) => {
2610      // 过滤用户需要的系统按键
2611      return (
2612        menuItem.id.equals(TextMenuItemId.CUT) ||
2613        menuItem.id.equals(TextMenuItemId.COPY) ||
2614        menuItem.id.equals((TextMenuItemId.PASTE))
2615      )
2616    });
2617    let customItem1: TextMenuItem = {
2618      content: 'customItem1',
2619      id: TextMenuItemId.of('customItem1'),
2620      icon: $r('app.media.icon')
2621    };
2622    let customItem2: TextMenuItem = {
2623      content: $r('app.string.customItem2'),
2624      id: TextMenuItemId.of('customItem2'),
2625      icon: $r('app.media.icon')
2626    };
2627    items.push(customItem1);// 在选项列表后添加新选项
2628    items.unshift(customItem2);// 在选项列表前添加选项
2629
2630    return items;
2631  }
2632
2633  onMenuItemClick(menuItem: TextMenuItem, textRange: TextRange): boolean {
2634    if (menuItem.id.equals(TextMenuItemId.CUT)) {
2635      // 用户自定义行为
2636      console.log("拦截 id:CUT")
2637      return true; // 返回true不执行系统回调
2638    } else if (menuItem.id.equals(TextMenuItemId.COPY)) {
2639      // 用户自定义行为
2640      console.log("不拦截 id:COPY")
2641      return false; // 返回false执行系统回调
2642    } else if (menuItem.id.equals(TextMenuItemId.of('customItem1'))) {
2643      // 用户自定义行为
2644      console.log("拦截 id:customItem1")
2645      return true;// 用户自定义菜单选项返回true时点击后不关闭菜单,返回false时关闭菜单
2646    } else if (menuItem.id.equals((TextMenuItemId.of($r('app.string.customItem2'))))){
2647      // 用户自定义行为
2648      console.log("拦截 id:app.string.customItem2")
2649      return true;
2650    }
2651    return false;// 返回默认值false
2652  }
2653
2654  @State EditMenuOptions: EditMenuOptions = { onCreateMenu: this.onCreateMenu, onMenuItemClick: this.onMenuItemClick }
2655
2656  build() {
2657    Column() {
2658      Web({ src: $rawfile("index.html"), controller: this.controller })
2659        .editMenuOptions(this.EditMenuOptions)
2660    }
2661  }
2662}
2663```
2664
2665 加载的html文件。
2666```html
2667<!--index.html-->
2668<!DOCTYPE html>
2669<html>
2670  <head>
2671      <title>测试网页</title>
2672  </head>
2673  <body>
2674    <h1>editMenuOptions Demo</h1>
2675    <span>edit menu options</span>
2676  </body>
2677</html>
2678```
2679
2680### enableHapticFeedback<sup>13+</sup>
2681
2682enableHapticFeedback(enabled: boolean)
2683
2684设置Web组件长按文本选择是否开启振动,默认开启。 需配置"ohos.permission.VIBRATE"。
2685
2686**系统能力:** SystemCapability.Web.Webview.Core
2687
2688**参数:**
2689
2690| 参数名     | 类型        | 必填   | 说明 |
2691| --------- | ---------   | ------ | ------------- |
2692| enabled   | boolean | 是  | 是否开启振动。默认值:true。 |
2693
2694**示例:**
2695
2696```ts
2697// xxx.ets
2698import { webview } from '@kit.ArkWeb';
2699
2700@Entry
2701@Component
2702struct WebComponent {
2703  controller: webview.WebviewController = new webview.WebviewController();
2704
2705  build() {
2706    Column() {
2707      Web({ src: $rawfile("index.html"), controller: this.controller })
2708      .enableHapticFeedback(true)
2709    }
2710  }
2711}
2712```
2713
2714 加载的html文件。
2715```html
2716<!--index.html-->
2717<!DOCTYPE html>
2718<html>
2719  <head>
2720      <title>测试网页</title>
2721  </head>
2722  <body>
2723    <h1>enableHapticFeedback Demo</h1>
2724    <span>enable haptic feedback</span>
2725  </body>
2726</html>
2727```
2728
2729### bindSelectionMenu<sup>13+</sup>
2730
2731bindSelectionMenu(elementType: WebElementType, content: CustomBuilder, responseType: WebResponseType, options?: SelectionMenuOptionsExt)
2732
2733设置自定义选择菜单。
2734
2735**系统能力:** SystemCapability.Web.Webview.Core
2736
2737**参数:**
2738
2739| 参数名       | 类型                             | 必填 | 说明                                |
2740| ------------ | ------------------------------- | ---- | ----------------------------------- |
2741| elementType     | [WebElementType](#webelementtype13枚举说明)             | 是   | 菜单的类型。   |
2742| content      | [CustomBuilder](../apis-arkui/arkui-ts/ts-types.md#custombuilder8)     | 是   | 菜单的内容。   |
2743| responseType | [WebResponseType](#webresponsetype13枚举说明)           | 是   | 菜单的响应类型。 |
2744| options      | [SelectionMenuOptionsExt](#selectionmenuoptionsext13)   | 否   | 菜单的选项。|
2745
2746**示例:**
2747
2748```ts
2749// xxx.ets
2750import { webview } from '@kit.ArkWeb';
2751
2752interface PreviewBuilderParam {
2753  previewImage: Resource | string | undefined;
2754  width: number;
2755  height: number;
2756}
2757
2758@Builder function PreviewBuilderGlobal($$: PreviewBuilderParam) {
2759  Column() {
2760    Image($$.previewImage)
2761      .objectFit(ImageFit.Fill)
2762      .autoResize(true)
2763  }.width($$.width).height($$.height)
2764}
2765
2766@Entry
2767@Component
2768struct WebComponent {
2769  controller: webview.WebviewController = new webview.WebviewController();
2770
2771  private result: WebContextMenuResult | undefined = undefined;
2772  @State previewImage: Resource | string | undefined = undefined;
2773  @State previewWidth: number = 0;
2774  @State previewHeight: number = 0;
2775
2776  @Builder
2777  MenuBuilder() {
2778    Menu() {
2779      MenuItem({ content: '复制', })
2780        .onClick(() => {
2781          this.result?.copy();
2782          this.result?.closeContextMenu();
2783        })
2784      MenuItem({ content: '全选', })
2785        .onClick(() => {
2786          this.result?.selectAll();
2787          this.result?.closeContextMenu();
2788        })
2789    }
2790  }
2791  build() {
2792    Column() {
2793      Web({ src: $rawfile("index.html"), controller: this.controller })
2794        .bindSelectionMenu(WebElementType.IMAGE, this.MenuBuilder, WebResponseType.LONG_PRESS,
2795          {
2796            onAppear: () => {},
2797            onDisappear: () => {
2798              this.result?.closeContextMenu();
2799            },
2800            preview: PreviewBuilderGlobal({
2801              previewImage: this.previewImage,
2802              width: this.previewWidth,
2803              height: this.previewHeight
2804            }),
2805            menuType: MenuType.PREVIEW_MENU
2806          })
2807        .onContextMenuShow((event) => {
2808            if (event) {
2809              this.result = event.result;
2810              if (event.param.getLinkUrl()) {
2811                return false;
2812              }
2813              this.previewWidth = px2vp(event.param.getPreviewWidth());
2814              this.previewHeight = px2vp(event.param.getPreviewHeight());
2815              if (event.param.getSourceUrl().indexOf("resource://rawfile/") == 0) {
2816                this.previewImage = $rawfile(event.param.getSourceUrl().substr(19));
2817              } else {
2818                this.previewImage = event.param.getSourceUrl();
2819              }
2820              return true;
2821            }
2822            return false;
2823          })
2824    }
2825  }
2826}
2827```
2828
2829 加载的html文件。
2830```html
2831<!--index.html-->
2832<!DOCTYPE html>
2833<html>
2834  <head>
2835      <title>测试网页</title>
2836  </head>
2837  <body>
2838    <h1>bindSelectionMenu Demo</h1>
2839    <img src="./img.png" >
2840  </body>
2841</html>
2842```
2843
2844### blurOnKeyboardHideMode<sup>14+</sup>
2845
2846blurOnKeyboardHideMode(mode: BlurOnKeyboardHideMode)
2847
2848设置当软键盘收起时Web元素失焦模式。枚举类型的默认值为SILENT,当用户手动收起软键盘时焦点仍在文本框。可更改为BLUR,当用户手动收起软键盘时,焦点会从文本框转移到Web的body上,文本框失焦。
2849
2850**系统能力:** SystemCapability.Web.Webview.Core
2851
2852**参数:**
2853
2854| 参数名  | 类型                                    | 必填   | 说明               |
2855| ---- | --------------------------------------- | ---- | ------------------ |
2856| mode | [BlurOnKeyboardHideMode](#bluronkeyboardhidemode14枚举说明) | 是    | 设置设置当软键盘收起时Web元素失焦关闭或开启。默认值:BlurOnKeyboardHideMode.SILENT。 |
2857
2858**示例:**
2859
2860  ```ts
2861  // xxx.ets
2862  import { webview } from '@kit.ArkWeb';
2863
2864  @Entry
2865  @Component
2866  struct WebComponent {
2867    controller: webview.WebviewController = new webview.WebviewController();
2868    @State blurMode: BlurOnKeyboardHideMode = BlurOnKeyboardHideMode.BLUR;
2869    build() {
2870      Column() {
2871        Web({ src: $rawfile("index.html"), controller: this.controller })
2872          .blurOnKeyboardHideMode(this.blurMode)
2873      }
2874    }
2875  }
2876  ```
2877
2878 加载的html文件。
2879```html
2880<!--index.html-->
2881<!DOCTYPE html>
2882<html>
2883  <head>
2884      <title>测试网页</title>
2885  </head>
2886  <body>
2887    <h1>blurOnKeyboardHideMode Demo</h1>
2888    <input type="text" id="input_a">
2889    <script>
2890      const inputElement = document.getElementById('input_a');
2891      inputElement.addEventListener('blur', function() {
2892        console.log('Input has lost focus');
2893      });
2894    </script>
2895  </body>
2896</html>
2897```
2898
2899## 事件
2900
2901通用事件仅支持[onAppear](../apis-arkui/arkui-ts/ts-universal-events-show-hide.md#onappear)、[onDisAppear](../apis-arkui/arkui-ts/ts-universal-events-show-hide.md#ondisappear)、[onBlur](../apis-arkui/arkui-ts/ts-universal-focus-event.md#onblur)、[onFocus](../apis-arkui/arkui-ts/ts-universal-focus-event.md#onfocus)、[onDragEnd](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondragend)、[onDragEnter](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondragenter)、[onDragStart](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondragstart)、[onDragMove](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondragmove)、[onDragLeave](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondragleave)、[onDrop](../apis-arkui/arkui-ts/ts-universal-events-drag-drop.md#ondrop)、[onHover](../apis-arkui/arkui-ts/ts-universal-mouse-key.md#onhover)、[onMouse](../apis-arkui/arkui-ts/ts-universal-mouse-key.md#onmouse)、[onKeyEvent](../apis-arkui/arkui-ts/ts-universal-events-key.md#onkeyevent)、[onTouch](../apis-arkui/arkui-ts/ts-universal-events-touch.md#ontouch)、[onVisibleAreaChange](../apis-arkui/arkui-ts/ts-universal-component-visible-area-change-event.md#onvisibleareachange)。
2902
2903### onAlert
2904
2905onAlert(callback: Callback\<OnAlertEvent, boolean\>)
2906
2907网页触发alert()告警弹窗时触发回调。
2908
2909**系统能力:** SystemCapability.Web.Webview.Core
2910
2911**参数:**
2912
2913| 参数名     | 类型                   | 必填   | 说明            |
2914| ------- | --------------------- | ---- | --------------- |
2915| callback     | Callback\<[OnAlertEvent](#onalertevent12), boolean\>                | 是    | 网页触发alert()告警弹窗时触发<br>返回值boolean。当回调返回true时,应用可以调用自定义弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
2916
2917**示例:**
2918
2919  ```ts
2920  // xxx.ets
2921  import { webview } from '@kit.ArkWeb';
2922
2923  @Entry
2924  @Component
2925  struct WebComponent {
2926    controller: webview.WebviewController = new webview.WebviewController();
2927
2928    build() {
2929      Column() {
2930        Web({ src: $rawfile("index.html"), controller: this.controller })
2931          .onAlert((event) => {
2932            if (event) {
2933              console.log("event.url:" + event.url);
2934              console.log("event.message:" + event.message);
2935              AlertDialog.show({
2936                title: 'onAlert',
2937                message: 'text',
2938                primaryButton: {
2939                  value: 'cancel',
2940                  action: () => {
2941                    event.result.handleCancel();
2942                  }
2943                },
2944                secondaryButton: {
2945                  value: 'ok',
2946                  action: () => {
2947                    event.result.handleConfirm();
2948                  }
2949                },
2950                cancel: () => {
2951                  event.result.handleCancel();
2952                }
2953              })
2954            }
2955            return true;
2956          })
2957      }
2958    }
2959  }
2960  ```
2961
2962  加载的html文件。
2963  ```html
2964  <!--index.html-->
2965  <!DOCTYPE html>
2966  <html>
2967  <head>
2968    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
2969  </head>
2970  <body>
2971    <h1>WebView onAlert Demo</h1>
2972    <button onclick="myFunction()">Click here</button>
2973    <script>
2974      function myFunction() {
2975        alert("Hello World");
2976      }
2977    </script>
2978  </body>
2979  </html>
2980  ```
2981
2982### onBeforeUnload
2983
2984onBeforeUnload(callback: Callback\<OnBeforeUnloadEvent, boolean\>)
2985
2986刷新或关闭场景下,在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点,才会触发此回调。
2987
2988**系统能力:** SystemCapability.Web.Webview.Core
2989
2990**参数:**
2991
2992| 参数名     | 类型                  | 必填   | 说明            |
2993| ------- | --------------------- | ---- | --------------- |
2994| callback     | Callback\<[OnBeforeUnloadEvent](#onbeforeunloadevent12), boolean\>                | 是    | 刷新或关闭场景下,在即将离开当前页面时触发。<br>返回值boolean。当回调返回true时,应用可以调用自定义弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
2995
2996**示例:**
2997
2998  ```ts
2999  // xxx.ets
3000  import { webview } from '@kit.ArkWeb';
3001
3002  @Entry
3003  @Component
3004  struct WebComponent {
3005    controller: webview.WebviewController = new webview.WebviewController();
3006
3007    build() {
3008      Column() {
3009        Web({ src: $rawfile("index.html"), controller: this.controller })
3010          .onBeforeUnload((event) => {
3011            if (event) {
3012              console.log("event.url:" + event.url);
3013              console.log("event.message:" + event.message);
3014              AlertDialog.show({
3015                title: 'onBeforeUnload',
3016                message: 'text',
3017                primaryButton: {
3018                  value: 'cancel',
3019                  action: () => {
3020                    event.result.handleCancel();
3021                  }
3022                },
3023                secondaryButton: {
3024                  value: 'ok',
3025                  action: () => {
3026                    event.result.handleConfirm();
3027                  }
3028                },
3029                cancel: () => {
3030                  event.result.handleCancel();
3031                }
3032              })
3033            }
3034            return true;
3035          })
3036      }
3037    }
3038  }
3039  ```
3040
3041  加载的html文件。
3042  ```html
3043  <!--index.html-->
3044  <!DOCTYPE html>
3045  <html>
3046  <head>
3047    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
3048  </head>
3049  <body onbeforeunload="return myFunction()">
3050    <h1>WebView onBeforeUnload Demo</h1>
3051    <a href="https://www.example.com">Click here</a>
3052    <script>
3053      function myFunction() {
3054        return "onBeforeUnload Event";
3055      }
3056    </script>
3057  </body>
3058  </html>
3059  ```
3060
3061### onConfirm
3062
3063onConfirm(callback: Callback\<OnConfirmEvent, boolean\>)
3064
3065网页调用confirm()告警时触发此回调。
3066
3067**系统能力:** SystemCapability.Web.Webview.Core
3068
3069**参数:**
3070
3071| 参数名     | 类型                  | 必填   | 说明            |
3072| ------- | --------------------- | ---- | --------------- |
3073| callback     | Callback\<[OnConfirmEvent](#onconfirmevent12), boolean\>                | 是    | 网页调用confirm()告警时触发<br>返回值boolean。当回调返回true时,应用可以调用自定义弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
3074
3075**示例:**
3076
3077  ```ts
3078  // xxx.ets
3079  import { webview } from '@kit.ArkWeb';
3080
3081  @Entry
3082  @Component
3083  struct WebComponent {
3084    controller: webview.WebviewController = new webview.WebviewController();
3085
3086    build() {
3087      Column() {
3088        Web({ src: $rawfile("index.html"), controller: this.controller })
3089          .onConfirm((event) => {
3090            if (event) {
3091              console.log("event.url:" + event.url);
3092              console.log("event.message:" + event.message);
3093              AlertDialog.show({
3094                title: 'onConfirm',
3095                message: 'text',
3096                primaryButton: {
3097                  value: 'cancel',
3098                  action: () => {
3099                    event.result.handleCancel();
3100                  }
3101                },
3102                secondaryButton: {
3103                  value: 'ok',
3104                  action: () => {
3105                    event.result.handleConfirm();
3106                  }
3107                },
3108                cancel: () => {
3109                  event.result.handleCancel();
3110                }
3111              })
3112            }
3113            return true;
3114          })
3115      }
3116    }
3117  }
3118  ```
3119
3120  加载的html文件。
3121  ```html
3122  <!--index.html-->
3123  <!DOCTYPE html>
3124  <html>
3125  <head>
3126    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
3127  </head>
3128
3129  <body>
3130    <h1>WebView onConfirm Demo</h1>
3131    <button onclick="myFunction()">Click here</button>
3132    <p id="demo"></p>
3133    <script>
3134      function myFunction() {
3135        let x;
3136        let r = confirm("click button!");
3137        if (r == true) {
3138          x = "ok";
3139        } else {
3140          x = "cancel";
3141        }
3142        document.getElementById("demo").innerHTML = x;
3143      }
3144    </script>
3145  </body>
3146  </html>
3147  ```
3148
3149### onPrompt<sup>9+</sup>
3150
3151onPrompt(callback: Callback\<OnPromptEvent, boolean\>)
3152
3153网页调用prompt()告警时触发此回调。
3154
3155**系统能力:** SystemCapability.Web.Webview.Core
3156
3157**参数:**
3158
3159| 参数名     | 类型                  | 必填   | 说明            |
3160| ------- | --------------------- | ---- | --------------- |
3161| callback     | Callback\<[OnPromptEvent](#onpromptevent12), boolean\>                | 是    | 网页调用prompt()告警时触发。<br>返回值boolean。当回调返回true时,应用可以调用自定义弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
3162
3163**示例:**
3164
3165  ```ts
3166  // xxx.ets
3167  import { webview } from '@kit.ArkWeb';
3168
3169  @Entry
3170  @Component
3171  struct WebComponent {
3172    controller: webview.WebviewController = new webview.WebviewController();
3173
3174    build() {
3175      Column() {
3176        Web({ src: $rawfile("index.html"), controller: this.controller })
3177          .onPrompt((event) => {
3178            if (event) {
3179              console.log("url:" + event.url);
3180              console.log("message:" + event.message);
3181              console.log("value:" + event.value);
3182              AlertDialog.show({
3183                title: 'onPrompt',
3184                message: 'text',
3185                primaryButton: {
3186                  value: 'cancel',
3187                  action: () => {
3188                    event.result.handleCancel();
3189                  }
3190                },
3191                secondaryButton: {
3192                  value: 'ok',
3193                  action: () => {
3194                    event.result.handlePromptConfirm(event.value);
3195                  }
3196                },
3197                cancel: () => {
3198                  event.result.handleCancel();
3199                }
3200              })
3201            }
3202            return true;
3203          })
3204      }
3205    }
3206  }
3207  ```
3208
3209  加载的html文件。
3210  ```html
3211  <!--index.html-->
3212  <!DOCTYPE html>
3213  <html>
3214  <head>
3215    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
3216  </head>
3217
3218  <body>
3219    <h1>WebView onPrompt Demo</h1>
3220    <button onclick="myFunction()">Click here</button>
3221    <p id="demo"></p>
3222    <script>
3223      function myFunction() {
3224        let message = prompt("Message info", "Hello World");
3225        if (message != null && message != "") {
3226          document.getElementById("demo").innerHTML = message;
3227        }
3228      }
3229    </script>
3230  </body>
3231  </html>
3232  ```
3233
3234### onConsole
3235
3236onConsole(callback: Callback\<OnConsoleEvent, boolean\>)
3237
3238通知宿主应用JavaScript console消息。
3239
3240**系统能力:** SystemCapability.Web.Webview.Core
3241
3242**参数:**
3243
3244| 参数名     | 类型                              | 必填   | 说明      |
3245| ------- | --------------------------------- | ---- | --------- |
3246| callback | Callback\<[OnConsoleEvent](#onconsoleevent12), boolean\> | 是    | 网页收到JavaScript控制台消息时触发。<br>返回值boolean。当返回true时,该条消息将不会再打印至控制台,反之仍会打印至控制台。 |
3247
3248**示例:**
3249
3250  ```ts
3251  // xxx.ets
3252  import { webview } from '@kit.ArkWeb';
3253
3254  @Entry
3255  @Component
3256  struct WebComponent {
3257    controller: webview.WebviewController = new webview.WebviewController();
3258
3259    build() {
3260      Column() {
3261        Button('onconsole message')
3262          .onClick(() => {
3263            this.controller.runJavaScript('myFunction()');
3264          })
3265        Web({ src: $rawfile('index.html'), controller: this.controller })
3266          .onConsole((event) => {
3267            if (event) {
3268              console.log('getMessage:' + event.message.getMessage());
3269              console.log('getSourceId:' + event.message.getSourceId());
3270              console.log('getLineNumber:' + event.message.getLineNumber());
3271              console.log('getMessageLevel:' + event.message.getMessageLevel());
3272            }
3273            return false;
3274          })
3275      }
3276    }
3277  }
3278  ```
3279
3280  加载的html文件。
3281  ```html
3282  <!-- index.html -->
3283  <!DOCTYPE html>
3284  <html>
3285  <body>
3286  <script>
3287      function myFunction() {
3288          console.log("onconsole printf");
3289      }
3290  </script>
3291  </body>
3292  </html>
3293  ```
3294
3295### onDownloadStart
3296
3297onDownloadStart(callback: Callback\<OnDownloadStartEvent\>)
3298
3299通知主应用开始下载一个文件。
3300
3301**系统能力:** SystemCapability.Web.Webview.Core
3302
3303**参数:**
3304
3305| 参数名                | 类型   | 必填   | 说明                                |
3306| ------------------ | ------ | ---- | ----------------------------------- |
3307| callback           | Callback\<[OnDownloadStartEvent](#ondownloadstartevent12)\> | 是    | 开始下载时触发。  |
3308
3309**示例:**
3310
3311  ```ts
3312  // xxx.ets
3313  import { webview } from '@kit.ArkWeb';
3314
3315  @Entry
3316  @Component
3317  struct WebComponent {
3318    controller: webview.WebviewController = new webview.WebviewController();
3319
3320    build() {
3321      Column() {
3322        Web({ src: 'www.example.com', controller: this.controller })
3323          .onDownloadStart((event) => {
3324            if (event) {
3325              console.log('url:' + event.url)
3326              console.log('userAgent:' + event.userAgent)
3327              console.log('contentDisposition:' + event.contentDisposition)
3328              console.log('contentLength:' + event.contentLength)
3329              console.log('mimetype:' + event.mimetype)
3330            }
3331          })
3332      }
3333    }
3334  }
3335  ```
3336
3337### onErrorReceive
3338
3339onErrorReceive(callback: Callback\<OnErrorReceiveEvent\>)
3340
3341网页加载遇到错误时触发该回调。主资源与子资源出错都会回调该接口,可以通过request.isMainFrame来判断是否是主资源报错。出于性能考虑,建议此回调中尽量执行简单逻辑。在无网络的情况下,触发此回调。
3342
3343**系统能力:** SystemCapability.Web.Webview.Core
3344
3345**参数:**
3346
3347| 参数名     | 类型                                     | 必填   | 说明            |
3348| ------- | ---------------------------------------- | ---- | --------------- |
3349| callback | Callback\<[OnErrorReceiveEvent](#onerrorreceiveevent12)\> | 是    | 网页收到 Web 资源加载错误时触发。      |
3350
3351**示例:**
3352
3353  ```ts
3354  // xxx.ets
3355  import { webview } from '@kit.ArkWeb';
3356
3357  @Entry
3358  @Component
3359  struct WebComponent {
3360    controller: webview.WebviewController = new webview.WebviewController();
3361
3362    build() {
3363      Column() {
3364        Web({ src: 'www.example.com', controller: this.controller })
3365          .onErrorReceive((event) => {
3366            if (event) {
3367              console.log('getErrorInfo:' + event.error.getErrorInfo());
3368              console.log('getErrorCode:' + event.error.getErrorCode());
3369              console.log('url:' + event.request.getRequestUrl());
3370              console.log('isMainFrame:' + event.request.isMainFrame());
3371              console.log('isRedirect:' + event.request.isRedirect());
3372              console.log('isRequestGesture:' + event.request.isRequestGesture());
3373              console.log('getRequestHeader_headerKey:' + event.request.getRequestHeader().toString());
3374              let result = event.request.getRequestHeader();
3375              console.log('The request header result size is ' + result.length);
3376              for (let i of result) {
3377                console.log('The request header key is : ' + i.headerKey + ', value is : ' + i.headerValue);
3378              }
3379            }
3380          })
3381      }
3382    }
3383  }
3384  ```
3385
3386### onHttpErrorReceive
3387
3388onHttpErrorReceive(callback: Callback\<OnHttpErrorReceiveEvent\>)
3389
3390网页加载资源遇到的HTTP错误(响应码>=400)时触发该回调。
3391
3392**系统能力:** SystemCapability.Web.Webview.Core
3393
3394**参数:**
3395
3396| 参数名      | 类型                                     | 必填   | 说明       |
3397| -------- | ---------------------------------------- | ---- | ---------- |
3398| callback  | Callback\<[OnHttpErrorReceiveEvent](#onhttperrorreceiveevent12)\> | 是    | 网页收到加载资源加载HTTP错误时触发。 |
3399
3400**示例:**
3401
3402  ```ts
3403  // xxx.ets
3404  import { webview } from '@kit.ArkWeb';
3405
3406  @Entry
3407  @Component
3408  struct WebComponent {
3409    controller: webview.WebviewController = new webview.WebviewController();
3410
3411    build() {
3412      Column() {
3413        Web({ src: 'www.example.com', controller: this.controller })
3414          .onHttpErrorReceive((event) => {
3415            if (event) {
3416              console.log('url:' + event.request.getRequestUrl());
3417              console.log('isMainFrame:' + event.request.isMainFrame());
3418              console.log('isRedirect:' + event.request.isRedirect());
3419              console.log('isRequestGesture:' + event.request.isRequestGesture());
3420              console.log('getResponseData:' + event.response.getResponseData());
3421              console.log('getResponseEncoding:' + event.response.getResponseEncoding());
3422              console.log('getResponseMimeType:' + event.response.getResponseMimeType());
3423              console.log('getResponseCode:' + event.response.getResponseCode());
3424              console.log('getReasonMessage:' + event.response.getReasonMessage());
3425              let result = event.request.getRequestHeader();
3426              console.log('The request header result size is ' + result.length);
3427              for (let i of result) {
3428                console.log('The request header key is : ' + i.headerKey + ' , value is : ' + i.headerValue);
3429              }
3430              let resph = event.response.getResponseHeader();
3431              console.log('The response header result size is ' + resph.length);
3432              for (let i of resph) {
3433                console.log('The response header key is : ' + i.headerKey + ' , value is : ' + i.headerValue);
3434              }
3435            }
3436          })
3437      }
3438    }
3439  }
3440  ```
3441
3442### onPageBegin
3443
3444onPageBegin(callback: Callback\<OnPageBeginEvent\>)
3445
3446网页开始加载时触发该回调,且只在主frame触发,iframe或者frameset的内容加载时不会触发此回调。
3447
3448**系统能力:** SystemCapability.Web.Webview.Core
3449
3450**参数:**
3451
3452| 参数名  | 类型   | 必填   | 说明      |
3453| ---- | ------ | ---- | --------- |
3454| callback  | Callback\<[OnPageBeginEvent](#onpagebeginevent12)\> | 是    | 网页加载开始时触发。 |
3455
3456**示例:**
3457
3458  ```ts
3459  // xxx.ets
3460  import { webview } from '@kit.ArkWeb';
3461
3462  @Entry
3463  @Component
3464  struct WebComponent {
3465    controller: webview.WebviewController = new webview.WebviewController();
3466
3467    build() {
3468      Column() {
3469        Web({ src: 'www.example.com', controller: this.controller })
3470          .onPageBegin((event) => {
3471            if (event) {
3472              console.log('url:' + event.url);
3473            }
3474          })
3475      }
3476    }
3477  }
3478  ```
3479
3480### onPageEnd
3481
3482onPageEnd(callback: Callback\<OnPageEndEvent\>)
3483
3484网页加载完成时触发该回调,且只在主frame触发。
3485
3486**系统能力:** SystemCapability.Web.Webview.Core
3487
3488**参数:**
3489
3490| 参数名  | 类型   | 必填   | 说明      |
3491| ---- | ------ | ---- | --------- |
3492| callback  | Callback\<[OnPageEndEvent](#onpageendevent12)\> | 是    | 网页加载结束时触发。 |
3493
3494**示例:**
3495
3496  ```ts
3497  // xxx.ets
3498  import { webview } from '@kit.ArkWeb';
3499
3500  @Entry
3501  @Component
3502  struct WebComponent {
3503    controller: webview.WebviewController = new webview.WebviewController();
3504
3505    build() {
3506      Column() {
3507        Web({ src: 'www.example.com', controller: this.controller })
3508          .onPageEnd((event) => {
3509            if (event) {
3510              console.log('url:' + event.url);
3511            }
3512          })
3513      }
3514    }
3515  }
3516  ```
3517
3518### onProgressChange
3519
3520onProgressChange(callback: Callback\<OnProgressChangeEvent\>)
3521
3522网页加载进度变化时触发该回调。
3523
3524**系统能力:** SystemCapability.Web.Webview.Core
3525
3526**参数:**
3527
3528| 参数名         | 类型   | 必填   | 说明                  |
3529| ----------- | ------ | ---- | --------------------- |
3530| callback | Callback\<[OnProgressChangeEvent](#onprogresschangeevent12)\> | 是    | 页面加载进度时触发的功能。 |
3531
3532**示例:**
3533
3534  ```ts
3535  // xxx.ets
3536  import { webview } from '@kit.ArkWeb';
3537  @Entry
3538  @Component
3539  struct WebComponent {
3540    controller: webview.WebviewController = new webview.WebviewController();
3541
3542    build() {
3543      Column() {
3544        Web({ src: 'www.example.com', controller: this.controller })
3545          .onProgressChange((event) => {
3546            if (event) {
3547              console.log('newProgress:' + event.newProgress);
3548            }
3549          })
3550      }
3551    }
3552  }
3553  ```
3554
3555### onTitleReceive
3556
3557onTitleReceive(callback: Callback\<OnTitleReceiveEvent\>)
3558
3559网页document标题更改时触发该回调,当H5未设置<title\>元素时会返回对应的URL。
3560
3561**系统能力:** SystemCapability.Web.Webview.Core
3562
3563**参数:**
3564
3565| 参数名   | 类型   | 必填   | 说明          |
3566| ----- | ------ | ---- | ------------- |
3567| callback | Callback\<[OnTitleReceiveEvent](#ontitlereceiveevent12)\> | 是    | 定义主应用程序文档标题更改时触发。 |
3568
3569**示例:**
3570
3571  ```ts
3572  // xxx.ets
3573  import { webview } from '@kit.ArkWeb';
3574
3575  @Entry
3576  @Component
3577  struct WebComponent {
3578    controller: webview.WebviewController = new webview.WebviewController();
3579
3580    build() {
3581      Column() {
3582        Web({ src: 'www.example.com', controller: this.controller })
3583          .onTitleReceive((event) => {
3584            if (event) {
3585              console.log('title:' + event.title);
3586            }
3587          })
3588      }
3589    }
3590  }
3591  ```
3592
3593### onRefreshAccessedHistory
3594
3595onRefreshAccessedHistory(callback: Callback\<OnRefreshAccessedHistoryEvent\>)
3596
3597加载网页页面完成时触发该回调,用于应用更新其访问的历史链接。
3598
3599**系统能力:** SystemCapability.Web.Webview.Core
3600
3601**参数:**
3602
3603| 参数名         | 类型    | 必填   | 说明                                     |
3604| ----------- | ------- | ---- | ---------------------------------------- |
3605| callback         | Callback\<[OnRefreshAccessedHistoryEvent](#onrefreshaccessedhistoryevent12)\>  | 是    | 在网页刷新访问历史记录时触发。                |
3606
3607**示例:**
3608
3609  ```ts
3610  // xxx.ets
3611  import { webview } from '@kit.ArkWeb';
3612
3613  @Entry
3614  @Component
3615  struct WebComponent {
3616    controller: webview.WebviewController = new webview.WebviewController();
3617
3618    build() {
3619      Column() {
3620        Web({ src: 'www.example.com', controller: this.controller })
3621          .onRefreshAccessedHistory((event) => {
3622            if (event) {
3623              console.log('url:' + event.url + ' isReload:' + event.isRefreshed);
3624            }
3625          })
3626      }
3627    }
3628  }
3629  ```
3630
3631### onSslErrorReceive<sup>(deprecated)</sup>
3632
3633onSslErrorReceive(callback: (event?: { handler: Function, error: object }) => void)
3634
3635通知用户加载资源时发生SSL错误。
3636
3637> **说明:**
3638>
3639> 从API version 8开始支持,从API version 9开始废弃。建议使用[onSslErrorEventReceive<sup>9+</sup>](#onsslerroreventreceive9)替代。
3640
3641**系统能力:** SystemCapability.Web.Webview.Core
3642
3643### onFileSelectorShow<sup>(deprecated)</sup>
3644
3645onFileSelectorShow(callback: (event?: { callback: Function, fileSelector: object }) => void)
3646
3647调用此函数以处理具有“文件”输入类型的HTML表单,以响应用户按下的“选择文件”按钮。
3648
3649> **说明:**
3650>
3651> 从API version 8开始支持,从API version 9开始废弃。建议使用[onShowFileSelector<sup>9+</sup>](#onshowfileselector9)替代。
3652
3653**系统能力:** SystemCapability.Web.Webview.Core
3654
3655### onRenderExited<sup>9+</sup>
3656
3657onRenderExited(callback: Callback\<OnRenderExitedEvent\>)
3658
3659应用渲染进程异常退出时触发该回调。
3660
3661多个Web组件可能共享单个渲染进程,每个受影响的Web组件都会触发该回调。
3662
3663应用处理该回调时,可以调用绑定的webviewController相关接口来恢复页面。例如[refresh](js-apis-webview.md#refresh)、[loadUrl](js-apis-webview.md#loadurl)等。
3664
3665组件生命周期回调详情可参考[Web组件的生命周期](../../web/web-event-sequence.md)。
3666
3667**系统能力:** SystemCapability.Web.Webview.Core
3668
3669**参数:**
3670
3671| 参数名              | 类型                                     | 必填   | 说明             |
3672| ---------------- | ---------------------------------------- | ---- | ---------------- |
3673| callback | Callback\<[OnRenderExitedEvent](#onrenderexitedevent12)\> | 是    | 渲染过程退出时触发。 |
3674
3675**示例:**
3676
3677  ```ts
3678  // xxx.ets
3679  import { webview } from '@kit.ArkWeb';
3680
3681  @Entry
3682  @Component
3683  struct WebComponent {
3684    controller: webview.WebviewController = new webview.WebviewController();
3685
3686    build() {
3687      Column() {
3688        Web({ src: 'chrome://crash/', controller: this.controller })
3689          .onRenderExited((event) => {
3690            if (event) {
3691              console.log('reason:' + event.renderExitReason);
3692            }
3693          })
3694      }
3695    }
3696  }
3697  ```
3698### onRenderProcessNotResponding<sup>12+</sup>
3699
3700onRenderProcessNotResponding(callback: OnRenderProcessNotRespondingCallback)
3701
3702渲染进程无响应时触发该回调函数。如果Web组件无法处理输入事件,或者无法在合理的时间范围内导航到新的URL,则认为网页进程无响应,并将触发该回调。
3703
3704只要网页进程一直无响应,此回调仍可能会持续触发,直到网页进程再次响应,此时[onRenderProcessResponding](#onrenderprocessresponding12)将会触发。
3705
3706应用可以通过WebviewController接口[terminateRenderProcess](js-apis-webview.md#terminaterenderprocess12)来终止关联的渲染进程,这可能会影响同一渲染进程的其他Web组件。
3707
3708**系统能力:** SystemCapability.Web.Webview.Core
3709
3710**参数:**
3711
3712| 参数名   | 类型                                                         | 必填   | 说明                                   |
3713| -------- | ------------------------------------------------------------ | ---- | -------------------------------------- |
3714| callback | [OnRenderProcessNotRespondingCallback](#onrenderprocessnotrespondingcallback12) | 是    | 渲染进程无响应时触发的回调。 |
3715
3716**示例:**
3717
3718  ```ts
3719  // xxx.ets
3720  import { webview } from '@kit.ArkWeb';
3721
3722  @Entry
3723  @Component
3724  struct WebComponent {
3725    controller: webview.WebviewController = new webview.WebviewController();
3726
3727    build() {
3728      Column() {
3729        Web({ src: 'www.example.com', controller: this.controller })
3730          .onRenderProcessNotResponding((data) => {
3731            console.log("onRenderProcessNotResponding: [jsStack]= " + data.jsStack +
3732              ", [process]=" + data.pid + ", [reason]=" + data.reason);
3733          })
3734      }
3735    }
3736  }
3737  ```
3738
3739### onRenderProcessResponding<sup>12+</sup>
3740
3741onRenderProcessResponding(callback: OnRenderProcessRespondingCallback)
3742
3743渲染进程由无响应状态变回正常运行状态时触发该回调函数,该回调表明该网页并非真正卡死。
3744
3745**系统能力:** SystemCapability.Web.Webview.Core
3746
3747**参数:**
3748
3749| 参数名   | 类型                                                         | 必填   | 说明                                   |
3750| -------- | ------------------------------------------------------------ | ---- | -------------------------------------- |
3751| callback | [OnRenderProcessRespondingCallback](#onrenderprocessrespondingcallback12) | 是    | 渲染进程由无响应状态变回正常运行状态时触发的回调。 |
3752
3753**示例:**
3754
3755  ```ts
3756  // xxx.ets
3757  import { webview } from '@kit.ArkWeb';
3758
3759  @Entry
3760  @Component
3761  struct WebComponent {
3762    controller: webview.WebviewController = new webview.WebviewController();
3763
3764    build() {
3765      Column() {
3766        Web({ src: 'www.example.com', controller: this.controller })
3767          .onRenderProcessResponding(() => {
3768            console.log("onRenderProcessResponding again");
3769          })
3770      }
3771    }
3772  }
3773  ```
3774
3775### onShowFileSelector<sup>9+</sup>
3776
3777onShowFileSelector(callback: Callback\<OnShowFileSelectorEvent, boolean\>)
3778
3779调用此函数以处理具有“文件”输入类型的HTML表单。如果不调用此函数或返回false,Web组件会提供默认的“选择文件”处理界面。如果返回true,应用可以自定义“选择文件”的响应行为。
3780
3781**系统能力:** SystemCapability.Web.Webview.Core
3782
3783**参数:**
3784
3785| 参数名          | 类型                                     | 必填   | 说明              |
3786| ------------ | ---------------------------------------- | ---- | ----------------- |
3787| callback       | Callback\<[OnShowFileSelectorEvent](#onshowfileselectorevent12), boolean\> | 是    | 用于通知Web组件文件选择的结果。<br>返回值boolean。当返回值为true时,用户可以调用系统提供的弹窗能力。当回调返回false时,函数中绘制的自定义弹窗无效。 |
3788
3789**示例:**
3790
37911. 拉起文件选择器。
3792
3793   ```ts
3794   // xxx.ets
3795   import { webview } from '@kit.ArkWeb';
3796   import { picker } from '@kit.CoreFileKit';
3797   import { BusinessError } from '@kit.BasicServicesKit';
3798
3799   @Entry
3800   @Component
3801   struct WebComponent {
3802     controller: webview.WebviewController = new webview.WebviewController()
3803
3804     build() {
3805       Column() {
3806         Web({ src: $rawfile('index.html'), controller: this.controller })
3807           .onShowFileSelector((event) => {
3808             console.log('MyFileUploader onShowFileSelector invoked')
3809             const documentSelectOptions = new picker.DocumentSelectOptions();
3810             let uri: string | null = null;
3811             const documentViewPicker = new picker.DocumentViewPicker();
3812             documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {
3813               uri = documentSelectResult[0];
3814               console.info('documentViewPicker.select to file succeed and uri is:' + uri);
3815               if (event) {
3816                 event.result.handleFileList([uri]);
3817               }
3818             }).catch((err: BusinessError) => {
3819               console.error(`Invoke documentViewPicker.select failed, code is ${err.code},  message is ${err.message}`);
3820             })
3821             return true;
3822           })
3823       }
3824     }
3825   }
3826   ```
3827
38282. 拉起图库选择器。
3829
3830   ```ts
3831   // xxx.ets
3832   import { webview } from '@kit.ArkWeb';
3833   import { picker } from '@kit.CoreFileKit';
3834   import { photoAccessHelper } from '@kit.MediaLibraryKit';
3835
3836   @Entry
3837   @Component
3838   export struct WebComponent {
3839     controller: webview.WebviewController = new webview.WebviewController()
3840
3841     async selectFile(result: FileSelectorResult): Promise<void> {
3842       let photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
3843       let photoPicker = new photoAccessHelper.PhotoViewPicker();
3844       // 过滤选择媒体文件类型为IMAGE
3845       photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
3846       // 设置最大选择数量
3847       photoSelectOptions.maxSelectNumber = 5;
3848       let chooseFile: picker.PhotoSelectResult = await photoPicker.select(photoSelectOptions);
3849       // 获取选择的文件列表
3850       result.handleFileList(chooseFile.photoUris);
3851     }
3852
3853     build() {
3854       Column() {
3855         Web({ src: $rawfile('index.html'), controller: this.controller })
3856           .onShowFileSelector((event) => {
3857             if (event) {
3858               this.selectFile(event.result);
3859             }
3860             return true;
3861           })
3862       }
3863     }
3864   }
3865   ```
3866
3867   加载的html文件。
3868   ```html
3869   <!DOCTYPE html>
3870   <html>
3871   <head>
3872     <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
3873   </head>
3874   <body>
3875     <form id="upload-form" enctype="multipart/form-data">
3876       <input type="file" id="upload" name="upload"/>
3877       </form>
3878   </body>
3879   </html>
3880   ```
3881
3882### onResourceLoad<sup>9+</sup>
3883
3884onResourceLoad(callback: Callback\<OnResourceLoadEvent\>)
3885
3886通知Web组件所加载的资源文件url信息。
3887
3888**系统能力:** SystemCapability.Web.Webview.Core
3889
3890**参数:**
3891
3892| 参数名    | 类型   | 必填   | 说明                  |
3893| ------ | ------ | ---- | --------------------- |
3894| callback  | Callback\<[OnResourceLoadEvent](#onresourceloadevent12)\> | 是 | 加载url时触发。 |
3895
3896**示例:**
3897
3898  ```ts
3899  // xxx.ets
3900  import { webview } from '@kit.ArkWeb';
3901
3902  @Entry
3903  @Component
3904  struct WebComponent {
3905    controller: webview.WebviewController = new webview.WebviewController();
3906
3907    build() {
3908      Column() {
3909        Web({ src: 'www.example.com', controller: this.controller })
3910          .onResourceLoad((event) => {
3911            console.log('onResourceLoad: ' + event.url);
3912          })
3913      }
3914    }
3915  }
3916  ```
3917
3918### onScaleChange<sup>9+</sup>
3919
3920onScaleChange(callback: Callback\<OnScaleChangeEvent\>)
3921
3922当前页面显示比例的变化时触发该回调。
3923
3924**系统能力:** SystemCapability.Web.Webview.Core
3925
3926**参数:**
3927
3928| 参数名    | 类型   | 必填   | 说明                  |
3929| ------ | ------ | ---- | --------------------- |
3930| callback | Callback\<[OnScaleChangeEvent](#onscalechangeevent12)\> | 是 | 当前页面显示比例的变化时触发。 |
3931
3932**示例:**
3933
3934  ```ts
3935  // xxx.ets
3936  import { webview } from '@kit.ArkWeb';
3937
3938  @Entry
3939  @Component
3940  struct WebComponent {
3941    controller: webview.WebviewController = new webview.WebviewController();
3942
3943    build() {
3944      Column() {
3945        Web({ src: 'www.example.com', controller: this.controller })
3946          .onScaleChange((event) => {
3947            console.log('onScaleChange changed from ' + event.oldScale + ' to ' + event.newScale);
3948          })
3949      }
3950    }
3951  }
3952  ```
3953
3954### onUrlLoadIntercept<sup>(deprecated)</sup>
3955
3956onUrlLoadIntercept(callback: (event?: { data:string | WebResourceRequest }) => boolean)
3957
3958当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。
3959从API version 10开始不再维护,建议使用[onLoadIntercept<sup>10+</sup>](#onloadintercept10)代替。
3960
3961**系统能力:** SystemCapability.Web.Webview.Core
3962
3963**参数:**
3964
3965| 参数名    | 类型   | 必填   | 说明                  |
3966| ------ | ------ | ---- | --------------------- |
3967| callback | (event?: { data:string \| [WebResourceRequest](#webresourcerequest) }) => boolean | 是 | url的相关信息。返回值:boolean,true表示阻止此次加载,否则允许此次加载。 |
3968
3969**示例:**
3970
3971  ```ts
3972  // xxx.ets
3973  import { webview } from '@kit.ArkWeb';
3974
3975  @Entry
3976  @Component
3977  struct WebComponent {
3978    controller: webview.WebviewController = new webview.WebviewController();
3979
3980    build() {
3981      Column() {
3982        Web({ src: 'www.example.com', controller: this.controller })
3983          .onUrlLoadIntercept((event) => {
3984            if (event) {
3985              console.log('onUrlLoadIntercept ' + event.data.toString());
3986            }
3987            return true
3988          })
3989      }
3990    }
3991  }
3992  ```
3993
3994### onInterceptRequest<sup>9+</sup>
3995
3996onInterceptRequest(callback: Callback<OnInterceptRequestEvent, WebResourceResponse>)
3997
3998当Web组件加载url之前触发该回调,用于拦截url并返回响应数据。
3999
4000**系统能力:** SystemCapability.Web.Webview.Core
4001
4002**参数:**
4003
4004| 参数名    | 类型   | 必填   | 说明                  |
4005| ------ | ------ | ---- | --------------------- |
4006| callback | Callback\<[OnInterceptRequestEvent](#oninterceptrequestevent12)\> | 是 | 当Web组件加载url之前触发。<br>返回值[WebResourceResponse](#webresourceresponse)。返回响应数据则按照响应数据加载,无响应数据则返回null表示按照原来的方式加载。 |
4007
4008**示例:**
4009
4010  ```ts
4011  // xxx.ets
4012  import { webview } from '@kit.ArkWeb';
4013
4014  @Entry
4015  @Component
4016  struct WebComponent {
4017    controller: webview.WebviewController = new webview.WebviewController();
4018    responseWeb: WebResourceResponse = new WebResourceResponse();
4019    heads: Header[] = new Array();
4020    webData: string = "<!DOCTYPE html>\n" +
4021      "<html>\n" +
4022      "<head>\n" +
4023      "<title>intercept test</title>\n" +
4024      "</head>\n" +
4025      "<body>\n" +
4026      "<h1>intercept test</h1>\n" +
4027      "</body>\n" +
4028      "</html>";
4029
4030    build() {
4031      Column() {
4032        Web({ src: 'www.example.com', controller: this.controller })
4033          .onInterceptRequest((event) => {
4034            if (event) {
4035              console.log('url:' + event.request.getRequestUrl());
4036            }
4037            let head1: Header = {
4038              headerKey: "Connection",
4039              headerValue: "keep-alive"
4040            }
4041            let head2: Header = {
4042              headerKey: "Cache-Control",
4043              headerValue: "no-cache"
4044            }
4045            // 将新元素追加到数组的末尾,并返回数组的新长度。
4046            let length = this.heads.push(head1);
4047            length = this.heads.push(head2);
4048            console.log('The response header result length is :' + length);
4049            const promise: Promise<String> = new Promise((resolve: Function, reject: Function) => {
4050              this.responseWeb.setResponseHeader(this.heads);
4051              this.responseWeb.setResponseData(this.webData);
4052              this.responseWeb.setResponseEncoding('utf-8');
4053              this.responseWeb.setResponseMimeType('text/html');
4054              this.responseWeb.setResponseCode(200);
4055              this.responseWeb.setReasonMessage('OK');
4056              resolve("success");
4057            })
4058            promise.then(() => {
4059              console.log("prepare response ready");
4060              this.responseWeb.setResponseIsReady(true);
4061            })
4062            this.responseWeb.setResponseIsReady(false);
4063            return this.responseWeb;
4064          })
4065      }
4066    }
4067  }
4068  ```
4069
4070### onHttpAuthRequest<sup>9+</sup>
4071
4072onHttpAuthRequest(callback: Callback\<OnHttpAuthRequestEvent, boolean\>)
4073
4074通知收到http auth认证请求。
4075
4076**系统能力:** SystemCapability.Web.Webview.Core
4077
4078**参数:**
4079
4080| 参数名    | 类型   | 必填   | 说明                  |
4081| ------ | ------ | ---- | --------------------- |
4082| callback | Callback\<[OnHttpAuthRequestEvent](#onhttpauthrequestevent12), boolean\> | 是 | 当浏览器需要用户的凭据时触发。<br>返回值boolean。返回false表示此次认证失败,否则成功。   |
4083
4084**示例:**
4085
4086  ```ts
4087  // xxx.ets
4088  import { webview } from '@kit.ArkWeb';
4089
4090  @Entry
4091  @Component
4092  struct WebComponent {
4093    controller: webview.WebviewController = new webview.WebviewController();
4094    httpAuth: boolean = false;
4095
4096    build() {
4097      Column() {
4098        Web({ src: 'www.example.com', controller: this.controller })
4099          .onHttpAuthRequest((event) => {
4100            if (event) {
4101              AlertDialog.show({
4102                title: 'onHttpAuthRequest',
4103                message: 'text',
4104                primaryButton: {
4105                  value: 'cancel',
4106                  action: () => {
4107                    event.handler.cancel();
4108                  }
4109                },
4110                secondaryButton: {
4111                  value: 'ok',
4112                  action: () => {
4113                    this.httpAuth = event.handler.isHttpAuthInfoSaved();
4114                    if (this.httpAuth == false) {
4115                      webview.WebDataBase.saveHttpAuthCredentials(
4116                        event.host,
4117                        event.realm,
4118                        "2222",
4119                        "2222"
4120                      )
4121                      event.handler.cancel();
4122                    }
4123                  }
4124                },
4125                cancel: () => {
4126                  event.handler.cancel();
4127                }
4128              })
4129            }
4130            return true;
4131          })
4132      }
4133    }
4134  }
4135  ```
4136### onSslErrorEventReceive<sup>9+</sup>
4137
4138onSslErrorEventReceive(callback: Callback\<OnSslErrorEventReceiveEvent\>)
4139
4140通知用户加载资源时发生SSL错误,只支持主资源。
4141如果需要支持子资源,请使用[OnSslErrorEvent](#onsslerrorevent12)接口。
4142
4143**系统能力:** SystemCapability.Web.Webview.Core
4144
4145**参数:**
4146
4147| 参数名    | 类型   | 必填   | 说明                  |
4148| ------ | ------ | ---- | --------------------- |
4149| callback | Callback\<[OnSslErrorEventReceiveEvent](#onsslerroreventreceiveevent12)\> | 是 | 当网页收到SSL错误时触发。 |
4150
4151**示例:**
4152
4153  ```ts
4154  // xxx.ets
4155  import { webview } from '@kit.ArkWeb';
4156
4157  @Entry
4158  @Component
4159  struct WebComponent {
4160    controller: webview.WebviewController = new webview.WebviewController();
4161
4162    build() {
4163      Column() {
4164        Web({ src: 'www.example.com', controller: this.controller })
4165          .onSslErrorEventReceive((event) => {
4166            AlertDialog.show({
4167              title: 'onSslErrorEventReceive',
4168              message: 'text',
4169              primaryButton: {
4170                value: 'confirm',
4171                action: () => {
4172                  event.handler.handleConfirm();
4173                }
4174              },
4175              secondaryButton: {
4176                value: 'cancel',
4177                action: () => {
4178                  event.handler.handleCancel();
4179                }
4180              },
4181              cancel: () => {
4182                event.handler.handleCancel();
4183              }
4184            })
4185          })
4186      }
4187    }
4188  }
4189  ```
4190
4191### onSslErrorEvent<sup>12+</sup>
4192
4193onSslErrorEvent(callback: OnSslErrorEventCallback)
4194
4195通知用户加载资源(主资源+子资源)时发生SSL错误,如果只想处理主资源的SSL错误,请用isMainFrame字段进行区分。
4196
4197**系统能力:** SystemCapability.Web.Webview.Core
4198
4199**参数:**
4200
4201| 参数名    | 类型   | 必填   | 说明                  |
4202| ------ | ------ | ---- | --------------------- |
4203| callback | [OnSslErrorEventCallback](#onsslerroreventcallback12) | 是 | 通知用户加载资源时发生SSL错误。 |
4204
4205**示例:**
4206
4207  ```ts
4208  // xxx.ets
4209  import { webview } from '@kit.ArkWeb';
4210
4211  @Entry
4212  @Component
4213  struct WebComponent {
4214    controller: webview.WebviewController = new webview.WebviewController();
4215
4216    build() {
4217      Column() {
4218        Web({ src: 'www.example.com', controller: this.controller })
4219          .onSslErrorEvent((event: SslErrorEvent) => {
4220            console.log("onSslErrorEvent url: " + event.url);
4221            console.log("onSslErrorEvent error: " + event.error);
4222            console.log("onSslErrorEvent originalUrl: " + event.originalUrl);
4223            console.log("onSslErrorEvent referrer: " + event.referrer);
4224            console.log("onSslErrorEvent isFatalError: " + event.isFatalError);
4225            console.log("onSslErrorEvent isMainFrame: " + event.isMainFrame);
4226            AlertDialog.show({
4227              title: 'onSslErrorEvent',
4228              message: 'text',
4229              primaryButton: {
4230                value: 'confirm',
4231                action: () => {
4232                  event.handler.handleConfirm();
4233                }
4234              },
4235              secondaryButton: {
4236                value: 'cancel',
4237                action: () => {
4238                  event.handler.handleCancel();
4239                }
4240              },
4241              cancel: () => {
4242                event.handler.handleCancel();
4243              }
4244            })
4245          })
4246      }
4247    }
4248  }
4249  ```
4250
4251### onClientAuthenticationRequest<sup>9+</sup>
4252
4253onClientAuthenticationRequest(callback: Callback\<OnClientAuthenticationEvent\>)
4254
4255通知用户收到SSL客户端证书请求事件。
4256
4257**系统能力:** SystemCapability.Web.Webview.Core
4258
4259**参数:**
4260
4261| 参数名    | 类型   | 必填   | 说明                  |
4262| ------ | ------ | ---- | --------------------- |
4263| callback  | Callback\<[OnClientAuthenticationEvent](#onclientauthenticationevent12)\> | 是 | 当需要用户提供的SSL客户端证书时触发的回调。  |
4264
4265  **示例:**
4266
4267  未对接证书管理的双向认证。
4268
4269  ```ts
4270  // xxx.ets API9
4271  import { webview } from '@kit.ArkWeb';
4272
4273  @Entry
4274  @Component
4275  struct WebComponent {
4276    controller: webview.WebviewController = new webview.WebviewController();
4277
4278    build() {
4279      Column() {
4280        Web({ src: 'www.example.com', controller: this.controller })
4281          .onClientAuthenticationRequest((event) => {
4282            AlertDialog.show({
4283              title: 'onClientAuthenticationRequest',
4284              message: 'text',
4285              primaryButton: {
4286                value: 'confirm',
4287                action: () => {
4288                  event.handler.confirm("/system/etc/user.pk8", "/system/etc/chain-user.pem");
4289                }
4290              },
4291              secondaryButton: {
4292                value: 'cancel',
4293                action: () => {
4294                  event.handler.cancel();
4295                }
4296              },
4297              cancel: () => {
4298                event.handler.ignore();
4299              }
4300            })
4301          })
4302      }
4303    }
4304  }
4305  ```
4306
4307  对接证书管理的双向认证。
4308
4309  1. 构造单例对象GlobalContext。
4310
4311     ```ts
4312     // GlobalContext.ets
4313     export class GlobalContext {
4314       private constructor() {}
4315       private static instance: GlobalContext;
4316       private _objects = new Map<string, Object>();
4317
4318       public static getContext(): GlobalContext {
4319         if (!GlobalContext.instance) {
4320           GlobalContext.instance = new GlobalContext();
4321         }
4322         return GlobalContext.instance;
4323       }
4324
4325       getObject(value: string): Object | undefined {
4326         return this._objects.get(value);
4327       }
4328
4329       setObject(key: string, objectClass: Object): void {
4330         this._objects.set(key, objectClass);
4331       }
4332     }
4333     ```
4334
4335
4336  2. 实现双向认证。
4337
4338     ```ts
4339     // xxx.ets API10
4340     import { webview } from '@kit.ArkWeb';
4341     import { common, Want, bundleManager } from '@kit.AbilityKit';
4342     import { BusinessError } from '@kit.BasicServicesKit';
4343     import { GlobalContext } from '../GlobalContext';
4344
4345     let uri = "";
4346
4347     export default class CertManagerService {
4348       private static sInstance: CertManagerService;
4349       private authUri = "";
4350       private appUid = "";
4351
4352       public static getInstance(): CertManagerService {
4353         if (CertManagerService.sInstance == null) {
4354           CertManagerService.sInstance = new CertManagerService();
4355         }
4356         return CertManagerService.sInstance;
4357       }
4358
4359       async grantAppPm(callback: (message: string) => void) {
4360         let message = '';
4361         let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT | bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
4362         // 注:com.example.myapplication需要写实际应用名称
4363         try {
4364           bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
4365             console.info('getBundleInfoForSelf successfully. Data: %{public}s', JSON.stringify(data));
4366            this.appUid = data.appInfo.uid.toString();
4367           }).catch((err: BusinessError) => {
4368             console.error('getBundleInfoForSelf failed. Cause: %{public}s', err.message);
4369           });
4370         } catch (err) {
4371           let message = (err as BusinessError).message;
4372           console.error('getBundleInfoForSelf failed: %{public}s', message);
4373         }
4374
4375         // 注:需要在MainAbility.ts文件的onCreate函数里添加GlobalContext.getContext().setObject("AbilityContext", this.context)
4376         let abilityContext = GlobalContext.getContext().getObject("AbilityContext") as common.UIAbilityContext
4377         await abilityContext.startAbilityForResult(
4378           {
4379             bundleName: "com.ohos.certmanager",
4380             abilityName: "MainAbility",
4381             uri: "requestAuthorize",
4382             parameters: {
4383               appUid: this.appUid, // 传入申请应用的appUid
4384             }
4385           } as Want)
4386           .then((data: common.AbilityResult) => {
4387             if (!data.resultCode && data.want) {
4388               if (data.want.parameters) {
4389                 this.authUri = data.want.parameters.authUri as string; // 授权成功后获取返回的authUri
4390               }
4391             }
4392           })
4393         message += "after grantAppPm authUri: " + this.authUri;
4394         uri = this.authUri;
4395         callback(message)
4396       }
4397     }
4398
4399     @Entry
4400     @Component
4401     struct WebComponent {
4402       controller: webview.WebviewController = new webview.WebviewController();
4403       @State message: string = 'Hello World' // message主要是调试观察使用
4404       certManager = CertManagerService.getInstance();
4405
4406       build() {
4407         Row() {
4408           Column() {
4409             Row() {
4410               // 第一步:需要先进行授权,获取到uri
4411               Button('GrantApp')
4412                 .onClick(() => {
4413                   this.certManager.grantAppPm((data) => {
4414                     this.message = data;
4415                   });
4416                 })
4417               // 第二步:授权后,双向认证会通过onClientAuthenticationRequest回调将uri传给web进行认证
4418               Button("ClientCertAuth")
4419                 .onClick(() => {
4420                   this.controller.loadUrl('https://www.example2.com'); // 支持双向认证的服务器网站
4421                 })
4422             }
4423
4424             Web({ src: 'https://www.example1.com', controller: this.controller })
4425               .fileAccess(true)
4426               .javaScriptAccess(true)
4427               .domStorageAccess(true)
4428               .onlineImageAccess(true)
4429
4430               .onClientAuthenticationRequest((event) => {
4431                 AlertDialog.show({
4432                   title: 'ClientAuth',
4433                   message: 'Text',
4434                   confirm: {
4435                     value: 'Confirm',
4436                     action: () => {
4437                       event.handler.confirm(uri);
4438                     }
4439                   },
4440                   cancel: () => {
4441                     event.handler.cancel();
4442                   }
4443                 })
4444               })
4445           }
4446         }
4447         .width('100%')
4448         .height('100%')
4449       }
4450     }
4451     ```
4452
4453### onPermissionRequest<sup>9+</sup>
4454
4455onPermissionRequest(callback: Callback\<OnPermissionRequestEvent\>)
4456
4457通知收到获取权限请求,需配置"ohos.permission.CAMERA"、"ohos.permission.MICROPHONE"权限。
4458
4459**系统能力:** SystemCapability.Web.Webview.Core
4460
4461**参数:**
4462
4463| 参数名    | 类型   | 必填   | 说明                  |
4464| ------ | ------ | ---- | --------------------- |
4465| callback | Callback\<[OnPermissionRequestEvent](#onpermissionrequestevent12)\> | 是 | 通知收到获取权限请求触发。 |
4466
4467**示例:**
4468
4469  ```ts
4470  // xxx.ets
4471  import { webview } from '@kit.ArkWeb';
4472  import { BusinessError } from '@kit.BasicServicesKit';
4473  import { abilityAccessCtrl } from '@kit.AbilityKit';
4474
4475  @Entry
4476  @Component
4477  struct WebComponent {
4478    controller: webview.WebviewController = new webview.WebviewController();
4479
4480    aboutToAppear() {
4481      // 配置Web开启调试模式
4482      webview.WebviewController.setWebDebuggingAccess(true);
4483      let atManager = abilityAccessCtrl.createAtManager();
4484      atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.CAMERA', 'ohos.permission.MICROPHONE'])
4485        .then((data) => {
4486          console.info('data:' + JSON.stringify(data));
4487          console.info('data permissions:' + data.permissions);
4488          console.info('data authResults:' + data.authResults);
4489        }).catch((error: BusinessError) => {
4490        console.error(`Failed to request permissions from user. Code is ${error.code}, message is ${error.message}`);
4491      })
4492    }
4493
4494    build() {
4495      Column() {
4496        Web({ src: $rawfile('index.html'), controller: this.controller })
4497          .onPermissionRequest((event) => {
4498            if (event) {
4499              AlertDialog.show({
4500                title: 'title',
4501                message: 'text',
4502                primaryButton: {
4503                  value: 'deny',
4504                  action: () => {
4505                    event.request.deny();
4506                  }
4507                },
4508                secondaryButton: {
4509                  value: 'onConfirm',
4510                  action: () => {
4511                    event.request.grant(event.request.getAccessibleResource());
4512                  }
4513                },
4514                cancel: () => {
4515                  event.request.deny();
4516                }
4517              })
4518            }
4519          })
4520      }
4521    }
4522  }
4523  ```
4524
4525  加载的html文件。
4526 ```html
4527  <!-- index.html -->
4528  <!DOCTYPE html>
4529  <html>
4530  <head>
4531    <meta charset="UTF-8">
4532  </head>
4533  <body>
4534  <video id="video" width="500px" height="500px" autoplay="autoplay"></video>
4535  <canvas id="canvas" width="500px" height="500px"></canvas>
4536  <br>
4537  <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()"/>
4538  <script>
4539    function getMedia()
4540    {
4541      let constraints = {
4542        video: {width: 500, height: 500},
4543        audio: true
4544      };
4545      // 获取video摄像头区域
4546      let video = document.getElementById("video");
4547      // 返回的Promise对象
4548      let promise = navigator.mediaDevices.getUserMedia(constraints);
4549      // then()异步,调用MediaStream对象作为参数
4550      promise.then(function (MediaStream) {
4551        video.srcObject = MediaStream;
4552        video.play();
4553      });
4554    }
4555  </script>
4556  </body>
4557  </html>
4558 ```
4559
4560### onContextMenuShow<sup>9+</sup>
4561
4562onContextMenuShow(callback: Callback\<OnContextMenuShowEvent, boolean\>)
4563
4564长按特定元素(例如图片,链接)或鼠标右键,跳出菜单。
4565
4566**系统能力:** SystemCapability.Web.Webview.Core
4567
4568**参数:**
4569
4570| 参数名    | 类型   | 必填   | 说明                  |
4571| ------ | ------ | ---- | --------------------- |
4572| callback  | Callback\<[OnContextMenuShowEvent](#oncontextmenushowevent12), boolean\> | 是 | 调用时触发的回调,以允许自定义显示上下文菜单。<br>返回值boolean。自定义菜单返回true,触发的自定义菜单无效返回false。     |
4573
4574**示例:**
4575
4576  ```ts
4577  // xxx.ets
4578  import { webview } from '@kit.ArkWeb';
4579  import { pasteboard } from '@kit.BasicServicesKit';
4580
4581  const TAG = 'ContextMenu';
4582
4583  @Entry
4584  @Component
4585  struct WebComponent {
4586    controller: webview.WebviewController = new webview.WebviewController();
4587    private result: WebContextMenuResult | undefined = undefined;
4588    @State linkUrl: string = '';
4589    @State offsetX: number = 0;
4590    @State offsetY: number = 0;
4591    @State showMenu: boolean = false;
4592
4593    @Builder
4594    // 构建自定义菜单及触发功能接口
4595    MenuBuilder() {
4596      // 以垂直列表形式显示的菜单。
4597      Menu() {
4598        // 展示菜单Menu中具体的item菜单项。
4599        MenuItem({
4600          content: '复制图片',
4601        })
4602          .width(100)
4603          .height(50)
4604          .onClick(() => {
4605            this.result?.copyImage();
4606            this.showMenu = false;
4607          })
4608        MenuItem({
4609          content: '剪切',
4610        })
4611          .width(100)
4612          .height(50)
4613          .onClick(() => {
4614            this.result?.cut();
4615            this.showMenu = false;
4616          })
4617        MenuItem({
4618          content: '复制',
4619        })
4620          .width(100)
4621          .height(50)
4622          .onClick(() => {
4623            this.result?.copy();
4624            this.showMenu = false;
4625          })
4626        MenuItem({
4627          content: '粘贴',
4628        })
4629          .width(100)
4630          .height(50)
4631          .onClick(() => {
4632            this.result?.paste();
4633            this.showMenu = false;
4634          })
4635        MenuItem({
4636          content: '复制链接',
4637        })
4638          .width(100)
4639          .height(50)
4640          .onClick(() => {
4641            let pasteData = pasteboard.createData('text/plain', this.linkUrl);
4642            pasteboard.getSystemPasteboard().setData(pasteData, (error) => {
4643              if (error) {
4644                return;
4645              }
4646            })
4647            this.showMenu = false;
4648          })
4649        MenuItem({
4650          content: '全选',
4651        })
4652          .width(100)
4653          .height(50)
4654          .onClick(() => {
4655            this.result?.selectAll();
4656            this.showMenu = false;
4657          })
4658      }
4659      .width(150)
4660      .height(300)
4661    }
4662
4663    build() {
4664      Column() {
4665        Web({ src: $rawfile("index.html"), controller: this.controller })
4666          // 触发自定义弹窗
4667          .onContextMenuShow((event) => {
4668            if (event) {
4669              this.result = event.result
4670              console.info("x coord = " + event.param.x());
4671              console.info("link url = " + event.param.getLinkUrl());
4672              this.linkUrl = event.param.getLinkUrl();
4673            }
4674            console.info(TAG, `x: ${this.offsetX}, y: ${this.offsetY}`);
4675            this.showMenu = true;
4676            this.offsetX = 0;
4677            this.offsetY = Math.max(px2vp(event?.param.y() ?? 0) - 0, 0);
4678            return true;
4679          })
4680          .bindPopup(this.showMenu,
4681            {
4682              builder: this.MenuBuilder(),
4683              enableArrow: false,
4684              placement: Placement.LeftTop,
4685              offset: { x: this.offsetX, y: this.offsetY },
4686              mask: false,
4687              onStateChange: (e) => {
4688                if (!e.isVisible) {
4689                  this.showMenu = false;
4690                  this.result!.closeContextMenu();
4691                }
4692              }
4693            })
4694      }
4695    }
4696  }
4697  ```
4698
4699  加载的html文件。
4700  ```html
4701  <!-- index.html -->
4702  <!DOCTYPE html>
4703  <html lang="en">
4704  <body>
4705    <h1>onContextMenuShow</h1>
4706    <a href="http://www.example.com" style="font-size:27px">链接www.example.com</a>
4707    // rawfile下放任意一张图片命名为example.png
4708    <div><img src="example.png"></div>
4709    <p>选中文字鼠标右键弹出菜单</p>
4710  </body>
4711  </html>
4712  ```
4713
4714### onContextMenuHide<sup>11+</sup>
4715
4716onContextMenuHide(callback: OnContextMenuHideCallback)
4717
4718长按特定元素(例如图片,链接)或鼠标右键,隐藏菜单。
4719
4720**系统能力:** SystemCapability.Web.Webview.Core
4721
4722**参数:**
4723
4724| 参数名    | 类型   | 必填   | 说明                  |
4725| ------ | ------ | ---- | --------------------- |
4726| callback  | [OnContextMenuHideCallback](#oncontextmenuhidecallback11) | 是 | 菜单相关参数。     |
4727
4728**示例:**
4729
4730  ```ts
4731  // xxx.ets
4732  import { webview } from '@kit.ArkWeb';
4733
4734  @Entry
4735  @Component
4736  struct WebComponent {
4737    controller: webview.WebviewController = new webview.WebviewController();
4738
4739    build() {
4740      Column() {
4741        Web({ src: 'www.example.com', controller: this.controller })
4742          .onContextMenuHide(() => {
4743            console.log("onContextMenuHide callback");
4744          })
4745      }
4746    }
4747  }
4748  ```
4749
4750### onScroll<sup>9+</sup>
4751
4752onScroll(callback: Callback\<OnScrollEvent\>)
4753
4754通知网页滚动条滚动位置。
4755
4756**系统能力:** SystemCapability.Web.Webview.Core
4757
4758**参数:**
4759
4760| 参数名    | 类型   | 必填   | 说明                  |
4761| ------ | ------ | ---- | --------------------- |
4762| callback | Callback\<[OnScrollEvent](#onscrollevent12)\> | 是 | 当滚动条滑动到指定位置时触发。 |
4763
4764**示例:**
4765
4766  ```ts
4767  // xxx.ets
4768  import { webview } from '@kit.ArkWeb';
4769
4770  @Entry
4771  @Component
4772  struct WebComponent {
4773    controller: webview.WebviewController = new webview.WebviewController();
4774
4775    build() {
4776      Column() {
4777        Web({ src: 'www.example.com', controller: this.controller })
4778          .onScroll((event) => {
4779            console.info("x = " + event.xOffset);
4780            console.info("y = " + event.yOffset);
4781          })
4782      }
4783    }
4784  }
4785  ```
4786
4787### onGeolocationShow
4788
4789onGeolocationShow(callback: Callback\<OnGeolocationShowEvent\>)
4790
4791通知用户收到地理位置信息获取请求。
4792
4793**系统能力:** SystemCapability.Web.Webview.Core
4794
4795**参数:**
4796
4797| 参数名    | 类型   | 必填   | 说明                  |
4798| ------ | ------ | ---- | --------------------- |
4799| callback      | Callback\<[OnGeolocationShowEvent](#ongeolocationshowevent12)\>  | 是 | 请求显示地理位置权限时触发。     |
4800
4801**示例:**
4802
4803  ```ts
4804  // xxx.ets
4805  import { webview } from '@kit.ArkWeb';
4806
4807  @Entry
4808  @Component
4809  struct WebComponent {
4810    controller: webview.WebviewController = new webview.WebviewController();
4811
4812    build() {
4813      Column() {
4814        Web({ src: $rawfile('index.html'), controller: this.controller })
4815          .geolocationAccess(true)
4816          .onGeolocationShow((event) => {
4817            if (event) {
4818              AlertDialog.show({
4819                title: 'title',
4820                message: 'text',
4821                confirm: {
4822                  value: 'onConfirm',
4823                  action: () => {
4824                    event.geolocation.invoke(event.origin, true, true);
4825                  }
4826                },
4827                cancel: () => {
4828                  event.geolocation.invoke(event.origin, false, true);
4829                }
4830              })
4831            }
4832          })
4833      }
4834    }
4835  }
4836  ```
4837
4838  加载的html文件。
4839  ```html
4840  <!DOCTYPE html>
4841  <html>
4842  <body>
4843  <p id="locationInfo">位置信息</p>
4844  <button onclick="getLocation()">获取位置</button>
4845  <script>
4846  var locationInfo=document.getElementById("locationInfo");
4847  function getLocation(){
4848    if (navigator.geolocation) {
4849      <!-- 前端页面访问设备地理位置 -->
4850      navigator.geolocation.getCurrentPosition(showPosition);
4851    }
4852  }
4853  function showPosition(position){
4854    locationInfo.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
4855  }
4856  </script>
4857  </body>
4858  </html>
4859  ```
4860
4861### onGeolocationHide
4862
4863onGeolocationHide(callback: () => void)
4864
4865通知用户先前被调用[onGeolocationShow](#ongeolocationshow)时收到地理位置信息获取请求已被取消。
4866
4867**系统能力:** SystemCapability.Web.Webview.Core
4868
4869**参数:**
4870
4871| 参数名    | 类型   | 必填   | 说明                  |
4872| ------ | ------ | ---- | --------------------- |
4873| callback | () => void | 是 | 地理位置信息获取请求已被取消的回调函数。 |
4874
4875**示例:**
4876
4877  ```ts
4878  // xxx.ets
4879  import { webview } from '@kit.ArkWeb';
4880
4881  @Entry
4882  @Component
4883  struct WebComponent {
4884    controller: webview.WebviewController = new webview.WebviewController();
4885
4886    build() {
4887      Column() {
4888        Web({ src: 'www.example.com', controller: this.controller })
4889          .geolocationAccess(true)
4890          .onGeolocationHide(() => {
4891            console.log("onGeolocationHide...");
4892          })
4893      }
4894    }
4895  }
4896  ```
4897
4898### onFullScreenEnter<sup>9+</sup>
4899
4900onFullScreenEnter(callback: OnFullScreenEnterCallback)
4901
4902通知开发者Web组件进入全屏模式。
4903
4904**系统能力:** SystemCapability.Web.Webview.Core
4905
4906**参数:**
4907
4908| 参数名    | 类型   | 必填   | 说明                  |
4909| ------ | ------ | ---- | --------------------- |
4910| callback | [OnFullScreenEnterCallback](#onfullscreenentercallback12) | 是 | Web组件进入全屏时的回调信息。 |
4911
4912**示例:**
4913
4914  ```ts
4915  // xxx.ets
4916  import { webview } from '@kit.ArkWeb';
4917
4918  @Entry
4919  @Component
4920  struct WebComponent {
4921    controller: webview.WebviewController = new webview.WebviewController();
4922    handler: FullScreenExitHandler | null = null;
4923
4924    build() {
4925      Column() {
4926        Web({ src: 'www.example.com', controller: this.controller })
4927          .onFullScreenEnter((event) => {
4928            console.log("onFullScreenEnter videoWidth: " + event.videoWidth +
4929              ", videoHeight: " + event.videoHeight);
4930            // 应用可以通过 this.handler.exitFullScreen() 主动退出全屏。
4931            this.handler = event.handler;
4932          })
4933      }
4934    }
4935  }
4936  ```
4937
4938### onFullScreenExit<sup>9+</sup>
4939
4940onFullScreenExit(callback: () => void)
4941
4942通知开发者Web组件退出全屏模式。
4943
4944**系统能力:** SystemCapability.Web.Webview.Core
4945
4946**参数:**
4947
4948| 参数名    | 类型   | 必填   | 说明                  |
4949| ------ | ------ | ---- | --------------------- |
4950| callback | () => void | 是 | 退出全屏模式时的回调函数。 |
4951
4952**示例:**
4953
4954  ```ts
4955  // xxx.ets
4956  import { webview } from '@kit.ArkWeb';
4957
4958  @Entry
4959  @Component
4960  struct WebComponent {
4961    controller: webview.WebviewController = new webview.WebviewController();
4962    handler: FullScreenExitHandler | null = null;
4963
4964    build() {
4965      Column() {
4966        Web({ src: 'www.example.com', controller: this.controller })
4967          .onFullScreenExit(() => {
4968            console.log("onFullScreenExit...")
4969            if (this.handler) {
4970              this.handler.exitFullScreen();
4971            }
4972          })
4973          .onFullScreenEnter((event) => {
4974            this.handler = event.handler;
4975          })
4976      }
4977    }
4978  }
4979  ```
4980
4981### onWindowNew<sup>9+</sup>
4982
4983onWindowNew(callback: Callback\<OnWindowNewEvent\>)
4984
4985使能multiWindowAccess情况下,通知用户新建窗口请求。
4986若不调用event.handler.setWebController接口,会造成render进程阻塞。
4987如果没有创建新窗口,调用event.handler.setWebController接口时设置成null,通知Web没有创建新窗口。
4988
4989应用应谨慎的显示新窗口:不要简单的覆盖在原web组件上,防止误导用户正在查看哪个网站,如果应用显示主页的URL,请确保也以相似的方式显示新窗口的URL。否则请考虑完全禁止创建新窗口。
4990
4991注意:没有可靠的方式判断哪个页面请求了新窗口,该请求可能来自第三方iframe
4992
4993**系统能力:** SystemCapability.Web.Webview.Core
4994
4995**参数:**
4996
4997| 参数名    | 类型   | 必填   | 说明                  |
4998| ------ | ------ | ---- | --------------------- |
4999| callback       | Callback\<[OnWindowNewEvent](#onwindownewevent12)\>           | 是 | 网页要求用户创建窗口时触发的回调。    |
5000
5001**示例:**
5002
5003  ```ts
5004  // xxx.ets
5005  import { webview } from '@kit.ArkWeb';
5006
5007  // 在同一page页有两个Web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
5008  @CustomDialog
5009  struct NewWebViewComp {
5010    controller?: CustomDialogController;
5011    webviewController1: webview.WebviewController = new webview.WebviewController();
5012
5013    build() {
5014      Column() {
5015        Web({ src: "", controller: this.webviewController1 })
5016          .javaScriptAccess(true)
5017          .multiWindowAccess(false)
5018          .onWindowExit(() => {
5019            console.info("NewWebViewComp onWindowExit");
5020            if (this.controller) {
5021              this.controller.close();
5022            }
5023          })
5024      }
5025    }
5026  }
5027
5028  @Entry
5029  @Component
5030  struct WebComponent {
5031    controller: webview.WebviewController = new webview.WebviewController();
5032    dialogController: CustomDialogController | null = null;
5033
5034    build() {
5035      Column() {
5036        Web({ src: 'www.example.com', controller: this.controller })
5037          .javaScriptAccess(true)
5038          // 需要使能multiWindowAccess
5039          .multiWindowAccess(true)
5040          .allowWindowOpenMethod(true)
5041          .onWindowNew((event) => {
5042            if (this.dialogController) {
5043              this.dialogController.close();
5044            }
5045            let popController: webview.WebviewController = new webview.WebviewController();
5046            this.dialogController = new CustomDialogController({
5047              builder: NewWebViewComp({ webviewController1: popController })
5048            })
5049            this.dialogController.open();
5050            // 将新窗口对应WebviewController返回给Web内核。
5051            // 若不调用event.handler.setWebController接口,会造成render进程阻塞。
5052            // 如果没有创建新窗口,调用event.handler.setWebController接口时设置成null,通知Web没有创建新窗口。
5053            event.handler.setWebController(popController);
5054          })
5055      }
5056    }
5057  }
5058  ```
5059
5060### onWindowExit<sup>9+</sup>
5061
5062onWindowExit(callback: () => void)
5063
5064通知用户窗口关闭请求。和[onWindowNew](#onwindownew9)一样,从安全角度讲,应用应该确保用户可以知道他们交互的页面已关闭。
5065
5066**系统能力:** SystemCapability.Web.Webview.Core
5067
5068**参数:**
5069
5070| 参数名    | 类型   | 必填   | 说明                  |
5071| ------ | ------ | ---- | --------------------- |
5072| callback | () => void | 是 | 窗口请求关闭的回调函数。 |
5073
5074**示例:**
5075
5076  ```ts
5077  // xxx.ets
5078  import { webview } from '@kit.ArkWeb';
5079
5080  @Entry
5081  @Component
5082  struct WebComponent {
5083    controller: webview.WebviewController = new webview.WebviewController();
5084
5085    build() {
5086      Column() {
5087        Web({ src: 'www.example.com', controller: this.controller })
5088          .onWindowExit(() => {
5089            console.log("onWindowExit...");
5090          })
5091      }
5092    }
5093  }
5094  ```
5095
5096### onSearchResultReceive<sup>9+</sup>
5097
5098onSearchResultReceive(callback: Callback\<OnSearchResultReceiveEvent\>)
5099
5100回调通知调用方网页页内查找的结果。
5101
5102**系统能力:** SystemCapability.Web.Webview.Core
5103
5104**参数:**
5105
5106| 参数名    | 类型   | 必填   | 说明                  |
5107| ------ | ------ | ---- | --------------------- |
5108| callback | Callback\<[OnSearchResultReceiveEvent](#onsearchresultreceiveevent12)\>  | 是 | 通知调用方网页页内查找的结果。         |
5109
5110**示例:**
5111
5112  ```ts
5113  // xxx.ets
5114  import { webview } from '@kit.ArkWeb';
5115
5116  @Entry
5117  @Component
5118  struct WebComponent {
5119    controller: webview.WebviewController = new webview.WebviewController();
5120
5121    build() {
5122      Column() {
5123        Web({ src: 'www.example.com', controller: this.controller })
5124          .onSearchResultReceive(ret => {
5125            if (ret) {
5126              console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
5127                "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
5128            }
5129          })
5130      }
5131    }
5132  }
5133  ```
5134
5135### onDataResubmitted<sup>9+</sup>
5136
5137onDataResubmitted(callback: Callback\<OnDataResubmittedEvent\>)
5138
5139设置网页表单可以重新提交时触发的回调函数。
5140
5141**系统能力:** SystemCapability.Web.Webview.Core
5142
5143**参数:**
5144
5145| 参数名    | 类型   | 必填   | 说明                  |
5146| ------ | ------ | ---- | --------------------- |
5147| callback | Callback\<[OnDataResubmittedEvent](#ondataresubmittedevent12)\> | 是 | 网页表单可以重新提交时触发。 |
5148
5149**示例:**
5150
5151  ```ts
5152  // xxx.ets
5153  import { webview } from '@kit.ArkWeb';
5154  import { BusinessError } from '@kit.BasicServicesKit';
5155
5156  @Entry
5157  @Component
5158  struct WebComponent {
5159    controller: webview.WebviewController = new webview.WebviewController();
5160
5161    build() {
5162      Column() {
5163        // 在网页中点击提交之后,点击refresh按钮可以重新提交时的触发函数。
5164        Button('refresh')
5165          .onClick(() => {
5166            try {
5167              this.controller.refresh();
5168            } catch (error) {
5169              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5170            }
5171          })
5172        Web({ src: $rawfile('index.html'), controller: this.controller })
5173          .onDataResubmitted((event) => {
5174            console.log('onDataResubmitted');
5175            event.handler.resend();
5176          })
5177      }
5178    }
5179  }
5180  ```
5181
5182 加载的html文件。
5183 ```html
5184  <!-- index.html -->
5185  <!DOCTYPE html>
5186  <html>
5187  <head>
5188    <meta charset="utf-8">
5189  </head>
5190  <body>
5191    <form action="http://httpbin.org/post" method="post">
5192      <input type="text" name="username">
5193      <input type="submit" name="提交">
5194    </form>
5195  </body>
5196  </html>
5197 ```
5198
5199### onPageVisible<sup>9+</sup>
5200
5201onPageVisible(callback: Callback\<OnPageVisibleEvent\>)
5202
5203设置旧页面不再呈现,新页面即将可见时触发的回调函数。
5204
5205**系统能力:** SystemCapability.Web.Webview.Core
5206
5207**参数:**
5208
5209| 参数名    | 类型   | 必填   | 说明                  |
5210| ------ | ------ | ---- | --------------------- |
5211| callback  | Callback\<[OnPageVisibleEvent](#onpagevisibleevent12)\> | 是 | 旧页面不再呈现,新页面即将可见时触发的回调函数。 |
5212
5213**示例:**
5214
5215  ```ts
5216  // xxx.ets
5217  import { webview } from '@kit.ArkWeb';
5218
5219  @Entry
5220  @Component
5221  struct WebComponent {
5222    controller: webview.WebviewController = new webview.WebviewController();
5223
5224    build() {
5225      Column() {
5226        Web({ src: 'www.example.com', controller: this.controller })
5227          .onPageVisible((event) => {
5228            console.log('onPageVisible url:' + event.url);
5229          })
5230      }
5231    }
5232  }
5233  ```
5234
5235### onInterceptKeyEvent<sup>9+</sup>
5236
5237onInterceptKeyEvent(callback: (event: KeyEvent) => boolean)
5238
5239设置键盘事件的回调函数,该回调在被Webview使用前触发。
5240
5241**系统能力:** SystemCapability.Web.Webview.Core
5242
5243**参数:**
5244
5245| 参数名    | 类型   | 必填   | 说明                  |
5246| ------ | ------ | ---- | --------------------- |
5247| callback | (event:[KeyEvent](../apis-arkui/arkui-ts/ts-universal-events-key.md#keyevent对象说明)) => boolean | 是 | 触发的KeyEvent事件。返回值:回调函数通过返回boolean类型值来决定是否继续将该KeyEvent传入Webview内核。 |
5248
5249**示例:**
5250
5251  ```ts
5252  // xxx.ets
5253  import { webview } from '@kit.ArkWeb';
5254
5255  @Entry
5256  @Component
5257  struct WebComponent {
5258    controller: webview.WebviewController = new webview.WebviewController();
5259
5260    build() {
5261      Column() {
5262        Web({ src: 'www.example.com', controller: this.controller })
5263          .onInterceptKeyEvent((event) => {
5264            if (event.keyCode == 2017 || event.keyCode == 2018) {
5265              console.info(`onInterceptKeyEvent get event.keyCode ${event.keyCode}`);
5266              return true;
5267            }
5268            return false;
5269          })
5270      }
5271    }
5272  }
5273  ```
5274
5275### onTouchIconUrlReceived<sup>9+</sup>
5276
5277onTouchIconUrlReceived(callback: Callback\<OnTouchIconUrlReceivedEvent\>)
5278
5279设置接收到apple-touch-icon url地址时的回调函数。
5280
5281**系统能力:** SystemCapability.Web.Webview.Core
5282
5283**参数:**
5284
5285| 参数名    | 类型   | 必填   | 说明                  |
5286| ------ | ------ | ---- | --------------------- |
5287| callback  | Callback\<[OnTouchIconUrlReceivedEvent](#ontouchiconurlreceivedevent12)\>  | 是 | 接收到的apple-touch-icon url地址时触发。 |
5288
5289**示例:**
5290
5291  ```ts
5292  // xxx.ets
5293  import { webview } from '@kit.ArkWeb';
5294
5295  @Entry
5296  @Component
5297  struct WebComponent {
5298    controller: webview.WebviewController = new webview.WebviewController();
5299
5300    build() {
5301      Column() {
5302        Web({ src: 'www.baidu.com', controller: this.controller })
5303          .onTouchIconUrlReceived((event) => {
5304            console.log('onTouchIconUrlReceived:' + JSON.stringify(event));
5305          })
5306      }
5307    }
5308  }
5309  ```
5310
5311### onFaviconReceived<sup>9+</sup>
5312
5313onFaviconReceived(callback: Callback\<OnFaviconReceivedEvent\>)
5314
5315设置应用为当前页面接收到新的favicon时的回调函数。
5316
5317**系统能力:** SystemCapability.Web.Webview.Core
5318
5319**参数:**
5320
5321| 参数名    | 类型   | 必填   | 说明                  |
5322| ------ | ------ | ---- | --------------------- |
5323| callback | Callback\<[OnFaviconReceivedEvent](#onfaviconreceivedevent12)\> | 是 | 当前页面接收到新的favicon时触发。 |
5324
5325**示例:**
5326
5327  ```ts
5328  // xxx.ets
5329  import { webview } from '@kit.ArkWeb';
5330  import { image } from '@kit.ImageKit';
5331
5332  @Entry
5333  @Component
5334  struct WebComponent {
5335    controller: webview.WebviewController = new webview.WebviewController();
5336    @State icon: image.PixelMap | undefined = undefined;
5337
5338    build() {
5339      Column() {
5340        Web({ src: 'www.example.com', controller: this.controller })
5341          .onFaviconReceived((event) => {
5342            console.log('onFaviconReceived');
5343            this.icon = event.favicon;
5344          })
5345      }
5346    }
5347  }
5348  ```
5349
5350### onAudioStateChanged<sup>10+</sup>
5351
5352onAudioStateChanged(callback: Callback\<OnAudioStateChangedEvent\>)
5353
5354设置网页上的音频播放状态发生改变时的回调函数。
5355
5356**系统能力:** SystemCapability.Web.Webview.Core
5357
5358**参数:**
5359
5360| 参数名    | 类型   | 必填   | 说明                  |
5361| ------ | ------ | ---- | --------------------- |
5362| callback | Callback\<[OnAudioStateChangedEvent](#onaudiostatechangedevent12)\> | 是 | 网页上的音频播放状态发生改变时触发。 |
5363
5364**示例:**
5365
5366  ```ts
5367  // xxx.ets
5368  import { webview } from '@kit.ArkWeb';
5369
5370  @Entry
5371  @Component
5372  struct WebComponent {
5373    controller: webview.WebviewController = new webview.WebviewController();
5374    @State playing: boolean = false;
5375
5376    build() {
5377      Column() {
5378        Web({ src: 'www.example.com', controller: this.controller })
5379          .onAudioStateChanged(event => {
5380            this.playing = event.playing;
5381            console.debug('onAudioStateChanged playing: ' + this.playing);
5382          })
5383      }
5384    }
5385  }
5386  ```
5387
5388### onFirstContentfulPaint<sup>10+</sup>
5389
5390 onFirstContentfulPaint(callback: Callback\<OnFirstContentfulPaintEvent\>)
5391
5392设置网页首次内容绘制回调函数。
5393
5394**系统能力:** SystemCapability.Web.Webview.Core
5395
5396**参数:**
5397
5398| 参数名    | 类型   | 必填   | 说明                  |
5399| ------ | ------ | ---- | --------------------- |
5400| callback    | Callback\<[OnFirstContentfulPaintEvent](#onfirstcontentfulpaintevent12)\> | 是 | 网页首次内容绘制回调函数。          |
5401
5402**示例:**
5403
5404  ```ts
5405  // xxx.ets
5406  import { webview } from '@kit.ArkWeb';
5407
5408  @Entry
5409  @Component
5410  struct WebComponent {
5411    controller: webview.WebviewController = new webview.WebviewController();
5412
5413    build() {
5414      Column() {
5415        Web({ src: 'www.example.com', controller: this.controller })
5416          .onFirstContentfulPaint(event => {
5417            if (event) {
5418              console.log("onFirstContentfulPaint:" + "[navigationStartTick]:" +
5419              event.navigationStartTick + ", [firstContentfulPaintMs]:" +
5420              event.firstContentfulPaintMs);
5421            }
5422          })
5423      }
5424    }
5425  }
5426  ```
5427
5428### onFirstMeaningfulPaint<sup>12+</sup>
5429
5430onFirstMeaningfulPaint(callback: [OnFirstMeaningfulPaintCallback](#onfirstmeaningfulpaintcallback12))
5431
5432设置网页绘制页面主要内容回调函数。
5433
5434**系统能力:** SystemCapability.Web.Webview.Core
5435
5436**参数:**
5437
5438| 参数名    | 类型   | 必填   | 说明                  |
5439| ------ | ------ | ---- | --------------------- |
5440| callback | [OnFirstMeaningfulPaintCallback](#onfirstmeaningfulpaintcallback12) | 是 | 网页绘制页面主要内容度量信息的回调。 |
5441
5442**示例:**
5443
5444  ```ts
5445  // xxx.ets
5446  import { webview } from '@kit.ArkWeb';
5447
5448  @Entry
5449  @Component
5450  struct WebComponent {
5451    controller: webview.WebviewController = new webview.WebviewController();
5452
5453    build() {
5454      Column() {
5455        Web({ src: 'www.example.com', controller: this.controller })
5456          .onFirstMeaningfulPaint((details) => {
5457            console.log("onFirstMeaningfulPaint: [navigationStartTime]= " + details.navigationStartTime +
5458              ", [firstMeaningfulPaintTime]=" + details.firstMeaningfulPaintTime);
5459          })
5460      }
5461    }
5462  }
5463  ```
5464
5465### onLargestContentfulPaint<sup>12+</sup>
5466
5467onLargestContentfulPaint(callback: [OnLargestContentfulPaintCallback](#onlargestcontentfulpaintcallback12))
5468
5469设置网页绘制页面最大内容回调函数。
5470
5471**系统能力:** SystemCapability.Web.Webview.Core
5472
5473**参数:**
5474
5475| 参数名    | 类型   | 必填   | 说明                  |
5476| ------ | ------ | ---- | --------------------- |
5477| callback | [OnLargestContentfulPaintCallback](#onlargestcontentfulpaintcallback12) | 是 | 网页绘制页面最大内容度量信息的回调。 |
5478
5479**示例:**
5480
5481  ```ts
5482  // xxx.ets
5483  import { webview } from '@kit.ArkWeb';
5484
5485  @Entry
5486  @Component
5487  struct WebComponent {
5488    controller: webview.WebviewController = new webview.WebviewController();
5489
5490    build() {
5491      Column() {
5492        Web({ src: 'www.example.com', controller: this.controller })
5493          .onLargestContentfulPaint((details) => {
5494            console.log("onLargestContentfulPaint: [navigationStartTime]= " + details.navigationStartTime +
5495              ", [largestImagePaintTime]=" + details.largestImagePaintTime +
5496              ", [largestTextPaintTime]=" + details.largestTextPaintTime +
5497              ", [largestImageLoadStartTime]=" + details.largestImageLoadStartTime +
5498              ", [largestImageLoadEndTime]=" + details.largestImageLoadEndTime +
5499              ", [imageBPP]=" + details.imageBPP);
5500          })
5501      }
5502    }
5503  }
5504  ```
5505
5506### onLoadIntercept<sup>10+</sup>
5507
5508onLoadIntercept(callback: Callback\<OnLoadInterceptEvent, boolean\>)
5509
5510当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。
5511
5512**系统能力:** SystemCapability.Web.Webview.Core
5513
5514**参数:**
5515
5516| 参数名    | 类型   | 必填   | 说明                  |
5517| ------ | ------ | ---- | --------------------- |
5518| callback | Callback\<[OnLoadInterceptEvent](#onloadinterceptevent12), boolean\> | 是 | 截获资源加载时触发的回调。<br>返回值boolean。返回true表示阻止此次加载,否则允许此次加载。 |
5519
5520**示例:**
5521
5522  ```ts
5523  // xxx.ets
5524  import { webview } from '@kit.ArkWeb';
5525
5526  @Entry
5527  @Component
5528  struct WebComponent {
5529    controller: webview.WebviewController = new webview.WebviewController();
5530
5531    build() {
5532      Column() {
5533        Web({ src: 'www.example.com', controller: this.controller })
5534          .onLoadIntercept((event) => {
5535            console.log('url:' + event.data.getRequestUrl());
5536            console.log('isMainFrame:' + event.data.isMainFrame());
5537            console.log('isRedirect:' + event.data.isRedirect());
5538            console.log('isRequestGesture:' + event.data.isRequestGesture());
5539            return true;
5540          })
5541      }
5542    }
5543  }
5544  ```
5545
5546### onRequestSelected
5547
5548onRequestSelected(callback: () => void)
5549
5550当Web组件获得焦点时触发该回调。
5551
5552**系统能力:** SystemCapability.Web.Webview.Core
5553
5554**示例:**
5555
5556  ```ts
5557  // xxx.ets
5558  import { webview } from '@kit.ArkWeb';
5559
5560  @Entry
5561  @Component
5562  struct WebComponent {
5563    controller: webview.WebviewController = new webview.WebviewController();
5564
5565    build() {
5566      Column() {
5567        Web({ src: 'www.example.com', controller: this.controller })
5568          .onRequestSelected(() => {
5569            console.log('onRequestSelected');
5570          })
5571      }
5572    }
5573  }
5574  ```
5575### onScreenCaptureRequest<sup>10+</sup>
5576
5577onScreenCaptureRequest(callback: Callback\<OnScreenCaptureRequestEvent\>)
5578
5579通知收到屏幕捕获请求。
5580
5581**系统能力:** SystemCapability.Web.Webview.Core
5582
5583**参数:**
5584
5585| 参数名    | 类型   | 必填   | 说明                  |
5586| ------ | ------ | ---- | --------------------- |
5587| callback | Callback\<[OnScreenCaptureRequestEvent](#onscreencapturerequestevent12)\> | 是 | 通知收到屏幕捕获请求。 |
5588
5589**示例:**
5590
5591  ```ts
5592  // xxx.ets
5593  import { webview } from '@kit.ArkWeb';
5594
5595  @Entry
5596  @Component
5597  struct WebComponent {
5598    controller: webview.WebviewController = new webview.WebviewController();
5599
5600    build() {
5601      Column() {
5602        Web({ src: 'www.example.com', controller: this.controller })
5603          .onScreenCaptureRequest((event) => {
5604            if (event) {
5605              AlertDialog.show({
5606                title: 'title: ' + event.handler.getOrigin(),
5607                message: 'text',
5608                primaryButton: {
5609                  value: 'deny',
5610                  action: () => {
5611                    event.handler.deny();
5612                  }
5613                },
5614                secondaryButton: {
5615                  value: 'onConfirm',
5616                  action: () => {
5617                    event.handler.grant({ captureMode: WebCaptureMode.HOME_SCREEN });
5618                  }
5619                },
5620                cancel: () => {
5621                  event.handler.deny();
5622                }
5623              })
5624            }
5625          })
5626      }
5627    }
5628  }
5629  ```
5630
5631### onOverScroll<sup>10+</sup>
5632
5633onOverScroll(callback: Callback\<OnOverScrollEvent\>)
5634
5635该接口在网页过度滚动时触发,用于通知网页过度滚动的偏移量。
5636
5637**系统能力:** SystemCapability.Web.Webview.Core
5638
5639**参数:**
5640
5641| 参数名    | 类型   | 必填   | 说明                  |
5642| ------ | ------ | ---- | --------------------- |
5643| callback | Callback\<[OnOverScrollEvent](#onoverscrollevent12)\> | 是 | 网页过度滚动时触发。 |
5644
5645**示例:**
5646
5647  ```ts
5648  // xxx.ets
5649  import { webview } from '@kit.ArkWeb';
5650
5651  @Entry
5652  @Component
5653  struct WebComponent {
5654    controller: webview.WebviewController = new webview.WebviewController();
5655
5656    build() {
5657      Column() {
5658        Web({ src: 'www.example.com', controller: this.controller })
5659          .onOverScroll((event) => {
5660            console.info("x = " + event.xOffset);
5661            console.info("y = " + event.yOffset);
5662          })
5663      }
5664    }
5665  }
5666  ```
5667
5668### onControllerAttached<sup>10+</sup>
5669
5670onControllerAttached(callback: () => void)
5671
5672当Controller成功绑定到Web组件时触发该回调,并且该Controller必须为WebviewController,且禁止在该事件回调前调用Web组件相关的接口,否则会抛出js-error异常。
5673因该回调调用时网页还未加载,无法在回调中使用有关操作网页的接口,例如[zoomIn](js-apis-webview.md#zoomin)、[zoomOut](js-apis-webview.md#zoomout)等,可以使用[loadUrl](js-apis-webview.md#loadurl)、[getWebId](js-apis-webview.md#getwebid)等操作网页不相关的接口。
5674
5675组件生命周期详情可参考[Web组件的生命周期](../../web/web-event-sequence.md)。
5676
5677**系统能力:** SystemCapability.Web.Webview.Core
5678
5679**示例:**
5680
5681在该回调中使用loadUrl加载网页
5682  ```ts
5683  // xxx.ets
5684  import { webview } from '@kit.ArkWeb';
5685
5686  @Entry
5687  @Component
5688  struct WebComponent {
5689    controller: webview.WebviewController = new webview.WebviewController();
5690
5691    build() {
5692      Column() {
5693        Web({ src: '', controller: this.controller })
5694          .onControllerAttached(() => {
5695            this.controller.loadUrl($rawfile("index.html"));
5696          })
5697      }
5698    }
5699  }
5700  ```
5701
5702在该回调中使用getWebId
5703  ```ts
5704  // xxx.ets
5705  import { webview } from '@kit.ArkWeb';
5706  import { BusinessError } from '@kit.BasicServicesKit';
5707
5708  @Entry
5709  @Component
5710  struct WebComponent {
5711    controller: webview.WebviewController = new webview.WebviewController();
5712
5713    build() {
5714      Column() {
5715        Web({ src: $rawfile("index.html"), controller: this.controller })
5716          .onControllerAttached(() => {
5717            try {
5718              let id = this.controller.getWebId();
5719              console.log("id: " + id);
5720            } catch (error) {
5721              let code = (error as BusinessError).code;
5722              let message = (error as BusinessError).message;
5723              console.error(`ErrorCode: ${code},  Message: ${message}`);
5724            }
5725          })
5726      }
5727    }
5728  }
5729  ```
5730  加载的html文件。
5731  ```html
5732  <!-- index.html -->
5733  <!DOCTYPE html>
5734  <html>
5735      <body>
5736          <p>Hello World</p>
5737      </body>
5738  </html>
5739  ```
5740
5741### onNavigationEntryCommitted<sup>11+</sup>
5742
5743onNavigationEntryCommitted(callback: [OnNavigationEntryCommittedCallback](#onnavigationentrycommittedcallback11))
5744
5745当网页跳转提交时触发该回调。
5746
5747**系统能力:** SystemCapability.Web.Webview.Core
5748
5749**参数:**
5750
5751| 参数名    | 类型   | 必填   | 说明                  |
5752| ------ | ------ | ---- | --------------------- |
5753| callback       | [OnNavigationEntryCommittedCallback](#onnavigationentrycommittedcallback11) | 是 | 网页跳转提交时触发的回调。 |
5754
5755**示例:**
5756
5757  ```ts
5758  // xxx.ets
5759  import { webview } from '@kit.ArkWeb';
5760
5761  @Entry
5762  @Component
5763  struct WebComponent {
5764    controller: webview.WebviewController = new webview.WebviewController();
5765
5766    build() {
5767      Column() {
5768        Web({ src: 'www.example.com', controller: this.controller })
5769          .onNavigationEntryCommitted((details) => {
5770            console.log("onNavigationEntryCommitted: [isMainFrame]= " + details.isMainFrame +
5771              ", [isSameDocument]=" + details.isSameDocument +
5772              ", [didReplaceEntry]=" + details.didReplaceEntry +
5773              ", [navigationType]=" + details.navigationType +
5774              ", [url]=" + details.url);
5775          })
5776      }
5777    }
5778  }
5779  ```
5780
5781### onSafeBrowsingCheckResult<sup>11+</sup>
5782
5783onSafeBrowsingCheckResult(callback: OnSafeBrowsingCheckResultCallback)
5784
5785收到网站安全风险检查结果时触发的回调。
5786
5787**系统能力:** SystemCapability.Web.Webview.Core
5788
5789**参数:**
5790
5791| 参数名    | 类型   | 必填   | 说明                  |
5792| ------ | ------ | ---- | --------------------- |
5793| callback  | [OnSafeBrowsingCheckResultCallback](#onsafebrowsingcheckresultcallback11) | 是 | 收到网站安全风险检查结果时触发的回调。|
5794
5795**示例:**
5796
5797  ```ts
5798  // xxx.ets
5799  import { webview } from '@kit.ArkWeb';
5800
5801  export enum ThreatType {
5802    UNKNOWN = -1,
5803    THREAT_ILLEGAL = 0,
5804    THREAT_FRAUD = 1,
5805    THREAT_RISK = 2,
5806    THREAT_WARNING = 3,
5807  }
5808
5809  export class OnSafeBrowsingCheckResultCallback {
5810    threatType: ThreatType = ThreatType.UNKNOWN;
5811  }
5812
5813  @Entry
5814  @Component
5815  struct WebComponent {
5816    controller: webview.WebviewController = new webview.WebviewController();
5817
5818    build() {
5819      Column() {
5820        Web({ src: 'www.example.com', controller: this.controller })
5821          .onSafeBrowsingCheckResult((callback) => {
5822            let jsonData = JSON.stringify(callback);
5823            let json: OnSafeBrowsingCheckResultCallback = JSON.parse(jsonData);
5824            console.log("onSafeBrowsingCheckResult: [threatType]= " + json.threatType);
5825          })
5826      }
5827    }
5828  }
5829  ```
5830
5831### onNativeEmbedLifecycleChange<sup>11+</sup>
5832
5833onNativeEmbedLifecycleChange(callback: (event: NativeEmbedDataInfo) => void)
5834
5835当同层标签生命周期变化时触发该回调。
5836
5837**系统能力:** SystemCapability.Web.Webview.Core
5838
5839**参数:**
5840
5841| 参数名    | 类型   | 必填   | 说明                  |
5842| ------ | ------ | ---- | --------------------- |
5843| callback       | (event: [NativeEmbedDataInfo](#nativeembeddatainfo11)) => void | 是 | 同层标签生命周期变化时触发该回调。 |
5844
5845**示例:**
5846
5847```ts
5848// EntryAbility.ets
5849
5850import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
5851import { hilog } from '@kit.PerformanceAnalysisKit';
5852import { window } from '@kit.ArkUI';
5853import { webview } from '@kit.ArkWeb';
5854
5855export default class EntryAbility extends UIAbility {
5856  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
5857    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
5858    // API12新增:开启同层渲染BFCache开关
5859    let features = new webview.BackForwardCacheSupportedFeatures();
5860    features.nativeEmbed = true;
5861    features.mediaTakeOver = true;
5862    webview.WebviewController.enableBackForwardCache(features);
5863    webview.WebviewController.initializeWebEngine();
5864  }
5865
5866  onDestroy(): void {
5867    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
5868  }
5869
5870  onWindowStageCreate(windowStage: window.WindowStage): void {
5871    // Main window is created, set main page for this ability
5872    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
5873
5874    windowStage.loadContent('pages/Index', (err) => {
5875      if (err.code) {
5876        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
5877        return;
5878      }
5879      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
5880    });
5881  }
5882
5883  onWindowStageDestroy(): void {
5884    // Main window is destroyed, release UI related resources
5885    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
5886  }
5887
5888  onForeground(): void {
5889    // Ability has brought to foreground
5890    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
5891  }
5892
5893  onBackground(): void {
5894    // Ability has back to background
5895    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
5896  }
5897}
5898```
5899
5900  ```ts
5901  // xxx.ets
5902  import { webview } from '@kit.ArkWeb';
5903  import { BusinessError } from '@kit.BasicServicesKit';
5904
5905  @Entry
5906  @Component
5907  struct WebComponent {
5908    @State embedStatus: string = '';
5909    controller: webview.WebviewController = new webview.WebviewController();
5910
5911    build() {
5912      Column() {
5913        // 默认行为:点击按钮跳转页面,关闭index页面,使同层标签销毁。
5914        // API12新增:使能同层渲染所在的页面支持BFCache后,点击按钮跳转页面,关闭index页面,使同层标签进入BFCache。
5915        Button('Destroy')
5916        .onClick(() => {
5917          try {
5918            this.controller.loadUrl("www.example.com");
5919          } catch (error) {
5920            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5921          }
5922        })
5923
5924        // API12新增:使能同层渲染所在的页面支持BFCache后,点击按钮返回页面,使同层标签离开BFCache。
5925        Button('backward')
5926        .onClick(() => {
5927          try {
5928            this.controller.backward();
5929          } catch (error) {
5930            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5931          }
5932        })
5933
5934        // API12新增:使能同层渲染所在的页面支持BFCache后,点击按钮前进页面,使同层标签进入BFCache。
5935        Button('forward')
5936        .onClick(() => {
5937          try {
5938            this.controller.forward();
5939          } catch (error) {
5940            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
5941          }
5942        })
5943
5944
5945        // API12新增同层标签进入离开BFCache状态:非http与https协议加载的网页,Web内核不支持进入BFCache;
5946        // 因此如果要测试ENTER_BFCACHE/LEAVE_BFCACHE状态,需要将index.html放到Web服务器上,使用http或者https协议加载,如:
5947        // Web({ src: "http://xxxx/index.html", controller: this.controller })
5948        Web({ src: $rawfile("index.html"), controller: this.controller })
5949          .enableNativeEmbedMode(true)
5950          .onNativeEmbedLifecycleChange((event) => {
5951            // 当加载页面中有同层标签会触发Create。
5952            if (event.status == NativeEmbedStatus.CREATE) {
5953              this.embedStatus = 'Create';
5954            }
5955            // 当页面中同层标签移动或者缩放时会触发Update。
5956            if (event.status == NativeEmbedStatus.UPDATE) {
5957              this.embedStatus = 'Update';
5958            }
5959            // 退出页面时会触发Destroy。
5960            if (event.status == NativeEmbedStatus.DESTROY) {
5961              this.embedStatus = 'Destroy';
5962            }
5963            // 同层标签所在的页面进入BFCache时,会触发Enter BFCache。
5964            if (event.status == NativeEmbedStatus.ENTER_BFCACHE) {
5965              this.embedStatus = 'Enter BFCache';
5966            }
5967            // 同层标签所在的页面离开BFCache时,会触发Leave BFCache。
5968            if (event.status == NativeEmbedStatus.LEAVE_BFCACHE) {
5969              this.embedStatus = 'Leave BFCache';
5970            }
5971            console.log("status = " + this.embedStatus);
5972            console.log("surfaceId = " + event.surfaceId);
5973            console.log("embedId = " + event.embedId);
5974            if (event.info) {
5975              console.log("id = " + event.info.id);
5976              console.log("type = " + event.info.type);
5977              console.log("src = " + event.info.src);
5978              console.log("width = " + event.info.width);
5979              console.log("height = " + event.info.height);
5980              console.log("url = " + event.info.url);
5981            }
5982          })
5983      }
5984    }
5985  }
5986  ```
5987
5988  加载的html文件
5989  ```
5990  <!-- index.html -->
5991  <!Document>
5992  <html>
5993  <head>
5994      <title>同层渲染测试html</title>
5995      <meta name="viewport">
5996  </head>
5997  <body>
5998  <div>
5999      <div id="bodyId">
6000          <embed id="nativeButton" type = "native/button" width="800" height="800" src="test? params1=1?" style = "background-color:red"/>
6001      </div>
6002  </div>
6003  </body>
6004  </html>
6005  ```
6006
6007### onNativeEmbedGestureEvent<sup>11+</sup>
6008
6009onNativeEmbedGestureEvent(callback: (event: NativeEmbedTouchInfo) => void)
6010
6011当手指触摸到同层标签时触发该回调。
6012
6013**系统能力:** SystemCapability.Web.Webview.Core
6014
6015**参数:**
6016
6017| 参数名    | 类型   | 必填   | 说明                  |
6018| ------ | ------ | ---- | --------------------- |
6019| callback       | (event: [NativeEmbedTouchInfo](#nativeembedtouchinfo11)) => void | 是 | 手指触摸到同层标签时触发该回调。 |
6020
6021**示例:**
6022
6023  ```ts
6024  // xxx.ets
6025  import { webview } from '@kit.ArkWeb';
6026  import { NodeController, BuilderNode, NodeRenderType, FrameNode, UIContext } from "@kit.ArkUI";
6027
6028  declare class Params {
6029    text: string;
6030    width: number;
6031    height: number;
6032  }
6033
6034  declare class NodeControllerParams {
6035    surfaceId: string;
6036    renderType: NodeRenderType;
6037    width: number;
6038    height: number;
6039  }
6040
6041  class MyNodeController extends NodeController {
6042    private rootNode: BuilderNode<[Params]> | undefined | null;
6043    private surfaceId_: string = "";
6044    private renderType_: NodeRenderType = NodeRenderType.RENDER_TYPE_DISPLAY;
6045    private width_: number = 0;
6046    private height_: number = 0;
6047
6048    setRenderOption(params: NodeControllerParams) {
6049      this.surfaceId_ = params.surfaceId;
6050      this.renderType_ = params.renderType;
6051      this.width_ = params.width;
6052      this.height_ = params.height;
6053    }
6054
6055    makeNode(uiContext: UIContext): FrameNode | null {
6056      this.rootNode = new BuilderNode(uiContext, { surfaceId: this.surfaceId_, type: this.renderType_ });
6057      this.rootNode.build(wrapBuilder(ButtonBuilder), { text: "myButton", width: this.width_, height: this.height_ });
6058      return this.rootNode.getFrameNode();
6059    }
6060
6061    postEvent(event: TouchEvent | undefined): boolean {
6062      return this.rootNode?.postTouchEvent(event) as boolean;
6063    }
6064  }
6065
6066  @Component
6067  struct ButtonComponent {
6068    @Prop params: Params;
6069    @State bkColor: Color = Color.Red;
6070
6071    build() {
6072      Column() {
6073        Button(this.params.text)
6074          .height(50)
6075          .width(200)
6076          .border({ width: 2, color: Color.Red })
6077          .backgroundColor(this.bkColor)
6078
6079      }
6080      .width(this.params.width)
6081      .height(this.params.height)
6082    }
6083  }
6084
6085  @Builder
6086  function ButtonBuilder(params: Params) {
6087    ButtonComponent({ params: params })
6088      .backgroundColor(Color.Green)
6089  }
6090
6091  @Entry
6092  @Component
6093  struct WebComponent {
6094    @State eventType: string = '';
6095    controller: webview.WebviewController = new webview.WebviewController();
6096    private nodeController: MyNodeController = new MyNodeController();
6097
6098    build() {
6099      Column() {
6100        Stack() {
6101          NodeContainer(this.nodeController)
6102          Web({ src: $rawfile("index.html"), controller: this.controller })
6103            .enableNativeEmbedMode(true)
6104            .onNativeEmbedLifecycleChange((embed) => {
6105              if (embed.status == NativeEmbedStatus.CREATE) {
6106                this.nodeController.setRenderOption({
6107                  surfaceId: embed.surfaceId as string,
6108                  renderType: NodeRenderType.RENDER_TYPE_TEXTURE,
6109                  width: px2vp(embed.info?.width),
6110                  height: px2vp(embed.info?.height)
6111                });
6112                this.nodeController.rebuild();
6113              }
6114            })
6115            .onNativeEmbedGestureEvent((event) => {
6116              if (event && event.touchEvent) {
6117                if (event.touchEvent.type == TouchType.Down) {
6118                  this.eventType = 'Down'
6119                }
6120                if (event.touchEvent.type == TouchType.Up) {
6121                  this.eventType = 'Up'
6122                }
6123                if (event.touchEvent.type == TouchType.Move) {
6124                  this.eventType = 'Move'
6125                }
6126                if (event.touchEvent.type == TouchType.Cancel) {
6127                  this.eventType = 'Cancel'
6128                }
6129                let ret = this.nodeController.postEvent(event.touchEvent)
6130                if (event.result) {
6131                  event.result.setGestureEventResult(ret, true);
6132                }
6133                console.log("embedId = " + event.embedId);
6134                console.log("touchType = " + this.eventType);
6135                console.log("x = " + event.touchEvent.touches[0].x);
6136                console.log("y = " + event.touchEvent.touches[0].y);
6137                console.log("Component globalPos:(" + event.touchEvent.target.area.globalPosition.x + "," + event.touchEvent.target.area.globalPosition.y + ")");
6138                console.log("width = " + event.touchEvent.target.area.width);
6139                console.log("height = " + event.touchEvent.target.area.height);
6140              }
6141            })
6142        }
6143      }
6144    }
6145  }
6146  ```
6147加载的html文件
6148  ```
6149  <!-- index.html -->
6150  <!Document>
6151<html>
6152<head>
6153    <title>同层渲染测试html</title>
6154    <meta name="viewport">
6155</head>
6156<body>
6157<div>
6158    <div id="bodyId">
6159        <embed id="nativeButton" type = "native/button" width="800" height="800" src="test?params1=1?" style = "background-color:red"/>
6160    </div>
6161</div>
6162</body>
6163</html>
6164  ```
6165
6166### onIntelligentTrackingPreventionResult<sup>12+</sup>
6167
6168onIntelligentTrackingPreventionResult(callback: OnIntelligentTrackingPreventionCallback)
6169
6170智能防跟踪功能使能时,当追踪者cookie被拦截时触发该回调。
6171
6172**系统能力:** SystemCapability.Web.Webview.Core
6173
6174**参数:**
6175
6176| 参数名    | 类型   | 必填   | 说明                  |
6177| ------ | ------ | ---- | --------------------- |
6178| callback    | [OnIntelligentTrackingPreventionCallback](#onintelligenttrackingpreventioncallback12) | 是 | 智能防跟踪功能使能时,当追踪者cookie被拦截时触发的回调。 |
6179
6180**示例:**
6181
6182  ```ts
6183  // xxx.ets
6184  import { webview } from '@kit.ArkWeb';
6185  import { BusinessError } from '@kit.BasicServicesKit';
6186
6187  @Entry
6188  @Component
6189  struct WebComponent {
6190    controller: webview.WebviewController = new webview.WebviewController();
6191
6192    build() {
6193      Column() {
6194        // 需要打开智能防跟踪功能,才会触发onIntelligentTrackingPreventionResult回调
6195        Button('enableIntelligentTrackingPrevention')
6196          .onClick(() => {
6197            try {
6198              this.controller.enableIntelligentTrackingPrevention(true);
6199            } catch (error) {
6200              console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
6201            }
6202          })
6203        Web({ src: 'www.example.com', controller: this.controller })
6204          .onIntelligentTrackingPreventionResult((details) => {
6205            console.log("onIntelligentTrackingPreventionResult: [websiteHost]= " + details.host +
6206              ", [trackerHost]=" + details.trackerHost);
6207          })
6208      }
6209    }
6210  }
6211  ```
6212
6213### onOverrideUrlLoading<sup>12+</sup>
6214
6215onOverrideUrlLoading(callback: OnOverrideUrlLoadingCallback)
6216
6217当URL将要加载到当前Web中时,让宿主应用程序有机会获得控制权,回调函数返回true将导致当前Web中止加载URL,而返回false则会导致Web继续照常加载URL。
6218
6219POST请求不会触发该回调。
6220
6221iframe加载HTTP(s)协议或about:blank时不会触发该回调,加载非HTTP(s)协议的跳转可以触发。调用loadUrl(String)主动触发的跳转不会触发该回调。
6222
6223不要使用相同的URL调用loadUrl(String)方法,然后返回true。这样做会不必要地取消当前的加载并重新使用相同的URL开始新的加载。继续加载给定URL的正确方式是直接返回false,而不是调用loadUrl(String)。
6224
6225**系统能力:** SystemCapability.Web.Webview.Core
6226
6227**参数:**
6228
6229| 参数名    | 类型   | 必填   | 说明                  |
6230| ------ | ------ | ---- | --------------------- |
6231| callback       | [OnOverrideUrlLoadingCallback](#onoverrideurlloadingcallback12) | 是 | onOverrideUrlLoading的回调。 |
6232
6233**示例:**
6234
6235  ```ts
6236  // xxx.ets
6237  import { webview } from '@kit.ArkWeb';
6238
6239  @Entry
6240  @Component
6241  struct WebComponent {
6242    controller: webview.WebviewController = new webview.WebviewController();
6243
6244    build() {
6245      Column() {
6246        Web({ src: $rawfile("index.html"), controller: this.controller })
6247          .onOverrideUrlLoading((webResourceRequest: WebResourceRequest) => {
6248            if (webResourceRequest && webResourceRequest.getRequestUrl() == "about:blank") {
6249              return true;
6250            }
6251            return false;
6252          })
6253      }
6254    }
6255  }
6256  ```
6257
6258  加载的html文件。
6259  ```html
6260  <!--index.html-->
6261  <!DOCTYPE html>
6262  <html>
6263  <head>
6264    <title>测试网页</title>
6265  </head>
6266  <body>
6267    <h1>onOverrideUrlLoading Demo</h1>
6268    <a href="about:blank">Click here</a>// 访问about:blank。
6269  </body>
6270  </html>
6271  ```
6272
6273### onViewportFitChanged<sup>12+</sup>
6274
6275onViewportFitChanged(callback: OnViewportFitChangedCallback)
6276
6277网页meta中viewport-fit配置项更改时触发该回调,应用可在此回调中自适应布局视口。
6278
6279**系统能力:** SystemCapability.Web.Webview.Core
6280
6281**参数:**
6282
6283| 参数名    | 类型   | 必填   | 说明                  |
6284| ------ | ------ | ---- | --------------------- |
6285| callback | [OnViewportFitChangedCallback](#onviewportfitchangedcallback12) | 是 | 网页meta中viewport-fit配置项更改时触发的回调。 |
6286
6287**示例:**
6288
6289  ```ts
6290  // xxx.ets
6291  import { webview } from '@kit.ArkWeb';
6292
6293  @Entry
6294  @Component
6295  struct WebComponent {
6296    controller: webview.WebviewController = new webview.WebviewController();
6297
6298    build() {
6299      Column() {
6300        Web({ src: $rawfile('index.html'), controller: this.controller })
6301          .onViewportFitChanged((data) => {
6302            let jsonData = JSON.stringify(data);
6303            let viewportFit: ViewportFit = JSON.parse(jsonData).viewportFit;
6304            if (viewportFit === ViewportFit.COVER) {
6305              // index.html网页支持沉浸式布局,可调用expandSafeArea调整web控件布局视口覆盖避让区域(状态栏或导航条)。
6306            } else if (viewportFit === ViewportFit.CONTAINS) {
6307              // index.html网页不支持沉浸式布局,可调用expandSafeArea调整web控件布局视口为安全区域。
6308            } else {
6309              // 默认值,可不作处理
6310            }
6311          })
6312      }
6313    }
6314  }
6315  ```
6316
6317  加载的html文件。
6318  ```html
6319  <!-- index.html -->
6320  <!DOCTYPE html>
6321  <html>
6322    <head>
6323      <meta name="viewport" content="width=device-width,viewport-fit=cover">
6324    </head>
6325    <body>
6326      <div style="position: absolute; bottom: 0; margin-bottom: env(safe-area-inset-bottom)"></div>
6327    </body>
6328  </html>
6329  ```
6330
6331### onInterceptKeyboardAttach<sup>12+</sup>
6332
6333onInterceptKeyboardAttach(callback: WebKeyboardCallback)
6334
6335网页中可编辑元素(如input标签)拉起软键盘之前会回调该接口,应用可以使用该接口拦截系统软键盘的弹出,配置应用定制的软键盘(应用根据该接口可以决定使用系统默认软键盘/定制enter键的系统软键盘/全部由应用自定义的软键盘)。
6336
6337**系统能力:** SystemCapability.Web.Webview.Core
6338
6339**参数:**
6340
6341| 参数名    | 类型   | 必填   | 说明                  |
6342| ------ | ------ | ---- | --------------------- |
6343| callback | [WebKeyboardCallback](#webkeyboardcallback12) | 是 | 拦截网页拉起软键盘回调。 |
6344
6345**示例:**
6346
6347  ```ts
6348  // xxx.ets
6349  import { webview } from '@kit.ArkWeb';
6350  import { inputMethodEngine } from '@kit.IMEKit';
6351
6352  @Entry
6353  @Component
6354  struct WebComponent {
6355    controller: webview.WebviewController = new webview.WebviewController();
6356    webKeyboardController: WebKeyboardController = new WebKeyboardController()
6357    inputAttributeMap: Map<string, number> = new Map([
6358        ['UNSPECIFIED', inputMethodEngine.ENTER_KEY_TYPE_UNSPECIFIED],
6359        ['GO', inputMethodEngine.ENTER_KEY_TYPE_GO],
6360        ['SEARCH', inputMethodEngine.ENTER_KEY_TYPE_SEARCH],
6361        ['SEND', inputMethodEngine.ENTER_KEY_TYPE_SEND],
6362        ['NEXT', inputMethodEngine.ENTER_KEY_TYPE_NEXT],
6363        ['DONE', inputMethodEngine.ENTER_KEY_TYPE_DONE],
6364        ['PREVIOUS', inputMethodEngine.ENTER_KEY_TYPE_PREVIOUS]
6365      ])
6366
6367      /**
6368       * 自定义键盘组件Builder
6369       */
6370      @Builder
6371      customKeyboardBuilder() {
6372		  // 这里实现自定义键盘组件,对接WebKeyboardController实现输入、删除、关闭等操作。
6373        Row() {
6374          Text("完成")
6375            .fontSize(20)
6376            .fontColor(Color.Blue)
6377            .onClick(() => {
6378              this.webKeyboardController.close();
6379            })
6380          // 插入字符。
6381          Button("insertText").onClick(() => {
6382            this.webKeyboardController.insertText('insert ');
6383          }).margin({
6384            bottom: 200,
6385          })
6386          // 从后往前删除length参数指定长度的字符。
6387          Button("deleteForward").onClick(() => {
6388            this.webKeyboardController.deleteForward(1);
6389          }).margin({
6390            bottom: 200,
6391          })
6392          // 从前往后删除length参数指定长度的字符。
6393          Button("deleteBackward").onClick(() => {
6394            this.webKeyboardController.deleteBackward(1);
6395          }).margin({
6396            left: -220,
6397          })
6398          // 插入功能按键。
6399          Button("sendFunctionKey").onClick(() => {
6400            this.webKeyboardController.sendFunctionKey(6);
6401          })
6402        }
6403      }
6404
6405    build() {
6406      Column() {
6407        Web({ src: $rawfile('index.html'), controller: this.controller })
6408        .onInterceptKeyboardAttach((KeyboardCallbackInfo) => {
6409          // option初始化,默认使用系统默认键盘
6410          let option: WebKeyboardOptions = {
6411            useSystemKeyboard: true,
6412          };
6413          if (!KeyboardCallbackInfo) {
6414            return option;
6415          }
6416
6417          // 保存WebKeyboardController,使用自定义键盘时候,需要使用该handler控制输入、删除、软键盘关闭等行为
6418          this.webKeyboardController = KeyboardCallbackInfo.controller
6419          let attributes: Record<string, string> = KeyboardCallbackInfo.attributes
6420          // 遍历attributes
6421          let attributeKeys = Object.keys(attributes)
6422          for (let i = 0; i < attributeKeys.length; i++) {
6423            console.log('WebCustomKeyboard key = ' + attributeKeys[i] + ', value = ' + attributes[attributeKeys[i]])
6424          }
6425
6426          if (attributes) {
6427            if (attributes['data-keyboard'] == 'customKeyboard') {
6428              // 根据html可编辑元素的属性,判断使用不同的软键盘,例如这里如果属性包含有data-keyboard,且值为customKeyboard,则使用自定义键盘
6429              console.log('WebCustomKeyboard use custom keyboard')
6430              option.useSystemKeyboard = false;
6431              // 设置自定义键盘builder
6432              option.customKeyboard = () => {
6433                this.customKeyboardBuilder()
6434              }
6435              return option;
6436            }
6437
6438            if (attributes['keyboard-return'] != undefined) {
6439              // 根据html可编辑元素的属性,判断使用不同的软键盘,例如这里如果属性包含有keyboard-return,使用系统键盘,并且指定系统软键盘enterKey类型
6440              option.useSystemKeyboard = true;
6441              let enterKeyType: number | undefined = this.inputAttributeMap.get(attributes['keyboard-return'])
6442              if (enterKeyType != undefined) {
6443                option.enterKeyType = enterKeyType
6444              }
6445              return option;
6446            }
6447          }
6448
6449          return option;
6450        })
6451      }
6452    }
6453  }
6454  ```
6455
6456  加载的html文件。
6457  ```html
6458  <!-- index.html -->
6459    <!DOCTYPE html>
6460    <html>
6461
6462    <head>
6463        <meta charset="utf-8">
6464        <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0">
6465    </head>
6466
6467    <body>
6468
6469    <p style="font-size:12px">input标签,原有默认行为:</p>
6470    <input type="text" style="width: 300px; height: 20px"><br>
6471    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6472
6473    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key UNSPECIFIED:</p>
6474    <input type="text" keyboard-return="UNSPECIFIED" style="width: 300px; height: 20px"><br>
6475    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6476
6477    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key GO:</p>
6478    <input type="text" keyboard-return="GO" style="width: 300px; height: 20px"><br>
6479    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6480
6481    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key SEARCH:</p>
6482    <input type="text" keyboard-return="SEARCH" style="width: 300px; height: 20px"><br>
6483    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6484
6485    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key SEND:</p>
6486    <input type="text" keyboard-return="SEND" style="width: 300px; height: 20px"><br>
6487    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6488
6489    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key NEXT:</p>
6490    <input type="text" keyboard-return="NEXT" style="width: 300px; height: 20px"><br>
6491    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6492
6493    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key DONE:</p>
6494    <input type="text" keyboard-return="DONE" style="width: 300px; height: 20px"><br>
6495    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6496
6497    <p style="font-size:12px">input标签,系统键盘自定义enterKeyType属性 enter key PREVIOUS:</p>
6498    <input type="text" keyboard-return="PREVIOUS" style="width: 300px; height: 20px"><br>
6499    <hr style="height:2px;border-width:0;color:gray;background-color:gray">
6500
6501    <p style="font-size:12px">input标签,应用自定义键盘:</p>
6502    <input type="text" data-keyboard="customKeyboard" style="width: 300px; height: 20px"><br>
6503
6504    </body>
6505
6506    </html>
6507  ```
6508
6509### onNativeEmbedVisibilityChange<sup>12+</sup>
6510
6511onNativeEmbedVisibilityChange(callback: OnNativeEmbedVisibilityChangeCallback)
6512
6513网页中同层标签(如Embed标签或Object标签)在视口内的可见性发生变化时会触发该回调。同层标签默认不可见,如果首次进入页面可见则会上报,不可见则不会上报,当同层标签大小由非0值变为0 *0时,不会上报不可见,由0 *0变为非0值时会上报可见。同层标签全部不可见才算不可见,部分可见或全部可见算作可见。
6514
6515**系统能力:** SystemCapability.Web.Webview.Core
6516
6517**参数:**
6518
6519| 参数名    | 类型   | 必填   | 说明                  |
6520| ------ | ------ | ---- | --------------------- |
6521| callback       | [OnNativeEmbedVisibilityChangeCallback](#onnativeembedvisibilitychangecallback12) | 是 | 同层标签可见性变化时触发该回调。 |
6522
6523**示例:**
6524
6525  ```ts
6526  // xxx.ets
6527  import { webview } from '@kit.ArkWeb';
6528  import { NodeController, BuilderNode, NodeRenderType, FrameNode, UIContext } from "@kit.ArkUI";
6529
6530  declare class Params {
6531    text: string;
6532    width: number;
6533    height: number;
6534  }
6535
6536  declare class NodeControllerParams {
6537    surfaceId: string;
6538    renderType: NodeRenderType;
6539    width: number;
6540    height: number;
6541  }
6542
6543  class MyNodeController extends NodeController {
6544    private rootNode: BuilderNode<[Params]> | undefined | null;
6545    private surfaceId_: string = "";
6546    private renderType_: NodeRenderType = NodeRenderType.RENDER_TYPE_DISPLAY;
6547    private width_: number = 0;
6548    private height_: number = 0;
6549
6550    setRenderOption(params: NodeControllerParams) {
6551      this.surfaceId_ = params.surfaceId;
6552      this.renderType_ = params.renderType;
6553      this.width_ = params.width;
6554      this.height_ = params.height;
6555    }
6556
6557    makeNode(uiContext: UIContext): FrameNode | null {
6558      this.rootNode = new BuilderNode(uiContext, { surfaceId: this.surfaceId_, type: this.renderType_ });
6559      this.rootNode.build(wrapBuilder(ButtonBuilder), { text: "myButton", width: this.width_, height: this.height_ });
6560      return this.rootNode.getFrameNode();
6561    }
6562
6563    postEvent(event: TouchEvent | undefined): boolean {
6564      return this.rootNode?.postTouchEvent(event) as boolean;
6565    }
6566  }
6567
6568  @Component
6569  struct ButtonComponent {
6570    @Prop params: Params;
6571    @State bkColor: Color = Color.Red;
6572
6573    build() {
6574      Column() {
6575        Button(this.params.text)
6576          .height(50)
6577          .width(200)
6578          .border({ width: 2, color: Color.Red })
6579          .backgroundColor(this.bkColor)
6580
6581      }
6582      .width(this.params.width)
6583      .height(this.params.height)
6584    }
6585  }
6586
6587  @Builder
6588  function ButtonBuilder(params: Params) {
6589    ButtonComponent({ params: params })
6590      .backgroundColor(Color.Green)
6591  }
6592
6593  @Entry
6594  @Component
6595  struct WebComponent {
6596    @State embedVisibility: string = '';
6597    controller: webview.WebviewController = new webview.WebviewController();
6598    private nodeController: MyNodeController = new MyNodeController();
6599
6600    build() {
6601      Column() {
6602        Stack() {
6603          NodeContainer(this.nodeController)
6604          Web({ src: $rawfile("index.html"), controller: this.controller })
6605            .enableNativeEmbedMode(true)
6606            .onNativeEmbedLifecycleChange((embed) => {
6607              if (embed.status == NativeEmbedStatus.CREATE) {
6608                this.nodeController.setRenderOption({
6609                  surfaceId: embed.surfaceId as string,
6610                  renderType: NodeRenderType.RENDER_TYPE_TEXTURE,
6611                  width: px2vp(embed.info?.width),
6612                  height: px2vp(embed.info?.height)
6613                });
6614                this.nodeController.rebuild();
6615              }
6616            })
6617            .onNativeEmbedVisibilityChange((embed) => {
6618              if (embed.visibility) {
6619                this.embedVisibility = 'Visible';
6620              } else {
6621                this.embedVisibility = 'Hidden';
6622              }
6623              console.log("embedId = " + embed.embedId);
6624              console.log("visibility = " + embed.visibility);
6625            })
6626        }
6627      }
6628    }
6629  }
6630  ```
6631
6632  加载的html文件
6633  ```html
6634  <!-- index.html -->
6635  <!DOCTYPE html>
6636  <html>
6637  <head>
6638      <title>同层渲染测试html</title>
6639      <meta name="viewport">
6640  </head>
6641  <body>
6642  <div>
6643      <div id="bodyId">
6644          <embed id="nativeButton" type = "native/button" width="800" height="800" src="test?params1=1?" style = "background-color:red"/>
6645      </div>
6646  </div>
6647  </body>
6648  </html>
6649  ```
6650
6651## WebKeyboardCallback<sup>12+</sup>
6652
6653type WebKeyboardCallback = (keyboardCallbackInfo: WebKeyboardCallbackInfo) => WebKeyboardOptions
6654
6655拦截网页可编辑元素拉起软键盘的回调,一般在点击网页input标签时触发。
6656
6657**系统能力:** SystemCapability.Web.Webview.Core
6658
6659**参数:**
6660
6661| 参数名           | 类型   | 必填   | 说明               |
6662| ------------- | ------ | ---- | ------------------ |
6663| keyboardCallbackInfo    | [WebKeyboardCallbackInfo](#webkeyboardcallbackinfo12) | 是    | 拦截网页拉起软键盘回调通知的入参,其中包括[WebKeyboardController](#webkeyboardcontroller12)、可编辑元素的属性。  |
6664
6665**返回值:**
6666
6667| 类型               | 说明                                                         |
6668| ------------------ | ------------------------------------------------------------ |
6669| [WebKeyboardOptions](#webkeyboardoptions12) | 回调函数通过返回[WebKeyboardOptions](#webkeyboardoptions12)来决定ArkWeb内核拉起不同类型的软键盘。 |
6670
6671## WebKeyboardCallbackInfo<sup>12+</sup>
6672
6673拦截网页可编辑元素拉起软键盘的回调入参,其中包括[WebKeyboardController](#webkeyboardcontroller12)、可编辑元素的属性。
6674
6675**系统能力:** SystemCapability.Web.Webview.Core
6676
6677| 名称             | 类型      | 必填   | 说明                                       |
6678| -------------- | ------- | ---- | ---------------------------------------- |
6679| controller | [WebKeyboardController](#webkeyboardcontroller12)  | 是    | 提供控制自定义键盘的输入、删除、关闭等操作。 |
6680| attributes | Record<string, string> | 是    | 触发本次软键盘弹出的网页元素属性。
6681
6682## WebKeyboardOptions<sup>12+</sup>
6683
6684拦截网页可编辑元素拉起软键盘的回调返回值,可以指定使用的键盘类型,并返回给web内核,以控制拉起不同类型的软键盘;
6685
6686**系统能力:** SystemCapability.Web.Webview.Core
6687
6688| 名称             | 类型      | 必填   | 说明                                       |
6689| -------------- | ------- | ---- | ---------------------------------------- |
6690| useSystemKeyboard | boolean  | 是    | 是否使用系统默认软键盘。 |
6691| enterKeyType | number | 否    | 指定系统软键盘enter键的类型,取值范围见输入框架的定义[EnterKeyType](../apis-ime-kit/js-apis-inputmethod.md#enterkeytype10),该参数为可选参数,当useSystemKeyboard为true,并且设置了有效的enterKeyType时候,才有效。|
6692| customKeyboard | [CustomBuilder](../apis-arkui/arkui-ts/ts-types.md#custombuilder8) | 否    | 指定自定义键盘组件builder,可选参数,当useSystemKeyboard为false时,需要设置该参数,然后Web组件会拉起该自定义键盘。
6693
6694## WebKeyboardController<sup>12+</sup>
6695
6696控制自定义键盘的输入、删除、关闭等操作。示例代码参考[onInterceptKeyboardAttach](#oninterceptkeyboardattach12)。
6697
6698### constructor<sup>12+</sup>
6699
6700constructor()
6701
6702WebKeyboardController的构造函数。
6703
6704**系统能力:** SystemCapability.Web.Webview.Core
6705
6706### insertText<sup>12+</sup>
6707
6708insertText(text: string): void
6709
6710插入字符。
6711
6712**系统能力:** SystemCapability.Web.Webview.Core
6713
6714**参数:**
6715
6716| 参数名 | 类型 | 必填 | 说明 |
6717| ------ | -------- | ---- | --------------------- |
6718| text | string | 是 | 向Web输入框插入字符。 |
6719
6720### deleteForward<sup>12+</sup>
6721
6722deleteForward(length: number): void
6723
6724从后往前删除length参数指定长度的字符。
6725
6726**系统能力:** SystemCapability.Web.Webview.Core
6727
6728**参数:**
6729
6730| 参数名 | 类型 | 必填 | 说明                 |
6731| ------ | -------- | ---- | ------------------------ |
6732| length | number   | 是   | 从后往前删除字符的长度。 |
6733
6734### deleteBackward12+</sup>
6735
6736deleteBackward(length: number): void
6737
6738从前往后删除length参数指定长度的字符。
6739
6740**系统能力:** SystemCapability.Web.Webview.Core
6741
6742**参数:**
6743
6744| 参数名 | 类型 | 必填 | 说明                 |
6745| ------ | -------- | ---- | ------------------------ |
6746| length | number   | 是   | 从前往后删除字符的长度。 |
6747
6748### sendFunctionKey<sup>12+</sup>
6749
6750sendFunctionKey(key: number): void
6751
6752插入功能按键,目前仅支持enter键类型,取值见[EnterKeyType](../apis-ime-kit/js-apis-inputmethod.md#enterkeytype10)。
6753
6754**系统能力:** SystemCapability.Web.Webview.Core
6755
6756**参数:**
6757
6758| 参数名 | 类型 | 必填 | 说明                                   |
6759| ------ | -------- | ---- | ------------------------------------------ |
6760| key    | number   | 是   | 向Web输入框传递功能键,目前仅支持enter键。 |
6761
6762### close<sup>12+</sup>
6763
6764close(): void
6765
6766关闭自定义键盘。
6767
6768**系统能力:** SystemCapability.Web.Webview.Core
6769
6770## ConsoleMessage
6771
6772Web组件获取控制台信息对象。示例代码参考[onConsole事件](#onconsole)。
6773
6774### constructor<sup>9+</sup>
6775
6776constructor()
6777
6778ConsoleMessage的构造函数。
6779
6780**系统能力:** SystemCapability.Web.Webview.Core
6781
6782### getLineNumber
6783
6784getLineNumber(): number
6785
6786获取ConsoleMessage的行数。
6787
6788**系统能力:** SystemCapability.Web.Webview.Core
6789
6790**返回值:**
6791
6792| 类型     | 说明                   |
6793| ------ | -------------------- |
6794| number | 返回ConsoleMessage的行数。 |
6795
6796### getMessage
6797
6798getMessage(): string
6799
6800获取ConsoleMessage的日志信息。
6801
6802**系统能力:** SystemCapability.Web.Webview.Core
6803
6804**返回值:**
6805
6806| 类型     | 说明                     |
6807| ------ | ---------------------- |
6808| string | 返回ConsoleMessage的日志信息。 |
6809
6810### getMessageLevel
6811
6812getMessageLevel(): MessageLevel
6813
6814获取ConsoleMessage的信息级别。
6815
6816**系统能力:** SystemCapability.Web.Webview.Core
6817
6818**返回值:**
6819
6820| 类型                                | 说明                     |
6821| --------------------------------- | ---------------------- |
6822| [MessageLevel](#messagelevel枚举说明) | 返回ConsoleMessage的信息级别。 |
6823
6824### getSourceId
6825
6826getSourceId(): string
6827
6828获取网页源文件路径和名字。
6829
6830**系统能力:** SystemCapability.Web.Webview.Core
6831
6832**返回值:**
6833
6834| 类型     | 说明            |
6835| ------ | ------------- |
6836| string | 返回网页源文件路径和名字。 |
6837
6838## JsResult
6839
6840Web组件返回的弹窗确认或弹窗取消功能对象。示例代码参考[onAlert事件](#onalert)。
6841
6842### constructor
6843
6844constructor()
6845
6846JsResult的构造函数。
6847
6848**系统能力:** SystemCapability.Web.Webview.Core
6849
6850### handleCancel
6851
6852handleCancel(): void
6853
6854通知Web组件用户取消弹窗操作。
6855
6856**系统能力:** SystemCapability.Web.Webview.Core
6857
6858### handleConfirm
6859
6860handleConfirm(): void
6861
6862通知Web组件用户确认弹窗操作。
6863
6864**系统能力:** SystemCapability.Web.Webview.Core
6865
6866### handlePromptConfirm<sup>9+</sup>
6867
6868handlePromptConfirm(result: string): void
6869
6870通知Web组件用户确认弹窗操作及对话框内容。
6871
6872**系统能力:** SystemCapability.Web.Webview.Core
6873
6874**参数:**
6875
6876| 参数名    | 类型   | 必填   | 说明        |
6877| ------ | ------ | ---- | ----------- |
6878| result | string | 是    | 用户输入的对话框内容。 |
6879
6880## FullScreenExitHandler<sup>9+</sup>
6881
6882通知开发者Web组件退出全屏。示例代码参考[onFullScreenEnter事件](#onfullscreenenter9)。
6883
6884### constructor<sup>9+</sup>
6885
6886constructor()
6887
6888FullScreenExitHandler的构造函数。
6889
6890**系统能力:** SystemCapability.Web.Webview.Core
6891
6892### exitFullScreen<sup>9+</sup>
6893
6894exitFullScreen(): void
6895
6896通知开发者Web组件退出全屏。
6897
6898**系统能力:** SystemCapability.Web.Webview.Core
6899
6900## ControllerHandler<sup>9+</sup>
6901
6902设置用户新建Web组件的WebviewController对象。示例代码参考[onWindowNew事件](#onwindownew9)。
6903
6904**系统能力:** SystemCapability.Web.Webview.Core
6905
6906### constructor<sup>9+</sup>
6907
6908constructor()
6909
6910ControllerHandler的构造函数。
6911
6912**系统能力:** SystemCapability.Web.Webview.Core
6913
6914### setWebController<sup>9+</sup>
6915
6916setWebController(controller: WebviewController): void
6917
6918设置WebviewController对象,如果不需要打开新窗口请设置为null。
6919
6920**系统能力:** SystemCapability.Web.Webview.Core
6921
6922**参数:**
6923
6924| 参数名        | 类型                                     | 必填 | 说明                                     |
6925| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
6926| controller | [WebviewController](js-apis-webview.md#webviewcontroller) | 是  | 新建Web组件的WebviewController对象,如果不需要打开新窗口请设置为null。 |
6927
6928## WebResourceError
6929
6930Web组件资源管理错误信息对象。示例代码参考[onErrorReceive事件](#onerrorreceive)。
6931
6932### constructor<sup>9+</sup>
6933
6934constructor()
6935
6936WebResourceError的构造函数。
6937
6938**系统能力:** SystemCapability.Web.Webview.Core
6939
6940### getErrorCode
6941
6942getErrorCode(): number
6943
6944获取加载资源的错误码。
6945
6946**系统能力:** SystemCapability.Web.Webview.Core
6947
6948**返回值:**
6949
6950| 类型     | 说明          |
6951| ------ | ----------- |
6952| number | 返回加载资源的错误码。错误码的含义可以参考[WebNetErrorList](js-apis-netErrorList.md) |
6953
6954### getErrorInfo
6955
6956getErrorInfo(): string
6957
6958获取加载资源的错误信息。
6959
6960**系统能力:** SystemCapability.Web.Webview.Core
6961
6962**返回值:**
6963
6964| 类型     | 说明           |
6965| ------ | ------------ |
6966| string | 返回加载资源的错误信息。 |
6967
6968## WebResourceRequest
6969
6970Web组件获取资源请求对象。示例代码参考[onErrorReceive事件](#onerrorreceive)。
6971
6972### constructor
6973
6974constructor()
6975
6976WebResourceRequest的构造函数。
6977
6978**系统能力:** SystemCapability.Web.Webview.Core
6979
6980### getRequestHeader
6981
6982getRequestHeader(): Array\<Header\>
6983
6984获取资源请求头信息。
6985
6986**系统能力:** SystemCapability.Web.Webview.Core
6987
6988**返回值:**
6989
6990| 类型                         | 说明         |
6991| -------------------------- | ---------- |
6992| Array\<[Header](#header)\> | 返回资源请求头信息。 |
6993
6994### getRequestUrl
6995
6996getRequestUrl(): string
6997
6998获取资源请求的URL信息。
6999
7000**系统能力:** SystemCapability.Web.Webview.Core
7001
7002**返回值:**
7003
7004| 类型     | 说明            |
7005| ------ | ------------- |
7006| string | 返回资源请求的URL信息。 |
7007
7008### isMainFrame
7009
7010isMainFrame(): boolean
7011
7012判断资源请求是否为主frame。
7013
7014**系统能力:** SystemCapability.Web.Webview.Core
7015
7016**返回值:**
7017
7018| 类型      | 说明               |
7019| ------- | ---------------- |
7020| boolean | 返回资源请求是否为主frame。 |
7021
7022### isRedirect
7023
7024isRedirect(): boolean
7025
7026判断资源请求是否被服务端重定向。
7027
7028**系统能力:** SystemCapability.Web.Webview.Core
7029
7030**返回值:**
7031
7032| 类型      | 说明               |
7033| ------- | ---------------- |
7034| boolean | 返回资源请求是否被服务端重定向。 |
7035
7036### isRequestGesture
7037
7038isRequestGesture(): boolean
7039
7040获取资源请求是否与手势(如点击)相关联。
7041
7042**系统能力:** SystemCapability.Web.Webview.Core
7043
7044**返回值:**
7045
7046| 类型      | 说明                   |
7047| ------- | -------------------- |
7048| boolean | 返回资源请求是否与手势(如点击)相关联。 |
7049
7050### getRequestMethod<sup>9+</sup>
7051
7052getRequestMethod(): string
7053
7054获取请求方法。
7055
7056**系统能力:** SystemCapability.Web.Webview.Core
7057
7058**返回值:**
7059
7060| 类型     | 说明      |
7061| ------ | ------- |
7062| string | 返回请求方法。 |
7063
7064## Header
7065
7066Web组件返回的请求/响应头对象。
7067
7068**系统能力:** SystemCapability.Web.Webview.Core
7069
7070| 名称          | 类型     | 必填   | 说明            |
7071| ----------- | ------ | ---- | ------------- |
7072| headerKey   | string | 是    | 请求/响应头的key。   |
7073| headerValue | string | 是    | 请求/响应头的value。 |
7074
7075## WebResourceResponse
7076
7077Web组件资源响应对象。示例代码参考[onHttpErrorReceive事件](#onhttperrorreceive)。
7078
7079### constructor
7080
7081constructor()
7082
7083WebResourceResponse的构造函数。
7084
7085**系统能力:** SystemCapability.Web.Webview.Core
7086
7087### getReasonMessage
7088
7089getReasonMessage(): string
7090
7091获取资源响应的状态码描述。
7092
7093**系统能力:** SystemCapability.Web.Webview.Core
7094
7095**返回值:**
7096
7097| 类型     | 说明            |
7098| ------ | ------------- |
7099| string | 返回资源响应的状态码描述。 |
7100
7101### getResponseCode
7102
7103getResponseCode(): number
7104
7105获取资源响应的状态码。
7106
7107**系统能力:** SystemCapability.Web.Webview.Core
7108
7109**返回值:**
7110
7111| 类型     | 说明          |
7112| ------ | ----------- |
7113| number | 返回资源响应的状态码。 |
7114
7115### getResponseData
7116
7117getResponseData(): string
7118
7119获取资源响应数据。
7120
7121**系统能力:** SystemCapability.Web.Webview.Core
7122
7123**返回值:**
7124
7125| 类型     | 说明        |
7126| ------ | --------- |
7127| string | 返回资源响应数据。 |
7128
7129### getResponseEncoding
7130
7131getResponseEncoding(): string
7132
7133获取资源响应的编码。
7134
7135**系统能力:** SystemCapability.Web.Webview.Core
7136
7137**返回值:**
7138
7139| 类型     | 说明         |
7140| ------ | ---------- |
7141| string | 返回资源响应的编码。 |
7142
7143### getResponseHeader
7144
7145getResponseHeader() : Array\<Header\>
7146
7147获取资源响应头。
7148
7149**系统能力:** SystemCapability.Web.Webview.Core
7150
7151**返回值:**
7152
7153| 类型                         | 说明       |
7154| -------------------------- | -------- |
7155| Array\<[Header](#header)\> | 返回资源响应头。 |
7156
7157### getResponseMimeType
7158
7159getResponseMimeType(): string
7160
7161获取资源响应的媒体(MIME)类型。
7162
7163**系统能力:** SystemCapability.Web.Webview.Core
7164
7165**返回值:**
7166
7167| 类型     | 说明                 |
7168| ------ | ------------------ |
7169| string | 返回资源响应的媒体(MIME)类型。 |
7170
7171### getResponseDataEx<sup>13+</sup>
7172
7173getResponseDataEx(): string | number | ArrayBuffer | Resource | undefined
7174
7175获取资源响应数据,支持多种数据类型。
7176
7177**系统能力:** SystemCapability.Web.Webview.Core
7178
7179**返回值:**
7180
7181|类型|说明|
7182|---|---|
7183|string|返回HTML格式的字符串。|
7184|number|返回文件句柄。|
7185|ArrayBuffer|返回二进制数据。|
7186|[Resource](../apis-arkui/arkui-ts/ts-types.md)|返回`$rawfile`资源。|
7187|undefined|如果没有可用数据,返回`undefined`。|
7188
7189### getResponseIsReady<sup>13+</sup>
7190
7191getResponseIsReady(): boolean
7192
7193获取响应数据是否已准备就绪。
7194
7195**系统能力:** SystemCapability.Web.Webview.Core
7196
7197**返回值:**
7198
7199|类型|说明|
7200|---|---|
7201|boolean|`true`表示响应数据已准备好,`false`表示未准备好。|
7202
7203### setResponseData<sup>9+</sup>
7204
7205setResponseData(data: string \| number \| Resource \| ArrayBuffer): void
7206
7207设置资源响应数据。
7208
7209**系统能力:** SystemCapability.Web.Webview.Core
7210
7211**参数:**
7212
7213| 参数名  | 类型                                     | 必填   | 说明                                     |
7214| ---- | ---------------------------------------- | ---- | ---------------------------------------- |
7215| data | string \| number \| [Resource](../apis-arkui/arkui-ts/ts-types.md)<sup>10+</sup> \| ArrayBuffer<sup>11+</sup> | 是    | 要设置的资源响应数据。string表示HTML格式的字符串。number表示文件句柄, 此句柄由系统的Web组件负责关闭。 Resource表示应用rawfile目录下文件资源。 ArrayBuffer表示资源的原始二进制数据。 |
7216
7217### setResponseEncoding<sup>9+</sup>
7218
7219setResponseEncoding(encoding: string): void
7220
7221设置资源响应的编码。
7222
7223**系统能力:** SystemCapability.Web.Webview.Core
7224
7225**参数:**
7226
7227| 参数名      | 类型   | 必填   | 说明         |
7228| -------- | ------ | ---- | ------------ |
7229| encoding | string | 是    | 要设置的资源响应的编码。 |
7230
7231### setResponseMimeType<sup>9+</sup>
7232
7233setResponseMimeType(mimeType: string): void
7234
7235设置资源响应的媒体(MIME)类型。
7236
7237**系统能力:** SystemCapability.Web.Webview.Core
7238
7239**参数:**
7240
7241| 参数名      | 类型   | 必填   | 说明                 |
7242| -------- | ------ | ---- | -------------------- |
7243| mimeType | string | 是   | 要设置的资源响应的媒体(MIME)类型。 |
7244
7245### setReasonMessage<sup>9+</sup>
7246
7247setReasonMessage(reason: string): void
7248
7249设置资源响应的状态码描述。
7250
7251**系统能力:** SystemCapability.Web.Webview.Core
7252
7253**参数:**
7254
7255| 参数名    | 类型   | 必填   | 说明            |
7256| ------ | ------ | ---- | --------------- |
7257| reason | string | 是   | 要设置的资源响应的状态码描述。 |
7258
7259### setResponseHeader<sup>9+</sup>
7260
7261setResponseHeader(header: Array\<Header\>): void
7262
7263设置资源响应头。
7264
7265**系统能力:** SystemCapability.Web.Webview.Core
7266
7267**参数:**
7268
7269| 参数名    | 类型                       | 必填   | 说明       |
7270| ------ | -------------------------- | ---- | ---------- |
7271| header | Array\<[Header](#header)\> | 是   | 要设置的资源响应头。 |
7272
7273### setResponseCode<sup>9+</sup>
7274
7275setResponseCode(code: number): void
7276
7277设置资源响应的状态码。
7278
7279**系统能力:** SystemCapability.Web.Webview.Core
7280
7281**参数:**
7282
7283| 参数名  | 类型   | 必填   | 说明          |
7284| ---- | ------ | ---- | ------------- |
7285| code | number | 是   | 要设置的资源响应的状态码。如果该资源以错误结束,请参考[@ohos.web.netErrorList](js-apis-netErrorList.md)设置相应错误码,避免设置错误码为 ERR_IO_PENDING,设置为该错误码可能会导致XMLHttpRequest同步请求阻塞。 |
7286
7287### setResponseIsReady<sup>9+</sup>
7288
7289setResponseIsReady(IsReady: boolean): void
7290
7291设置资源响应数据是否已经就绪。
7292
7293**系统能力:** SystemCapability.Web.Webview.Core
7294
7295**参数:**
7296
7297| 参数名   | 类型    | 必填  | 说明          |
7298| ------- | ------- | ---- | ------------- |
7299| IsReady | boolean | 是   | 资源响应数据是否已经就绪。默认值:true。 |
7300
7301## FileSelectorResult<sup>9+</sup>
7302
7303通知Web组件的文件选择结果。示例代码参考[onShowFileSelector事件](#onshowfileselector9)。
7304
7305### constructor<sup>9+</sup>
7306
7307constructor()
7308
7309FileSelectorResult的构造函数。
7310
7311**系统能力:** SystemCapability.Web.Webview.Core
7312
7313### handleFileList<sup>9+</sup>
7314
7315handleFileList(fileList: Array\<string\>): void
7316
7317通知Web组件进行文件选择操作。
7318
7319**系统能力:** SystemCapability.Web.Webview.Core
7320
7321**参数:**
7322
7323| 参数名      | 类型            | 必填  | 说明         |
7324| -------- | --------------- | ---- | ------------ |
7325| fileList | Array\<string\> | 是   | 需要进行操作的文件列表。 |
7326
7327## FileSelectorParam<sup>9+</sup>
7328
7329Web组件获取文件对象。示例代码参考[onShowFileSelector事件](#onshowfileselector9)。
7330
7331### constructor<sup>9+</sup>
7332
7333constructor()
7334
7335FileSelectorParam的构造函数。
7336
7337**系统能力:** SystemCapability.Web.Webview.Core
7338
7339### getTitle<sup>9+</sup>
7340
7341getTitle(): string
7342
7343获取文件选择器标题。
7344
7345**系统能力:** SystemCapability.Web.Webview.Core
7346
7347**返回值:**
7348
7349| 类型     | 说明         |
7350| ------ | ---------- |
7351| string | 返回文件选择器标题。 |
7352
7353### getMode<sup>9+</sup>
7354
7355getMode(): FileSelectorMode
7356
7357获取文件选择器的模式。
7358
7359**系统能力:** SystemCapability.Web.Webview.Core
7360
7361**返回值:**
7362
7363| 类型                                       | 说明          |
7364| ---------------------------------------- | ----------- |
7365| [FileSelectorMode](#fileselectormode9枚举说明) | 返回文件选择器的模式。 |
7366
7367### getAcceptType<sup>9+</sup>
7368
7369getAcceptType(): Array\<string\>
7370
7371获取文件过滤类型。
7372
7373**系统能力:** SystemCapability.Web.Webview.Core
7374
7375**返回值:**
7376
7377| 类型              | 说明        |
7378| --------------- | --------- |
7379| Array\<string\> | 返回文件过滤类型。 |
7380
7381### isCapture<sup>9+</sup>
7382
7383isCapture(): boolean
7384
7385获取是否调用多媒体能力。
7386
7387**系统能力:** SystemCapability.Web.Webview.Core
7388
7389**返回值:**
7390
7391| 类型      | 说明           |
7392| ------- | ------------ |
7393| boolean | 返回是否调用多媒体能力。 |
7394
7395## HttpAuthHandler<sup>9+</sup>
7396
7397Web组件返回的http auth认证请求确认或取消和使用缓存密码认证功能对象。示例代码参考[onHttpAuthRequest事件](#onhttpauthrequest9)。
7398
7399### constructor<sup>9+</sup>
7400
7401constructor()
7402
7403HttpAuthHandler的构造函数。
7404
7405**系统能力:** SystemCapability.Web.Webview.Core
7406
7407### cancel<sup>9+</sup>
7408
7409cancel(): void
7410
7411通知Web组件用户取消HTTP认证操作。
7412
7413**系统能力:** SystemCapability.Web.Webview.Core
7414
7415### confirm<sup>9+</sup>
7416
7417confirm(userName: string, password: string): boolean
7418
7419使用用户名和密码进行HTTP认证操作。
7420
7421**系统能力:** SystemCapability.Web.Webview.Core
7422
7423**参数:**
7424
7425| 参数名      | 类型   | 必填  | 说明       |
7426| -------- | ------ | ---- | ---------- |
7427| userName | string | 是   | HTTP认证用户名。 |
7428| password      | string | 是   | HTTP认证密码。  |
7429
7430**返回值:**
7431
7432| 类型      | 说明                    |
7433| ------- | --------------------- |
7434| boolean | 认证成功返回true,失败返回false。 |
7435
7436### isHttpAuthInfoSaved<sup>9+</sup>
7437
7438isHttpAuthInfoSaved(): boolean
7439
7440通知Web组件用户使用服务器缓存的账号密码认证。
7441
7442**系统能力:** SystemCapability.Web.Webview.Core
7443
7444**返回值:**
7445
7446| 类型      | 说明                        |
7447| ------- | ------------------------- |
7448| boolean | 存在密码认证成功返回true,其他返回false。 |
7449
7450## SslErrorHandler<sup>9+</sup>
7451
7452Web组件返回的SSL错误通知事件用户处理功能对象。示例代码参考[onSslErrorEventReceive事件](#onsslerroreventreceive9)。
7453
7454### constructor<sup>9+</sup>
7455
7456constructor()
7457
7458SslErrorHandler的构造函数。
7459
7460**系统能力:** SystemCapability.Web.Webview.Core
7461
7462### handleCancel<sup>9+</sup>
7463
7464handleCancel(): void
7465
7466通知Web组件取消此请求。
7467
7468**系统能力:** SystemCapability.Web.Webview.Core
7469
7470### handleConfirm<sup>9+</sup>
7471
7472handleConfirm(): void
7473
7474通知Web组件继续使用SSL证书。
7475
7476**系统能力:** SystemCapability.Web.Webview.Core
7477
7478## ClientAuthenticationHandler<sup>9+</sup>
7479
7480Web组件返回的SSL客户端证书请求事件用户处理功能对象。示例代码参考[onClientAuthenticationRequest事件](#onclientauthenticationrequest9)。
7481
7482### constructor<sup>9+</sup>
7483
7484constructor()
7485
7486ClientAuthenticationHandler的构造函数。
7487
7488**系统能力:** SystemCapability.Web.Webview.Core
7489
7490### confirm<sup>9+</sup>
7491
7492confirm(priKeyFile : string, certChainFile : string): void
7493
7494通知Web组件使用指定的私钥和客户端证书链。
7495
7496**系统能力:** SystemCapability.Web.Webview.Core
7497
7498**参数:**
7499
7500| 参数名           | 类型   | 必填   | 说明               |
7501| ------------- | ------ | ---- | ------------------ |
7502| priKeyFile    | string | 是    | 存放私钥的文件,包含路径和文件名。  |
7503| certChainFile | string | 是    | 存放证书链的文件,包含路径和文件名。 |
7504
7505### confirm<sup>10+</sup>
7506
7507confirm(authUri : string): void
7508
7509通知Web组件使用指定的凭据(从证书管理模块获得)。
7510
7511> **说明:**
7512>
7513> 需要配置权限:ohos.permission.ACCESS_CERT_MANAGER7514
7515**系统能力:** SystemCapability.Web.Webview.Core
7516
7517**参数:**
7518
7519| 参数名     | 类型   | 必填   | 说明    |
7520| ------- | ------ | ---- | ------- |
7521| authUri | string | 是    | 凭据的关键值。 |
7522
7523### cancel<sup>9+</sup>
7524
7525cancel(): void
7526
7527通知Web组件取消相同host和port服务器发送的客户端证书请求事件。同时,相同host和port服务器的请求,不重复上报该事件。
7528
7529**系统能力:** SystemCapability.Web.Webview.Core
7530
7531### ignore<sup>9+</sup>
7532
7533ignore(): void
7534
7535通知Web组件忽略本次请求。
7536
7537**系统能力:** SystemCapability.Web.Webview.Core
7538
7539## PermissionRequest<sup>9+</sup>
7540
7541Web组件返回授权或拒绝权限功能的对象。示例代码参考[onPermissionRequest事件](#onpermissionrequest9)。
7542
7543### constructor<sup>9+</sup>
7544
7545constructor()
7546
7547PermissionRequest的构造函数。
7548
7549**系统能力:** SystemCapability.Web.Webview.Core
7550
7551### deny<sup>9+</sup>
7552
7553deny(): void
7554
7555拒绝网页所请求的权限。
7556
7557**系统能力:** SystemCapability.Web.Webview.Core
7558
7559### getOrigin<sup>9+</sup>
7560
7561getOrigin(): string
7562
7563获取网页来源。
7564
7565**系统能力:** SystemCapability.Web.Webview.Core
7566
7567**返回值:**
7568
7569| 类型     | 说明           |
7570| ------ | ------------ |
7571| string | 当前请求权限网页的来源。 |
7572
7573### getAccessibleResource<sup>9+</sup>
7574
7575getAccessibleResource(): Array\<string\>
7576
7577获取网页所请求的权限资源列表,资源列表类型参考[ProtectedResourceType](#protectedresourcetype9枚举说明)。
7578
7579**系统能力:** SystemCapability.Web.Webview.Core
7580
7581**返回值:**
7582
7583| 类型              | 说明            |
7584| --------------- | ------------- |
7585| Array\<string\> | 网页所请求的权限资源列表。 |
7586
7587### grant<sup>9+</sup>
7588
7589grant(resources: Array\<string\>): void
7590
7591对网页访问的给定权限进行授权。
7592
7593**系统能力:** SystemCapability.Web.Webview.Core
7594
7595**参数:**
7596
7597| 参数名       | 类型            | 必填   | 说明            |
7598| --------- | --------------- | ---- | --------------- |
7599| resources | Array\<string\> | 是   | 授予网页请求的权限的资源列表。 |
7600
7601## ScreenCaptureHandler<sup>10+</sup>
7602
7603Web组件返回授权或拒绝屏幕捕获功能的对象。示例代码参考[onScreenCaptureRequest事件](#onscreencapturerequest10)。
7604
7605### constructor<sup>9+</sup>
7606
7607constructor()
7608
7609ScreenCaptureHandler的构造函数。
7610
7611**系统能力:** SystemCapability.Web.Webview.Core
7612
7613### deny<sup>10+</sup>
7614
7615deny(): void
7616
7617拒绝网页所请求的屏幕捕获操作。
7618
7619**系统能力:** SystemCapability.Web.Webview.Core
7620
7621### getOrigin<sup>10+</sup>
7622
7623getOrigin(): string
7624
7625获取网页来源。
7626
7627**系统能力:** SystemCapability.Web.Webview.Core
7628
7629**返回值:**
7630
7631| 类型     | 说明           |
7632| ------ | ------------ |
7633| string | 当前请求权限网页的来源。 |
7634
7635### grant<sup>10+</sup>
7636
7637grant(config: ScreenCaptureConfig): void
7638
7639对网页访问的屏幕捕获操作进行授权。
7640
7641> **说明:**
7642>
7643> 需要配置权限:ohos.permission.MICROPHONE7644
7645**系统能力:** SystemCapability.Web.Webview.Core
7646
7647**参数:**
7648
7649| 参数名    | 类型                                     | 必填   | 说明    |
7650| ------ | ---------------------------------------- | ---- | ------- |
7651| config | [ScreenCaptureConfig](#screencaptureconfig10) | 是   | 屏幕捕获配置。 |
7652
7653## EventResult<sup>12+</sup>
7654
7655通知Web组件事件消费结果,支持的事件参考[触摸事件的类型](../apis-arkui/arkui-ts/ts-appendix-enums.md#touchtype)。如果应用不消费该事件,则设置为false,事件被Web组件消费。应用消费了该事件,设置为true,Web组件不消费。示例代码参考[onNativeEmbedGestureEvent事件](#onnativeembedgestureevent11)。
7656
7657### constructor<sup>12+</sup>
7658
7659constructor()
7660
7661EventResult的构造函数。
7662
7663**系统能力:** SystemCapability.Web.Webview.Core
7664
7665### setGestureEventResult<sup>12+</sup>
7666
7667设置手势事件消费结果。
7668
7669setGestureEventResult(result: boolean): void
7670
7671**系统能力:** SystemCapability.Web.Webview.Core
7672
7673**参数:**
7674
7675| 参数名          | 类型 | 必填  | 说明             |
7676| --------------- | -------- | ----  |------- |
7677| result          | boolean  | 是    | 是否消费该手势事件。默认值为true。 |
7678
7679**示例:**
7680
7681请参考[onNativeEmbedGestureEvent事件](#onnativeembedgestureevent11)。
7682
7683### setGestureEventResult<sup>12+</sup>
7684
7685设置手势事件消费结果。
7686
7687setGestureEventResult(result: boolean, stopPropagation?: boolean): void
7688
7689**系统能力:** SystemCapability.Web.Webview.Core
7690
7691**参数:**
7692
7693| 参数名          | 类型 | 必填  | 说明             |
7694| --------------- | -------- | ----  |------- |
7695| result          | boolean  | 是    | 是否消费该手势事件。默认值为true。 |
7696| stopPropagation<sup>14+</sup>| boolean  | 否   | 是否阻止冒泡,在result为true时生效。默认值为true。 |
7697
7698**示例:**
7699
7700请参考[onNativeEmbedGestureEvent事件](#onnativeembedgestureevent11)。
7701
7702## ContextMenuSourceType<sup>9+</sup>枚举说明
7703
7704**系统能力:** SystemCapability.Web.Webview.Core
7705
7706| 名称       | 值 | 说明         |
7707| --------- | -- |------------ |
7708| None      | 0 | 其他事件来源。 |
7709| Mouse     | 1 | 鼠标事件。   |
7710| LongPress | 2 | 长按事件。   |
7711
7712## ContextMenuMediaType<sup>9+</sup>枚举说明
7713
7714**系统能力:** SystemCapability.Web.Webview.Core
7715
7716| 名称    | 值 | 说明            |
7717| ----- | -- | ------------- |
7718| None  | 0 | 非特殊媒体或其他媒体类型。 |
7719| Image | 1 | 图片。           |
7720
7721## ContextMenuInputFieldType<sup>9+</sup>枚举说明
7722
7723**系统能力:** SystemCapability.Web.Webview.Core
7724
7725| 名称        | 值 | 说明                          |
7726| --------- | -- | --------------------------- |
7727| None      | 0 | 非输入框。                       |
7728| PlainText | 1 | 纯文本类型,包括text、search、email等。 |
7729| Password  | 2 | 密码类型。                       |
7730| Number    | 3 | 数字类型。                       |
7731| Telephone | 4 | 电话号码类型。                     |
7732| Other     | 5 | 其他类型。                       |
7733
7734## ContextMenuEditStateFlags<sup>9+</sup>枚举说明
7735
7736支持以按位或的方式使用此枚举。例如,如果需要同时支持CAN_CUT、CAN_COPY和CAN_SELECT_ALL,可使用CAN_CUT | CAN_COPY | CAN_SELECT_ALL或11。
7737
7738**系统能力:** SystemCapability.Web.Webview.Core
7739
7740| 名称            | 值 | 说明     |
7741| -------------- | -- | -------- |
7742| NONE           | 0 | 不可编辑。 |
7743| CAN_CUT        | 1 | 支持剪切。 |
7744| CAN_COPY       | 2 | 支持拷贝。 |
7745| CAN_PASTE      | 4 | 支持粘贴。 |
7746| CAN_SELECT_ALL | 8 | 支持全选。 |
7747
7748## WebContextMenuParam<sup>9+</sup>
7749
7750实现长按页面元素或鼠标右键弹出来的菜单信息。示例代码参考[onContextMenuShow事件](#oncontextmenushow9)。
7751
7752### constructor<sup>9+</sup>
7753
7754constructor()
7755
7756WebContextMenuParam的构造函数。
7757
7758**系统能力:** SystemCapability.Web.Webview.Core
7759
7760### x<sup>9+</sup>
7761
7762x(): number
7763
7764弹出菜单的x坐标。
7765
7766**系统能力:** SystemCapability.Web.Webview.Core
7767
7768**返回值:**
7769
7770| 类型     | 说明                 |
7771| ------ | ------------------ |
7772| number | 显示正常返回非负整数,否则返回-1。 |
7773
7774### y<sup>9+</sup>
7775
7776y(): number
7777
7778弹出菜单的y坐标。
7779
7780**系统能力:** SystemCapability.Web.Webview.Core
7781
7782**返回值:**
7783
7784| 类型     | 说明                 |
7785| ------ | ------------------ |
7786| number | 显示正常返回非负整数,否则返回-1。 |
7787
7788### getLinkUrl<sup>9+</sup>
7789
7790getLinkUrl(): string
7791
7792获取链接地址。
7793
7794**系统能力:** SystemCapability.Web.Webview.Core
7795
7796**返回值:**
7797
7798| 类型     | 说明                        |
7799| ------ | ------------------------- |
7800| string | 如果长按位置是链接,返回经过安全检查的url链接。 |
7801
7802### getUnfilteredLinkUrl<sup>9+</sup>
7803
7804getUnfilteredLinkUrl(): string
7805
7806获取链接地址。
7807
7808**系统能力:** SystemCapability.Web.Webview.Core
7809
7810**返回值:**
7811
7812| 类型     | 说明                    |
7813| ------ | --------------------- |
7814| string | 如果长按位置是链接,返回原始的url链接。 |
7815
7816### getSourceUrl<sup>9+</sup>
7817
7818getSourceUrl(): string
7819
7820获取sourceUrl链接。
7821
7822**系统能力:** SystemCapability.Web.Webview.Core
7823
7824**返回值:**
7825
7826| 类型     | 说明                       |
7827| ------ | ------------------------ |
7828| string | 如果选中的元素有src属性,返回src的url。 |
7829
7830### existsImageContents<sup>9+</sup>
7831
7832existsImageContents(): boolean
7833
7834是否存在图像内容。
7835
7836**系统能力:** SystemCapability.Web.Webview.Core
7837
7838**返回值:**
7839
7840| 类型      | 说明                        |
7841| ------- | ------------------------- |
7842| boolean | 长按位置中有图片返回true,否则返回false。 |
7843
7844### getMediaType<sup>9+</sup>
7845
7846getMediaType(): ContextMenuMediaType
7847
7848获取网页元素媒体类型。
7849
7850**系统能力:** SystemCapability.Web.Webview.Core
7851
7852**返回值:**
7853
7854| 类型                                       | 说明        |
7855| ---------------------------------------- | --------- |
7856| [ContextMenuMediaType](#contextmenumediatype9枚举说明) | 网页元素媒体类型。 |
7857
7858### getSelectionText<sup>9+</sup>
7859
7860getSelectionText(): string
7861
7862获取选中文本。
7863
7864**系统能力:** SystemCapability.Web.Webview.Core
7865
7866**返回值:**
7867
7868| 类型     | 说明                   |
7869| ------ | -------------------- |
7870| string | 菜单上下文选中文本内容,不存在则返回空。 |
7871
7872### getSourceType<sup>9+</sup>
7873
7874getSourceType(): ContextMenuSourceType
7875
7876获取菜单事件来源。
7877
7878**系统能力:** SystemCapability.Web.Webview.Core
7879
7880**返回值:**
7881
7882| 类型                                       | 说明      |
7883| ---------------------------------------- | ------- |
7884| [ContextMenuSourceType](#contextmenusourcetype9枚举说明) | 菜单事件来源。 |
7885
7886### getInputFieldType<sup>9+</sup>
7887
7888getInputFieldType(): ContextMenuInputFieldType
7889
7890获取网页元素输入框类型。
7891
7892**系统能力:** SystemCapability.Web.Webview.Core
7893
7894**返回值:**
7895
7896| 类型                                       | 说明     |
7897| ---------------------------------------- | ------ |
7898| [ContextMenuInputFieldType](#contextmenuinputfieldtype9枚举说明) | 输入框类型。 |
7899
7900### isEditable<sup>9+</sup>
7901
7902isEditable(): boolean
7903
7904获取网页元素是否可编辑标识。
7905
7906**系统能力:** SystemCapability.Web.Webview.Core
7907
7908**返回值:**
7909
7910| 类型      | 说明                         |
7911| ------- | -------------------------- |
7912| boolean | 网页元素可编辑返回true,不可编辑返回false。 |
7913
7914### getEditStateFlags<sup>9+</sup>
7915
7916getEditStateFlags(): number
7917
7918获取网页元素可编辑标识。
7919
7920**系统能力:** SystemCapability.Web.Webview.Core
7921
7922**返回值:**
7923
7924| 类型     | 说明                                       |
7925| ------ | ---------------------------------------- |
7926| number | 网页元素可编辑标识,参照[ContextMenuEditStateFlags](#contextmenueditstateflags9枚举说明)。 |
7927
7928### getPreviewWidth<sup>13+</sup>
7929
7930getPreviewWidth(): number
7931
7932获取预览图的宽。
7933
7934**系统能力:** SystemCapability.Web.Webview.Core
7935
7936**返回值:**
7937
7938| 类型     | 说明       |
7939| ------ | ----------- |
7940| number | 预览图的宽。 |
7941
7942### getPreviewHeight<sup>13+</sup>
7943
7944getPreviewHeight(): number
7945
7946获取预览图的高。
7947
7948**系统能力:** SystemCapability.Web.Webview.Core
7949
7950**返回值:**
7951
7952| 类型     | 说明       |
7953| ------ | ----------  |
7954| number | 预览图的高。 |
7955
7956## WebContextMenuResult<sup>9+</sup>
7957
7958实现长按页面元素或鼠标右键弹出来的菜单所执行的响应事件。示例代码参考[onContextMenuShow事件](#oncontextmenushow9)。
7959
7960### constructor<sup>9+</sup>
7961
7962constructor()
7963
7964WebContextMenuResult的构造函数。
7965
7966**系统能力:** SystemCapability.Web.Webview.Core
7967
7968### closeContextMenu<sup>9+</sup>
7969
7970closeContextMenu(): void
7971
7972不执行WebContextMenuResult其他接口操作时,需要调用此接口关闭菜单。
7973
7974**系统能力:** SystemCapability.Web.Webview.Core
7975
7976### copyImage<sup>9+</sup>
7977
7978copyImage(): void
7979
7980WebContextMenuParam有图片内容则复制图片。
7981
7982**系统能力:** SystemCapability.Web.Webview.Core
7983
7984### copy<sup>9+</sup>
7985
7986copy(): void
7987
7988执行与此上下文菜单相关的拷贝文本操作。
7989
7990**系统能力:** SystemCapability.Web.Webview.Core
7991
7992### paste<sup>9+</sup>
7993
7994paste(): void
7995
7996执行与此上下文菜单相关的粘贴操作。
7997
7998> **说明:**
7999>
8000> 需要配置权限:ohos.permission.READ_PASTEBOARD8001
8002**系统能力:** SystemCapability.Web.Webview.Core
8003
8004### cut<sup>9+</sup>
8005
8006cut(): void
8007
8008执行与此上下文菜单相关的剪切操作。
8009
8010**系统能力:** SystemCapability.Web.Webview.Core
8011
8012### selectAll<sup>9+</sup>
8013
8014selectAll(): void
8015
8016执行与此上下文菜单相关的全选操作。
8017
8018**系统能力:** SystemCapability.Web.Webview.Core
8019
8020## JsGeolocation
8021
8022Web组件返回授权或拒绝权限功能的对象。示例代码参考[onGeolocationShow事件](#ongeolocationshow)。
8023
8024### constructor
8025
8026constructor()
8027
8028JsGeolocation的构造函数。
8029
8030**系统能力:** SystemCapability.Web.Webview.Core
8031
8032### invoke
8033
8034invoke(origin: string, allow: boolean, retain: boolean): void
8035
8036设置网页地理位置权限状态。
8037
8038**系统能力:** SystemCapability.Web.Webview.Core
8039
8040**参数:**
8041
8042| 参数名    | 类型    | 必填  | 说明                                     |
8043| ------ | ------- | ---- | ---------------------------------------- |
8044| origin | string  | 是   | 指定源的字符串索引。                               |
8045| allow  | boolean | 是   | 设置的地理位置权限状态。                             |
8046| retain | boolean | 是   | 是否允许将地理位置权限状态保存到系统中。可通过[GeolocationPermissions<sup>9+</sup>](js-apis-webview.md#geolocationpermissions)接口管理保存到系统的地理位置权限。 |
8047
8048## MessageLevel枚举说明
8049
8050**系统能力:** SystemCapability.Web.Webview.Core
8051
8052| 名称    | 值 | 说明    |
8053| ----- | -- | ---- |
8054| Debug | 1 | 调试级别。 |
8055| Error | 4 | 错误级别。 |
8056| Info  | 2 | 消息级别。 |
8057| Log   | 5 | 日志级别。 |
8058| Warn  | 3 | 警告级别。 |
8059
8060## RenderExitReason<sup>9+</sup>枚举说明
8061
8062onRenderExited接口返回的渲染进程退出的具体原因。
8063
8064**系统能力:** SystemCapability.Web.Webview.Core
8065
8066| 名称                         | 值 | 说明                |
8067| -------------------------- | -- | ----------------- |
8068| ProcessAbnormalTermination | 0 | 渲染进程异常退出。         |
8069| ProcessWasKilled           | 1 | 收到SIGKILL,或被手动终止。 |
8070| ProcessCrashed             | 2 | 渲染进程崩溃退出,如段错误。    |
8071| ProcessOom                 | 3 | 程序内存不足。           |
8072| ProcessExitUnknown         | 4 | 其他原因。             |
8073
8074## MixedMode枚举说明
8075
8076**系统能力:** SystemCapability.Web.Webview.Core
8077
8078| 名称        | 值 | 说明                                 |
8079| ---------- | -- | ---------------------------------- |
8080| All        | 0 | 允许加载HTTP和HTTPS混合内容。所有不安全的内容都可以被加载。 |
8081| Compatible | 1 | 混合内容兼容性模式,部分不安全的内容可能被加载。           |
8082| None       | 2 | 不允许加载HTTP和HTTPS混合内容。               |
8083
8084## CacheMode枚举说明
8085
8086**系统能力:** SystemCapability.Web.Webview.Core
8087
8088| 名称      | 值 | 说明                                   |
8089| ------- | -- | ------------------------------------ |
8090| Default<sup>9+</sup> | 0 | 优先使用未过期cache加载资源,无效或无cache时从网络获取。 |
8091| None    | 1 | 优先使用cache(含过期)加载资源,无cache时从网络获取。     |
8092| Online  | 2 | 强制从网络获取最新资源,不使用任何cache。               |
8093| Only    | 3 | 仅使用本地cache加载资源。                        |
8094
8095## FileSelectorMode<sup>9+</sup>枚举说明
8096
8097**系统能力:** SystemCapability.Web.Webview.Core
8098
8099| 名称                   | 值 | 说明         |
8100| -------------------- | -- | ---------- |
8101| FileOpenMode         | 0 | 打开上传单个文件。  |
8102| FileOpenMultipleMode | 1 | 打开上传多个文件。  |
8103| FileOpenFolderMode   | 2 | 打开上传文件夹模式。 |
8104| FileSaveMode         | 3 | 文件保存模式。    |
8105
8106 ## HitTestType枚举说明
8107
8108 **系统能力:** SystemCapability.Web.Webview.Core
8109
8110| 名称            | 值 | 说明                       |
8111| ------------- | -- | ------------------------ |
8112| EditText      | 0 | 可编辑的区域。                  |
8113| Email         | 1 | 电子邮件地址。                  |
8114| HttpAnchor    | 2 | 超链接,其src为http。           |
8115| HttpAnchorImg | 3 | 带有超链接的图片,其中超链接的src为http。 |
8116| Img           | 4 | HTML::img标签。             |
8117| Map           | 5 | 地理地址。                    |
8118| Phone         | 6 | 电话号码。                    |
8119| Unknown       | 7 | 未知内容。                    |
8120
8121 ## OverScrollMode<sup>11+</sup>枚举说明
8122
8123 **系统能力:** SystemCapability.Web.Webview.Core
8124
8125| 名称     | 值 | 说明          |
8126| ------ | -- | ----------- |
8127| NEVER  | 0 | Web过滚动模式关闭。 |
8128| ALWAYS | 1 | Web过滚动模式开启。 |
8129
8130## OnContextMenuHideCallback<sup>11+</sup>
8131
8132type OnContextMenuHideCallback = () => void
8133
8134上下文菜单自定义隐藏的回调。
8135
8136**系统能力:** SystemCapability.Web.Webview.Core
8137
8138## SslError<sup>9+</sup>枚举说明
8139
8140onSslErrorEventReceive接口返回的SSL错误的具体原因。
8141
8142**系统能力:** SystemCapability.Web.Webview.Core
8143
8144| 名称           | 值 | 说明          |
8145| ------------ | -- | ----------- |
8146| Invalid      | 0 | 一般错误。       |
8147| HostMismatch | 1 | 主机名不匹配。     |
8148| DateInvalid  | 2 | 证书日期无效。     |
8149| Untrusted    | 3 | 证书颁发机构不受信任。 |
8150
8151## ProtectedResourceType<sup>9+</sup>枚举说明
8152
8153**系统能力:** SystemCapability.Web.Webview.Core
8154
8155| 名称                          | 值 | 说明            | 备注                         |
8156| --------------------------- | --------------- | ------------- | -------------------------- |
8157| MidiSysex                   | TYPE_MIDI_SYSEX | MIDI SYSEX资源。 | 目前仅支持权限事件上报,MIDI设备的使用还未支持。 |
8158| VIDEO_CAPTURE<sup>10+</sup> | TYPE_VIDEO_CAPTURE | 视频捕获资源,例如相机。  |                            |
8159| AUDIO_CAPTURE<sup>10+</sup> | TYPE_AUDIO_CAPTURE | 音频捕获资源,例如麦克风。 |                            |
8160| SENSOR<sup>12+</sup>        | TYPE_SENSOR | 传感器资源,例如加速度传感器。 |                            |
8161
8162## WebDarkMode<sup>9+</sup>枚举说明
8163
8164**系统能力:** SystemCapability.Web.Webview.Core
8165
8166| 名称   | 值 | 说明           |
8167| ---- | -- | ------------ |
8168| Off  | 0 | Web深色模式关闭。   |
8169| On   | 1 | Web深色模式开启。   |
8170| Auto | 2 | Web深色模式跟随系统。 |
8171
8172## WebCaptureMode<sup>10+</sup>枚举说明
8173
8174**系统能力:** SystemCapability.Web.Webview.Core
8175
8176| 名称          | 值 | 说明      |
8177| ----------- | -- | ------- |
8178| HOME_SCREEN | 0 | 主屏捕获模式。 |
8179
8180## WebMediaOptions<sup>10+</sup>
8181
8182Web媒体策略的配置。
8183
8184**系统能力:** SystemCapability.Web.Webview.Core
8185
8186| 名称             | 类型      | 必填   | 说明                                       |
8187| -------------- | ------- | ---- | ---------------------------------------- |
8188| resumeInterval | number  | 否    | 被暂停的Web音频能够自动续播的有效期,单位:秒。最长有效期为60秒,由于近似值原因,该有效期可能存在一秒内的误差。 |
8189| audioExclusive | boolean | 否    | 应用内多个Web实例的音频是否独占。                       |
8190
8191## ScreenCaptureConfig<sup>10+</sup>
8192
8193Web屏幕捕获的配置。
8194
8195**系统能力:** SystemCapability.Web.Webview.Core
8196
8197| 名称          | 类型                                      | 必填   | 说明         |
8198| ----------- | --------------------------------------- | ---- | ---------- |
8199| captureMode | [WebCaptureMode](#webcapturemode10枚举说明) | 是    | Web屏幕捕获模式。 |
8200
8201## WebLayoutMode<sup>11+</sup>枚举说明
8202
8203**系统能力:** SystemCapability.Web.Webview.Core
8204
8205| 名称          | 值 | 说明                 |
8206| ----------- | -- | ------------------ |
8207| NONE        | 0 | Web布局跟随系统。         |
8208| FIT_CONTENT | 1 | Web基于页面大小的自适应网页布局。 |
8209
8210## NestedScrollOptionsExt<sup>14+</sup>对象说明
8211
8212通过NestedScrollOptionsExt可以设置上下左右四个方向的嵌套滚动规则。
8213
8214**系统能力:** SystemCapability.Web.Webview.Core
8215
8216| 名称             | 类型               | 必填   | 说明                   |
8217| -------------- | ---------------- | ---- | -------------------- |
8218| scrollUp  | [NestedScrollMode](../apis-arkui/arkui-ts/ts-appendix-enums.md#nestedscrollmode10) | 否    | 可滚动组件往上滚动时的嵌套滚动选项。 |
8219| scrollDown | [NestedScrollMode](../apis-arkui/arkui-ts/ts-appendix-enums.md#nestedscrollmode10) | 否    | 可滚动组件往下滚动时的嵌套滚动选项。 |
8220| scrollLeft  | [NestedScrollMode](../apis-arkui/arkui-ts/ts-appendix-enums.md#nestedscrollmode10) | 否    | 可滚动组件往左滚动时的嵌套滚动选项。 |
8221| scrollRight | [NestedScrollMode](../apis-arkui/arkui-ts/ts-appendix-enums.md#nestedscrollmode10) | 否    | 可滚动组件往右滚动时的嵌套滚动选项。 |
8222
8223## DataResubmissionHandler<sup>9+</sup>
8224
8225通过DataResubmissionHandler可以重新提交表单数据或取消提交表单数据。
8226
8227### constructor<sup>9+</sup>
8228
8229constructor()
8230
8231DataResubmissionHandler的构造函数。
8232
8233**系统能力:** SystemCapability.Web.Webview.Core
8234
8235### resend<sup>9+</sup>
8236
8237resend(): void
8238
8239重新发送表单数据。
8240
8241**系统能力:** SystemCapability.Web.Webview.Core
8242
8243**示例:**
8244
8245  ```ts
8246  // xxx.ets
8247  import { webview } from '@kit.ArkWeb';
8248
8249  @Entry
8250  @Component
8251  struct WebComponent {
8252    controller: webview.WebviewController = new webview.WebviewController();
8253
8254    build() {
8255      Column() {
8256        Web({ src: 'www.example.com', controller: this.controller })
8257          .onDataResubmitted((event) => {
8258            console.log('onDataResubmitted');
8259            event.handler.resend();
8260          })
8261      }
8262    }
8263  }
8264  ```
8265
8266### cancel<sup>9+</sup>
8267
8268cancel(): void
8269
8270取消重新发送表单数据。
8271
8272**系统能力:** SystemCapability.Web.Webview.Core
8273
8274**示例:**
8275
8276  ```ts
8277  // xxx.ets
8278  import { webview } from '@kit.ArkWeb';
8279
8280  @Entry
8281  @Component
8282  struct WebComponent {
8283    controller: webview.WebviewController = new webview.WebviewController();
8284
8285    build() {
8286      Column() {
8287        Web({ src: 'www.example.com', controller: this.controller })
8288          .onDataResubmitted((event) => {
8289            console.log('onDataResubmitted');
8290            event.handler.cancel();
8291          })
8292      }
8293    }
8294  }
8295  ```
8296
8297  ## WebController
8298
8299通过WebController可以控制Web组件各种行为。一个WebController对象只能控制一个Web组件,且必须在Web组件和WebController绑定后,才能调用WebController上的方法。
8300
8301从API version 9开始不再维护,建议使用[WebviewController<sup>9+</sup>](js-apis-webview.md#webviewcontroller)代替。
8302
8303### 创建对象
8304
8305<!--code_no_check-->
8306```ts
8307let webController: WebController = new WebController()
8308```
8309
8310### getCookieManager<sup>(deprecated)</sup>
8311
8312getCookieManager(): WebCookie
8313
8314获取Web组件cookie管理对象。
8315
8316从API version 9开始不再维护,建议使用[getCookie](js-apis-webview.md#getcookiedeprecated)代替。
8317
8318**系统能力:** SystemCapability.Web.Webview.Core
8319
8320**返回值:**
8321
8322| 类型        | 说明                                       |
8323| --------- | ---------------------------------------- |
8324| WebCookie | Web组件cookie管理对象,参考[WebCookie](#webcookie)定义。 |
8325
8326**示例:**
8327
8328  ```ts
8329  // xxx.ets
8330  @Entry
8331  @Component
8332  struct WebComponent {
8333    controller: WebController = new WebController()
8334
8335    build() {
8336      Column() {
8337        Button('getCookieManager')
8338          .onClick(() => {
8339            let cookieManager = this.controller.getCookieManager()
8340          })
8341        Web({ src: 'www.example.com', controller: this.controller })
8342      }
8343    }
8344  }
8345  ```
8346
8347### requestFocus<sup>(deprecated)</sup>
8348
8349requestFocus()
8350
8351使当前web页面获取焦点。
8352
8353从API version 9开始不再维护,建议使用[requestFocus<sup>9+</sup>](js-apis-webview.md#requestfocus)代替。
8354
8355**系统能力:** SystemCapability.Web.Webview.Core
8356
8357**示例:**
8358
8359  ```ts
8360  // xxx.ets
8361  @Entry
8362  @Component
8363  struct WebComponent {
8364    controller: WebController = new WebController()
8365
8366    build() {
8367      Column() {
8368        Button('requestFocus')
8369          .onClick(() => {
8370            this.controller.requestFocus()
8371          })
8372        Web({ src: 'www.example.com', controller: this.controller })
8373      }
8374    }
8375  }
8376  ```
8377
8378### accessBackward<sup>(deprecated)</sup>
8379
8380accessBackward(): boolean
8381
8382当前页面是否可后退,即当前页面是否有返回历史记录。
8383
8384从API version 9开始不再维护,建议使用[accessBackward<sup>9+</sup>](js-apis-webview.md#accessbackward)代替。
8385
8386**系统能力:** SystemCapability.Web.Webview.Core
8387
8388**返回值:**
8389
8390| 类型      | 说明                    |
8391| ------- | --------------------- |
8392| boolean | 可以后退返回true,否则返回false。 |
8393
8394**示例:**
8395
8396  ```ts
8397  // xxx.ets
8398  @Entry
8399  @Component
8400  struct WebComponent {
8401    controller: WebController = new WebController()
8402
8403    build() {
8404      Column() {
8405        Button('accessBackward')
8406          .onClick(() => {
8407            let result = this.controller.accessBackward()
8408            console.log('result:' + result)
8409          })
8410        Web({ src: 'www.example.com', controller: this.controller })
8411      }
8412    }
8413  }
8414  ```
8415
8416### accessForward<sup>(deprecated)</sup>
8417
8418accessForward(): boolean
8419
8420当前页面是否可前进,即当前页面是否有前进历史记录。
8421
8422从API version 9开始不再维护,建议使用[accessForward<sup>9+</sup>](js-apis-webview.md#accessforward)代替。
8423
8424**系统能力:** SystemCapability.Web.Webview.Core
8425
8426**返回值:**
8427
8428| 类型      | 说明                    |
8429| ------- | --------------------- |
8430| boolean | 可以前进返回true,否则返回false。 |
8431
8432**示例:**
8433
8434  ```ts
8435  // xxx.ets
8436  @Entry
8437  @Component
8438  struct WebComponent {
8439    controller: WebController = new WebController()
8440
8441    build() {
8442      Column() {
8443        Button('accessForward')
8444          .onClick(() => {
8445            let result = this.controller.accessForward()
8446            console.log('result:' + result)
8447          })
8448        Web({ src: 'www.example.com', controller: this.controller })
8449      }
8450    }
8451  }
8452  ```
8453
8454### accessStep<sup>(deprecated)</sup>
8455
8456accessStep(step: number): boolean
8457
8458当前页面是否可前进或者后退给定的step步。
8459
8460从API version 9开始不再维护,建议使用[accessStep<sup>9+</sup>](js-apis-webview.md#accessstep)代替。
8461
8462**系统能力:** SystemCapability.Web.Webview.Core
8463
8464**参数:**
8465
8466| 参数名  | 类型   | 必填  | 说明                  |
8467| ---- | ------ | ---- | --------------------- |
8468| step | number | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
8469
8470**返回值:**
8471
8472| 类型      | 说明        |
8473| ------- | --------- |
8474| boolean | 页面是否前进或后退 |
8475
8476**示例:**
8477
8478  ```ts
8479  // xxx.ets
8480  @Entry
8481  @Component
8482  struct WebComponent {
8483    controller: WebController = new WebController()
8484    @State steps: number = 2
8485
8486    build() {
8487      Column() {
8488        Button('accessStep')
8489          .onClick(() => {
8490            let result = this.controller.accessStep(this.steps)
8491            console.log('result:' + result)
8492          })
8493        Web({ src: 'www.example.com', controller: this.controller })
8494      }
8495    }
8496  }
8497  ```
8498
8499### backward<sup>(deprecated)</sup>
8500
8501backward()
8502
8503按照历史栈,后退一个页面。一般结合accessBackward一起使用。
8504
8505从API version 9开始不再维护,建议使用[backward<sup>9+</sup>](js-apis-webview.md#backward)代替。
8506
8507**系统能力:** SystemCapability.Web.Webview.Core
8508
8509**示例:**
8510
8511  ```ts
8512  // xxx.ets
8513  @Entry
8514  @Component
8515  struct WebComponent {
8516    controller: WebController = new WebController()
8517
8518    build() {
8519      Column() {
8520        Button('backward')
8521          .onClick(() => {
8522            this.controller.backward()
8523          })
8524        Web({ src: 'www.example.com', controller: this.controller })
8525      }
8526    }
8527  }
8528  ```
8529
8530### forward<sup>(deprecated)</sup>
8531
8532forward()
8533
8534按照历史栈,前进一个页面。一般结合accessForward一起使用。
8535
8536从API version 9开始不再维护,建议使用[forward<sup>9+</sup>](js-apis-webview.md#forward)代替。
8537
8538**系统能力:** SystemCapability.Web.Webview.Core
8539
8540**示例:**
8541
8542  ```ts
8543  // xxx.ets
8544  @Entry
8545  @Component
8546  struct WebComponent {
8547    controller: WebController = new WebController()
8548
8549    build() {
8550      Column() {
8551        Button('forward')
8552          .onClick(() => {
8553            this.controller.forward()
8554          })
8555        Web({ src: 'www.example.com', controller: this.controller })
8556      }
8557    }
8558  }
8559  ```
8560
8561### deleteJavaScriptRegister<sup>(deprecated)</sup>
8562
8563deleteJavaScriptRegister(name: string)
8564
8565删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后立即生效,无须调用[refresh](#refreshdeprecated)接口。
8566
8567从API version 9开始不再维护,建议使用[deleteJavaScriptRegister<sup>9+</sup>](js-apis-webview.md#deletejavascriptregister)代替。
8568
8569**系统能力:** SystemCapability.Web.Webview.Core
8570
8571**参数:**
8572
8573| 参数名  | 类型   | 必填  | 说明                                     |
8574| ---- | ------ | ---- | ---------------------------------------- |
8575| name | string | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
8576
8577**示例:**
8578
8579  ```ts
8580  // xxx.ets
8581  @Entry
8582  @Component
8583  struct WebComponent {
8584    controller: WebController = new WebController()
8585    @State name: string = 'Object'
8586
8587    build() {
8588      Column() {
8589        Button('deleteJavaScriptRegister')
8590          .onClick(() => {
8591            this.controller.deleteJavaScriptRegister(this.name)
8592          })
8593        Web({ src: 'www.example.com', controller: this.controller })
8594      }
8595    }
8596  }
8597  ```
8598
8599### getHitTest<sup>(deprecated)</sup>
8600
8601getHitTest(): HitTestType
8602
8603获取当前被点击区域的元素类型。
8604
8605从API version 9开始不再维护,建议使用[getHitTest<sup>9+</sup>](js-apis-webview.md#gethittest)代替。
8606
8607**系统能力:** SystemCapability.Web.Webview.Core
8608
8609**返回值:**
8610
8611| 类型                              | 说明          |
8612| ------------------------------- | ----------- |
8613| [HitTestType](#hittesttype枚举说明) | 被点击区域的元素类型。 |
8614
8615**示例:**
8616
8617  ```ts
8618  // xxx.ets
8619  @Entry
8620  @Component
8621  struct WebComponent {
8622    controller: WebController = new WebController()
8623
8624    build() {
8625      Column() {
8626        Button('getHitTest')
8627          .onClick(() => {
8628            let hitType = this.controller.getHitTest()
8629            console.log("hitType: " + hitType)
8630          })
8631        Web({ src: 'www.example.com', controller: this.controller })
8632      }
8633    }
8634  }
8635  ```
8636
8637### loadData<sup>(deprecated)</sup>
8638
8639loadData(options: { data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string })
8640
8641baseUrl为空时,通过”data“协议加载指定的一段字符串。
8642
8643当baseUrl为”data“协议时,编码后的data字符串将被Web组件作为”data"协议加载。
8644
8645当baseUrl为“http/https"协议时,编码后的data字符串将被Web组件以类似loadUrl的方式以非编码字符串处理。
8646
8647从API version 9开始不再维护,建议使用[loadData<sup>9+</sup>](js-apis-webview.md#loaddata)代替。
8648
8649**系统能力:** SystemCapability.Web.Webview.Core
8650
8651**参数:**
8652
8653| 参数名        | 类型   | 必填   | 说明                                     |
8654| ---------- | ------ | ---- | ---------------------------------------- |
8655| data       | string | 是   | 按照”Base64“或者”URL"编码后的一段字符串。              |
8656| mimeType   | string | 是   | 媒体类型(MIME)。                              |
8657| encoding   | string | 是   | 编码类型,具体为“Base64"或者”URL编码。                |
8658| baseUrl    | string | 否   | 指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给window.origin。 |
8659| historyUrl | string | 否   | 历史记录URL。非空时,可被历史记录管理,实现前后后退功能。当baseUrl为空时,此属性无效。 |
8660
8661**示例:**
8662
8663  ```ts
8664  // xxx.ets
8665  @Entry
8666  @Component
8667  struct WebComponent {
8668    controller: WebController = new WebController()
8669
8670    build() {
8671      Column() {
8672        Button('loadData')
8673          .onClick(() => {
8674            this.controller.loadData({
8675              data: "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
8676              mimeType: "text/html",
8677              encoding: "UTF-8"
8678            })
8679          })
8680        Web({ src: 'www.example.com', controller: this.controller })
8681      }
8682    }
8683  }
8684  ```
8685
8686### loadUrl<sup>(deprecated)</sup>
8687
8688loadUrl(options: { url: string | Resource, headers?: Array\<Header\> })
8689
8690使用指定的http头加载指定的URL。
8691
8692通过loadUrl注入的对象只在当前document有效,即通过loadUrl导航到新的页面会无效。
8693
8694而通过registerJavaScriptProxy注入的对象,在loadUrl导航到新的页面也会有效。
8695
8696从API version 9开始不再维护,建议使用[loadUrl<sup>9+</sup>](js-apis-webview.md#loadurl)代替。
8697
8698**系统能力:** SystemCapability.Web.Webview.Core
8699
8700**参数:**
8701
8702| 参数名     | 类型                       | 必填  | 说明           |
8703| ------- | -------------------------- | ---- | -------------- |
8704| url     | string \| Resource                     | 是  | 需要加载的 URL。     |
8705| headers | Array\<[Header](#header)\> | 否    | URL的附加HTTP请求头。默认值:[]。 |
8706
8707**示例:**
8708
8709  ```ts
8710  // xxx.ets
8711  @Entry
8712  @Component
8713  struct WebComponent {
8714    controller: WebController = new WebController()
8715
8716    build() {
8717      Column() {
8718        Button('loadUrl')
8719          .onClick(() => {
8720            this.controller.loadUrl({ url: 'www.example.com' })
8721          })
8722        Web({ src: 'www.example.com', controller: this.controller })
8723      }
8724    }
8725  }
8726  ```
8727
8728### onActive<sup>(deprecated)</sup>
8729
8730onActive(): void
8731
8732调用此接口通知Web组件进入前台激活状态。
8733
8734从API version 9开始不再维护,建议使用[onActive<sup>9+</sup>](js-apis-webview.md#onactive)代替。
8735
8736**系统能力:** SystemCapability.Web.Webview.Core
8737
8738**示例:**
8739
8740  ```ts
8741  // xxx.ets
8742  @Entry
8743  @Component
8744  struct WebComponent {
8745    controller: WebController = new WebController()
8746
8747    build() {
8748      Column() {
8749        Button('onActive')
8750          .onClick(() => {
8751            this.controller.onActive()
8752          })
8753        Web({ src: 'www.example.com', controller: this.controller })
8754      }
8755    }
8756  }
8757  ```
8758
8759### onInactive<sup>(deprecated)</sup>
8760
8761onInactive(): void
8762
8763调用此接口通知Web组件进入未激活状态。
8764
8765从API version 9开始不再维护,建议使用[onInactive<sup>9+</sup>](js-apis-webview.md#oninactive)代替。
8766
8767**系统能力:** SystemCapability.Web.Webview.Core
8768
8769**示例:**
8770
8771  ```ts
8772  // xxx.ets
8773  @Entry
8774  @Component
8775  struct WebComponent {
8776    controller: WebController = new WebController()
8777
8778    build() {
8779      Column() {
8780        Button('onInactive')
8781          .onClick(() => {
8782            this.controller.onInactive()
8783          })
8784        Web({ src: 'www.example.com', controller: this.controller })
8785      }
8786    }
8787  }
8788  ```
8789
8790### zoom<sup>(deprecated)</sup>
8791
8792zoom(factor: number): void
8793
8794调整当前网页的缩放比例。
8795
8796从API version 9开始不再维护,建议使用[zoom<sup>9+</sup>](js-apis-webview.md#zoom)代替。
8797
8798**系统能力:** SystemCapability.Web.Webview.Core
8799
8800**参数:**
8801
8802| 参数名    | 类型   | 必填   | 说明                           |
8803| ------ | ------ | ---- | ------------------------------ |
8804| factor | number | 是    | 基于当前网页所需调整的相对缩放比例,正值为放大,负值为缩小。 |
8805
8806**示例:**
8807
8808  ```ts
8809  // xxx.ets
8810  @Entry
8811  @Component
8812  struct WebComponent {
8813    controller: WebController = new WebController()
8814    @State factor: number = 1
8815
8816    build() {
8817      Column() {
8818        Button('zoom')
8819          .onClick(() => {
8820            this.controller.zoom(this.factor)
8821          })
8822        Web({ src: 'www.example.com', controller: this.controller })
8823      }
8824    }
8825  }
8826  ```
8827
8828### refresh<sup>(deprecated)</sup>
8829
8830refresh()
8831
8832调用此接口通知Web组件刷新网页。
8833
8834从API version 9开始不再维护,建议使用[refresh<sup>9+</sup>](js-apis-webview.md#refresh)代替。
8835
8836**系统能力:** SystemCapability.Web.Webview.Core
8837
8838**示例:**
8839
8840  ```ts
8841  // xxx.ets
8842  @Entry
8843  @Component
8844  struct WebComponent {
8845    controller: WebController = new WebController()
8846
8847    build() {
8848      Column() {
8849        Button('refresh')
8850          .onClick(() => {
8851            this.controller.refresh()
8852          })
8853        Web({ src: 'www.example.com', controller: this.controller })
8854      }
8855    }
8856  }
8857  ```
8858
8859### registerJavaScriptProxy<sup>(deprecated)</sup>
8860
8861registerJavaScriptProxy(options: { object: object, name: string, methodList: Array\<string\> })
8862
8863注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refreshdeprecated)接口生效。
8864
8865从API version 9开始不再维护,建议使用[registerJavaScriptProxy<sup>9+</sup>](js-apis-webview.md#registerjavascriptproxy)代替。
8866
8867**系统能力:** SystemCapability.Web.Webview.Core
8868
8869**参数:**
8870
8871| 参数名        | 类型            | 必填  | 说明                                     |
8872| ---------- | --------------- | ---- | ---------------------------------------- |
8873| object     | object          | 是    | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。其中方法的参数和返回类型只能为string,number,boolean |
8874| name       | string          | 是    | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
8875| methodList | Array\<string\> | 是    | 参与注册的应用侧JavaScript对象的方法。                 |
8876
8877**示例:**
8878
8879  ```ts
8880  // xxx.ets
8881  class TestObj {
8882    constructor() {
8883    }
8884
8885    test(): string {
8886      return "ArkUI Web Component"
8887    }
8888
8889    toString(): void {
8890      console.log('Web Component toString')
8891    }
8892  }
8893
8894  @Entry
8895  @Component
8896  struct Index {
8897    controller: WebController = new WebController()
8898    testObj = new TestObj();
8899    build() {
8900      Column() {
8901        Row() {
8902          Button('Register JavaScript To Window').onClick(() => {
8903            this.controller.registerJavaScriptProxy({
8904              object: this.testObj,
8905              name: "objName",
8906              methodList: ["test", "toString"],
8907            })
8908          })
8909        }
8910        Web({ src: $rawfile('index.html'), controller: this.controller })
8911          .javaScriptAccess(true)
8912      }
8913    }
8914  }
8915  ```
8916
8917  加载的html文件。
8918  ```html
8919  <!-- index.html -->
8920  <!DOCTYPE html>
8921  <html>
8922      <meta charset="utf-8">
8923      <body>
8924          Hello world!
8925      </body>
8926      <script type="text/javascript">
8927      function htmlTest() {
8928          str = objName.test("test function")
8929          console.log('objName.test result:'+ str)
8930      }
8931  </script>
8932  </html>
8933
8934  ```
8935
8936### runJavaScript<sup>(deprecated)</sup>
8937
8938runJavaScript(options: { script: string, callback?: (result: string) => void })
8939
8940异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
8941
8942从API version 9开始不再维护,建议使用[runJavaScript<sup>9+</sup>](js-apis-webview.md#runjavascript)代替。
8943
8944**系统能力:** SystemCapability.Web.Webview.Core
8945
8946**参数:**
8947
8948| 参数名      | 类型                     | 必填 | 说明                                     |
8949| -------- | ------------------------ | ---- | ---------------------------------------- |
8950| script   | string                   | 是   | JavaScript脚本。                            |
8951| callback | (result: string) => void | 否   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
8952
8953**示例:**
8954
8955  ```ts
8956  // xxx.ets
8957  @Entry
8958  @Component
8959  struct WebComponent {
8960    controller: WebController = new WebController()
8961    @State webResult: string = ''
8962    build() {
8963      Column() {
8964        Text(this.webResult).fontSize(20)
8965        Web({ src: $rawfile('index.html'), controller: this.controller })
8966        .javaScriptAccess(true)
8967        .onPageEnd((event) => {
8968          this.controller.runJavaScript({
8969            script: 'test()',
8970            callback: (result: string)=> {
8971              this.webResult = result
8972              console.info(`The test() return value is: ${result}`)
8973            }})
8974          if (event) {
8975            console.info('url: ', event.url)
8976          }
8977        })
8978      }
8979    }
8980  }
8981  ```
8982  加载的html文件。
8983  ```html
8984  <!-- index.html -->
8985  <!DOCTYPE html>
8986  <html>
8987    <meta charset="utf-8">
8988    <body>
8989        Hello world!
8990    </body>
8991    <script type="text/javascript">
8992    function test() {
8993        console.log('Ark WebComponent')
8994        return "This value is from index.html"
8995    }
8996    </script>
8997  </html>
8998  ```
8999
9000### stop<sup>(deprecated)</sup>
9001
9002stop()
9003
9004停止页面加载。
9005
9006从API version 9开始不再维护,建议使用[stop<sup>9+</sup>](js-apis-webview.md#stop)代替。
9007
9008**系统能力:** SystemCapability.Web.Webview.Core
9009
9010**示例:**
9011
9012  ```ts
9013  // xxx.ets
9014  @Entry
9015  @Component
9016  struct WebComponent {
9017    controller: WebController = new WebController()
9018
9019    build() {
9020      Column() {
9021        Button('stop')
9022          .onClick(() => {
9023            this.controller.stop()
9024          })
9025        Web({ src: 'www.example.com', controller: this.controller })
9026      }
9027    }
9028  }
9029  ```
9030
9031### clearHistory<sup>(deprecated)</sup>
9032
9033clearHistory(): void
9034
9035删除所有前进后退记录。
9036
9037从API version 9开始不再维护,建议使用[clearHistory<sup>9+</sup>](js-apis-webview.md#clearhistory)代替。
9038
9039**系统能力:** SystemCapability.Web.Webview.Core
9040
9041**示例:**
9042
9043  ```ts
9044  // xxx.ets
9045  @Entry
9046  @Component
9047  struct WebComponent {
9048    controller: WebController = new WebController()
9049
9050    build() {
9051      Column() {
9052        Button('clearHistory')
9053          .onClick(() => {
9054            this.controller.clearHistory()
9055          })
9056        Web({ src: 'www.example.com', controller: this.controller })
9057      }
9058    }
9059  }
9060  ```
9061
9062## WebCookie
9063
9064通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookie。通过controller方法中的getCookieManager方法可以获取WebCookie对象,进行后续的cookie管理操作。
9065
9066### constructor<sup>9+</sup>
9067
9068constructor()
9069
9070WebCookie的构造函数。
9071
9072**系统能力:** SystemCapability.Web.Webview.Core
9073
9074### setCookie<sup>(deprecated)</sup>
9075
9076setCookie()
9077
9078设置cookie,该方法为同步方法。设置成功返回true,否则返回false。
9079
9080从API version 9开始不再维护,建议使用[setCookie<sup>9+</sup>](js-apis-webview.md#setcookie)代替。
9081
9082**系统能力:** SystemCapability.Web.Webview.Core
9083
9084### saveCookie<sup>(deprecated)</sup>
9085
9086saveCookie()
9087
9088将当前存在内存中的cookie同步到磁盘中,该方法为同步方法。
9089
9090从API version 9开始不再维护,建议使用[saveCookieAsync<sup>9+</sup>](js-apis-webview.md#savecookieasync)代替。
9091
9092**系统能力:** SystemCapability.Web.Webview.Core
9093
9094## ScriptItem<sup>11+</sup>
9095
9096通过[javaScriptOnDocumentStart](#javascriptondocumentstart11)属性注入到Web组件的ScriptItem对象。
9097
9098**系统能力:** SystemCapability.Web.Webview.Core
9099
9100| 名称          | 类型             | 必填   | 说明                    |
9101| ----------- | -------------- | ---- | --------------------- |
9102| script      | string         | 是    | 需要注入、执行的JavaScript脚本。 |
9103| scriptRules | Array\<string> | 是   | 一组允许来源的匹配规则。<br>1.如果需要允许所有来源的网址,使用通配符“ * ”。<br>2.如果需要精确匹配,则描述网站地址,如"https:\//www\.example.com"。<br>3.如果模糊匹配网址,可以使用“ * ”通配符替代,如"https://*.example.com"。不允许使用"x. * .y.com"、" * foobar.com"等。<br>4.如果来源是ip地址,则使用规则2。<br>5.对于http/https以外的协议(自定义协议),不支持使用精确匹配和模糊匹配,且必须以"://"结尾,例如"resource://"。<br>6.一组scriptRule中,如果其中一条不满足以上规则,则整组scriptRule都不生效。 |
9104
9105## WebNavigationType<sup>11+</sup>
9106
9107定义navigation类型。
9108
9109**系统能力:** SystemCapability.Web.Webview.Core
9110
9111| 名称                           | 值 | 说明           |
9112| ----------------------------- | -- | ------------ |
9113| UNKNOWN                       | 0 | 未知类型。   |
9114| MAIN_FRAME_NEW_ENTRY          | 1 | 主文档上产生的新的历史节点跳转。   |
9115| MAIN_FRAME_EXISTING_ENTRY     | 2 | 主文档上产生的到已有的历史节点的跳转。 |
9116| NAVIGATION_TYPE_NEW_SUBFRAME  | 4 | 子文档上产生的用户触发的跳转。 |
9117| NAVIGATION_TYPE_AUTO_SUBFRAME | 5 | 子文档上产生的非用户触发的跳转。 |
9118
9119## LoadCommittedDetails<sup>11+</sup>
9120
9121提供已提交跳转的网页的详细信息。
9122
9123**系统能力:** SystemCapability.Web.Webview.Core
9124
9125| 名称             | 类型                                  | 必填   | 说明                    |
9126| -----------     | ------------------------------------ | ---- | --------------------- |
9127| isMainFrame     | boolean                              | 是    | 是否是主文档。 |
9128| isSameDocument  | boolean                              | 是    | 是否在不更改文档的情况下进行的网页跳转。在同文档跳转的示例:1.参考片段跳转;2.pushState或replaceState触发的跳转;3.同一页面历史跳转。  |
9129| didReplaceEntry | boolean                              | 是    | 是否提交的新节点替换了已有的节点。另外在一些子文档跳转的场景,虽然没有实际替换已有节点,但是有一些属性发生了变更。  |
9130| navigationType  | [WebNavigationType](#webnavigationtype11)  | 是    | 网页跳转的类型。       |
9131| url             | string                               | 是    | 当前跳转网页的URL。          |
9132
9133## ThreatType<sup>11+</sup>
9134
9135定义网站风险类型。
9136
9137**系统能力:** SystemCapability.Web.Webview.Core
9138
9139| 名称             | 值 | 说明                   |
9140| ---------------- | -- | ----------------------|
9141| THREAT_ILLEGAL  | 0 | 非法网站。              |
9142| THREAT_FRAUD    | 1 | 欺诈网站。              |
9143| THREAT_RISK     | 2 | 存在安全风险的网站。      |
9144| THREAT_WARNING  | 3 | 涉嫌包含不健康内容的网站。 |
9145
9146## OnNavigationEntryCommittedCallback<sup>11+</sup>
9147
9148type OnNavigationEntryCommittedCallback = (loadCommittedDetails: [LoadCommittedDetails](#loadcommitteddetails11)) => void
9149
9150导航条目提交时触发的回调。
9151
9152**系统能力:** SystemCapability.Web.Webview.Core
9153
9154**参数:**
9155
9156| 参数名    | 类型   | 必填   | 说明                  |
9157| ------ | ------ | ---- | --------------------- |
9158| loadCommittedDetails | [LoadCommittedDetails](#loadcommitteddetails11)  | 是 | 提供已提交跳转的网页的详细信息。 |
9159
9160## OnSafeBrowsingCheckResultCallback<sup>11+</sup>
9161
9162type OnSafeBrowsingCheckResultCallback = (threatType: ThreatType) => void
9163
9164网站安全风险检查触发的回调。
9165
9166**系统能力:** SystemCapability.Web.Webview.Core
9167
9168**参数:**
9169
9170| 参数名    | 类型   | 必填   | 说明                  |
9171| ------ | ------ | ---- | --------------------- |
9172| threatType | [ThreatType](#threattype11)  | 是 | 定义网站threat类型。  |
9173
9174## FullScreenEnterEvent<sup>12+</sup>
9175
9176Web组件进入全屏回调事件的详情。
9177
9178**系统能力:** SystemCapability.Web.Webview.Core
9179
9180| 名称             | 类型                                  | 必填   | 说明                    |
9181| -----------     | ------------------------------------ | ---- | --------------------- |
9182| handler     | [FullScreenExitHandler](#fullscreenexithandler9) | 是    | 用于退出全屏模式的函数句柄。 |
9183| videoWidth  | number | 否    | 视频的宽度,单位:px。如果进入全屏的是 `<video>` 元素,表示其宽度;如果进入全屏的子元素中包含 `<video>` 元素,表示第一个子视频元素的宽度;其他情况下,为0。 |
9184| videoHeight  | number | 否    | 视频的高度,单位:px。如果进入全屏的是 `<video>` 元素,表示其高度;如果进入全屏的子元素中包含 `<video>` 元素,表示第一个子视频元素的高度;其他情况下,为0。 |
9185
9186## OnFullScreenEnterCallback<sup>12+</sup>
9187
9188type OnFullScreenEnterCallback = (event: FullScreenEnterEvent) => void
9189
9190Web组件进入全屏时触发的回调。
9191
9192**系统能力:** SystemCapability.Web.Webview.Core
9193
9194**参数:**
9195
9196| 参数名    | 类型   | 必填   | 说明                  |
9197| ------ | ------ | ---- | --------------------- |
9198| event | [FullScreenEnterEvent](#fullscreenenterevent12)  | 是 | Web组件进入全屏的回调事件详情。 |
9199
9200## SslErrorEvent<sup>12+</sup>
9201
9202用户加载资源时发生SSL错误时触发的回调详情。
9203
9204**系统能力:** SystemCapability.Web.Webview.Core
9205
9206| 名称     | 类型                                 | 必填   | 说明           |
9207| ------- | ------------------------------------ | ---- | -------------- |
9208| handler | [SslErrorHandler](#sslerrorhandler9) | 是    | 通知Web组件用户操作行为。 |
9209| error   | [SslError](#sslerror9枚举说明)        | 是    | 错误码。           |
9210| url   | string                                 | 是    | url地址。           |
9211| originalUrl   | string                         | 是    | 请求的原始url地址。           |
9212| referrer   | string                            | 是    | referrer url地址。           |
9213| isFatalError   | boolean                       | 是    | 是否是致命错误。           |
9214| isMainFrame   | boolean                        | 是    | 是否是主资源。           |
9215
9216
9217## OnSslErrorEventCallback<sup>12+</sup>
9218
9219type OnSslErrorEventCallback = (sslErrorEvent: SslErrorEvent) => void
9220
9221用户加载资源时发生SSL错误时触发的回调。
9222
9223**系统能力:** SystemCapability.Web.Webview.Core
9224
9225**参数:**
9226
9227| 参数名    | 类型   | 必填   | 说明                  |
9228| ------ | ------ | ---- | --------------------- |
9229| sslErrorEvent | [SslErrorEvent](#sslerrorevent12)  | 是 | 用户加载资源时发生SSL错误时触发的回调详情。 |
9230
9231## NativeEmbedStatus<sup>11+</sup>
9232
9233定义同层标签生命周期,当加载页面中有同层标签会触发CREATE,同层标签移动或者放大会触发UPDATE,退出页面会触发DESTROY。
9234
9235**系统能力:** SystemCapability.Web.Webview.Core
9236
9237| 名称                           | 值 | 说明           |
9238| ----------------------------- | -- | ------------ |
9239| CREATE                        | 0 | 同层标签创建。   |
9240| UPDATE                        | 1 | 同层标签更新。   |
9241| DESTROY                       | 2 | 同层标签销毁。 |
9242| ENTER_BFCACHE<sup>12+</sup>   | 3 | 同层标签进入BFCache。   |
9243| LEAVE_BFCACHE<sup>12+</sup>   | 4 | 同层标签离开BFCache。 |
9244
9245## NativeEmbedInfo<sup>11+</sup>
9246
9247提供同层标签的详细信息。
9248
9249**系统能力:** SystemCapability.Web.Webview.Core
9250
9251| 名称                | 类型                                  | 必填   | 说明                        |
9252|-------------------| ------------------------------------ | ---- |---------------------------|
9253| id                | string             | 否    | 同层标签的id信息。             |
9254| type              | string                              | 否    | 同层标签的type信息,统一为小写字符。   |
9255| src               | string                              | 否    | 同层标签的src信息。            |
9256| width             | number  | 否    | 同层标签的宽,单位为px。          |
9257| height            | number                              | 否    | 同层标签的高,单位为px。          |
9258| url               | string                              | 否    | 同层标签的url信息。            |
9259| tag<sup>12+</sup> | string              | 否    | 标签名,统一为大写字符。              |
9260| params<sup>12+</sup>            | Map<string, string> | 否    | object标签包含的param标签键值对列表,该map本质为Object类型,请使用Object提供的方法操作该对象。  |
9261| position<sup>12+</sup>          | Position            | 否    | 同层标签在屏幕坐标系中相对于Web组件的位置信息,此处区别于标准Position,单位为px。 |
9262
9263## NativeEmbedDataInfo<sup>11+</sup>
9264
9265提供同层标签生命周期变化的详细信息。
9266
9267**系统能力:** SystemCapability.Web.Webview.Core
9268
9269| 名称             | 类型                                  | 必填   | 说明                    |
9270| -----------     | ------------------------------------ | ---- | --------------------- |
9271| status     | [NativeEmbedStatus](#nativeembedstatus11)             | 否    | 同层标签生命周期状态。 |
9272| surfaceId  | string                              | 否    | NativeImage的psurfaceid。  |
9273| embedId | string                              | 否    | 同层标签的唯一id。  |
9274| info  | [NativeEmbedInfo](#nativeembedinfo11)  | 否    | 同层标签的详细信息。       |
9275
9276## NativeEmbedTouchInfo<sup>11+</sup>
9277
9278提供手指触摸到同层标签的详细信息。
9279
9280**系统能力:** SystemCapability.Web.Webview.Core
9281
9282| 名称             | 类型                                  | 必填   | 说明                    |
9283| -----------     | ------------------------------------ | ---- | --------------------- |
9284| embedId     | string   | 否    | 同层标签的唯一id。 |
9285| touchEvent  | [TouchEvent](../apis-arkui/arkui-ts/ts-universal-events-touch.md#touchevent对象说明)  | 否    | 手指触摸动作信息。 |
9286| result<sup>12+</sup>     | [EventResult](#eventresult12)   | 否    | 通知Web组件手势事件的消费结果。 |
9287
9288## FirstMeaningfulPaint<sup>12+</sup>
9289
9290提供网页绘制页面主要内容的详细信息。
9291
9292**系统能力:** SystemCapability.Web.Webview.Core
9293
9294| 名称                     | 类型   | 必填 | 说明                                   |
9295| ------------------------ | ------ | ---- | -------------------------------------- |
9296| navigationStartTime      | number | 否  | 导航条加载时间,单位以微秒表示。       |
9297| firstMeaningfulPaintTime | number | 否   | 绘制页面主要内容时间,单位以毫秒表示。 |
9298
9299## OnFirstMeaningfulPaintCallback<sup>12+</sup>
9300
9301type OnFirstMeaningfulPaintCallback = (firstMeaningfulPaint: [FirstMeaningfulPaint](#firstmeaningfulpaint12)) => void
9302
9303网页绘制页面度量信息的回调,当网页加载完页面主要内容时会触发该回调。
9304
9305**系统能力:** SystemCapability.Web.Webview.Core
9306
9307**参数:**
9308
9309| 参数名    | 类型   | 必填   | 说明                  |
9310| ------ | ------ | ---- | --------------------- |
9311| firstMeaningfulPaint | [FirstMeaningfulPaint](#firstmeaningfulpaint12) | 是 | 绘制页面主要内容度量的详细信息。 |
9312
9313## LargestContentfulPaint<sup>12+</sup>
9314
9315提供网页绘制页面主要内容的详细信息。
9316
9317**系统能力:** SystemCapability.Web.Webview.Core
9318
9319| 名称                      | 类型   | 必填 | 说明                                     |
9320| ------------------------- | ------ | ---- | ---------------------------------------- |
9321| navigationStartTime       | number | 否   | 导航条加载时间,单位以微秒表示。         |
9322| largestImagePaintTime     | number | 否   | 最大图片加载的时间,单位是以毫秒表示。   |
9323| largestTextPaintTime      | number | 否   | 最大文本加载时间,单位是以毫秒表示。     |
9324| largestImageLoadStartTime | number | 否   | 最大图片开始加载时间,单位是以毫秒表示。 |
9325| largestImageLoadEndTime   | number | 否   | 最大图片结束记载时间,单位是以毫秒表示。 |
9326| imageBPP                  | number | 否   | 最大图片像素位数。                           |
9327
9328## OnLargestContentfulPaintCallback<sup>12+</sup>
9329
9330type OnLargestContentfulPaintCallback = (largestContentfulPaint: [LargestContentfulPaint](#largestcontentfulpaint12
9331)) => void
9332
9333网页绘制页面最大内容度量信息的回调。
9334
9335**系统能力:** SystemCapability.Web.Webview.Core
9336
9337**参数:**
9338
9339| 参数名    | 类型   | 必填   | 说明                  |
9340| ------ | ------ | ---- | --------------------- |
9341| largestContentfulPaint | [LargestContentfulPaint](#largestcontentfulpaint12) | 是 | 网页绘制页面最大内容度量的详细信息。 |
9342
9343## IntelligentTrackingPreventionDetails<sup>12+</sup>
9344
9345提供智能防跟踪拦截的详细信息。
9346
9347**系统能力:** SystemCapability.Web.Webview.Core
9348
9349| 名称           | 类型                                | 必填   | 说明         |
9350| ------------- | ------------------------------------| ----- | ------------ |
9351| host          | string                              | 是     | 网站域名。    |
9352| trackerHost   | string                              | 是     | 追踪者域名。  |
9353
9354## OnIntelligentTrackingPreventionCallback<sup>12+</sup>
9355
9356type OnIntelligentTrackingPreventionCallback = (details: IntelligentTrackingPreventionDetails) => void
9357
9358当跟踪者cookie被拦截时触发的回调。
9359
9360**系统能力:** SystemCapability.Web.Webview.Core
9361
9362**参数:**
9363
9364| 参数名    | 类型   | 必填   | 说明                  |
9365| ------ | ------ | ---- | --------------------- |
9366| details | [IntelligentTrackingPreventionDetails](#intelligenttrackingpreventiondetails12)  | 是 | 提供智能防跟踪拦截的详细信息。 |
9367
9368## OnOverrideUrlLoadingCallback<sup>12+</sup>
9369
9370type OnOverrideUrlLoadingCallback = (webResourceRequest: WebResourceRequest) => boolean
9371
9372onOverrideUrlLoading的回调。
9373
9374**系统能力:** SystemCapability.Web.Webview.Core
9375
9376**参数:**
9377
9378| 参数名              | 类型    | 必填   |  说明 |
9379| ------------------ | ------- | ---- | ------------- |
9380| webResourceRequest   |   [WebResourceRequest](#webresourcerequest)   | 是   | url请求的相关信息。|
9381
9382**返回值:**
9383
9384| 类型      | 说明                       |
9385| ------- | ------------------------ |
9386| boolean | 返回true表示阻止此次加载,否则允许此次加载。 |
9387
9388## RenderMode<sup>12+</sup>枚举说明
9389
9390定义Web组件的渲染方式,默认为异步渲染模式。
9391
9392建议使用异步渲染模式,异步渲染模式有更好的性能和更低的功耗。
9393
9394**系统能力:** SystemCapability.Web.Webview.Core
9395
9396| 名称                           | 值 | 说明           |
9397| ----------------------------- | -- | ------------ |
9398| ASYNC_RENDER                        | 0 | Web组件异步渲染模式,ArkWeb组件作为图形surface节点,独立送显,Web组件的宽度最大规格不超过7,680 px(物理像素)。   |
9399| SYNC_RENDER                        | 1 | Web组件同步渲染模式,ArkWeb组件作为图形canvas节点,跟随系统组件一起送显,可以渲染更长的Web组件内容,Web组件的宽度最大规格不超过500,000 px(物理像素)。   |
9400
9401## NativeMediaPlayerConfig<sup>12+</sup>
9402
9403用于[开启应用接管网页媒体播放功能](#enablenativemediaplayer12)的配置信息。
9404
9405**系统能力:** SystemCapability.Web.Webview.Core
9406
9407| 名称 | 类型 | 必填 | 说明 |
9408|------|------|------|------|
9409|  enable  | boolean | 是 | 是否开启该功能。<br/> `true` : 开启  <br/> `false` : 关闭(默认值) |
9410|  shouldOverlay | boolean | 是 | 开启该功能后, 应用接管网页视频的播放器画面是否覆盖网页内容。<br/> `true` : 是,改变视频图层的高度,使其覆盖网页内容 <br/> `false` : 否(默认值), 不覆盖,跟原视频图层高度一样,嵌入在网页中。 |
9411
9412## RenderProcessNotRespondingReason<sup>12+</sup>
9413
9414触发渲染进程无响应回调的原因。
9415
9416**系统能力:** SystemCapability.Web.Webview.Core
9417
9418| 名称                           | 值 | 说明           |
9419| ----------------------------- | -- | ------------ |
9420| INPUT_TIMEOUT                  | 0 | 发送给渲染进程的input事件响应超时。   |
9421| NAVIGATION_COMMIT_TIMEOUT      | 1 | 新的网页加载导航响应超时。   |
9422
9423## RenderProcessNotRespondingData<sup>12+</sup>
9424
9425提供渲染进程无响应的详细信息。
9426
9427**系统能力:** SystemCapability.Web.Webview.Core
9428
9429| 名称                     | 类型   | 必填 | 说明                                   |
9430| ------------------------ | ------ | ---- | -------------------------------------- |
9431| jsStack      | string | 是  | 网页的javaScript调用栈信息。       |
9432| pid | number | 是   | 网页的进程id。 |
9433| reason | [RenderProcessNotRespondingReason](#renderprocessnotrespondingreason12) | 是   | 触发渲染进程无响应回调的原因。 |
9434
9435## OnRenderProcessNotRespondingCallback<sup>12+</sup>
9436
9437type OnRenderProcessNotRespondingCallback = (data : RenderProcessNotRespondingData) => void
9438
9439渲染进程无响应时触发的回调。
9440
9441**系统能力:** SystemCapability.Web.Webview.Core
9442
9443**参数:**
9444
9445| 参数名    | 类型   | 必填   | 说明                  |
9446| ------ | ------ | ---- | --------------------- |
9447| data | [RenderProcessNotRespondingData](#renderprocessnotrespondingdata12) | 是 | 渲染进程无响应的详细信息。 |
9448
9449## OnRenderProcessRespondingCallback<sup>12+</sup>
9450
9451type OnRenderProcessRespondingCallback = () => void
9452
9453渲染进程由无响应状态变回正常运行状态时触发该回调。
9454
9455**系统能力:** SystemCapability.Web.Webview.Core
9456
9457## ViewportFit<sup>12+</sup>
9458
9459网页meta中viewport-fit配置的视口类型。
9460
9461**系统能力:** SystemCapability.Web.Webview.Core
9462
9463| 名称                           | 值 | 说明           |
9464| ----------------------------- | -- | ------------ |
9465| AUTO                  | 0 | 默认值,整个网页可见。   |
9466| CONTAINS      | 1 | 初始布局视口和视觉视口为适应设备显示屏的最大矩形内。   |
9467| COVER      | 2| 初始布局视口和视觉视口为设备物理屏幕的外接矩形内。   |
9468
9469## OnViewportFitChangedCallback<sup>12+</sup>
9470
9471type OnViewportFitChangedCallback = (viewportFit: ViewportFit) => void
9472
9473网页meta中viewport-fit配置项更改时触发的回调。
9474
9475**系统能力:** SystemCapability.Web.Webview.Core
9476
9477**参数:**
9478
9479| 参数名    | 类型   | 必填   | 说明                  |
9480| ------ | ------ | ---- | --------------------- |
9481| viewportFit | [ViewportFit](#viewportfit12) | 是 | 网页meta中viewport-fit配置的视口类型。 |
9482
9483## ExpandedMenuItemOptions<sup>12+</sup>
9484
9485自定义菜单扩展项。
9486
9487**系统能力:** SystemCapability.Web.Webview.Core
9488
9489| 名称           | 类型                                             | 必填    | 说明             |
9490| ---------- | -----------------------------------------------------| ------ | ---------------- |
9491| content   | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr)  | 是     | 显示内容。     |
9492| startIcon | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr)  | 否     | 显示图标。     |
9493| action    | (selectedText: {plainText: string}) => void                    | 是     | 选中的文本信息。|
9494
9495## WebKeyboardAvoidMode<sup>12+</sup>
9496
9497软键盘避让的模式。
9498
9499**系统能力:** SystemCapability.Web.Webview.Core
9500
9501| 名称               | 值 | 说明           |
9502| ------------------ | -- | ------------ |
9503| RESIZE_VISUAL      | 0 | 软键盘避让时,仅调整可视视口大小,不调整布局视口大小。   |
9504| RESIZE_CONTENT     | 1 | 默认值,软键盘避让时,同时调整可视视口和布局视口的大小。 |
9505| OVERLAYS_CONTENT   | 2 | 不调整任何视口大小,不会触发软键盘避让。   |
9506
9507## OnPageEndEvent<sup>12+</sup>
9508
9509定义网页加载结束时触发的函数。
9510
9511**系统能力:** SystemCapability.Web.Webview.Core
9512
9513| 名称             | 类型      | 必填   | 说明                                       |
9514| -------------- | ---- | ---- | ---------------------------------------- |
9515| url | string | 是 | 页面的URL地址。                       |
9516
9517## OnPageBeginEvent<sup>12+</sup>
9518
9519定义网页加载开始时触发的函数。
9520
9521**系统能力:** SystemCapability.Web.Webview.Core
9522
9523| 名称             | 类型      | 必填   | 说明                                       |
9524| -------------- | ---- | ---- | ---------------------------------------- |
9525| url | string | 是 | 页面的URL地址。                       |
9526
9527## OnProgressChangeEvent<sup>12+</sup>
9528
9529定义网页加载进度变化时触发该回调。
9530
9531**系统能力:** SystemCapability.Web.Webview.Core
9532
9533| 名称             | 类型      | 必填   | 说明                                       |
9534| -------------- | ---- | ---- | ---------------------------------------- |
9535| newProgress | number | 是 | 新的加载进度,取值范围为0到100的整数。                       |
9536
9537## OnTitleReceiveEvent<sup>12+</sup>
9538
9539定义网页document标题更改时触发该回调。
9540
9541**系统能力:** SystemCapability.Web.Webview.Core
9542
9543| 名称             | 类型      | 必填   | 说明                                       |
9544| -------------- | ---- | ---- | ---------------------------------------- |
9545| title | string | 是 | document标题内容。                       |
9546
9547## OnGeolocationShowEvent<sup>12+</sup>
9548
9549定义通知用户收到地理位置信息获取请求。
9550
9551**系统能力:** SystemCapability.Web.Webview.Core
9552
9553| 名称             | 类型      | 必填   | 说明                                       |
9554| -------------- | ---- | ---- | ---------------------------------------- |
9555| origin | string | 是 | 指定源的字符串索引。                       |
9556| geolocation | [JsGeolocation](#jsgeolocation) | 是 | 通知Web组件用户操作行为。                       |
9557
9558## OnAlertEvent<sup>12+</sup>
9559
9560定义网页触发alert()告警弹窗时触发回调。
9561
9562**系统能力:** SystemCapability.Web.Webview.Core
9563
9564| 名称             | 类型      | 必填   | 说明                                       |
9565| -------------- | ---- | ---- | ---------------------------------------- |
9566| url | string | 是 | 当前显示弹窗所在网页的URL。                       |
9567| message | string | 是 | 弹窗中显示的信息。                       |
9568| result | [JsResult](#jsresult) | 是 | 通知Web组件用户操作行为。                       |
9569
9570## OnBeforeUnloadEvent<sup>12+</sup>
9571
9572定义刷新或关闭场景下,在即将离开当前页面时触发此回调。
9573
9574**系统能力:** SystemCapability.Web.Webview.Core
9575
9576| 名称             | 类型      | 必填   | 说明                                       |
9577| -------------- | ---- | ---- | ---------------------------------------- |
9578| url | string | 是 | 当前显示弹窗所在网页的URL。                       |
9579| message | string | 是 | 弹窗中显示的信息。                       |
9580| result | [JsResult](#jsresult) | 是 | 通知Web组件用户操作行为。                       |
9581
9582## OnConfirmEvent<sup>12+</sup>
9583
9584定义网页调用confirm()告警时触发此回调。
9585
9586**系统能力:** SystemCapability.Web.Webview.Core
9587
9588| 名称             | 类型      | 必填   | 说明                                       |
9589| -------------- | ---- | ---- | ---------------------------------------- |
9590| url | string | 是 | 当前显示弹窗所在网页的URL。                       |
9591| message | string | 是 | 弹窗中显示的信息。                       |
9592| result | [JsResult](#jsresult) | 是 | 通知Web组件用户操作行为。                       |
9593
9594## OnPromptEvent<sup>12+</sup>
9595
9596定义网页调用prompt()告警时触发此回调。
9597
9598**系统能力:** SystemCapability.Web.Webview.Core
9599
9600| 名称             | 类型      | 必填   | 说明                                       |
9601| -------------- | ---- | ---- | ---------------------------------------- |
9602| url | string | 是 | 当前显示弹窗所在网页的URL。                       |
9603| message | string | 是 | 弹窗中显示的信息。                       |
9604| value | string | 是 | 提示对话框的信息。                       |
9605| result | [JsResult](#jsresult) | 是 | 通知Web组件用户操作行为。                       |
9606
9607## OnConsoleEvent<sup>12+</sup>
9608
9609定义通知宿主应用JavaScript console消息。
9610
9611**系统能力:** SystemCapability.Web.Webview.Core
9612
9613| 名称             | 类型      | 必填   | 说明                                       |
9614| -------------- | ---- | ---- | ---------------------------------------- |
9615| message | [ConsoleMessage](#consolemessage) | 是 | 触发的控制台信息。                       |
9616
9617## OnErrorReceiveEvent<sup>12+</sup>
9618
9619定义网页加载遇到错误时触发该回调。
9620
9621**系统能力:** SystemCapability.Web.Webview.Core
9622
9623| 名称             | 类型      | 必填   | 说明                                       |
9624| -------------- | ---- | ---- | ---------------------------------------- |
9625| request | [WebResourceRequest](#webresourcerequest) | 是 | 网页请求的封装信息。      |
9626| error   | [WebResourceError](#webresourceerror)    | 是 | 网页加载资源错误的封装信息 。 |
9627
9628## OnHttpErrorReceiveEvent<sup>12+</sup>
9629
9630定义网页收到加载资源加载HTTP错误时触发。
9631
9632**系统能力:** SystemCapability.Web.Webview.Core
9633
9634| 名称             | 类型      | 必填   | 说明                                       |
9635| -------------- | ---- | ---- | ---------------------------------------- |
9636| request | [WebResourceRequest](#webresourcerequest) | 是 | 网页请求的封装信息。      |
9637| response   | [WebResourceResponse](#webresourceresponse)    | 是 | 资源响应的封装信息。 |
9638
9639## OnDownloadStartEvent<sup>12+</sup>
9640
9641定义通知主应用开始下载一个文件。
9642
9643**系统能力:** SystemCapability.Web.Webview.Core
9644
9645| 名称             | 类型      | 必填   | 说明                                       |
9646| -------------- | ---- | ---- | ---------------------------------------- |
9647| url                | string | 是 | 文件下载的URL。                           |
9648| userAgent          | string | 是 | 用于下载的用户代理。                          |
9649| contentDisposition | string | 是 | 服务器返回的 Content-Disposition响应头,可能为空。 |
9650| mimetype           | string | 是 | 服务器返回内容媒体类型(MIME)信息。                |
9651| contentLength      | number | 是 | 服务器返回文件的长度。                         |
9652
9653## OnRefreshAccessedHistoryEvent<sup>12+</sup>
9654
9655定义网页刷新访问历史记录时触发。
9656
9657**系统能力:** SystemCapability.Web.Webview.Core
9658
9659| 名称             | 类型      | 必填   | 说明                                       |
9660| -------------- | ---- | ---- | ---------------------------------------- |
9661| url         | string  | 是 | 访问的url。                                  |
9662| isRefreshed | boolean | 是 | true表示该页面是被重新加载的(调用[refresh<sup>9+</sup>](js-apis-webview.md#refresh)接口),false表示该页面是新加载的。 |
9663
9664## OnRenderExitedEvent<sup>12+</sup>
9665
9666定义渲染过程退出时触发。
9667
9668**系统能力:** SystemCapability.Web.Webview.Core
9669
9670| 名称             | 类型      | 必填   | 说明                                       |
9671| -------------- | ---- | ---- | ---------------------------------------- |
9672| renderExitReason | [RenderExitReason](#renderexitreason9枚举说明) | 是 | 渲染进程异常退出的具体原因。 |
9673
9674## OnShowFileSelectorEvent<sup>12+</sup>
9675
9676定义文件选择器结果。
9677
9678**系统能力:** SystemCapability.Web.Webview.Core
9679
9680| 名称             | 类型      | 必填   | 说明                                       |
9681| -------------- | ---- | ---- | ---------------------------------------- |
9682| result       | [FileSelectorResult](#fileselectorresult9) | 是 | 用于通知Web组件文件选择的结果。 |
9683| fileSelector | [FileSelectorParam](#fileselectorparam9) | 是 | 文件选择器的相关信息。       |
9684
9685## OnResourceLoadEvent<sup>12+</sup>
9686
9687定义加载url时触发。
9688
9689**系统能力:** SystemCapability.Web.Webview.Core
9690
9691| 名称             | 类型      | 必填   | 说明                                       |
9692| -------------- | ---- | ---- | ---------------------------------------- |
9693| url  | string | 是 | 所加载的资源文件url信息。 |
9694
9695## OnScaleChangeEvent<sup>12+</sup>
9696
9697定义当前页面显示比例的变化时触发。
9698
9699**系统能力:** SystemCapability.Web.Webview.Core
9700
9701| 名称             | 类型      | 必填   | 说明                                       |
9702| -------------- | ---- | ---- | ---------------------------------------- |
9703| oldScale | number | 是 | 变化前的显示比例百分比。 |
9704| newScale | number | 是 | 变化后的显示比例百分比。 |
9705
9706## OnHttpAuthRequestEvent<sup>12+</sup>
9707
9708定义通知收到http auth认证请求。
9709
9710**系统能力:** SystemCapability.Web.Webview.Core
9711
9712| 名称             | 类型      | 必填   | 说明                                       |
9713| -------------- | ---- | ---- | ---------------------------------------- |
9714| handler | [HttpAuthHandler](#httpauthhandler9) | 是 | 通知Web组件用户操作行为。   |
9715| host    | string                               | 是 | HTTP身份验证凭据应用的主机。 |
9716| realm   | string                               | 是 | HTTP身份验证凭据应用的域。  |
9717
9718## OnInterceptRequestEvent<sup>12+</sup>
9719
9720定义当Web组件加载url之前触发。
9721
9722**系统能力:** SystemCapability.Web.Webview.Core
9723
9724| 名称             | 类型      | 必填   | 说明                                       |
9725| -------------- | ---- | ---- | ---------------------------------------- |
9726| request | [WebResourceRequest](#webresourcerequest) | 是 | url请求的相关信息。 |
9727
9728## OnPermissionRequestEvent<sup>12+</sup>
9729
9730定义通知收到获取权限请求。
9731
9732**系统能力:** SystemCapability.Web.Webview.Core
9733
9734| 名称             | 类型      | 必填   | 说明                                       |
9735| -------------- | ---- | ---- | ---------------------------------------- |
9736| request | [PermissionRequest](#permissionrequest9) | 是 | 通知Web组件用户操作行为。 |
9737
9738## OnScreenCaptureRequestEvent<sup>12+</sup>
9739
9740定义通知收到屏幕捕获请求。
9741
9742**系统能力:** SystemCapability.Web.Webview.Core
9743
9744| 名称             | 类型      | 必填   | 说明                                       |
9745| -------------- | ---- | ---- | ---------------------------------------- |
9746| handler | [ScreenCaptureHandler](#screencapturehandler10) | 是 | 通知Web组件用户操作行为。 |
9747
9748## OnContextMenuShowEvent<sup>12+</sup>
9749
9750定义调用时触发的回调,以允许自定义显示上下文菜单。
9751
9752**系统能力:** SystemCapability.Web.Webview.Core
9753
9754| 名称             | 类型      | 必填   | 说明                                       |
9755| -------------- | ---- | ---- | ---------------------------------------- |
9756| param  | [WebContextMenuParam](#webcontextmenuparam9) | 是 | 菜单相关参数。     |
9757| result | [WebContextMenuResult](#webcontextmenuresult9) | 是 | 菜单相应事件传入内核。 |
9758
9759## OnSearchResultReceiveEvent<sup>12+</sup>
9760
9761定义通知调用方网页页内查找的结果。
9762
9763**系统能力:** SystemCapability.Web.Webview.Core
9764
9765| 名称             | 类型      | 必填   | 说明                                       |
9766| -------------- | ---- | ---- | ---------------------------------------- |
9767| activeMatchOrdinal | number  | 是 | 当前匹配的查找项的序号(从0开始)。                       |
9768| numberOfMatches    | number  | 是 | 所有匹配到的关键词的个数。                            |
9769| isDoneCounting     | boolean | 是 | 当次页内查找操作是否结束。该方法可能会回调多次,直到isDoneCounting为true为止。 |
9770
9771## OnScrollEvent<sup>12+</sup>
9772
9773定义滚动条滑动到指定位置时触发。
9774
9775**系统能力:** SystemCapability.Web.Webview.Core
9776
9777| 名称             | 类型      | 必填   | 说明                                       |
9778| -------------- | ---- | ---- | ---------------------------------------- |
9779| xOffset | number | 是 | 以网页最左端为基准,水平滚动条滚动所在位置。 |
9780| yOffset | number | 是 | 以网页最上端为基准,竖直滚动条滚动所在位置。 |
9781
9782## OnSslErrorEventReceiveEvent<sup>12+</sup>
9783
9784定义网页收到SSL错误时触发。
9785
9786**系统能力:** SystemCapability.Web.Webview.Core
9787
9788| 名称             | 类型      | 必填   | 说明                                       |
9789| -------------- | ---- | ---- | ---------------------------------------- |
9790| handler | [SslErrorHandler](#sslerrorhandler9) | 是 | 通知Web组件用户操作行为。 |
9791| error   | [SslError](#sslerror9枚举说明)           | 是 | 错误码。           |
9792
9793## OnClientAuthenticationEvent<sup>12+</sup>
9794
9795定义当需要用户提供SSL客户端证书时触发回调。
9796
9797**系统能力:** SystemCapability.Web.Webview.Core
9798
9799| 名称             | 类型      | 必填   | 说明                                       |
9800| -------------- | ---- | ---- | ---------------------------------------- |
9801| handler  | [ClientAuthenticationHandler](#clientauthenticationhandler9) | 是 | 通知Web组件用户操作行为。  |
9802| host     | string                                   | 是 | 请求证书服务器的主机名。    |
9803| port     | number                                   | 是 | 请求证书服务器的端口号。    |
9804| keyTypes | Array<string\>                           | 是 | 可接受的非对称秘钥类型。    |
9805| issuers  | Array<string\>                           | 是 | 与私钥匹配的证书可接受颁发者。 |
9806
9807## OnWindowNewEvent<sup>12+</sup>
9808
9809定义网页要求用户创建窗口时触发的回调。
9810
9811**系统能力:** SystemCapability.Web.Webview.Core
9812
9813| 名称             | 类型      | 必填   | 说明                                       |
9814| -------------- | ---- | ---- | ---------------------------------------- |
9815| isAlert       | boolean                                  | 是 | true代表请求创建对话框,false代表新标签页。    |
9816| isUserTrigger | boolean                                  | 是 | true代表用户触发,false代表非用户触发。      |
9817| targetUrl     | string                                   | 是 | 目标url。                        |
9818| handler       | [ControllerHandler](#controllerhandler9) | 是 | 用于设置新建窗口的WebviewController实例。 |
9819
9820## OnTouchIconUrlReceivedEvent<sup>12+</sup>
9821
9822定义设置接收到apple-touch-icon url地址时的回调函数。
9823
9824**系统能力:** SystemCapability.Web.Webview.Core
9825
9826| 名称             | 类型      | 必填   | 说明                                       |
9827| -------------- | ---- | ---- | ---------------------------------------- |
9828| url         | string  | 是 | 接收到的apple-touch-icon url地址。 |
9829| precomposed | boolean | 是 | 对应apple-touch-icon是否为预合成。   |
9830
9831## OnFaviconReceivedEvent<sup>12+</sup>
9832
9833定义应用为当前页面接收到新的favicon时的回调函数。
9834
9835**系统能力:** SystemCapability.Web.Webview.Core
9836
9837| 名称             | 类型      | 必填   | 说明                                       |
9838| -------------- | ---- | ---- | ---------------------------------------- |
9839| favicon | [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 接收到的favicon图标的PixelMap对象。 |
9840
9841## OnPageVisibleEvent<sup>12+</sup>
9842
9843定义旧页面不再呈现,新页面即将可见时触发的回调函数。
9844
9845**系统能力:** SystemCapability.Web.Webview.Core
9846
9847| 名称             | 类型      | 必填   | 说明                                       |
9848| -------------- | ---- | ---- | ---------------------------------------- |
9849| url  | string | 是 | 旧页面不再呈现,新页面即将可见时新页面的url地址。 |
9850
9851## OnDataResubmittedEvent<sup>12+</sup>
9852
9853定义网页表单可以重新提交时触发的回调函数。
9854
9855**系统能力:** SystemCapability.Web.Webview.Core
9856
9857| 名称             | 类型      | 必填   | 说明                                       |
9858| -------------- | ---- | ---- | ---------------------------------------- |
9859| handler | [DataResubmissionHandler](#dataresubmissionhandler9) | 是 | 表单数据重新提交句柄。 |
9860
9861## OnAudioStateChangedEvent<sup>12+</sup>
9862
9863定义网页上的音频播放状态发生改变时的回调函数。
9864
9865**系统能力:** SystemCapability.Web.Webview.Core
9866
9867| 名称             | 类型      | 必填   | 说明                                       |
9868| -------------- | ---- | ---- | ---------------------------------------- |
9869| playing | boolean | 是 | 当前页面的音频播放状态,true表示正在播放,false表示未播放。 |
9870
9871## OnFirstContentfulPaintEvent<sup>12+</sup>
9872
9873定义网页首次内容绘制回调函数。
9874
9875**系统能力:** SystemCapability.Web.Webview.Core
9876
9877| 名称             | 类型      | 必填   | 说明                                       |
9878| -------------- | ---- | ---- | ---------------------------------------- |
9879| navigationStartTick    | number | 是 | navigation开始的时间,单位以微秒表示。          |
9880| firstContentfulPaintMs | number | 是 | 从navigation开始第一次绘制内容的时间,单位是以毫秒表示。 |
9881
9882## OnLoadInterceptEvent<sup>12+</sup>
9883
9884定义截获资源加载时触发的回调。
9885
9886**系统能力:** SystemCapability.Web.Webview.Core
9887
9888| 名称             | 类型      | 必填   | 说明                                       |
9889| -------------- | ---- | ---- | ---------------------------------------- |
9890| data | [WebResourceRequest](#webresourcerequest) | 是 | url请求的相关信息。 |
9891
9892## OnOverScrollEvent<sup>12+</sup>
9893
9894定义网页过度滚动时触发的回调。
9895
9896**系统能力:** SystemCapability.Web.Webview.Core
9897
9898| 名称             | 类型      | 必填   | 说明                                       |
9899| -------------- | ---- | ---- | ---------------------------------------- |
9900| xOffset | number | 是 | 以网页最左端为基准,水平过度滚动的偏移量。 |
9901| yOffset | number | 是 | 以网页最上端为基准,竖直过度滚动的偏移量。 |
9902
9903## JavaScriptProxy<sup>12+</sup>
9904
9905定义要注入的JavaScript对象。
9906
9907**系统能力:** SystemCapability.Web.Webview.Core
9908
9909| 名称             | 类型      | 必填   | 说明                                       |
9910| -------------- | ---- | ---- | ---------------------------------------- |
9911| object     | object                                   | 是    | 参与注册的对象。只能声明方法,不能声明属性。                   |
9912| name       | string                                   | 是    | 注册对象的名称,与window中调用的对象名一致。                |
9913| methodList | Array\<string\>                          | 是    | 参与注册的应用侧JavaScript对象的同步方法。                 |
9914| controller | [WebController](#webcontroller) \| [WebviewController<sup>9+</sup>](#webviewcontroller9) | 是    | -    | 控制器。从API Version 9开始,WebController不再维护,建议使用WebviewController替代。 |
9915| asyncMethodList<sup>12+</sup>  | Array\<string\>      | 否    | 参与注册的应用侧JavaScript对象的异步方法。异步方法无法获取返回值。   |
9916| permission<sup>12+</sup>  | string  | 否    | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 |
9917
9918## AdsBlockedDetails<sup>12+</sup>
9919
9920发生广告拦截时,广告资源信息。
9921
9922**系统能力:** SystemCapability.Web.Webview.Core
9923
9924| 名称 | 类型                                                                           | 必填   | 说明                    |
9925| ------- | --------------------------------------------------------------------------------  | ---- | ------------------------- |
9926| url | string  | 是    | 发生广告过滤的页面url。 |
9927| adsBlocked | Array\<string\>  | 是    | 被过滤的资源的url或dompath标识,被过滤的多个对象url相同则可能出现重复元素。 |
9928
9929## OnAdsBlockedCallback<sup>12+</sup>
9930
9931type OnAdsBlockedCallback = (details: AdsBlockedDetails) => void
9932
9933当页面发生广告过滤时触发此回调。
9934
9935**系统能力:** SystemCapability.Web.Webview.Core
9936
9937**参数:**
9938
9939| 参数名               | 类型                                        | 必填   | 说明                         |
9940| -------------------- | ----------------------------------------------- | ---- | -------------------------------- |
9941| details | [AdsBlockedDetails](#adsblockeddetails12) | 是    | 发生广告拦截时,广告资源信息。 |
9942
9943## NativeEmbedVisibilityInfo<sup>12+</sup>
9944
9945提供同层标签的可见性信息。
9946
9947**系统能力:** SystemCapability.Web.Webview.Core
9948
9949| 名称           | 类型                                | 必填   | 说明              |
9950| -------------  | ------------------------------------| ----- | ------------------ |
9951| visibility     | boolean                             | 是     | 可见性。         |
9952| embedId        | string                              | 是     | 同层渲染标签的唯一id。  |
9953
9954## OnNativeEmbedVisibilityChangeCallback<sup>12+</sup>
9955
9956type OnNativeEmbedVisibilityChangeCallback = (nativeEmbedVisibilityInfo: NativeEmbedVisibilityInfo) => void
9957
9958当同层标签可见性变化时触发该回调。
9959
9960**系统能力:** SystemCapability.Web.Webview.Core
9961
9962**参数:**
9963
9964| 参数名    | 类型   | 必填   | 说明                  |
9965| ------ | ------ | ---- | --------------------- |
9966| nativeEmbedVisibilityInfo | [NativeEmbedVisibilityInfo](#nativeembedvisibilityinfo12)  | 是 | 提供同层标签的可见性信息。 |
9967
9968## WebElementType<sup>13+</sup>枚举说明
9969
9970网页元素信息。
9971
9972**系统能力:** SystemCapability.Web.Webview.Core
9973
9974**参数:**
9975
9976| 名称       | 值 | 说明              |
9977| --------- | -- | ----------------- |
9978| IMAGE     | 1 | 网页元素为图像类型。 |
9979
9980## WebResponseType<sup>13+</sup>枚举说明
9981
9982菜单的响应类型。
9983
9984**系统能力:** SystemCapability.Web.Webview.Core
9985
9986**参数:**
9987
9988| 名称            | 值 | 说明                |
9989| -------------- | -- | ------------------  |
9990| LONG_PRESS     | 1 | 通过长按触发菜单弹出。 |
9991
9992## SelectionMenuOptionsExt<sup>13+</sup>
9993
9994自定义菜单扩展项。
9995
9996**系统能力:** SystemCapability.Web.Webview.Core
9997
9998| 名称           | 类型                                             | 必填    | 说明             |
9999| ---------- | -----------------------------------------------------| ------ | ---------------- |
10000| onAppear   | Callback\<void\>   | 否     | 自定义选择菜单弹出时回调。     |
10001| onDisappear | Callback\<void\>  | 否     | 自定义选择菜单关闭时回调。     |
10002| preview    | [CustomBuilder](../apis-arkui/arkui-ts/ts-types.md#custombuilder8)          | 否     | 自定义选择菜单的预览内容样式, 未配置时无预览内容。|
10003| menuType   | [MenuType](../apis-arkui/arkui-ts/ts-text-common.md#menutype13枚举说明)      | 否     | 自定义选择菜单类型。<br>默认值:MenuType.SELECTION_MENU     |
10004
10005## BlurOnKeyboardHideMode<sup>14+</sup>枚举说明
10006
10007设置手动收起软键盘时Web元素是否失焦。
10008
10009**系统能力:** SystemCapability.Web.Webview.Core
10010
10011**参数:**
10012
10013| 名称     | 值 | 说明          |
10014| ------ | -- | ----------- |
10015| SILENT  | 0 | 软键盘收起时web组件失焦功能关闭。 |
10016| BLUR | 1 | 软键盘收起时web组件失焦功能开启。 |