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