1 2 3# @ohos.web.webview (Webview) 4 5@ohos.web.webview提供web控制能力,[web](../arkui-ts/ts-basic-components-web.md)组件提供网页显示的能力。 6 7> **说明:** 8> 9> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 10> 11> - 示例效果请以真机运行为准,当前IDE预览器不支持。 12 13## 需要权限 14 15访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[权限申请声明](../../security/accesstoken-guidelines.md)。 16 17## 导入模块 18 19```ts 20import web_webview from '@ohos.web.webview'; 21``` 22 23## once 24 25once(type: string, callback: Callback\<void\>): void 26 27订阅一次指定类型Web事件的回调。 28 29**系统能力:** SystemCapability.Web.Webview.Core 30 31**参数:** 32 33| 参数名 | 类型 | 必填 | 说明 | 34| ------- | ---------------- | ---- | -------------------- | 35| type | string | 是 | Web事件的类型,目前支持:"webInited"(Web初始化完成)。 | 36| headers | Callback\<void\> | 是 | 所订阅的回调函数。 | 37 38**示例:** 39 40```ts 41// xxx.ets 42import web_webview from '@ohos.web.webview' 43 44web_webview.once("webInited", () => { 45 console.log("setCookie") 46 web_webview.WebCookieManager.setCookie("https://www.example.com", "a=b") 47}) 48 49@Entry 50@Component 51struct WebComponent { 52 controller: web_webview.WebviewController = new web_webview.WebviewController(); 53 54 build() { 55 Column() { 56 Web({ src: 'www.example.com', controller: this.controller }) 57 } 58 } 59} 60``` 61 62## WebMessagePort 63 64通过WebMessagePort可以进行消息的发送以及接收。 65 66### postMessageEvent 67 68postMessageEvent(message: WebMessage): void 69 70发送消息。完整示例代码参考[postMessage](#postmessage)。 71 72**系统能力:** SystemCapability.Web.Webview.Core 73 74**参数:** 75 76| 参数名 | 类型 | 必填 | 说明 | 77| ------- | ------ | ---- | :------------- | 78| message | [WebMessage](#webmessage) | 是 | 要发送的消息。 | 79 80**错误码:** 81 82以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 83 84| 错误码ID | 错误信息 | 85| -------- | ------------------------------------- | 86| 17100010 | Can not post message using this port. | 87 88**示例:** 89 90```ts 91// xxx.ets 92import web_webview from '@ohos.web.webview'; 93import business_error from '@ohos.base'; 94 95@Entry 96@Component 97struct WebComponent { 98 controller: web_webview.WebviewController = new web_webview.WebviewController(); 99 ports: web_webview.WebMessagePort[] = []; 100 101 build() { 102 Column() { 103 Button('postMessageEvent') 104 .onClick(() => { 105 try { 106 this.ports = this.controller.createWebMessagePorts(); 107 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 108 this.ports[1].postMessageEvent("post message from ets to html5"); 109 } catch (error) { 110 let e: business_error.BusinessError = error as business_error.BusinessError; 111 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 112 } 113 }) 114 Web({ src: 'www.example.com', controller: this.controller }) 115 } 116 } 117} 118``` 119 120### onMessageEvent 121 122onMessageEvent(callback: (result: WebMessage) => void): void 123 124注册回调函数,接收HTML侧发送过来的消息。完整示例代码参考[postMessage](#postmessage)。 125 126**系统能力:** SystemCapability.Web.Webview.Core 127 128**参数:** 129 130| 参数名 | 类型 | 必填 | 说明 | 131| -------- | -------- | ---- | :------------------- | 132| result | [WebMessage](#webmessage) | 是 | 接收到的消息。 | 133 134**错误码:** 135 136以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 137 138| 错误码ID | 错误信息 | 139| -------- | ----------------------------------------------- | 140| 17100006 | Can not register message event using this port. | 141 142**示例:** 143 144```ts 145// xxx.ets 146import web_webview from '@ohos.web.webview'; 147import business_error from '@ohos.base'; 148 149@Entry 150@Component 151struct WebComponent { 152 controller: web_webview.WebviewController = new web_webview.WebviewController(); 153 ports: web_webview.WebMessagePort[] = []; 154 155 build() { 156 Column() { 157 Button('onMessageEvent') 158 .onClick(() => { 159 try { 160 this.ports = this.controller.createWebMessagePorts(); 161 this.ports[1].onMessageEvent((msg) => { 162 if (typeof(msg) == "string") { 163 console.log("received string message from html5, string is:" + msg); 164 } else if (typeof(msg) == "object") { 165 if (msg instanceof ArrayBuffer) { 166 console.log("received arraybuffer from html5, length is:" + msg.byteLength); 167 } else { 168 console.log("not support"); 169 } 170 } else { 171 console.log("not support"); 172 } 173 }) 174 } catch (error) { 175 let e: business_error.BusinessError = error as business_error.BusinessError; 176 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 177 } 178 }) 179 Web({ src: 'www.example.com', controller: this.controller }) 180 } 181 } 182} 183``` 184 185### isExtentionType<sup>10+</sup> 186 187**系统能力:** SystemCapability.Web.Webview.Core 188 189| 名称 | 类型 | 可读 | 可写 | 说明 | 190| ------------ | ------ | ---- | ---- | ------------------------------------------------| 191| isExtentionType | boolean | 是 | 否 | 创建WebMessagePort时是否指定使用扩展增强接口。 | 192 193### postMessageEventExt<sup>10+</sup> 194 195postMessageEventExt(message: WebMessageExt): void 196 197发送消息。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 198 199**系统能力:** SystemCapability.Web.Webview.Core 200 201**参数:** 202 203| 参数名 | 类型 | 必填 | 说明 | 204| ------- | ------ | ---- | :------------- | 205| message | [WebMessageExt](#webmessageext10) | 是 | 要发送的消息。 | 206 207**错误码:** 208 209以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 210 211| 错误码ID | 错误信息 | 212| -------- | ------------------------------------- | 213| 17100010 | Can not post message using this port. | 214 215### onMessageEventExt<sup>10+</sup> 216 217onMessageEventExt(callback: (result: WebMessageExt) => void): void 218 219注册回调函数,接收HTML5侧发送过来的消息。 220 221**系统能力:** SystemCapability.Web.Webview.Core 222 223**参数:** 224 225| 参数名 | 类型 | 必填 | 说明 | 226| -------- | -------- | ---- | :------------------- | 227| result | [WebMessageExt](#webmessageext10) | 是 | 接收到的消息。 | 228 229**错误码:** 230 231以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 232 233| 错误码ID | 错误信息 | 234| -------- | ----------------------------------------------- | 235| 17100006 | Can not register message event using this port. | 236 237**示例:** 238 239```ts 240// xxx.ets 241import web_webview from '@ohos.web.webview'; 242import business_error from '@ohos.base'; 243 244// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。 245@Entry 246@Component 247struct WebComponent { 248 controller: web_webview.WebviewController = new web_webview.WebviewController(); 249 ports: web_webview.WebMessagePort[] = []; 250 nativePort: web_webview.WebMessagePort | null = null; 251 @State msg1: string = ""; 252 @State msg2: string = ""; 253 message: web_webview.WebMessageExt = new web_webview.WebMessageExt(); 254 255 build() { 256 Column() { 257 Text(this.msg1).fontSize(16) 258 Text(this.msg2).fontSize(16) 259 Button('SendToH5') 260 .onClick(() => { 261 // 使用本侧端口发送消息给HTML5 262 try { 263 console.log("In ArkTS side send true start"); 264 if (this.nativePort) { 265 this.message.setString("helloFromEts"); 266 this.nativePort.postMessageEventExt(this.message); 267 } 268 } 269 catch (error) { 270 let e: business_error.BusinessError = error as business_error.BusinessError; 271 console.log("In ArkTS side send message catch error:" + e.code + ", msg:" + e.message); 272 } 273 }) 274 275 Web({ src: $rawfile('index.html'), controller: this.controller }) 276 .onPageEnd(() => { 277 console.log("In ArkTS side message onPageEnd init mesaage channel"); 278 // 1. 创建消息端口 279 this.ports = this.controller.createWebMessagePorts(true); 280 // 2. 发送端口1到HTML5 281 this.controller.postMessage("init_web_messageport", [this.ports[1]], "*"); 282 // 3. 保存端口0到本地 283 this.nativePort = this.ports[0]; 284 // 4. 设置回调函数 285 this.nativePort.onMessageEventExt((result) => { 286 console.log("In ArkTS side got message"); 287 try { 288 let type = result.getType(); 289 console.log("In ArkTS side getType:" + type); 290 switch (type) { 291 case web_webview.WebMessageType.STRING: { 292 this.msg1 = "result type:" + typeof (result.getString()); 293 this.msg2 = "result getString:" + ((result.getString())); 294 break; 295 } 296 case web_webview.WebMessageType.NUMBER: { 297 this.msg1 = "result type:" + typeof (result.getNumber()); 298 this.msg2 = "result getNumber:" + ((result.getNumber())); 299 break; 300 } 301 case web_webview.WebMessageType.BOOLEAN: { 302 this.msg1 = "result type:" + typeof (result.getBoolean()); 303 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 304 break; 305 } 306 case web_webview.WebMessageType.ARRAY_BUFFER: { 307 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 308 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 309 break; 310 } 311 case web_webview.WebMessageType.ARRAY: { 312 this.msg1 = "result type:" + typeof (result.getArray()); 313 this.msg2 = "result getArray:" + result.getArray(); 314 break; 315 } 316 case web_webview.WebMessageType.ERROR: { 317 this.msg1 = "result type:" + typeof (result.getError()); 318 this.msg2 = "result getError:" + result.getError(); 319 break; 320 } 321 default: { 322 this.msg1 = "default break, type:" + type; 323 break; 324 } 325 } 326 } 327 catch (error) { 328 let e: business_error.BusinessError = error as business_error.BusinessError; 329 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 330 } 331 }); 332 }) 333 } 334 } 335} 336``` 337 338加载的html文件。 339```html 340<!--index.html--> 341<!DOCTYPE html> 342<html lang="en-gb"> 343<head> 344 <title>WebView MessagePort Demo</title> 345</head> 346 347<body> 348<h1>Html5 Send and Receive Message</h1> 349<h3 id="msg">Receive string:</h3> 350<h3 id="msg2">Receive arraybuffer:</h3> 351<div style="font-size: 10pt; text-align: center;"> 352 <input type="button" value="Send String" onclick="postStringToApp();" /><br/> 353</div> 354</body> 355<script src="index.js"></script> 356</html> 357``` 358 359```js 360//index.js 361var h5Port; 362window.addEventListener('message', function(event) { 363 if (event.data == 'init_web_messageport') { 364 if(event.ports[0] != null) { 365 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 366 h5Port.onmessage = function(event) { 367 console.log("hwd In html got message"); 368 // 2. 接收ets侧发送过来的消息. 369 var result = event.data; 370 console.log("In html got message, typeof: ", typeof(result)); 371 console.log("In html got message, result: ", (result)); 372 if (typeof(result) == "string") { 373 console.log("In html got message, String: ", result); 374 document.getElementById("msg").innerHTML = "String:" + result; 375 } else if (typeof(result) == "number") { 376 console.log("In html side got message, number: ", result); 377 document.getElementById("msg").innerHTML = "Number:" + result; 378 } else if (typeof(result) == "boolean") { 379 console.log("In html side got message, boolean: ", result); 380 document.getElementById("msg").innerHTML = "Boolean:" + result; 381 } else if (typeof(result) == "object") { 382 if (result instanceof ArrayBuffer) { 383 document.getElementById("msg2").innerHTML = "ArrayBuffer:" + result.byteLength; 384 console.log("In html got message, byteLength: ", result.byteLength); 385 } else if (result instanceof Error) { 386 console.log("In html error message, err:" + (result)); 387 console.log("In html error message, typeof err:" + typeof(result)); 388 document.getElementById("msg2").innerHTML = "Error:" + result.name + ", msg:" + result.message; 389 } else if (result instanceof Array) { 390 console.log("In html got message, Array"); 391 console.log("In html got message, Array length:" + result.length); 392 console.log("In html got message, Array[0]:" + (result[0])); 393 console.log("In html got message, typeof Array[0]:" + typeof(result[0])); 394 document.getElementById("msg2").innerHTML = "Array len:" + result.length + ", value:" + result; 395 } else { 396 console.log("In html got message, not any instance of support type"); 397 document.getElementById("msg").innerHTML = "not any instance of support type"; 398 } 399 } else { 400 console.log("In html got message, not support type"); 401 document.getElementById("msg").innerHTML = "not support type"; 402 } 403 } 404 h5Port.onmessageerror = (event) => { 405 console.error(`hwd In html Error receiving message: ${event}`); 406 }; 407 } 408 } 409}) 410 411// 使用h5Port往ets侧发送String类型的消息. 412function postStringToApp() { 413 if (h5Port) { 414 console.log("In html send string message"); 415 h5Port.postMessage("hello"); 416 console.log("In html send string message end"); 417 } else { 418 console.error("In html h5port is null, please init first"); 419 } 420} 421``` 422 423### close 424 425close(): void 426 427关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。 428 429**系统能力:** SystemCapability.Web.Webview.Core 430 431**示例:** 432 433```ts 434// xxx.ets 435import web_webview from '@ohos.web.webview'; 436import business_error from '@ohos.base'; 437 438@Entry 439@Component 440struct WebComponent { 441 controller: web_webview.WebviewController = new web_webview.WebviewController(); 442 msgPort: web_webview.WebMessagePort[] = []; 443 444 build() { 445 Column() { 446 // 先使用createWebMessagePorts创建端口。 447 Button('createWebMessagePorts') 448 .onClick(() => { 449 try { 450 this.msgPort = this.controller.createWebMessagePorts(); 451 console.log("createWebMessagePorts size:" + this.msgPort.length) 452 } catch (error) { 453 let e: business_error.BusinessError = error as business_error.BusinessError; 454 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 455 } 456 }) 457 Button('close') 458 .onClick(() => { 459 try { 460 if (this.msgPort && this.msgPort.length == 2) { 461 this.msgPort[1].close(); 462 } else { 463 console.error("msgPort is null, Please initialize first"); 464 } 465 } catch (error) { 466 let e: business_error.BusinessError = error as business_error.BusinessError; 467 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 468 } 469 }) 470 Web({ src: 'www.example.com', controller: this.controller }) 471 } 472 } 473} 474``` 475 476## WebviewController 477 478通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 479 480### initializeWebEngine 481 482static initializeWebEngine(): void 483 484在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。 485 486**系统能力:** SystemCapability.Web.Webview.Core 487 488**示例:** 489 490本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。 491 492```ts 493// xxx.ts 494import UIAbility from '@ohos.app.ability.UIAbility'; 495import web_webview from '@ohos.web.webview'; 496import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 497import Want from '@ohos.app.ability.Want'; 498 499export default class EntryAbility extends UIAbility { 500 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 501 console.log("EntryAbility onCreate") 502 web_webview.WebviewController.initializeWebEngine() 503 console.log("EntryAbility onCreate done") 504 } 505} 506``` 507 508### setHttpDns<sup>10+</sup> 509 510static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void 511 512设置Web组件是否使用HTTPDNS解析dns。 513 514**系统能力:** SystemCapability.Web.Webview.Core 515 516**参数:** 517 518| 参数名 | 类型 | 必填 | 说明 | 519| ------------------ | ------- | ---- | ------------- | 520| secureDnsMode | [SecureDnsMode](#securednsmode10) | 是 | 使用HTTPDNS的模式。| 521| secureDnsConfig | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 | 522 523**示例:** 524 525```ts 526// xxx.ts 527import UIAbility from '@ohos.app.ability.UIAbility'; 528import web_webview from '@ohos.web.webview'; 529import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 530import Want from '@ohos.app.ability.Want'; 531import business_error from '@ohos.base'; 532 533export default class EntryAbility extends UIAbility { 534 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 535 console.log("EntryAbility onCreate") 536 try { 537 web_webview.WebviewController.setHttpDns(web_webview.SecureDnsMode.AUTO, "https://example1.test") 538 } catch (error) { 539 let e: business_error.BusinessError = error as business_error.BusinessError; 540 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 541 } 542 543 AppStorage.setOrCreate("abilityWant", want); 544 console.log("EntryAbility onCreate done") 545 } 546} 547``` 548 549### setWebDebuggingAccess 550 551static setWebDebuggingAccess(webDebuggingAccess: boolean): void 552 553设置是否启用网页调试功能。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。 554 555**系统能力:** SystemCapability.Web.Webview.Core 556 557**参数:** 558 559| 参数名 | 类型 | 必填 | 说明 | 560| ------------------ | ------- | ---- | ------------- | 561| webDebuggingAccess | boolean | 是 | 设置是否启用网页调试功能。| 562 563**示例:** 564 565```ts 566// xxx.ets 567import web_webview from '@ohos.web.webview'; 568import business_error from '@ohos.base'; 569 570@Entry 571@Component 572struct WebComponent { 573 controller: web_webview.WebviewController = new web_webview.WebviewController(); 574 575 aboutToAppear(): void { 576 try { 577 web_webview.WebviewController.setWebDebuggingAccess(true); 578 } catch (error) { 579 let e: business_error.BusinessError = error as business_error.BusinessError; 580 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 581 } 582 } 583 584 build() { 585 Column() { 586 Web({ src: 'www.example.com', controller: this.controller }) 587 } 588 } 589} 590``` 591 592### loadUrl 593 594loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 595 596加载指定的URL。 597 598**系统能力:** SystemCapability.Web.Webview.Core 599 600**参数:** 601 602| 参数名 | 类型 | 必填 | 说明 | 603| ------- | ---------------- | ---- | :-------------------- | 604| url | string \| Resource | 是 | 需要加载的 URL。 | 605| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 606 607**错误码:** 608 609以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 610 611| 错误码ID | 错误信息 | 612| -------- | ------------------------------------------------------------ | 613| 17100001 | Init error. The WebviewController must be associated with a Web component. | 614| 17100002 | Invalid url. | 615| 17100003 | Invalid resource path or file type. | 616 617**示例:** 618 619```ts 620// xxx.ets 621import web_webview from '@ohos.web.webview'; 622import business_error from '@ohos.base'; 623 624@Entry 625@Component 626struct WebComponent { 627 controller: web_webview.WebviewController = new web_webview.WebviewController(); 628 629 build() { 630 Column() { 631 Button('loadUrl') 632 .onClick(() => { 633 try { 634 // 需要加载的URL是string类型。 635 this.controller.loadUrl('www.example.com'); 636 } catch (error) { 637 let e: business_error.BusinessError = error as business_error.BusinessError; 638 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 639 } 640 }) 641 Web({ src: 'www.example.com', controller: this.controller }) 642 } 643 } 644} 645``` 646 647```ts 648// xxx.ets 649import web_webview from '@ohos.web.webview'; 650import business_error from '@ohos.base'; 651 652@Entry 653@Component 654struct WebComponent { 655 controller: web_webview.WebviewController = new web_webview.WebviewController(); 656 657 build() { 658 Column() { 659 Button('loadUrl') 660 .onClick(() => { 661 try { 662 // 带参数headers。 663 this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]); 664 } catch (error) { 665 let e: business_error.BusinessError = error as business_error.BusinessError; 666 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 667 } 668 }) 669 Web({ src: 'www.example.com', controller: this.controller }) 670 } 671 } 672} 673``` 674 675加载本地网页,加载本地资源文件有三种方式。 676 6771.$rawfile方式。 678```ts 679// xxx.ets 680import web_webview from '@ohos.web.webview'; 681import business_error from '@ohos.base'; 682 683@Entry 684@Component 685struct WebComponent { 686 controller: web_webview.WebviewController = new web_webview.WebviewController(); 687 688 build() { 689 Column() { 690 Button('loadUrl') 691 .onClick(() => { 692 try { 693 // 通过$rawfile加载本地资源文件。 694 this.controller.loadUrl($rawfile('index.html')); 695 } catch (error) { 696 let e: business_error.BusinessError = error as business_error.BusinessError; 697 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 698 } 699 }) 700 Web({ src: 'www.example.com', controller: this.controller }) 701 } 702 } 703} 704``` 705 7062.resources协议。 707```ts 708// xxx.ets 709import web_webview from '@ohos.web.webview'; 710import business_error from '@ohos.base'; 711 712@Entry 713@Component 714struct WebComponent { 715 controller: web_webview.WebviewController = new web_webview.WebviewController(); 716 717 build() { 718 Column() { 719 Button('loadUrl') 720 .onClick(() => { 721 try { 722 // 通过resource协议加载本地资源文件。 723 this.controller.loadUrl("resource://rawfile/index.html"); 724 } catch (error) { 725 let e: business_error.BusinessError = error as business_error.BusinessError; 726 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 727 } 728 }) 729 Web({ src: 'www.example.com', controller: this.controller }) 730 } 731 } 732} 733``` 734 7353.通过沙箱路径加载本地文件,可以参考[web](../arkui-ts/ts-basic-components-web.md#web)加载沙箱路径的示例代码。 736 737加载的html文件。 738```html 739<!-- index.html --> 740<!DOCTYPE html> 741<html> 742 <body> 743 <p>Hello World</p> 744 </body> 745</html> 746``` 747 748### loadData 749 750loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void 751 752加载指定的数据。 753 754**系统能力:** SystemCapability.Web.Webview.Core 755 756**参数:** 757 758| 参数名 | 类型 | 必填 | 说明 | 759| ---------- | ------ | ---- | ------------------------------------------------------------ | 760| data | string | 是 | 按照"Base64"或者"URL"编码后的一段字符串。 | 761| mimeType | string | 是 | 媒体类型(MIME)。 | 762| encoding | string | 是 | 编码类型,具体为"Base64"或者"URL"编码。 | 763| baseUrl | string | 否 | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 | 764| historyUrl | string | 否 | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 | 765 766> **说明:** 767> 768> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。 769> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。 770 771**错误码:** 772 773以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 774 775| 错误码ID | 错误信息 | 776| -------- | ------------------------------------------------------------ | 777| 17100001 | Init error. The WebviewController must be associated with a Web component. | 778| 17100002 | Invalid url. | 779 780**示例:** 781 782```ts 783// xxx.ets 784import web_webview from '@ohos.web.webview'; 785import business_error from '@ohos.base'; 786 787@Entry 788@Component 789struct WebComponent { 790 controller: web_webview.WebviewController = new web_webview.WebviewController(); 791 792 build() { 793 Column() { 794 Button('loadData') 795 .onClick(() => { 796 try { 797 this.controller.loadData( 798 "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 799 "text/html", 800 "UTF-8" 801 ); 802 } catch (error) { 803 let e: business_error.BusinessError = error as business_error.BusinessError; 804 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 805 } 806 }) 807 Web({ src: 'www.example.com', controller: this.controller }) 808 } 809 } 810} 811``` 812 813加载本地资源 814```ts 815// xxx.ets 816import web_webview from '@ohos.web.webview'; 817import business_error from '@ohos.base'; 818 819@Entry 820@Component 821struct WebComponent { 822 controller: web_webview.WebviewController = new web_webview.WebviewController(); 823 updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>' 824 825 build() { 826 Column() { 827 Button('loadData') 828 .onClick(() => { 829 try { 830 this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " "); 831 } catch (error) { 832 let e: business_error.BusinessError = error as business_error.BusinessError; 833 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 834 } 835 }) 836 Web({ src: 'www.example.com', controller: this.controller }) 837 } 838 } 839} 840``` 841 842### accessForward 843 844accessForward(): boolean 845 846当前页面是否可前进,即当前页面是否有前进历史记录。 847 848**系统能力:** SystemCapability.Web.Webview.Core 849 850**返回值:** 851 852| 类型 | 说明 | 853| ------- | --------------------------------- | 854| boolean | 可以前进返回true,否则返回false。 | 855 856**错误码:** 857 858以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 859 860| 错误码ID | 错误信息 | 861| -------- | ------------------------------------------------------------ | 862| 17100001 | Init error. The WebviewController must be associated with a Web component. | 863 864**示例:** 865 866```ts 867// xxx.ets 868import web_webview from '@ohos.web.webview'; 869import business_error from '@ohos.base'; 870 871@Entry 872@Component 873struct WebComponent { 874 controller: web_webview.WebviewController = new web_webview.WebviewController(); 875 876 build() { 877 Column() { 878 Button('accessForward') 879 .onClick(() => { 880 try { 881 let result = this.controller.accessForward(); 882 console.log('result:' + result); 883 } catch (error) { 884 let e: business_error.BusinessError = error as business_error.BusinessError; 885 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 886 } 887 }) 888 Web({ src: 'www.example.com', controller: this.controller }) 889 } 890 } 891} 892``` 893 894### forward 895 896forward(): void 897 898按照历史栈,前进一个页面。一般结合accessForward一起使用。 899 900**系统能力:** SystemCapability.Web.Webview.Core 901 902**错误码:** 903 904以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 905 906| 错误码ID | 错误信息 | 907| -------- | ------------------------------------------------------------ | 908| 17100001 | Init error. The WebviewController must be associated with a Web component. | 909 910**示例:** 911 912```ts 913// xxx.ets 914import web_webview from '@ohos.web.webview'; 915import business_error from '@ohos.base'; 916 917@Entry 918@Component 919struct WebComponent { 920 controller: web_webview.WebviewController = new web_webview.WebviewController(); 921 922 build() { 923 Column() { 924 Button('forward') 925 .onClick(() => { 926 try { 927 this.controller.forward(); 928 } catch (error) { 929 let e: business_error.BusinessError = error as business_error.BusinessError; 930 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 931 } 932 }) 933 Web({ src: 'www.example.com', controller: this.controller }) 934 } 935 } 936} 937``` 938 939### accessBackward 940 941accessBackward(): boolean 942 943当前页面是否可后退,即当前页面是否有返回历史记录。 944 945**系统能力:** SystemCapability.Web.Webview.Core 946 947**返回值:** 948 949| 类型 | 说明 | 950| ------- | -------------------------------- | 951| boolean | 可以后退返回true,否则返回false。 | 952 953**错误码:** 954 955以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 956 957| 错误码ID | 错误信息 | 958| -------- | ------------------------------------------------------------ | 959| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 960 961**示例:** 962 963```ts 964// xxx.ets 965import web_webview from '@ohos.web.webview'; 966import business_error from '@ohos.base'; 967 968@Entry 969@Component 970struct WebComponent { 971 controller: web_webview.WebviewController = new web_webview.WebviewController(); 972 973 build() { 974 Column() { 975 Button('accessBackward') 976 .onClick(() => { 977 try { 978 let result = this.controller.accessBackward(); 979 console.log('result:' + result); 980 } catch (error) { 981 let e: business_error.BusinessError = error as business_error.BusinessError; 982 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 983 } 984 }) 985 Web({ src: 'www.example.com', controller: this.controller }) 986 } 987 } 988} 989``` 990 991### backward 992 993backward(): void 994 995按照历史栈,后退一个页面。一般结合accessBackward一起使用。 996 997**系统能力:** SystemCapability.Web.Webview.Core 998 999**错误码:** 1000 1001以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1002 1003| 错误码ID | 错误信息 | 1004| -------- | ------------------------------------------------------------ | 1005| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1006 1007**示例:** 1008 1009```ts 1010// xxx.ets 1011import web_webview from '@ohos.web.webview'; 1012import business_error from '@ohos.base'; 1013 1014@Entry 1015@Component 1016struct WebComponent { 1017 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1018 1019 build() { 1020 Column() { 1021 Button('backward') 1022 .onClick(() => { 1023 try { 1024 this.controller.backward(); 1025 } catch (error) { 1026 let e: business_error.BusinessError = error as business_error.BusinessError; 1027 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1028 } 1029 }) 1030 Web({ src: 'www.example.com', controller: this.controller }) 1031 } 1032 } 1033} 1034``` 1035 1036### onActive 1037 1038onActive(): void 1039 1040调用此接口通知Web组件进入前台激活状态。 1041 1042**系统能力:** SystemCapability.Web.Webview.Core 1043 1044**错误码:** 1045 1046以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1047 1048| 错误码ID | 错误信息 | 1049| -------- | ------------------------------------------------------------ | 1050| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1051 1052**示例:** 1053 1054```ts 1055// xxx.ets 1056import web_webview from '@ohos.web.webview'; 1057import business_error from '@ohos.base'; 1058 1059@Entry 1060@Component 1061struct WebComponent { 1062 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1063 1064 build() { 1065 Column() { 1066 Button('onActive') 1067 .onClick(() => { 1068 try { 1069 this.controller.onActive(); 1070 } catch (error) { 1071 let e: business_error.BusinessError = error as business_error.BusinessError; 1072 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1073 } 1074 }) 1075 Web({ src: 'www.example.com', controller: this.controller }) 1076 } 1077 } 1078} 1079``` 1080 1081### onInactive 1082 1083onInactive(): void 1084 1085调用此接口通知Web组件进入未激活状态。 1086 1087**系统能力:** SystemCapability.Web.Webview.Core 1088 1089**错误码:** 1090 1091以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1092 1093| 错误码ID | 错误信息 | 1094| -------- | ------------------------------------------------------------ | 1095| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1096 1097**示例:** 1098 1099```ts 1100// xxx.ets 1101import web_webview from '@ohos.web.webview'; 1102import business_error from '@ohos.base'; 1103 1104@Entry 1105@Component 1106struct WebComponent { 1107 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1108 1109 build() { 1110 Column() { 1111 Button('onInactive') 1112 .onClick(() => { 1113 try { 1114 this.controller.onInactive(); 1115 } catch (error) { 1116 let e: business_error.BusinessError = error as business_error.BusinessError; 1117 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1118 } 1119 }) 1120 Web({ src: 'www.example.com', controller: this.controller }) 1121 } 1122 } 1123} 1124``` 1125 1126### refresh 1127refresh(): void 1128 1129调用此接口通知Web组件刷新网页。 1130 1131**系统能力:** SystemCapability.Web.Webview.Core 1132 1133**错误码:** 1134 1135以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1136 1137| 错误码ID | 错误信息 | 1138| -------- | ------------------------------------------------------------ | 1139| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1140 1141**示例:** 1142 1143```ts 1144// xxx.ets 1145import web_webview from '@ohos.web.webview'; 1146import business_error from '@ohos.base'; 1147 1148@Entry 1149@Component 1150struct WebComponent { 1151 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1152 1153 build() { 1154 Column() { 1155 Button('refresh') 1156 .onClick(() => { 1157 try { 1158 this.controller.refresh(); 1159 } catch (error) { 1160 let e: business_error.BusinessError = error as business_error.BusinessError; 1161 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1162 } 1163 }) 1164 Web({ src: 'www.example.com', controller: this.controller }) 1165 } 1166 } 1167} 1168``` 1169 1170### accessStep 1171 1172accessStep(step: number): boolean 1173 1174当前页面是否可前进或者后退给定的step步。 1175 1176**系统能力:** SystemCapability.Web.Webview.Core 1177 1178**参数:** 1179 1180| 参数名 | 类型 | 必填 | 说明 | 1181| ------ | -------- | ---- | ------------------------------------------ | 1182| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 1183 1184**返回值:** 1185 1186| 类型 | 说明 | 1187| ------- | ------------------ | 1188| boolean | 页面是否前进或后退 | 1189 1190**错误码:** 1191 1192以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1193 1194| 错误码ID | 错误信息 | 1195| -------- | ------------------------------------------------------------ | 1196| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1197 1198**示例:** 1199 1200```ts 1201// xxx.ets 1202import web_webview from '@ohos.web.webview'; 1203import business_error from '@ohos.base'; 1204 1205@Entry 1206@Component 1207struct WebComponent { 1208 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1209 @State steps: number = 2; 1210 1211 build() { 1212 Column() { 1213 Button('accessStep') 1214 .onClick(() => { 1215 try { 1216 let result = this.controller.accessStep(this.steps); 1217 console.log('result:' + result); 1218 } catch (error) { 1219 let e: business_error.BusinessError = error as business_error.BusinessError; 1220 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1221 } 1222 }) 1223 Web({ src: 'www.example.com', controller: this.controller }) 1224 } 1225 } 1226} 1227``` 1228 1229### clearHistory 1230 1231clearHistory(): void 1232 1233删除所有前进后退记录。 1234 1235**系统能力:** SystemCapability.Web.Webview.Core 1236 1237**错误码:** 1238 1239以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1240 1241| 错误码ID | 错误信息 | 1242| -------- | ------------------------------------------------------------ | 1243| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1244 1245**示例:** 1246 1247```ts 1248// xxx.ets 1249import web_webview from '@ohos.web.webview'; 1250import business_error from '@ohos.base'; 1251 1252@Entry 1253@Component 1254struct WebComponent { 1255 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1256 1257 build() { 1258 Column() { 1259 Button('clearHistory') 1260 .onClick(() => { 1261 try { 1262 this.controller.clearHistory(); 1263 } catch (error) { 1264 let e: business_error.BusinessError = error as business_error.BusinessError; 1265 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1266 } 1267 }) 1268 Web({ src: 'www.example.com', controller: this.controller }) 1269 } 1270 } 1271} 1272``` 1273 1274### getHitTest 1275 1276getHitTest(): WebHitTestType 1277 1278获取当前被点击区域的元素类型。 1279 1280**系统能力:** SystemCapability.Web.Webview.Core 1281 1282**返回值:** 1283 1284| 类型 | 说明 | 1285| ------------------------------------------------------------ | ---------------------- | 1286| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 1287 1288**错误码:** 1289 1290以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1291 1292| 错误码ID | 错误信息 | 1293| -------- | ------------------------------------------------------------ | 1294| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1295 1296**示例:** 1297 1298```ts 1299// xxx.ets 1300import web_webview from '@ohos.web.webview'; 1301import business_error from '@ohos.base'; 1302 1303@Entry 1304@Component 1305struct WebComponent { 1306 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1307 1308 build() { 1309 Column() { 1310 Button('getHitTest') 1311 .onClick(() => { 1312 try { 1313 let hitTestType = this.controller.getHitTest(); 1314 console.log("hitTestType: " + hitTestType); 1315 } catch (error) { 1316 let e: business_error.BusinessError = error as business_error.BusinessError; 1317 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1318 } 1319 }) 1320 Web({ src: 'www.example.com', controller: this.controller }) 1321 } 1322 } 1323} 1324``` 1325 1326### registerJavaScriptProxy 1327 1328registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>): void 1329 1330注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 1331 1332**系统能力:** SystemCapability.Web.Webview.Core 1333 1334**参数:** 1335 1336| 参数名 | 类型 | 必填 | 说明 | 1337| ---------- | -------------- | ---- | ------------------------------------------------------------ | 1338| object | object | 是 | 参与注册的应用侧JavaScript对象。只能声明方法,不能声明属性 。其中方法的参数和返回类型只能为string,number,boolean | 1339| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 1340| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的方法。 | 1341 1342**错误码:** 1343 1344以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1345 1346| 错误码ID | 错误信息 | 1347| -------- | ------------------------------------------------------------ | 1348| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1349 1350**示例:** 1351 1352```ts 1353// xxx.ets 1354import web_webview from '@ohos.web.webview'; 1355import business_error from '@ohos.base'; 1356 1357class testObj { 1358 constructor() { 1359 } 1360 1361 test(): string { 1362 return "ArkUI Web Component"; 1363 } 1364 1365 toString(): void { 1366 console.log('Web Component toString'); 1367 } 1368} 1369 1370@Entry 1371@Component 1372struct Index { 1373 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1374 @State testObjtest: testObj = new testObj(); 1375 build() { 1376 Column() { 1377 Button('refresh') 1378 .onClick(() => { 1379 try { 1380 this.controller.refresh(); 1381 } catch (error) { 1382 let e: business_error.BusinessError = error as business_error.BusinessError; 1383 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1384 } 1385 }) 1386 Button('Register JavaScript To Window') 1387 .onClick(() => { 1388 try { 1389 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString"]); 1390 } catch (error) { 1391 let e: business_error.BusinessError = error as business_error.BusinessError; 1392 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1393 } 1394 }) 1395 Web({ src: $rawfile('index.html'), controller: this.controller }) 1396 .javaScriptAccess(true) 1397 } 1398 } 1399} 1400``` 1401 1402加载的html文件。 1403```html 1404<!-- index.html --> 1405<!DOCTYPE html> 1406<html> 1407 <meta charset="utf-8"> 1408 <body> 1409 <button type="button" onclick="htmlTest()">Click Me!</button> 1410 <p id="demo"></p> 1411 </body> 1412 <script type="text/javascript"> 1413 function htmlTest() { 1414 let str=objName.test(); 1415 document.getElementById("demo").innerHTML=str; 1416 console.log('objName.test result:'+ str) 1417 } 1418</script> 1419</html> 1420``` 1421 1422### runJavaScript 1423 1424runJavaScript(script: string, callback : AsyncCallback\<string>): void 1425 1426异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1427 1428**系统能力:** SystemCapability.Web.Webview.Core 1429 1430**参数:** 1431 1432| 参数名 | 类型 | 必填 | 说明 | 1433| -------- | -------------------- | ---- | ---------------------------- | 1434| script | string | 是 | JavaScript脚本。 | 1435| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1436 1437**错误码:** 1438 1439以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1440 1441| 错误码ID | 错误信息 | 1442| -------- | ------------------------------------------------------------ | 1443| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1444 1445**示例:** 1446 1447```ts 1448import web_webview from '@ohos.web.webview'; 1449import business_error from '@ohos.base'; 1450 1451@Entry 1452@Component 1453struct WebComponent { 1454 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1455 @State webResult: string = '' 1456 1457 build() { 1458 Column() { 1459 Text(this.webResult).fontSize(20) 1460 Web({ src: $rawfile('index.html'), controller: this.controller }) 1461 .javaScriptAccess(true) 1462 .onPageEnd(e => { 1463 try { 1464 this.controller.runJavaScript( 1465 'test()', 1466 (error, result) => { 1467 if (error) { 1468 console.info(`run JavaScript error: ` + JSON.stringify(error)) 1469 return; 1470 } 1471 if (result) { 1472 this.webResult = result 1473 console.info(`The test() return value is: ${result}`) 1474 } 1475 }); 1476 if (e) { 1477 console.info('url: ', e.url); 1478 } 1479 } catch (error) { 1480 let e: business_error.BusinessError = error as business_error.BusinessError; 1481 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1482 } 1483 }) 1484 } 1485 } 1486} 1487``` 1488 1489加载的html文件。 1490```html 1491<!-- index.html --> 1492<!DOCTYPE html> 1493<html> 1494 <meta charset="utf-8"> 1495 <body> 1496 Hello world! 1497 </body> 1498 <script type="text/javascript"> 1499 function test() { 1500 console.log('Ark WebComponent') 1501 return "This value is from index.html" 1502 } 1503 </script> 1504</html> 1505``` 1506 1507### runJavaScript 1508 1509runJavaScript(script: string): Promise\<string> 1510 1511异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1512 1513**系统能力:** SystemCapability.Web.Webview.Core 1514 1515**参数:** 1516 1517| 参数名 | 类型 | 必填 | 说明 | 1518| ------ | -------- | ---- | ---------------- | 1519| script | string | 是 | JavaScript脚本。 | 1520 1521**返回值:** 1522 1523| 类型 | 说明 | 1524| --------------- | --------------------------------------------------- | 1525| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1526 1527**错误码:** 1528 1529以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1530 1531| 错误码ID | 错误信息 | 1532| -------- | ------------------------------------------------------------ | 1533| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1534 1535**示例:** 1536 1537```ts 1538// xxx.ets 1539import web_webview from '@ohos.web.webview'; 1540import business_error from '@ohos.base'; 1541 1542@Entry 1543@Component 1544struct WebComponent { 1545 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1546 1547 build() { 1548 Column() { 1549 Web({ src: $rawfile('index.html'), controller: this.controller }) 1550 .javaScriptAccess(true) 1551 .onPageEnd(e => { 1552 try { 1553 this.controller.runJavaScript('test()') 1554 .then((result) => { 1555 console.log('result: ' + result); 1556 }) 1557 .catch((error: business_error.BusinessError) => { 1558 console.error("error: " + error); 1559 }) 1560 if (e) { 1561 console.info('url: ', e.url); 1562 } 1563 } catch (error) { 1564 let e: business_error.BusinessError = error as business_error.BusinessError; 1565 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1566 } 1567 }) 1568 } 1569 } 1570} 1571``` 1572 1573加载的html文件。 1574```html 1575<!-- index.html --> 1576<!DOCTYPE html> 1577<html> 1578 <meta charset="utf-8"> 1579 <body> 1580 Hello world! 1581 </body> 1582 <script type="text/javascript"> 1583 function test() { 1584 console.log('Ark WebComponent') 1585 return "This value is from index.html" 1586 } 1587 </script> 1588</html> 1589``` 1590 1591### runJavaScriptExt<sup>10+</sup> 1592 1593runJavaScriptExt(script: string, callback : AsyncCallback\<JsMessageExt>): void 1594 1595异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1596 1597**系统能力:** SystemCapability.Web.Webview.Core 1598 1599**参数:** 1600 1601| 参数名 | 类型 | 必填 | 说明 | 1602| -------- | -------------------- | ---- | ---------------------------- | 1603| script | string | 是 | JavaScript脚本。 | 1604| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是 | 回调执行JavaScript脚本结果。 | 1605 1606**错误码:** 1607 1608以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1609 1610| 错误码ID | 错误信息 | 1611| -------- | ------------------------------------------------------------ | 1612| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1613 1614**示例:** 1615 1616```ts 1617import web_webview from '@ohos.web.webview'; 1618import business_error from '@ohos.base'; 1619 1620@Entry 1621@Component 1622struct WebComponent { 1623 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1624 @State msg1: string = '' 1625 @State msg2: string = '' 1626 1627 build() { 1628 Column() { 1629 Text(this.msg1).fontSize(20) 1630 Text(this.msg2).fontSize(20) 1631 Web({ src: $rawfile('index.html'), controller: this.controller }) 1632 .javaScriptAccess(true) 1633 .onPageEnd(e => { 1634 try { 1635 this.controller.runJavaScriptExt( 1636 'test()', 1637 (error, result) => { 1638 if (error) { 1639 console.info(`run JavaScript error: ` + JSON.stringify(error)) 1640 return; 1641 } 1642 if (result) { 1643 try { 1644 let type = result.getType(); 1645 switch (type) { 1646 case web_webview.JsMessageType.STRING: { 1647 this.msg1 = "result type:" + typeof (result.getString()); 1648 this.msg2 = "result getString:" + ((result.getString())); 1649 break; 1650 } 1651 case web_webview.JsMessageType.NUMBER: { 1652 this.msg1 = "result type:" + typeof (result.getNumber()); 1653 this.msg2 = "result getNumber:" + ((result.getNumber())); 1654 break; 1655 } 1656 case web_webview.JsMessageType.BOOLEAN: { 1657 this.msg1 = "result type:" + typeof (result.getBoolean()); 1658 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 1659 break; 1660 } 1661 case web_webview.JsMessageType.ARRAY_BUFFER: { 1662 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 1663 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 1664 break; 1665 } 1666 case web_webview.JsMessageType.ARRAY: { 1667 this.msg1 = "result type:" + typeof (result.getArray()); 1668 this.msg2 = "result getArray:" + result.getArray(); 1669 break; 1670 } 1671 default: { 1672 this.msg1 = "default break, type:" + type; 1673 break; 1674 } 1675 } 1676 } 1677 catch (resError) { 1678 let e: business_error.BusinessError = resError as business_error.BusinessError; 1679 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1680 } 1681 } 1682 }); 1683 if (e) { 1684 console.info('url: ', e.url); 1685 } 1686 } catch (error) { 1687 let e: business_error.BusinessError = error as business_error.BusinessError; 1688 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1689 } 1690 }) 1691 } 1692 } 1693} 1694``` 1695 1696加载的html文件。 1697```html 1698<!-- index.html --> 1699<!DOCTYPE html> 1700<html lang="en-gb"> 1701<body> 1702<h1>run JavaScript Ext demo</h1> 1703</body> 1704<script type="text/javascript"> 1705function test() { 1706 return "hello, world"; 1707} 1708</script> 1709</html> 1710``` 1711 1712### runJavaScriptExt<sup>10+</sup> 1713 1714runJavaScriptExt(script: string): Promise\<JsMessageExt> 1715 1716异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1717 1718**系统能力:** SystemCapability.Web.Webview.Core 1719 1720**参数:** 1721 1722| 参数名 | 类型 | 必填 | 说明 | 1723| ------ | -------- | ---- | ---------------- | 1724| script | string | 是 | JavaScript脚本。 | 1725 1726**返回值:** 1727 1728| 类型 | 说明 | 1729| --------------- | --------------------------------------------------- | 1730| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 | 1731 1732**错误码:** 1733 1734以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1735 1736| 错误码ID | 错误信息 | 1737| -------- | ------------------------------------------------------------ | 1738| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1739 1740**示例:** 1741 1742```ts 1743// xxx.ets 1744import web_webview from '@ohos.web.webview'; 1745import business_error from '@ohos.base'; 1746 1747@Entry 1748@Component 1749struct WebComponent { 1750 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1751 @State webResult: string = ''; 1752 @State msg1: string = '' 1753 @State msg2: string = '' 1754 1755 build() { 1756 Column() { 1757 Text(this.webResult).fontSize(20) 1758 Text(this.msg1).fontSize(20) 1759 Text(this.msg2).fontSize(20) 1760 Web({ src: $rawfile('index.html'), controller: this.controller }) 1761 .javaScriptAccess(true) 1762 .onPageEnd(() => { 1763 this.controller.runJavaScriptExt('test()') 1764 .then((result) => { 1765 try { 1766 let type = result.getType(); 1767 switch (type) { 1768 case web_webview.JsMessageType.STRING: { 1769 this.msg1 = "result type:" + typeof (result.getString()); 1770 this.msg2 = "result getString:" + ((result.getString())); 1771 break; 1772 } 1773 case web_webview.JsMessageType.NUMBER: { 1774 this.msg1 = "result type:" + typeof (result.getNumber()); 1775 this.msg2 = "result getNumber:" + ((result.getNumber())); 1776 break; 1777 } 1778 case web_webview.JsMessageType.BOOLEAN: { 1779 this.msg1 = "result type:" + typeof (result.getBoolean()); 1780 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 1781 break; 1782 } 1783 case web_webview.JsMessageType.ARRAY_BUFFER: { 1784 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 1785 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 1786 break; 1787 } 1788 case web_webview.JsMessageType.ARRAY: { 1789 this.msg1 = "result type:" + typeof (result.getArray()); 1790 this.msg2 = "result getArray:" + result.getArray(); 1791 break; 1792 } 1793 default: { 1794 this.msg1 = "default break, type:" + type; 1795 break; 1796 } 1797 } 1798 } 1799 catch (resError) { 1800 let e: business_error.BusinessError = resError as business_error.BusinessError; 1801 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1802 } 1803 }) 1804 .catch((error: business_error.BusinessError) => { 1805 console.error("error: " + error); 1806 }) 1807 }) 1808 } 1809 } 1810} 1811``` 1812 1813加载的html文件。 1814```html 1815<!-- index.html --> 1816<!DOCTYPE html> 1817<html lang="en-gb"> 1818<body> 1819<h1>run JavaScript Ext demo</h1> 1820</body> 1821<script type="text/javascript"> 1822function test() { 1823 return "hello, world"; 1824} 1825</script> 1826</html> 1827``` 1828 1829### deleteJavaScriptRegister 1830 1831deleteJavaScriptRegister(name: string): void 1832 1833删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。 1834 1835**系统能力:** SystemCapability.Web.Webview.Core 1836 1837**参数:** 1838 1839| 参数名 | 类型 | 必填 | 说明 | 1840| ------ | -------- | ---- | ---- | 1841| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 1842 1843**错误码:** 1844 1845以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1846 1847| 错误码ID | 错误信息 | 1848| -------- | ------------------------------------------------------------ | 1849| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1850| 17100008 | Cannot delete JavaScriptProxy. | 1851 1852**示例:** 1853 1854```ts 1855// xxx.ets 1856import web_webview from '@ohos.web.webview'; 1857import business_error from '@ohos.base'; 1858 1859class testObj { 1860 constructor() { 1861 } 1862 1863 test(): string { 1864 return "ArkUI Web Component"; 1865 } 1866 1867 toString(): void { 1868 console.log('Web Component toString'); 1869 } 1870} 1871 1872@Entry 1873@Component 1874struct WebComponent { 1875 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1876 @State testObjtest: testObj = new testObj(); 1877 @State name: string = 'objName'; 1878 build() { 1879 Column() { 1880 Button('refresh') 1881 .onClick(() => { 1882 try { 1883 this.controller.refresh(); 1884 } catch (error) { 1885 let e: business_error.BusinessError = error as business_error.BusinessError; 1886 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1887 } 1888 }) 1889 Button('Register JavaScript To Window') 1890 .onClick(() => { 1891 try { 1892 this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]); 1893 } catch (error) { 1894 let e: business_error.BusinessError = error as business_error.BusinessError; 1895 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1896 } 1897 }) 1898 Button('deleteJavaScriptRegister') 1899 .onClick(() => { 1900 try { 1901 this.controller.deleteJavaScriptRegister(this.name); 1902 } catch (error) { 1903 let e: business_error.BusinessError = error as business_error.BusinessError; 1904 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1905 } 1906 }) 1907 Web({ src: $rawfile('index.html'), controller: this.controller }) 1908 .javaScriptAccess(true) 1909 } 1910 } 1911} 1912``` 1913 1914加载的html文件。 1915```html 1916<!-- index.html --> 1917<!DOCTYPE html> 1918<html> 1919 <meta charset="utf-8"> 1920 <body> 1921 <button type="button" onclick="htmlTest()">Click Me!</button> 1922 <p id="demo"></p> 1923 </body> 1924 <script type="text/javascript"> 1925 function htmlTest() { 1926 let str=objName.test(); 1927 document.getElementById("demo").innerHTML=str; 1928 console.log('objName.test result:'+ str) 1929 } 1930</script> 1931</html> 1932``` 1933 1934### zoom 1935 1936zoom(factor: number): void 1937 1938调整当前网页的缩放比例。 1939 1940**系统能力:** SystemCapability.Web.Webview.Core 1941 1942**参数:** 1943 1944| 参数名 | 类型 | 必填 | 说明 | 1945| ------ | -------- | ---- | ------------------------------------------------------------ | 1946| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 | 1947 1948**错误码:** 1949 1950以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 1951 1952| 错误码ID | 错误信息 | 1953| -------- | ------------------------------------------------------------ | 1954| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 1955| 17100004 | Function not enable. | 1956 1957**示例:** 1958 1959```ts 1960// xxx.ets 1961import web_webview from '@ohos.web.webview'; 1962import business_error from '@ohos.base'; 1963 1964@Entry 1965@Component 1966struct WebComponent { 1967 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1968 @State factor: number = 1; 1969 1970 build() { 1971 Column() { 1972 Button('zoom') 1973 .onClick(() => { 1974 try { 1975 this.controller.zoom(this.factor); 1976 } catch (error) { 1977 let e: business_error.BusinessError = error as business_error.BusinessError; 1978 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1979 } 1980 }) 1981 Web({ src: 'www.example.com', controller: this.controller }) 1982 } 1983 } 1984} 1985``` 1986 1987### searchAllAsync 1988 1989searchAllAsync(searchString: string): void 1990 1991异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](../arkui-ts/ts-basic-components-web.md#onsearchresultreceive9)异步返回。 1992 1993**系统能力:** SystemCapability.Web.Webview.Core 1994 1995**参数:** 1996 1997| 参数名 | 类型 | 必填 | 说明 | 1998| ------------ | -------- | ---- | -------------- | 1999| searchString | string | 是 | 查找的关键字。 | 2000 2001**错误码:** 2002 2003以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2004 2005| 错误码ID | 错误信息 | 2006| -------- | ------------------------------------------------------------ | 2007| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2008 2009**示例:** 2010 2011```ts 2012// xxx.ets 2013import web_webview from '@ohos.web.webview'; 2014import business_error from '@ohos.base'; 2015 2016@Entry 2017@Component 2018struct WebComponent { 2019 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2020 @State searchString: string = "Hello World"; 2021 2022 build() { 2023 Column() { 2024 Button('searchString') 2025 .onClick(() => { 2026 try { 2027 this.controller.searchAllAsync(this.searchString); 2028 } catch (error) { 2029 let e: business_error.BusinessError = error as business_error.BusinessError; 2030 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2031 } 2032 }) 2033 Web({ src: $rawfile('index.html'), controller: this.controller }) 2034 .onSearchResultReceive(ret => { 2035 if (ret) { 2036 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 2037 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 2038 } 2039 }) 2040 } 2041 } 2042} 2043``` 2044 2045加载的html文件。 2046```html 2047<!-- index.html --> 2048<!DOCTYPE html> 2049<html> 2050 <body> 2051 <p>Hello World Highlight Hello World</p> 2052 </body> 2053</html> 2054``` 2055 2056### clearMatches 2057 2058clearMatches(): void 2059 2060清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 2061 2062**系统能力:** SystemCapability.Web.Webview.Core 2063 2064**错误码:** 2065 2066以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2067 2068| 错误码ID | 错误信息 | 2069| -------- | ------------------------------------------------------------ | 2070| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2071 2072**示例:** 2073 2074```ts 2075// xxx.ets 2076import web_webview from '@ohos.web.webview'; 2077import business_error from '@ohos.base'; 2078 2079@Entry 2080@Component 2081struct WebComponent { 2082 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2083 2084 build() { 2085 Column() { 2086 Button('clearMatches') 2087 .onClick(() => { 2088 try { 2089 this.controller.clearMatches(); 2090 } catch (error) { 2091 let e: business_error.BusinessError = error as business_error.BusinessError; 2092 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2093 } 2094 }) 2095 Web({ src: $rawfile('index.html'), controller: this.controller }) 2096 } 2097 } 2098} 2099``` 2100 2101加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2102 2103### searchNext 2104 2105searchNext(forward: boolean): void 2106 2107滚动到下一个匹配的查找结果并高亮。 2108 2109**系统能力:** SystemCapability.Web.Webview.Core 2110 2111**参数:** 2112 2113| 参数名 | 类型 | 必填 | 说明 | 2114| ------- | -------- | ---- | ---------------------- | 2115| forward | boolean | 是 | 从前向后或者逆向查找。 | 2116 2117**错误码:** 2118 2119以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2120 2121| 错误码ID | 错误信息 | 2122| -------- | ------------------------------------------------------------ | 2123| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2124 2125**示例:** 2126 2127```ts 2128// xxx.ets 2129import web_webview from '@ohos.web.webview'; 2130import business_error from '@ohos.base'; 2131 2132@Entry 2133@Component 2134struct WebComponent { 2135 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2136 2137 build() { 2138 Column() { 2139 Button('searchNext') 2140 .onClick(() => { 2141 try { 2142 this.controller.searchNext(true); 2143 } catch (error) { 2144 let e: business_error.BusinessError = error as business_error.BusinessError; 2145 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2146 } 2147 }) 2148 Web({ src: $rawfile('index.html'), controller: this.controller }) 2149 } 2150 } 2151} 2152``` 2153 2154加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2155 2156### clearSslCache 2157 2158clearSslCache(): void 2159 2160清除Web组件记录的SSL证书错误事件对应的用户操作行为。 2161 2162**系统能力:** SystemCapability.Web.Webview.Core 2163 2164**错误码:** 2165 2166以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2167 2168| 错误码ID | 错误信息 | 2169| -------- | ------------------------------------------------------------ | 2170| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2171 2172**示例:** 2173 2174```ts 2175// xxx.ets 2176import web_webview from '@ohos.web.webview'; 2177import business_error from '@ohos.base'; 2178 2179@Entry 2180@Component 2181struct WebComponent { 2182 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2183 2184 build() { 2185 Column() { 2186 Button('clearSslCache') 2187 .onClick(() => { 2188 try { 2189 this.controller.clearSslCache(); 2190 } catch (error) { 2191 let e: business_error.BusinessError = error as business_error.BusinessError; 2192 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2193 } 2194 }) 2195 Web({ src: 'www.example.com', controller: this.controller }) 2196 } 2197 } 2198} 2199``` 2200 2201### clearClientAuthenticationCache 2202 2203clearClientAuthenticationCache(): void 2204 2205清除Web组件记录的客户端证书请求事件对应的用户操作行为。 2206 2207**系统能力:** SystemCapability.Web.Webview.Core 2208 2209**错误码:** 2210 2211以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2212 2213| 错误码ID | 错误信息 | 2214| -------- | ------------------------------------------------------------ | 2215| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 2216 2217**示例:** 2218 2219```ts 2220// xxx.ets 2221import web_webview from '@ohos.web.webview'; 2222import business_error from '@ohos.base'; 2223 2224@Entry 2225@Component 2226struct WebComponent { 2227 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2228 2229 build() { 2230 Column() { 2231 Button('clearClientAuthenticationCache') 2232 .onClick(() => { 2233 try { 2234 this.controller.clearClientAuthenticationCache(); 2235 } catch (error) { 2236 let e: business_error.BusinessError = error as business_error.BusinessError; 2237 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2238 } 2239 }) 2240 Web({ src: 'www.example.com', controller: this.controller }) 2241 } 2242 } 2243} 2244``` 2245 2246### createWebMessagePorts 2247 2248createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort> 2249 2250创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 2251 2252**系统能力:** SystemCapability.Web.Webview.Core 2253 2254**参数:** 2255 2256| 参数名 | 类型 | 必填 | 说明 | 2257| ------ | ---------------------- | ---- | :------------------------------| 2258| isExtentionType<sup>10+</sup> | boolean | 否 | 是否使用扩展增强接口,默认false不使用。 从API version 10开始,该接口支持此参数。| 2259 2260**返回值:** 2261 2262| 类型 | 说明 | 2263| ---------------------- | ----------------- | 2264| [WebMessagePort](#webmessageport) | web消息端口列表。 | 2265 2266**错误码:** 2267 2268以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2269 2270| 错误码ID | 错误信息 | 2271| -------- | ------------------------------------------------------------ | 2272| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2273 2274**示例:** 2275 2276 ```ts 2277// xxx.ets 2278import web_webview from '@ohos.web.webview'; 2279import business_error from '@ohos.base'; 2280 2281@Entry 2282@Component 2283struct WebComponent { 2284 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2285 ports: web_webview.WebMessagePort[] = []; 2286 2287 build() { 2288 Column() { 2289 Button('createWebMessagePorts') 2290 .onClick(() => { 2291 try { 2292 this.ports = this.controller.createWebMessagePorts(); 2293 console.log("createWebMessagePorts size:" + this.ports.length) 2294 } catch (error) { 2295 let e: business_error.BusinessError = error as business_error.BusinessError; 2296 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2297 } 2298 }) 2299 Web({ src: 'www.example.com', controller: this.controller }) 2300 } 2301 } 2302} 2303 ``` 2304 2305### postMessage 2306 2307postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 2308 2309发送Web消息端口到HTML。 2310 2311**系统能力:** SystemCapability.Web.Webview.Core 2312 2313**参数:** 2314 2315| 参数名 | 类型 | 必填 | 说明 | 2316| ------ | ---------------------- | ---- | :------------------------------- | 2317| name | string | 是 | 要发送的消息名称。 | 2318| ports | Array\<WebMessagePort> | 是 | 要发送的消息端口。 | 2319| uri | string | 是 | 接收该消息的URI。 | 2320 2321**错误码:** 2322 2323以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2324 2325| 错误码ID | 错误信息 | 2326| -------- | ------------------------------------------------------------ | 2327| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2328 2329**示例:** 2330 2331```ts 2332// xxx.ets 2333import web_webview from '@ohos.web.webview'; 2334import business_error from '@ohos.base'; 2335 2336@Entry 2337@Component 2338struct WebComponent { 2339 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2340 ports: web_webview.WebMessagePort[] = []; 2341 @State sendFromEts: string = 'Send this message from ets to HTML'; 2342 @State receivedFromHtml: string = 'Display received message send from HTML'; 2343 2344 build() { 2345 Column() { 2346 // 展示接收到的来自HTML的内容 2347 Text(this.receivedFromHtml) 2348 // 输入框的内容发送到html 2349 TextInput({ placeholder: 'Send this message from ets to HTML' }) 2350 .onChange((value: string) => { 2351 this.sendFromEts = value; 2352 }) 2353 2354 Button('postMessage') 2355 .onClick(() => { 2356 try { 2357 // 1、创建两个消息端口。 2358 this.ports = this.controller.createWebMessagePorts(); 2359 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 2360 this.ports[1].onMessageEvent((result: web_webview.WebMessage) => { 2361 let msg = 'Got msg from HTML:'; 2362 if (typeof(result) == "string") { 2363 console.log("received string message from html5, string is:" + result); 2364 msg = msg + result; 2365 } else if (typeof(result) == "object") { 2366 if (result instanceof ArrayBuffer) { 2367 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2368 msg = msg + "lenght is " + result.byteLength; 2369 } else { 2370 console.log("not support"); 2371 } 2372 } else { 2373 console.log("not support"); 2374 } 2375 this.receivedFromHtml = msg; 2376 }) 2377 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 2378 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 2379 } catch (error) { 2380 let e: business_error.BusinessError = error as business_error.BusinessError; 2381 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2382 } 2383 }) 2384 2385 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 2386 Button('SendDataToHTML') 2387 .onClick(() => { 2388 try { 2389 if (this.ports && this.ports[1]) { 2390 this.ports[1].postMessageEvent(this.sendFromEts); 2391 } else { 2392 console.error(`ports is null, Please initialize first`); 2393 } 2394 } catch (error) { 2395 let e: business_error.BusinessError = error as business_error.BusinessError; 2396 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2397 } 2398 }) 2399 Web({ src: $rawfile('index.html'), controller: this.controller }) 2400 } 2401 } 2402} 2403``` 2404 2405加载的html文件。 2406```html 2407<!--index.html--> 2408<!DOCTYPE html> 2409<html> 2410<head> 2411 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 2412 <title>WebView Message Port Demo</title> 2413</head> 2414 2415 <body> 2416 <h1>WebView Message Port Demo</h1> 2417 <div> 2418 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 2419 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 2420 </div> 2421 <p class="output">display received message send from ets</p> 2422 </body> 2423 <script src="xxx.js"></script> 2424</html> 2425``` 2426 2427```js 2428//xxx.js 2429var h5Port; 2430var output = document.querySelector('.output'); 2431window.addEventListener('message', function (event) { 2432 if (event.data == '__init_port__') { 2433 if (event.ports[0] != null) { 2434 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 2435 h5Port.onmessage = function (event) { 2436 // 2. 接收ets侧发送过来的消息. 2437 var msg = 'Got message from ets:'; 2438 var result = event.data; 2439 if (typeof(result) == "string") { 2440 console.log("received string message from html5, string is:" + result); 2441 msg = msg + result; 2442 } else if (typeof(result) == "object") { 2443 if (result instanceof ArrayBuffer) { 2444 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2445 msg = msg + "lenght is " + result.byteLength; 2446 } else { 2447 console.log("not support"); 2448 } 2449 } else { 2450 console.log("not support"); 2451 } 2452 output.innerHTML = msg; 2453 } 2454 } 2455 } 2456}) 2457 2458// 3. 使用h5Port往ets侧发送消息. 2459function PostMsgToEts(data) { 2460 if (h5Port) { 2461 h5Port.postMessage(data); 2462 } else { 2463 console.error("h5Port is null, Please initialize first"); 2464 } 2465} 2466``` 2467 2468### requestFocus 2469 2470requestFocus(): void 2471 2472使当前web页面获取焦点。 2473 2474**系统能力:** SystemCapability.Web.Webview.Core 2475 2476**错误码:** 2477 2478以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2479 2480| 错误码ID | 错误信息 | 2481| -------- | ------------------------------------------------------------ | 2482| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2483 2484**示例:** 2485 2486```ts 2487// xxx.ets 2488import web_webview from '@ohos.web.webview'; 2489import business_error from '@ohos.base'; 2490 2491@Entry 2492@Component 2493struct WebComponent { 2494 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2495 2496 build() { 2497 Column() { 2498 Button('requestFocus') 2499 .onClick(() => { 2500 try { 2501 this.controller.requestFocus(); 2502 } catch (error) { 2503 let e: business_error.BusinessError = error as business_error.BusinessError; 2504 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2505 } 2506 }); 2507 Web({ src: 'www.example.com', controller: this.controller }) 2508 } 2509 } 2510} 2511``` 2512 2513### zoomIn 2514 2515zoomIn(): void 2516 2517调用此接口将当前网页进行放大,比例为20%。 2518 2519**系统能力:** SystemCapability.Web.Webview.Core 2520 2521**错误码:** 2522 2523以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2524 2525| 错误码ID | 错误信息 | 2526| -------- | ------------------------------------------------------------ | 2527| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2528| 17100004 | Function not enable. | 2529 2530**示例:** 2531 2532```ts 2533// xxx.ets 2534import web_webview from '@ohos.web.webview'; 2535import business_error from '@ohos.base'; 2536 2537@Entry 2538@Component 2539struct WebComponent { 2540 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2541 2542 build() { 2543 Column() { 2544 Button('zoomIn') 2545 .onClick(() => { 2546 try { 2547 this.controller.zoomIn(); 2548 } catch (error) { 2549 let e: business_error.BusinessError = error as business_error.BusinessError; 2550 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2551 } 2552 }) 2553 Web({ src: 'www.example.com', controller: this.controller }) 2554 } 2555 } 2556} 2557``` 2558 2559### zoomOut 2560 2561zoomOut(): void 2562 2563调用此接口将当前网页进行缩小,比例为20%。 2564 2565**系统能力:** SystemCapability.Web.Webview.Core 2566 2567**错误码:** 2568 2569以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2570 2571| 错误码ID | 错误信息 | 2572| -------- | ------------------------------------------------------------ | 2573| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2574| 17100004 | Function not enable. | 2575 2576**示例:** 2577 2578```ts 2579// xxx.ets 2580import web_webview from '@ohos.web.webview'; 2581import business_error from '@ohos.base'; 2582 2583@Entry 2584@Component 2585struct WebComponent { 2586 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2587 2588 build() { 2589 Column() { 2590 Button('zoomOut') 2591 .onClick(() => { 2592 try { 2593 this.controller.zoomOut(); 2594 } catch (error) { 2595 let e: business_error.BusinessError = error as business_error.BusinessError; 2596 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2597 } 2598 }) 2599 Web({ src: 'www.example.com', controller: this.controller }) 2600 } 2601 } 2602} 2603``` 2604 2605### getHitTestValue 2606 2607getHitTestValue(): HitTestValue 2608 2609获取当前被点击区域的元素信息。 2610 2611**系统能力:** SystemCapability.Web.Webview.Core 2612 2613**返回值:** 2614 2615| 类型 | 说明 | 2616| ------------ | -------------------- | 2617| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 2618 2619**错误码:** 2620 2621以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2622 2623| 错误码ID | 错误信息 | 2624| -------- | ------------------------------------------------------------ | 2625| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2626 2627**示例:** 2628 2629```ts 2630// xxx.ets 2631import web_webview from '@ohos.web.webview'; 2632import business_error from '@ohos.base'; 2633 2634@Entry 2635@Component 2636struct WebComponent { 2637 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2638 2639 build() { 2640 Column() { 2641 Button('getHitTestValue') 2642 .onClick(() => { 2643 try { 2644 let hitValue = this.controller.getHitTestValue(); 2645 console.log("hitType: " + hitValue.type); 2646 console.log("extra: " + hitValue.extra); 2647 } catch (error) { 2648 let e: business_error.BusinessError = error as business_error.BusinessError; 2649 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2650 } 2651 }) 2652 Web({ src: 'www.example.com', controller: this.controller }) 2653 } 2654 } 2655} 2656``` 2657 2658### getWebId 2659 2660getWebId(): number 2661 2662获取当前Web组件的索引值,用于多个Web组件的管理。 2663 2664**系统能力:** SystemCapability.Web.Webview.Core 2665 2666**返回值:** 2667 2668| 类型 | 说明 | 2669| ------ | --------------------- | 2670| number | 当前Web组件的索引值。 | 2671 2672**错误码:** 2673 2674以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2675 2676| 错误码ID | 错误信息 | 2677| -------- | ------------------------------------------------------------ | 2678| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2679 2680**示例:** 2681 2682```ts 2683// xxx.ets 2684import web_webview from '@ohos.web.webview'; 2685import business_error from '@ohos.base'; 2686 2687@Entry 2688@Component 2689struct WebComponent { 2690 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2691 2692 build() { 2693 Column() { 2694 Button('getWebId') 2695 .onClick(() => { 2696 try { 2697 let id = this.controller.getWebId(); 2698 console.log("id: " + id); 2699 } catch (error) { 2700 let e: business_error.BusinessError = error as business_error.BusinessError; 2701 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2702 } 2703 }) 2704 Web({ src: 'www.example.com', controller: this.controller }) 2705 } 2706 } 2707} 2708``` 2709 2710### getUserAgent 2711 2712getUserAgent(): string 2713 2714获取当前默认用户代理。 2715 2716**系统能力:** SystemCapability.Web.Webview.Core 2717 2718**返回值:** 2719 2720| 类型 | 说明 | 2721| ------ | -------------- | 2722| string | 默认用户代理。 | 2723 2724**错误码:** 2725 2726以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2727 2728| 错误码ID | 错误信息 | 2729| -------- | ------------------------------------------------------------ | 2730| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2731 2732**示例:** 2733 2734```ts 2735// xxx.ets 2736import web_webview from '@ohos.web.webview'; 2737import business_error from '@ohos.base'; 2738 2739@Entry 2740@Component 2741struct WebComponent { 2742 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2743 2744 build() { 2745 Column() { 2746 Button('getUserAgent') 2747 .onClick(() => { 2748 try { 2749 let userAgent = this.controller.getUserAgent(); 2750 console.log("userAgent: " + userAgent); 2751 } catch (error) { 2752 let e:business_error.BusinessError = error as business_error.BusinessError; 2753 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2754 } 2755 }) 2756 Web({ src: 'www.example.com', controller: this.controller }) 2757 } 2758 } 2759} 2760``` 2761 2762支持开发者基于默认的UserAgent去定制UserAgent。 2763```ts 2764// xxx.ets 2765import web_webview from '@ohos.web.webview'; 2766import business_error from '@ohos.base'; 2767 2768@Entry 2769@Component 2770struct WebComponent { 2771 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2772 @State ua: string = "" 2773 2774 aboutToAppear():void { 2775 web_webview.once('webInited', () => { 2776 try { 2777 // 应用侧用法示例,定制UserAgent。 2778 this.ua = this.controller.getUserAgent() + 'xxx'; 2779 } catch(error) { 2780 let e:business_error.BusinessError = error as business_error.BusinessError; 2781 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2782 } 2783 }) 2784 } 2785 2786 build() { 2787 Column() { 2788 Web({ src: 'www.example.com', controller: this.controller }) 2789 .userAgent(this.ua) 2790 } 2791 } 2792} 2793``` 2794 2795### getTitle 2796 2797getTitle(): string 2798 2799获取当前网页的标题。 2800 2801**系统能力:** SystemCapability.Web.Webview.Core 2802 2803**返回值:** 2804 2805| 类型 | 说明 | 2806| ------ | -------------------- | 2807| string | 当前网页的标题。 | 2808 2809**错误码:** 2810 2811以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2812 2813| 错误码ID | 错误信息 | 2814| -------- | ------------------------------------------------------------ | 2815| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2816 2817**示例:** 2818 2819```ts 2820// xxx.ets 2821import web_webview from '@ohos.web.webview'; 2822import business_error from '@ohos.base'; 2823 2824@Entry 2825@Component 2826struct WebComponent { 2827 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2828 2829 build() { 2830 Column() { 2831 Button('getTitle') 2832 .onClick(() => { 2833 try { 2834 let title = this.controller.getTitle(); 2835 console.log("title: " + title); 2836 } catch (error) { 2837 let e:business_error.BusinessError = error as business_error.BusinessError; 2838 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2839 } 2840 }) 2841 Web({ src: 'www.example.com', controller: this.controller }) 2842 } 2843 } 2844} 2845``` 2846 2847### getPageHeight 2848 2849getPageHeight(): number 2850 2851获取当前网页的页面高度。 2852 2853**系统能力:** SystemCapability.Web.Webview.Core 2854 2855**返回值:** 2856 2857| 类型 | 说明 | 2858| ------ | -------------------- | 2859| number | 当前网页的页面高度。 | 2860 2861**错误码:** 2862 2863以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2864 2865| 错误码ID | 错误信息 | 2866| -------- | ------------------------------------------------------------ | 2867| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2868 2869**示例:** 2870 2871```ts 2872// xxx.ets 2873import web_webview from '@ohos.web.webview'; 2874import business_error from '@ohos.base'; 2875 2876@Entry 2877@Component 2878struct WebComponent { 2879 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2880 2881 build() { 2882 Column() { 2883 Button('getPageHeight') 2884 .onClick(() => { 2885 try { 2886 let pageHeight = this.controller.getPageHeight(); 2887 console.log("pageHeight : " + pageHeight); 2888 } catch (error) { 2889 let e:business_error.BusinessError = error as business_error.BusinessError; 2890 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2891 } 2892 }) 2893 Web({ src: 'www.example.com', controller: this.controller }) 2894 } 2895 } 2896} 2897``` 2898 2899### storeWebArchive 2900 2901storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 2902 2903以回调方式异步保存当前页面。 2904 2905**系统能力:** SystemCapability.Web.Webview.Core 2906 2907**参数:** 2908 2909| 参数名 | 类型 | 必填 | 说明 | 2910| -------- | --------------------- | ---- | ------------------------------------------------------------ | 2911| baseName | string | 是 | 文件存储路径,该值不能为空。 | 2912| autoName | boolean | 是 | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 | 2913| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保存网页失败会返回null。 | 2914 2915**错误码:** 2916 2917以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2918 2919| 错误码ID | 错误信息 | 2920| -------- | ------------------------------------------------------------ | 2921| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2922| 17100003 | Invalid resource path or file type. | 2923 2924**示例:** 2925 2926```ts 2927// xxx.ets 2928import web_webview from '@ohos.web.webview' 2929import business_error from '@ohos.base' 2930 2931@Entry 2932@Component 2933struct WebComponent { 2934 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2935 2936 build() { 2937 Column() { 2938 Button('storeWebArchive') 2939 .onClick(() => { 2940 try { 2941 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 2942 if (error) { 2943 console.info(`save web archive error: ` + JSON.stringify(error)) 2944 return; 2945 } 2946 if (filename != null) { 2947 console.info(`save web archive success: ${filename}`) 2948 } 2949 }); 2950 } catch (error) { 2951 let e:business_error.BusinessError = error as business_error.BusinessError; 2952 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2953 } 2954 }) 2955 Web({ src: 'www.example.com', controller: this.controller }) 2956 } 2957 } 2958} 2959``` 2960 2961### storeWebArchive 2962 2963storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 2964 2965以Promise方式异步保存当前页面。 2966 2967**系统能力:** SystemCapability.Web.Webview.Core 2968 2969**参数:** 2970 2971| 参数名 | 类型 | 必填 | 说明 | 2972| -------- | -------- | ---- | ------------------------------------------------------------ | 2973| baseName | string | 是 | 文件存储路径,该值不能为空。 | 2974| autoName | boolean | 是 | 决定是否自动生成文件名。 如果为false,则将baseName作为文件存储路径。 如果为true,则假定baseName是一个目录,将根据当前页的Url自动生成文件名。 | 2975 2976**返回值:** 2977 2978| 类型 | 说明 | 2979| --------------- | ----------------------------------------------------- | 2980| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 2981 2982**错误码:** 2983 2984以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 2985 2986| 错误码ID | 错误信息 | 2987| -------- | ------------------------------------------------------------ | 2988| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2989| 17100003 | Invalid resource path or file type. | 2990 2991**示例:** 2992 2993```ts 2994// xxx.ets 2995import web_webview from '@ohos.web.webview' 2996import business_error from '@ohos.base' 2997 2998@Entry 2999@Component 3000struct WebComponent { 3001 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3002 3003 build() { 3004 Column() { 3005 Button('storeWebArchive') 3006 .onClick(() => { 3007 try { 3008 this.controller.storeWebArchive("/data/storage/el2/base/", true) 3009 .then(filename => { 3010 if (filename != null) { 3011 console.info(`save web archive success: ${filename}`) 3012 } 3013 }) 3014 .catch((error:business_error.BusinessError) => { 3015 console.log('error: ' + JSON.stringify(error)); 3016 }) 3017 } catch (error) { 3018 let e:business_error.BusinessError = error as business_error.BusinessError; 3019 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3020 } 3021 }) 3022 Web({ src: 'www.example.com', controller: this.controller }) 3023 } 3024 } 3025} 3026``` 3027 3028### getUrl 3029 3030getUrl(): string 3031 3032获取当前页面的url地址。 3033 3034**系统能力:** SystemCapability.Web.Webview.Core 3035 3036**返回值:** 3037 3038| 类型 | 说明 | 3039| ------ | ------------------- | 3040| string | 当前页面的url地址。 | 3041 3042**错误码:** 3043 3044以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3045 3046| 错误码ID | 错误信息 | 3047| -------- | ------------------------------------------------------------ | 3048| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3049 3050**示例:** 3051 3052```ts 3053// xxx.ets 3054import web_webview from '@ohos.web.webview'; 3055import business_error from '@ohos.base'; 3056 3057@Entry 3058@Component 3059struct WebComponent { 3060 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3061 3062 build() { 3063 Column() { 3064 Button('getUrl') 3065 .onClick(() => { 3066 try { 3067 let url = this.controller.getUrl(); 3068 console.log("url: " + url); 3069 } catch (error) { 3070 let e:business_error.BusinessError = error as business_error.BusinessError; 3071 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3072 } 3073 }) 3074 Web({ src: 'www.example.com', controller: this.controller }) 3075 } 3076 } 3077} 3078``` 3079 3080### stop 3081 3082stop(): void 3083 3084停止页面加载。 3085 3086**系统能力:** SystemCapability.Web.Webview.Core 3087 3088**错误码:** 3089 3090以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3091 3092| 错误码ID | 错误信息 | 3093| -------- | ------------------------------------------------------------ | 3094| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3095 3096**示例:** 3097 3098```ts 3099// xxx.ets 3100import web_webview from '@ohos.web.webview'; 3101import business_error from '@ohos.base'; 3102 3103@Entry 3104@Component 3105struct WebComponent { 3106 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3107 3108 build() { 3109 Column() { 3110 Button('stop') 3111 .onClick(() => { 3112 try { 3113 this.controller.stop(); 3114 } catch (error) { 3115 let e:business_error.BusinessError = error as business_error.BusinessError; 3116 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3117 } 3118 }); 3119 Web({ src: 'www.example.com', controller: this.controller }) 3120 } 3121 } 3122} 3123``` 3124 3125### backOrForward 3126 3127backOrForward(step: number): void 3128 3129按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 3130 3131前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。 3132 3133**系统能力:** SystemCapability.Web.Webview.Core 3134 3135**参数:** 3136 3137| 参数名 | 类型 | 必填 | 说明 | 3138| ------ | -------- | ---- | ---------------------- | 3139| step | number | 是 | 需要前进或后退的步长。 | 3140 3141**错误码:** 3142 3143以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3144 3145| 错误码ID | 错误信息 | 3146| -------- | ------------------------------------------------------------ | 3147| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3148 3149**示例:** 3150 3151```ts 3152// xxx.ets 3153import web_webview from '@ohos.web.webview'; 3154import business_error from '@ohos.base'; 3155 3156@Entry 3157@Component 3158struct WebComponent { 3159 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3160 @State step: number = -2; 3161 3162 build() { 3163 Column() { 3164 Button('backOrForward') 3165 .onClick(() => { 3166 try { 3167 this.controller.backOrForward(this.step); 3168 } catch (error) { 3169 let e:business_error.BusinessError = error as business_error.BusinessError; 3170 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3171 } 3172 }) 3173 Web({ src: 'www.example.com', controller: this.controller }) 3174 } 3175 } 3176} 3177``` 3178 3179### scrollTo 3180 3181scrollTo(x:number, y:number): void 3182 3183将页面滚动到指定的绝对位置。 3184 3185**系统能力:** SystemCapability.Web.Webview.Core 3186 3187**参数:** 3188 3189| 参数名 | 类型 | 必填 | 说明 | 3190| ------ | -------- | ---- | ---------------------- | 3191| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。 | 3192| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。| 3193 3194**错误码:** 3195 3196以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3197 3198| 错误码ID | 错误信息 | 3199| -------- | ------------------------------------------------------------ | 3200| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3201 3202**示例:** 3203 3204```ts 3205// xxx.ets 3206import web_webview from '@ohos.web.webview'; 3207import business_error from '@ohos.base'; 3208 3209@Entry 3210@Component 3211struct WebComponent { 3212 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3213 3214 build() { 3215 Column() { 3216 Button('scrollTo') 3217 .onClick(() => { 3218 try { 3219 this.controller.scrollTo(50, 50); 3220 } catch (error) { 3221 let e:business_error.BusinessError = error as business_error.BusinessError; 3222 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3223 } 3224 }) 3225 Web({ src: $rawfile('index.html'), controller: this.controller }) 3226 } 3227 } 3228} 3229``` 3230 3231加载的html文件。 3232```html 3233<!--index.html--> 3234<!DOCTYPE html> 3235<html> 3236<head> 3237 <title>Demo</title> 3238 <style> 3239 body { 3240 width:3000px; 3241 height:3000px; 3242 padding-right:170px; 3243 padding-left:170px; 3244 border:5px solid blueviolet 3245 } 3246 </style> 3247</head> 3248<body> 3249Scroll Test 3250</body> 3251</html> 3252``` 3253 3254### scrollBy 3255 3256scrollBy(deltaX:number, deltaY:number): void 3257 3258将页面滚动指定的偏移量。 3259 3260**系统能力:** SystemCapability.Web.Webview.Core 3261 3262**参数:** 3263 3264| 参数名 | 类型 | 必填 | 说明 | 3265| ------ | -------- | ---- | ---------------------- | 3266| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 3267| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 3268 3269**错误码:** 3270 3271以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3272 3273| 错误码ID | 错误信息 | 3274| -------- | ------------------------------------------------------------ | 3275| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3276 3277**示例:** 3278 3279```ts 3280// xxx.ets 3281import web_webview from '@ohos.web.webview'; 3282import business_error from '@ohos.base'; 3283 3284@Entry 3285@Component 3286struct WebComponent { 3287 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3288 3289 build() { 3290 Column() { 3291 Button('scrollBy') 3292 .onClick(() => { 3293 try { 3294 this.controller.scrollBy(50, 50); 3295 } catch (error) { 3296 let e:business_error.BusinessError = error as business_error.BusinessError; 3297 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3298 } 3299 }) 3300 Web({ src: $rawfile('index.html'), controller: this.controller }) 3301 } 3302 } 3303} 3304``` 3305 3306加载的html文件。 3307```html 3308<!--index.html--> 3309<!DOCTYPE html> 3310<html> 3311<head> 3312 <title>Demo</title> 3313 <style> 3314 body { 3315 width:3000px; 3316 height:3000px; 3317 padding-right:170px; 3318 padding-left:170px; 3319 border:5px solid blueviolet 3320 } 3321 </style> 3322</head> 3323<body> 3324Scroll Test 3325</body> 3326</html> 3327``` 3328 3329### slideScroll 3330 3331slideScroll(vx:number, vy:number): void 3332 3333按照指定速度模拟对页面的轻扫滚动动作。 3334 3335**系统能力:** SystemCapability.Web.Webview.Core 3336 3337**参数:** 3338 3339| 参数名 | 类型 | 必填 | 说明 | 3340| ------ | -------- | ---- | ---------------------- | 3341| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。 | 3342| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。 | 3343 3344**错误码:** 3345 3346以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3347 3348| 错误码ID | 错误信息 | 3349| -------- | ------------------------------------------------------------ | 3350| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3351 3352**示例:** 3353 3354```ts 3355// xxx.ets 3356import web_webview from '@ohos.web.webview'; 3357import business_error from '@ohos.base'; 3358 3359@Entry 3360@Component 3361struct WebComponent { 3362 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3363 3364 build() { 3365 Column() { 3366 Button('slideScroll') 3367 .onClick(() => { 3368 try { 3369 this.controller.slideScroll(500, 500); 3370 } catch (error) { 3371 let e:business_error.BusinessError = error as business_error.BusinessError; 3372 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3373 } 3374 }) 3375 Web({ src: $rawfile('index.html'), controller: this.controller }) 3376 } 3377 } 3378} 3379``` 3380 3381加载的html文件。 3382```html 3383<!--index.html--> 3384<!DOCTYPE html> 3385<html> 3386<head> 3387 <title>Demo</title> 3388 <style> 3389 body { 3390 width:3000px; 3391 height:3000px; 3392 padding-right:170px; 3393 padding-left:170px; 3394 border:5px solid blueviolet 3395 } 3396 </style> 3397</head> 3398<body> 3399Scroll Test 3400</body> 3401</html> 3402``` 3403 3404### getOriginalUrl 3405 3406getOriginalUrl(): string 3407 3408获取当前页面的原始url地址。 3409 3410**系统能力:** SystemCapability.Web.Webview.Core 3411 3412**返回值:** 3413 3414| 类型 | 说明 | 3415| ------ | ----------------------- | 3416| string | 当前页面的原始url地址。 | 3417 3418**错误码:** 3419 3420以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3421 3422| 错误码ID | 错误信息 | 3423| -------- | ------------------------------------------------------------ | 3424| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3425 3426**示例:** 3427 3428```ts 3429// xxx.ets 3430import web_webview from '@ohos.web.webview'; 3431import business_error from '@ohos.base'; 3432 3433@Entry 3434@Component 3435struct WebComponent { 3436 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3437 3438 build() { 3439 Column() { 3440 Button('getOrgUrl') 3441 .onClick(() => { 3442 try { 3443 let url = this.controller.getOriginalUrl(); 3444 console.log("original url: " + url); 3445 } catch (error) { 3446 let e:business_error.BusinessError = error as business_error.BusinessError; 3447 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3448 } 3449 }) 3450 Web({ src: 'www.example.com', controller: this.controller }) 3451 } 3452 } 3453} 3454``` 3455 3456### getFavicon 3457 3458getFavicon(): image.PixelMap 3459 3460获取页面的favicon图标。 3461 3462**系统能力:** SystemCapability.Web.Webview.Core 3463 3464**返回值:** 3465 3466| 类型 | 说明 | 3467| -------------------------------------- | ------------------------------- | 3468| [PixelMap](js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 3469 3470**错误码:** 3471 3472以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3473 3474| 错误码ID | 错误信息 | 3475| -------- | ------------------------------------------------------------ | 3476| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3477 3478**示例:** 3479 3480```ts 3481// xxx.ets 3482import web_webview from '@ohos.web.webview'; 3483import image from "@ohos.multimedia.image"; 3484import business_error from '@ohos.base'; 3485 3486@Entry 3487@Component 3488struct WebComponent { 3489 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3490 @State pixelmap: image.PixelMap | undefined = undefined; 3491 3492 build() { 3493 Column() { 3494 Button('getFavicon') 3495 .onClick(() => { 3496 try { 3497 this.pixelmap = this.controller.getFavicon(); 3498 } catch (error) { 3499 let e:business_error.BusinessError = error as business_error.BusinessError; 3500 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3501 } 3502 }) 3503 Web({ src: 'www.example.com', controller: this.controller }) 3504 } 3505 } 3506} 3507``` 3508 3509### setNetworkAvailable 3510 3511setNetworkAvailable(enable: boolean): void 3512 3513设置JavaScript中的window.navigator.onLine属性。 3514 3515**系统能力:** SystemCapability.Web.Webview.Core 3516 3517**参数:** 3518 3519| 参数名 | 类型 | 必填 | 说明 | 3520| ------ | ------- | ---- | --------------------------------- | 3521| enable | boolean | 是 | 是否使能window.navigator.onLine。 | 3522 3523**错误码:** 3524 3525以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3526 3527| 错误码ID | 错误信息 | 3528| -------- | ------------------------------------------------------------ | 3529| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3530 3531**示例:** 3532 3533```ts 3534// xxx.ets 3535import web_webview from '@ohos.web.webview'; 3536import business_error from '@ohos.base'; 3537 3538@Entry 3539@Component 3540struct WebComponent { 3541 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3542 3543 build() { 3544 Column() { 3545 Button('setNetworkAvailable') 3546 .onClick(() => { 3547 try { 3548 this.controller.setNetworkAvailable(true); 3549 } catch (error) { 3550 let e:business_error.BusinessError = error as business_error.BusinessError; 3551 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3552 } 3553 }) 3554 Web({ src: $rawfile('index.html'), controller: this.controller }) 3555 } 3556 } 3557} 3558``` 3559 3560加载的html文件。 3561```html 3562<!-- index.html --> 3563<!DOCTYPE html> 3564<html> 3565<body> 3566<h1>online 属性</h1> 3567<p id="demo"></p> 3568<button onclick="func()">click</button> 3569<script> 3570 let online = navigator.onLine; 3571 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 3572 3573 function func(){ 3574 var online = navigator.onLine; 3575 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 3576 } 3577</script> 3578</body> 3579</html> 3580``` 3581 3582### hasImage 3583 3584hasImage(callback: AsyncCallback\<boolean>): void 3585 3586通过Callback方式异步查找当前页面是否存在图像。 3587 3588**系统能力:** SystemCapability.Web.Webview.Core 3589 3590**参数:** 3591 3592| 参数名 | 类型 | 必填 | 说明 | 3593| -------- | ----------------------- | ---- | -------------------------- | 3594| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。 | 3595 3596**错误码:** 3597 3598以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3599 3600| 错误码ID | 错误信息 | 3601| -------- | ------------------------------------------------------------ | 3602| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 3603 3604**示例:** 3605 3606```ts 3607// xxx.ets 3608import web_webview from '@ohos.web.webview'; 3609import business_error from '@ohos.base'; 3610 3611@Entry 3612@Component 3613struct WebComponent { 3614 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3615 3616 build() { 3617 Column() { 3618 Button('hasImageCb') 3619 .onClick(() => { 3620 try { 3621 this.controller.hasImage((error, data) => { 3622 if (error) { 3623 console.info(`hasImage error: ` + JSON.stringify(error)) 3624 return; 3625 } 3626 console.info("hasImage: " + data); 3627 }); 3628 } catch (error) { 3629 let e:business_error.BusinessError = error as business_error.BusinessError; 3630 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3631 } 3632 }) 3633 Web({ src: 'www.example.com', controller: this.controller }) 3634 } 3635 } 3636} 3637``` 3638 3639### hasImage 3640 3641hasImage(): Promise\<boolean> 3642 3643通过Promise方式异步查找当前页面是否存在图像。 3644 3645**系统能力:** SystemCapability.Web.Webview.Core 3646 3647**返回值:** 3648 3649| 类型 | 说明 | 3650| ----------------- | --------------------------------------- | 3651| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 | 3652 3653**错误码:** 3654 3655以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3656 3657| 错误码ID | 错误信息 | 3658| -------- | ------------------------------------------------------------ | 3659| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 3660 3661**示例:** 3662 3663```ts 3664// xxx.ets 3665import web_webview from '@ohos.web.webview'; 3666import business_error from '@ohos.base'; 3667 3668@Entry 3669@Component 3670struct WebComponent { 3671 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3672 3673 build() { 3674 Column() { 3675 Button('hasImagePm') 3676 .onClick(() => { 3677 try { 3678 this.controller.hasImage().then((data) => { 3679 console.info('hasImage: ' + data); 3680 }) 3681 .catch((error:business_error.BusinessError) => { 3682 console.error("error: " + error); 3683 }) 3684 } catch (error) { 3685 let e:business_error.BusinessError = error as business_error.BusinessError; 3686 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3687 } 3688 }) 3689 Web({ src: 'www.example.com', controller: this.controller }) 3690 } 3691 } 3692} 3693``` 3694 3695### removeCache 3696 3697removeCache(clearRom: boolean): void 3698 3699清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 3700 3701**系统能力:** SystemCapability.Web.Webview.Core 3702 3703**参数:** 3704 3705| 参数名 | 类型 | 必填 | 说明 | 3706| -------- | ------- | ---- | -------------------------------------------------------- | 3707| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 3708 3709**错误码:** 3710 3711以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3712 3713| 错误码ID | 错误信息 | 3714| -------- | ------------------------------------------------------------ | 3715| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3716 3717**示例:** 3718 3719```ts 3720// xxx.ets 3721import web_webview from '@ohos.web.webview'; 3722import business_error from '@ohos.base'; 3723 3724@Entry 3725@Component 3726struct WebComponent { 3727 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3728 3729 build() { 3730 Column() { 3731 Button('removeCache') 3732 .onClick(() => { 3733 try { 3734 this.controller.removeCache(false); 3735 } catch (error) { 3736 let e:business_error.BusinessError = error as business_error.BusinessError; 3737 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3738 } 3739 }) 3740 Web({ src: 'www.example.com', controller: this.controller }) 3741 } 3742 } 3743} 3744``` 3745 3746### pageUp 3747 3748pageUp(top:boolean): void 3749 3750将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 3751 3752**系统能力:** SystemCapability.Web.Webview.Core 3753 3754**参数:** 3755 3756| 参数名 | 类型 | 必填 | 说明 | 3757| ------ | ------- | ---- | ------------------------------------------------------------ | 3758| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 3759 3760**错误码:** 3761 3762以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3763 3764| 错误码ID | 错误信息 | 3765| -------- | ------------------------------------------------------------ | 3766| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3767 3768**示例:** 3769 3770```ts 3771// xxx.ets 3772import web_webview from '@ohos.web.webview'; 3773import business_error from '@ohos.base'; 3774 3775@Entry 3776@Component 3777struct WebComponent { 3778 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3779 3780 build() { 3781 Column() { 3782 Button('pageUp') 3783 .onClick(() => { 3784 try { 3785 this.controller.pageUp(false); 3786 } catch (error) { 3787 let e:business_error.BusinessError = error as business_error.BusinessError; 3788 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3789 } 3790 }) 3791 Web({ src: 'www.example.com', controller: this.controller }) 3792 } 3793 } 3794} 3795``` 3796 3797### pageDown 3798 3799pageDown(bottom:boolean): void 3800 3801将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 3802 3803**系统能力:** SystemCapability.Web.Webview.Core 3804 3805**参数:** 3806 3807| 参数名 | 类型 | 必填 | 说明 | 3808| ------ | ------- | ---- | ------------------------------------------------------------ | 3809| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 3810 3811**错误码:** 3812 3813以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3814 3815| 错误码ID | 错误信息 | 3816| -------- | ------------------------------------------------------------ | 3817| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3818 3819**示例:** 3820 3821```ts 3822// xxx.ets 3823import web_webview from '@ohos.web.webview'; 3824import business_error from '@ohos.base'; 3825 3826@Entry 3827@Component 3828struct WebComponent { 3829 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3830 3831 build() { 3832 Column() { 3833 Button('pageDown') 3834 .onClick(() => { 3835 try { 3836 this.controller.pageDown(false); 3837 } catch (error) { 3838 let e:business_error.BusinessError = error as business_error.BusinessError; 3839 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3840 } 3841 }) 3842 Web({ src: 'www.example.com', controller: this.controller }) 3843 } 3844 } 3845} 3846``` 3847 3848### getBackForwardEntries 3849 3850getBackForwardEntries(): BackForwardList 3851 3852获取当前Webview的历史信息列表。 3853 3854**系统能力:** SystemCapability.Web.Webview.Core 3855 3856**返回值:** 3857 3858| 类型 | 说明 | 3859| ----------------------------------- | --------------------------- | 3860| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 3861 3862**错误码:** 3863 3864以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3865 3866| 错误码ID | 错误信息 | 3867| -------- | ------------------------------------------------------------ | 3868| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3869 3870**示例:** 3871 3872```ts 3873// xxx.ets 3874import web_webview from '@ohos.web.webview'; 3875import business_error from '@ohos.base'; 3876 3877@Entry 3878@Component 3879struct WebComponent { 3880 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3881 3882 build() { 3883 Column() { 3884 Button('getBackForwardEntries') 3885 .onClick(() => { 3886 try { 3887 let list = this.controller.getBackForwardEntries() 3888 } catch (error) { 3889 let e:business_error.BusinessError = error as business_error.BusinessError; 3890 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3891 } 3892 }) 3893 Web({ src: 'www.example.com', controller: this.controller }) 3894 } 3895 } 3896} 3897``` 3898 3899### serializeWebState 3900 3901serializeWebState(): Uint8Array 3902 3903将当前Webview的页面状态历史记录信息序列化。 3904 3905**系统能力:** SystemCapability.Web.Webview.Core 3906 3907**返回值:** 3908 3909| 类型 | 说明 | 3910| ---------- | --------------------------------------------- | 3911| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 3912 3913**错误码:** 3914 3915以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3916 3917| 错误码ID | 错误信息 | 3918| -------- | ------------------------------------------------------------ | 3919| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3920 3921**示例:** 3922 39231.对文件的操作需要导入文件管理模块,详情请参考[文件管理](./js-apis-file-fs.md)。 3924```ts 3925// xxx.ets 3926import web_webview from '@ohos.web.webview'; 3927import fs from '@ohos.file.fs'; 3928import business_error from '@ohos.base'; 3929 3930@Entry 3931@Component 3932struct WebComponent { 3933 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3934 3935 build() { 3936 Column() { 3937 Button('serializeWebState') 3938 .onClick(() => { 3939 try { 3940 let state = this.controller.serializeWebState(); 3941 let path:string | undefined = AppStorage.get("cacheDir"); 3942 if (path) { 3943 path += '/WebState'; 3944 // 以同步方法打开文件。 3945 let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 3946 fs.writeSync(file.fd, state.buffer); 3947 fs.closeSync(file.fd); 3948 } 3949 } catch (error) { 3950 let e:business_error.BusinessError = error as business_error.BusinessError; 3951 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3952 } 3953 }) 3954 Web({ src: 'www.example.com', controller: this.controller }) 3955 } 3956 } 3957} 3958``` 3959 39602.修改EntryAbility.ts。 3961获取应用缓存文件路径。 3962```ts 3963// xxx.ts 3964import UIAbility from '@ohos.app.ability.UIAbility'; 3965import web_webview from '@ohos.web.webview'; 3966import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 3967import Want from '@ohos.app.ability.Want'; 3968 3969export default class EntryAbility extends UIAbility { 3970 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 3971 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 3972 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 3973 } 3974} 3975``` 3976 3977### restoreWebState 3978 3979restoreWebState(state: Uint8Array): void 3980 3981当前Webview从序列化数据中恢复页面状态历史记录。 3982 3983**系统能力:** SystemCapability.Web.Webview.Core 3984 3985**参数:** 3986 3987| 参数名 | 类型 | 必填 | 说明 | 3988| ------ | ---------- | ---- | ---------------------------- | 3989| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 3990 3991**错误码:** 3992 3993以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 3994 3995| 错误码ID | 错误信息 | 3996| -------- | ------------------------------------------------------------ | 3997| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3998 3999**示例:** 4000 40011.对文件的操作需要导入文件管理模块,详情请参考[文件管理](./js-apis-file-fs.md)。 4002```ts 4003// xxx.ets 4004import web_webview from '@ohos.web.webview'; 4005import fs from '@ohos.file.fs'; 4006import business_error from '@ohos.base'; 4007 4008@Entry 4009@Component 4010struct WebComponent { 4011 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4012 4013 build() { 4014 Column() { 4015 Button('RestoreWebState') 4016 .onClick(() => { 4017 try { 4018 let path:string | undefined = AppStorage.get("cacheDir"); 4019 if (path) { 4020 path += '/WebState'; 4021 // 以同步方法打开文件。 4022 let file = fs.openSync(path, fs.OpenMode.READ_WRITE); 4023 let stat = fs.statSync(path); 4024 let size = stat.size; 4025 let buf = new ArrayBuffer(size); 4026 fs.read(file.fd, buf, (err, readLen) => { 4027 if (err) { 4028 console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code); 4029 } else { 4030 console.info("read file data succeed"); 4031 this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen))); 4032 fs.closeSync(file); 4033 } 4034 }); 4035 } 4036 } catch (error) { 4037 let e:business_error.BusinessError = error as business_error.BusinessError; 4038 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4039 } 4040 }) 4041 Web({ src: 'www.example.com', controller: this.controller }) 4042 } 4043 } 4044} 4045``` 4046 40472.修改EntryAbility.ts。 4048获取应用缓存文件路径。 4049```ts 4050// xxx.ts 4051import UIAbility from '@ohos.app.ability.UIAbility'; 4052import web_webview from '@ohos.web.webview'; 4053import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 4054import Want from '@ohos.app.ability.Want'; 4055 4056export default class EntryAbility extends UIAbility { 4057 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4058 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4059 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4060 } 4061} 4062``` 4063 4064### customizeSchemes 4065 4066static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 4067 4068配置Web自定义协议请求的权限。建议在任何Web组件初始化之前进行调用。 4069 4070**系统能力:** SystemCapability.Web.Webview.Core 4071 4072**参数:** 4073 4074| 参数名 | 类型 | 必填 | 说明 | 4075| -------- | ------- | ---- | -------------------------------------- | 4076| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 4077 4078**示例:** 4079 4080```ts 4081// xxx.ets 4082import web_webview from '@ohos.web.webview'; 4083import business_error from '@ohos.base'; 4084 4085@Entry 4086@Component 4087struct WebComponent { 4088 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4089 responseweb: WebResourceResponse = new WebResourceResponse() 4090 scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true} 4091 scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true} 4092 scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true} 4093 4094 aboutToAppear():void { 4095 try { 4096 web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]) 4097 } catch(error) { 4098 let e:business_error.BusinessError = error as business_error.BusinessError; 4099 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4100 } 4101 } 4102 4103 build() { 4104 Column() { 4105 Web({ src: 'www.example.com', controller: this.controller }) 4106 .onInterceptRequest((event) => { 4107 if (event) { 4108 console.log('url:' + event.request.getRequestUrl()) 4109 } 4110 return this.responseweb 4111 }) 4112 } 4113 } 4114} 4115``` 4116 4117### getCertificate<sup>10+</sup> 4118 4119getCertificate(): Promise<Array<cert.X509Cert>> 4120 4121获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](./js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。 4122 4123**系统能力:** SystemCapability.Web.Webview.Core 4124 4125**返回值:** 4126 4127| 类型 | 说明 | 4128| ---------- | --------------------------------------------- | 4129| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 | 4130 4131**错误码:** 4132 4133以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4134 4135| 错误码ID | 错误信息 | 4136| -------- | ------------------------------------------------------------ | 4137| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4138 4139**示例:** 4140 4141```ts 4142// xxx.ets 4143import web_webview from '@ohos.web.webview'; 4144import business_error from '@ohos.base'; 4145import cert from '@ohos.security.cert'; 4146 4147function Uint8ArrayToString(dataArray:Uint8Array) { 4148 let dataString = '' 4149 for (let i = 0; i < dataArray.length; i++) { 4150 dataString += String.fromCharCode(dataArray[i]) 4151 } 4152 return dataString 4153} 4154 4155function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) { 4156 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4157 for (let i = 0; i < x509CertArray.length; i++) { 4158 res += ', index = ' + i + ', issuer name = ' 4159 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4160 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4161 + x509CertArray[i].getNotBeforeTime() 4162 + ', valid end = ' + x509CertArray[i].getNotAfterTime() 4163 } 4164 return res 4165} 4166 4167@Entry 4168@Component 4169struct Index { 4170 // outputStr在UI界面显示调试信息 4171 @State outputStr: string = '' 4172 webviewCtl: web_webview.WebviewController = new web_webview.WebviewController(); 4173 4174 build() { 4175 Row() { 4176 Column() { 4177 List({space: 20, initialIndex: 0}) { 4178 ListItem() { 4179 Button() { 4180 Text('load bad ssl') 4181 .fontSize(10) 4182 .fontWeight(FontWeight.Bold) 4183 } 4184 .type(ButtonType.Capsule) 4185 .onClick(() => { 4186 // 加载一个过期的证书网站,查看获取到的证书信息 4187 this.webviewCtl.loadUrl('https://expired.badssl.com') 4188 }) 4189 .height(50) 4190 } 4191 4192 ListItem() { 4193 Button() { 4194 Text('load example') 4195 .fontSize(10) 4196 .fontWeight(FontWeight.Bold) 4197 } 4198 .type(ButtonType.Capsule) 4199 .onClick(() => { 4200 // 加载一个https网站,查看网站的证书信息 4201 this.webviewCtl.loadUrl('https://www.example.com') 4202 }) 4203 .height(50) 4204 } 4205 4206 ListItem() { 4207 Button() { 4208 Text('getCertificate Promise') 4209 .fontSize(10) 4210 .fontWeight(FontWeight.Bold) 4211 } 4212 .type(ButtonType.Capsule) 4213 .onClick(() => { 4214 try { 4215 this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => { 4216 this.outputStr = ParseX509CertInfo(x509CertArray); 4217 }) 4218 } catch (error) { 4219 let e:business_error.BusinessError = error as business_error.BusinessError; 4220 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4221 } 4222 }) 4223 .height(50) 4224 } 4225 4226 ListItem() { 4227 Button() { 4228 Text('getCertificate AsyncCallback') 4229 .fontSize(10) 4230 .fontWeight(FontWeight.Bold) 4231 } 4232 .type(ButtonType.Capsule) 4233 .onClick(() => { 4234 try { 4235 this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => { 4236 if (error) { 4237 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4238 } else { 4239 this.outputStr = ParseX509CertInfo(x509CertArray); 4240 } 4241 }) 4242 } catch (error) { 4243 let e:business_error.BusinessError = error as business_error.BusinessError; 4244 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4245 } 4246 }) 4247 .height(50) 4248 } 4249 } 4250 .listDirection(Axis.Horizontal) 4251 .height('10%') 4252 4253 Text(this.outputStr) 4254 .width('100%') 4255 .fontSize(10) 4256 4257 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4258 .fileAccess(true) 4259 .javaScriptAccess(true) 4260 .domStorageAccess(true) 4261 .onlineImageAccess(true) 4262 .onPageEnd((e) => { 4263 if(e) { 4264 this.outputStr = 'onPageEnd : url = ' + e.url 4265 } 4266 }) 4267 .onSslErrorEventReceive((e) => { 4268 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4269 e.handler.handleConfirm() 4270 }) 4271 .width('100%') 4272 .height('70%') 4273 } 4274 .height('100%') 4275 } 4276 } 4277} 4278``` 4279 4280### getCertificate<sup>10+</sup> 4281 4282getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void 4283 4284获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](./js-apis-cert.md)),便于开发者展示网站证书信息。 4285 4286**系统能力:** SystemCapability.Web.Webview.Core 4287 4288**参数:** 4289 4290| 参数名 | 类型 | 必填 | 说明 | 4291| -------- | ---------------------------- | ---- | ---------------------------------------- | 4292| callback | AsyncCallback<Array<cert.X509Cert>> | 是 | 通过AsyncCallback异步返回当前网站的X509格式证书。 | 4293 4294**错误码:** 4295 4296以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4297 4298| 错误码ID | 错误信息 | 4299| -------- | ------------------------------------------------------------ | 4300| 17100001 | Init error. The WebviewController must be associated with a Web compoent. | 4301 4302**示例:** 4303 4304```ts 4305// xxx.ets 4306import web_webview from '@ohos.web.webview'; 4307import business_error from '@ohos.base'; 4308import cert from '@ohos.security.cert'; 4309 4310function Uint8ArrayToString(dataArray:Uint8Array) { 4311 let dataString = '' 4312 for (let i = 0; i < dataArray.length; i++) { 4313 dataString += String.fromCharCode(dataArray[i]) 4314 } 4315 return dataString 4316} 4317 4318function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) { 4319 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4320 for (let i = 0; i < x509CertArray.length; i++) { 4321 res += ', index = ' + i + ', issuer name = ' 4322 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4323 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4324 + x509CertArray[i].getNotBeforeTime() 4325 + ', valid end = ' + x509CertArray[i].getNotAfterTime() 4326 } 4327 return res 4328} 4329 4330@Entry 4331@Component 4332struct Index { 4333 // outputStr在UI界面显示调试信息 4334 @State outputStr: string = '' 4335 webviewCtl: web_webview.WebviewController = new web_webview.WebviewController(); 4336 4337 build() { 4338 Row() { 4339 Column() { 4340 List({space: 20, initialIndex: 0}) { 4341 ListItem() { 4342 Button() { 4343 Text('load bad ssl') 4344 .fontSize(10) 4345 .fontWeight(FontWeight.Bold) 4346 } 4347 .type(ButtonType.Capsule) 4348 .onClick(() => { 4349 // 加载一个过期的证书网站,查看获取到的证书信息 4350 this.webviewCtl.loadUrl('https://expired.badssl.com') 4351 }) 4352 .height(50) 4353 } 4354 4355 ListItem() { 4356 Button() { 4357 Text('load example') 4358 .fontSize(10) 4359 .fontWeight(FontWeight.Bold) 4360 } 4361 .type(ButtonType.Capsule) 4362 .onClick(() => { 4363 // 加载一个https网站,查看网站的证书信息 4364 this.webviewCtl.loadUrl('https://www.example.com') 4365 }) 4366 .height(50) 4367 } 4368 4369 ListItem() { 4370 Button() { 4371 Text('getCertificate Promise') 4372 .fontSize(10) 4373 .fontWeight(FontWeight.Bold) 4374 } 4375 .type(ButtonType.Capsule) 4376 .onClick(() => { 4377 try { 4378 this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => { 4379 this.outputStr = ParseX509CertInfo(x509CertArray); 4380 }) 4381 } catch (error) { 4382 let e:business_error.BusinessError = error as business_error.BusinessError; 4383 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4384 } 4385 }) 4386 .height(50) 4387 } 4388 4389 ListItem() { 4390 Button() { 4391 Text('getCertificate AsyncCallback') 4392 .fontSize(10) 4393 .fontWeight(FontWeight.Bold) 4394 } 4395 .type(ButtonType.Capsule) 4396 .onClick(() => { 4397 try { 4398 this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => { 4399 if (error) { 4400 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4401 } else { 4402 this.outputStr = ParseX509CertInfo(x509CertArray); 4403 } 4404 }) 4405 } catch (error) { 4406 let e:business_error.BusinessError = error as business_error.BusinessError; 4407 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4408 } 4409 }) 4410 .height(50) 4411 } 4412 } 4413 .listDirection(Axis.Horizontal) 4414 .height('10%') 4415 4416 Text(this.outputStr) 4417 .width('100%') 4418 .fontSize(10) 4419 4420 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4421 .fileAccess(true) 4422 .javaScriptAccess(true) 4423 .domStorageAccess(true) 4424 .onlineImageAccess(true) 4425 .onPageEnd((e) => { 4426 if (e) { 4427 this.outputStr = 'onPageEnd : url = ' + e.url 4428 } 4429 }) 4430 .onSslErrorEventReceive((e) => { 4431 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4432 e.handler.handleConfirm() 4433 }) 4434 .width('100%') 4435 .height('70%') 4436 } 4437 .height('100%') 4438 } 4439 } 4440} 4441``` 4442 4443### setAudioMuted<sup>10+</sup> 4444 4445setAudioMuted(mute: boolean): void 4446 4447设置网页静音。 4448 4449**系统能力:** SystemCapability.Web.Webview.Core 4450 4451**参数:** 4452 4453| 参数名 | 类型 | 必填 | 说明 | 4454| -------- | ------- | ---- | -------------------------------------- | 4455| mute | boolean | 是 | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 | 4456 4457**错误码:** 4458 4459以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4460 4461| 错误码ID | 错误信息 | 4462| -------- | ------------------------------------------------------------ | 4463| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4464 4465**示例:** 4466 4467```ts 4468// xxx.ets 4469import web_webview from '@ohos.web.webview' 4470 4471@Entry 4472@Component 4473struct WebComponent { 4474 controller: web_webview.WebviewController = new web_webview.WebviewController() 4475 @State muted: boolean = false 4476 build() { 4477 Column() { 4478 Button("Toggle Mute") 4479 .onClick(event => { 4480 this.muted = !this.muted 4481 this.controller.setAudioMuted(this.muted) 4482 }) 4483 Web({ src: 'www.example.com', controller: this.controller }) 4484 } 4485 } 4486} 4487``` 4488 4489### prefetchPage<sup>10+</sup> 4490 4491prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void 4492 4493在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。 4494 4495**系统能力:** SystemCapability.Web.Webview.Core 4496 4497**参数:** 4498 4499| 参数名 | 类型 | 必填 | 说明 | 4500| ------------------| --------------------------------| ---- | ------------- | 4501| url | string | 是 | 预加载的url。| 4502| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | url的附加HTTP请求头。| 4503 4504**错误码:** 4505 4506以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md). 4507 4508| 错误码ID | 错误信息 | 4509| -------- | ------------------------------------------------------------ | 4510| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4511| 17100002 | Invalid url. | 4512 4513**示例:** 4514 4515```ts 4516// xxx.ets 4517import web_webview from '@ohos.web.webview' 4518import business_error from '@ohos.base' 4519 4520@Entry 4521@Component 4522struct WebComponent { 4523 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4524 4525 build() { 4526 Column() { 4527 Button('prefetchPopularPage') 4528 .onClick(() => { 4529 try { 4530 // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。 4531 this.controller.prefetchPage('https://www.example.com'); 4532 } catch (error) { 4533 let e:business_error.BusinessError = error as business_error.BusinessError; 4534 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4535 } 4536 }) 4537 // 需要将'www.example1.com'替换成一个真实的网站地址。 4538 Web({ src: 'www.example1.com', controller: this.controller }) 4539 } 4540 } 4541} 4542``` 4543 4544### prepareForPageLoad<sup>10+</sup> 4545 4546static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void 4547 4548预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。 4549 4550**系统能力:** SystemCapability.Web.Webview.Core 4551 4552**参数:** 4553 4554| 参数名 | 类型 | 必填 | 说明 | 4555| ---------------| ------- | ---- | ------------- | 4556| url | string | 是 | 预连接的url。| 4557| preconnectable | boolean | 是 | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。| 4558| numSockets | number | 是 | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。| 4559 4560**错误码:** 4561 4562以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md). 4563 4564| 错误码ID | 错误信息 | 4565| -------- | ------------------------------------------------------------ | 4566| 17100002 | Invalid url. | 4567| 171000013| The number of preconnect sockets is invalid. | 4568 4569**示例:** 4570 4571```ts 4572// xxx.ts 4573import UIAbility from '@ohos.app.ability.UIAbility'; 4574import web_webview from '@ohos.web.webview'; 4575import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 4576import Want from '@ohos.app.ability.Want'; 4577 4578export default class EntryAbility extends UIAbility { 4579 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4580 console.log("EntryAbility onCreate") 4581 web_webview.WebviewController.initializeWebEngine() 4582 // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。 4583 web_webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 4584 AppStorage.setOrCreate("abilityWant", want) 4585 console.log("EntryAbility onCreate done") 4586 } 4587} 4588``` 4589 4590### setCustomUserAgent<sup>10+</sup> 4591 4592setCustomUserAgent(userAgent: string): void 4593 4594设置自定义用户代理。 4595 4596**系统能力:** SystemCapability.Web.Webview.Core 4597 4598**参数:** 4599 4600| 参数名 | 类型 | 必填 | 说明 | 4601| ---------------| ------- | ---- | ------------- | 4602| userAgent | string | 是 | 用户自定义代理信息。 | 4603 4604**错误码:** 4605 4606以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md). 4607 4608| 错误码ID | 错误信息 | 4609| -------- | ------------------------------------------------------------ | 4610| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4611 4612**示例:** 4613 4614```ts 4615// xxx.ets 4616import web_webview from '@ohos.web.webview' 4617import business_error from '@ohos.base' 4618 4619@Entry 4620@Component 4621struct WebComponent { 4622 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4623 @State userAgent: string = 'test' 4624 4625 build() { 4626 Column() { 4627 Button('setCustomUserAgent') 4628 .onClick(() => { 4629 try { 4630 this.controller.setCustomUserAgent(this.userAgent); 4631 } catch (error) { 4632 let e:business_error.BusinessError = error as business_error.BusinessError; 4633 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4634 } 4635 }) 4636 Web({ src: 'www.example.com', controller: this.controller }) 4637 } 4638 } 4639} 4640``` 4641 4642### getCustomUserAgent<sup>10+</sup> 4643 4644getCustomUserAgent(): string 4645 4646获取自定义用户代理。 4647 4648**系统能力:** SystemCapability.Web.Webview.Core 4649 4650**返回值:** 4651 4652| 类型 | 说明 | 4653| ------ | ------------------------- | 4654| string | 用户自定义代理信息。 | 4655 4656**错误码:** 4657 4658以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md). 4659 4660| 错误码ID | 错误信息 | 4661| -------- | ------------------------------------------------------------ | 4662| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4663 4664**示例:** 4665 4666```ts 4667// xxx.ets 4668import web_webview from '@ohos.web.webview' 4669import business_error from '@ohos.base' 4670 4671@Entry 4672@Component 4673struct WebComponent { 4674 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4675 @State userAgent: string = '' 4676 4677 build() { 4678 Column() { 4679 Button('getCustomUserAgent') 4680 .onClick(() => { 4681 try { 4682 this.userAgent = this.controller.getCustomUserAgent(); 4683 console.log("userAgent: " + this.userAgent); 4684 } catch (error) { 4685 let e:business_error.BusinessError = error as business_error.BusinessError; 4686 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4687 } 4688 }) 4689 Web({ src: 'www.example.com', controller: this.controller }) 4690 } 4691 } 4692} 4693``` 4694 4695## WebCookieManager 4696 4697通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。 4698 4699> **说明:** 4700> 4701> 目前调用WebCookieManager下的方法,都需要先加载Web组件。 4702 4703### getCookie 4704 4705static getCookie(url: string): string 4706 4707获取指定url对应cookie的值。 4708 4709**系统能力:** SystemCapability.Web.Webview.Core 4710 4711**参数:** 4712 4713| 参数名 | 类型 | 必填 | 说明 | 4714| ------ | ------ | ---- | :------------------------ | 4715| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 4716 4717**返回值:** 4718 4719| 类型 | 说明 | 4720| ------ | ------------------------- | 4721| string | 指定url对应的cookie的值。 | 4722 4723**错误码:** 4724 4725以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4726 4727| 错误码ID | 错误信息 | 4728| -------- | ------------------------------------------------------ | 4729| 17100002 | Invalid url. | 4730 4731**示例:** 4732 4733```ts 4734// xxx.ets 4735import web_webview from '@ohos.web.webview' 4736import business_error from '@ohos.base' 4737 4738@Entry 4739@Component 4740struct WebComponent { 4741 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4742 4743 build() { 4744 Column() { 4745 Button('getCookie') 4746 .onClick(() => { 4747 try { 4748 let value = web_webview.WebCookieManager.getCookie('https://www.example.com'); 4749 console.log("value: " + value); 4750 } catch (error) { 4751 let e:business_error.BusinessError = error as business_error.BusinessError; 4752 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4753 } 4754 }) 4755 Web({ src: 'www.example.com', controller: this.controller }) 4756 } 4757 } 4758} 4759``` 4760 4761### setCookie 4762 4763static setCookie(url: string, value: string): void 4764 4765为指定url设置单个cookie的值。 4766 4767**系统能力:** SystemCapability.Web.Webview.Core 4768 4769**参数:** 4770 4771| 参数名 | 类型 | 必填 | 说明 | 4772| ------ | ------ | ---- | :------------------------ | 4773| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 4774| value | string | 是 | 要设置的cookie的值。 | 4775 4776**错误码:** 4777 4778以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 4779 4780| 错误码ID | 错误信息 | 4781| -------- | ------------------------------------------------------ | 4782| 17100002 | Invalid url. | 4783| 17100005 | Invalid cookie value. | 4784 4785**示例:** 4786 4787```ts 4788// xxx.ets 4789import web_webview from '@ohos.web.webview' 4790import business_error from '@ohos.base' 4791 4792@Entry 4793@Component 4794struct WebComponent { 4795 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4796 4797 build() { 4798 Column() { 4799 Button('setCookie') 4800 .onClick(() => { 4801 try { 4802 web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 4803 } catch (error) { 4804 let e:business_error.BusinessError = error as business_error.BusinessError; 4805 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4806 } 4807 }) 4808 Web({ src: 'www.example.com', controller: this.controller }) 4809 } 4810 } 4811} 4812``` 4813 4814### saveCookieAsync 4815 4816static saveCookieAsync(callback: AsyncCallback\<void>): void 4817 4818将当前存在内存中的cookie异步保存到磁盘中。 4819 4820**系统能力:** SystemCapability.Web.Webview.Core 4821 4822**参数:** 4823 4824| 参数名 | 类型 | 必填 | 说明 | 4825| -------- | ---------------------- | ---- | :------------------------------------------------- | 4826| callback | AsyncCallback\<void> | 是 | callback回调,用于获取cookie是否成功保存。 | 4827 4828**示例:** 4829 4830```ts 4831// xxx.ets 4832import web_webview from '@ohos.web.webview' 4833import business_error from '@ohos.base' 4834 4835@Entry 4836@Component 4837struct WebComponent { 4838 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4839 4840 build() { 4841 Column() { 4842 Button('saveCookieAsync') 4843 .onClick(() => { 4844 try { 4845 web_webview.WebCookieManager.saveCookieAsync((error) => { 4846 if (error) { 4847 console.log("error: " + error); 4848 } 4849 }) 4850 } catch (error) { 4851 let e:business_error.BusinessError = error as business_error.BusinessError; 4852 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4853 } 4854 }) 4855 Web({ src: 'www.example.com', controller: this.controller }) 4856 } 4857 } 4858} 4859``` 4860 4861### saveCookieAsync 4862 4863static saveCookieAsync(): Promise\<void> 4864 4865将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 4866 4867**系统能力:** SystemCapability.Web.Webview.Core 4868 4869**返回值:** 4870 4871| 类型 | 说明 | 4872| ---------------- | ----------------------------------------- | 4873| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 4874 4875**示例:** 4876 4877```ts 4878// xxx.ets 4879import web_webview from '@ohos.web.webview' 4880import business_error from '@ohos.base' 4881 4882@Entry 4883@Component 4884struct WebComponent { 4885 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4886 4887 build() { 4888 Column() { 4889 Button('saveCookieAsync') 4890 .onClick(() => { 4891 try { 4892 web_webview.WebCookieManager.saveCookieAsync() 4893 .then(() => { 4894 console.log("saveCookieAsyncCallback success!"); 4895 }) 4896 .catch((error:business_error.BusinessError) => { 4897 console.error("error: " + error); 4898 }); 4899 } catch (error) { 4900 let e:business_error.BusinessError = error as business_error.BusinessError; 4901 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4902 } 4903 }) 4904 Web({ src: 'www.example.com', controller: this.controller }) 4905 } 4906 } 4907} 4908``` 4909 4910### putAcceptCookieEnabled 4911 4912static putAcceptCookieEnabled(accept: boolean): void 4913 4914设置WebCookieManager实例是否拥有发送和接收cookie的权限。 4915 4916**系统能力:** SystemCapability.Web.Webview.Core 4917 4918**参数:** 4919 4920| 参数名 | 类型 | 必填 | 说明 | 4921| ------ | ------- | ---- | :----------------------------------- | 4922| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限。 | 4923 4924**示例:** 4925 4926```ts 4927// xxx.ets 4928import web_webview from '@ohos.web.webview' 4929import business_error from '@ohos.base' 4930 4931@Entry 4932@Component 4933struct WebComponent { 4934 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4935 4936 build() { 4937 Column() { 4938 Button('putAcceptCookieEnabled') 4939 .onClick(() => { 4940 try { 4941 web_webview.WebCookieManager.putAcceptCookieEnabled(false); 4942 } catch (error) { 4943 let e:business_error.BusinessError = error as business_error.BusinessError; 4944 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4945 } 4946 }) 4947 Web({ src: 'www.example.com', controller: this.controller }) 4948 } 4949 } 4950} 4951``` 4952 4953### isCookieAllowed 4954 4955static isCookieAllowed(): boolean 4956 4957获取WebCookieManager实例是否拥有发送和接收cookie的权限。 4958 4959**系统能力:** SystemCapability.Web.Webview.Core 4960 4961**返回值:** 4962 4963| 类型 | 说明 | 4964| ------- | -------------------------------- | 4965| boolean | 是否拥有发送和接收cookie的权限,默认为true。 | 4966 4967**示例:** 4968 4969```ts 4970// xxx.ets 4971import web_webview from '@ohos.web.webview' 4972 4973@Entry 4974@Component 4975struct WebComponent { 4976 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4977 4978 build() { 4979 Column() { 4980 Button('isCookieAllowed') 4981 .onClick(() => { 4982 let result = web_webview.WebCookieManager.isCookieAllowed(); 4983 console.log("result: " + result); 4984 }) 4985 Web({ src: 'www.example.com', controller: this.controller }) 4986 } 4987 } 4988} 4989``` 4990 4991### putAcceptThirdPartyCookieEnabled 4992 4993static putAcceptThirdPartyCookieEnabled(accept: boolean): void 4994 4995设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 4996 4997**系统能力:** SystemCapability.Web.Webview.Core 4998 4999**参数:** 5000 5001| 参数名 | 类型 | 必填 | 说明 | 5002| ------ | ------- | ---- | :----------------------------------------- | 5003| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限。 | 5004 5005**示例:** 5006 5007```ts 5008// xxx.ets 5009import web_webview from '@ohos.web.webview' 5010import business_error from '@ohos.base' 5011 5012@Entry 5013@Component 5014struct WebComponent { 5015 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5016 5017 build() { 5018 Column() { 5019 Button('putAcceptThirdPartyCookieEnabled') 5020 .onClick(() => { 5021 try { 5022 web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 5023 } catch (error) { 5024 let e:business_error.BusinessError = error as business_error.BusinessError; 5025 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5026 } 5027 }) 5028 Web({ src: 'www.example.com', controller: this.controller }) 5029 } 5030 } 5031} 5032``` 5033 5034### isThirdPartyCookieAllowed 5035 5036static isThirdPartyCookieAllowed(): boolean 5037 5038获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 5039 5040**系统能力:** SystemCapability.Web.Webview.Core 5041 5042**返回值:** 5043 5044| 类型 | 说明 | 5045| ------- | -------------------------------------- | 5046| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 | 5047 5048**示例:** 5049 5050```ts 5051// xxx.ets 5052import web_webview from '@ohos.web.webview' 5053 5054@Entry 5055@Component 5056struct WebComponent { 5057 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5058 5059 build() { 5060 Column() { 5061 Button('isThirdPartyCookieAllowed') 5062 .onClick(() => { 5063 let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed(); 5064 console.log("result: " + result); 5065 }) 5066 Web({ src: 'www.example.com', controller: this.controller }) 5067 } 5068 } 5069} 5070``` 5071 5072### existCookie 5073 5074static existCookie(): boolean 5075 5076获取是否存在cookie。 5077 5078**系统能力:** SystemCapability.Web.Webview.Core 5079 5080**返回值:** 5081 5082| 类型 | 说明 | 5083| ------- | -------------------------------------- | 5084| boolean | 是否拥有发送和接收第三方cookie的权限。 | 5085 5086**示例:** 5087 5088```ts 5089// xxx.ets 5090import web_webview from '@ohos.web.webview' 5091 5092@Entry 5093@Component 5094struct WebComponent { 5095 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5096 5097 build() { 5098 Column() { 5099 Button('existCookie') 5100 .onClick(() => { 5101 let result = web_webview.WebCookieManager.existCookie(); 5102 console.log("result: " + result); 5103 }) 5104 Web({ src: 'www.example.com', controller: this.controller }) 5105 } 5106 } 5107} 5108``` 5109 5110### deleteEntireCookie 5111 5112static deleteEntireCookie(): void 5113 5114清除所有cookie。 5115 5116**系统能力:** SystemCapability.Web.Webview.Core 5117 5118**示例:** 5119 5120```ts 5121// xxx.ets 5122import web_webview from '@ohos.web.webview' 5123 5124@Entry 5125@Component 5126struct WebComponent { 5127 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5128 5129 build() { 5130 Column() { 5131 Button('deleteEntireCookie') 5132 .onClick(() => { 5133 web_webview.WebCookieManager.deleteEntireCookie(); 5134 }) 5135 Web({ src: 'www.example.com', controller: this.controller }) 5136 } 5137 } 5138} 5139``` 5140 5141### deleteSessionCookie 5142 5143static deleteSessionCookie(): void 5144 5145清除所有会话cookie。 5146 5147**系统能力:** SystemCapability.Web.Webview.Core 5148 5149**示例:** 5150 5151```ts 5152// xxx.ets 5153import web_webview from '@ohos.web.webview' 5154 5155@Entry 5156@Component 5157struct WebComponent { 5158 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5159 5160 build() { 5161 Column() { 5162 Button('deleteSessionCookie') 5163 .onClick(() => { 5164 web_webview.WebCookieManager.deleteSessionCookie(); 5165 }) 5166 Web({ src: 'www.example.com', controller: this.controller }) 5167 } 5168 } 5169} 5170``` 5171 5172## WebStorage 5173 5174通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 5175 5176> **说明:** 5177> 5178> 目前调用WebStorage下的方法,都需要先加载Web组件。 5179 5180### deleteOrigin 5181 5182static deleteOrigin(origin : string): void 5183 5184清除指定源所使用的存储。 5185 5186**系统能力:** SystemCapability.Web.Webview.Core 5187 5188**参数:** 5189 5190| 参数名 | 类型 | 必填 | 说明 | 5191| ------ | ------ | ---- | ------------------------ | 5192| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 5193 5194**错误码:** 5195 5196以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5197 5198| 错误码ID | 错误信息 | 5199| -------- | ------------------------------------------------------ | 5200| 17100011 | Invalid origin. | 5201 5202**示例:** 5203 5204```ts 5205// xxx.ets 5206import web_webview from '@ohos.web.webview'; 5207import business_error from '@ohos.base'; 5208 5209@Entry 5210@Component 5211struct WebComponent { 5212 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5213 origin: string = "resource://rawfile/"; 5214 5215 build() { 5216 Column() { 5217 Button('deleteOrigin') 5218 .onClick(() => { 5219 try { 5220 web_webview.WebStorage.deleteOrigin(this.origin); 5221 } catch (error) { 5222 let e: business_error.BusinessError = error as business_error.BusinessError; 5223 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5224 } 5225 5226 }) 5227 Web({ src: $rawfile('index.html'), controller: this.controller }) 5228 .databaseAccess(true) 5229 } 5230 } 5231} 5232``` 5233 5234加载的html文件。 5235 ```html 5236 <!-- index.html --> 5237 <!DOCTYPE html> 5238 <html> 5239 <head> 5240 <meta charset="UTF-8"> 5241 <title>test</title> 5242 <script type="text/javascript"> 5243 5244 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 5245 var msg; 5246 5247 db.transaction(function(tx){ 5248 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 5249 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 5250 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 5251 5252 document.querySelector('#status').innerHTML = msg; 5253 }); 5254 5255 db.transaction(function(tx){ 5256 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 5257 var len = results.rows.length,i; 5258 msg = "<p>查询记录条数:" + len + "</p>"; 5259 5260 document.querySelector('#status').innerHTML += msg; 5261 5262 for(i = 0; i < len; i++){ 5263 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 5264 5265 document.querySelector('#status').innerHTML += msg; 5266 } 5267 },null); 5268 }); 5269 5270 </script> 5271 </head> 5272 <body> 5273 <div id="status" name="status">状态信息</div> 5274 </body> 5275 </html> 5276 ``` 5277 5278### getOrigins 5279 5280static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>) : void 5281 5282以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 5283 5284**系统能力:** SystemCapability.Web.Webview.Core 5285 5286**参数:** 5287 5288| 参数名 | 类型 | 必填 | 说明 | 5289| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 5290| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 5291 5292**错误码:** 5293 5294以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5295 5296| 错误码ID | 错误信息 | 5297| -------- | ------------------------------------------------------ | 5298| 17100012 | Invalid web storage origin. | 5299 5300**示例:** 5301 5302```ts 5303// xxx.ets 5304import web_webview from '@ohos.web.webview'; 5305import business_error from '@ohos.base'; 5306 5307@Entry 5308@Component 5309struct WebComponent { 5310 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5311 5312 build() { 5313 Column() { 5314 Button('getOrigins') 5315 .onClick(() => { 5316 try { 5317 web_webview.WebStorage.getOrigins((error, origins) => { 5318 if (error) { 5319 console.log('error: ' + JSON.stringify(error)); 5320 return; 5321 } 5322 for (let i = 0; i < origins.length; i++) { 5323 console.log('origin: ' + origins[i].origin); 5324 console.log('usage: ' + origins[i].usage); 5325 console.log('quota: ' + origins[i].quota); 5326 } 5327 }) 5328 } catch (error) { 5329 let e: business_error.BusinessError = error as business_error.BusinessError; 5330 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5331 } 5332 5333 }) 5334 Web({ src: $rawfile('index.html'), controller: this.controller }) 5335 .databaseAccess(true) 5336 } 5337 } 5338} 5339``` 5340 5341加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5342 5343### getOrigins 5344 5345static getOrigins() : Promise\<Array\<WebStorageOrigin>> 5346 5347以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 5348 5349**系统能力:** SystemCapability.Web.Webview.Core 5350 5351**返回值:** 5352 5353| 类型 | 说明 | 5354| -------------------------------- | ------------------------------------------------------------ | 5355| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 5356 5357**错误码:** 5358 5359以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5360 5361| 错误码ID | 错误信息 | 5362| -------- | ------------------------------------------------------ | 5363| 17100012 | Invalid web storage origin. | 5364 5365**示例:** 5366 5367```ts 5368// xxx.ets 5369import web_webview from '@ohos.web.webview'; 5370import business_error from '@ohos.base'; 5371 5372@Entry 5373@Component 5374struct WebComponent { 5375 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5376 5377 build() { 5378 Column() { 5379 Button('getOrigins') 5380 .onClick(() => { 5381 try { 5382 web_webview.WebStorage.getOrigins() 5383 .then(origins => { 5384 for (let i = 0; i < origins.length; i++) { 5385 console.log('origin: ' + origins[i].origin); 5386 console.log('usage: ' + origins[i].usage); 5387 console.log('quota: ' + origins[i].quota); 5388 } 5389 }) 5390 .catch((e : business_error.BusinessError) => { 5391 console.log('error: ' + JSON.stringify(e)); 5392 }) 5393 } catch (error) { 5394 let e: business_error.BusinessError = error as business_error.BusinessError; 5395 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5396 } 5397 5398 }) 5399 Web({ src: $rawfile('index.html'), controller: this.controller }) 5400 .databaseAccess(true) 5401 } 5402 } 5403} 5404``` 5405 5406加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5407 5408### getOriginQuota 5409 5410static getOriginQuota(origin : string, callback : AsyncCallback\<number>) : void 5411 5412使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 5413 5414**系统能力:** SystemCapability.Web.Webview.Core 5415 5416**参数:** 5417 5418| 参数名 | 类型 | 必填 | 说明 | 5419| -------- | --------------------- | ---- | ------------------ | 5420| origin | string | 是 | 指定源的字符串索引 | 5421| callback | AsyncCallback\<number> | 是 | 指定源的存储配额 | 5422 5423**错误码:** 5424 5425以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5426 5427| 错误码ID | 错误信息 | 5428| -------- | ------------------------------------------------------ | 5429| 17100011 | Invalid origin. | 5430 5431**示例:** 5432 5433```ts 5434// xxx.ets 5435import web_webview from '@ohos.web.webview'; 5436import business_error from '@ohos.base'; 5437 5438@Entry 5439@Component 5440struct WebComponent { 5441 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5442 origin: string = "resource://rawfile/"; 5443 5444 build() { 5445 Column() { 5446 Button('getOriginQuota') 5447 .onClick(() => { 5448 try { 5449 web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 5450 if (error) { 5451 console.log('error: ' + JSON.stringify(error)); 5452 return; 5453 } 5454 console.log('quota: ' + quota); 5455 }) 5456 } catch (error) { 5457 let e: business_error.BusinessError = error as business_error.BusinessError; 5458 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5459 } 5460 5461 }) 5462 Web({ src: $rawfile('index.html'), controller: this.controller }) 5463 .databaseAccess(true) 5464 } 5465 } 5466} 5467``` 5468 5469加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5470 5471### getOriginQuota 5472 5473static getOriginQuota(origin : string) : Promise\<number> 5474 5475以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 5476 5477**系统能力:** SystemCapability.Web.Webview.Core 5478 5479**参数:** 5480 5481| 参数名 | 类型 | 必填 | 说明 | 5482| ------ | ------ | ---- | ------------------ | 5483| origin | string | 是 | 指定源的字符串索引 | 5484 5485**返回值:** 5486 5487| 类型 | 说明 | 5488| --------------- | --------------------------------------- | 5489| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 5490 5491**错误码:** 5492 5493以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5494 5495| 错误码ID | 错误信息 | 5496| -------- | ------------------------------------------------------ | 5497| 17100011 | Invalid origin. | 5498 5499**示例:** 5500 5501```ts 5502// xxx.ets 5503import web_webview from '@ohos.web.webview'; 5504import business_error from '@ohos.base'; 5505 5506@Entry 5507@Component 5508struct WebComponent { 5509 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5510 origin: string = "resource://rawfile/"; 5511 5512 build() { 5513 Column() { 5514 Button('getOriginQuota') 5515 .onClick(() => { 5516 try { 5517 web_webview.WebStorage.getOriginQuota(this.origin) 5518 .then(quota => { 5519 console.log('quota: ' + quota); 5520 }) 5521 .catch((e : business_error.BusinessError) => { 5522 console.log('error: ' + JSON.stringify(e)); 5523 }) 5524 } catch (error) { 5525 let e: business_error.BusinessError = error as business_error.BusinessError; 5526 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5527 } 5528 5529 }) 5530 Web({ src: $rawfile('index.html'), controller: this.controller }) 5531 .databaseAccess(true) 5532 } 5533 } 5534} 5535``` 5536 5537加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5538 5539### getOriginUsage 5540 5541static getOriginUsage(origin : string, callback : AsyncCallback\<number>) : void 5542 5543以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 5544 5545**系统能力:** SystemCapability.Web.Webview.Core 5546 5547**参数:** 5548 5549| 参数名 | 类型 | 必填 | 说明 | 5550| -------- | --------------------- | ---- | ------------------ | 5551| origin | string | 是 | 指定源的字符串索引 | 5552| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 5553 5554**错误码:** 5555 5556以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5557 5558| 错误码ID | 错误信息 | 5559| -------- | ------------------------------------------------------ | 5560| 17100011 | Invalid origin. | 5561 5562**示例:** 5563 5564```ts 5565// xxx.ets 5566import web_webview from '@ohos.web.webview'; 5567import business_error from '@ohos.base'; 5568 5569@Entry 5570@Component 5571struct WebComponent { 5572 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5573 origin: string = "resource://rawfile/"; 5574 5575 build() { 5576 Column() { 5577 Button('getOriginUsage') 5578 .onClick(() => { 5579 try { 5580 web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 5581 if (error) { 5582 console.log('error: ' + JSON.stringify(error)); 5583 return; 5584 } 5585 console.log('usage: ' + usage); 5586 }) 5587 } catch (error) { 5588 let e: business_error.BusinessError = error as business_error.BusinessError; 5589 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5590 } 5591 5592 }) 5593 Web({ src: $rawfile('index.html'), controller: this.controller }) 5594 .databaseAccess(true) 5595 } 5596 } 5597} 5598``` 5599 5600加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5601 5602### getOriginUsage 5603 5604static getOriginUsage(origin : string) : Promise\<number> 5605 5606以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 5607 5608**系统能力:** SystemCapability.Web.Webview.Core 5609 5610**参数:** 5611 5612| 参数名 | 类型 | 必填 | 说明 | 5613| ------ | ------ | ---- | ------------------ | 5614| origin | string | 是 | 指定源的字符串索引 | 5615 5616**返回值:** 5617 5618| 类型 | 说明 | 5619| --------------- | ------------------------------------- | 5620| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 5621 5622**错误码:** 5623 5624以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5625 5626| 错误码ID | 错误信息 | 5627| -------- | ----------------------------------------------------- | 5628| 17100011 | Invalid origin. | 5629 5630**示例:** 5631 5632```ts 5633// xxx.ets 5634import web_webview from '@ohos.web.webview'; 5635import business_error from '@ohos.base'; 5636 5637@Entry 5638@Component 5639struct WebComponent { 5640 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5641 origin: string = "resource://rawfile/"; 5642 5643 build() { 5644 Column() { 5645 Button('getOriginUsage') 5646 .onClick(() => { 5647 try { 5648 web_webview.WebStorage.getOriginUsage(this.origin) 5649 .then(usage => { 5650 console.log('usage: ' + usage); 5651 }) 5652 .catch((e : business_error.BusinessError) => { 5653 console.log('error: ' + JSON.stringify(e)); 5654 }) 5655 } catch (error) { 5656 let e: business_error.BusinessError = error as business_error.BusinessError; 5657 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5658 } 5659 5660 }) 5661 Web({ src: $rawfile('index.html'), controller: this.controller }) 5662 .databaseAccess(true) 5663 } 5664 } 5665} 5666``` 5667 5668加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 5669 5670### deleteAllData 5671 5672static deleteAllData(): void 5673 5674清除Web SQL数据库当前使用的所有存储。 5675 5676**系统能力:** SystemCapability.Web.Webview.Core 5677 5678**示例:** 5679 5680```ts 5681// xxx.ets 5682import web_webview from '@ohos.web.webview'; 5683import business_error from '@ohos.base'; 5684 5685@Entry 5686@Component 5687struct WebComponent { 5688 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5689 5690 build() { 5691 Column() { 5692 Button('deleteAllData') 5693 .onClick(() => { 5694 try { 5695 web_webview.WebStorage.deleteAllData(); 5696 } catch (error) { 5697 let e: business_error.BusinessError = error as business_error.BusinessError; 5698 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5699 } 5700 }) 5701 Web({ src: $rawfile('index.html'), controller: this.controller }) 5702 .databaseAccess(true) 5703 } 5704 } 5705} 5706``` 5707 5708加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。 5709 5710## WebDataBase 5711 5712web组件数据库管理对象。 5713 5714> **说明:** 5715> 5716> 目前调用WebDataBase下的方法,都需要先加载Web组件。 5717 5718### getHttpAuthCredentials 5719 5720static getHttpAuthCredentials(host: string, realm: string): Array\<string> 5721 5722检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 5723 5724**系统能力:** SystemCapability.Web.Webview.Core 5725 5726**参数:** 5727 5728| 参数名 | 类型 | 必填 | 说明 | 5729| ------ | ------ | ---- | ---------------------------- | 5730| host | string | 是 | HTTP身份验证凭据应用的主机。 | 5731| realm | string | 是 | HTTP身份验证凭据应用的域。 | 5732 5733**返回值:** 5734 5735| 类型 | 说明 | 5736| ----- | -------------------------------------------- | 5737| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 5738 5739**示例:** 5740 5741```ts 5742// xxx.ets 5743import web_webview from '@ohos.web.webview'; 5744import business_error from '@ohos.base'; 5745 5746@Entry 5747@Component 5748struct WebComponent { 5749 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5750 host: string = "www.spincast.org"; 5751 realm: string = "protected example"; 5752 username_password: string[] = []; 5753 5754 build() { 5755 Column() { 5756 Button('getHttpAuthCredentials') 5757 .onClick(() => { 5758 try { 5759 this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 5760 console.log('num: ' + this.username_password.length); 5761 } catch (error) { 5762 let e: business_error.BusinessError = error as business_error.BusinessError; 5763 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5764 } 5765 }) 5766 Web({ src: 'www.example.com', controller: this.controller }) 5767 } 5768 } 5769} 5770``` 5771 5772### saveHttpAuthCredentials 5773 5774static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 5775 5776保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 5777 5778**系统能力:** SystemCapability.Web.Webview.Core 5779 5780**参数:** 5781 5782| 参数名 | 类型 | 必填 | 说明 | 5783| -------- | ------ | ---- | ---------------------------- | 5784| host | string | 是 | HTTP身份验证凭据应用的主机。 | 5785| realm | string | 是 | HTTP身份验证凭据应用的域。 | 5786| username | string | 是 | 用户名。 | 5787| password | string | 是 | 密码。 | 5788 5789**示例:** 5790 5791```ts 5792// xxx.ets 5793import web_webview from '@ohos.web.webview'; 5794import business_error from '@ohos.base'; 5795 5796@Entry 5797@Component 5798struct WebComponent { 5799 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5800 host: string = "www.spincast.org"; 5801 realm: string = "protected example"; 5802 5803 build() { 5804 Column() { 5805 Button('saveHttpAuthCredentials') 5806 .onClick(() => { 5807 try { 5808 web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 5809 } catch (error) { 5810 let e: business_error.BusinessError = error as business_error.BusinessError; 5811 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5812 } 5813 }) 5814 Web({ src: 'www.example.com', controller: this.controller }) 5815 } 5816 } 5817} 5818``` 5819 5820### existHttpAuthCredentials 5821 5822static existHttpAuthCredentials(): boolean 5823 5824判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 5825 5826**系统能力:** SystemCapability.Web.Webview.Core 5827 5828**返回值:** 5829 5830| 类型 | 说明 | 5831| ------- | ------------------------------------------------------------ | 5832| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 5833 5834**示例:** 5835 5836```ts 5837// xxx.ets 5838import web_webview from '@ohos.web.webview'; 5839import business_error from '@ohos.base'; 5840 5841@Entry 5842@Component 5843struct WebComponent { 5844 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5845 5846 build() { 5847 Column() { 5848 Button('existHttpAuthCredentials') 5849 .onClick(() => { 5850 try { 5851 let result = web_webview.WebDataBase.existHttpAuthCredentials(); 5852 } catch (error) { 5853 let e: business_error.BusinessError = error as business_error.BusinessError; 5854 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5855 } 5856 }) 5857 Web({ src: 'www.example.com', controller: this.controller }) 5858 } 5859 } 5860} 5861``` 5862 5863### deleteHttpAuthCredentials 5864 5865static deleteHttpAuthCredentials(): void 5866 5867清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 5868 5869**系统能力:** SystemCapability.Web.Webview.Core 5870 5871**示例:** 5872 5873```ts 5874// xxx.ets 5875import web_webview from '@ohos.web.webview'; 5876import business_error from '@ohos.base'; 5877 5878@Entry 5879@Component 5880struct WebComponent { 5881 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5882 5883 build() { 5884 Column() { 5885 Button('deleteHttpAuthCredentials') 5886 .onClick(() => { 5887 try { 5888 web_webview.WebDataBase.deleteHttpAuthCredentials(); 5889 } catch (error) { 5890 let e: business_error.BusinessError = error as business_error.BusinessError; 5891 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5892 } 5893 }) 5894 Web({ src: 'www.example.com', controller: this.controller }) 5895 } 5896 } 5897} 5898``` 5899 5900## GeolocationPermissions 5901 5902web组件地理位置权限管理对象。 5903 5904> **说明:** 5905> 5906> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。 5907 5908### 需要权限 5909 5910访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](./js-apis-geolocation.md)。 5911 5912### allowGeolocation 5913 5914static allowGeolocation(origin: string): void 5915 5916允许指定来源使用地理位置接口。 5917 5918**系统能力:** SystemCapability.Web.Webview.Core 5919 5920**参数:** 5921 5922| 参数名 | 类型 | 必填 | 说明 | 5923| ------ | ------ | ---- | ------------------ | 5924| origin | string | 是 |指定源的字符串索引 | 5925 5926**错误码:** 5927 5928以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5929 5930| 错误码ID | 错误信息 | 5931| -------- | ------------------------------------------------------ | 5932| 17100011 | Invalid origin. | 5933 5934**示例:** 5935 5936```ts 5937// xxx.ets 5938import web_webview from '@ohos.web.webview'; 5939import business_error from '@ohos.base'; 5940 5941@Entry 5942@Component 5943struct WebComponent { 5944 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5945 origin: string = "file:///"; 5946 5947 build() { 5948 Column() { 5949 Button('allowGeolocation') 5950 .onClick(() => { 5951 try { 5952 web_webview.GeolocationPermissions.allowGeolocation(this.origin); 5953 } catch (error) { 5954 let e: business_error.BusinessError = error as business_error.BusinessError; 5955 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5956 } 5957 }) 5958 Web({ src: 'www.example.com', controller: this.controller }) 5959 } 5960 } 5961} 5962``` 5963 5964### deleteGeolocation 5965 5966static deleteGeolocation(origin: string): void 5967 5968清除指定来源的地理位置权限状态。 5969 5970**系统能力:** SystemCapability.Web.Webview.Core 5971 5972**参数:** 5973 5974| 参数名 | 类型 | 必填 | 说明 | 5975| ------ | ------ | ---- | ------------------ | 5976| origin | string | 是 | 指定源的字符串索引 | 5977 5978**错误码:** 5979 5980以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 5981 5982| 错误码ID | 错误信息 | 5983| -------- | ------------------------------------------------------ | 5984| 17100011 | Invalid origin. | 5985 5986**示例:** 5987 5988```ts 5989// xxx.ets 5990import web_webview from '@ohos.web.webview'; 5991import business_error from '@ohos.base'; 5992 5993@Entry 5994@Component 5995struct WebComponent { 5996 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5997 origin: string = "file:///"; 5998 5999 build() { 6000 Column() { 6001 Button('deleteGeolocation') 6002 .onClick(() => { 6003 try { 6004 web_webview.GeolocationPermissions.deleteGeolocation(this.origin); 6005 } catch (error) { 6006 let e: business_error.BusinessError = error as business_error.BusinessError; 6007 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6008 } 6009 }) 6010 Web({ src: 'www.example.com', controller: this.controller }) 6011 } 6012 } 6013} 6014``` 6015 6016### getAccessibleGeolocation 6017 6018static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>): void 6019 6020以回调方式异步获取指定源的地理位置权限状态。 6021 6022**系统能力:** SystemCapability.Web.Webview.Core 6023 6024**参数:** 6025 6026| 参数名 | 类型 | 必填 | 说明 | 6027| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 6028| origin | string | 是 | 指定源的字符串索引 | 6029| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 6030 6031**错误码:** 6032 6033以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6034 6035| 错误码ID | 错误信息 | 6036| -------- | ------------------------------------------------------ | 6037| 17100011 | Invalid origin. | 6038 6039**示例:** 6040 6041```ts 6042// xxx.ets 6043import web_webview from '@ohos.web.webview'; 6044import business_error from '@ohos.base'; 6045 6046@Entry 6047@Component 6048struct WebComponent { 6049 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6050 origin: string = "file:///"; 6051 6052 build() { 6053 Column() { 6054 Button('getAccessibleGeolocation') 6055 .onClick(() => { 6056 try { 6057 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 6058 if (error) { 6059 console.log('getAccessibleGeolocationAsync error: ' + JSON.stringify(error)); 6060 return; 6061 } 6062 console.log('getAccessibleGeolocationAsync result: ' + result); 6063 }); 6064 } catch (error) { 6065 let e: business_error.BusinessError = error as business_error.BusinessError; 6066 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6067 } 6068 }) 6069 Web({ src: 'www.example.com', controller: this.controller }) 6070 } 6071 } 6072} 6073``` 6074 6075### getAccessibleGeolocation 6076 6077static getAccessibleGeolocation(origin: string): Promise\<boolean> 6078 6079以Promise方式异步获取指定源的地理位置权限状态。 6080 6081**系统能力:** SystemCapability.Web.Webview.Core 6082 6083**参数:** 6084 6085| 参数名 | 类型 | 必填 | 说明 | 6086| ------ | -------- | ---- | -------------------- | 6087| origin | string | 是 | 指定源的字符串索引。 | 6088 6089**返回值:** 6090 6091| 类型 | 说明 | 6092| ---------------- | ------------------------------------------------------------ | 6093| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 6094 6095**错误码:** 6096 6097以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6098 6099| 错误码ID | 错误信息 | 6100| -------- | ------------------------------------------------------ | 6101| 17100011 | Invalid origin. | 6102 6103**示例:** 6104 6105```ts 6106// xxx.ets 6107import web_webview from '@ohos.web.webview'; 6108import business_error from '@ohos.base'; 6109 6110@Entry 6111@Component 6112struct WebComponent { 6113 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6114 origin: string = "file:///"; 6115 6116 build() { 6117 Column() { 6118 Button('getAccessibleGeolocation') 6119 .onClick(() => { 6120 try { 6121 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 6122 .then(result => { 6123 console.log('getAccessibleGeolocationPromise result: ' + result); 6124 }).catch((error : business_error.BusinessError) => { 6125 console.log('getAccessibleGeolocationPromise error: ' + JSON.stringify(error)); 6126 }); 6127 } catch (error) { 6128 let e: business_error.BusinessError = error as business_error.BusinessError; 6129 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6130 } 6131 }) 6132 Web({ src: 'www.example.com', controller: this.controller }) 6133 } 6134 } 6135} 6136``` 6137 6138### getStoredGeolocation 6139 6140static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>): void 6141 6142以回调方式异步获取已存储地理位置权限状态的所有源信息。 6143 6144**系统能力:** SystemCapability.Web.Webview.Core 6145 6146**参数:** 6147 6148| 参数名 | 类型 | 必填 | 说明 | 6149| -------- | ---------------------------- | ---- | ---------------------------------------- | 6150| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 6151 6152**示例:** 6153 6154```ts 6155// xxx.ets 6156import web_webview from '@ohos.web.webview'; 6157import business_error from '@ohos.base'; 6158 6159@Entry 6160@Component 6161struct WebComponent { 6162 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6163 6164 build() { 6165 Column() { 6166 Button('getStoredGeolocation') 6167 .onClick(() => { 6168 try { 6169 web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 6170 if (error) { 6171 console.log('getStoredGeolocationAsync error: ' + JSON.stringify(error)); 6172 return; 6173 } 6174 let origins_str: string = origins.join(); 6175 console.log('getStoredGeolocationAsync origins: ' + origins_str); 6176 }); 6177 } catch (error) { 6178 let e: business_error.BusinessError = error as business_error.BusinessError; 6179 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6180 } 6181 }) 6182 Web({ src: 'www.example.com', controller: this.controller }) 6183 } 6184 } 6185} 6186``` 6187 6188### getStoredGeolocation 6189 6190static getStoredGeolocation(): Promise\<Array\<string>> 6191 6192以Promise方式异步获取已存储地理位置权限状态的所有源信息。 6193 6194**系统能力:** SystemCapability.Web.Webview.Core 6195 6196**返回值:** 6197 6198| 类型 | 说明 | 6199| ---------------------- | --------------------------------------------------------- | 6200| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 6201 6202**示例:** 6203 6204```ts 6205// xxx.ets 6206import web_webview from '@ohos.web.webview'; 6207import business_error from '@ohos.base'; 6208 6209@Entry 6210@Component 6211struct WebComponent { 6212 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6213 6214 build() { 6215 Column() { 6216 Button('getStoredGeolocation') 6217 .onClick(() => { 6218 try { 6219 web_webview.GeolocationPermissions.getStoredGeolocation() 6220 .then(origins => { 6221 let origins_str: string = origins.join(); 6222 console.log('getStoredGeolocationPromise origins: ' + origins_str); 6223 }).catch((error : business_error.BusinessError) => { 6224 console.log('getStoredGeolocationPromise error: ' + JSON.stringify(error)); 6225 }); 6226 } catch (error) { 6227 let e: business_error.BusinessError = error as business_error.BusinessError; 6228 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6229 } 6230 }) 6231 Web({ src: 'www.example.com', controller: this.controller }) 6232 } 6233 } 6234} 6235``` 6236 6237### deleteAllGeolocation 6238 6239static deleteAllGeolocation(): void 6240 6241清除所有来源的地理位置权限状态。 6242 6243**系统能力:** SystemCapability.Web.Webview.Core 6244 6245**示例:** 6246 6247```ts 6248// xxx.ets 6249import web_webview from '@ohos.web.webview'; 6250import business_error from '@ohos.base'; 6251 6252@Entry 6253@Component 6254struct WebComponent { 6255 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6256 6257 build() { 6258 Column() { 6259 Button('deleteAllGeolocation') 6260 .onClick(() => { 6261 try { 6262 web_webview.GeolocationPermissions.deleteAllGeolocation(); 6263 } catch (error) { 6264 let e: business_error.BusinessError = error as business_error.BusinessError; 6265 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6266 } 6267 }) 6268 Web({ src: 'www.example.com', controller: this.controller }) 6269 } 6270 } 6271} 6272``` 6273## WebHeader 6274Web组件返回的请求/响应头对象。 6275 6276**系统能力:** SystemCapability.Web.Webview.Core 6277 6278| 名称 | 类型 | 可读 | 可写 |说明 | 6279| ----------- | ------ | -----|------|------------------- | 6280| headerKey | string | 是 | 是 | 请求/响应头的key。 | 6281| headerValue | string | 是 | 是 | 请求/响应头的value。 | 6282 6283## WebHitTestType 6284 6285**系统能力:** SystemCapability.Web.Webview.Core 6286 6287| 名称 | 值 | 说明 | 6288| ------------- | -- |----------------------------------------- | 6289| EditText | 0 |可编辑的区域。 | 6290| Email | 1 |电子邮件地址。 | 6291| HttpAnchor | 2 |超链接,其src为http。 | 6292| HttpAnchorImg | 3 |带有超链接的图片,其中超链接的src为http。 | 6293| Img | 4 |HTML::img标签。 | 6294| Map | 5 |地理地址。 | 6295| Phone | 6 |电话号码。 | 6296| Unknown | 7 |未知内容。 | 6297 6298## HitTestValue 6299 6300提供点击区域的元素信息。示例代码参考getHitTestValue。 6301 6302**系统能力:** SystemCapability.Web.Webview.Core 6303 6304| 名称 | 类型 | 可读 | 可写 | 说明| 6305| ---- | ---- | ---- | ---- |---- | 6306| type | [WebHitTestType](#webhittesttype) | 是 | 否 | 当前被点击区域的元素类型。| 6307| extra | string | 是 | 否 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 6308 6309## WebMessage 6310 6311用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 6312 6313**系统能力:** SystemCapability.Web.Webview.Core 6314 6315| 类型 | 说明 | 6316| -------- | -------------------------------------- | 6317| string | 字符串类型数据。 | 6318| ArrayBuffer | 二进制类型数据。 | 6319 6320## JsMessageType<sup>10+</sup> 6321 6322[runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 6323 6324**系统能力:** SystemCapability.Web.Webview.Core 6325 6326| 名称 | 值 | 说明 | 6327| ------------ | -- |--------------------------------- | 6328| NOT_SUPPORT | 0 |不支持的数据类型。| 6329| STRING | 1 |字符串类型。| 6330| NUMBER | 2 |数值类型。| 6331| BOOLEAN | 3 |布尔类型。| 6332| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 6333| ARRAY | 5 |数组类型| 6334 6335## WebMessageType<sup>10+</sup> 6336 6337[webMessagePort](#webmessageport)接口所支持的数据类型。 6338 6339**系统能力:** SystemCapability.Web.Webview.Core 6340 6341| 名称 | 值 | 说明 | 6342| ------------ | -- |------------------------------- | 6343| NOT_SUPPORT | 0 |不支持的数据类型。| 6344| STRING | 1 |字符串类型。| 6345| NUMBER | 2 |数值类型。| 6346| BOOLEAN | 3 |布尔类型。| 6347| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 6348| ARRAY | 5 |数组类型。| 6349| ERROR | 6 |错误类型。| 6350 6351## JsMessageExt<sup>10+</sup> 6352 6353[runJavaScirptExt](#runjavascriptext10)接口执行脚本返回的数据对象。 6354 6355### getType<sup>10+</sup> 6356 6357getType(): JsMessageType 6358 6359获取数据对象的类型。 6360 6361**系统能力:** SystemCapability.Web.Webview.Core 6362 6363**返回值:** 6364 6365| 类型 | 说明 | 6366| --------------| --------------------------------------------------------- | 6367| [JsMessageType](#jsmessagetype10) | [runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 | 6368 6369### getString<sup>10+</sup> 6370 6371getString(): string 6372 6373获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 6374 6375**系统能力:** SystemCapability.Web.Webview.Core 6376 6377**返回值:** 6378 6379| 类型 | 说明 | 6380| --------------| ------------- | 6381| string | 返回字符串类型的数据。 | 6382 6383**错误码:** 6384 6385以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6386 6387| 错误码ID | 错误信息 | 6388| -------- | ------------------------------------- | 6389| 17100014 | The type does not match with the value of the result. | 6390 6391### getNumber<sup>10+</sup> 6392 6393getNumber(): number 6394 6395获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 6396 6397**系统能力:** SystemCapability.Web.Webview.Core 6398 6399**返回值:** 6400 6401| 类型 | 说明 | 6402| --------------| ------------- | 6403| number | 返回数值类型的数据。 | 6404 6405**错误码:** 6406 6407以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6408 6409| 错误码ID | 错误信息 | 6410| -------- | ------------------------------------- | 6411| 17100014 | The type does not match with the value of the result. | 6412 6413### getBoolean<sup>10+</sup> 6414 6415getBoolean(): boolean 6416 6417获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 6418 6419**系统能力:** SystemCapability.Web.Webview.Core 6420 6421**返回值:** 6422 6423| 类型 | 说明 | 6424| --------------| ------------- | 6425| boolean | 返回布尔类型的数据。 | 6426 6427**错误码:** 6428 6429以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6430 6431| 错误码ID | 错误信息 | 6432| -------- | ------------------------------------- | 6433| 17100014 | The type does not match with the value of the result. | 6434 6435### getArrayBuffer<sup>10+</sup> 6436 6437getArrayBuffer(): ArrayBuffer 6438 6439获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 6440 6441**系统能力:** SystemCapability.Web.Webview.Core 6442 6443**返回值:** 6444 6445| 类型 | 说明 | 6446| --------------| ------------- | 6447| ArrayBuffer | 返回原始二进制数据。 | 6448 6449**错误码:** 6450 6451以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6452 6453| 错误码ID | 错误信息 | 6454| -------- | ------------------------------------- | 6455| 17100014 | The type does not match with the value of the result. | 6456 6457### getArray<sup>10+</sup> 6458 6459getArray(): Array\<string | number | boolean\> 6460 6461获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 6462 6463**系统能力:** SystemCapability.Web.Webview.Core 6464 6465**返回值:** 6466 6467| 类型 | 说明 | 6468| --------------| ------------- | 6469| Array\<string | number | boolean\> | 返回数组类型的数据。 | 6470 6471**错误码:** 6472 6473以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6474 6475| 错误码ID | 错误信息 | 6476| -------- | ------------------------------------- | 6477| 17100014 | The type does not match with the value of the result. | 6478 6479## WebMessageExt<sup>10+</sup> 6480 6481[webMessagePort](#webmessageport)接口接收、发送的的数据对象。 6482 6483### getType<sup>10+</sup> 6484 6485getType(): WebMessageType 6486 6487获取数据对象的类型。 6488 6489**系统能力:** SystemCapability.Web.Webview.Core 6490 6491**返回值:** 6492 6493| 类型 | 说明 | 6494| --------------| --------------------------------------------------------- | 6495| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 6496 6497### getString<sup>10+</sup> 6498 6499getString(): string 6500 6501获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6502 6503**系统能力:** SystemCapability.Web.Webview.Core 6504 6505**返回值:** 6506 6507| 类型 | 说明 | 6508| --------------| ------------- | 6509| string | 返回字符串类型的数据。 | 6510 6511**错误码:** 6512 6513以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6514 6515| 错误码ID | 错误信息 | 6516| -------- | ------------------------------------- | 6517| 17100014 | The type does not match with the value of the web message. | 6518 6519### getNumber<sup>10+</sup> 6520 6521getNumber(): number 6522 6523获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6524 6525**系统能力:** SystemCapability.Web.Webview.Core 6526 6527**返回值:** 6528 6529| 类型 | 说明 | 6530| --------------| ------------- | 6531| number | 返回数值类型的数据。 | 6532 6533**错误码:** 6534 6535以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6536 6537| 错误码ID | 错误信息 | 6538| -------- | ------------------------------------- | 6539| 17100014 | The type does not match with the value of the web message. | 6540 6541### getBoolean<sup>10+</sup> 6542 6543getBoolean(): boolean 6544 6545获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6546 6547**系统能力:** SystemCapability.Web.Webview.Core 6548 6549**返回值:** 6550 6551| 类型 | 说明 | 6552| --------------| ------------- | 6553| boolean | 返回布尔类型的数据。 | 6554 6555**错误码:** 6556 6557以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6558 6559| 错误码ID | 错误信息 | 6560| -------- | ------------------------------------- | 6561| 17100014 | The type does not match with the value of the web message. | 6562 6563### getArrayBuffer<sup>10+</sup> 6564 6565getArrayBuffer(): ArrayBuffer 6566 6567获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6568**系统能力:** SystemCapability.Web.Webview.Core 6569 6570**返回值:** 6571 6572| 类型 | 说明 | 6573| --------------| ------------- | 6574| ArrayBuffer | 返回原始二进制数据。 | 6575 6576**错误码:** 6577 6578以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6579 6580| 错误码ID | 错误信息 | 6581| -------- | ------------------------------------- | 6582| 17100014 | The type does not match with the value of the web message. | 6583 6584### getArray<sup>10+</sup> 6585 6586getArray(): Array\<string | number | boolean\> 6587 6588获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6589 6590**系统能力:** SystemCapability.Web.Webview.Core 6591 6592**返回值:** 6593 6594| 类型 | 说明 | 6595| --------------| ------------- | 6596| Array\<string | number | boolean\> | 返回数组类型的数据。 | 6597 6598**错误码:** 6599 6600以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6601 6602| 错误码ID | 错误信息 | 6603| -------- | ------------------------------------- | 6604| 17100014 | The type does not match with the value of the web message. | 6605 6606### getError<sup>10+</sup> 6607 6608getError(): Error 6609 6610获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6611 6612**系统能力:** SystemCapability.Web.Webview.Core 6613 6614**返回值:** 6615 6616| 类型 | 说明 | 6617| --------------| ------------- | 6618| Error | 返回错误对象类型的数据。 | 6619 6620**错误码:** 6621 6622以下错误码的详细介绍请参见[webview错误码](../errorcodes/errorcode-webview.md)。 6623 6624| 错误码ID | 错误信息 | 6625| -------- | ------------------------------------- | 6626| 17100014 | The type does not match with the value of the web message. | 6627 6628### setType<sup>10+</sup> 6629 6630setType(type: WebMessageType): void 6631 6632设置数据对象的类型。 6633 6634**系统能力:** SystemCapability.Web.Webview.Core 6635 6636**参数:** 6637 6638| 参数名 | 类型 | 必填 | 说明 | 6639| ------ | ------ | ---- | ---------------------- | 6640| type | [WebMessageType](#webmessagetype10) | 是 | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 6641 6642**错误码:** 6643 6644| 错误码ID | 错误信息 | 6645| -------- | ------------------------------------- | 6646| 17100014 | The type does not match with the value of the web message. | 6647 6648### setString<sup>10+</sup> 6649 6650setString(message: string): void 6651 6652设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6653 6654**系统能力:** SystemCapability.Web.Webview.Core 6655 6656**参数:** 6657 6658| 参数名 | 类型 | 必填 | 说明 | 6659| ------ | ------ | ---- | -------------------- | 6660| message | string | 是 | 字符串类型数据。 | 6661 6662**错误码:** 6663 6664| 错误码ID | 错误信息 | 6665| -------- | ------------------------------------- | 6666| 17100014 | The type does not match with the value of the web message. | 6667 6668### setNumber<sup>10+</sup> 6669 6670setNumber(message: number): void 6671 6672设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6673 6674**系统能力:** SystemCapability.Web.Webview.Core 6675 6676**参数:** 6677 6678| 参数名 | 类型 | 必填 | 说明 | 6679| ------ | ------ | ---- | -------------------- | 6680| message | number | 是 | 数值类型数据。 | 6681 6682**错误码:** 6683 6684| 错误码ID | 错误信息 | 6685| -------- | ------------------------------------- | 6686| 17100014 | The type does not match with the value of the web message. | 6687 6688### setBoolean<sup>10+</sup> 6689 6690setBoolean(message: boolean): void 6691 6692设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6693 6694**系统能力:** SystemCapability.Web.Webview.Core 6695 6696**参数:** 6697 6698| 参数名 | 类型 | 必填 | 说明 | 6699| ------ | ------ | ---- | -------------------- | 6700| message | boolean | 是 | 布尔类型数据。 | 6701 6702**错误码:** 6703 6704| 错误码ID | 错误信息 | 6705| -------- | ------------------------------------- | 6706| 17100014 | The type does not match with the value of the web message. | 6707 6708### setArrayBuffer<sup>10+</sup> 6709 6710setArrayBuffer(message: ArrayBuffer): void 6711 6712设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6713 6714**系统能力:** SystemCapability.Web.Webview.Core 6715 6716**参数:** 6717 6718| 参数名 | 类型 | 必填 | 说明 | 6719| ------ | ------ | ---- | -------------------- | 6720| message | ArrayBuffer | 是 | 原始二进制类型数据。 | 6721 6722**错误码:** 6723 6724| 错误码ID | 错误信息 | 6725| -------- | ------------------------------------- | 6726| 17100014 | The type does not match with the value of the web message. | 6727 6728### setArray<sup>10+</sup> 6729 6730setArray(message: Array\<string | number | boolean\>): void 6731 6732设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6733 6734**系统能力:** SystemCapability.Web.Webview.Core 6735 6736**参数:** 6737 6738| 参数名 | 类型 | 必填 | 说明 | 6739| ------ | ------ | ---- | -------------------- | 6740| message | Array\<string \| number \| boolean\> | 是 | 数组类型数据。 | 6741 6742**错误码:** 6743 6744| 错误码ID | 错误信息 | 6745| -------- | ------------------------------------- | 6746| 17100014 | The type does not match with the value of the web message. | 6747 6748### setError<sup>10+</sup> 6749 6750setError(message: Error): void 6751 6752设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 6753 6754**系统能力:** SystemCapability.Web.Webview.Core 6755 6756**参数:** 6757 6758| 参数名 | 类型 | 必填 | 说明 | 6759| ------ | ------ | ---- | -------------------- | 6760| message | Error | 是 | 错误对象类型数据。 | 6761 6762**错误码:** 6763 6764| 错误码ID | 错误信息 | 6765| -------- | ------------------------------------- | 6766| 17100014 | The type does not match with the value of the web message. | 6767 6768## WebStorageOrigin 6769 6770提供Web SQL数据库的使用信息。 6771 6772**系统能力:** SystemCapability.Web.Webview.Core 6773 6774| 名称 | 类型 | 可读 | 可写 | 说明 | 6775| ------ | ------ | ---- | ---- | ---- | 6776| origin | string | 是 | 否 | 指定源的字符串索引。 | 6777| usage | number | 是 | 否 | 指定源的存储量。 | 6778| quota | number | 是 | 否 | 指定源的存储配额。 | 6779 6780## BackForwardList 6781 6782当前Webview的历史信息列表。 6783 6784**系统能力:** SystemCapability.Web.Webview.Core 6785 6786| 名称 | 类型 | 可读 | 可写 | 说明 | 6787| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 6788| currentIndex | number | 是 | 否 | 当前在页面历史列表中的索引。 | 6789| size | number | 是 | 否 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 6790 6791### getItemAtIndex 6792 6793getItemAtIndex(index: number): HistoryItem 6794 6795获取历史列表中指定索引的历史记录项信息。 6796 6797**系统能力:** SystemCapability.Web.Webview.Core 6798 6799**参数:** 6800 6801| 参数名 | 类型 | 必填 | 说明 | 6802| ------ | ------ | ---- | ---------------------- | 6803| index | number | 是 | 指定历史列表中的索引。 | 6804 6805**返回值:** 6806 6807| 类型 | 说明 | 6808| --------------------------- | ------------ | 6809| [HistoryItem](#historyitem) | 历史记录项。 | 6810 6811**示例:** 6812 6813```ts 6814// xxx.ets 6815import web_webview from '@ohos.web.webview'; 6816import image from "@ohos.multimedia.image"; 6817import business_error from '@ohos.base'; 6818 6819@Entry 6820@Component 6821struct WebComponent { 6822 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6823 @State icon: image.PixelMap | undefined = undefined; 6824 6825 build() { 6826 Column() { 6827 Button('getBackForwardEntries') 6828 .onClick(() => { 6829 try { 6830 let list = this.controller.getBackForwardEntries(); 6831 let historyItem = list.getItemAtIndex(list.currentIndex); 6832 console.log("HistoryItem: " + JSON.stringify(historyItem)); 6833 this.icon = historyItem.icon; 6834 } catch (error) { 6835 let e: business_error.BusinessError = error as business_error.BusinessError; 6836 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6837 } 6838 }) 6839 Web({ src: 'www.example.com', controller: this.controller }) 6840 } 6841 } 6842} 6843``` 6844 6845## HistoryItem 6846 6847页面历史记录项。 6848 6849**系统能力:** SystemCapability.Web.Webview.Core 6850 6851| 名称 | 类型 | 可读 | 可写 | 说明 | 6852| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 6853| icon | [PixelMap](js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 6854| historyUrl | string | 是 | 否 | 历史记录项的url地址。 | 6855| historyRawUrl | string | 是 | 否 | 历史记录项的原始url地址。 | 6856| title | string | 是 | 否 | 历史记录项的标题。 | 6857 6858## WebCustomScheme 6859 6860自定义协议配置。 6861 6862**系统能力:** SystemCapability.Web.Webview.Core 6863 6864| 名称 | 类型 | 可读 | 可写 | 说明 | 6865| -------------- | --------- | ---- | ---- | ---------------------------- | 6866| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-'。 | 6867| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。 | 6868| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。 | 6869 6870## SecureDnsMode<sup>10+</sup> 6871 6872Web组件使用HTTPDNS的模式。 6873 6874**系统能力:** SystemCapability.Web.Webview.Core 6875 6876| 名称 | 值 | 说明 | 6877| ------------- | -- |----------------------------------------- | 6878| OFF | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。| 6879| AUTO | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。| 6880| SECURE_ONLY | 2 |强制使用设定的HTTPDNS服务器进行域名解析。|