• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Web
2
3提供具有网页显示能力的Web组件,[@ohos.web.webview](../apis/js-apis-webview.md)提供web控制能力。
4
5> **说明:**
6>
7> - 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8> - 示例效果请以真机运行为准,当前IDE预览器不支持。
9
10## 需要权限
11访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[权限申请声明](../../security/accesstoken-guidelines.md)。
12
13## 子组件
14
1516
17## 接口
18
19Web(options: { src: ResourceStr, controller: WebviewController | WebController})
20
21> **说明:**
22>
23> 不支持转场动画。
24> 同一页面的多个web组件,必须绑定不同的WebviewController。
25
26**参数:**
27
28| 参数名        | 参数类型                                     | 必填   | 参数描述                                     |
29| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
30| src        | [ResourceStr](ts-types.md)               | 是    | 网页资源地址。如果访问本地资源文件,请使用$rawfile或者resource协议。如果加载应用包外沙箱路径的本地资源文件,请使用file://沙箱文件路径。 |
31| controller | [WebviewController<sup>9+</sup>](../apis/js-apis-webview.md#webviewcontroller) \| [WebController](#webcontroller) | 是    | 控制器。从API Version 9开始,WebController不再维护,建议使用WebviewController替代。 |
32
33**示例:**
34
35加载在线网页。
36  ```ts
37  // xxx.ets
38  import web_webview from '@ohos.web.webview'
39
40  @Entry
41  @Component
42  struct WebComponent {
43    controller: web_webview.WebviewController = new web_webview.WebviewController()
44    build() {
45      Column() {
46        Web({ src: 'www.example.com', controller: this.controller })
47      }
48    }
49  }
50  ```
51
52加载本地网页。
53  ```ts
54  // xxx.ets
55  import web_webview from '@ohos.web.webview'
56
57  @Entry
58  @Component
59  struct WebComponent {
60    controller: web_webview.WebviewController = new web_webview.WebviewController()
61    build() {
62      Column() {
63        // 通过$rawfile加载本地资源文件。
64        Web({ src: $rawfile("index.html"), controller: this.controller })
65      }
66    }
67  }
68  ```
69
70  ```ts
71  // xxx.ets
72  import web_webview from '@ohos.web.webview'
73
74  @Entry
75  @Component
76  struct WebComponent {
77    controller: web_webview.WebviewController = new web_webview.WebviewController()
78    build() {
79      Column() {
80        // 通过resource协议加载本地资源文件。
81        Web({ src: "resource://rawfile/index.html", controller: this.controller })
82      }
83    }
84  }
85  ```
86
87加载沙箱路径下的本地资源文件。
88
891. 通过构造的单例对象GlobalContext获取沙箱路径。
90
91   ```ts
92     // GlobalContext.ts
93     export class GlobalContext {
94       private constructor() {}
95       private static instance: GlobalContext;
96       private _objects = new Map<string, Object>();
97
98       public static getContext(): GlobalContext {
99         if (!GlobalContext.instance) {
100           GlobalContext.instance = new GlobalContext();
101         }
102         return GlobalContext.instance;
103       }
104
105       getObject(value: string): Object | undefined {
106         return this._objects.get(value);
107       }
108
109       setObject(key: string, objectClass: Object): void {
110         this._objects.set(key, objectClass);
111       }
112     }
113   ```
114
115   ```ts
116    // xxx.ets
117     import web_webview from '@ohos.web.webview'
118     import { GlobalContext } from '../GlobalContext.ts'
119
120     let url = 'file://' + GlobalContext.getContext().getObject("filesDir") + '/index.html'
121
122     @Entry
123     @Component
124     struct WebComponent {
125       controller: web_webview.WebviewController = new web_webview.WebviewController()
126       build() {
127         Column() {
128           // 加载沙箱路径文件。
129           Web({ src: url, controller: this.controller })
130         }
131       }
132     }
133   ```
134
1352. 修改EntryAbility.ts136
137   以filesDir为例,获取沙箱路径。若想获取其他路径,请参考[应用文件路径](../../application-models/application-context-stage.md#获取应用文件路径)。
138
139   ```ts
140     // xxx.ts
141     import UIAbility from '@ohos.app.ability.UIAbility';
142     import AbilityConstant from '@ohos.app.ability.AbilityConstant';
143     import Want from '@ohos.app.ability.Want';
144     import web_webview from '@ohos.web.webview';
145     import { GlobalContext } from '../GlobalContext'
146
147     export default class EntryAbility extends UIAbility {
148         onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
149             // 通过在GlobalContext对象上绑定filesDir,可以实现UIAbility组件与UI之间的数据同步。
150             GlobalContext.getContext().setObject("filesDir", this.context.filesDir);
151             console.log("Sandbox path is " + GlobalContext.getContext().getObject("filesDir"))
152         }
153     }
154   ```
155
156   加载的html文件。
157
158   ```html
159     <!-- index.html -->
160     <!DOCTYPE html>
161     <html>
162         <body>
163             <p>Hello World</p>
164         </body>
165     </html>
166   ```
167
168## 属性
169
170通用属性仅支持[aspectRatio](ts-universal-attributes-layout-constraints.md#属性)、[backdropBlur](ts-universal-attributes-image-effect.md#属性)、[bindContentCover](ts-universal-attributes-modal-transition.md#属性)、[bindContextMenu](ts-universal-attributes-menu.md#属性)、[bindMenu ](ts-universal-attributes-menu.md#属性)、[bindSheet](ts-universal-attributes-sheet-transition.md#属性)、[borderColor](ts-universal-attributes-border.md#属性)、[borderRadius](ts-universal-attributes-border.md#属性)、[borderStyle](ts-universal-attributes-border.md#属性)、[borderWidth](ts-universal-attributes-border.md#属性)、[clip](ts-universal-attributes-sharp-clipping.md#属性)、[constraintSize](ts-universal-attributes-size.md#属性)、[defaultFocus](ts-universal-attributes-focus.md#属性)、[focusable](ts-universal-attributes-focus.md#属性)、[tabIndex](ts-universal-attributes-focus.md#属性)、[groupDefaultFocus](ts-universal-attributes-focus.md#属性)、[focusOnTouch](ts-universal-attributes-focus.md#属性)、[displayPriority](ts-universal-attributes-layout-constraints.md#属性)、[enabled](ts-universal-attributes-enable.md#属性)、[flexBasis](ts-universal-attributes-flex-layout.md#属性)、[flexGrow](ts-universal-attributes-flex-layout.md#属性)、[flexShrink](ts-universal-attributes-flex-layout.md#属性)、[layoutWeight](ts-universal-attributes-size.md#layoutweight)、[id](ts-universal-attributes-component-id.md#属性)、[gridOffset](ts-universal-attributes-grid.md#属性)、[gridSpan](ts-universal-attributes-grid.md#属性)、[useSizeType](ts-universal-attributes-grid.md#属性)、[height](ts-universal-attributes-size.md#属性)、[touchable](ts-universal-attributes-click.md#属性)、[margin](ts-universal-attributes-size.md#属性)、[markAnchor](ts-universal-attributes-location.md#属性)、[offset](ts-universal-attributes-location.md#属性)、[width](ts-universal-attributes-size.md#属性)、[zIndex](ts-universal-attributes-z-order.md#属性)、[visibility](ts-universal-attributes-visibility.md#属性)、[scale](ts-universal-attributes-transformation.md#属性)、[transform](ts-universal-attributes-transformation.md#属性)、[responseRegion](ts-universal-attributes-touch-target.md#属性)、[size](ts-universal-attributes-size.md#属性)、[stateStyles](ts-universal-attributes-polymorphic-style.md#属性)、[opacity](ts-universal-attributes-opacity.md#属性)、[shadow](ts-universal-attributes-image-effect.md#属性)、[sharedTransition](ts-transition-animation-shared-elements.md#属性)、[transition](ts-transition-animation-component.md#属性)。
171
172### domStorageAccess
173
174domStorageAccess(domStorageAccess: boolean)
175
176设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。
177
178**系统能力:** SystemCapability.Web.Webview.Core
179
180**参数:**
181
182| 参数名              | 参数类型    | 必填   | 默认值   | 参数描述                                 |
183| ---------------- | ------- | ---- | ----- | ------------------------------------ |
184| domStorageAccess | boolean | 是    | false | 设置是否开启文档对象模型存储接口(DOM Storage API)权限。 |
185
186**示例:**
187
188  ```ts
189  // xxx.ets
190  import web_webview from '@ohos.web.webview'
191
192  @Entry
193  @Component
194  struct WebComponent {
195    controller: web_webview.WebviewController = new web_webview.WebviewController()
196    build() {
197      Column() {
198        Web({ src: 'www.example.com', controller: this.controller })
199          .domStorageAccess(true)
200      }
201    }
202  }
203  ```
204
205### fileAccess
206
207fileAccess(fileAccess: boolean)
208
209设置是否开启应用中文件系统的访问,默认启用。$rawfile(filepath/filename)中rawfile路径的文件不受该属性影响而限制访问。
210
211**参数:**
212
213| 参数名        | 参数类型    | 必填   | 默认值  | 参数描述                   |
214| ---------- | ------- | ---- | ---- | ---------------------- |
215| fileAccess | boolean | 是    | true | 设置是否开启应用中文件系统的访问,默认启用。 |
216
217**示例:**
218
219  ```ts
220  // xxx.ets
221  import web_webview from '@ohos.web.webview'
222
223  @Entry
224  @Component
225  struct WebComponent {
226    controller: web_webview.WebviewController = new web_webview.WebviewController()
227    build() {
228      Column() {
229        Web({ src: 'www.example.com', controller: this.controller })
230          .fileAccess(true)
231      }
232    }
233  }
234  ```
235
236### imageAccess
237
238imageAccess(imageAccess: boolean)
239
240设置是否允许自动加载图片资源,默认允许。
241
242**参数:**
243
244| 参数名         | 参数类型    | 必填   | 默认值  | 参数描述            |
245| ----------- | ------- | ---- | ---- | --------------- |
246| imageAccess | boolean | 是    | true | 设置是否允许自动加载图片资源。 |
247
248**示例:**
249  ```ts
250  // xxx.ets
251  import web_webview from '@ohos.web.webview'
252
253  @Entry
254  @Component
255  struct WebComponent {
256    controller: web_webview.WebviewController = new web_webview.WebviewController()
257    build() {
258      Column() {
259        Web({ src: 'www.example.com', controller: this.controller })
260          .imageAccess(true)
261      }
262    }
263  }
264  ```
265
266### javaScriptProxy
267
268javaScriptProxy(javaScriptProxy: { object: object, name: string, methodList: Array\<string\>,
269    controller: WebviewController | WebController})
270
271注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。所有参数不支持更新。此接口只支持注册一个对象,若需要注册多个对象请使用[registerJavaScriptProxy<sup>9+</sup>](../apis/js-apis-webview.md#registerjavascriptproxy)。
272
273**参数:**
274
275| 参数名        | 参数类型                                     | 必填   | 默认值  | 参数描述                                     |
276| ---------- | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
277| object     | object                                   | 是    | -    | 参与注册的对象。只能声明方法,不能声明属性。                   |
278| name       | string                                   | 是    | -    | 注册对象的名称,与window中调用的对象名一致。                |
279| methodList | Array\<string\>                          | 是    | -    | 参与注册的应用侧JavaScript对象的方法。                 |
280| controller | [WebviewController<sup>9+</sup>](../apis/js-apis-webview.md#webviewcontroller) \| [WebController](#webcontroller) | 是    | -    | 控制器。从API Version 9开始,WebController不再维护,建议使用WebviewController替代。 |
281
282**示例:**
283
284  ```ts
285  // xxx.ets
286  import web_webview from '@ohos.web.webview'
287
288  class TestObj {
289    constructor() {
290    }
291
292    test(data1: string, data2: string, data3: string): string {
293      console.log("data1:" + data1)
294      console.log("data2:" + data2)
295      console.log("data3:" + data3)
296      return "AceString"
297    }
298
299    toString(): void {
300      console.log('toString' + "interface instead.")
301    }
302  }
303
304  @Entry
305  @Component
306  struct WebComponent {
307    controller: web_webview.WebviewController = new web_webview.WebviewController()
308    testObj = new TestObj();
309    build() {
310      Column() {
311        Web({ src: 'www.example.com', controller: this.controller })
312          .javaScriptAccess(true)
313          .javaScriptProxy({
314            object: this.testObj,
315            name: "objName",
316            methodList: ["test", "toString"],
317            controller: this.controller,
318        })
319      }
320    }
321  }
322  ```
323
324### javaScriptAccess
325
326javaScriptAccess(javaScriptAccess: boolean)
327
328设置是否允许执行JavaScript脚本,默认允许执行。
329
330**参数:**
331
332| 参数名              | 参数类型    | 必填   | 默认值  | 参数描述                |
333| ---------------- | ------- | ---- | ---- | ------------------- |
334| javaScriptAccess | boolean | 是    | true | 是否允许执行JavaScript脚本。 |
335
336**示例:**
337
338  ```ts
339  // xxx.ets
340  import web_webview from '@ohos.web.webview'
341
342  @Entry
343  @Component
344  struct WebComponent {
345    controller: web_webview.WebviewController = new web_webview.WebviewController()
346    build() {
347      Column() {
348        Web({ src: 'www.example.com', controller: this.controller })
349          .javaScriptAccess(true)
350      }
351    }
352  }
353  ```
354
355### mixedMode
356
357mixedMode(mixedMode: MixedMode)
358
359设置是否允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容,默认不允许加载HTTP和HTTPS混合内容。
360
361**参数:**
362
363| 参数名       | 参数类型                        | 必填   | 默认值            | 参数描述      |
364| --------- | --------------------------- | ---- | -------------- | --------- |
365| mixedMode | [MixedMode](#mixedmode枚举说明) | 是    | MixedMode.None | 要设置的混合内容。 |
366
367**示例:**
368
369  ```ts
370  // xxx.ets
371  import web_webview from '@ohos.web.webview'
372
373  @Entry
374  @Component
375  struct WebComponent {
376    controller: web_webview.WebviewController = new web_webview.WebviewController()
377    @State mode: MixedMode = MixedMode.All
378    build() {
379      Column() {
380        Web({ src: 'www.example.com', controller: this.controller })
381          .mixedMode(this.mode)
382      }
383    }
384  }
385  ```
386
387### onlineImageAccess
388
389onlineImageAccess(onlineImageAccess: boolean)
390
391设置是否允许从网络加载图片资源(通过HTTP和HTTPS访问的资源),默认允许访问。
392
393**参数:**
394
395| 参数名               | 参数类型    | 必填   | 默认值  | 参数描述             |
396| ----------------- | ------- | ---- | ---- | ---------------- |
397| onlineImageAccess | boolean | 是    | true | 设置是否允许从网络加载图片资源。 |
398
399**示例:**
400
401  ```ts
402  // xxx.ets
403  import web_webview from '@ohos.web.webview'
404
405  @Entry
406  @Component
407  struct WebComponent {
408    controller: web_webview.WebviewController = new web_webview.WebviewController()
409    build() {
410      Column() {
411        Web({ src: 'www.example.com', controller: this.controller })
412          .onlineImageAccess(true)
413      }
414    }
415  }
416  ```
417
418### zoomAccess
419
420zoomAccess(zoomAccess: boolean)
421
422设置是否支持手势进行缩放,默认允许执行缩放。
423
424**参数:**
425
426| 参数名        | 参数类型    | 必填   | 默认值  | 参数描述          |
427| ---------- | ------- | ---- | ---- | ------------- |
428| zoomAccess | boolean | 是    | true | 设置是否支持手势进行缩放。 |
429
430**示例:**
431
432  ```ts
433  // xxx.ets
434  import web_webview from '@ohos.web.webview'
435
436  @Entry
437  @Component
438  struct WebComponent {
439    controller: web_webview.WebviewController = new web_webview.WebviewController()
440    build() {
441      Column() {
442        Web({ src: 'www.example.com', controller: this.controller })
443          .zoomAccess(true)
444      }
445    }
446  }
447  ```
448
449### overviewModeAccess
450
451overviewModeAccess(overviewModeAccess: boolean)
452
453设置是否使用概览模式加载网页,默认使用该方式。当前仅支持移动设备。
454
455**参数:**
456
457| 参数名                | 参数类型    | 必填   | 默认值  | 参数描述            |
458| ------------------ | ------- | ---- | ---- | --------------- |
459| overviewModeAccess | boolean | 是    | true | 设置是否使用概览模式加载网页。 |
460
461**示例:**
462
463  ```ts
464  // xxx.ets
465  import web_webview from '@ohos.web.webview'
466
467  @Entry
468  @Component
469  struct WebComponent {
470    controller: web_webview.WebviewController = new web_webview.WebviewController()
471    build() {
472      Column() {
473        Web({ src: 'www.example.com', controller: this.controller })
474          .overviewModeAccess(true)
475      }
476    }
477  }
478  ```
479
480### databaseAccess
481
482databaseAccess(databaseAccess: boolean)
483
484设置是否开启数据库存储API权限,默认不开启。
485
486**参数:**
487
488| 参数名            | 参数类型    | 必填   | 默认值   | 参数描述              |
489| -------------- | ------- | ---- | ----- | ----------------- |
490| databaseAccess | boolean | 是    | false | 设置是否开启数据库存储API权限。 |
491
492**示例:**
493
494  ```ts
495  // xxx.ets
496  import web_webview from '@ohos.web.webview'
497
498  @Entry
499  @Component
500  struct WebComponent {
501    controller: web_webview.WebviewController = new web_webview.WebviewController()
502    build() {
503      Column() {
504        Web({ src: 'www.example.com', controller: this.controller })
505          .databaseAccess(true)
506      }
507    }
508  }
509  ```
510
511### geolocationAccess
512
513geolocationAccess(geolocationAccess: boolean)
514
515设置是否开启获取地理位置权限,默认开启。
516
517**参数:**
518
519| 参数名               | 参数类型    | 必填   | 默认值  | 参数描述            |
520| ----------------- | ------- | ---- | ---- | --------------- |
521| geolocationAccess | boolean | 是    | true | 设置是否开启获取地理位置权限。 |
522
523**示例:**
524
525  ```ts
526  // xxx.ets
527  import web_webview from '@ohos.web.webview'
528
529  @Entry
530  @Component
531  struct WebComponent {
532    controller: web_webview.WebviewController = new web_webview.WebviewController()
533    build() {
534      Column() {
535        Web({ src: 'www.example.com', controller: this.controller })
536          .geolocationAccess(true)
537      }
538    }
539  }
540  ```
541
542### mediaPlayGestureAccess
543
544mediaPlayGestureAccess(access: boolean)
545
546设置有声视频播放是否需要用户手动点击,静音视频播放不受该接口管控,默认需要。
547
548**参数:**
549
550| 参数名    | 参数类型    | 必填   | 默认值  | 参数描述                |
551| ------ | ------- | ---- | ---- | ------------------- |
552| access | boolean | 是    | true | 设置有声视频播放是否需要用户手动点击。 |
553
554**示例:**
555
556  ```ts
557  // xxx.ets
558  import web_webview from '@ohos.web.webview'
559
560  @Entry
561  @Component
562  struct WebComponent {
563    controller: web_webview.WebviewController = new web_webview.WebviewController()
564    @State access: boolean = true
565    build() {
566      Column() {
567        Web({ src: 'www.example.com', controller: this.controller })
568          .mediaPlayGestureAccess(this.access)
569      }
570    }
571  }
572  ```
573
574### multiWindowAccess<sup>9+</sup>
575
576multiWindowAccess(multiWindow: boolean)
577
578设置是否开启多窗口权限,默认不开启。
579使能多窗口权限时,需要实现onWindowNew事件,示例代码参考[onWindowNew事件](#onwindownew9)。
580
581**参数:**
582
583| 参数名         | 参数类型    | 必填   | 默认值   | 参数描述         |
584| ----------- | ------- | ---- | ----- | ------------ |
585| multiWindow | boolean | 是    | false | 设置是否开启多窗口权限。 |
586
587**示例:**
588
589  ```ts
590  // xxx.ets
591  import web_webview from '@ohos.web.webview'
592
593  @Entry
594  @Component
595  struct WebComponent {
596    controller: web_webview.WebviewController = new web_webview.WebviewController()
597    build() {
598      Column() {
599        Web({ src: 'www.example.com', controller: this.controller })
600        .multiWindowAccess(false)
601      }
602    }
603  }
604  ```
605
606### horizontalScrollBarAccess<sup>9+</sup>
607
608horizontalScrollBarAccess(horizontalScrollBar: boolean)
609
610设置是否显示横向滚动条,包括系统默认滚动条和用户自定义滚动条。默认显示。
611
612**参数:**
613
614| 参数名                 | 参数类型    | 必填   | 默认值  | 参数描述         |
615| ------------------- | ------- | ---- | ---- | ------------ |
616| horizontalScrollBar | boolean | 是    | true | 设置是否显示横向滚动条。 |
617
618**示例:**
619
620  ```ts
621  // xxx.ets
622  import web_webview from '@ohos.web.webview'
623
624  @Entry
625  @Component
626  struct WebComponent {
627    controller: web_webview.WebviewController = new web_webview.WebviewController()
628    build() {
629      Column() {
630        Web({ src: $rawfile('index.html'), controller: this.controller })
631        .horizontalScrollBarAccess(true)
632      }
633    }
634  }
635  ```
636
637  加载的html文件。
638  ```html
639  <!--index.html-->
640  <!DOCTYPE html>
641  <html>
642  <head>
643      <title>Demo</title>
644      <style>
645        body {
646          width:3000px;
647          height:3000px;
648          padding-right:170px;
649          padding-left:170px;
650          border:5px solid blueviolet
651        }
652      </style>
653  </head>
654  <body>
655  Scroll Test
656  </body>
657  </html>
658  ```
659
660### verticalScrollBarAccess<sup>9+</sup>
661
662verticalScrollBarAccess(verticalScrollBar: boolean)
663
664设置是否显示纵向滚动条,包括系统默认滚动条和用户自定义滚动条。默认显示。
665
666**参数:**
667
668| 参数名               | 参数类型    | 必填   | 默认值  | 参数描述         |
669| ----------------- | ------- | ---- | ---- | ------------ |
670| verticalScrollBar | boolean | 是    | true | 设置是否显示纵向滚动条。 |
671
672**示例:**
673
674  ```ts
675  // xxx.ets
676  import web_webview from '@ohos.web.webview'
677
678  @Entry
679  @Component
680  struct WebComponent {
681    controller: web_webview.WebviewController = new web_webview.WebviewController()
682    build() {
683      Column() {
684        Web({ src: $rawfile('index.html'), controller: this.controller })
685        .verticalScrollBarAccess(true)
686      }
687    }
688  }
689  ```
690
691  加载的html文件。
692  ```html
693  <!--index.html-->
694  <!DOCTYPE html>
695  <html>
696  <head>
697      <title>Demo</title>
698      <style>
699        body {
700          width:3000px;
701          height:3000px;
702          padding-right:170px;
703          padding-left:170px;
704          border:5px solid blueviolet
705        }
706      </style>
707  </head>
708  <body>
709  Scroll Test
710  </body>
711  </html>
712  ```
713
714### password<sup>(deprecated)</sup>
715
716password(password: boolean)
717
718设置是否应保存密码。该接口为空接口。
719
720> **说明:**
721>
722> 从API version 10开始废弃,并且不再提供新的接口作为替代。
723
724### cacheMode
725
726cacheMode(cacheMode: CacheMode)
727
728设置缓存模式。
729
730**参数:**
731
732| 参数名       | 参数类型                        | 必填   | 默认值               | 参数描述      |
733| --------- | --------------------------- | ---- | ----------------- | --------- |
734| cacheMode | [CacheMode](#cachemode9枚举说明) | 是    | CacheMode.Default | 要设置的缓存模式。 |
735
736**示例:**
737
738  ```ts
739  // xxx.ets
740  import web_webview from '@ohos.web.webview'
741
742  @Entry
743  @Component
744  struct WebComponent {
745    controller: web_webview.WebviewController = new web_webview.WebviewController()
746    @State mode: CacheMode = CacheMode.None
747    build() {
748      Column() {
749        Web({ src: 'www.example.com', controller: this.controller })
750          .cacheMode(this.mode)
751      }
752    }
753  }
754  ```
755
756### textZoomAtio<sup>(deprecated)</sup>
757
758textZoomAtio(textZoomAtio: number)
759
760设置页面的文本缩放百分比,默认为100%。
761
762从API version 9开始不再维护,建议使用[textZoomRatio<sup>9+</sup>](#textzoomratio9)代替。
763
764**参数:**
765
766| 参数名          | 参数类型   | 必填   | 默认值  | 参数描述                             |
767| ------------ | ------ | ---- | ---- | -------------------------------- |
768| textZoomAtio | number | 是    | 100  | 要设置的页面的文本缩放百分比。取值为整数,范围为(0, +∞)。 |
769
770**示例:**
771
772  ```ts
773  // xxx.ets
774  @Entry
775  @Component
776  struct WebComponent {
777    controller: WebController = new WebController()
778    @State atio: number = 150
779    build() {
780      Column() {
781        Web({ src: 'www.example.com', controller: this.controller })
782          .textZoomAtio(this.atio)
783      }
784    }
785  }
786  ```
787
788### textZoomRatio<sup>9+</sup>
789
790textZoomRatio(textZoomRatio: number)
791
792设置页面的文本缩放百分比,默认为100%。
793
794**参数:**
795
796| 参数名           | 参数类型   | 必填   | 默认值  | 参数描述                             |
797| ------------- | ------ | ---- | ---- | -------------------------------- |
798| textZoomRatio | number | 是    | 100  | 要设置的页面的文本缩放百分比。取值为整数,范围为(0, +∞)。 |
799
800**示例:**
801
802  ```ts
803  // xxx.ets
804  import web_webview from '@ohos.web.webview'
805
806  @Entry
807  @Component
808  struct WebComponent {
809    controller: web_webview.WebviewController = new web_webview.WebviewController()
810    @State atio: number = 150
811    build() {
812      Column() {
813        Web({ src: 'www.example.com', controller: this.controller })
814          .textZoomRatio(this.atio)
815      }
816    }
817  }
818  ```
819
820### initialScale<sup>9+</sup>
821
822initialScale(percent: number)
823
824设置整体页面的缩放百分比,默认为100。
825
826**参数:**
827
828| 参数名     | 参数类型   | 必填   | 默认值  | 参数描述                          |
829| ------- | ------ | ---- | ---- | ----------------------------- |
830| percent | number | 是    | 100  | 要设置的整体页面的缩放百分比。|
831
832**示例:**
833
834  ```ts
835  // xxx.ets
836  import web_webview from '@ohos.web.webview'
837
838  @Entry
839  @Component
840  struct WebComponent {
841    controller: web_webview.WebviewController = new web_webview.WebviewController()
842    @State percent: number = 100
843    build() {
844      Column() {
845        Web({ src: 'www.example.com', controller: this.controller })
846          .initialScale(this.percent)
847      }
848    }
849  }
850  ```
851
852### userAgent<sup>(deprecated)</sup>
853
854userAgent(userAgent: string)
855
856设置用户代理。
857
858> **说明:**
859>
860> 从API version 8开始支持,从API version 10开始废弃。建议使用[setCustomUserAgent](../apis/js-apis-webview.md#setcustomuseragent10)<sup>10+</sup>替代。
861
862**参数:**
863
864| 参数名       | 参数类型   | 必填   | 默认值  | 参数描述      |
865| --------- | ------ | ---- | ---- | --------- |
866| userAgent | string | 是    | -    | 要设置的用户代理。 |
867
868**示例:**
869
870  ```ts
871  // xxx.ets
872  import web_webview from '@ohos.web.webview'
873
874  @Entry
875  @Component
876  struct WebComponent {
877    controller: web_webview.WebviewController = new web_webview.WebviewController()
878    @State userAgent:string = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'
879    build() {
880      Column() {
881        Web({ src: 'www.example.com', controller: this.controller })
882          .userAgent(this.userAgent)
883      }
884    }
885  }
886  ```
887
888### blockNetwork<sup>9+</sup>
889
890blockNetwork(block: boolean)
891
892设置Web组件是否阻止从网络加载资源。
893
894**参数:**
895
896| 参数名   | 参数类型    | 必填   | 默认值   | 参数描述                |
897| ----- | ------- | ---- | ----- | ------------------- |
898| block | boolean | 是    | false | 设置Web组件是否阻止从网络加载资源。 |
899
900**示例:**
901
902  ```ts
903  // xxx.ets
904  import web_webview from '@ohos.web.webview'
905  @Entry
906  @Component
907  struct WebComponent {
908    controller: web_webview.WebviewController = new web_webview.WebviewController()
909    @State block: boolean = true
910    build() {
911      Column() {
912        Web({ src: 'www.example.com', controller: this.controller })
913          .blockNetwork(this.block)
914      }
915    }
916  }
917  ```
918
919### defaultFixedFontSize<sup>9+</sup>
920
921defaultFixedFontSize(size: number)
922
923设置网页的默认等宽字体大小。
924
925**参数:**
926
927| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                                     |
928| ---- | ------ | ---- | ---- | ---------------------------------------- |
929| size | number | 是    | 13   | 设置网页的默认等宽字体大小,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。 |
930
931**示例:**
932
933  ```ts
934  // xxx.ets
935  import web_webview from '@ohos.web.webview'
936  @Entry
937  @Component
938  struct WebComponent {
939    controller: web_webview.WebviewController = new web_webview.WebviewController()
940    @State fontSize: number = 16
941    build() {
942      Column() {
943        Web({ src: 'www.example.com', controller: this.controller })
944          .defaultFixedFontSize(this.fontSize)
945      }
946    }
947  }
948  ```
949
950### defaultFontSize<sup>9+</sup>
951
952defaultFontSize(size: number)
953
954设置网页的默认字体大小。
955
956**参数:**
957
958| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                                     |
959| ---- | ------ | ---- | ---- | ---------------------------------------- |
960| size | number | 是    | 16   | 设置网页的默认字体大小,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。 |
961
962**示例:**
963
964  ```ts
965  // xxx.ets
966  import web_webview from '@ohos.web.webview'
967  @Entry
968  @Component
969  struct WebComponent {
970    controller: web_webview.WebviewController = new web_webview.WebviewController()
971    @State fontSize: number = 13
972    build() {
973      Column() {
974        Web({ src: 'www.example.com', controller: this.controller })
975          .defaultFontSize(this.fontSize)
976      }
977    }
978  }
979  ```
980
981### minFontSize<sup>9+</sup>
982
983minFontSize(size: number)
984
985设置网页字体大小最小值。
986
987**参数:**
988
989| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                                     |
990| ---- | ------ | ---- | ---- | ---------------------------------------- |
991| size | number | 是    | 8    | 设置网页字体大小最小值,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。 |
992
993**示例:**
994
995  ```ts
996  // xxx.ets
997  import web_webview from '@ohos.web.webview'
998  @Entry
999  @Component
1000  struct WebComponent {
1001    controller: web_webview.WebviewController = new web_webview.WebviewController()
1002    @State fontSize: number = 13
1003    build() {
1004      Column() {
1005        Web({ src: 'www.example.com', controller: this.controller })
1006          .minFontSize(this.fontSize)
1007      }
1008    }
1009  }
1010  ```
1011
1012### minLogicalFontSize<sup>9+</sup>
1013
1014minLogicalFontSize(size: number)
1015
1016设置网页逻辑字体大小最小值。
1017
1018**参数:**
1019
1020| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                                     |
1021| ---- | ------ | ---- | ---- | ---------------------------------------- |
1022| size | number | 是    | 8    | 设置网页逻辑字体大小最小值,单位px。输入值的范围为-2^31到2^31-1,实际渲染时超过72的值按照72进行渲染,低于1的值按照1进行渲染。 |
1023
1024**示例:**
1025
1026  ```ts
1027  // xxx.ets
1028  import web_webview from '@ohos.web.webview'
1029  @Entry
1030  @Component
1031  struct WebComponent {
1032    controller: web_webview.WebviewController = new web_webview.WebviewController()
1033    @State fontSize: number = 13
1034    build() {
1035      Column() {
1036        Web({ src: 'www.example.com', controller: this.controller })
1037          .minLogicalFontSize(this.fontSize)
1038      }
1039    }
1040  }
1041  ```
1042
1043### webFixedFont<sup>9+</sup>
1044
1045webFixedFont(family: string)
1046
1047设置网页的fixed font字体库。
1048
1049**参数:**
1050
1051| 参数名    | 参数类型   | 必填   | 默认值       | 参数描述                |
1052| ------ | ------ | ---- | --------- | ------------------- |
1053| family | string | 是    | monospace | 设置网页的fixed font字体库。 |
1054
1055**示例:**
1056
1057  ```ts
1058  // xxx.ets
1059  import web_webview from '@ohos.web.webview'
1060  @Entry
1061  @Component
1062  struct WebComponent {
1063    controller: web_webview.WebviewController = new web_webview.WebviewController()
1064    @State family: string = "monospace"
1065    build() {
1066      Column() {
1067        Web({ src: 'www.example.com', controller: this.controller })
1068          .webFixedFont(this.family)
1069      }
1070    }
1071  }
1072  ```
1073
1074### webSansSerifFont<sup>9+</sup>
1075
1076webSansSerifFont(family: string)
1077
1078设置网页的sans serif font字体库。
1079
1080**参数:**
1081
1082| 参数名    | 参数类型   | 必填   | 默认值        | 参数描述                     |
1083| ------ | ------ | ---- | ---------- | ------------------------ |
1084| family | string | 是    | sans-serif | 设置网页的sans serif font字体库。 |
1085
1086**示例:**
1087
1088  ```ts
1089  // xxx.ets
1090  import web_webview from '@ohos.web.webview'
1091  @Entry
1092  @Component
1093  struct WebComponent {
1094    controller: web_webview.WebviewController = new web_webview.WebviewController()
1095    @State family: string = "sans-serif"
1096    build() {
1097      Column() {
1098        Web({ src: 'www.example.com', controller: this.controller })
1099          .webSansSerifFont(this.family)
1100      }
1101    }
1102  }
1103  ```
1104
1105### webSerifFont<sup>9+</sup>
1106
1107webSerifFont(family: string)
1108
1109设置网页的serif font字体库。
1110
1111**参数:**
1112
1113| 参数名    | 参数类型   | 必填   | 默认值   | 参数描述                |
1114| ------ | ------ | ---- | ----- | ------------------- |
1115| family | string | 是    | serif | 设置网页的serif font字体库。 |
1116
1117**示例:**
1118
1119  ```ts
1120  // xxx.ets
1121  import web_webview from '@ohos.web.webview'
1122  @Entry
1123  @Component
1124  struct WebComponent {
1125    controller: web_webview.WebviewController = new web_webview.WebviewController()
1126    @State family: string = "serif"
1127    build() {
1128      Column() {
1129        Web({ src: 'www.example.com', controller: this.controller })
1130          .webSerifFont(this.family)
1131      }
1132    }
1133  }
1134  ```
1135
1136### webStandardFont<sup>9+</sup>
1137
1138webStandardFont(family: string)
1139
1140设置网页的standard font字体库。
1141
1142**参数:**
1143
1144| 参数名    | 参数类型   | 必填   | 默认值        | 参数描述                   |
1145| ------ | ------ | ---- | ---------- | ---------------------- |
1146| family | string | 是    | sans serif | 设置网页的standard font字体库。 |
1147
1148**示例:**
1149
1150  ```ts
1151  // xxx.ets
1152  import web_webview from '@ohos.web.webview'
1153  @Entry
1154  @Component
1155  struct WebComponent {
1156    controller: web_webview.WebviewController = new web_webview.WebviewController()
1157    @State family: string = "sans-serif"
1158    build() {
1159      Column() {
1160        Web({ src: 'www.example.com', controller: this.controller })
1161          .webStandardFont(this.family)
1162      }
1163    }
1164  }
1165  ```
1166
1167### webFantasyFont<sup>9+</sup>
1168
1169webFantasyFont(family: string)
1170
1171设置网页的fantasy font字体库。
1172
1173**参数:**
1174
1175| 参数名    | 参数类型   | 必填   | 默认值     | 参数描述                  |
1176| ------ | ------ | ---- | ------- | --------------------- |
1177| family | string | 是    | fantasy | 设置网页的fantasy font字体库。 |
1178
1179**示例:**
1180
1181  ```ts
1182  // xxx.ets
1183  import web_webview from '@ohos.web.webview'
1184  @Entry
1185  @Component
1186  struct WebComponent {
1187    controller: web_webview.WebviewController = new web_webview.WebviewController()
1188    @State family: string = "fantasy"
1189    build() {
1190      Column() {
1191        Web({ src: 'www.example.com', controller: this.controller })
1192          .webFantasyFont(this.family)
1193      }
1194    }
1195  }
1196  ```
1197
1198### webCursiveFont<sup>9+</sup>
1199
1200webCursiveFont(family: string)
1201
1202设置网页的cursive font字体库。
1203
1204**参数:**
1205
1206| 参数名    | 参数类型   | 必填   | 默认值     | 参数描述                  |
1207| ------ | ------ | ---- | ------- | --------------------- |
1208| family | string | 是    | cursive | 设置网页的cursive font字体库。 |
1209
1210**示例:**
1211
1212  ```ts
1213  // xxx.ets
1214  import web_webview from '@ohos.web.webview'
1215  @Entry
1216  @Component
1217  struct WebComponent {
1218    controller: web_webview.WebviewController = new web_webview.WebviewController()
1219    @State family: string = "cursive"
1220    build() {
1221      Column() {
1222        Web({ src: 'www.example.com', controller: this.controller })
1223          .webCursiveFont(this.family)
1224      }
1225    }
1226  }
1227  ```
1228
1229### darkMode<sup>9+</sup>
1230
1231darkMode(mode: WebDarkMode)
1232
1233设置Web深色模式,默认关闭。当深色模式开启时,Web将启用媒体查询prefers-color-scheme中网页所定义的深色样式,若网页未定义深色样式,则保持原状。如需开启强制深色模式,建议配合[forceDarkAccess](#forcedarkaccess9)使用。
1234
1235**参数:**
1236
1237| 参数名  | 参数类型                             | 必填   | 默认值             | 参数描述                   |
1238| ---- | -------------------------------- | ---- | --------------- | ---------------------- |
1239| mode | [WebDarkMode](#webdarkmode9枚举说明) | 是    | WebDarkMode.Off | 设置Web的深色模式为关闭、开启或跟随系统。 |
1240
1241**示例:**
1242
1243  ```ts
1244  // xxx.ets
1245  import web_webview from '@ohos.web.webview'
1246  @Entry
1247  @Component
1248  struct WebComponent {
1249    controller: web_webview.WebviewController = new web_webview.WebviewController()
1250    @State mode: WebDarkMode = WebDarkMode.On
1251    build() {
1252      Column() {
1253        Web({ src: 'www.example.com', controller: this.controller })
1254          .darkMode(this.mode)
1255      }
1256    }
1257  }
1258  ```
1259
1260### forceDarkAccess<sup>9+</sup>
1261
1262forceDarkAccess(access: boolean)
1263
1264设置网页是否开启强制深色模式。默认关闭。该属性仅在[darkMode](#darkmode9)开启深色模式时生效。
1265
1266**参数:**
1267
1268| 参数名    | 参数类型    | 必填   | 默认值   | 参数描述            |
1269| ------ | ------- | ---- | ----- | --------------- |
1270| access | boolean | 是    | false | 设置网页是否开启强制深色模式。 |
1271
1272**示例:**
1273
1274  ```ts
1275  // xxx.ets
1276  import web_webview from '@ohos.web.webview'
1277  @Entry
1278  @Component
1279  struct WebComponent {
1280    controller: web_webview.WebviewController = new web_webview.WebviewController()
1281    @State mode: WebDarkMode = WebDarkMode.On
1282    @State access: boolean = true
1283    build() {
1284      Column() {
1285        Web({ src: 'www.example.com', controller: this.controller })
1286          .darkMode(this.mode)
1287          .forceDarkAccess(this.access)
1288      }
1289    }
1290  }
1291  ```
1292
1293### tableData<sup>(deprecated)</sup>
1294
1295tableData(tableData: boolean)
1296
1297设置是否应保存表单数据。该接口为空接口。
1298
1299> **说明:**
1300>
1301> 从API version 10开始废弃,并且不再提供新的接口作为替代。
1302
1303### wideViewModeAccess<sup>(deprecated)</sup>
1304
1305wideViewModeAccess(wideViewModeAccess: boolean)
1306
1307设置web是否支持html中meta标签的viewport属性。该接口为空接口。
1308
1309> **说明:**
1310>
1311> 从API version 10开始废弃,并且不再提供新的接口作为替代。
1312
1313### pinchSmooth<sup>9+</sup>
1314
1315pinchSmooth(isEnabled: boolean)
1316
1317设置网页是否开启捏合流畅模式,默认不开启。
1318
1319**参数:**
1320
1321| 参数名       | 参数类型    | 必填   | 默认值   | 参数描述          |
1322| --------- | ------- | ---- | ----- | ------------- |
1323| isEnabled | boolean | 是    | false | 网页是否开启捏合流畅模式。 |
1324
1325**示例:**
1326
1327  ```ts
1328  // xxx.ets
1329  import web_webview from '@ohos.web.webview'
1330  @Entry
1331  @Component
1332  struct WebComponent {
1333    controller: web_webview.WebviewController = new web_webview.WebviewController()
1334    build() {
1335      Column() {
1336        Web({ src: 'www.example.com', controller: this.controller })
1337          .pinchSmooth(true)
1338      }
1339    }
1340  }
1341  ```
1342
1343### allowWindowOpenMethod<sup>10+</sup>
1344
1345allowWindowOpenMethod(flag: boolean)
1346
1347设置网页是否可以通过JavaScript自动打开新窗口。
1348
1349该属性为true时,可通过JavaScript自动打开新窗口。该属性为false时,用户行为仍可通过JavaScript自动打开新窗口,但非用户行为不能通过JavaScript自动打开新窗口。此处的用户行为是指用户在5秒内请求打开新窗口(window.open)。
1350
1351该属性仅在[javaScriptAccess](#javascriptaccess)开启时生效。
1352
1353该属性在[multiWindowAccess](#multiwindowaccess9)开启时打开新窗口,关闭时打开本地窗口。
1354
1355该属性的默认值与系统属性persist.web.allowWindowOpenMethod.enabled 保持一致,如果未设置系统属性则默认值为false。
1356
1357检查系统配置项persist.web.allowWindowOpenMethod.enabled 是否开启。
1358
1359通过`hdc shell param get persist.web.allowWindowOpenMethod.enabled` 查看,若配置项为0或不存在,
1360可通过命令`hdc shell param set persist.web.allowWindowOpenMethod.enabled 1` 开启配置。
1361
1362**参数:**
1363
1364| 参数名  | 参数类型    | 必填   | 默认值                                      | 参数描述                      |
1365| ---- | ------- | ---- | ---------------------------------------- | ------------------------- |
1366| flag | boolean | 是    | 默认值与系统参数关联,当系统参数persist.web.allowWindowOpenMethod.enabled为true时,默认值为true, 否则为false | 网页是否可以通过JavaScript自动打开窗口。 |
1367
1368**示例:**
1369
1370  ```ts
1371  // xxx.ets
1372  import web_webview from '@ohos.web.webview'
1373  //在同一page页有两个web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
1374  @CustomDialog
1375  struct NewWebViewComp {
1376  controller?: CustomDialogController
1377  webviewController1: web_webview.WebviewController = new web_webview.WebviewController()
1378  build() {
1379      Column() {
1380        Web({ src: "", controller: this.webviewController1 })
1381          .javaScriptAccess(true)
1382          .multiWindowAccess(false)
1383          .onWindowExit(()=> {
1384            console.info("NewWebViewComp onWindowExit")
1385            if (this.controller) {
1386              this.controller.close()
1387            }
1388          })
1389        }
1390    }
1391  }
1392
1393  @Entry
1394  @Component
1395  struct WebComponent {
1396    controller: web_webview.WebviewController = new web_webview.WebviewController()
1397    dialogController: CustomDialogController | null = null
1398    build() {
1399      Column() {
1400        Web({ src: 'www.example.com', controller: this.controller })
1401          .javaScriptAccess(true)
1402          //需要使能multiWindowAccess
1403          .multiWindowAccess(true)
1404          .allowWindowOpenMethod(true)
1405          .onWindowNew((event) => {
1406            if (this.dialogController) {
1407              this.dialogController.close()
1408            }
1409            let popController:web_webview.WebviewController = new web_webview.WebviewController()
1410            this.dialogController = new CustomDialogController({
1411              builder: NewWebViewComp({webviewController1: popController})
1412            })
1413            this.dialogController.open()
1414            //将新窗口对应WebviewController返回给Web内核。
1415            //如果不需要打开新窗口请调用event.handler.setWebController接口设置成null。
1416            //若不调用event.handler.setWebController接口,会造成render进程阻塞。
1417            event.handler.setWebController(popController)
1418          })
1419      }
1420    }
1421  }
1422  ```
1423
1424### mediaOptions<sup>10+</sup>
1425
1426mediaOptions(options: WebMediaOptions)
1427
1428设置Web媒体播放的策略,其中包括:Web中的音频在重新获焦后能够自动续播的有效期、应用内多个Web实例的音频是否独占。
1429
1430> **说明:**
1431>
1432> - 同一Web实例中的多个音频均视为同一音频。
1433> - 该媒体播放策略将同时管控有声视频。
1434> - 属性参数更新后需重新播放音频方可生效。
1435> - 建议为所有Web组件设置相同的audioExclusive值。
1436
1437**参数:**
1438
1439| 参数名     | 参数类型                                  | 必填   | 默认值                                      | 参数描述                                     |
1440| ------- | ------------------------------------- | ---- | ---------------------------------------- | ---------------------------------------- |
1441| options | [WebMediaOptions](#webmediaoptions10) | 是    | {resumeInterval: 0, audioExclusive: true} | 设置Web的媒体策略。其中,resumeInterval的默认值为0表示不自动续播。 |
1442
1443**示例:**
1444
1445  ```ts
1446  // xxx.ets
1447  import web_webview from '@ohos.web.webview'
1448  @Entry
1449  @Component
1450  struct WebComponent {
1451    controller: web_webview.WebviewController = new web_webview.WebviewController()
1452    @State options: WebMediaOptions = {resumeInterval: 10, audioExclusive: true}
1453    build() {
1454      Column() {
1455        Web({ src: 'www.example.com', controller: this.controller })
1456          .mediaOptions(this.options)
1457      }
1458    }
1459  }
1460  ```
1461
1462## 事件
1463
1464通用事件仅支持[onAppear](ts-universal-events-show-hide.md#事件)、[onDisAppear](ts-universal-events-show-hide.md#事件)、[onBlur](ts-universal-focus-event.md#事件)、[onFocus](ts-universal-focus-event.md#事件)、[onDragEnd](ts-universal-events-drag-drop.md#事件)、[onDragEnter](ts-universal-events-drag-drop.md#事件)、[onDragStart](ts-universal-events-drag-drop.md#事件)、[onDragMove](ts-universal-events-drag-drop.md#事件)、[onDragLeave](ts-universal-events-drag-drop.md#事件)、[onDrop](ts-universal-events-drag-drop.md#事件)、[onHover](ts-universal-mouse-key.md#事件)、[onMouse](ts-universal-mouse-key.md#事件)、[onKeyEvent](ts-universal-events-key.md#事件)、[onTouch](ts-universal-events-touch.md#事件)、[onVisibleAreaChange](ts-universal-component-visible-area-change-event.md#事件)。
1465
1466### onAlert
1467
1468onAlert(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)
1469
1470网页触发alert()告警弹窗时触发回调。
1471
1472**参数:**
1473
1474| 参数名     | 参数类型                  | 参数描述            |
1475| ------- | --------------------- | --------------- |
1476| url     | string                | 当前显示弹窗所在网页的URL。 |
1477| message | string                | 弹窗中显示的信息。       |
1478| result  | [JsResult](#jsresult) | 通知Web组件用户操作行为。  |
1479
1480**返回值:**
1481
1482| 类型      | 说明                                       |
1483| ------- | ---------------------------------------- |
1484| boolean | 当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
1485
1486**示例:**
1487
1488  ```ts
1489  // xxx.ets
1490  import web_webview from '@ohos.web.webview'
1491
1492  @Entry
1493  @Component
1494  struct WebComponent {
1495    controller: web_webview.WebviewController = new web_webview.WebviewController()
1496    build() {
1497      Column() {
1498        Web({ src: $rawfile("index.html"), controller: this.controller })
1499          .onAlert((event) => {
1500            if (event) {
1501              console.log("event.url:" + event.url)
1502              console.log("event.message:" + event.message)
1503              AlertDialog.show({
1504                title: 'onAlert',
1505                message: 'text',
1506                primaryButton: {
1507                  value: 'cancel',
1508                  action: () => {
1509                    event.result.handleCancel()
1510                  }
1511                },
1512                secondaryButton: {
1513                  value: 'ok',
1514                  action: () => {
1515                    event.result.handleConfirm()
1516                  }
1517                },
1518                cancel: () => {
1519                  event.result.handleCancel()
1520                }
1521              })
1522            }
1523            return true
1524          })
1525      }
1526    }
1527  }
1528  ```
1529
1530  加载的html文件。
1531  ```html
1532  <!--index.html-->
1533  <!DOCTYPE html>
1534  <html>
1535  <head>
1536    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
1537  </head>
1538  <body>
1539    <h1>WebView onAlert Demo</h1>
1540    <button onclick="myFunction()">Click here</button>
1541    <script>
1542      function myFunction() {
1543        alert("Hello World");
1544      }
1545    </script>
1546  </body>
1547  </html>
1548  ```
1549
1550### onBeforeUnload
1551
1552onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)
1553
1554刷新或关闭场景下,在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点,才会触发此回调。
1555
1556**参数:**
1557
1558| 参数名     | 参数类型                  | 参数描述            |
1559| ------- | --------------------- | --------------- |
1560| url     | string                | 当前显示弹窗所在网页的URL。 |
1561| message | string                | 弹窗中显示的信息。       |
1562| result  | [JsResult](#jsresult) | 通知Web组件用户操作行为。  |
1563
1564**返回值:**
1565
1566| 类型      | 说明                                       |
1567| ------- | ---------------------------------------- |
1568| boolean | 当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。 |
1569
1570**示例:**
1571
1572  ```ts
1573  // xxx.ets
1574  import web_webview from '@ohos.web.webview'
1575
1576  @Entry
1577  @Component
1578  struct WebComponent {
1579    controller: web_webview.WebviewController = new web_webview.WebviewController()
1580
1581    build() {
1582      Column() {
1583        Web({ src: $rawfile("index.html"), controller: this.controller })
1584          .onBeforeUnload((event) => {
1585            if (event) {
1586              console.log("event.url:" + event.url)
1587              console.log("event.message:" + event.message)
1588              AlertDialog.show({
1589                title: 'onBeforeUnload',
1590                message: 'text',
1591                primaryButton: {
1592                  value: 'cancel',
1593                  action: () => {
1594                    event.result.handleCancel()
1595                  }
1596                },
1597                secondaryButton: {
1598                  value: 'ok',
1599                  action: () => {
1600                    event.result.handleConfirm()
1601                  }
1602                },
1603                cancel: () => {
1604                  event.result.handleCancel()
1605                }
1606              })
1607            }
1608            return true
1609          })
1610      }
1611    }
1612  }
1613  ```
1614
1615  加载的html文件。
1616  ```html
1617  <!--index.html-->
1618  <!DOCTYPE html>
1619  <html>
1620  <head>
1621    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
1622  </head>
1623  <body onbeforeunload="return myFunction()">
1624    <h1>WebView onBeforeUnload Demo</h1>
1625    <a href="https://www.example.com">Click here</a>
1626    <script>
1627      function myFunction() {
1628        return "onBeforeUnload Event";
1629      }
1630    </script>
1631  </body>
1632  </html>
1633  ```
1634
1635### onConfirm
1636
1637onConfirm(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)
1638
1639网页调用confirm()告警时触发此回调。
1640
1641**参数:**
1642
1643| 参数名     | 参数类型                  | 参数描述            |
1644| ------- | --------------------- | --------------- |
1645| url     | string                | 当前显示弹窗所在网页的URL。 |
1646| message | string                | 弹窗中显示的信息。       |
1647| result  | [JsResult](#jsresult) | 通知Web组件用户操作行为。  |
1648
1649**返回值:**
1650
1651| 类型      | 说明                                       |
1652| ------- | ---------------------------------------- |
1653| boolean | 当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件。当回调返回false时,函数中绘制的自定义弹窗无效。 |
1654
1655**示例:**
1656
1657  ```ts
1658  // xxx.ets
1659  import web_webview from '@ohos.web.webview'
1660
1661  @Entry
1662  @Component
1663  struct WebComponent {
1664    controller: web_webview.WebviewController = new web_webview.WebviewController()
1665
1666    build() {
1667      Column() {
1668        Web({ src: $rawfile("index.html"), controller: this.controller })
1669          .onConfirm((event) => {
1670            if (event) {
1671              console.log("event.url:" + event.url)
1672              console.log("event.message:" + event.message)
1673              AlertDialog.show({
1674                title: 'onConfirm',
1675                message: 'text',
1676                primaryButton: {
1677                  value: 'cancel',
1678                  action: () => {
1679                    event.result.handleCancel()
1680                  }
1681                },
1682                secondaryButton: {
1683                  value: 'ok',
1684                  action: () => {
1685                    event.result.handleConfirm()
1686                  }
1687                },
1688                cancel: () => {
1689                  event.result.handleCancel()
1690                }
1691              })
1692            }
1693            return true
1694          })
1695      }
1696    }
1697  }
1698  ```
1699
1700  加载的html文件。
1701  ```html
1702  <!--index.html-->
1703  <!DOCTYPE html>
1704  <html>
1705  <head>
1706    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
1707  </head>
1708
1709  <body>
1710    <h1>WebView onConfirm Demo</h1>
1711    <button onclick="myFunction()">Click here</button>
1712    <p id="demo"></p>
1713    <script>
1714      function myFunction() {
1715        let x;
1716        let r = confirm("click button!");
1717        if (r == true) {
1718          x = "ok";
1719        } else {
1720          x = "cancel";
1721        }
1722        document.getElementById("demo").innerHTML = x;
1723      }
1724    </script>
1725  </body>
1726  </html>
1727  ```
1728
1729### onPrompt<sup>9+</sup>
1730
1731onPrompt(callback: (event?: { url: string; message: string; value: string; result: JsResult }) => boolean)
1732
1733网页调用prompt()告警时触发此回调。
1734
1735**参数:**
1736
1737| 参数名     | 参数类型                  | 参数描述            |
1738| ------- | --------------------- | --------------- |
1739| url     | string                | 当前显示弹窗所在网页的URL。 |
1740| message | string                | 弹窗中显示的信息。       |
1741| result  | [JsResult](#jsresult) | 通知Web组件用户操作行为。  |
1742
1743**返回值:**
1744
1745| 类型      | 说明                                       |
1746| ------- | ---------------------------------------- |
1747| boolean | 当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件。当回调返回false时,函数中绘制的自定义弹窗无效。 |
1748
1749**示例:**
1750
1751  ```ts
1752  // xxx.ets
1753  import web_webview from '@ohos.web.webview'
1754
1755  @Entry
1756  @Component
1757  struct WebComponent {
1758    controller: web_webview.WebviewController = new web_webview.WebviewController()
1759
1760    build() {
1761      Column() {
1762        Web({ src: $rawfile("index.html"), controller: this.controller })
1763          .onPrompt((event) => {
1764            if (event) {
1765              console.log("url:" + event.url)
1766              console.log("message:" + event.message)
1767              console.log("value:" + event.value)
1768              AlertDialog.show({
1769                title: 'onPrompt',
1770                message: 'text',
1771                primaryButton: {
1772                  value: 'cancel',
1773                  action: () => {
1774                    event.result.handleCancel()
1775                  }
1776                },
1777                secondaryButton: {
1778                  value: 'ok',
1779                  action: () => {
1780                    event.result.handlePromptConfirm(event.value)
1781                  }
1782                },
1783                cancel: () => {
1784                  event.result.handleCancel()
1785                }
1786              })
1787            }
1788            return true
1789          })
1790      }
1791    }
1792  }
1793  ```
1794
1795  加载的html文件。
1796  ```html
1797  <!--index.html-->
1798  <!DOCTYPE html>
1799  <html>
1800  <head>
1801    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
1802  </head>
1803
1804  <body>
1805    <h1>WebView onPrompt Demo</h1>
1806    <button onclick="myFunction()">Click here</button>
1807    <p id="demo"></p>
1808    <script>
1809      function myFunction() {
1810        let message = prompt("Message info", "Hello World");
1811        if (message != null && message != "") {
1812          document.getElementById("demo").innerHTML = message;
1813        }
1814      }
1815    </script>
1816  </body>
1817  </html>
1818  ```
1819
1820### onConsole
1821
1822onConsole(callback: (event?: { message: ConsoleMessage }) => boolean)
1823
1824通知宿主应用JavaScript console消息。
1825
1826**参数:**
1827
1828| 参数名     | 参数类型                              | 参数描述      |
1829| ------- | --------------------------------- | --------- |
1830| message | [ConsoleMessage](#consolemessage) | 触发的控制台信息。 |
1831
1832**返回值:**
1833
1834| 类型      | 说明                                  |
1835| ------- | ----------------------------------- |
1836| boolean | 当返回true时,该条消息将不会再打印至控制台,反之仍会打印至控制台。 |
1837
1838**示例:**
1839
1840  ```ts
1841  // xxx.ets
1842  import web_webview from '@ohos.web.webview'
1843
1844  @Entry
1845  @Component
1846  struct WebComponent {
1847    controller: web_webview.WebviewController = new web_webview.WebviewController()
1848
1849    build() {
1850      Column() {
1851        Web({ src: 'www.example.com', controller: this.controller })
1852          .onConsole((event) => {
1853            if (event) {
1854              console.log('getMessage:' + event.message.getMessage())
1855              console.log('getSourceId:' + event.message.getSourceId())
1856              console.log('getLineNumber:' + event.message.getLineNumber())
1857              console.log('getMessageLevel:' + event.message.getMessageLevel())
1858            }
1859            return false
1860          })
1861      }
1862    }
1863  }
1864  ```
1865
1866### onDownloadStart
1867
1868onDownloadStart(callback: (event?: { url: string, userAgent: string, contentDisposition: string, mimetype: string, contentLength: number }) => void)
1869
1870通知主应用开始下载一个文件。
1871
1872**参数:**
1873
1874| 参数名                | 参数类型          | 参数描述                                |
1875| ------------------ | ------------- | ----------------------------------- |
1876| url                | string        | 文件下载的URL。                           |
1877| userAgent          | string        | 用于下载的用户代理。                          |
1878| contentDisposition | string        | 服务器返回的 Content-Disposition响应头,可能为空。 |
1879| mimetype           | string        | 服务器返回内容媒体类型(MIME)信息。                |
1880| contentLength      | contentLength | 服务器返回文件的长度。                         |
1881
1882**示例:**
1883
1884  ```ts
1885  // xxx.ets
1886  import web_webview from '@ohos.web.webview'
1887
1888  @Entry
1889  @Component
1890  struct WebComponent {
1891    controller: web_webview.WebviewController = new web_webview.WebviewController()
1892
1893    build() {
1894      Column() {
1895        Web({ src: 'www.example.com', controller: this.controller })
1896          .onDownloadStart((event) => {
1897            if (event) {
1898              console.log('url:' + event.url)
1899              console.log('userAgent:' + event.userAgent)
1900              console.log('contentDisposition:' + event.contentDisposition)
1901              console.log('contentLength:' + event.contentLength)
1902              console.log('mimetype:' + event.mimetype)
1903            }
1904          })
1905      }
1906    }
1907  }
1908  ```
1909
1910### onErrorReceive
1911
1912onErrorReceive(callback: (event?: { request: WebResourceRequest, error: WebResourceError }) => void)
1913
1914网页加载遇到错误时触发该回调。出于性能考虑,建议此回调中尽量执行简单逻辑。在无网络的情况下,触发此回调。
1915
1916**参数:**
1917
1918| 参数名     | 参数类型                                     | 参数描述            |
1919| ------- | ---------------------------------------- | --------------- |
1920| request | [WebResourceRequest](#webresourcerequest) | 网页请求的封装信息。      |
1921| error   | [WebResourceError](#webresourceerror)    | 网页加载资源错误的封装信息 。 |
1922
1923**示例:**
1924
1925  ```ts
1926  // xxx.ets
1927  import web_webview from '@ohos.web.webview'
1928
1929  @Entry
1930  @Component
1931  struct WebComponent {
1932    controller: web_webview.WebviewController = new web_webview.WebviewController()
1933
1934    build() {
1935      Column() {
1936        Web({ src: 'www.example.com', controller: this.controller })
1937          .onErrorReceive((event) => {
1938            if (event) {
1939              console.log('getErrorInfo:' + event.error.getErrorInfo())
1940              console.log('getErrorCode:' + event.error.getErrorCode())
1941              console.log('url:' + event.request.getRequestUrl())
1942              console.log('isMainFrame:' + event.request.isMainFrame())
1943              console.log('isRedirect:' + event.request.isRedirect())
1944              console.log('isRequestGesture:' + event.request.isRequestGesture())
1945              console.log('getRequestHeader_headerKey:' + event.request.getRequestHeader().toString())
1946              let result = event.request.getRequestHeader()
1947              console.log('The request header result size is ' + result.length)
1948              for (let i of result) {
1949                console.log('The request header key is : ' + i.headerKey + ', value is : ' + i.headerValue)
1950              }
1951            }
1952          })
1953      }
1954    }
1955  }
1956  ```
1957
1958### onHttpErrorReceive
1959
1960onHttpErrorReceive(callback: (event?: { request: WebResourceRequest, response: WebResourceResponse }) => void)
1961
1962网页加载资源遇到的HTTP错误(响应码>=400)时触发该回调。
1963
1964**参数:**
1965
1966| 参数名      | 参数类型                                     | 参数描述       |
1967| -------- | ---------------------------------------- | ---------- |
1968| request  | [WebResourceRequest](#webresourcerequest) | 网页请求的封装信息。 |
1969| response | [WebResourceResponse](#webresourceresponse) | 资源响应的封装信息。 |
1970
1971**示例:**
1972
1973  ```ts
1974  // xxx.ets
1975  import web_webview from '@ohos.web.webview'
1976
1977  @Entry
1978  @Component
1979  struct WebComponent {
1980    controller: web_webview.WebviewController = new web_webview.WebviewController()
1981
1982    build() {
1983      Column() {
1984        Web({ src: 'www.example.com', controller: this.controller })
1985          .onHttpErrorReceive((event) => {
1986            if (event) {
1987              console.log('url:' + event.request.getRequestUrl())
1988              console.log('isMainFrame:' + event.request.isMainFrame())
1989              console.log('isRedirect:' + event.request.isRedirect())
1990              console.log('isRequestGesture:' + event.request.isRequestGesture())
1991              console.log('getResponseData:' + event.response.getResponseData())
1992              console.log('getResponseEncoding:' + event.response.getResponseEncoding())
1993              console.log('getResponseMimeType:' + event.response.getResponseMimeType())
1994              console.log('getResponseCode:' + event.response.getResponseCode())
1995              console.log('getReasonMessage:' + event.response.getReasonMessage())
1996              let result = event.request.getRequestHeader()
1997              console.log('The request header result size is ' + result.length)
1998              for (let i of result) {
1999                console.log('The request header key is : ' + i.headerKey + ' , value is : ' + i.headerValue)
2000              }
2001              let resph = event.response.getResponseHeader()
2002              console.log('The response header result size is ' + resph.length)
2003              for (let i of resph) {
2004                console.log('The response header key is : ' + i.headerKey + ' , value is : ' + i.headerValue)
2005              }
2006            }
2007          })
2008      }
2009    }
2010  }
2011  ```
2012
2013### onPageBegin
2014
2015onPageBegin(callback: (event?: { url: string }) => void)
2016
2017网页开始加载时触发该回调,且只在主frame触发,iframe或者frameset的内容加载时不会触发此回调。
2018
2019**参数:**
2020
2021| 参数名  | 参数类型   | 参数描述      |
2022| ---- | ------ | --------- |
2023| url  | string | 页面的URL地址。 |
2024
2025**示例:**
2026
2027  ```ts
2028  // xxx.ets
2029  import web_webview from '@ohos.web.webview'
2030
2031  @Entry
2032  @Component
2033  struct WebComponent {
2034    controller: web_webview.WebviewController = new web_webview.WebviewController()
2035
2036    build() {
2037      Column() {
2038        Web({ src: 'www.example.com', controller: this.controller })
2039          .onPageBegin((event) => {
2040            if (event) {
2041              console.log('url:' + event.url)
2042            }
2043          })
2044      }
2045    }
2046  }
2047  ```
2048
2049### onPageEnd
2050
2051onPageEnd(callback: (event?: { url: string }) => void)
2052
2053网页加载完成时触发该回调,且只在主frame触发。
2054
2055**参数:**
2056
2057| 参数名  | 参数类型   | 参数描述      |
2058| ---- | ------ | --------- |
2059| url  | string | 页面的URL地址。 |
2060
2061**示例:**
2062
2063  ```ts
2064  // xxx.ets
2065  import web_webview from '@ohos.web.webview'
2066
2067  @Entry
2068  @Component
2069  struct WebComponent {
2070    controller: web_webview.WebviewController = new web_webview.WebviewController()
2071
2072    build() {
2073      Column() {
2074        Web({ src: 'www.example.com', controller: this.controller })
2075          .onPageEnd((event) => {
2076            if (event) {
2077              console.log('url:' + event.url)
2078            }
2079          })
2080      }
2081    }
2082  }
2083  ```
2084
2085### onProgressChange
2086
2087onProgressChange(callback: (event?: { newProgress: number }) => void)
2088
2089网页加载进度变化时触发该回调。
2090
2091**参数:**
2092
2093| 参数名         | 参数类型   | 参数描述                  |
2094| ----------- | ------ | --------------------- |
2095| newProgress | number | 新的加载进度,取值范围为0到100的整数。 |
2096
2097**示例:**
2098
2099  ```ts
2100  // xxx.ets
2101  import web_webview from '@ohos.web.webview'
2102
2103  @Entry
2104  @Component
2105  struct WebComponent {
2106    controller: web_webview.WebviewController = new web_webview.WebviewController()
2107
2108    build() {
2109      Column() {
2110        Web({ src: 'www.example.com', controller: this.controller })
2111          .onProgressChange((event) => {
2112            if (event) {
2113              console.log('newProgress:' + event.newProgress)
2114            }
2115          })
2116      }
2117    }
2118  }
2119  ```
2120
2121### onTitleReceive
2122
2123onTitleReceive(callback: (event?: { title: string }) => void)
2124
2125网页document标题更改时触发该回调。
2126
2127**参数:**
2128
2129| 参数名   | 参数类型   | 参数描述          |
2130| ----- | ------ | ------------- |
2131| title | string | document标题内容。 |
2132
2133**示例:**
2134
2135  ```ts
2136  // xxx.ets
2137  import web_webview from '@ohos.web.webview'
2138
2139  @Entry
2140  @Component
2141  struct WebComponent {
2142    controller: web_webview.WebviewController = new web_webview.WebviewController()
2143
2144    build() {
2145      Column() {
2146        Web({ src: 'www.example.com', controller: this.controller })
2147          .onTitleReceive((event) => {
2148            if (event) {
2149              console.log('title:' + event.title)
2150            }
2151          })
2152      }
2153    }
2154  }
2155  ```
2156
2157### onRefreshAccessedHistory
2158
2159onRefreshAccessedHistory(callback: (event?: { url: string, isRefreshed: boolean }) => void)
2160
2161加载网页页面完成时触发该回调,用于应用更新其访问的历史链接。
2162
2163**参数:**
2164
2165| 参数名         | 参数类型    | 参数描述                                     |
2166| ----------- | ------- | ---------------------------------------- |
2167| url         | string  | 访问的url。                                  |
2168| isRefreshed | boolean | true表示该页面是被重新加载的(调用[refresh<sup>9+</sup>](../apis/js-apis-webview.md#refresh)接口),false表示该页面是新加载的。 |
2169
2170**示例:**
2171
2172  ```ts
2173  // xxx.ets
2174  import web_webview from '@ohos.web.webview'
2175
2176  @Entry
2177  @Component
2178  struct WebComponent {
2179    controller: web_webview.WebviewController = new web_webview.WebviewController()
2180
2181    build() {
2182      Column() {
2183        Web({ src: 'www.example.com', controller: this.controller })
2184          .onRefreshAccessedHistory((event) => {
2185            if (event) {
2186              console.log('url:' + event.url + ' isReload:' + event.isRefreshed)
2187            }
2188          })
2189      }
2190    }
2191  }
2192  ```
2193
2194### onSslErrorReceive<sup>(deprecated)</sup>
2195
2196onSslErrorReceive(callback: (event?: { handler: Function, error: object }) => void)
2197
2198通知用户加载资源时发生SSL错误。
2199
2200> **说明:**
2201>
2202> 从API version 8开始支持,从API version 9开始废弃。建议使用[onSslErrorEventReceive<sup>9+</sup>](#onsslerroreventreceive9)替代。
2203
2204### onFileSelectorShow<sup>(deprecated)</sup>
2205
2206onFileSelectorShow(callback: (event?: { callback: Function, fileSelector: object }) => void)
2207
2208调用此函数以处理具有“文件”输入类型的HTML表单,以响应用户按下的“选择文件”按钮。
2209
2210> **说明:**
2211>
2212> 从API version 8开始支持,从API version 9开始废弃。建议使用[onShowFileSelector<sup>9+</sup>](#onshowfileselector9)替代。
2213
2214### onRenderExited<sup>9+</sup>
2215
2216onRenderExited(callback: (event?: { renderExitReason: RenderExitReason }) => void)
2217
2218应用渲染进程异常退出时触发该回调。
2219
2220**参数:**
2221
2222| 参数名              | 参数类型                                     | 参数描述             |
2223| ---------------- | ---------------------------------------- | ---------------- |
2224| renderExitReason | [RenderExitReason](#renderexitreason9枚举说明) | 渲染进程异常退出的具体原因。 |
2225
2226**示例:**
2227
2228  ```ts
2229  // xxx.ets
2230  import web_webview from '@ohos.web.webview'
2231
2232  @Entry
2233  @Component
2234  struct WebComponent {
2235    controller: web_webview.WebviewController = new web_webview.WebviewController()
2236
2237    build() {
2238      Column() {
2239        Web({ src: 'chrome://crash/', controller: this.controller })
2240          .onRenderExited((event) => {
2241            if (event) {
2242              console.log('reason:' + event.renderExitReason)
2243            }
2244          })
2245      }
2246    }
2247  }
2248  ```
2249
2250### onShowFileSelector<sup>9+</sup>
2251
2252onShowFileSelector(callback: (event?: { result: FileSelectorResult, fileSelector: FileSelectorParam }) => boolean)
2253
2254调用此函数以处理具有“文件”输入类型的HTML表单,以响应用户按下的“选择文件”按钮。
2255
2256**参数:**
2257
2258| 参数名          | 参数类型                                     | 参数描述              |
2259| ------------ | ---------------------------------------- | ----------------- |
2260| result       | [FileSelectorResult](#fileselectorresult9) | 用于通知Web组件文件选择的结果。 |
2261| fileSelector | [FileSelectorParam](#fileselectorparam9) | 文件选择器的相关信息。       |
2262
2263**返回值:**
2264
2265| 类型      | 说明                                       |
2266| ------- | ---------------------------------------- |
2267| boolean | 当返回值为true时,用户可以调用系统提供的弹窗能力。当回调返回false时,函数中绘制的自定义弹窗无效。 |
2268
2269**示例:**
2270
2271  ```ts
2272  // xxx.ets
2273  import web_webview from '@ohos.web.webview';
2274  import picker from '@ohos.file.picker';
2275  import { BusinessError } from '@ohos.base';
2276
2277  @Entry
2278  @Component
2279  struct WebComponent {
2280    controller: web_webview.WebviewController = new web_webview.WebviewController()
2281
2282    build() {
2283      Column() {
2284        Web({ src: $rawfile('index.html'), controller: this.controller })
2285          .onShowFileSelector((event) => {
2286            console.log('MyFileUploader onShowFileSelector invoked')
2287            const documentSelectOptions = new picker.DocumentSelectOptions();
2288            let uri: string | null = null;
2289            const documentViewPicker = new picker.DocumentViewPicker();
2290            documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {
2291              uri = documentSelectResult[0];
2292              console.info('documentViewPicker.select to file succeed and uri is:' + uri);
2293              if (event) {
2294                event.result.handleFileList([uri]);
2295              }
2296            }).catch((err: BusinessError) => {
2297              console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
2298            })
2299            return true
2300          })
2301      }
2302    }
2303  }
2304  ```
2305
2306  加载的html文件。
2307  ```html
2308  <!DOCTYPE html>
2309  <html>
2310  <head>
2311    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
2312  </head>
2313  <body>
2314    <form id="upload-form" enctype="multipart/form-data">
2315      <input type="file" id="upload" name="upload"/>
2316      </form>
2317  </body>
2318  </html>
2319  ```
2320
2321### onResourceLoad<sup>9+</sup>
2322
2323onResourceLoad(callback: (event: {url: string}) => void)
2324
2325通知Web组件所加载的资源文件url信息。
2326
2327**参数:**
2328
2329| 参数名  | 参数类型   | 参数描述           |
2330| ---- | ------ | -------------- |
2331| url  | string | 所加载的资源文件url信息。 |
2332
2333**示例:**
2334
2335  ```ts
2336  // xxx.ets
2337  import web_webview from '@ohos.web.webview'
2338
2339  @Entry
2340  @Component
2341  struct WebComponent {
2342    controller: web_webview.WebviewController = new web_webview.WebviewController()
2343
2344    build() {
2345      Column() {
2346        Web({ src: 'www.example.com', controller: this.controller })
2347          .onResourceLoad((event) => {
2348            console.log('onResourceLoad: ' + event.url)
2349          })
2350      }
2351    }
2352  }
2353  ```
2354
2355### onScaleChange<sup>9+</sup>
2356
2357onScaleChange(callback: (event: {oldScale: number, newScale: number}) => void)
2358
2359当前页面显示比例的变化时触发该回调。
2360
2361**参数:**
2362
2363| 参数名      | 参数类型   | 参数描述         |
2364| -------- | ------ | ------------ |
2365| oldScale | number | 变化前的显示比例百分比。 |
2366| newScale | number | 变化后的显示比例百分比。 |
2367
2368**示例:**
2369
2370  ```ts
2371  // xxx.ets
2372  import web_webview from '@ohos.web.webview'
2373
2374  @Entry
2375  @Component
2376  struct WebComponent {
2377    controller: web_webview.WebviewController = new web_webview.WebviewController()
2378
2379    build() {
2380      Column() {
2381        Web({ src: 'www.example.com', controller: this.controller })
2382          .onScaleChange((event) => {
2383            console.log('onScaleChange changed from ' + event.oldScale + ' to ' + event.newScale)
2384          })
2385      }
2386    }
2387  }
2388  ```
2389
2390### onUrlLoadIntercept<sup>(deprecated)</sup>
2391
2392onUrlLoadIntercept(callback: (event?: { data:string | WebResourceRequest }) => boolean)
2393
2394当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。
2395从API version 10开始不再维护,建议使用[onLoadIntercept<sup>10+</sup>](#onloadintercept10)代替。
2396
2397**参数:**
2398
2399| 参数名  | 参数类型                                     | 参数描述      |
2400| ---- | ---------------------------------------- | --------- |
2401| data | string \| [WebResourceRequest](#webresourcerequest) | url的相关信息。 |
2402
2403**返回值:**
2404
2405| 类型      | 说明                       |
2406| ------- | ------------------------ |
2407| boolean | 返回true表示阻止此次加载,否则允许此次加载。 |
2408
2409**示例:**
2410
2411  ```ts
2412  // xxx.ets
2413  import web_webview from '@ohos.web.webview'
2414
2415  @Entry
2416  @Component
2417  struct WebComponent {
2418    controller: web_webview.WebviewController = new web_webview.WebviewController()
2419
2420    build() {
2421      Column() {
2422        Web({ src: 'www.example.com', controller: this.controller })
2423          .onUrlLoadIntercept((event) => {
2424            if (event) {
2425              console.log('onUrlLoadIntercept ' + event.data.toString())
2426            }
2427            return true
2428          })
2429      }
2430    }
2431  }
2432  ```
2433
2434### onInterceptRequest<sup>9+</sup>
2435
2436onInterceptRequest(callback: (event?: { request: WebResourceRequest}) => WebResourceResponse)
2437
2438当Web组件加载url之前触发该回调,用于拦截url并返回响应数据。
2439
2440**参数:**
2441
2442| 参数名     | 参数类型                                     | 参数描述        |
2443| ------- | ---------------------------------------- | ----------- |
2444| request | [WebResourceRequest](#webresourcerequest) | url请求的相关信息。 |
2445
2446**返回值:**
2447
2448| 类型                                       | 说明                                       |
2449| ---------------------------------------- | ---------------------------------------- |
2450| [WebResourceResponse](#webresourceresponse) | 返回响应数据则按照响应数据加载,无响应数据则返回null表示按照原来的方式加载。 |
2451
2452**示例:**
2453
2454  ```ts
2455  // xxx.ets
2456  import web_webview from '@ohos.web.webview'
2457
2458  @Entry
2459  @Component
2460  struct WebComponent {
2461    controller: web_webview.WebviewController = new web_webview.WebviewController()
2462    responseweb: WebResourceResponse = new WebResourceResponse()
2463    heads:Header[] = new Array()
2464    @State webdata: string = "<!DOCTYPE html>\n" +
2465    "<html>\n"+
2466    "<head>\n"+
2467    "<title>intercept test</title>\n"+
2468    "</head>\n"+
2469    "<body>\n"+
2470    "<h1>intercept test</h1>\n"+
2471    "</body>\n"+
2472    "</html>"
2473    build() {
2474      Column() {
2475        Web({ src: 'www.example.com', controller: this.controller })
2476          .onInterceptRequest((event) => {
2477            if (event) {
2478              console.log('url:' + event.request.getRequestUrl())
2479            }
2480            let head1:Header = {
2481              headerKey:"Connection",
2482              headerValue:"keep-alive"
2483            }
2484            let head2:Header = {
2485              headerKey:"Cache-Control",
2486              headerValue:"no-cache"
2487            }
2488            let length = this.heads.push(head1)
2489            length = this.heads.push(head2)
2490            this.responseweb.setResponseHeader(this.heads)
2491            this.responseweb.setResponseData(this.webdata)
2492            this.responseweb.setResponseEncoding('utf-8')
2493            this.responseweb.setResponseMimeType('text/html')
2494            this.responseweb.setResponseCode(200)
2495            this.responseweb.setReasonMessage('OK')
2496            return this.responseweb
2497          })
2498      }
2499    }
2500  }
2501  ```
2502
2503### onHttpAuthRequest<sup>9+</sup>
2504
2505onHttpAuthRequest(callback: (event?: { handler: HttpAuthHandler, host: string, realm: string}) => boolean)
2506
2507通知收到http auth认证请求。
2508
2509**参数:**
2510
2511| 参数名     | 参数类型                                 | 参数描述             |
2512| ------- | ------------------------------------ | ---------------- |
2513| handler | [HttpAuthHandler](#httpauthhandler9) | 通知Web组件用户操作行为。   |
2514| host    | string                               | HTTP身份验证凭据应用的主机。 |
2515| realm   | string                               | HTTP身份验证凭据应用的域。  |
2516
2517**返回值:**
2518
2519| 类型      | 说明                    |
2520| ------- | --------------------- |
2521| boolean | 返回false表示此次认证失败,否则成功。 |
2522
2523**示例:**
2524
2525  ```ts
2526  // xxx.ets
2527  import web_webview from '@ohos.web.webview'
2528  @Entry
2529  @Component
2530  struct WebComponent {
2531    controller: web_webview.WebviewController = new web_webview.WebviewController()
2532    httpAuth: boolean = false
2533
2534    build() {
2535      Column() {
2536        Web({ src: 'www.example.com', controller: this.controller })
2537          .onHttpAuthRequest((event) => {
2538            if (event) {
2539              AlertDialog.show({
2540                title: 'onHttpAuthRequest',
2541                message: 'text',
2542                primaryButton: {
2543                  value: 'cancel',
2544                  action: () => {
2545                    event.handler.cancel()
2546                  }
2547                },
2548                secondaryButton: {
2549                  value: 'ok',
2550                  action: () => {
2551                    this.httpAuth = event.handler.isHttpAuthInfoSaved()
2552                    if (this.httpAuth == false) {
2553                      web_webview.WebDataBase.saveHttpAuthCredentials(
2554                        event.host,
2555                        event.realm,
2556                        "2222",
2557                        "2222"
2558                      )
2559                      event.handler.cancel()
2560                    }
2561                  }
2562                },
2563                cancel: () => {
2564                  event.handler.cancel()
2565                }
2566              })
2567            }
2568            return true
2569          })
2570      }
2571    }
2572  }
2573  ```
2574### onSslErrorEventReceive<sup>9+</sup>
2575
2576onSslErrorEventReceive(callback: (event: { handler: SslErrorHandler, error: SslError }) => void)
2577
2578通知用户加载资源时发生SSL错误。
2579
2580**参数:**
2581
2582| 参数名     | 参数类型                                 | 参数描述           |
2583| ------- | ------------------------------------ | -------------- |
2584| handler | [SslErrorHandler](#sslerrorhandler9) | 通知Web组件用户操作行为。 |
2585| error   | [SslError](#sslerror9枚举说明)           | 错误码。           |
2586
2587**示例:**
2588
2589  ```ts
2590  // xxx.ets
2591  import web_webview from '@ohos.web.webview'
2592  @Entry
2593  @Component
2594  struct WebComponent {
2595    controller: web_webview.WebviewController = new web_webview.WebviewController()
2596
2597    build() {
2598      Column() {
2599        Web({ src: 'www.example.com', controller: this.controller })
2600          .onSslErrorEventReceive((event) => {
2601            AlertDialog.show({
2602              title: 'onSslErrorEventReceive',
2603              message: 'text',
2604              primaryButton: {
2605                value: 'confirm',
2606                action: () => {
2607                  event.handler.handleConfirm()
2608                }
2609              },
2610              secondaryButton: {
2611                value: 'cancel',
2612                action: () => {
2613                  event.handler.handleCancel()
2614                }
2615              },
2616              cancel: () => {
2617                event.handler.handleCancel()
2618              }
2619            })
2620          })
2621      }
2622    }
2623  }
2624  ```
2625
2626### onClientAuthenticationRequest<sup>9+</sup>
2627
2628onClientAuthenticationRequest(callback: (event: {handler : ClientAuthenticationHandler, host : string, port : number, keyTypes : Array<string\>, issuers : Array<string\>}) => void)
2629
2630通知用户收到SSL客户端证书请求事件。
2631
2632**参数:**
2633
2634| 参数名      | 参数类型                                     | 参数描述            |
2635| -------- | ---------------------------------------- | --------------- |
2636| handler  | [ClientAuthenticationHandler](#clientauthenticationhandler9) | 通知Web组件用户操作行为。  |
2637| host     | string                                   | 请求证书服务器的主机名。    |
2638| port     | number                                   | 请求证书服务器的端口号。    |
2639| keyTypes | Array<string\>                           | 可接受的非对称秘钥类型。    |
2640| issuers  | Array<string\>                           | 与私钥匹配的证书可接受颁发者。 |
2641
2642**示例:**
2643
2644未对接证书管理的双向认证。
2645
2646  ```ts
2647  // xxx.ets API9
2648  import web_webview from '@ohos.web.webview'
2649  @Entry
2650  @Component
2651  struct WebComponent {
2652    controller: web_webview.WebviewController = new web_webview.WebviewController()
2653
2654    build() {
2655      Column() {
2656        Web({ src: 'www.example.com', controller: this.controller })
2657          .onClientAuthenticationRequest((event) => {
2658            AlertDialog.show({
2659              title: 'onClientAuthenticationRequest',
2660              message: 'text',
2661              primaryButton: {
2662                value: 'confirm',
2663                action: () => {
2664                  event.handler.confirm("/system/etc/user.pk8", "/system/etc/chain-user.pem")
2665                }
2666              },
2667              secondaryButton: {
2668                value: 'cancel',
2669                action: () => {
2670                  event.handlqq
2671                  er.cancel()
2672                }
2673              },
2674              cancel: () => {
2675                event.handler.ignore()
2676              }
2677            })
2678          })
2679      }
2680    }
2681  }
2682  ```
2683
2684对接证书管理的双向认证。
2685
26861. 构造单例对象GlobalContext。
2687
2688   ```ts
2689   // GlobalContext.ts
2690     export class GlobalContext {
2691       private constructor() {}
2692       private static instance: GlobalContext;
2693       private _objects = new Map<string, Object>();
2694
2695       public static getContext(): GlobalContext {
2696         if (!GlobalContext.instance) {
2697           GlobalContext.instance = new GlobalContext();
2698         }
2699         return GlobalContext.instance;
2700       }
2701
2702       getObject(value: string): Object | undefined {
2703         return this._objects.get(value);
2704       }
2705
2706       setObject(key: string, objectClass: Object): void {
2707         this._objects.set(key, objectClass);
2708       }
2709     }
2710   ```
2711
27122. 实现双向认证。
2713
2714   ```ts
2715   // xxx.ets API10
2716     import common from '@ohos.app.ability.common';
2717     import Want from '@ohos.app.ability.Want';
2718     import web_webview from '@ohos.web.webview'
2719     import { BusinessError } from '@ohos.base';
2720     import bundleManager from '@ohos.bundle.bundleManager'
2721     import { GlobalContext } from '../GlobalContext'
2722
2723     let uri = "";
2724
2725     export default class CertManagerService {
2726       private static sInstance: CertManagerService;
2727       private authUri = "";
2728       private appUid = "";
2729
2730       public static getInstance(): CertManagerService {
2731         if (CertManagerService.sInstance == null) {
2732           CertManagerService.sInstance = new CertManagerService();
2733         }
2734         return CertManagerService.sInstance;
2735       }
2736
2737       async grantAppPm(callback: (message: string) => void) {
2738         let message = '';
2739         let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT | bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
2740         //注:com.example.myapplication需要写实际应用名称
2741         try {
2742           bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
2743             console.info('getBundleInfoForSelf successfully. Data: %{public}s', JSON.stringify(data));
2744             this.appUid = data.appInfo.uid.toString();
2745           }).catch((err: BusinessError) => {
2746             console.error('getBundleInfoForSelf failed. Cause: %{public}s', err.message);
2747           });
2748         } catch (err) {
2749           let message = (err as BusinessError).message;
2750           console.error('getBundleInfoForSelf failed: %{public}s', message);
2751         }
2752
2753         //注:需要在MainAbility.ts文件的onCreate函数里添加GlobalContext.getContext().setObject("AbilityContext", this.context)
2754         let abilityContext = GlobalContext.getContext().getObject("AbilityContext") as common.UIAbilityContext
2755         await abilityContext.startAbilityForResult(
2756           {
2757             bundleName: "com.ohos.certmanager",
2758             abilityName: "MainAbility",
2759             uri: "requestAuthorize",
2760             parameters: {
2761               appUid: this.appUid, //传入申请应用的appUid
2762             }
2763           } as Want)
2764           .then((data: common.AbilityResult) => {
2765             if (!data.resultCode && data.want) {
2766               if (data.want.parameters) {
2767                 this.authUri = data.want.parameters.authUri as string; //授权成功后获取返回的authUri
2768               }
2769             }
2770           })
2771         message += "after grantAppPm authUri: " + this.authUri;
2772         uri = this.authUri;
2773         callback(message)
2774       }
2775     }
2776
2777     @Entry
2778     @Component
2779     struct WebComponent {
2780       controller: web_webview.WebviewController = new web_webview.WebviewController();
2781       @State message: string = 'Hello World' //message主要是调试观察使用
2782       certManager = CertManagerService.getInstance();
2783
2784       build() {
2785         Row() {
2786           Column() {
2787             Row() {
2788               //第一步:需要先进行授权,获取到uri
2789               Button('GrantApp')
2790                 .onClick(() => {
2791                   this.certManager.grantAppPm((data) => {
2792                     this.message = data;
2793                   });
2794                 })
2795               //第二步:授权后,双向认证会通过onClientAuthenticationRequest回调将uri传给web进行认证
2796               Button("ClientCertAuth")
2797                 .onClick(() => {
2798                   this.controller.loadUrl('https://www.example2.com'); //支持双向认证的服务器网站
2799                 })
2800             }
2801
2802             Web({ src: 'https://www.example1.com', controller: this.controller })
2803               .fileAccess(true)
2804               .javaScriptAccess(true)
2805               .domStorageAccess(true)
2806               .onlineImageAccess(true)
2807
2808             .onClientAuthenticationRequest((event) => {
2809               AlertDialog.show({
2810                 title: 'ClientAuth',
2811                 message: 'Text',
2812                 confirm: {
2813                   value: 'Confirm',
2814                   action: () => {
2815                     event.handler.confirm(uri);
2816                   }
2817                 },
2818                 cancel: () => {
2819                   event.handler.cancel();
2820                 }
2821               })
2822             })
2823           }
2824         }
2825         .width('100%')
2826         .height('100%')
2827       }
2828     }
2829   ```
2830
2831### onPermissionRequest<sup>9+</sup>
2832
2833onPermissionRequest(callback: (event?: { request: PermissionRequest }) => void)
2834
2835通知收到获取权限请求。
2836
2837**参数:**
2838
2839| 参数名     | 参数类型                                     | 参数描述           |
2840| ------- | ---------------------------------------- | -------------- |
2841| request | [PermissionRequest](#permissionrequest9) | 通知Web组件用户操作行为。 |
2842
2843**示例:**
2844
2845  ```ts
2846  // xxx.ets
2847  import web_webview from '@ohos.web.webview'
2848
2849  @Entry
2850  @Component
2851  struct WebComponent {
2852    controller: web_webview.WebviewController = new web_webview.WebviewController()
2853    build() {
2854      Column() {
2855        Web({ src: $rawfile('index.html'), controller: this.controller })
2856          .onPermissionRequest((event) => {
2857            if (event) {
2858              AlertDialog.show({
2859                title: 'title',
2860                message: 'text',
2861                primaryButton: {
2862                  value: 'deny',
2863                  action: () => {
2864                    event.request.deny()
2865                  }
2866                },
2867                secondaryButton: {
2868                  value: 'onConfirm',
2869                  action: () => {
2870                    event.request.grant(event.request.getAccessibleResource())
2871                  }
2872                },
2873                cancel: () => {
2874                  event.request.deny()
2875                }
2876              })
2877            }
2878          })
2879      }
2880    }
2881  }
2882  ```
2883
2884  加载的html文件。
2885 ```html
2886  <!-- index.html -->
2887  <!DOCTYPE html>
2888  <html>
2889  <head>
2890    <meta charset="UTF-8">
2891  </head>
2892  <body>
2893  <video id="video" width="500px" height="500px" autoplay="autoplay"></video>
2894  <canvas id="canvas" width="500px" height="500px"></canvas>
2895  <br>
2896  <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()"/>
2897  <script>
2898    function getMedia()
2899    {
2900      let constraints = {
2901        video: {width: 500, height: 500},
2902        audio: true
2903      };
2904      //获取video摄像头区域
2905      let video = document.getElementByld("video");
2906      //返回的Promise对象
2907      let promise = navigator.mediaDevices.getUserMedia(constraints);
2908      //then()异步,调用MediaStream对象作为参数
2909      promise.then(function (MediaStream) {
2910        video.srcObject = MediaStream;
2911        video.play();
2912      });
2913    }
2914  </script>
2915  </body>
2916  </html>
2917 ```
2918
2919### onContextMenuShow<sup>9+</sup>
2920
2921onContextMenuShow(callback: (event?: { param: WebContextMenuParam, result: WebContextMenuResult }) => boolean)
2922
2923长按特定元素(例如图片,链接)或鼠标右键,跳出菜单。
2924
2925**参数:**
2926
2927| 参数名    | 参数类型                                     | 参数描述        |
2928| ------ | ---------------------------------------- | ----------- |
2929| param  | [WebContextMenuParam](#webcontextmenuparam9) | 菜单相关参数。     |
2930| result | [WebContextMenuResult](#webcontextmenuresult9) | 菜单相应事件传入内核。 |
2931
2932**返回值:**
2933
2934| 类型      | 说明                       |
2935| ------- | ------------------------ |
2936| boolean | 自定义菜单返回true,默认菜单返回false。 |
2937
2938**示例:**
2939
2940  ```ts
2941  // xxx.ets
2942  import web_webview from '@ohos.web.webview'
2943  import pasteboard from '@ohos.pasteboard'
2944  const TAG = 'ContextMenu';
2945
2946  @Entry
2947  @Component
2948  struct WebComponent {
2949    controller: web_webview.WebviewController = new web_webview.WebviewController()
2950    private result: WebContextMenuResult | undefined = undefined;
2951    @State linkUrl: string = '';
2952    @State offsetX: number = 0;
2953    @State offsetY: number = 0;
2954    @State showMenu: boolean = false;
2955    @Builder
2956    //构建自定义菜单及触发功能接口
2957    MenuBuilder(){
2958      //以垂直列表形式显示的菜单。
2959      Menu(){
2960        //展示菜单Menu中具体的item菜单项。
2961        MenuItem({
2962          content: '复制图片',
2963        })
2964        .width(100)
2965        .height(50)
2966        .onClick(() => {
2967          this.result?.copyImage();
2968          this.showMenu = false;
2969        })
2970        MenuItem({
2971          content: '剪切',
2972        })
2973        .width(100)
2974        .height(50)
2975        .onClick(() => {
2976          this.result?.cut();
2977          this.showMenu = false;
2978        })
2979        MenuItem({
2980          content: '复制',
2981        })
2982        .width(100)
2983        .height(50)
2984        .onClick(() => {
2985          this.result?.copy();
2986          this.showMenu = false;
2987        })
2988        MenuItem({
2989          content: '粘贴',
2990        })
2991        .width(100)
2992        .height(50)
2993        .onClick(() => {
2994          this.result?.paste();
2995          this.showMenu = false;
2996        })
2997        MenuItem({
2998          content: '复制链接',
2999        })
3000        .width(100)
3001        .height(50)
3002        .onClick(() => {
3003          let pasteData = pasteboard.createData('text/plain', this.linkUrl);
3004          pasteboard.getSystemPasteboard().setData(pasteData, (error)=>{
3005            if(error){
3006              return;
3007            }
3008          })
3009          this.showMenu = false;
3010        })
3011        MenuItem({
3012          content: '全选',
3013        })
3014        .width(100)
3015        .height(50)
3016        .onClick(() => {
3017          this.result?.selectAll();
3018          this.showMenu = false;
3019        })
3020      }
3021      .width(150)
3022      .height(300)
3023    }
3024
3025    build() {
3026      Column() {
3027        Web({ src: $rawfile("index.html"), controller: this.controller })
3028          //触发自定义弹窗
3029          .onContextMenuShow((event) => {
3030            if (event) {
3031              this.result = event.result
3032              console.info("x coord = " + event.param.x())
3033              console.info("link url = " + event.param.getLinkUrl())
3034              this.linkUrl = event.param.getLinkUrl()
3035            }
3036            console.info(TAG, `x: ${this.offsetX}, y: ${this.offsetY}`);
3037            this.showMenu = true;
3038            this.offsetX = 250;
3039            this.offsetY = Math.max(px2vp(event?.param.y() ?? 0) - 0, 0);
3040            return true
3041        })
3042        .bindPopup(this.showMenu,
3043        {
3044          builder: this.MenuBuilder(),
3045          enableArrow: false,
3046          placement: Placement.LeftTop,
3047          offset: { x: this.offsetX, y: this.offsetY},
3048          mask: false,
3049          onStateChange: (e) => {
3050            if(!e.isVisible){
3051              this.showMenu = false;
3052              this.result!.closeContextMenu();
3053            }
3054          }
3055        })
3056      }
3057    }
3058  }
3059  ```
3060
3061  加载的html文件。
3062  ```html
3063  <!-- index.html -->
3064  <!DOCTYPE html>
3065  <html lang="en">
3066  <body>
3067    <h1>onContextMenuShow</h1>
3068    <a href="http://www.example.com" style="font-size:27px">链接www.example.com</a>
3069    //rawfile下放任意一张图片命名为example.png
3070    <div><img src="example.png"></div>
3071    <p>选中文字鼠标右键弹出菜单</p>
3072  </body>
3073  </html>
3074  ```
3075
3076### onScroll<sup>9+</sup>
3077
3078onScroll(callback: (event: {xOffset: number, yOffset: number}) => void)
3079
3080通知网页滚动条滚动位置。
3081
3082**参数:**
3083
3084| 参数名     | 参数类型   | 参数描述                   |
3085| ------- | ------ | ---------------------- |
3086| xOffset | number | 以网页最左端为基准,水平滚动条滚动所在位置。 |
3087| yOffset | number | 以网页最上端为基准,竖直滚动条滚动所在位置。 |
3088
3089**示例:**
3090
3091  ```ts
3092  // xxx.ets
3093  import web_webview from '@ohos.web.webview'
3094
3095  @Entry
3096  @Component
3097  struct WebComponent {
3098    controller: web_webview.WebviewController = new web_webview.WebviewController()
3099    build() {
3100      Column() {
3101        Web({ src: 'www.example.com', controller: this.controller })
3102        .onScroll((event) => {
3103            console.info("x = " + event.xOffset)
3104            console.info("y = " + event.yOffset)
3105        })
3106      }
3107    }
3108  }
3109  ```
3110
3111### onGeolocationShow
3112
3113onGeolocationShow(callback: (event?: { origin: string, geolocation: JsGeolocation }) => void)
3114
3115通知用户收到地理位置信息获取请求。
3116
3117**参数:**
3118
3119| 参数名         | 参数类型                            | 参数描述           |
3120| ----------- | ------------------------------- | -------------- |
3121| origin      | string                          | 指定源的字符串索引。     |
3122| geolocation | [JsGeolocation](#jsgeolocation) | 通知Web组件用户操作行为。 |
3123
3124**示例:**
3125
3126  ```ts
3127  // xxx.ets
3128  import web_webview from '@ohos.web.webview'
3129
3130  @Entry
3131  @Component
3132  struct WebComponent {
3133    controller: web_webview.WebviewController = new web_webview.WebviewController()
3134    build() {
3135      Column() {
3136        Web({ src:$rawfile('index.html'), controller:this.controller })
3137        .geolocationAccess(true)
3138        .onGeolocationShow((event) => {
3139          if (event) {
3140            AlertDialog.show({
3141              title: 'title',
3142              message: 'text',
3143              confirm: {
3144                value: 'onConfirm',
3145                action: () => {
3146                  event.geolocation.invoke(event.origin, true, true)
3147                }
3148              },
3149              cancel: () => {
3150                event.geolocation.invoke(event.origin, false, true)
3151              }
3152            })
3153          }
3154        })
3155      }
3156    }
3157  }
3158  ```
3159
3160  加载的html文件。
3161  ```html
3162  <!DOCTYPE html>
3163  <html>
3164  <body>
3165  <p id="locationInfo">位置信息</p>
3166  <button onclick="getLocation()">获取位置</button>
3167  <script>
3168  var locationInfo=document.getElementById("locationInfo");
3169  function getLocation(){
3170    if (navigator.geolocation) {
3171      <!-- 前端页面访问设备地理位置 -->
3172      navigator.geolocation.getCurrentPosition(showPosition);
3173    }
3174  }
3175  function showPosition(position){
3176    locationInfo.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
3177  }
3178  </script>
3179  </body>
3180  </html>
3181  ```
3182
3183### onGeolocationHide
3184
3185onGeolocationHide(callback: () => void)
3186
3187通知用户先前被调用[onGeolocationShow](#ongeolocationshow)时收到地理位置信息获取请求已被取消。
3188
3189**参数:**
3190
3191| 参数名      | 参数类型       | 参数描述                 |
3192| -------- | ---------- | -------------------- |
3193| callback | () => void | 地理位置信息获取请求已被取消的回调函数。 |
3194
3195**示例:**
3196
3197  ```ts
3198  // xxx.ets
3199  import web_webview from '@ohos.web.webview'
3200
3201  @Entry
3202  @Component
3203  struct WebComponent {
3204    controller: web_webview.WebviewController = new web_webview.WebviewController()
3205    build() {
3206      Column() {
3207        Web({ src:'www.example.com', controller:this.controller })
3208        .geolocationAccess(true)
3209        .onGeolocationHide(() => {
3210          console.log("onGeolocationHide...")
3211        })
3212      }
3213    }
3214  }
3215  ```
3216
3217### onFullScreenEnter<sup>9+</sup>
3218
3219onFullScreenEnter(callback: (event: { handler: FullScreenExitHandler }) => void)
3220
3221通知开发者web组件进入全屏模式。
3222
3223**参数:**
3224
3225| 参数名     | 参数类型                                     | 参数描述           |
3226| ------- | ---------------------------------------- | -------------- |
3227| handler | [FullScreenExitHandler](#fullscreenexithandler9) | 用于退出全屏模式的函数句柄。 |
3228
3229**示例:**
3230
3231  ```ts
3232  // xxx.ets
3233  import web_webview from '@ohos.web.webview'
3234
3235  @Entry
3236  @Component
3237  struct WebComponent {
3238    controller: web_webview.WebviewController = new web_webview.WebviewController()
3239    handler: FullScreenExitHandler | null = null
3240    build() {
3241      Column() {
3242        Web({ src:'www.example.com', controller:this.controller })
3243        .onFullScreenEnter((event) => {
3244          console.log("onFullScreenEnter...")
3245          this.handler = event.handler
3246        })
3247      }
3248    }
3249  }
3250  ```
3251
3252### onFullScreenExit<sup>9+</sup>
3253
3254onFullScreenExit(callback: () => void)
3255
3256通知开发者web组件退出全屏模式。
3257
3258**参数:**
3259
3260| 参数名      | 参数类型       | 参数描述          |
3261| -------- | ---------- | ------------- |
3262| callback | () => void | 退出全屏模式时的回调函数。 |
3263
3264**示例:**
3265
3266  ```ts
3267  // xxx.ets
3268  import web_webview from '@ohos.web.webview'
3269
3270  @Entry
3271  @Component
3272  struct WebComponent {
3273    controller: web_webview.WebviewController = new web_webview.WebviewController()
3274    handler: FullScreenExitHandler | null = null
3275    build() {
3276      Column() {
3277        Web({ src:'www.example.com', controller:this.controller })
3278        .onFullScreenExit(() => {
3279          console.log("onFullScreenExit...")
3280          if (this.handler) {
3281            this.handler.exitFullScreen()
3282          }
3283        })
3284        .onFullScreenEnter((event) => {
3285          this.handler = event.handler
3286        })
3287      }
3288    }
3289  }
3290  ```
3291
3292### onWindowNew<sup>9+</sup>
3293
3294onWindowNew(callback: (event: {isAlert: boolean, isUserTrigger: boolean, targetUrl: string, handler: ControllerHandler}) => void)
3295
3296使能multiWindowAccess情况下,通知用户新建窗口请求。
3297若不调用event.handler.setWebController接口,会造成render进程阻塞。
3298如果不需要打开新窗口,在调用event.handler.setWebController接口时须设置成null。
3299
3300**参数:**
3301
3302| 参数名           | 参数类型                                     | 参数描述                          |
3303| ------------- | ---------------------------------------- | ----------------------------- |
3304| isAlert       | boolean                                  | true代表请求创建对话框,false代表新标签页。    |
3305| isUserTrigger | boolean                                  | true代表用户触发,false代表非用户触发。      |
3306| targetUrl     | string                                   | 目标url。                        |
3307| handler       | [ControllerHandler](#controllerhandler9) | 用于设置新建窗口的WebviewController实例。 |
3308
3309**示例:**
3310
3311  ```ts
3312  // xxx.ets
3313  import web_webview from '@ohos.web.webview'
3314
3315  //在同一page页有两个web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
3316  @CustomDialog
3317  struct NewWebViewComp {
3318  controller?: CustomDialogController
3319  webviewController1: web_webview.WebviewController = new web_webview.WebviewController()
3320  build() {
3321      Column() {
3322        Web({ src: "", controller: this.webviewController1 })
3323          .javaScriptAccess(true)
3324          .multiWindowAccess(false)
3325          .onWindowExit(()=> {
3326            console.info("NewWebViewComp onWindowExit")
3327            if (this.controller) {
3328              this.controller.close()
3329            }
3330          })
3331        }
3332    }
3333  }
3334
3335  @Entry
3336  @Component
3337  struct WebComponent {
3338    controller: web_webview.WebviewController = new web_webview.WebviewController()
3339    dialogController: CustomDialogController | null = null
3340    build() {
3341      Column() {
3342        Web({ src: 'www.example.com', controller: this.controller })
3343          .javaScriptAccess(true)
3344          //需要使能multiWindowAccess
3345          .multiWindowAccess(true)
3346          .allowWindowOpenMethod(true)
3347          .onWindowNew((event) => {
3348            if (this.dialogController) {
3349              this.dialogController.close()
3350            }
3351            let popController:web_webview.WebviewController = new web_webview.WebviewController()
3352            this.dialogController = new CustomDialogController({
3353              builder: NewWebViewComp({webviewController1: popController})
3354            })
3355            this.dialogController.open()
3356            //将新窗口对应WebviewController返回给Web内核。
3357            //如果不需要打开新窗口请调用event.handler.setWebController接口设置成null。
3358            //若不调用event.handler.setWebController接口,会造成render进程阻塞。
3359            event.handler.setWebController(popController)
3360          })
3361      }
3362    }
3363  }
3364  ```
3365
3366### onWindowExit<sup>9+</sup>
3367
3368onWindowExit(callback: () => void)
3369
3370通知用户窗口关闭请求。
3371
3372**参数:**
3373
3374| 参数名      | 参数类型       | 参数描述         |
3375| -------- | ---------- | ------------ |
3376| callback | () => void | 窗口请求关闭的回调函数。 |
3377
3378**示例:**
3379
3380  ```ts
3381  // xxx.ets
3382  import web_webview from '@ohos.web.webview'
3383
3384  @Entry
3385  @Component
3386  struct WebComponent {
3387    controller: web_webview.WebviewController = new web_webview.WebviewController()
3388    build() {
3389      Column() {
3390        Web({ src:'www.example.com', controller: this.controller })
3391        .onWindowExit(() => {
3392          console.log("onWindowExit...")
3393        })
3394      }
3395    }
3396  }
3397  ```
3398
3399### onSearchResultReceive<sup>9+</sup>
3400
3401onSearchResultReceive(callback: (event?: {activeMatchOrdinal: number, numberOfMatches: number, isDoneCounting: boolean}) => void): WebAttribute
3402
3403回调通知调用方网页页内查找的结果。
3404
3405**参数:**
3406
3407| 参数名                | 参数类型    | 参数描述                                     |
3408| ------------------ | ------- | ---------------------------------------- |
3409| activeMatchOrdinal | number  | 当前匹配的查找项的序号(从0开始)。                       |
3410| numberOfMatches    | number  | 所有匹配到的关键词的个数。                            |
3411| isDoneCounting     | boolean | 当次页内查找操作是否结束。该方法可能会回调多次,直到isDoneCounting为true为止。 |
3412
3413**示例:**
3414
3415  ```ts
3416  // xxx.ets
3417  import web_webview from '@ohos.web.webview'
3418
3419  @Entry
3420  @Component
3421  struct WebComponent {
3422    controller: web_webview.WebviewController = new web_webview.WebviewController()
3423
3424    build() {
3425      Column() {
3426        Web({ src: 'www.example.com', controller: this.controller })
3427     	  .onSearchResultReceive(ret => {
3428     	    if (ret) {
3429            console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
3430              "[total]" + ret.numberOfMatches + "[isDone]"+ ret.isDoneCounting)
3431     	    }
3432     	  })
3433      }
3434    }
3435  }
3436  ```
3437
3438### onDataResubmitted<sup>9+</sup>
3439
3440onDataResubmitted(callback: (event: {handler: DataResubmissionHandler}) => void)
3441
3442设置网页表单可以重新提交时触发的回调函数。
3443
3444**参数:**
3445
3446| 参数名     | 参数类型                                     | 参数描述        |
3447| ------- | ---------------------------------------- | ----------- |
3448| handler | [DataResubmissionHandler](#dataresubmissionhandler9) | 表单数据重新提交句柄。 |
3449
3450**示例:**
3451
3452  ```ts
3453  // xxx.ets
3454  import web_webview from '@ohos.web.webview'
3455  import business_error from '@ohos.base';
3456  @Entry
3457  @Component
3458  struct WebComponent {
3459    controller: web_webview.WebviewController = new web_webview.WebviewController()
3460    build() {
3461      Column() {
3462        //在网页中点击提交之后,点击refresh按钮可以重新提交时的触发函数。
3463        Button('refresh')
3464        .onClick(() => {
3465          try {
3466            this.controller.refresh();
3467          } catch (error) {
3468            let e: business_error.BusinessError = error as business_error.BusinessError;
3469            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
3470          }
3471        })
3472        Web({ src:$rawfile('index.html'), controller: this.controller })
3473         .onDataResubmitted((event) => {
3474          console.log('onDataResubmitted')
3475          event.handler.resend();
3476        })
3477      }
3478    }
3479  }
3480  ```
3481
3482 加载的html文件。
3483 ```html
3484  <!-- index.html -->
3485  <!DOCTYPE html>
3486  <html>
3487  <head>
3488    <meta charset="utf-8">
3489  </head>
3490  <body>
3491    <form action="http://httpbin.org/post" method="post">
3492      <input type="text" name="username">
3493      <input type="submit" name="提交">
3494    </form>
3495  </body>
3496  </html>
3497 ```
3498
3499### onPageVisible<sup>9+</sup>
3500
3501onPageVisible(callback: (event: {url: string}) => void)
3502
3503设置旧页面不再呈现,新页面即将可见时触发的回调函数。
3504
3505**参数:**
3506
3507| 参数名  | 参数类型   | 参数描述                       |
3508| ---- | ------ | -------------------------- |
3509| url  | string | 旧页面不再呈现,新页面即将可见时新页面的url地址。 |
3510
3511**示例:**
3512
3513  ```ts
3514  // xxx.ets
3515  import web_webview from '@ohos.web.webview'
3516  @Entry
3517  @Component
3518  struct WebComponent {
3519    controller: web_webview.WebviewController = new web_webview.WebviewController()
3520    build() {
3521      Column() {
3522        Web({ src:'www.example.com', controller: this.controller })
3523         .onPageVisible((event) => {
3524          console.log('onPageVisible url:' + event.url)
3525        })
3526      }
3527    }
3528  }
3529  ```
3530
3531### onInterceptKeyEvent<sup>9+</sup>
3532
3533onInterceptKeyEvent(callback: (event: KeyEvent) => boolean)
3534
3535设置键盘事件的回调函数,该回调在被Webview使用前触发。
3536
3537**参数:**
3538
3539| 参数名   | 参数类型                                     | 参数描述           |
3540| ----- | ---------------------------------------- | -------------- |
3541| event | [KeyEvent](ts-universal-events-key.md#keyevent对象说明) | 触发的KeyEvent事件。 |
3542
3543**返回值:**
3544
3545| 类型      | 说明                                       |
3546| ------- | ---------------------------------------- |
3547| boolean | 回调函数通过返回boolean类型值来决定是否继续将该KeyEvent传入Webview内核。 |
3548
3549**示例:**
3550
3551  ```ts
3552  // xxx.ets
3553  import web_webview from '@ohos.web.webview'
3554  @Entry
3555  @Component
3556  struct WebComponent {
3557    controller: web_webview.WebviewController = new web_webview.WebviewController()
3558    build() {
3559      Column() {
3560        Web({ src:'www.example.com', controller: this.controller })
3561         .onInterceptKeyEvent((event) => {
3562          if (event.keyCode == 2017 || event.keyCode == 2018) {
3563            console.info(`onInterceptKeyEvent get event.keyCode ${event.keyCode}`)
3564            return true;
3565          }
3566          return false;
3567        })
3568      }
3569    }
3570  }
3571  ```
3572
3573### onTouchIconUrlReceived<sup>9+</sup>
3574
3575onTouchIconUrlReceived(callback: (event: {url: string, precomposed: boolean}) => void)
3576
3577设置接收到apple-touch-icon url地址时的回调函数。
3578
3579**参数:**
3580
3581| 参数名         | 参数类型    | 参数描述                        |
3582| ----------- | ------- | --------------------------- |
3583| url         | string  | 接收到的apple-touch-icon url地址。 |
3584| precomposed | boolean | 对应apple-touch-icon是否为预合成。   |
3585
3586**示例:**
3587
3588  ```ts
3589  // xxx.ets
3590  import web_webview from '@ohos.web.webview'
3591  @Entry
3592  @Component
3593  struct WebComponent {
3594    controller: web_webview.WebviewController = new web_webview.WebviewController()
3595    build() {
3596      Column() {
3597        Web({ src:'www.baidu.com', controller: this.controller })
3598         .onTouchIconUrlReceived((event) => {
3599          console.log('onTouchIconUrlReceived:' + JSON.stringify(event))
3600        })
3601      }
3602    }
3603  }
3604  ```
3605
3606### onFaviconReceived<sup>9+</sup>
3607
3608onFaviconReceived(callback: (event: { favicon: PixelMap }) => void)
3609
3610设置应用为当前页面接收到新的favicon时的回调函数。
3611
3612**参数:**
3613
3614| 参数名     | 参数类型                                     | 参数描述                      |
3615| ------- | ---------------------------------------- | ------------------------- |
3616| favicon | [PixelMap](../apis/js-apis-image.md#pixelmap7) | 接收到的favicon图标的PixelMap对象。 |
3617
3618**示例:**
3619
3620  ```ts
3621  // xxx.ets
3622  import web_webview from '@ohos.web.webview'
3623  import image from "@ohos.multimedia.image"
3624  @Entry
3625  @Component
3626  struct WebComponent {
3627    controller: web_webview.WebviewController = new web_webview.WebviewController()
3628    @State icon: image.PixelMap | undefined = undefined;
3629    build() {
3630      Column() {
3631        Web({ src:'www.example.com', controller: this.controller })
3632         .onFaviconReceived((event) => {
3633          console.log('onFaviconReceived');
3634          this.icon = event.favicon;
3635        })
3636      }
3637    }
3638  }
3639  ```
3640
3641### onAudioStateChanged<sup>10+</sup>
3642
3643onAudioStateChanged(callback: (event: { playing: boolean }) => void)
3644
3645设置网页上的音频播放状态发生改变时的回调函数。
3646
3647**参数:**
3648
3649| 参数名     | 参数类型    | 参数描述                               |
3650| ------- | ------- | ---------------------------------- |
3651| playing | boolean | 当前页面的音频播放状态,true表示正在播放,false表示未播放。 |
3652
3653**示例:**
3654
3655  ```ts
3656  // xxx.ets
3657  import web_webview from '@ohos.web.webview'
3658  @Entry
3659  @Component
3660  struct WebComponent {
3661    controller: web_webview.WebviewController = new web_webview.WebviewController()
3662    @State playing: boolean = false
3663    build() {
3664      Column() {
3665        Web({ src:'www.example.com', controller: this.controller })
3666          .onAudioStateChanged(event => {
3667            this.playing = event.playing
3668            console.debug('onAudioStateChanged playing: ' + this.playing)
3669          })
3670      }
3671    }
3672  }
3673  ```
3674
3675### onFirstContentfulPaint<sup>10+</sup>
3676
3677onFirstContentfulPaint(callback: (event?: { navigationStartTick: number, firstContentfulPaintMs: number }) => void)
3678
3679设置网页首次内容绘制回调函数。
3680
3681**参数:**
3682
3683| 参数名                    | 参数类型   | 参数描述                              |
3684| ---------------------- | ------ | --------------------------------- |
3685| navigationStartTick    | number | navigation开始的时间,单位以微秒表示。          |
3686| firstContentfulPaintMs | number | 从navigation开始第一次绘制内容的时间,单位是以毫秒表示。 |
3687
3688**示例:**
3689
3690  ```ts
3691  // xxx.ets
3692  import web_webview from '@ohos.web.webview'
3693  @Entry
3694  @Component
3695  struct WebComponent {
3696    controller: web_webview.WebviewController = new web_webview.WebviewController()
3697
3698    build() {
3699      Column() {
3700        Web({ src:'www.example.com', controller: this.controller })
3701          .onFirstContentfulPaint(event => {
3702            if (event) {
3703              console.log("onFirstContentfulPaint:" + "[navigationStartTick]:" +
3704              event.navigationStartTick + ", [firstContentfulPaintMs]:" +
3705              event.firstContentfulPaintMs)
3706            }
3707          })
3708      }
3709    }
3710  }
3711  ```
3712
3713### onLoadIntercept<sup>10+</sup>
3714
3715onLoadIntercept(callback: (event: { data: WebResourceRequest }) => boolean)
3716
3717当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。
3718
3719**参数:**
3720
3721| 参数名     | 参数类型                                     | 参数描述        |
3722| ------- | ---------------------------------------- | ----------- |
3723| data | [WebResourceRequest](#webresourcerequest) | url请求的相关信息。 |
3724
3725**返回值:**
3726
3727| 类型      | 说明                       |
3728| ------- | ------------------------ |
3729| boolean | 返回true表示阻止此次加载,否则允许此次加载。 |
3730
3731**示例:**
3732
3733  ```ts
3734  // xxx.ets
3735  import web_webview from '@ohos.web.webview'
3736
3737  @Entry
3738  @Component
3739  struct WebComponent {
3740    controller: web_webview.WebviewController = new web_webview.WebviewController()
3741
3742    build() {
3743      Column() {
3744        Web({ src: 'www.example.com', controller: this.controller })
3745          .onLoadIntercept((event) => {
3746            console.log('url:' + event.data.getRequestUrl())
3747            console.log('isMainFrame:' + event.data.isMainFrame())
3748            console.log('isRedirect:' + event.data.isRedirect())
3749            console.log('isRequestGesture:' + event.data.isRequestGesture())
3750            return true
3751          })
3752      }
3753    }
3754  }
3755  ```
3756
3757### onRequestSelected
3758
3759onRequestSelected(callback: () => void)
3760
3761当Web组件获得焦点时触发该回调。
3762
3763**示例:**
3764
3765  ```ts
3766  // xxx.ets
3767  import web_webview from '@ohos.web.webview'
3768
3769  @Entry
3770  @Component
3771  struct WebComponent {
3772    controller: web_webview.WebviewController = new web_webview.WebviewController()
3773
3774    build() {
3775      Column() {
3776        Web({ src: 'www.example.com', controller: this.controller })
3777          .onRequestSelected(() => {
3778            console.log('onRequestSelected')
3779          })
3780      }
3781    }
3782  }
3783  ```
3784### onScreenCaptureRequest<sup>10+</sup>
3785
3786onScreenCaptureRequest(callback: (event?: { handler: ScreenCaptureHandler }) => void)
3787
3788通知收到屏幕捕获请求。
3789
3790**参数:**
3791
3792| 参数名     | 参数类型                                     | 参数描述           |
3793| ------- | ---------------------------------------- | -------------- |
3794| handler | [ScreenCaptureHandler](#screencapturehandler10) | 通知Web组件用户操作行为。 |
3795
3796**示例:**
3797
3798  ```ts
3799  // xxx.ets
3800  import web_webview from '@ohos.web.webview'
3801
3802  @Entry
3803  @Component
3804  struct WebComponent {
3805    controller: web_webview.WebviewController = new web_webview.WebviewController()
3806    build() {
3807      Column() {
3808        Web({ src: 'www.example.com', controller: this.controller })
3809          .onScreenCaptureRequest((event) => {
3810            if (event) {
3811              AlertDialog.show({
3812                title: 'title: ' + event.handler.getOrigin(),
3813                message: 'text',
3814                primaryButton: {
3815                  value: 'deny',
3816                  action: () => {
3817                    event.handler.deny()
3818                  }
3819                },
3820                secondaryButton: {
3821                  value: 'onConfirm',
3822                  action: () => {
3823                    event.handler.grant({ captureMode: WebCaptureMode.HOME_SCREEN })
3824                  }
3825                },
3826                cancel: () => {
3827                  event.handler.deny()
3828                }
3829              })
3830            }
3831          })
3832      }
3833    }
3834  }
3835  ```
3836
3837### onOverScroll<sup>10+</sup>
3838
3839onOverScroll(callback: (event: {xOffset: number, yOffset: number}) => void)
3840
3841通知网页过滚动偏移量。
3842
3843**参数:**
3844
3845| 参数名     | 参数类型   | 参数描述                |
3846| ------- | ------ | ------------------- |
3847| xOffset | number | 以网页最左端为基准,水平过滚动偏移量。 |
3848| yOffset | number | 以网页最上端为基准,竖直过滚动偏移量。 |
3849
3850**示例:**
3851
3852  ```ts
3853  // xxx.ets
3854  import web_webview from '@ohos.web.webview'
3855
3856  @Entry
3857  @Component
3858  struct WebComponent {
3859    controller: web_webview.WebviewController = new web_webview.WebviewController()
3860    build() {
3861      Column() {
3862        Web({ src: 'www.example.com', controller: this.controller })
3863        .onOverScroll((event) => {
3864            console.info("x = " + event.xOffset)
3865            console.info("y = " + event.yOffset)
3866        })
3867      }
3868    }
3869  }
3870  ```
3871
3872### onControllerAttached<sup>10+</sup>
3873
3874onControllerAttached(callback: () => void)
3875
3876当Controller成功绑定到Web组件时触发该回调,并且该Controller必须为WebviewController,
3877因该回调调用时网页还未加载,无法在回调中使用有关操作网页的接口,例如[zoomIn](../apis/js-apis-webview.md#zoomin)、[zoomOut](../apis/js-apis-webview.md#zoomout)等,可以使用[loadUrl](../apis/js-apis-webview.md#loadurl)、[getWebId](../apis/js-apis-webview.md#getwebid)等操作网页不相关的接口。
3878
3879**示例:**
3880
3881在该回调中使用loadUrl加载网页
3882  ```ts
3883  // xxx.ets
3884  import web_webview from '@ohos.web.webview'
3885
3886  @Entry
3887  @Component
3888  struct WebComponent {
3889    controller: web_webview.WebviewController = new web_webview.WebviewController()
3890
3891    build() {
3892      Column() {
3893        Web({ src: '', controller: this.controller })
3894          .onControllerAttached(() => {
3895            this.controller.loadUrl($rawfile("index.html"));
3896          })
3897      }
3898    }
3899  }
3900  ```
3901在该回调中使用getWebId
3902  ```ts
3903  // xxx.ets
3904  import web_webview from '@ohos.web.webview'
3905  import { BusinessError } from '@ohos.base';
3906
3907  @Entry
3908  @Component
3909  struct WebComponent {
3910    controller: web_webview.WebviewController = new web_webview.WebviewController()
3911
3912    build() {
3913      Column() {
3914        Web({ src: $rawfile("index.html"), controller: this.controller })
3915          .onControllerAttached(() => {
3916            try {
3917              let id = this.controller.getWebId();
3918              console.log("id: " + id);
3919            } catch (error) {
3920              let code = (error as BusinessError).code;
3921              let message = (error as BusinessError).message;
3922              console.error(`ErrorCode: ${code},  Message: ${message}`);
3923            }
3924          })
3925      }
3926    }
3927  }
3928  ```
3929  加载的html文件。
3930  ```html
3931  <!-- index.html -->
3932  <!DOCTYPE html>
3933  <html>
3934      <body>
3935          <p>Hello World</p>
3936      </body>
3937  </html>
3938  ```
3939## ConsoleMessage
3940
3941Web组件获取控制台信息对象。示例代码参考[onConsole事件](#onconsole)。
3942
3943### getLineNumber
3944
3945getLineNumber(): number
3946
3947获取ConsoleMessage的行数。
3948
3949**返回值:**
3950
3951| 类型     | 说明                   |
3952| ------ | -------------------- |
3953| number | 返回ConsoleMessage的行数。 |
3954
3955### getMessage
3956
3957getMessage(): string
3958
3959获取ConsoleMessage的日志信息。
3960
3961**返回值:**
3962
3963| 类型     | 说明                     |
3964| ------ | ---------------------- |
3965| string | 返回ConsoleMessage的日志信息。 |
3966
3967### getMessageLevel
3968
3969getMessageLevel(): MessageLevel
3970
3971获取ConsoleMessage的信息级别。
3972
3973**返回值:**
3974
3975| 类型                                | 说明                     |
3976| --------------------------------- | ---------------------- |
3977| [MessageLevel](#messagelevel枚举说明) | 返回ConsoleMessage的信息级别。 |
3978
3979### getSourceId
3980
3981getSourceId(): string
3982
3983获取网页源文件路径和名字。
3984
3985**返回值:**
3986
3987| 类型     | 说明            |
3988| ------ | ------------- |
3989| string | 返回网页源文件路径和名字。 |
3990
3991## JsResult
3992
3993Web组件返回的弹窗确认或弹窗取消功能对象。示例代码参考[onAlert事件](#onalert)。
3994
3995### handleCancel
3996
3997handleCancel(): void
3998
3999通知Web组件用户取消弹窗操作。
4000
4001### handleConfirm
4002
4003handleConfirm(): void
4004
4005通知Web组件用户确认弹窗操作。
4006
4007### handlePromptConfirm<sup>9+</sup>
4008
4009handlePromptConfirm(result: string): void
4010
4011通知Web组件用户确认弹窗操作及对话框内容。
4012
4013**参数:**
4014
4015| 参数名    | 参数类型   | 必填   | 默认值  | 参数描述        |
4016| ------ | ------ | ---- | ---- | ----------- |
4017| result | string | 是    | -    | 用户输入的对话框内容。 |
4018
4019## FullScreenExitHandler<sup>9+</sup>
4020
4021通知开发者Web组件退出全屏。示例代码参考[onFullScreenEnter事件](#onfullscreenenter9)。
4022
4023### constructor<sup>9+</sup>
4024
4025constructor()
4026
4027### exitFullScreen<sup>9+</sup>
4028
4029exitFullScreen(): void
4030
4031通知开发者Web组件退出全屏。
4032
4033## ControllerHandler<sup>9+</sup>
4034
4035设置用户新建web组件的的WebviewController对象。示例代码参考[onWindowNew事件](#onwindownew9)。
4036
4037### setWebController<sup>9+</sup>
4038
4039setWebController(controller: WebviewController): void
4040
4041设置WebviewController对象,如果不需要打开新窗口请设置为null。
4042
4043**参数:**
4044
4045| 参数名        | 参数类型                                     | 必填   | 默认值  | 参数描述                                     |
4046| ---------- | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
4047| controller | [WebviewController](../apis/js-apis-webview.md#webviewcontroller) | 是    | -    | 新建web组件的WebviewController对象,如果不需要打开新窗口请设置为null。 |
4048
4049## WebResourceError
4050
4051web组件资源管理错误信息对象。示例代码参考[onErrorReceive事件](#onerrorreceive)。
4052
4053### getErrorCode
4054
4055getErrorCode(): number
4056
4057获取加载资源的错误码。
4058
4059**返回值:**
4060
4061| 类型     | 说明          |
4062| ------ | ----------- |
4063| number | 返回加载资源的错误码。 |
4064
4065### getErrorInfo
4066
4067getErrorInfo(): string
4068
4069获取加载资源的错误信息。
4070
4071**返回值:**
4072
4073| 类型     | 说明           |
4074| ------ | ------------ |
4075| string | 返回加载资源的错误信息。 |
4076
4077## WebResourceRequest
4078
4079web组件获取资源请求对象。示例代码参考[onErrorReceive事件](#onerrorreceive)。
4080
4081### getRequestHeader
4082
4083getRequestHeader(): Array\<Header\>
4084
4085获取资源请求头信息。
4086
4087**返回值:**
4088
4089| 类型                         | 说明         |
4090| -------------------------- | ---------- |
4091| Array\<[Header](#header)\> | 返回资源请求头信息。 |
4092
4093### getRequestUrl
4094
4095getRequestUrl(): string
4096
4097获取资源请求的URL信息。
4098
4099**返回值:**
4100
4101| 类型     | 说明            |
4102| ------ | ------------- |
4103| string | 返回资源请求的URL信息。 |
4104
4105### isMainFrame
4106
4107isMainFrame(): boolean
4108
4109判断资源请求是否为主frame。
4110
4111**返回值:**
4112
4113| 类型      | 说明               |
4114| ------- | ---------------- |
4115| boolean | 返回资源请求是否为主frame。 |
4116
4117### isRedirect
4118
4119isRedirect(): boolean
4120
4121判断资源请求是否被服务端重定向。
4122
4123**返回值:**
4124
4125| 类型      | 说明               |
4126| ------- | ---------------- |
4127| boolean | 返回资源请求是否被服务端重定向。 |
4128
4129### isRequestGesture
4130
4131isRequestGesture(): boolean
4132
4133获取资源请求是否与手势(如点击)相关联。
4134
4135**返回值:**
4136
4137| 类型      | 说明                   |
4138| ------- | -------------------- |
4139| boolean | 返回资源请求是否与手势(如点击)相关联。 |
4140
4141### getRequestMethod<sup>9+</sup>
4142
4143getRequestMethod(): string
4144
4145获取请求方法。
4146
4147**返回值:**
4148
4149| 类型     | 说明      |
4150| ------ | ------- |
4151| string | 返回请求方法。 |
4152
4153## Header
4154
4155Web组件返回的请求/响应头对象。
4156
4157| 名称          | 类型     | 描述            |
4158| ----------- | ------ | ------------- |
4159| headerKey   | string | 请求/响应头的key。   |
4160| headerValue | string | 请求/响应头的value。 |
4161
4162## WebResourceResponse
4163
4164web组件资源响应对象。示例代码参考[onHttpErrorReceive事件](#onhttperrorreceive)。
4165
4166### getReasonMessage
4167
4168getReasonMessage(): string
4169
4170获取资源响应的状态码描述。
4171
4172**返回值:**
4173
4174| 类型     | 说明            |
4175| ------ | ------------- |
4176| string | 返回资源响应的状态码描述。 |
4177
4178### getResponseCode
4179
4180getResponseCode(): number
4181
4182获取资源响应的状态码。
4183
4184**返回值:**
4185
4186| 类型     | 说明          |
4187| ------ | ----------- |
4188| number | 返回资源响应的状态码。 |
4189
4190### getResponseData
4191
4192getResponseData(): string
4193
4194获取资源响应数据。
4195
4196**返回值:**
4197
4198| 类型     | 说明        |
4199| ------ | --------- |
4200| string | 返回资源响应数据。 |
4201
4202### getResponseEncoding
4203
4204getResponseEncoding(): string
4205
4206获取资源响应的编码。
4207
4208**返回值:**
4209
4210| 类型     | 说明         |
4211| ------ | ---------- |
4212| string | 返回资源响应的编码。 |
4213
4214### getResponseHeader
4215
4216getResponseHeader() : Array\<Header\>
4217
4218获取资源响应头。
4219
4220**返回值:**
4221
4222| 类型                         | 说明       |
4223| -------------------------- | -------- |
4224| Array\<[Header](#header)\> | 返回资源响应头。 |
4225
4226### getResponseMimeType
4227
4228getResponseMimeType(): string
4229
4230获取资源响应的媒体(MIME)类型。
4231
4232**返回值:**
4233
4234| 类型     | 说明                 |
4235| ------ | ------------------ |
4236| string | 返回资源响应的媒体(MIME)类型。 |
4237
4238### setResponseData<sup>9+</sup>
4239
4240setResponseData(data: string | number \| Resource)
4241
4242设置资源响应数据。
4243
4244**参数:**
4245
4246| 参数名  | 参数类型                                     | 必填   | 默认值  | 参数描述                                     |
4247| ---- | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
4248| data | string \| number \| [Resource](ts-types.md)<sup>10+</sup> | 是    | -    | 要设置的资源响应数据。string表示HTML格式的字符串。number表示文件句柄, 此句柄由系统的Web组件负责关闭。 Resource表示应用rawfile目录下文件资源。 |
4249
4250### setResponseEncoding<sup>9+</sup>
4251
4252setResponseEncoding(encoding: string)
4253
4254设置资源响应的编码。
4255
4256**参数:**
4257
4258| 参数名      | 参数类型   | 必填   | 默认值  | 参数描述         |
4259| -------- | ------ | ---- | ---- | ------------ |
4260| encoding | string | 是    | -    | 要设置的资源响应的编码。 |
4261
4262### setResponseMimeType<sup>9+</sup>
4263
4264setResponseMimeType(mimeType: string)
4265
4266设置资源响应的媒体(MIME)类型。
4267
4268**参数:**
4269
4270| 参数名      | 参数类型   | 必填   | 默认值  | 参数描述                 |
4271| -------- | ------ | ---- | ---- | -------------------- |
4272| mimeType | string | 是    | -    | 要设置的资源响应的媒体(MIME)类型。 |
4273
4274### setReasonMessage<sup>9+</sup>
4275
4276setReasonMessage(reason: string)
4277
4278设置资源响应的状态码描述。
4279
4280**参数:**
4281
4282| 参数名    | 参数类型   | 必填   | 默认值  | 参数描述            |
4283| ------ | ------ | ---- | ---- | --------------- |
4284| reason | string | 是    | -    | 要设置的资源响应的状态码描述。 |
4285
4286### setResponseHeader<sup>9+</sup>
4287
4288setResponseHeader(header: Array\<Header\>)
4289
4290设置资源响应头。
4291
4292**参数:**
4293
4294| 参数名    | 参数类型                       | 必填   | 默认值  | 参数描述       |
4295| ------ | -------------------------- | ---- | ---- | ---------- |
4296| header | Array\<[Header](#header)\> | 是    | -    | 要设置的资源响应头。 |
4297
4298### setResponseCode<sup>9+</sup>
4299
4300setResponseCode(code: number)
4301
4302设置资源响应的状态码。
4303
4304**参数:**
4305
4306| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述          |
4307| ---- | ------ | ---- | ---- | ------------- |
4308| code | number | 是    | -    | 要设置的资源响应的状态码。 |
4309
4310### setResponseIsReady<sup>9+</sup>
4311
4312setResponseIsReady(IsReady: boolean)
4313
4314设置资源响应数据是否已经就绪。
4315
4316**参数:**
4317
4318| 参数名     | 参数类型    | 必填   | 默认值  | 参数描述          |
4319| ------- | ------- | ---- | ---- | ------------- |
4320| IsReady | boolean | 是    | true | 资源响应数据是否已经就绪。 |
4321
4322## FileSelectorResult<sup>9+</sup>
4323
4324通知Web组件的文件选择结果。示例代码参考[onShowFileSelector事件](#onshowfileselector9)。
4325
4326### handleFileList<sup>9+</sup>
4327
4328handleFileList(fileList: Array\<string\>): void
4329
4330通知Web组件进行文件选择操作。
4331
4332**参数:**
4333
4334| 参数名      | 参数类型            | 必填   | 默认值  | 参数描述         |
4335| -------- | --------------- | ---- | ---- | ------------ |
4336| fileList | Array\<string\> | 是    | -    | 需要进行操作的文件列表。 |
4337
4338## FileSelectorParam<sup>9+</sup>
4339
4340web组件获取文件对象。示例代码参考[onShowFileSelector事件](#onshowfileselector9)。
4341
4342### getTitle<sup>9+</sup>
4343
4344getTitle(): string
4345
4346获取文件选择器标题。
4347
4348**返回值:**
4349
4350| 类型     | 说明         |
4351| ------ | ---------- |
4352| string | 返回文件选择器标题。 |
4353
4354### getMode<sup>9+</sup>
4355
4356getMode(): FileSelectorMode
4357
4358获取文件选择器的模式。
4359
4360**返回值:**
4361
4362| 类型                                       | 说明          |
4363| ---------------------------------------- | ----------- |
4364| [FileSelectorMode](#fileselectormode9枚举说明) | 返回文件选择器的模式。 |
4365
4366### getAcceptType<sup>9+</sup>
4367
4368getAcceptType(): Array\<string\>
4369
4370获取文件过滤类型。
4371
4372**返回值:**
4373
4374| 类型              | 说明        |
4375| --------------- | --------- |
4376| Array\<string\> | 返回文件过滤类型。 |
4377
4378### isCapture<sup>9+</sup>
4379
4380isCapture(): boolean
4381
4382获取是否调用多媒体能力。
4383
4384**返回值:**
4385
4386| 类型      | 说明           |
4387| ------- | ------------ |
4388| boolean | 返回是否调用多媒体能力。 |
4389
4390## HttpAuthHandler<sup>9+</sup>
4391
4392Web组件返回的http auth认证请求确认或取消和使用缓存密码认证功能对象。示例代码参考[onHttpAuthRequest事件](#onhttpauthrequest9)。
4393
4394### cancel<sup>9+</sup>
4395
4396cancel(): void
4397
4398通知Web组件用户取消HTTP认证操作。
4399
4400### confirm<sup>9+</sup>
4401
4402confirm(userName: string, password: string): boolean
4403
4404使用用户名和密码进行HTTP认证操作。
4405
4406**参数:**
4407
4408| 参数名      | 参数类型   | 必填   | 默认值  | 参数描述       |
4409| -------- | ------ | ---- | ---- | ---------- |
4410| userName | string | 是    | -    | HTTP认证用户名。 |
4411| password      | string | 是    | -    | HTTP认证密码。  |
4412
4413**返回值:**
4414
4415| 类型      | 说明                    |
4416| ------- | --------------------- |
4417| boolean | 认证成功返回true,失败返回false。 |
4418
4419### isHttpAuthInfoSaved<sup>9+</sup>
4420
4421isHttpAuthInfoSaved(): boolean
4422
4423通知Web组件用户使用服务器缓存的帐号密码认证。
4424
4425**返回值:**
4426
4427| 类型      | 说明                        |
4428| ------- | ------------------------- |
4429| boolean | 存在密码认证成功返回true,其他返回false。 |
4430
4431## SslErrorHandler<sup>9+</sup>
4432
4433Web组件返回的SSL错误通知事件用户处理功能对象。示例代码参考[onSslErrorEventReceive事件](#onsslerroreventreceive9)。
4434
4435### handleCancel<sup>9+</sup>
4436
4437handleCancel(): void
4438
4439通知Web组件取消此请求。
4440
4441### handleConfirm<sup>9+</sup>
4442
4443handleConfirm(): void
4444
4445通知Web组件继续使用SSL证书。
4446
4447## ClientAuthenticationHandler<sup>9+</sup>
4448
4449Web组件返回的SSL客户端证书请求事件用户处理功能对象。示例代码参考[onClientAuthenticationRequest事件](#onclientauthenticationrequest9)。
4450
4451### confirm<sup>9+</sup>
4452
4453confirm(priKeyFile : string, certChainFile : string): void
4454
4455通知Web组件使用指定的私钥和客户端证书链。
4456
4457**参数:**
4458
4459| 参数名           | 参数类型   | 必填   | 参数描述               |
4460| ------------- | ------ | ---- | ------------------ |
4461| priKeyFile    | string | 是    | 存放私钥的文件,包含路径和文件名。  |
4462| certChainFile | string | 是    | 存放证书链的文件,包含路径和文件名。 |
4463
4464### confirm<sup>10+</sup>
4465
4466confirm(authUri : string): void
4467
4468**需要权限:** ohos.permission.ACCESS_CERT_MANAGER
4469
4470通知Web组件使用指定的凭据(从证书管理模块获得)。
4471
4472**参数:**
4473
4474| 参数名     | 参数类型   | 必填   | 参数描述    |
4475| ------- | ------ | ---- | ------- |
4476| authUri | string | 是    | 凭据的关键值。 |
4477
4478### cancel<sup>9+</sup>
4479
4480cancel(): void
4481
4482通知Web组件取消相同host和port服务器发送的客户端证书请求事件。同时,相同host和port服务器的请求,不重复上报该事件。
4483
4484### ignore<sup>9+</sup>
4485
4486ignore(): void
4487
4488通知Web组件忽略本次请求。
4489
4490## PermissionRequest<sup>9+</sup>
4491
4492Web组件返回授权或拒绝权限功能的对象。示例代码参考[onPermissionRequest事件](#onpermissionrequest9)。
4493
4494### deny<sup>9+</sup>
4495
4496deny(): void
4497
4498拒绝网页所请求的权限。
4499
4500### getOrigin<sup>9+</sup>
4501
4502getOrigin(): string
4503
4504获取网页来源。
4505
4506**返回值:**
4507
4508| 类型     | 说明           |
4509| ------ | ------------ |
4510| string | 当前请求权限网页的来源。 |
4511
4512### getAccessibleResource<sup>9+</sup>
4513
4514getAccessibleResource(): Array\<string\>
4515
4516获取网页所请求的权限资源列表,资源列表类型参考[ProtectedResourceType](#protectedresourcetype9枚举说明)。
4517
4518**返回值:**
4519
4520| 类型              | 说明            |
4521| --------------- | ------------- |
4522| Array\<string\> | 网页所请求的权限资源列表。 |
4523
4524### grant<sup>9+</sup>
4525
4526grant(resources: Array\<string\>): void
4527
4528对网页访问的给定权限进行授权。
4529
4530**参数:**
4531
4532| 参数名       | 参数类型            | 必填   | 默认值  | 参数描述            |
4533| --------- | --------------- | ---- | ---- | --------------- |
4534| resources | Array\<string\> | 是    | -    | 授予网页请求的权限的资源列表。 |
4535
4536## ScreenCaptureHandler<sup>10+</sup>
4537
4538Web组件返回授权或拒绝屏幕捕获功能的对象。示例代码参考[onScreenCaptureRequest事件](#onscreencapturerequest10)。
4539
4540### deny<sup>10+</sup>
4541
4542deny(): void
4543
4544拒绝网页所请求的屏幕捕获操作。
4545
4546### getOrigin<sup>10+</sup>
4547
4548getOrigin(): string
4549
4550获取网页来源。
4551
4552**返回值:**
4553
4554| 类型     | 说明           |
4555| ------ | ------------ |
4556| string | 当前请求权限网页的来源。 |
4557
4558### grant<sup>10+</sup>
4559
4560grant(config: ScreenCaptureConfig): void
4561
4562**需要权限:** ohos.permission.MICROPHONEohos.permission.CAPTURE_SCREEN
4563
4564对网页访问的屏幕捕获操作进行授权。
4565
4566**参数:**
4567
4568| 参数名    | 参数类型                                     | 必填   | 默认值  | 参数描述    |
4569| ------ | ---------------------------------------- | ---- | ---- | ------- |
4570| config | [ScreenCaptureConfig](#screencaptureconfig10) | 是    | -    | 屏幕捕获配置。 |
4571
4572## ContextMenuSourceType<sup>9+</sup>枚举说明
4573
4574| 名称       | 值 | 描述         |
4575| --------- | -- |------------ |
4576| None      | 0 | 其他事件来源。 |
4577| Mouse     | 1 | 鼠标事件。   |
4578| LongPress | 2 | 长按事件。   |
4579
4580## ContextMenuMediaType<sup>9+</sup>枚举说明
4581
4582| 名称    | 值 | 描述            |
4583| ----- | -- | ------------- |
4584| None  | 0 | 非特殊媒体或其他媒体类型。 |
4585| Image | 1 | 图片。           |
4586
4587## ContextMenuInputFieldType<sup>9+</sup>枚举说明
4588
4589| 名称        | 值 | 描述                          |
4590| --------- | -- | --------------------------- |
4591| None      | 0 | 非输入框。                       |
4592| PlainText | 1 | 纯文本类型,包括text、search、email等。 |
4593| Password  | 2 | 密码类型。                       |
4594| Number    | 3 | 数字类型。                       |
4595| Telephone | 4 | 电话号码类型。                     |
4596| Other     | 5 | 其他类型。                       |
4597
4598## ContextMenuEditStateFlags<sup>9+</sup>枚举说明
4599
4600| 名称            | 值 | 描述     |
4601| -------------- | -- | -------- |
4602| NONE           | 0 | 不可编辑。 |
4603| CAN_CUT        | 1 | 支持剪切。 |
4604| CAN_COPY       | 2 | 支持拷贝。 |
4605| CAN_PASTE      | 4 | 支持粘贴。 |
4606| CAN_SELECT_ALL | 8 | 支持全选。 |
4607
4608## WebContextMenuParam<sup>9+</sup>
4609
4610实现长按页面元素或鼠标右键弹出来的菜单信息。示例代码参考[onContextMenuShow事件](#oncontextmenushow9)。
4611
4612### x<sup>9+</sup>
4613
4614x(): number
4615
4616弹出菜单的x坐标。
4617
4618**返回值:**
4619
4620| 类型     | 说明                 |
4621| ------ | ------------------ |
4622| number | 显示正常返回非负整数,否则返回-1。 |
4623
4624### y<sup>9+</sup>
4625
4626y(): number
4627
4628弹出菜单的y坐标。
4629
4630**返回值:**
4631
4632| 类型     | 说明                 |
4633| ------ | ------------------ |
4634| number | 显示正常返回非负整数,否则返回-1。 |
4635
4636### getLinkUrl<sup>9+</sup>
4637
4638getLinkUrl(): string
4639
4640获取链接地址。
4641
4642**返回值:**
4643
4644| 类型     | 说明                        |
4645| ------ | ------------------------- |
4646| string | 如果长按位置是链接,返回经过安全检查的url链接。 |
4647
4648### getUnfilteredLinkUrl<sup>9+</sup>
4649
4650getUnfilteredLinkUrl(): string
4651
4652获取链接地址。
4653
4654**返回值:**
4655
4656| 类型     | 说明                    |
4657| ------ | --------------------- |
4658| string | 如果长按位置是链接,返回原始的url链接。 |
4659
4660### getSourceUrl<sup>9+</sup>
4661
4662getSourceUrl(): string
4663
4664获取sourceUrl链接。
4665
4666**返回值:**
4667
4668| 类型     | 说明                       |
4669| ------ | ------------------------ |
4670| string | 如果选中的元素有src属性,返回src的url。 |
4671
4672### existsImageContents<sup>9+</sup>
4673
4674existsImageContents(): boolean
4675
4676是否存在图像内容。
4677
4678**返回值:**
4679
4680| 类型      | 说明                        |
4681| ------- | ------------------------- |
4682| boolean | 长按位置中有图片返回true,否则返回false。 |
4683
4684### getMediaType<sup>9+</sup>
4685
4686getMediaType(): ContextMenuMediaType
4687
4688获取网页元素媒体类型。
4689
4690**返回值:**
4691
4692| 类型                                       | 说明        |
4693| ---------------------------------------- | --------- |
4694| [ContextMenuMediaType](#contextmenumediatype9枚举说明) | 网页元素媒体类型。 |
4695
4696### getSelectionText<sup>9+</sup>
4697
4698getSelectionText(): string
4699
4700获取选中文本。
4701
4702**返回值:**
4703
4704| 类型     | 说明                   |
4705| ------ | -------------------- |
4706| string | 菜单上下文选中文本内容,不存在则返回空。 |
4707
4708### getSourceType<sup>9+</sup>
4709
4710getSourceType(): ContextMenuSourceType
4711
4712获取菜单事件来源。
4713
4714**返回值:**
4715
4716| 类型                                       | 说明      |
4717| ---------------------------------------- | ------- |
4718| [ContextMenuSourceType](#contextmenusourcetype9枚举说明) | 菜单事件来源。 |
4719
4720### getInputFieldType<sup>9+</sup>
4721
4722getInputFieldType(): ContextMenuInputFieldType
4723
4724获取网页元素输入框类型。
4725
4726**返回值:**
4727
4728| 类型                                       | 说明     |
4729| ---------------------------------------- | ------ |
4730| [ContextMenuInputFieldType](#contextmenuinputfieldtype9枚举说明) | 输入框类型。 |
4731
4732### isEditable<sup>9+</sup>
4733
4734isEditable(): boolean
4735
4736获取网页元素是否可编辑标识。
4737
4738**返回值:**
4739
4740| 类型      | 说明                         |
4741| ------- | -------------------------- |
4742| boolean | 网页元素可编辑返回true,不可编辑返回false。 |
4743
4744### getEditStateFlags<sup>9+</sup>
4745
4746getEditStateFlags(): number
4747
4748获取网页元素可编辑标识。
4749
4750**返回值:**
4751
4752| 类型     | 说明                                       |
4753| ------ | ---------------------------------------- |
4754| number | 网页元素可编辑标识,参照[ContextMenuEditStateFlags](#contextmenueditstateflags9枚举说明)。 |
4755
4756## WebContextMenuResult<sup>9+</sup>
4757
4758实现长按页面元素或鼠标右键弹出来的菜单所执行的响应事件。示例代码参考[onContextMenuShow事件](#oncontextmenushow9)。
4759
4760### closeContextMenu<sup>9+</sup>
4761
4762closeContextMenu(): void
4763
4764不执行WebContextMenuResult其他接口操作时,需要调用此接口关闭菜单。
4765
4766### copyImage<sup>9+</sup>
4767
4768copyImage(): void
4769
4770WebContextMenuParam有图片内容则复制图片。
4771
4772### copy<sup>9+</sup>
4773
4774copy(): void
4775
4776执行与此上下文菜单相关的拷贝操作。
4777
4778### paste<sup>9+</sup>
4779
4780paste(): void
4781
4782执行与此上下文菜单相关的粘贴操作。
4783
4784### cut<sup>9+</sup>
4785
4786cut(): void
4787
4788执行与此上下文菜单相关的剪切操作。
4789
4790### selectAll<sup>9+</sup>
4791
4792selectAll(): void
4793
4794执行与此上下文菜单相关的全选操作。
4795
4796## JsGeolocation
4797
4798Web组件返回授权或拒绝权限功能的对象。示例代码参考[onGeolocationShow事件](#ongeolocationshow)。
4799
4800### invoke
4801
4802invoke(origin: string, allow: boolean, retain: boolean): void
4803
4804设置网页地理位置权限状态。
4805
4806**参数:**
4807
4808| 参数名    | 参数类型    | 必填   | 默认值  | 参数描述                                     |
4809| ------ | ------- | ---- | ---- | ---------------------------------------- |
4810| origin | string  | 是    | -    | 指定源的字符串索引。                               |
4811| allow  | boolean | 是    | -    | 设置的地理位置权限状态。                             |
4812| retain | boolean | 是    | -    | 是否允许将地理位置权限状态保存到系统中。可通过[GeolocationPermissions<sup>9+</sup>](../apis/js-apis-webview.md#geolocationpermissions)接口管理保存到系统的地理位置权限。 |
4813
4814## MessageLevel枚举说明
4815
4816| 名称    | 值 | 描述    |
4817| ----- | -- | ---- |
4818| Debug | 0 | 调试级别。 |
4819| Error | 1 | 错误级别。 |
4820| Info  | 2 | 消息级别。 |
4821| Log   | 3 | 日志级别。 |
4822| Warn  | 4 | 警告级别。 |
4823
4824## RenderExitReason<sup>9+</sup>枚举说明
4825
4826onRenderExited接口返回的渲染进程退出的具体原因。
4827
4828| 名称                         | 值 | 描述                |
4829| -------------------------- | -- | ----------------- |
4830| ProcessAbnormalTermination | 0 | 渲染进程异常退出。         |
4831| ProcessWasKilled           | 1 | 收到SIGKILL,或被手动终止。 |
4832| ProcessCrashed             | 2 | 渲染进程崩溃退出,如段错误。    |
4833| ProcessOom                 | 3 | 程序内存不足。           |
4834| ProcessExitUnknown         | 4 | 其他原因。             |
4835
4836## MixedMode枚举说明
4837
4838| 名称        | 值 | 描述                                 |
4839| ---------- | -- | ---------------------------------- |
4840| All        | 0 | 允许加载HTTP和HTTPS混合内容。所有不安全的内容都可以被加载。 |
4841| Compatible | 1 | 混合内容兼容性模式,部分不安全的内容可能被加载。           |
4842| None       | 2 | 不允许加载HTTP和HTTPS混合内容。               |
4843
4844## CacheMode<sup>9+</sup>枚举说明
4845
4846| 名称      | 值 | 描述                                   |
4847| ------- | -- | ------------------------------------ |
4848| Default | 0 | 使用未过期的cache加载资源,如果cache中无该资源则从网络中获取。 |
4849| None    | 1 | 加载资源使用cache,如果cache中无该资源则从网络中获取。     |
4850| Online  | 2 | 加载资源不使用cache,全部从网络中获取。               |
4851| Only    | 3 | 只从cache中加载资源。                        |
4852
4853## FileSelectorMode<sup>9+</sup>枚举说明
4854
4855| 名称                   | 值 | 描述         |
4856| -------------------- | -- | ---------- |
4857| FileOpenMode         | 0 | 打开上传单个文件。  |
4858| FileOpenMultipleMode | 1 | 打开上传多个文件。  |
4859| FileOpenFolderMode   | 2 | 打开上传文件夹模式。 |
4860| FileSaveMode         | 3 | 文件保存模式。    |
4861
4862 ## HitTestType枚举说明
4863
4864| 名称            | 值 | 描述                       |
4865| ------------- | -- | ------------------------ |
4866| EditText      | 0 | 可编辑的区域。                  |
4867| Email         | 1 | 电子邮件地址。                  |
4868| HttpAnchor    | 2 | 超链接,其src为http。           |
4869| HttpAnchorImg | 3 | 带有超链接的图片,其中超链接的src为http。 |
4870| Img           | 4 | HTML::img标签。             |
4871| Map           | 5 | 地理地址。                    |
4872| Phone         | 6 | 电话号码。                    |
4873| Unknown       | 7 | 未知内容。                    |
4874
4875## SslError<sup>9+</sup>枚举说明
4876
4877onSslErrorEventReceive接口返回的SSL错误的具体原因。
4878
4879| 名称           | 值 | 描述          |
4880| ------------ | -- | ----------- |
4881| Invalid      | 0 | 一般错误。       |
4882| HostMismatch | 1 | 主机名不匹配。     |
4883| DateInvalid  | 2 | 证书日期无效。     |
4884| Untrusted    | 3 | 证书颁发机构不受信任。 |
4885
4886## ProtectedResourceType<sup>9+</sup>枚举说明
4887
4888| 名称                          | 值 | 描述            | 备注                         |
4889| --------------------------- | --------------- | ------------- | -------------------------- |
4890| MidiSysex                   | TYPE_MIDI_SYSEX | MIDI SYSEX资源。 | 目前仅支持权限事件上报,MIDI设备的使用还未支持。 |
4891| VIDEO_CAPTURE<sup>10+</sup> | TYPE_VIDEO_CAPTURE | 视频捕获资源,例如相机。  |                            |
4892| AUDIO_CAPTURE<sup>10+</sup> | TYPE_AUDIO_CAPTURE | 音频捕获资源,例如麦克风。 |                            |
4893
4894## WebDarkMode<sup>9+</sup>枚举说明
4895
4896| 名称   | 值 | 描述           |
4897| ---- | -- | ------------ |
4898| Off  | 0 | Web深色模式关闭。   |
4899| On   | 1 | Web深色模式开启。   |
4900| Auto | 2 | Web深色模式跟随系统。 |
4901
4902## WebCaptureMode<sup>10+</sup>枚举说明
4903
4904| 名称          | 值 | 描述      |
4905| ----------- | -- | ------- |
4906| HOME_SCREEN | 0 | 主屏捕获模式。 |
4907
4908## WebMediaOptions<sup>10+</sup>
4909
4910Web媒体策略的配置。
4911
4912| 名称             | 类型      | 可读   | 可写   | 必填   | 说明                                       |
4913| -------------- | ------- | ---- | ---- | ---- | ---------------------------------------- |
4914| resumeInterval | number  | 是    | 是    | 否    | 被暂停的Web音频能够自动续播的有效期,单位:秒。最长有效期为60秒,由于近似值原因,该有效期可能存在一秒内的误差。 |
4915| audioExclusive | boolean | 是    | 是    | 否    | 应用内多个Web实例的音频是否独占。                       |
4916
4917## ScreenCaptureConfig<sup>10+</sup>
4918
4919Web屏幕捕获的配置。
4920
4921| 名称          | 类型                                      | 可读   | 可写   | 必填   | 说明         |
4922| ----------- | --------------------------------------- | ---- | ---- | ---- | ---------- |
4923| captureMode | [WebCaptureMode](#webcapturemode10枚举说明) | 是    | 是    | 是    | Web屏幕捕获模式。 |
4924
4925## DataResubmissionHandler<sup>9+</sup>
4926
4927通过DataResubmissionHandler可以重新提交表单数据或取消提交表单数据。
4928
4929### resend<sup>9+</sup>
4930
4931resend(): void
4932
4933重新发送表单数据。
4934
4935**示例:**
4936
4937  ```ts
4938  // xxx.ets
4939  import web_webview from '@ohos.web.webview'
4940  @Entry
4941  @Component
4942  struct WebComponent {
4943    controller: web_webview.WebviewController = new web_webview.WebviewController()
4944    build() {
4945      Column() {
4946        Web({ src:'www.example.com', controller: this.controller })
4947         .onDataResubmitted((event) => {
4948          console.log('onDataResubmitted')
4949          event.handler.resend();
4950        })
4951      }
4952    }
4953  }
4954  ```
4955
4956### cancel<sup>9+</sup>
4957
4958cancel(): void
4959
4960取消重新发送表单数据。
4961
4962**示例:**
4963
4964  ```ts
4965  // xxx.ets
4966  import web_webview from '@ohos.web.webview'
4967  @Entry
4968  @Component
4969  struct WebComponent {
4970    controller: web_webview.WebviewController = new web_webview.WebviewController()
4971    build() {
4972      Column() {
4973        Web({ src:'www.example.com', controller: this.controller })
4974         .onDataResubmitted((event) => {
4975          console.log('onDataResubmitted')
4976          event.handler.cancel();
4977        })
4978      }
4979    }
4980  }
4981  ```
4982
4983  ## WebController
4984
4985通过WebController可以控制Web组件各种行为。一个WebController对象只能控制一个Web组件,且必须在Web组件和WebController绑定后,才能调用WebController上的方法。
4986
4987从API version 9开始不再维护,建议使用[WebviewController<sup>9+</sup>](../apis/js-apis-webview.md#webviewcontroller)代替。
4988
4989### 创建对象
4990
4991```ts
4992let webController: WebController = new WebController()
4993```
4994
4995### getCookieManager<sup>(deprecated)</sup>
4996
4997getCookieManager(): WebCookie
4998
4999获取web组件cookie管理对象。
5000
5001从API version 9开始不再维护,建议使用[getCookie](../apis/js-apis-webview.md#getcookie)代替。
5002
5003**返回值:**
5004
5005| 类型        | 说明                                       |
5006| --------- | ---------------------------------------- |
5007| WebCookie | web组件cookie管理对象,参考[WebCookie](#webcookiedeprecated)定义。 |
5008
5009**示例:**
5010
5011  ```ts
5012  // xxx.ets
5013  @Entry
5014  @Component
5015  struct WebComponent {
5016    controller: WebController = new WebController()
5017
5018    build() {
5019      Column() {
5020        Button('getCookieManager')
5021          .onClick(() => {
5022            let cookieManager = this.controller.getCookieManager()
5023          })
5024        Web({ src: 'www.example.com', controller: this.controller })
5025      }
5026    }
5027  }
5028  ```
5029
5030### requestFocus<sup>(deprecated)</sup>
5031
5032requestFocus()
5033
5034使当前web页面获取焦点。
5035
5036从API version 9开始不再维护,建议使用[requestFocus<sup>9+</sup>](../apis/js-apis-webview.md#requestfocus)代替。
5037
5038**示例:**
5039
5040  ```ts
5041  // xxx.ets
5042  @Entry
5043  @Component
5044  struct WebComponent {
5045    controller: WebController = new WebController()
5046
5047    build() {
5048      Column() {
5049        Button('requestFocus')
5050          .onClick(() => {
5051            this.controller.requestFocus()
5052          })
5053        Web({ src: 'www.example.com', controller: this.controller })
5054      }
5055    }
5056  }
5057  ```
5058
5059### accessBackward<sup>(deprecated)</sup>
5060
5061accessBackward(): boolean
5062
5063当前页面是否可后退,即当前页面是否有返回历史记录。
5064
5065从API version 9开始不再维护,建议使用[accessBackward<sup>9+</sup>](../apis/js-apis-webview.md#accessbackward)代替。
5066
5067**返回值:**
5068
5069| 类型      | 说明                    |
5070| ------- | --------------------- |
5071| boolean | 可以后退返回true,否则返回false。 |
5072
5073**示例:**
5074
5075  ```ts
5076  // xxx.ets
5077  @Entry
5078  @Component
5079  struct WebComponent {
5080    controller: WebController = new WebController()
5081
5082    build() {
5083      Column() {
5084        Button('accessBackward')
5085          .onClick(() => {
5086            let result = this.controller.accessBackward()
5087            console.log('result:' + result)
5088          })
5089        Web({ src: 'www.example.com', controller: this.controller })
5090      }
5091    }
5092  }
5093  ```
5094
5095### accessForward<sup>(deprecated)</sup>
5096
5097accessForward(): boolean
5098
5099当前页面是否可前进,即当前页面是否有前进历史记录。
5100
5101从API version 9开始不再维护,建议使用[accessForward<sup>9+</sup>](../apis/js-apis-webview.md#accessforward)代替。
5102
5103**返回值:**
5104
5105| 类型      | 说明                    |
5106| ------- | --------------------- |
5107| boolean | 可以前进返回true,否则返回false。 |
5108
5109**示例:**
5110
5111  ```ts
5112  // xxx.ets
5113  @Entry
5114  @Component
5115  struct WebComponent {
5116    controller: WebController = new WebController()
5117
5118    build() {
5119      Column() {
5120        Button('accessForward')
5121          .onClick(() => {
5122            let result = this.controller.accessForward()
5123            console.log('result:' + result)
5124          })
5125        Web({ src: 'www.example.com', controller: this.controller })
5126      }
5127    }
5128  }
5129  ```
5130
5131### accessStep<sup>(deprecated)</sup>
5132
5133accessStep(step: number): boolean
5134
5135当前页面是否可前进或者后退给定的step步。
5136
5137从API version 9开始不再维护,建议使用[accessStep<sup>9+</sup>](../apis/js-apis-webview.md#accessstep)代替。
5138
5139**参数:**
5140
5141| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                  |
5142| ---- | ------ | ---- | ---- | --------------------- |
5143| step | number | 是    | -    | 要跳转的步数,正数代表前进,负数代表后退。 |
5144
5145**返回值:**
5146
5147| 类型      | 说明        |
5148| ------- | --------- |
5149| boolean | 页面是否前进或后退 |
5150
5151**示例:**
5152
5153  ```ts
5154  // xxx.ets
5155  @Entry
5156  @Component
5157  struct WebComponent {
5158    controller: WebController = new WebController()
5159    @State steps: number = 2
5160
5161    build() {
5162      Column() {
5163        Button('accessStep')
5164          .onClick(() => {
5165            let result = this.controller.accessStep(this.steps)
5166            console.log('result:' + result)
5167          })
5168        Web({ src: 'www.example.com', controller: this.controller })
5169      }
5170    }
5171  }
5172  ```
5173
5174### backward<sup>(deprecated)</sup>
5175
5176backward(): void
5177
5178按照历史栈,后退一个页面。一般结合accessBackward一起使用。
5179
5180从API version 9开始不再维护,建议使用[backward<sup>9+</sup>](../apis/js-apis-webview.md#backward)代替。
5181
5182**示例:**
5183
5184  ```ts
5185  // xxx.ets
5186  @Entry
5187  @Component
5188  struct WebComponent {
5189    controller: WebController = new WebController()
5190
5191    build() {
5192      Column() {
5193        Button('backward')
5194          .onClick(() => {
5195            this.controller.backward()
5196          })
5197        Web({ src: 'www.example.com', controller: this.controller })
5198      }
5199    }
5200  }
5201  ```
5202
5203### forward<sup>(deprecated)</sup>
5204
5205forward(): void
5206
5207按照历史栈,前进一个页面。一般结合accessForward一起使用。
5208
5209从API version 9开始不再维护,建议使用[forward<sup>9+</sup>](../apis/js-apis-webview.md#forward)代替。
5210
5211**示例:**
5212
5213  ```ts
5214  // xxx.ets
5215  @Entry
5216  @Component
5217  struct WebComponent {
5218    controller: WebController = new WebController()
5219
5220    build() {
5221      Column() {
5222        Button('forward')
5223          .onClick(() => {
5224            this.controller.forward()
5225          })
5226        Web({ src: 'www.example.com', controller: this.controller })
5227      }
5228    }
5229  }
5230  ```
5231
5232### deleteJavaScriptRegister<sup>(deprecated)</sup>
5233
5234deleteJavaScriptRegister(name: string)
5235
5236删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后立即生效,无须调用[refresh](#refreshdeprecated)接口。
5237
5238从API version 9开始不再维护,建议使用[deleteJavaScriptRegister<sup>9+</sup>](../apis/js-apis-webview.md#deletejavascriptregister)代替。
5239
5240**参数:**
5241
5242| 参数名  | 参数类型   | 必填   | 默认值  | 参数描述                                     |
5243| ---- | ------ | ---- | ---- | ---------------------------------------- |
5244| name | string | 是    | -    | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
5245
5246**示例:**
5247
5248  ```ts
5249  // xxx.ets
5250  @Entry
5251  @Component
5252  struct WebComponent {
5253    controller: WebController = new WebController()
5254    @State name: string = 'Object'
5255
5256    build() {
5257      Column() {
5258        Button('deleteJavaScriptRegister')
5259          .onClick(() => {
5260            this.controller.deleteJavaScriptRegister(this.name)
5261          })
5262        Web({ src: 'www.example.com', controller: this.controller })
5263      }
5264    }
5265  }
5266  ```
5267
5268### getHitTest<sup>(deprecated)</sup>
5269
5270getHitTest(): HitTestType
5271
5272获取当前被点击区域的元素类型。
5273
5274从API version 9开始不再维护,建议使用[getHitTest<sup>9+</sup>](../apis/js-apis-webview.md#gethittest)代替。
5275
5276**返回值:**
5277
5278| 类型                              | 说明          |
5279| ------------------------------- | ----------- |
5280| [HitTestType](#hittesttype枚举说明) | 被点击区域的元素类型。 |
5281
5282**示例:**
5283
5284  ```ts
5285  // xxx.ets
5286  @Entry
5287  @Component
5288  struct WebComponent {
5289    controller: WebController = new WebController()
5290
5291    build() {
5292      Column() {
5293        Button('getHitTest')
5294          .onClick(() => {
5295            let hitType = this.controller.getHitTest()
5296            console.log("hitType: " + hitType)
5297          })
5298        Web({ src: 'www.example.com', controller: this.controller })
5299      }
5300    }
5301  }
5302  ```
5303
5304### loadData<sup>(deprecated)</sup>
5305
5306loadData(options: { data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string })
5307
5308baseUrl为空时,通过”data“协议加载指定的一段字符串。
5309
5310当baseUrl为”data“协议时,编码后的data字符串将被Web组件作为”data"协议加载。
5311
5312当baseUrl为“http/https"协议时,编码后的data字符串将被Web组件以类似loadUrl的方式以非编码字符串处理。
5313
5314从API version 9开始不再维护,建议使用[loadData<sup>9+</sup>](../apis/js-apis-webview.md#loaddata)代替。
5315
5316**参数:**
5317
5318| 参数名        | 参数类型   | 必填   | 默认值  | 参数描述                                     |
5319| ---------- | ------ | ---- | ---- | ---------------------------------------- |
5320| data       | string | 是    | -    | 按照”Base64“或者”URL"编码后的一段字符串。              |
5321| mimeType   | string | 是    | -    | 媒体类型(MIME)。                              |
5322| encoding   | string | 是    | -    | 编码类型,具体为“Base64"或者”URL编码。                |
5323| baseUrl    | string | 否    | -    | 指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给window.origin。 |
5324| historyUrl | string | 否    | -    | 历史记录URL。非空时,可被历史记录管理,实现前后后退功能。当baseUrl为空时,此属性无效。 |
5325
5326**示例:**
5327
5328  ```ts
5329  // xxx.ets
5330  @Entry
5331  @Component
5332  struct WebComponent {
5333    controller: WebController = new WebController()
5334
5335    build() {
5336      Column() {
5337        Button('loadData')
5338          .onClick(() => {
5339            this.controller.loadData({
5340              data: "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
5341              mimeType: "text/html",
5342              encoding: "UTF-8"
5343            })
5344          })
5345        Web({ src: 'www.example.com', controller: this.controller })
5346      }
5347    }
5348  }
5349  ```
5350
5351### loadUrl<sup>(deprecated)</sup>
5352
5353loadUrl(options: { url: string | Resource, headers?: Array\<Header\> })
5354
5355使用指定的http头加载指定的URL。
5356
5357通过loadUrl注入的对象只在当前document有效,即通过loadUrl导航到新的页面会无效。
5358
5359而通过registerJavaScriptProxy注入的对象,在loadUrl导航到新的页面也会有效。
5360
5361从API version 9开始不再维护,建议使用[loadUrl<sup>9+</sup>](../apis/js-apis-webview.md#loadurl)代替。
5362
5363**参数:**
5364
5365| 参数名     | 参数类型                       | 必填   | 默认值  | 参数描述           |
5366| ------- | -------------------------- | ---- | ---- | -------------- |
5367| url     | string \| Resource                    | 是    | -    | 需要加载的 URL。     |
5368| headers | Array\<[Header](#header)\> | 否    | []   | URL的附加HTTP请求头。 |
5369
5370**示例:**
5371
5372  ```ts
5373  // xxx.ets
5374  @Entry
5375  @Component
5376  struct WebComponent {
5377    controller: WebController = new WebController()
5378
5379    build() {
5380      Column() {
5381        Button('loadUrl')
5382          .onClick(() => {
5383            this.controller.loadUrl({ url: 'www.example.com' })
5384          })
5385        Web({ src: 'www.example.com', controller: this.controller })
5386      }
5387    }
5388  }
5389  ```
5390
5391### onActive<sup>(deprecated)</sup>
5392
5393onActive(): void
5394
5395调用此接口通知Web组件进入前台激活状态。
5396
5397从API version 9开始不再维护,建议使用[onActive<sup>9+</sup>](../apis/js-apis-webview.md#onactive)代替。
5398
5399**示例:**
5400
5401  ```ts
5402  // xxx.ets
5403  @Entry
5404  @Component
5405  struct WebComponent {
5406    controller: WebController = new WebController()
5407
5408    build() {
5409      Column() {
5410        Button('onActive')
5411          .onClick(() => {
5412            this.controller.onActive()
5413          })
5414        Web({ src: 'www.example.com', controller: this.controller })
5415      }
5416    }
5417  }
5418  ```
5419
5420### onInactive<sup>(deprecated)</sup>
5421
5422onInactive(): void
5423
5424调用此接口通知Web组件进入未激活状态。
5425
5426从API version 9开始不再维护,建议使用[onInactive<sup>9+</sup>](../apis/js-apis-webview.md#oninactive)代替。
5427
5428**示例:**
5429
5430  ```ts
5431  // xxx.ets
5432  @Entry
5433  @Component
5434  struct WebComponent {
5435    controller: WebController = new WebController()
5436
5437    build() {
5438      Column() {
5439        Button('onInactive')
5440          .onClick(() => {
5441            this.controller.onInactive()
5442          })
5443        Web({ src: 'www.example.com', controller: this.controller })
5444      }
5445    }
5446  }
5447  ```
5448
5449### zoom<sup>(deprecated)</sup>
5450zoom(factor: number): void
5451
5452调整当前网页的缩放比例。
5453
5454从API version 9开始不再维护,建议使用[zoom<sup>9+</sup>](../apis/js-apis-webview.md#zoom)代替。
5455
5456**参数:**
5457
5458| 参数名    | 参数类型   | 必填   | 参数描述                           |
5459| ------ | ------ | ---- | ------------------------------ |
5460| factor | number | 是    | 基于当前网页所需调整的相对缩放比例,正值为放大,负值为缩小。 |
5461
5462**示例:**
5463
5464  ```ts
5465  // xxx.ets
5466  @Entry
5467  @Component
5468  struct WebComponent {
5469    controller: WebController = new WebController()
5470    @State factor: number = 1
5471
5472    build() {
5473      Column() {
5474        Button('zoom')
5475          .onClick(() => {
5476            this.controller.zoom(this.factor)
5477          })
5478        Web({ src: 'www.example.com', controller: this.controller })
5479      }
5480    }
5481  }
5482  ```
5483
5484### refresh<sup>(deprecated)</sup>
5485
5486refresh()
5487
5488调用此接口通知Web组件刷新网页。
5489
5490从API version 9开始不再维护,建议使用[refresh<sup>9+</sup>](../apis/js-apis-webview.md#refresh)代替。
5491
5492**示例:**
5493
5494  ```ts
5495  // xxx.ets
5496  @Entry
5497  @Component
5498  struct WebComponent {
5499    controller: WebController = new WebController()
5500
5501    build() {
5502      Column() {
5503        Button('refresh')
5504          .onClick(() => {
5505            this.controller.refresh()
5506          })
5507        Web({ src: 'www.example.com', controller: this.controller })
5508      }
5509    }
5510  }
5511  ```
5512
5513### registerJavaScriptProxy<sup>(deprecated)</sup>
5514
5515registerJavaScriptProxy(options: { object: object, name: string, methodList: Array\<string\> })
5516
5517注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refreshdeprecated)接口生效。
5518
5519从API version 9开始不再维护,建议使用[registerJavaScriptProxy<sup>9+</sup>](../apis/js-apis-webview.md#registerjavascriptproxy)代替。
5520
5521**参数:**
5522
5523| 参数名        | 参数类型            | 必填   | 默认值  | 参数描述                                     |
5524| ---------- | --------------- | ---- | ---- | ---------------------------------------- |
5525| object     | object          | 是    | -    | 参与注册的应用侧JavaScript对象。只能声明方法,不能声明属性 。其中方法的参数和返回类型只能为string,number,boolean |
5526| name       | string          | 是    | -    | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
5527| methodList | Array\<string\> | 是    | -    | 参与注册的应用侧JavaScript对象的方法。                 |
5528
5529**示例:**
5530
5531  ```ts
5532  // xxx.ets
5533  class TestObj {
5534    constructor() {
5535    }
5536
5537    test(): string {
5538      return "ArkUI Web Component"
5539    }
5540
5541    toString(): void {
5542      console.log('Web Component toString')
5543    }
5544  }
5545
5546  @Entry
5547  @Component
5548  struct Index {
5549    controller: WebController = new WebController()
5550    testObj = new TestObj();
5551    build() {
5552      Column() {
5553        Row() {
5554          Button('Register JavaScript To Window').onClick(() => {
5555            this.controller.registerJavaScriptProxy({
5556              object: this.testObj,
5557              name: "objName",
5558              methodList: ["test", "toString"],
5559            })
5560          })
5561        }
5562        Web({ src: $rawfile('index.html'), controller: this.controller })
5563          .javaScriptAccess(true)
5564      }
5565    }
5566  }
5567  ```
5568
5569  加载的html文件。
5570  ```html
5571  <!-- index.html -->
5572  <!DOCTYPE html>
5573  <html>
5574      <meta charset="utf-8">
5575      <body>
5576          Hello world!
5577      </body>
5578      <script type="text/javascript">
5579      function htmlTest() {
5580          str = objName.test("test function")
5581          console.log('objName.test result:'+ str)
5582      }
5583  </script>
5584  </html>
5585
5586  ```
5587
5588### runJavaScript<sup>(deprecated)</sup>
5589
5590runJavaScript(options: { script: string, callback?: (result: string) => void })
5591
5592异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
5593
5594从API version 9开始不再维护,建议使用[runJavaScript<sup>9+</sup>](../apis/js-apis-webview.md#runjavascript)代替。
5595
5596**参数:**
5597
5598| 参数名      | 参数类型                     | 必填   | 默认值  | 参数描述                                     |
5599| -------- | ------------------------ | ---- | ---- | ---------------------------------------- |
5600| script   | string                   | 是    | -    | JavaScript脚本。                            |
5601| callback | (result: string) => void | 否    | -    | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
5602
5603**示例:**
5604
5605  ```ts
5606  // xxx.ets
5607  @Entry
5608  @Component
5609  struct WebComponent {
5610    controller: WebController = new WebController()
5611    @State webResult: string = ''
5612    build() {
5613      Column() {
5614        Text(this.webResult).fontSize(20)
5615        Web({ src: $rawfile('index.html'), controller: this.controller })
5616        .javaScriptAccess(true)
5617        .onPageEnd((event) => {
5618          this.controller.runJavaScript({
5619            script: 'test()',
5620            callback: (result: string)=> {
5621              this.webResult = result
5622              console.info(`The test() return value is: ${result}`)
5623            }})
5624          if (event) {
5625            console.info('url: ', event.url)
5626          }
5627        })
5628      }
5629    }
5630  }
5631  ```
5632  加载的html文件。
5633  ```html
5634  <!-- index.html -->
5635  <!DOCTYPE html>
5636  <html>
5637    <meta charset="utf-8">
5638    <body>
5639        Hello world!
5640    </body>
5641    <script type="text/javascript">
5642    function test() {
5643        console.log('Ark WebComponent')
5644        return "This value is from index.html"
5645    }
5646    </script>
5647  </html>
5648  ```
5649
5650### stop<sup>(deprecated)</sup>
5651
5652stop()
5653
5654停止页面加载。
5655
5656从API version 9开始不再维护,建议使用[stop<sup>9+</sup>](../apis/js-apis-webview.md#stop)代替。
5657
5658**示例:**
5659
5660  ```ts
5661  // xxx.ets
5662  @Entry
5663  @Component
5664  struct WebComponent {
5665    controller: WebController = new WebController()
5666
5667    build() {
5668      Column() {
5669        Button('stop')
5670          .onClick(() => {
5671            this.controller.stop()
5672          })
5673        Web({ src: 'www.example.com', controller: this.controller })
5674      }
5675    }
5676  }
5677  ```
5678
5679### clearHistory<sup>(deprecated)</sup>
5680
5681clearHistory(): void
5682
5683删除所有前进后退记录。
5684
5685从API version 9开始不再维护,建议使用[clearHistory<sup>9+</sup>](../apis/js-apis-webview.md#clearhistory)代替。
5686
5687**示例:**
5688
5689  ```ts
5690  // xxx.ets
5691  @Entry
5692  @Component
5693  struct WebComponent {
5694    controller: WebController = new WebController()
5695
5696    build() {
5697      Column() {
5698        Button('clearHistory')
5699          .onClick(() => {
5700            this.controller.clearHistory()
5701          })
5702        Web({ src: 'www.example.com', controller: this.controller })
5703      }
5704    }
5705  }
5706  ```
5707
5708## WebCookie<sup>(deprecated)</sup>
5709
5710通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookie。通过controller方法中的getCookieManager方法可以获取WebCookie对象,进行后续的cookie管理操作。
5711
5712### setCookie<sup>(deprecated)</sup>
5713
5714setCookie()
5715
5716设置cookie,该方法为同步方法。设置成功返回true,否则返回false。
5717
5718从API version 9开始不再维护,建议使用[setCookie<sup>9+</sup>](../apis/js-apis-webview.md#setcookie)代替。
5719
5720### saveCookie<sup>(deprecated)</sup>
5721
5722saveCookie()
5723
5724将当前存在内存中的cookie同步到磁盘中,该方法为同步方法。
5725
5726从API version 9开始不再维护,建议使用[saveCookieAsync<sup>9+</sup>](../apis/js-apis-webview.md#savecookieasync)代替。
5727