1 2 3# @ohos.web.webview (Webview) 4 5@ohos.web.webview提供web控制能力,[web](ts-basic-components-web.md)组件提供网页显示的能力。 6 7> **说明:** 8> 9> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 10> 11> - 示例效果请以真机运行为准,当前IDE预览器不支持。 12 13## 需要权限 14 15访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.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| callback | 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("configCookieSync") 46 web_webview.WebCookieManager.configCookieSync("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错误码](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错误码](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错误码](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错误码](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 244class TestObj { 245 test(str: string): ArrayBuffer { 246 let buf = new ArrayBuffer(str.length); 247 let buff = new Uint8Array(buf); 248 249 for (let i = 0; i < str.length; i++) { 250 buff[i] = str.charCodeAt(i); 251 } 252 return buf; 253 } 254} 255 256// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。 257@Entry 258@Component 259struct WebComponent { 260 controller: web_webview.WebviewController = new web_webview.WebviewController(); 261 ports: web_webview.WebMessagePort[] = []; 262 nativePort: web_webview.WebMessagePort | null = null; 263 @State msg1: string = ""; 264 @State msg2: string = ""; 265 message: web_webview.WebMessageExt = new web_webview.WebMessageExt(); 266 @State testObjtest: TestObj = new TestObj(); 267 268 build() { 269 Column() { 270 Text(this.msg1).fontSize(16) 271 Text(this.msg2).fontSize(16) 272 Button('SendToH5 setString').margin({ 273 right: 800, 274 }) 275 .onClick(() => { 276 // 使用本侧端口发送消息给HTML5 277 try { 278 console.log("In ArkTS side send true start"); 279 if (this.nativePort) { 280 this.message.setType(1); 281 this.message.setString("helloFromEts"); 282 this.nativePort.postMessageEventExt(this.message); 283 } 284 } 285 catch (error) { 286 let e: business_error.BusinessError = error as business_error.BusinessError; 287 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 288 } 289 }) 290 Button('SendToH5 setNumber').margin({ 291 top: 10, 292 right: 800, 293 }) 294 .onClick(() => { 295 // 使用本侧端口发送消息给HTML5 296 try { 297 console.log("In ArkTS side send true start"); 298 if (this.nativePort) { 299 this.message.setType(2); 300 this.message.setNumber(12345); 301 this.nativePort.postMessageEventExt(this.message); 302 } 303 } 304 catch (error) { 305 let e: business_error.BusinessError = error as business_error.BusinessError; 306 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 307 } 308 }) 309 Button('SendToH5 setBoolean').margin({ 310 top: -90, 311 }) 312 .onClick(() => { 313 // 使用本侧端口发送消息给HTML5 314 try { 315 console.log("In ArkTS side send true start"); 316 if (this.nativePort) { 317 this.message.setType(3); 318 this.message.setBoolean(true); 319 this.nativePort.postMessageEventExt(this.message); 320 } 321 } 322 catch (error) { 323 let e: business_error.BusinessError = error as business_error.BusinessError; 324 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 325 } 326 }) 327 Button('SendToH5 setArrayBuffer').margin({ 328 top: 10, 329 }) 330 .onClick(() => { 331 // 使用本侧端口发送消息给HTML5 332 try { 333 console.log("In ArkTS side send true start"); 334 if (this.nativePort) { 335 this.message.setType(4); 336 this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test")); 337 this.nativePort.postMessageEventExt(this.message); 338 } 339 } 340 catch (error) { 341 let e: business_error.BusinessError = error as business_error.BusinessError; 342 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 343 } 344 }) 345 Button('SendToH5 setArray').margin({ 346 top: -90, 347 left: 800, 348 }) 349 .onClick(() => { 350 // 使用本侧端口发送消息给HTML5 351 try { 352 console.log("In ArkTS side send true start"); 353 if (this.nativePort) { 354 this.message.setType(5); 355 this.message.setArray([1,2,3]); 356 this.nativePort.postMessageEventExt(this.message); 357 } 358 } 359 catch (error) { 360 let e: business_error.BusinessError = error as business_error.BusinessError; 361 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 362 } 363 }) 364 Button('SendToH5 setError').margin({ 365 top: 10, 366 left: 800, 367 }) 368 .onClick(() => { 369 // 使用本侧端口发送消息给HTML5 370 try { 371 console.log("In ArkTS side send true start"); 372 throw new ReferenceError("ReferenceError"); 373 } 374 catch (error) { 375 if (this.nativePort) { 376 this.message.setType(6); 377 this.message.setError(error); 378 this.nativePort.postMessageEventExt(this.message); 379 } 380 let e: business_error.BusinessError = error as business_error.BusinessError; 381 console.error(`In ArkTS side send message catch error, ErrorCode: ${e.code}, Message: ${e.message}`); 382 } 383 }) 384 385 Web({ src: $rawfile('index.html'), controller: this.controller }) 386 .onPageEnd(() => { 387 console.log("In ArkTS side message onPageEnd init mesaage channel"); 388 // 1. 创建消息端口 389 this.ports = this.controller.createWebMessagePorts(true); 390 // 2. 发送端口1到HTML5 391 this.controller.postMessage("init_web_messageport", [this.ports[1]], "*"); 392 // 3. 保存端口0到本地 393 this.nativePort = this.ports[0]; 394 // 4. 设置回调函数 395 this.nativePort.onMessageEventExt((result) => { 396 console.log("In ArkTS side got message"); 397 try { 398 let type = result.getType(); 399 console.log("In ArkTS side getType:" + type); 400 switch (type) { 401 case web_webview.WebMessageType.STRING: { 402 this.msg1 = "result type:" + typeof (result.getString()); 403 this.msg2 = "result getString:" + ((result.getString())); 404 break; 405 } 406 case web_webview.WebMessageType.NUMBER: { 407 this.msg1 = "result type:" + typeof (result.getNumber()); 408 this.msg2 = "result getNumber:" + ((result.getNumber())); 409 break; 410 } 411 case web_webview.WebMessageType.BOOLEAN: { 412 this.msg1 = "result type:" + typeof (result.getBoolean()); 413 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 414 break; 415 } 416 case web_webview.WebMessageType.ARRAY_BUFFER: { 417 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 418 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 419 break; 420 } 421 case web_webview.WebMessageType.ARRAY: { 422 this.msg1 = "result type:" + typeof (result.getArray()); 423 this.msg2 = "result getArray:" + result.getArray(); 424 break; 425 } 426 case web_webview.WebMessageType.ERROR: { 427 this.msg1 = "result type:" + typeof (result.getError()); 428 this.msg2 = "result getError:" + result.getError(); 429 break; 430 } 431 default: { 432 this.msg1 = "default break, type:" + type; 433 break; 434 } 435 } 436 } 437 catch (error) { 438 let e: business_error.BusinessError = error as business_error.BusinessError; 439 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 440 } 441 }); 442 }) 443 } 444 } 445} 446``` 447 448加载的html文件。 449```html 450<!--index.html--> 451<!DOCTYPE html> 452<html lang="en-gb"> 453<head> 454 <title>WebView MessagePort Demo</title> 455</head> 456 457<body> 458<h1>Html5 Send and Receive Message</h1> 459<h3 id="msg">Receive string:</h3> 460<h3 id="msg2">Receive arraybuffer:</h3> 461<div style="font-size: 10pt; text-align: center;"> 462 <input type="button" value="Send String" onclick="postStringToApp();" /><br/> 463</div> 464</body> 465<script src="index.js"></script> 466</html> 467``` 468 469```js 470//index.js 471var h5Port; 472window.addEventListener('message', function(event) { 473 if (event.data == 'init_web_messageport') { 474 if(event.ports[0] != null) { 475 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 476 h5Port.onmessage = function(event) { 477 console.log("hwd In html got message"); 478 // 2. 接收ets侧发送过来的消息. 479 var result = event.data; 480 console.log("In html got message, typeof: ", typeof(result)); 481 console.log("In html got message, result: ", (result)); 482 if (typeof(result) == "string") { 483 console.log("In html got message, String: ", result); 484 document.getElementById("msg").innerHTML = "String:" + result; 485 } else if (typeof(result) == "number") { 486 console.log("In html side got message, number: ", result); 487 document.getElementById("msg").innerHTML = "Number:" + result; 488 } else if (typeof(result) == "boolean") { 489 console.log("In html side got message, boolean: ", result); 490 document.getElementById("msg").innerHTML = "Boolean:" + result; 491 } else if (typeof(result) == "object") { 492 if (result instanceof ArrayBuffer) { 493 document.getElementById("msg2").innerHTML = "ArrayBuffer:" + result.byteLength; 494 console.log("In html got message, byteLength: ", result.byteLength); 495 } else if (result instanceof Error) { 496 console.log("In html error message, err:" + (result)); 497 console.log("In html error message, typeof err:" + typeof(result)); 498 document.getElementById("msg2").innerHTML = "Error:" + result.name + ", msg:" + result.message; 499 } else if (result instanceof Array) { 500 console.log("In html got message, Array"); 501 console.log("In html got message, Array length:" + result.length); 502 console.log("In html got message, Array[0]:" + (result[0])); 503 console.log("In html got message, typeof Array[0]:" + typeof(result[0])); 504 document.getElementById("msg2").innerHTML = "Array len:" + result.length + ", value:" + result; 505 } else { 506 console.log("In html got message, not any instance of support type"); 507 document.getElementById("msg").innerHTML = "not any instance of support type"; 508 } 509 } else { 510 console.log("In html got message, not support type"); 511 document.getElementById("msg").innerHTML = "not support type"; 512 } 513 } 514 h5Port.onmessageerror = (event) => { 515 console.error(`hwd In html Error receiving message: ${event}`); 516 }; 517 } 518 } 519}) 520 521// 使用h5Port往ets侧发送String类型的消息. 522function postStringToApp() { 523 if (h5Port) { 524 console.log("In html send string message"); 525 h5Port.postMessage("hello"); 526 console.log("In html send string message end"); 527 } else { 528 console.error("In html h5port is null, please init first"); 529 } 530} 531``` 532 533### close 534 535close(): void 536 537关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。 538 539**系统能力:** SystemCapability.Web.Webview.Core 540 541**示例:** 542 543```ts 544// xxx.ets 545import web_webview from '@ohos.web.webview'; 546import business_error from '@ohos.base'; 547 548@Entry 549@Component 550struct WebComponent { 551 controller: web_webview.WebviewController = new web_webview.WebviewController(); 552 msgPort: web_webview.WebMessagePort[] = []; 553 554 build() { 555 Column() { 556 // 先使用createWebMessagePorts创建端口。 557 Button('createWebMessagePorts') 558 .onClick(() => { 559 try { 560 this.msgPort = this.controller.createWebMessagePorts(); 561 console.log("createWebMessagePorts size:" + this.msgPort.length) 562 } catch (error) { 563 let e: business_error.BusinessError = error as business_error.BusinessError; 564 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 565 } 566 }) 567 Button('close') 568 .onClick(() => { 569 try { 570 if (this.msgPort && this.msgPort.length == 2) { 571 this.msgPort[1].close(); 572 } else { 573 console.error("msgPort is null, Please initialize first"); 574 } 575 } catch (error) { 576 let e: business_error.BusinessError = error as business_error.BusinessError; 577 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 578 } 579 }) 580 Web({ src: 'www.example.com', controller: this.controller }) 581 } 582 } 583} 584``` 585 586## WebviewController 587 588通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 589 590### constructor<sup>11+</sup> 591 592constructor(webTag?: string) 593 594用于创建 WebviewController 对象的构造函数。 595 596> **说明:** 597> 598> webTag是需要开发者自定义的一个标记,即开发者给web的一个字符串形式参数,用来做标记。 599 600**系统能力:** SystemCapability.Web.Webview.Core 601 602**参数:** 603 604| 参数名 | 类型 | 必填 | 说明 | 605| ---------- | ------ | ---- | -------------------------------- | 606| webTag | string | 否 | 指定了 Web 组件的名称,默认为 Empty。 | 607 608**示例:** 609 610```ts 611// xxx.ets 612import web_webview from '@ohos.web.webview'; 613import business_error from '@ohos.base'; 614 615class WebObj { 616 constructor() { 617 } 618 619 webTest(): string { 620 console.log('Web test'); 621 return "Web test"; 622 } 623 624 webString(): void { 625 console.log('Web test toString'); 626 } 627} 628 629@Entry 630@Component 631struct WebComponent { 632 controller: web_webview.WebviewController = new web_webview.WebviewController() 633 @State webTestObj: WebObj = new WebObj(); 634 build() { 635 Column() { 636 Button('refresh') 637 .onClick(() => { 638 try { 639 this.controller.refresh(); 640 } catch (error) { 641 let e: business_error.BusinessError = error as business_error.BusinessError; 642 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 643 } 644 }) 645 Web({ src: '', controller: this.controller }) 646 .javaScriptAccess(true) 647 .onControllerAttached(() => { 648 this.controller.loadUrl($rawfile("index.html")); 649 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 650 }) 651 } 652 } 653} 654``` 655 656加载的html文件。 657```html 658<!-- index.html --> 659<!DOCTYPE html> 660<html> 661 <meta charset="utf-8"> 662 <body> 663 <button type="button" onclick="htmlTest()">Click Me!</button> 664 <p id="demo"></p> 665 <p id="webDemo"></p> 666 </body> 667 <script type="text/javascript"> 668 function htmlTest() { 669 // This function call expects to return "Web test" 670 let webStr = objTestName.webTest(); 671 document.getElementById("webDemo").innerHTML=webStr; 672 console.log('objTestName.webTest result:'+ webStr) 673 } 674</script> 675</html> 676``` 677 678### initializeWebEngine 679 680static initializeWebEngine(): void 681 682在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。 683 684**系统能力:** SystemCapability.Web.Webview.Core 685 686**示例:** 687 688本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。 689 690```ts 691// xxx.ts 692import UIAbility from '@ohos.app.ability.UIAbility'; 693import web_webview from '@ohos.web.webview'; 694import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 695import Want from '@ohos.app.ability.Want'; 696 697export default class EntryAbility extends UIAbility { 698 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 699 console.log("EntryAbility onCreate") 700 web_webview.WebviewController.initializeWebEngine() 701 console.log("EntryAbility onCreate done") 702 } 703} 704``` 705 706### setHttpDns<sup>10+</sup> 707 708static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void 709 710设置Web组件是否使用HTTPDNS解析dns。 711 712**系统能力:** SystemCapability.Web.Webview.Core 713 714**参数:** 715 716| 参数名 | 类型 | 必填 | 说明 | 717| ------------------ | ------- | ---- | ------------- | 718| secureDnsMode | [SecureDnsMode](#securednsmode10) | 是 | 使用HTTPDNS的模式。| 719| secureDnsConfig | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 | 720 721**示例:** 722 723```ts 724// xxx.ts 725import UIAbility from '@ohos.app.ability.UIAbility'; 726import web_webview from '@ohos.web.webview'; 727import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 728import Want from '@ohos.app.ability.Want'; 729import business_error from '@ohos.base'; 730 731export default class EntryAbility extends UIAbility { 732 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 733 console.log("EntryAbility onCreate") 734 try { 735 web_webview.WebviewController.setHttpDns(web_webview.SecureDnsMode.AUTO, "https://example1.test") 736 } catch (error) { 737 let e: business_error.BusinessError = error as business_error.BusinessError; 738 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 739 } 740 741 AppStorage.setOrCreate("abilityWant", want); 742 console.log("EntryAbility onCreate done") 743 } 744} 745``` 746 747### setWebDebuggingAccess 748 749static setWebDebuggingAccess(webDebuggingAccess: boolean): void 750 751设置是否启用网页调试功能。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。 752 753**系统能力:** SystemCapability.Web.Webview.Core 754 755**参数:** 756 757| 参数名 | 类型 | 必填 | 说明 | 758| ------------------ | ------- | ---- | ------------- | 759| webDebuggingAccess | boolean | 是 | 设置是否启用网页调试功能。| 760 761**示例:** 762 763```ts 764// xxx.ets 765import web_webview from '@ohos.web.webview'; 766import business_error from '@ohos.base'; 767 768@Entry 769@Component 770struct WebComponent { 771 controller: web_webview.WebviewController = new web_webview.WebviewController(); 772 773 aboutToAppear(): void { 774 try { 775 web_webview.WebviewController.setWebDebuggingAccess(true); 776 } catch (error) { 777 let e: business_error.BusinessError = error as business_error.BusinessError; 778 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 779 } 780 } 781 782 build() { 783 Column() { 784 Web({ src: 'www.example.com', controller: this.controller }) 785 } 786 } 787} 788``` 789 790### loadUrl 791 792loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 793 794加载指定的URL。 795 796**系统能力:** SystemCapability.Web.Webview.Core 797 798**参数:** 799 800| 参数名 | 类型 | 必填 | 说明 | 801| ------- | ---------------- | ---- | :-------------------- | 802| url | string \| Resource | 是 | 需要加载的 URL。 | 803| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 804 805**错误码:** 806 807以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 808 809| 错误码ID | 错误信息 | 810| -------- | ------------------------------------------------------------ | 811| 17100001 | Init error. The WebviewController must be associated with a Web component. | 812| 17100002 | Invalid url. | 813| 17100003 | Invalid resource path or file type. | 814 815**示例:** 816 817```ts 818// xxx.ets 819import web_webview from '@ohos.web.webview'; 820import business_error from '@ohos.base'; 821 822@Entry 823@Component 824struct WebComponent { 825 controller: web_webview.WebviewController = new web_webview.WebviewController(); 826 827 build() { 828 Column() { 829 Button('loadUrl') 830 .onClick(() => { 831 try { 832 // 需要加载的URL是string类型。 833 this.controller.loadUrl('www.example.com'); 834 } catch (error) { 835 let e: business_error.BusinessError = error as business_error.BusinessError; 836 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 837 } 838 }) 839 Web({ src: 'www.example.com', controller: this.controller }) 840 } 841 } 842} 843``` 844 845```ts 846// xxx.ets 847import web_webview from '@ohos.web.webview'; 848import business_error from '@ohos.base'; 849 850@Entry 851@Component 852struct WebComponent { 853 controller: web_webview.WebviewController = new web_webview.WebviewController(); 854 855 build() { 856 Column() { 857 Button('loadUrl') 858 .onClick(() => { 859 try { 860 // 带参数headers。 861 this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]); 862 } catch (error) { 863 let e: business_error.BusinessError = error as business_error.BusinessError; 864 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 865 } 866 }) 867 Web({ src: 'www.example.com', controller: this.controller }) 868 } 869 } 870} 871``` 872 873加载本地网页,加载本地资源文件有三种方式。 874 8751.$rawfile方式。 876```ts 877// xxx.ets 878import web_webview from '@ohos.web.webview'; 879import business_error from '@ohos.base'; 880 881@Entry 882@Component 883struct WebComponent { 884 controller: web_webview.WebviewController = new web_webview.WebviewController(); 885 886 build() { 887 Column() { 888 Button('loadUrl') 889 .onClick(() => { 890 try { 891 // 通过$rawfile加载本地资源文件。 892 this.controller.loadUrl($rawfile('index.html')); 893 } catch (error) { 894 let e: business_error.BusinessError = error as business_error.BusinessError; 895 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 896 } 897 }) 898 Web({ src: 'www.example.com', controller: this.controller }) 899 } 900 } 901} 902``` 903 9042.resources协议。 905```ts 906// xxx.ets 907import web_webview from '@ohos.web.webview'; 908import business_error from '@ohos.base'; 909 910@Entry 911@Component 912struct WebComponent { 913 controller: web_webview.WebviewController = new web_webview.WebviewController(); 914 915 build() { 916 Column() { 917 Button('loadUrl') 918 .onClick(() => { 919 try { 920 // 通过resource协议加载本地资源文件。 921 this.controller.loadUrl("resource://rawfile/index.html"); 922 } catch (error) { 923 let e: business_error.BusinessError = error as business_error.BusinessError; 924 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 925 } 926 }) 927 Web({ src: 'www.example.com', controller: this.controller }) 928 } 929 } 930} 931``` 932 9333.通过沙箱路径加载本地文件,可以参考[web](ts-basic-components-web.md#web)加载沙箱路径的示例代码。 934 935加载的html文件。 936```html 937<!-- index.html --> 938<!DOCTYPE html> 939<html> 940 <body> 941 <p>Hello World</p> 942 </body> 943</html> 944``` 945 946### loadData 947 948loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void 949 950加载指定的数据。 951 952**系统能力:** SystemCapability.Web.Webview.Core 953 954**参数:** 955 956| 参数名 | 类型 | 必填 | 说明 | 957| ---------- | ------ | ---- | ------------------------------------------------------------ | 958| data | string | 是 | 按照"Base64"或者"URL"编码后的一段字符串。 | 959| mimeType | string | 是 | 媒体类型(MIME)。 | 960| encoding | string | 是 | 编码类型,具体为"Base64"或者"URL"编码。 | 961| baseUrl | string | 否 | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 | 962| historyUrl | string | 否 | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 | 963 964> **说明:** 965> 966> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。 967> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。 968> 若html中的富文本中带有注入#等特殊字符,建议使用带有两个空格的loadData函数,将baseUrl和historyUrl置为空。 969 970**错误码:** 971 972以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 973 974| 错误码ID | 错误信息 | 975| -------- | ------------------------------------------------------------ | 976| 17100001 | Init error. The WebviewController must be associated with a Web component. | 977 978**示例:** 979 980```ts 981// xxx.ets 982import web_webview from '@ohos.web.webview'; 983import business_error from '@ohos.base'; 984 985@Entry 986@Component 987struct WebComponent { 988 controller: web_webview.WebviewController = new web_webview.WebviewController(); 989 990 build() { 991 Column() { 992 Button('loadData') 993 .onClick(() => { 994 try { 995 this.controller.loadData( 996 "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 997 "text/html", 998 "UTF-8" 999 ); 1000 } catch (error) { 1001 let e: business_error.BusinessError = error as business_error.BusinessError; 1002 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1003 } 1004 }) 1005 Web({ src: 'www.example.com', controller: this.controller }) 1006 } 1007 } 1008} 1009``` 1010 1011加载本地资源 1012```ts 1013// xxx.ets 1014import web_webview from '@ohos.web.webview'; 1015import business_error from '@ohos.base'; 1016 1017@Entry 1018@Component 1019struct WebComponent { 1020 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1021 updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>' 1022 1023 build() { 1024 Column() { 1025 Button('loadData') 1026 .onClick(() => { 1027 try { 1028 this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " "); 1029 } catch (error) { 1030 let e: business_error.BusinessError = error as business_error.BusinessError; 1031 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1032 } 1033 }) 1034 Web({ src: 'www.example.com', controller: this.controller }) 1035 } 1036 } 1037} 1038``` 1039 1040### accessForward 1041 1042accessForward(): boolean 1043 1044当前页面是否可前进,即当前页面是否有前进历史记录。 1045 1046**系统能力:** SystemCapability.Web.Webview.Core 1047 1048**返回值:** 1049 1050| 类型 | 说明 | 1051| ------- | --------------------------------- | 1052| boolean | 可以前进返回true,否则返回false。 | 1053 1054**错误码:** 1055 1056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1057 1058| 错误码ID | 错误信息 | 1059| -------- | ------------------------------------------------------------ | 1060| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1061 1062**示例:** 1063 1064```ts 1065// xxx.ets 1066import web_webview from '@ohos.web.webview'; 1067import business_error from '@ohos.base'; 1068 1069@Entry 1070@Component 1071struct WebComponent { 1072 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1073 1074 build() { 1075 Column() { 1076 Button('accessForward') 1077 .onClick(() => { 1078 try { 1079 let result = this.controller.accessForward(); 1080 console.log('result:' + result); 1081 } catch (error) { 1082 let e: business_error.BusinessError = error as business_error.BusinessError; 1083 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1084 } 1085 }) 1086 Web({ src: 'www.example.com', controller: this.controller }) 1087 } 1088 } 1089} 1090``` 1091 1092### forward 1093 1094forward(): void 1095 1096按照历史栈,前进一个页面。一般结合accessForward一起使用。 1097 1098**系统能力:** SystemCapability.Web.Webview.Core 1099 1100**错误码:** 1101 1102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1103 1104| 错误码ID | 错误信息 | 1105| -------- | ------------------------------------------------------------ | 1106| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1107 1108**示例:** 1109 1110```ts 1111// xxx.ets 1112import web_webview from '@ohos.web.webview'; 1113import business_error from '@ohos.base'; 1114 1115@Entry 1116@Component 1117struct WebComponent { 1118 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1119 1120 build() { 1121 Column() { 1122 Button('forward') 1123 .onClick(() => { 1124 try { 1125 this.controller.forward(); 1126 } catch (error) { 1127 let e: business_error.BusinessError = error as business_error.BusinessError; 1128 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1129 } 1130 }) 1131 Web({ src: 'www.example.com', controller: this.controller }) 1132 } 1133 } 1134} 1135``` 1136 1137### accessBackward 1138 1139accessBackward(): boolean 1140 1141当前页面是否可后退,即当前页面是否有返回历史记录。 1142 1143**系统能力:** SystemCapability.Web.Webview.Core 1144 1145**返回值:** 1146 1147| 类型 | 说明 | 1148| ------- | -------------------------------- | 1149| boolean | 可以后退返回true,否则返回false。 | 1150 1151**错误码:** 1152 1153以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1154 1155| 错误码ID | 错误信息 | 1156| -------- | ------------------------------------------------------------ | 1157| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1158 1159**示例:** 1160 1161```ts 1162// xxx.ets 1163import web_webview from '@ohos.web.webview'; 1164import business_error from '@ohos.base'; 1165 1166@Entry 1167@Component 1168struct WebComponent { 1169 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1170 1171 build() { 1172 Column() { 1173 Button('accessBackward') 1174 .onClick(() => { 1175 try { 1176 let result = this.controller.accessBackward(); 1177 console.log('result:' + result); 1178 } catch (error) { 1179 let e: business_error.BusinessError = error as business_error.BusinessError; 1180 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1181 } 1182 }) 1183 Web({ src: 'www.example.com', controller: this.controller }) 1184 } 1185 } 1186} 1187``` 1188 1189### backward 1190 1191backward(): void 1192 1193按照历史栈,后退一个页面。一般结合accessBackward一起使用。 1194 1195**系统能力:** SystemCapability.Web.Webview.Core 1196 1197**错误码:** 1198 1199以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1200 1201| 错误码ID | 错误信息 | 1202| -------- | ------------------------------------------------------------ | 1203| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1204 1205**示例:** 1206 1207```ts 1208// xxx.ets 1209import web_webview from '@ohos.web.webview'; 1210import business_error from '@ohos.base'; 1211 1212@Entry 1213@Component 1214struct WebComponent { 1215 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1216 1217 build() { 1218 Column() { 1219 Button('backward') 1220 .onClick(() => { 1221 try { 1222 this.controller.backward(); 1223 } catch (error) { 1224 let e: business_error.BusinessError = error as business_error.BusinessError; 1225 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1226 } 1227 }) 1228 Web({ src: 'www.example.com', controller: this.controller }) 1229 } 1230 } 1231} 1232``` 1233 1234### onActive 1235 1236onActive(): void 1237 1238调用此接口通知Web组件进入前台激活状态。 1239<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。 1240 1241**系统能力:** SystemCapability.Web.Webview.Core 1242 1243**错误码:** 1244 1245以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1246 1247| 错误码ID | 错误信息 | 1248| -------- | ------------------------------------------------------------ | 1249| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1250 1251**示例:** 1252 1253```ts 1254// xxx.ets 1255import web_webview from '@ohos.web.webview'; 1256import business_error from '@ohos.base'; 1257 1258@Entry 1259@Component 1260struct WebComponent { 1261 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1262 1263 build() { 1264 Column() { 1265 Button('onActive') 1266 .onClick(() => { 1267 try { 1268 this.controller.onActive(); 1269 } catch (error) { 1270 let e: business_error.BusinessError = error as business_error.BusinessError; 1271 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1272 } 1273 }) 1274 Web({ src: 'www.example.com', controller: this.controller }) 1275 } 1276 } 1277} 1278``` 1279 1280### onInactive 1281 1282onInactive(): void 1283 1284调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。 1285 1286**系统能力:** SystemCapability.Web.Webview.Core 1287 1288**错误码:** 1289 1290以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1291 1292| 错误码ID | 错误信息 | 1293| -------- | ------------------------------------------------------------ | 1294| 17100001 | Init error. The WebviewController must be associated with a Web component. | 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('onInactive') 1311 .onClick(() => { 1312 try { 1313 this.controller.onInactive(); 1314 } catch (error) { 1315 let e: business_error.BusinessError = error as business_error.BusinessError; 1316 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1317 } 1318 }) 1319 Web({ src: 'www.example.com', controller: this.controller }) 1320 } 1321 } 1322} 1323``` 1324 1325### refresh 1326refresh(): void 1327 1328调用此接口通知Web组件刷新网页。 1329 1330**系统能力:** SystemCapability.Web.Webview.Core 1331 1332**错误码:** 1333 1334以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1335 1336| 错误码ID | 错误信息 | 1337| -------- | ------------------------------------------------------------ | 1338| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1339 1340**示例:** 1341 1342```ts 1343// xxx.ets 1344import web_webview from '@ohos.web.webview'; 1345import business_error from '@ohos.base'; 1346 1347@Entry 1348@Component 1349struct WebComponent { 1350 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1351 1352 build() { 1353 Column() { 1354 Button('refresh') 1355 .onClick(() => { 1356 try { 1357 this.controller.refresh(); 1358 } catch (error) { 1359 let e: business_error.BusinessError = error as business_error.BusinessError; 1360 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1361 } 1362 }) 1363 Web({ src: 'www.example.com', controller: this.controller }) 1364 } 1365 } 1366} 1367``` 1368 1369### accessStep 1370 1371accessStep(step: number): boolean 1372 1373当前页面是否可前进或者后退给定的step步。 1374 1375**系统能力:** SystemCapability.Web.Webview.Core 1376 1377**参数:** 1378 1379| 参数名 | 类型 | 必填 | 说明 | 1380| ------ | -------- | ---- | ------------------------------------------ | 1381| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 1382 1383**返回值:** 1384 1385| 类型 | 说明 | 1386| ------- | ------------------ | 1387| boolean | 页面是否前进或后退 | 1388 1389**错误码:** 1390 1391以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1392 1393| 错误码ID | 错误信息 | 1394| -------- | ------------------------------------------------------------ | 1395| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1396 1397**示例:** 1398 1399```ts 1400// xxx.ets 1401import web_webview from '@ohos.web.webview'; 1402import business_error from '@ohos.base'; 1403 1404@Entry 1405@Component 1406struct WebComponent { 1407 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1408 @State steps: number = 2; 1409 1410 build() { 1411 Column() { 1412 Button('accessStep') 1413 .onClick(() => { 1414 try { 1415 let result = this.controller.accessStep(this.steps); 1416 console.log('result:' + result); 1417 } catch (error) { 1418 let e: business_error.BusinessError = error as business_error.BusinessError; 1419 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1420 } 1421 }) 1422 Web({ src: 'www.example.com', controller: this.controller }) 1423 } 1424 } 1425} 1426``` 1427 1428### clearHistory 1429 1430clearHistory(): void 1431 1432删除所有前进后退记录。 1433 1434**系统能力:** SystemCapability.Web.Webview.Core 1435 1436**错误码:** 1437 1438以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1439 1440| 错误码ID | 错误信息 | 1441| -------- | ------------------------------------------------------------ | 1442| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1443 1444**示例:** 1445 1446```ts 1447// xxx.ets 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 1456 build() { 1457 Column() { 1458 Button('clearHistory') 1459 .onClick(() => { 1460 try { 1461 this.controller.clearHistory(); 1462 } catch (error) { 1463 let e: business_error.BusinessError = error as business_error.BusinessError; 1464 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1465 } 1466 }) 1467 Web({ src: 'www.example.com', controller: this.controller }) 1468 } 1469 } 1470} 1471``` 1472 1473### getHitTest 1474 1475getHitTest(): WebHitTestType 1476 1477获取当前被点击区域的元素类型。 1478 1479**系统能力:** SystemCapability.Web.Webview.Core 1480 1481**返回值:** 1482 1483| 类型 | 说明 | 1484| ------------------------------------------------------------ | ---------------------- | 1485| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 1486 1487**错误码:** 1488 1489以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1490 1491| 错误码ID | 错误信息 | 1492| -------- | ------------------------------------------------------------ | 1493| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1494 1495**示例:** 1496 1497```ts 1498// xxx.ets 1499import web_webview from '@ohos.web.webview'; 1500import business_error from '@ohos.base'; 1501 1502@Entry 1503@Component 1504struct WebComponent { 1505 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1506 1507 build() { 1508 Column() { 1509 Button('getHitTest') 1510 .onClick(() => { 1511 try { 1512 let hitTestType = this.controller.getHitTest(); 1513 console.log("hitTestType: " + hitTestType); 1514 } catch (error) { 1515 let e: business_error.BusinessError = error as business_error.BusinessError; 1516 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1517 } 1518 }) 1519 Web({ src: 'www.example.com', controller: this.controller }) 1520 } 1521 } 1522} 1523``` 1524 1525### registerJavaScriptProxy 1526 1527registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>): void 1528 1529注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 1530 1531**系统能力:** SystemCapability.Web.Webview.Core 1532 1533**参数:** 1534 1535| 参数名 | 类型 | 必填 | 说明 | 1536| ---------- | -------------- | ---- | ------------------------------------------------------------ | 1537| object | object | 是 | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。<br>方法的参数和返回类型可以为string,number,boolean。<br>方法的参数和返回类型支持Dictionary,Array,最多嵌套10层,每层1w个数据。<br>方法的参数和返回类型支持Object,需要在Object里添加属性methodNameListForJsProxy:[fun1, fun2],fun1和fun2为可被调用的方法。<br>方法的参数支持Function,Promise,它们的Callback不能有返回值。<br>方法的返回类型支持Promise,Promise的Callback不能有返回值。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 | 1538| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 1539| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的方法。 | 1540 1541**错误码:** 1542 1543以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1544 1545| 错误码ID | 错误信息 | 1546| -------- | ------------------------------------------------------------ | 1547| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1548 1549**示例:** 1550 1551```ts 1552// xxx.ets 1553import web_webview from '@ohos.web.webview'; 1554import business_error from '@ohos.base'; 1555 1556class TestObj { 1557 constructor() { 1558 } 1559 1560 test(testStr:string): string { 1561 console.log('Web Component str' + testStr); 1562 return testStr; 1563 } 1564 1565 toString(): void { 1566 console.log('Web Component toString'); 1567 } 1568 1569 testNumber(testNum:number): number { 1570 console.log('Web Component number' + testNum); 1571 return testNum; 1572 } 1573 1574 testBool(testBol:boolean): boolean { 1575 console.log('Web Component boolean' + testBol); 1576 return testBol; 1577 } 1578} 1579 1580class WebObj { 1581 constructor() { 1582 } 1583 1584 webTest(): string { 1585 console.log('Web test'); 1586 return "Web test"; 1587 } 1588 1589 webString(): void { 1590 console.log('Web test toString'); 1591 } 1592} 1593 1594@Entry 1595@Component 1596struct Index { 1597 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1598 @State testObjtest: TestObj = new TestObj(); 1599 @State webTestObj: WebObj = new WebObj(); 1600 build() { 1601 Column() { 1602 Button('refresh') 1603 .onClick(() => { 1604 try { 1605 this.controller.refresh(); 1606 } catch (error) { 1607 let e: business_error.BusinessError = error as business_error.BusinessError; 1608 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1609 } 1610 }) 1611 Button('Register JavaScript To Window') 1612 .onClick(() => { 1613 try { 1614 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]); 1615 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 1616 } catch (error) { 1617 let e: business_error.BusinessError = error as business_error.BusinessError; 1618 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1619 } 1620 }) 1621 Web({ src: $rawfile('index.html'), controller: this.controller }) 1622 .javaScriptAccess(true) 1623 } 1624 } 1625} 1626``` 1627 1628加载的html文件。 1629```html 1630<!-- index.html --> 1631<!DOCTYPE html> 1632<html> 1633 <meta charset="utf-8"> 1634 <body> 1635 <button type="button" onclick="htmlTest()">Click Me!</button> 1636 <p id="demo"></p> 1637 <p id="webDemo"></p> 1638 </body> 1639 <script type="text/javascript"> 1640 function htmlTest() { 1641 // This function call expects to return "ArkUI Web Component" 1642 let str=objName.test("webtest data"); 1643 objName.testNumber(1); 1644 objName.testBool(true); 1645 document.getElementById("demo").innerHTML=str; 1646 console.log('objName.test result:'+ str) 1647 1648 // This function call expects to return "Web test" 1649 let webStr = objTestName.webTest(); 1650 document.getElementById("webDemo").innerHTML=webStr; 1651 console.log('objTestName.webTest result:'+ webStr) 1652 } 1653</script> 1654</html> 1655``` 1656更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 1657 1658### runJavaScript 1659 1660runJavaScript(script: string, callback : AsyncCallback\<string>): void 1661 1662异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1663 1664**系统能力:** SystemCapability.Web.Webview.Core 1665 1666**参数:** 1667 1668| 参数名 | 类型 | 必填 | 说明 | 1669| -------- | -------------------- | ---- | ---------------------------- | 1670| script | string | 是 | JavaScript脚本。 | 1671| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1672 1673**错误码:** 1674 1675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1676 1677| 错误码ID | 错误信息 | 1678| -------- | ------------------------------------------------------------ | 1679| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1680 1681**示例:** 1682 1683```ts 1684import web_webview from '@ohos.web.webview'; 1685import business_error from '@ohos.base'; 1686 1687@Entry 1688@Component 1689struct WebComponent { 1690 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1691 @State webResult: string = '' 1692 1693 build() { 1694 Column() { 1695 Text(this.webResult).fontSize(20) 1696 Web({ src: $rawfile('index.html'), controller: this.controller }) 1697 .javaScriptAccess(true) 1698 .onPageEnd(e => { 1699 try { 1700 this.controller.runJavaScript( 1701 'test()', 1702 (error, result) => { 1703 if (error) { 1704 let e: business_error.BusinessError = error as business_error.BusinessError; 1705 console.error(`run JavaScript error, ErrorCode: ${e.code}, Message: ${e.message}`); 1706 return; 1707 } 1708 if (result) { 1709 this.webResult = result 1710 console.info(`The test() return value is: ${result}`) 1711 } 1712 }); 1713 if (e) { 1714 console.info('url: ', e.url); 1715 } 1716 } catch (error) { 1717 let e: business_error.BusinessError = error as business_error.BusinessError; 1718 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1719 } 1720 }) 1721 } 1722 } 1723} 1724``` 1725 1726加载的html文件。 1727```html 1728<!-- index.html --> 1729<!DOCTYPE html> 1730<html> 1731 <meta charset="utf-8"> 1732 <body> 1733 Hello world! 1734 </body> 1735 <script type="text/javascript"> 1736 function test() { 1737 console.log('Ark WebComponent') 1738 return "This value is from index.html" 1739 } 1740 </script> 1741</html> 1742``` 1743 1744### runJavaScript 1745 1746runJavaScript(script: string): Promise\<string> 1747 1748异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1749 1750**系统能力:** SystemCapability.Web.Webview.Core 1751 1752**参数:** 1753 1754| 参数名 | 类型 | 必填 | 说明 | 1755| ------ | -------- | ---- | ---------------- | 1756| script | string | 是 | JavaScript脚本。 | 1757 1758**返回值:** 1759 1760| 类型 | 说明 | 1761| --------------- | --------------------------------------------------- | 1762| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1763 1764**错误码:** 1765 1766以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1767 1768| 错误码ID | 错误信息 | 1769| -------- | ------------------------------------------------------------ | 1770| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1771 1772**示例:** 1773 1774```ts 1775// xxx.ets 1776import web_webview from '@ohos.web.webview'; 1777import business_error from '@ohos.base'; 1778 1779@Entry 1780@Component 1781struct WebComponent { 1782 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1783 1784 build() { 1785 Column() { 1786 Web({ src: $rawfile('index.html'), controller: this.controller }) 1787 .javaScriptAccess(true) 1788 .onPageEnd(e => { 1789 try { 1790 this.controller.runJavaScript('test()') 1791 .then((result) => { 1792 console.log('result: ' + result); 1793 }) 1794 .catch((error: business_error.BusinessError) => { 1795 console.error("error: " + error); 1796 }) 1797 if (e) { 1798 console.info('url: ', e.url); 1799 } 1800 } catch (error) { 1801 let e: business_error.BusinessError = error as business_error.BusinessError; 1802 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1803 } 1804 }) 1805 } 1806 } 1807} 1808``` 1809 1810加载的html文件。 1811```html 1812<!-- index.html --> 1813<!DOCTYPE html> 1814<html> 1815 <meta charset="utf-8"> 1816 <body> 1817 Hello world! 1818 </body> 1819 <script type="text/javascript"> 1820 function test() { 1821 console.log('Ark WebComponent') 1822 return "This value is from index.html" 1823 } 1824 </script> 1825</html> 1826``` 1827 1828### runJavaScriptExt<sup>10+</sup> 1829 1830runJavaScriptExt(script: string, callback : AsyncCallback\<JsMessageExt>): void 1831 1832异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1833 1834**系统能力:** SystemCapability.Web.Webview.Core 1835 1836**参数:** 1837 1838| 参数名 | 类型 | 必填 | 说明 | 1839| -------- | -------------------- | ---- | ---------------------------- | 1840| script | string | 是 | JavaScript脚本。 | 1841| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是 | 回调执行JavaScript脚本结果。 | 1842 1843**错误码:** 1844 1845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1846 1847| 错误码ID | 错误信息 | 1848| -------- | ------------------------------------------------------------ | 1849| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1850 1851**示例:** 1852 1853```ts 1854import web_webview from '@ohos.web.webview'; 1855import business_error from '@ohos.base'; 1856 1857@Entry 1858@Component 1859struct WebComponent { 1860 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1861 @State msg1: string = '' 1862 @State msg2: string = '' 1863 1864 build() { 1865 Column() { 1866 Text(this.msg1).fontSize(20) 1867 Text(this.msg2).fontSize(20) 1868 Web({ src: $rawfile('index.html'), controller: this.controller }) 1869 .javaScriptAccess(true) 1870 .onPageEnd(e => { 1871 try { 1872 this.controller.runJavaScriptExt( 1873 'test()', 1874 (error, result) => { 1875 if (error) { 1876 let e: business_error.BusinessError = error as business_error.BusinessError; 1877 console.error(`run JavaScript error, ErrorCode: ${e.code}, Message: ${e.message}`) 1878 return; 1879 } 1880 if (result) { 1881 try { 1882 let type = result.getType(); 1883 switch (type) { 1884 case web_webview.JsMessageType.STRING: { 1885 this.msg1 = "result type:" + typeof (result.getString()); 1886 this.msg2 = "result getString:" + ((result.getString())); 1887 break; 1888 } 1889 case web_webview.JsMessageType.NUMBER: { 1890 this.msg1 = "result type:" + typeof (result.getNumber()); 1891 this.msg2 = "result getNumber:" + ((result.getNumber())); 1892 break; 1893 } 1894 case web_webview.JsMessageType.BOOLEAN: { 1895 this.msg1 = "result type:" + typeof (result.getBoolean()); 1896 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 1897 break; 1898 } 1899 case web_webview.JsMessageType.ARRAY_BUFFER: { 1900 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 1901 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 1902 break; 1903 } 1904 case web_webview.JsMessageType.ARRAY: { 1905 this.msg1 = "result type:" + typeof (result.getArray()); 1906 this.msg2 = "result getArray:" + result.getArray(); 1907 break; 1908 } 1909 default: { 1910 this.msg1 = "default break, type:" + type; 1911 break; 1912 } 1913 } 1914 } 1915 catch (resError) { 1916 let e: business_error.BusinessError = resError as business_error.BusinessError; 1917 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1918 } 1919 } 1920 }); 1921 if (e) { 1922 console.info('url: ', e.url); 1923 } 1924 } catch (error) { 1925 let e: business_error.BusinessError = error as business_error.BusinessError; 1926 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 1927 } 1928 }) 1929 } 1930 } 1931} 1932``` 1933 1934加载的html文件。 1935```html 1936<!-- index.html --> 1937<!DOCTYPE html> 1938<html lang="en-gb"> 1939<body> 1940<h1>run JavaScript Ext demo</h1> 1941</body> 1942<script type="text/javascript"> 1943function test() { 1944 return "hello, world"; 1945} 1946</script> 1947</html> 1948``` 1949 1950### runJavaScriptExt<sup>10+</sup> 1951 1952runJavaScriptExt(script: string): Promise\<JsMessageExt> 1953 1954异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1955 1956**系统能力:** SystemCapability.Web.Webview.Core 1957 1958**参数:** 1959 1960| 参数名 | 类型 | 必填 | 说明 | 1961| ------ | -------- | ---- | ---------------- | 1962| script | string | 是 | JavaScript脚本。 | 1963 1964**返回值:** 1965 1966| 类型 | 说明 | 1967| --------------- | --------------------------------------------------- | 1968| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 | 1969 1970**错误码:** 1971 1972以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1973 1974| 错误码ID | 错误信息 | 1975| -------- | ------------------------------------------------------------ | 1976| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1977 1978**示例:** 1979 1980```ts 1981// xxx.ets 1982import web_webview from '@ohos.web.webview'; 1983import business_error from '@ohos.base'; 1984 1985@Entry 1986@Component 1987struct WebComponent { 1988 controller: web_webview.WebviewController = new web_webview.WebviewController(); 1989 @State webResult: string = ''; 1990 @State msg1: string = '' 1991 @State msg2: string = '' 1992 1993 build() { 1994 Column() { 1995 Text(this.webResult).fontSize(20) 1996 Text(this.msg1).fontSize(20) 1997 Text(this.msg2).fontSize(20) 1998 Web({ src: $rawfile('index.html'), controller: this.controller }) 1999 .javaScriptAccess(true) 2000 .onPageEnd(() => { 2001 this.controller.runJavaScriptExt('test()') 2002 .then((result) => { 2003 try { 2004 let type = result.getType(); 2005 switch (type) { 2006 case web_webview.JsMessageType.STRING: { 2007 this.msg1 = "result type:" + typeof (result.getString()); 2008 this.msg2 = "result getString:" + ((result.getString())); 2009 break; 2010 } 2011 case web_webview.JsMessageType.NUMBER: { 2012 this.msg1 = "result type:" + typeof (result.getNumber()); 2013 this.msg2 = "result getNumber:" + ((result.getNumber())); 2014 break; 2015 } 2016 case web_webview.JsMessageType.BOOLEAN: { 2017 this.msg1 = "result type:" + typeof (result.getBoolean()); 2018 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2019 break; 2020 } 2021 case web_webview.JsMessageType.ARRAY_BUFFER: { 2022 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2023 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2024 break; 2025 } 2026 case web_webview.JsMessageType.ARRAY: { 2027 this.msg1 = "result type:" + typeof (result.getArray()); 2028 this.msg2 = "result getArray:" + result.getArray(); 2029 break; 2030 } 2031 default: { 2032 this.msg1 = "default break, type:" + type; 2033 break; 2034 } 2035 } 2036 } 2037 catch (resError) { 2038 let e: business_error.BusinessError = resError as business_error.BusinessError; 2039 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2040 } 2041 }) 2042 .catch((error: business_error.BusinessError) => { 2043 console.error("error: " + error); 2044 }) 2045 }) 2046 } 2047 } 2048} 2049``` 2050 2051加载的html文件。 2052```html 2053<!-- index.html --> 2054<!DOCTYPE html> 2055<html lang="en-gb"> 2056<body> 2057<h1>run JavaScript Ext demo</h1> 2058</body> 2059<script type="text/javascript"> 2060function test() { 2061 return "hello, world"; 2062} 2063</script> 2064</html> 2065``` 2066 2067### deleteJavaScriptRegister 2068 2069deleteJavaScriptRegister(name: string): void 2070 2071删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。 2072 2073**系统能力:** SystemCapability.Web.Webview.Core 2074 2075**参数:** 2076 2077| 参数名 | 类型 | 必填 | 说明 | 2078| ------ | -------- | ---- | ---- | 2079| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 2080 2081**错误码:** 2082 2083以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2084 2085| 错误码ID | 错误信息 | 2086| -------- | ------------------------------------------------------------ | 2087| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2088| 17100008 | Cannot delete JavaScriptProxy. | 2089 2090**示例:** 2091 2092```ts 2093// xxx.ets 2094import web_webview from '@ohos.web.webview'; 2095import business_error from '@ohos.base'; 2096 2097class TestObj { 2098 constructor() { 2099 } 2100 2101 test(): string { 2102 return "ArkUI Web Component"; 2103 } 2104 2105 toString(): void { 2106 console.log('Web Component toString'); 2107 } 2108} 2109 2110@Entry 2111@Component 2112struct WebComponent { 2113 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2114 @State testObjtest: TestObj = new TestObj(); 2115 @State name: string = 'objName'; 2116 build() { 2117 Column() { 2118 Button('refresh') 2119 .onClick(() => { 2120 try { 2121 this.controller.refresh(); 2122 } catch (error) { 2123 let e: business_error.BusinessError = error as business_error.BusinessError; 2124 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2125 } 2126 }) 2127 Button('Register JavaScript To Window') 2128 .onClick(() => { 2129 try { 2130 this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]); 2131 } catch (error) { 2132 let e: business_error.BusinessError = error as business_error.BusinessError; 2133 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2134 } 2135 }) 2136 Button('deleteJavaScriptRegister') 2137 .onClick(() => { 2138 try { 2139 this.controller.deleteJavaScriptRegister(this.name); 2140 } catch (error) { 2141 let e: business_error.BusinessError = error as business_error.BusinessError; 2142 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2143 } 2144 }) 2145 Web({ src: $rawfile('index.html'), controller: this.controller }) 2146 .javaScriptAccess(true) 2147 } 2148 } 2149} 2150``` 2151 2152加载的html文件。 2153```html 2154<!-- index.html --> 2155<!DOCTYPE html> 2156<html> 2157 <meta charset="utf-8"> 2158 <body> 2159 <button type="button" onclick="htmlTest()">Click Me!</button> 2160 <p id="demo"></p> 2161 </body> 2162 <script type="text/javascript"> 2163 function htmlTest() { 2164 let str=objName.test(); 2165 document.getElementById("demo").innerHTML=str; 2166 console.log('objName.test result:'+ str) 2167 } 2168</script> 2169</html> 2170``` 2171 2172### zoom 2173 2174zoom(factor: number): void 2175 2176调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。 2177 2178**系统能力:** SystemCapability.Web.Webview.Core 2179 2180**参数:** 2181 2182| 参数名 | 类型 | 必填 | 说明 | 2183| ------ | -------- | ---- | ------------------------------------------------------------ | 2184| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 | 2185 2186**错误码:** 2187 2188以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2189 2190| 错误码ID | 错误信息 | 2191| -------- | ------------------------------------------------------------ | 2192| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2193| 17100004 | Function not enable. | 2194 2195**示例:** 2196 2197```ts 2198// xxx.ets 2199import web_webview from '@ohos.web.webview'; 2200import business_error from '@ohos.base'; 2201 2202@Entry 2203@Component 2204struct WebComponent { 2205 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2206 @State factor: number = 1; 2207 2208 build() { 2209 Column() { 2210 Button('zoom') 2211 .onClick(() => { 2212 try { 2213 this.controller.zoom(this.factor); 2214 } catch (error) { 2215 let e: business_error.BusinessError = error as business_error.BusinessError; 2216 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2217 } 2218 }) 2219 Web({ src: 'www.example.com', controller: this.controller }) 2220 .zoomAccess(true) 2221 } 2222 } 2223} 2224``` 2225 2226### searchAllAsync 2227 2228searchAllAsync(searchString: string): void 2229 2230异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。 2231 2232**系统能力:** SystemCapability.Web.Webview.Core 2233 2234**参数:** 2235 2236| 参数名 | 类型 | 必填 | 说明 | 2237| ------------ | -------- | ---- | -------------- | 2238| searchString | string | 是 | 查找的关键字。 | 2239 2240**错误码:** 2241 2242以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2243 2244| 错误码ID | 错误信息 | 2245| -------- | ------------------------------------------------------------ | 2246| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2247 2248**示例:** 2249 2250```ts 2251// xxx.ets 2252import web_webview from '@ohos.web.webview'; 2253import business_error from '@ohos.base'; 2254 2255@Entry 2256@Component 2257struct WebComponent { 2258 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2259 @State searchString: string = "Hello World"; 2260 2261 build() { 2262 Column() { 2263 Button('searchString') 2264 .onClick(() => { 2265 try { 2266 this.controller.searchAllAsync(this.searchString); 2267 } catch (error) { 2268 let e: business_error.BusinessError = error as business_error.BusinessError; 2269 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2270 } 2271 }) 2272 Web({ src: $rawfile('index.html'), controller: this.controller }) 2273 .onSearchResultReceive(ret => { 2274 if (ret) { 2275 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 2276 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 2277 } 2278 }) 2279 } 2280 } 2281} 2282``` 2283 2284加载的html文件。 2285```html 2286<!-- index.html --> 2287<!DOCTYPE html> 2288<html> 2289 <body> 2290 <p>Hello World Highlight Hello World</p> 2291 </body> 2292</html> 2293``` 2294 2295### clearMatches 2296 2297clearMatches(): void 2298 2299清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 2300 2301**系统能力:** SystemCapability.Web.Webview.Core 2302 2303**错误码:** 2304 2305以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2306 2307| 错误码ID | 错误信息 | 2308| -------- | ------------------------------------------------------------ | 2309| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2310 2311**示例:** 2312 2313```ts 2314// xxx.ets 2315import web_webview from '@ohos.web.webview'; 2316import business_error from '@ohos.base'; 2317 2318@Entry 2319@Component 2320struct WebComponent { 2321 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2322 2323 build() { 2324 Column() { 2325 Button('clearMatches') 2326 .onClick(() => { 2327 try { 2328 this.controller.clearMatches(); 2329 } catch (error) { 2330 let e: business_error.BusinessError = error as business_error.BusinessError; 2331 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2332 } 2333 }) 2334 Web({ src: $rawfile('index.html'), controller: this.controller }) 2335 } 2336 } 2337} 2338``` 2339 2340加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2341 2342### searchNext 2343 2344searchNext(forward: boolean): void 2345 2346滚动到下一个匹配的查找结果并高亮。 2347 2348**系统能力:** SystemCapability.Web.Webview.Core 2349 2350**参数:** 2351 2352| 参数名 | 类型 | 必填 | 说明 | 2353| ------- | -------- | ---- | ---------------------- | 2354| forward | boolean | 是 | 从前向后或者逆向查找。 | 2355 2356**错误码:** 2357 2358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2359 2360| 错误码ID | 错误信息 | 2361| -------- | ------------------------------------------------------------ | 2362| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2363 2364**示例:** 2365 2366```ts 2367// xxx.ets 2368import web_webview from '@ohos.web.webview'; 2369import business_error from '@ohos.base'; 2370 2371@Entry 2372@Component 2373struct WebComponent { 2374 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2375 2376 build() { 2377 Column() { 2378 Button('searchNext') 2379 .onClick(() => { 2380 try { 2381 this.controller.searchNext(true); 2382 } catch (error) { 2383 let e: business_error.BusinessError = error as business_error.BusinessError; 2384 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2385 } 2386 }) 2387 Web({ src: $rawfile('index.html'), controller: this.controller }) 2388 } 2389 } 2390} 2391``` 2392 2393加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2394 2395### clearSslCache 2396 2397clearSslCache(): void 2398 2399清除Web组件记录的SSL证书错误事件对应的用户操作行为。 2400 2401**系统能力:** SystemCapability.Web.Webview.Core 2402 2403**错误码:** 2404 2405以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2406 2407| 错误码ID | 错误信息 | 2408| -------- | ------------------------------------------------------------ | 2409| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2410 2411**示例:** 2412 2413```ts 2414// xxx.ets 2415import web_webview from '@ohos.web.webview'; 2416import business_error from '@ohos.base'; 2417 2418@Entry 2419@Component 2420struct WebComponent { 2421 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2422 2423 build() { 2424 Column() { 2425 Button('clearSslCache') 2426 .onClick(() => { 2427 try { 2428 this.controller.clearSslCache(); 2429 } catch (error) { 2430 let e: business_error.BusinessError = error as business_error.BusinessError; 2431 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2432 } 2433 }) 2434 Web({ src: 'www.example.com', controller: this.controller }) 2435 } 2436 } 2437} 2438``` 2439 2440### clearClientAuthenticationCache 2441 2442clearClientAuthenticationCache(): void 2443 2444清除Web组件记录的客户端证书请求事件对应的用户操作行为。 2445 2446**系统能力:** SystemCapability.Web.Webview.Core 2447 2448**错误码:** 2449 2450以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2451 2452| 错误码ID | 错误信息 | 2453| -------- | ------------------------------------------------------------ | 2454| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2455 2456**示例:** 2457 2458```ts 2459// xxx.ets 2460import web_webview from '@ohos.web.webview'; 2461import business_error from '@ohos.base'; 2462 2463@Entry 2464@Component 2465struct WebComponent { 2466 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2467 2468 build() { 2469 Column() { 2470 Button('clearClientAuthenticationCache') 2471 .onClick(() => { 2472 try { 2473 this.controller.clearClientAuthenticationCache(); 2474 } catch (error) { 2475 let e: business_error.BusinessError = error as business_error.BusinessError; 2476 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2477 } 2478 }) 2479 Web({ src: 'www.example.com', controller: this.controller }) 2480 } 2481 } 2482} 2483``` 2484 2485### createWebMessagePorts 2486 2487createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort> 2488 2489创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 2490 2491**系统能力:** SystemCapability.Web.Webview.Core 2492 2493**参数:** 2494 2495| 参数名 | 类型 | 必填 | 说明 | 2496| ------ | ---------------------- | ---- | :------------------------------| 2497| isExtentionType<sup>10+</sup> | boolean | 否 | 是否使用扩展增强接口,默认false不使用。 从API version 10开始,该接口支持此参数。| 2498 2499**返回值:** 2500 2501| 类型 | 说明 | 2502| ---------------------- | ----------------- | 2503| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 | 2504 2505**错误码:** 2506 2507以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2508 2509| 错误码ID | 错误信息 | 2510| -------- | ------------------------------------------------------------ | 2511| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2512 2513**示例:** 2514 2515 ```ts 2516// xxx.ets 2517import web_webview from '@ohos.web.webview'; 2518import business_error from '@ohos.base'; 2519 2520@Entry 2521@Component 2522struct WebComponent { 2523 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2524 ports: web_webview.WebMessagePort[] = []; 2525 2526 build() { 2527 Column() { 2528 Button('createWebMessagePorts') 2529 .onClick(() => { 2530 try { 2531 this.ports = this.controller.createWebMessagePorts(); 2532 console.log("createWebMessagePorts size:" + this.ports.length) 2533 } catch (error) { 2534 let e: business_error.BusinessError = error as business_error.BusinessError; 2535 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2536 } 2537 }) 2538 Web({ src: 'www.example.com', controller: this.controller }) 2539 } 2540 } 2541} 2542 ``` 2543 2544### postMessage 2545 2546postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 2547 2548发送Web消息端口到HTML。 2549 2550**系统能力:** SystemCapability.Web.Webview.Core 2551 2552**参数:** 2553 2554| 参数名 | 类型 | 必填 | 说明 | 2555| ------ | ---------------------- | ---- | :------------------------------- | 2556| name | string | 是 | 要发送的消息名称。 | 2557| ports | Array\<WebMessagePort> | 是 | 要发送的消息端口。 | 2558| uri | string | 是 | 接收该消息的URI。 | 2559 2560**错误码:** 2561 2562以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2563 2564| 错误码ID | 错误信息 | 2565| -------- | ------------------------------------------------------------ | 2566| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2567 2568**示例:** 2569 2570```ts 2571// xxx.ets 2572import web_webview from '@ohos.web.webview'; 2573import business_error from '@ohos.base'; 2574 2575@Entry 2576@Component 2577struct WebComponent { 2578 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2579 ports: web_webview.WebMessagePort[] = []; 2580 @State sendFromEts: string = 'Send this message from ets to HTML'; 2581 @State receivedFromHtml: string = 'Display received message send from HTML'; 2582 2583 build() { 2584 Column() { 2585 // 展示接收到的来自HTML的内容 2586 Text(this.receivedFromHtml) 2587 // 输入框的内容发送到html 2588 TextInput({ placeholder: 'Send this message from ets to HTML' }) 2589 .onChange((value: string) => { 2590 this.sendFromEts = value; 2591 }) 2592 2593 Button('postMessage') 2594 .onClick(() => { 2595 try { 2596 // 1、创建两个消息端口。 2597 this.ports = this.controller.createWebMessagePorts(); 2598 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 2599 this.ports[1].onMessageEvent((result: web_webview.WebMessage) => { 2600 let msg = 'Got msg from HTML:'; 2601 if (typeof(result) == "string") { 2602 console.log("received string message from html5, string is:" + result); 2603 msg = msg + result; 2604 } else if (typeof(result) == "object") { 2605 if (result instanceof ArrayBuffer) { 2606 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2607 msg = msg + "length is " + result.byteLength; 2608 } else { 2609 console.log("not support"); 2610 } 2611 } else { 2612 console.log("not support"); 2613 } 2614 this.receivedFromHtml = msg; 2615 }) 2616 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 2617 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 2618 } catch (error) { 2619 let e: business_error.BusinessError = error as business_error.BusinessError; 2620 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2621 } 2622 }) 2623 2624 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 2625 Button('SendDataToHTML') 2626 .onClick(() => { 2627 try { 2628 if (this.ports && this.ports[1]) { 2629 this.ports[1].postMessageEvent(this.sendFromEts); 2630 } else { 2631 console.error(`ports is null, Please initialize first`); 2632 } 2633 } catch (error) { 2634 let e: business_error.BusinessError = error as business_error.BusinessError; 2635 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2636 } 2637 }) 2638 Web({ src: $rawfile('index.html'), controller: this.controller }) 2639 } 2640 } 2641} 2642``` 2643 2644加载的html文件。 2645```html 2646<!--index.html--> 2647<!DOCTYPE html> 2648<html> 2649<head> 2650 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 2651 <title>WebView Message Port Demo</title> 2652</head> 2653 2654 <body> 2655 <h1>WebView Message Port Demo</h1> 2656 <div> 2657 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 2658 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 2659 </div> 2660 <p class="output">display received message send from ets</p> 2661 </body> 2662 <script src="xxx.js"></script> 2663</html> 2664``` 2665 2666```js 2667//xxx.js 2668var h5Port; 2669var output = document.querySelector('.output'); 2670window.addEventListener('message', function (event) { 2671 if (event.data == '__init_port__') { 2672 if (event.ports[0] != null) { 2673 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 2674 h5Port.onmessage = function (event) { 2675 // 2. 接收ets侧发送过来的消息. 2676 var msg = 'Got message from ets:'; 2677 var result = event.data; 2678 if (typeof(result) == "string") { 2679 console.log("received string message from html5, string is:" + result); 2680 msg = msg + result; 2681 } else if (typeof(result) == "object") { 2682 if (result instanceof ArrayBuffer) { 2683 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2684 msg = msg + "length is " + result.byteLength; 2685 } else { 2686 console.log("not support"); 2687 } 2688 } else { 2689 console.log("not support"); 2690 } 2691 output.innerHTML = msg; 2692 } 2693 } 2694 } 2695}) 2696 2697// 3. 使用h5Port往ets侧发送消息. 2698function PostMsgToEts(data) { 2699 if (h5Port) { 2700 h5Port.postMessage(data); 2701 } else { 2702 console.error("h5Port is null, Please initialize first"); 2703 } 2704} 2705``` 2706 2707### requestFocus 2708 2709requestFocus(): void 2710 2711使当前web页面获取焦点。 2712 2713**系统能力:** SystemCapability.Web.Webview.Core 2714 2715**错误码:** 2716 2717以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2718 2719| 错误码ID | 错误信息 | 2720| -------- | ------------------------------------------------------------ | 2721| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2722 2723**示例:** 2724 2725```ts 2726// xxx.ets 2727import web_webview from '@ohos.web.webview'; 2728import business_error from '@ohos.base'; 2729 2730@Entry 2731@Component 2732struct WebComponent { 2733 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2734 2735 build() { 2736 Column() { 2737 Button('requestFocus') 2738 .onClick(() => { 2739 try { 2740 this.controller.requestFocus(); 2741 } catch (error) { 2742 let e: business_error.BusinessError = error as business_error.BusinessError; 2743 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2744 } 2745 }); 2746 Web({ src: 'www.example.com', controller: this.controller }) 2747 } 2748 } 2749} 2750``` 2751 2752### zoomIn 2753 2754zoomIn(): void 2755 2756调用此接口将当前网页进行放大,比例为20%。 2757 2758**系统能力:** SystemCapability.Web.Webview.Core 2759 2760**错误码:** 2761 2762以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2763 2764| 错误码ID | 错误信息 | 2765| -------- | ------------------------------------------------------------ | 2766| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2767| 17100004 | Function not enable. | 2768 2769**示例:** 2770 2771```ts 2772// xxx.ets 2773import web_webview from '@ohos.web.webview'; 2774import business_error from '@ohos.base'; 2775 2776@Entry 2777@Component 2778struct WebComponent { 2779 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2780 2781 build() { 2782 Column() { 2783 Button('zoomIn') 2784 .onClick(() => { 2785 try { 2786 this.controller.zoomIn(); 2787 } catch (error) { 2788 let e: business_error.BusinessError = error as business_error.BusinessError; 2789 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2790 } 2791 }) 2792 Web({ src: 'www.example.com', controller: this.controller }) 2793 } 2794 } 2795} 2796``` 2797 2798### zoomOut 2799 2800zoomOut(): void 2801 2802调用此接口将当前网页进行缩小,比例为20%。 2803 2804**系统能力:** SystemCapability.Web.Webview.Core 2805 2806**错误码:** 2807 2808以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2809 2810| 错误码ID | 错误信息 | 2811| -------- | ------------------------------------------------------------ | 2812| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2813| 17100004 | Function not enable. | 2814 2815**示例:** 2816 2817```ts 2818// xxx.ets 2819import web_webview from '@ohos.web.webview'; 2820import business_error from '@ohos.base'; 2821 2822@Entry 2823@Component 2824struct WebComponent { 2825 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2826 2827 build() { 2828 Column() { 2829 Button('zoomOut') 2830 .onClick(() => { 2831 try { 2832 this.controller.zoomOut(); 2833 } catch (error) { 2834 let e: business_error.BusinessError = error as business_error.BusinessError; 2835 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2836 } 2837 }) 2838 Web({ src: 'www.example.com', controller: this.controller }) 2839 } 2840 } 2841} 2842``` 2843 2844### getHitTestValue 2845 2846getHitTestValue(): HitTestValue 2847 2848获取当前被点击区域的元素信息。 2849 2850**系统能力:** SystemCapability.Web.Webview.Core 2851 2852**返回值:** 2853 2854| 类型 | 说明 | 2855| ------------ | -------------------- | 2856| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 2857 2858**错误码:** 2859 2860以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2861 2862| 错误码ID | 错误信息 | 2863| -------- | ------------------------------------------------------------ | 2864| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2865 2866**示例:** 2867 2868```ts 2869// xxx.ets 2870import web_webview from '@ohos.web.webview'; 2871import business_error from '@ohos.base'; 2872 2873@Entry 2874@Component 2875struct WebComponent { 2876 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2877 2878 build() { 2879 Column() { 2880 Button('getHitTestValue') 2881 .onClick(() => { 2882 try { 2883 let hitValue = this.controller.getHitTestValue(); 2884 console.log("hitType: " + hitValue.type); 2885 console.log("extra: " + hitValue.extra); 2886 } catch (error) { 2887 let e: business_error.BusinessError = error as business_error.BusinessError; 2888 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2889 } 2890 }) 2891 Web({ src: 'www.example.com', controller: this.controller }) 2892 } 2893 } 2894} 2895``` 2896 2897### getWebId 2898 2899getWebId(): number 2900 2901获取当前Web组件的索引值,用于多个Web组件的管理。 2902 2903**系统能力:** SystemCapability.Web.Webview.Core 2904 2905**返回值:** 2906 2907| 类型 | 说明 | 2908| ------ | --------------------- | 2909| number | 当前Web组件的索引值。 | 2910 2911**错误码:** 2912 2913以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2914 2915| 错误码ID | 错误信息 | 2916| -------- | ------------------------------------------------------------ | 2917| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2918 2919**示例:** 2920 2921```ts 2922// xxx.ets 2923import web_webview from '@ohos.web.webview'; 2924import business_error from '@ohos.base'; 2925 2926@Entry 2927@Component 2928struct WebComponent { 2929 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2930 2931 build() { 2932 Column() { 2933 Button('getWebId') 2934 .onClick(() => { 2935 try { 2936 let id = this.controller.getWebId(); 2937 console.log("id: " + id); 2938 } catch (error) { 2939 let e: business_error.BusinessError = error as business_error.BusinessError; 2940 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2941 } 2942 }) 2943 Web({ src: 'www.example.com', controller: this.controller }) 2944 } 2945 } 2946} 2947``` 2948 2949### getUserAgent 2950 2951getUserAgent(): string 2952 2953获取当前默认用户代理。 2954 2955**系统能力:** SystemCapability.Web.Webview.Core 2956 2957**返回值:** 2958 2959| 类型 | 说明 | 2960| ------ | -------------- | 2961| string | 默认用户代理。 | 2962 2963**错误码:** 2964 2965以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2966 2967| 错误码ID | 错误信息 | 2968| -------- | ------------------------------------------------------------ | 2969| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2970 2971**示例:** 2972 2973```ts 2974// xxx.ets 2975import web_webview from '@ohos.web.webview'; 2976import business_error from '@ohos.base'; 2977 2978@Entry 2979@Component 2980struct WebComponent { 2981 controller: web_webview.WebviewController = new web_webview.WebviewController(); 2982 2983 build() { 2984 Column() { 2985 Button('getUserAgent') 2986 .onClick(() => { 2987 try { 2988 let userAgent = this.controller.getUserAgent(); 2989 console.log("userAgent: " + userAgent); 2990 } catch (error) { 2991 let e:business_error.BusinessError = error as business_error.BusinessError; 2992 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 2993 } 2994 }) 2995 Web({ src: 'www.example.com', controller: this.controller }) 2996 } 2997 } 2998} 2999``` 3000 3001支持开发者基于默认的UserAgent去定制UserAgent。 3002```ts 3003// xxx.ets 3004import web_webview from '@ohos.web.webview'; 3005import business_error from '@ohos.base'; 3006 3007@Entry 3008@Component 3009struct WebComponent { 3010 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3011 @State ua: string = "" 3012 3013 aboutToAppear():void { 3014 web_webview.once('webInited', () => { 3015 try { 3016 // 应用侧用法示例,定制UserAgent。 3017 this.ua = this.controller.getUserAgent() + 'xxx'; 3018 } catch(error) { 3019 let e:business_error.BusinessError = error as business_error.BusinessError; 3020 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3021 } 3022 }) 3023 } 3024 3025 build() { 3026 Column() { 3027 Web({ src: 'www.example.com', controller: this.controller }) 3028 .userAgent(this.ua) 3029 } 3030 } 3031} 3032``` 3033 3034### getTitle 3035 3036getTitle(): string 3037 3038获取当前网页的标题。 3039 3040**系统能力:** SystemCapability.Web.Webview.Core 3041 3042**返回值:** 3043 3044| 类型 | 说明 | 3045| ------ | -------------------- | 3046| string | 当前网页的标题。 | 3047 3048**错误码:** 3049 3050以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3051 3052| 错误码ID | 错误信息 | 3053| -------- | ------------------------------------------------------------ | 3054| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3055 3056**示例:** 3057 3058```ts 3059// xxx.ets 3060import web_webview from '@ohos.web.webview'; 3061import business_error from '@ohos.base'; 3062 3063@Entry 3064@Component 3065struct WebComponent { 3066 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3067 3068 build() { 3069 Column() { 3070 Button('getTitle') 3071 .onClick(() => { 3072 try { 3073 let title = this.controller.getTitle(); 3074 console.log("title: " + title); 3075 } catch (error) { 3076 let e:business_error.BusinessError = error as business_error.BusinessError; 3077 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3078 } 3079 }) 3080 Web({ src: 'www.example.com', controller: this.controller }) 3081 } 3082 } 3083} 3084``` 3085 3086### getPageHeight 3087 3088getPageHeight(): number 3089 3090获取当前网页的页面高度。 3091 3092**系统能力:** SystemCapability.Web.Webview.Core 3093 3094**返回值:** 3095 3096| 类型 | 说明 | 3097| ------ | -------------------- | 3098| number | 当前网页的页面高度。 | 3099 3100**错误码:** 3101 3102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3103 3104| 错误码ID | 错误信息 | 3105| -------- | ------------------------------------------------------------ | 3106| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3107 3108**示例:** 3109 3110```ts 3111// xxx.ets 3112import web_webview from '@ohos.web.webview'; 3113import business_error from '@ohos.base'; 3114 3115@Entry 3116@Component 3117struct WebComponent { 3118 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3119 3120 build() { 3121 Column() { 3122 Button('getPageHeight') 3123 .onClick(() => { 3124 try { 3125 let pageHeight = this.controller.getPageHeight(); 3126 console.log("pageHeight : " + pageHeight); 3127 } catch (error) { 3128 let e:business_error.BusinessError = error as business_error.BusinessError; 3129 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3130 } 3131 }) 3132 Web({ src: 'www.example.com', controller: this.controller }) 3133 } 3134 } 3135} 3136``` 3137 3138### storeWebArchive 3139 3140storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 3141 3142以回调方式异步保存当前页面。 3143 3144**系统能力:** SystemCapability.Web.Webview.Core 3145 3146**参数:** 3147 3148| 参数名 | 类型 | 必填 | 说明 | 3149| -------- | --------------------- | ---- | ------------------------------------------------------------ | 3150| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3151| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3152| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保存网页失败会返回null。 | 3153 3154**错误码:** 3155 3156以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3157 3158| 错误码ID | 错误信息 | 3159| -------- | ------------------------------------------------------------ | 3160| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3161| 17100003 | Invalid resource path or file type. | 3162 3163**示例:** 3164 3165```ts 3166// xxx.ets 3167import web_webview from '@ohos.web.webview' 3168import business_error from '@ohos.base' 3169 3170@Entry 3171@Component 3172struct WebComponent { 3173 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3174 3175 build() { 3176 Column() { 3177 Button('storeWebArchive') 3178 .onClick(() => { 3179 try { 3180 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 3181 if (error) { 3182 let e: business_error.BusinessError = error as business_error.BusinessError; 3183 console.error(`save web archive error, ErrorCode: ${e.code}, Message: ${e.message}`); 3184 return; 3185 } 3186 if (filename != null) { 3187 console.info(`save web archive success: ${filename}`) 3188 } 3189 }); 3190 } catch (error) { 3191 let e: business_error.BusinessError = error as business_error.BusinessError; 3192 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3193 } 3194 }) 3195 Web({ src: 'www.example.com', controller: this.controller }) 3196 } 3197 } 3198} 3199``` 3200 3201### storeWebArchive 3202 3203storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 3204 3205以Promise方式异步保存当前页面。 3206 3207**系统能力:** SystemCapability.Web.Webview.Core 3208 3209**参数:** 3210 3211| 参数名 | 类型 | 必填 | 说明 | 3212| -------- | -------- | ---- | ------------------------------------------------------------ | 3213| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3214| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3215 3216**返回值:** 3217 3218| 类型 | 说明 | 3219| --------------- | ----------------------------------------------------- | 3220| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 3221 3222**错误码:** 3223 3224以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3225 3226| 错误码ID | 错误信息 | 3227| -------- | ------------------------------------------------------------ | 3228| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3229| 17100003 | Invalid resource path or file type. | 3230 3231**示例:** 3232 3233```ts 3234// xxx.ets 3235import web_webview from '@ohos.web.webview' 3236import business_error from '@ohos.base' 3237 3238@Entry 3239@Component 3240struct WebComponent { 3241 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3242 3243 build() { 3244 Column() { 3245 Button('storeWebArchive') 3246 .onClick(() => { 3247 try { 3248 this.controller.storeWebArchive("/data/storage/el2/base/", true) 3249 .then(filename => { 3250 if (filename != null) { 3251 console.info(`save web archive success: ${filename}`) 3252 } 3253 }) 3254 .catch((error:business_error.BusinessError) => { 3255 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3256 }) 3257 } catch (error) { 3258 let e:business_error.BusinessError = error as business_error.BusinessError; 3259 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3260 } 3261 }) 3262 Web({ src: 'www.example.com', controller: this.controller }) 3263 } 3264 } 3265} 3266``` 3267 3268### getUrl 3269 3270getUrl(): string 3271 3272获取当前页面的url地址。 3273 3274**系统能力:** SystemCapability.Web.Webview.Core 3275 3276**返回值:** 3277 3278| 类型 | 说明 | 3279| ------ | ------------------- | 3280| string | 当前页面的url地址。 | 3281 3282**错误码:** 3283 3284以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3285 3286| 错误码ID | 错误信息 | 3287| -------- | ------------------------------------------------------------ | 3288| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3289 3290**示例:** 3291 3292```ts 3293// xxx.ets 3294import web_webview from '@ohos.web.webview'; 3295import business_error from '@ohos.base'; 3296 3297@Entry 3298@Component 3299struct WebComponent { 3300 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3301 3302 build() { 3303 Column() { 3304 Button('getUrl') 3305 .onClick(() => { 3306 try { 3307 let url = this.controller.getUrl(); 3308 console.log("url: " + url); 3309 } catch (error) { 3310 let e:business_error.BusinessError = error as business_error.BusinessError; 3311 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3312 } 3313 }) 3314 Web({ src: 'www.example.com', controller: this.controller }) 3315 } 3316 } 3317} 3318``` 3319 3320### stop 3321 3322stop(): void 3323 3324停止页面加载。 3325 3326**系统能力:** SystemCapability.Web.Webview.Core 3327 3328**错误码:** 3329 3330以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3331 3332| 错误码ID | 错误信息 | 3333| -------- | ------------------------------------------------------------ | 3334| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3335 3336**示例:** 3337 3338```ts 3339// xxx.ets 3340import web_webview from '@ohos.web.webview'; 3341import business_error from '@ohos.base'; 3342 3343@Entry 3344@Component 3345struct WebComponent { 3346 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3347 3348 build() { 3349 Column() { 3350 Button('stop') 3351 .onClick(() => { 3352 try { 3353 this.controller.stop(); 3354 } catch (error) { 3355 let e:business_error.BusinessError = error as business_error.BusinessError; 3356 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3357 } 3358 }); 3359 Web({ src: 'www.example.com', controller: this.controller }) 3360 } 3361 } 3362} 3363``` 3364 3365### backOrForward 3366 3367backOrForward(step: number): void 3368 3369按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 3370 3371前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。 3372 3373**系统能力:** SystemCapability.Web.Webview.Core 3374 3375**参数:** 3376 3377| 参数名 | 类型 | 必填 | 说明 | 3378| ------ | -------- | ---- | ---------------------- | 3379| step | number | 是 | 需要前进或后退的步长。 | 3380 3381**错误码:** 3382 3383以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3384 3385| 错误码ID | 错误信息 | 3386| -------- | ------------------------------------------------------------ | 3387| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3388 3389**示例:** 3390 3391```ts 3392// xxx.ets 3393import web_webview from '@ohos.web.webview'; 3394import business_error from '@ohos.base'; 3395 3396@Entry 3397@Component 3398struct WebComponent { 3399 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3400 @State step: number = -2; 3401 3402 build() { 3403 Column() { 3404 Button('backOrForward') 3405 .onClick(() => { 3406 try { 3407 this.controller.backOrForward(this.step); 3408 } catch (error) { 3409 let e:business_error.BusinessError = error as business_error.BusinessError; 3410 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3411 } 3412 }) 3413 Web({ src: 'www.example.com', controller: this.controller }) 3414 } 3415 } 3416} 3417``` 3418 3419### scrollTo 3420 3421scrollTo(x:number, y:number): void 3422 3423将页面滚动到指定的绝对位置。 3424 3425**系统能力:** SystemCapability.Web.Webview.Core 3426 3427**参数:** 3428 3429| 参数名 | 类型 | 必填 | 说明 | 3430| ------ | -------- | ---- | ---------------------- | 3431| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。 | 3432| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。| 3433 3434**错误码:** 3435 3436以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3437 3438| 错误码ID | 错误信息 | 3439| -------- | ------------------------------------------------------------ | 3440| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3441 3442**示例:** 3443 3444```ts 3445// xxx.ets 3446import web_webview from '@ohos.web.webview'; 3447import business_error from '@ohos.base'; 3448 3449@Entry 3450@Component 3451struct WebComponent { 3452 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3453 3454 build() { 3455 Column() { 3456 Button('scrollTo') 3457 .onClick(() => { 3458 try { 3459 this.controller.scrollTo(50, 50); 3460 } catch (error) { 3461 let e:business_error.BusinessError = error as business_error.BusinessError; 3462 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3463 } 3464 }) 3465 Web({ src: $rawfile('index.html'), controller: this.controller }) 3466 } 3467 } 3468} 3469``` 3470 3471加载的html文件。 3472```html 3473<!--index.html--> 3474<!DOCTYPE html> 3475<html> 3476<head> 3477 <title>Demo</title> 3478 <style> 3479 body { 3480 width:3000px; 3481 height:3000px; 3482 padding-right:170px; 3483 padding-left:170px; 3484 border:5px solid blueviolet 3485 } 3486 </style> 3487</head> 3488<body> 3489Scroll Test 3490</body> 3491</html> 3492``` 3493 3494### scrollBy 3495 3496scrollBy(deltaX:number, deltaY:number): void 3497 3498将页面滚动指定的偏移量。 3499 3500**系统能力:** SystemCapability.Web.Webview.Core 3501 3502**参数:** 3503 3504| 参数名 | 类型 | 必填 | 说明 | 3505| ------ | -------- | ---- | ---------------------- | 3506| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 3507| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 3508 3509**错误码:** 3510 3511以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3512 3513| 错误码ID | 错误信息 | 3514| -------- | ------------------------------------------------------------ | 3515| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3516 3517**示例:** 3518 3519```ts 3520// xxx.ets 3521import web_webview from '@ohos.web.webview'; 3522import business_error from '@ohos.base'; 3523 3524@Entry 3525@Component 3526struct WebComponent { 3527 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3528 3529 build() { 3530 Column() { 3531 Button('scrollBy') 3532 .onClick(() => { 3533 try { 3534 this.controller.scrollBy(50, 50); 3535 } catch (error) { 3536 let e:business_error.BusinessError = error as business_error.BusinessError; 3537 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3538 } 3539 }) 3540 Web({ src: $rawfile('index.html'), controller: this.controller }) 3541 } 3542 } 3543} 3544``` 3545 3546加载的html文件。 3547```html 3548<!--index.html--> 3549<!DOCTYPE html> 3550<html> 3551<head> 3552 <title>Demo</title> 3553 <style> 3554 body { 3555 width:3000px; 3556 height:3000px; 3557 padding-right:170px; 3558 padding-left:170px; 3559 border:5px solid blueviolet 3560 } 3561 </style> 3562</head> 3563<body> 3564Scroll Test 3565</body> 3566</html> 3567``` 3568 3569### slideScroll 3570 3571slideScroll(vx:number, vy:number): void 3572 3573按照指定速度模拟对页面的轻扫滚动动作。 3574 3575**系统能力:** SystemCapability.Web.Webview.Core 3576 3577**参数:** 3578 3579| 参数名 | 类型 | 必填 | 说明 | 3580| ------ | -------- | ---- | ---------------------- | 3581| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。 | 3582| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。 | 3583 3584**错误码:** 3585 3586以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3587 3588| 错误码ID | 错误信息 | 3589| -------- | ------------------------------------------------------------ | 3590| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3591 3592**示例:** 3593 3594```ts 3595// xxx.ets 3596import web_webview from '@ohos.web.webview'; 3597import business_error from '@ohos.base'; 3598 3599@Entry 3600@Component 3601struct WebComponent { 3602 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3603 3604 build() { 3605 Column() { 3606 Button('slideScroll') 3607 .onClick(() => { 3608 try { 3609 this.controller.slideScroll(500, 500); 3610 } catch (error) { 3611 let e:business_error.BusinessError = error as business_error.BusinessError; 3612 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3613 } 3614 }) 3615 Web({ src: $rawfile('index.html'), controller: this.controller }) 3616 } 3617 } 3618} 3619``` 3620 3621加载的html文件。 3622```html 3623<!--index.html--> 3624<!DOCTYPE html> 3625<html> 3626<head> 3627 <title>Demo</title> 3628 <style> 3629 body { 3630 width:3000px; 3631 height:3000px; 3632 padding-right:170px; 3633 padding-left:170px; 3634 border:5px solid blueviolet 3635 } 3636 </style> 3637</head> 3638<body> 3639Scroll Test 3640</body> 3641</html> 3642``` 3643 3644### getOriginalUrl 3645 3646getOriginalUrl(): string 3647 3648获取当前页面的原始url地址。 3649 3650**系统能力:** SystemCapability.Web.Webview.Core 3651 3652**返回值:** 3653 3654| 类型 | 说明 | 3655| ------ | ----------------------- | 3656| string | 当前页面的原始url地址。 | 3657 3658**错误码:** 3659 3660以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3661 3662| 错误码ID | 错误信息 | 3663| -------- | ------------------------------------------------------------ | 3664| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3665 3666**示例:** 3667 3668```ts 3669// xxx.ets 3670import web_webview from '@ohos.web.webview'; 3671import business_error from '@ohos.base'; 3672 3673@Entry 3674@Component 3675struct WebComponent { 3676 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3677 3678 build() { 3679 Column() { 3680 Button('getOrgUrl') 3681 .onClick(() => { 3682 try { 3683 let url = this.controller.getOriginalUrl(); 3684 console.log("original url: " + url); 3685 } catch (error) { 3686 let e:business_error.BusinessError = error as business_error.BusinessError; 3687 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3688 } 3689 }) 3690 Web({ src: 'www.example.com', controller: this.controller }) 3691 } 3692 } 3693} 3694``` 3695 3696### getFavicon 3697 3698getFavicon(): image.PixelMap 3699 3700获取页面的favicon图标。 3701 3702**系统能力:** SystemCapability.Web.Webview.Core 3703 3704**返回值:** 3705 3706| 类型 | 说明 | 3707| -------------------------------------- | ------------------------------- | 3708| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 3709 3710**错误码:** 3711 3712以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3713 3714| 错误码ID | 错误信息 | 3715| -------- | ------------------------------------------------------------ | 3716| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3717 3718**示例:** 3719 3720```ts 3721// xxx.ets 3722import web_webview from '@ohos.web.webview'; 3723import image from "@ohos.multimedia.image"; 3724import business_error from '@ohos.base'; 3725 3726@Entry 3727@Component 3728struct WebComponent { 3729 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3730 @State pixelmap: image.PixelMap | undefined = undefined; 3731 3732 build() { 3733 Column() { 3734 Button('getFavicon') 3735 .onClick(() => { 3736 try { 3737 this.pixelmap = this.controller.getFavicon(); 3738 } catch (error) { 3739 let e:business_error.BusinessError = error as business_error.BusinessError; 3740 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3741 } 3742 }) 3743 Web({ src: 'www.example.com', controller: this.controller }) 3744 } 3745 } 3746} 3747``` 3748 3749### setNetworkAvailable 3750 3751setNetworkAvailable(enable: boolean): void 3752 3753设置JavaScript中的window.navigator.onLine属性。 3754 3755**系统能力:** SystemCapability.Web.Webview.Core 3756 3757**参数:** 3758 3759| 参数名 | 类型 | 必填 | 说明 | 3760| ------ | ------- | ---- | --------------------------------- | 3761| enable | boolean | 是 | 是否使能window.navigator.onLine。 | 3762 3763**错误码:** 3764 3765以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3766 3767| 错误码ID | 错误信息 | 3768| -------- | ------------------------------------------------------------ | 3769| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3770 3771**示例:** 3772 3773```ts 3774// xxx.ets 3775import web_webview from '@ohos.web.webview'; 3776import business_error from '@ohos.base'; 3777 3778@Entry 3779@Component 3780struct WebComponent { 3781 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3782 3783 build() { 3784 Column() { 3785 Button('setNetworkAvailable') 3786 .onClick(() => { 3787 try { 3788 this.controller.setNetworkAvailable(true); 3789 } catch (error) { 3790 let e:business_error.BusinessError = error as business_error.BusinessError; 3791 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3792 } 3793 }) 3794 Web({ src: $rawfile('index.html'), controller: this.controller }) 3795 } 3796 } 3797} 3798``` 3799 3800加载的html文件。 3801```html 3802<!-- index.html --> 3803<!DOCTYPE html> 3804<html> 3805<body> 3806<h1>online 属性</h1> 3807<p id="demo"></p> 3808<button onclick="func()">click</button> 3809<script> 3810 let online = navigator.onLine; 3811 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 3812 3813 function func(){ 3814 var online = navigator.onLine; 3815 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 3816 } 3817</script> 3818</body> 3819</html> 3820``` 3821 3822### hasImage 3823 3824hasImage(callback: AsyncCallback\<boolean>): void 3825 3826通过Callback方式异步查找当前页面是否存在图像。 3827 3828**系统能力:** SystemCapability.Web.Webview.Core 3829 3830**参数:** 3831 3832| 参数名 | 类型 | 必填 | 说明 | 3833| -------- | ----------------------- | ---- | -------------------------- | 3834| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。 | 3835 3836**错误码:** 3837 3838以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3839 3840| 错误码ID | 错误信息 | 3841| -------- | ------------------------------------------------------------ | 3842| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3843 3844**示例:** 3845 3846```ts 3847// xxx.ets 3848import web_webview from '@ohos.web.webview'; 3849import business_error from '@ohos.base'; 3850 3851@Entry 3852@Component 3853struct WebComponent { 3854 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3855 3856 build() { 3857 Column() { 3858 Button('hasImageCb') 3859 .onClick(() => { 3860 try { 3861 this.controller.hasImage((error, data) => { 3862 if (error) { 3863 let e: business_error.BusinessError = error as business_error.BusinessError; 3864 console.error(`hasImage error, ErrorCode: ${e.code}, Message: ${e.message}`); 3865 return; 3866 } 3867 console.info("hasImage: " + data); 3868 }); 3869 } catch (error) { 3870 let e:business_error.BusinessError = error as business_error.BusinessError; 3871 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3872 } 3873 }) 3874 Web({ src: 'www.example.com', controller: this.controller }) 3875 } 3876 } 3877} 3878``` 3879 3880### hasImage 3881 3882hasImage(): Promise\<boolean> 3883 3884通过Promise方式异步查找当前页面是否存在图像。 3885 3886**系统能力:** SystemCapability.Web.Webview.Core 3887 3888**返回值:** 3889 3890| 类型 | 说明 | 3891| ----------------- | --------------------------------------- | 3892| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 | 3893 3894**错误码:** 3895 3896以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3897 3898| 错误码ID | 错误信息 | 3899| -------- | ------------------------------------------------------------ | 3900| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3901 3902**示例:** 3903 3904```ts 3905// xxx.ets 3906import web_webview from '@ohos.web.webview'; 3907import business_error from '@ohos.base'; 3908 3909@Entry 3910@Component 3911struct WebComponent { 3912 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3913 3914 build() { 3915 Column() { 3916 Button('hasImagePm') 3917 .onClick(() => { 3918 try { 3919 this.controller.hasImage().then((data) => { 3920 console.info('hasImage: ' + data); 3921 }) 3922 .catch((error:business_error.BusinessError) => { 3923 console.error("error: " + error); 3924 }) 3925 } catch (error) { 3926 let e:business_error.BusinessError = error as business_error.BusinessError; 3927 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3928 } 3929 }) 3930 Web({ src: 'www.example.com', controller: this.controller }) 3931 } 3932 } 3933} 3934``` 3935 3936### removeCache 3937 3938removeCache(clearRom: boolean): void 3939 3940清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 3941 3942**系统能力:** SystemCapability.Web.Webview.Core 3943 3944**参数:** 3945 3946| 参数名 | 类型 | 必填 | 说明 | 3947| -------- | ------- | ---- | -------------------------------------------------------- | 3948| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 3949 3950**错误码:** 3951 3952以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3953 3954| 错误码ID | 错误信息 | 3955| -------- | ------------------------------------------------------------ | 3956| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3957 3958**示例:** 3959 3960```ts 3961// xxx.ets 3962import web_webview from '@ohos.web.webview'; 3963import business_error from '@ohos.base'; 3964 3965@Entry 3966@Component 3967struct WebComponent { 3968 controller: web_webview.WebviewController = new web_webview.WebviewController(); 3969 3970 build() { 3971 Column() { 3972 Button('removeCache') 3973 .onClick(() => { 3974 try { 3975 this.controller.removeCache(false); 3976 } catch (error) { 3977 let e:business_error.BusinessError = error as business_error.BusinessError; 3978 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 3979 } 3980 }) 3981 Web({ src: 'www.example.com', controller: this.controller }) 3982 } 3983 } 3984} 3985``` 3986 3987### pageUp 3988 3989pageUp(top: boolean): void 3990 3991将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 3992 3993**系统能力:** SystemCapability.Web.Webview.Core 3994 3995**参数:** 3996 3997| 参数名 | 类型 | 必填 | 说明 | 3998| ------ | ------- | ---- | ------------------------------------------------------------ | 3999| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 4000 4001**错误码:** 4002 4003以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4004 4005| 错误码ID | 错误信息 | 4006| -------- | ------------------------------------------------------------ | 4007| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4008 4009**示例:** 4010 4011```ts 4012// xxx.ets 4013import web_webview from '@ohos.web.webview'; 4014import business_error from '@ohos.base'; 4015 4016@Entry 4017@Component 4018struct WebComponent { 4019 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4020 4021 build() { 4022 Column() { 4023 Button('pageUp') 4024 .onClick(() => { 4025 try { 4026 this.controller.pageUp(false); 4027 } catch (error) { 4028 let e:business_error.BusinessError = error as business_error.BusinessError; 4029 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4030 } 4031 }) 4032 Web({ src: 'www.example.com', controller: this.controller }) 4033 } 4034 } 4035} 4036``` 4037 4038### pageDown 4039 4040pageDown(bottom: boolean): void 4041 4042将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 4043 4044**系统能力:** SystemCapability.Web.Webview.Core 4045 4046**参数:** 4047 4048| 参数名 | 类型 | 必填 | 说明 | 4049| ------ | ------- | ---- | ------------------------------------------------------------ | 4050| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 4051 4052**错误码:** 4053 4054以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4055 4056| 错误码ID | 错误信息 | 4057| -------- | ------------------------------------------------------------ | 4058| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4059 4060**示例:** 4061 4062```ts 4063// xxx.ets 4064import web_webview from '@ohos.web.webview'; 4065import business_error from '@ohos.base'; 4066 4067@Entry 4068@Component 4069struct WebComponent { 4070 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4071 4072 build() { 4073 Column() { 4074 Button('pageDown') 4075 .onClick(() => { 4076 try { 4077 this.controller.pageDown(false); 4078 } catch (error) { 4079 let e:business_error.BusinessError = error as business_error.BusinessError; 4080 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4081 } 4082 }) 4083 Web({ src: 'www.example.com', controller: this.controller }) 4084 } 4085 } 4086} 4087``` 4088 4089### getBackForwardEntries 4090 4091getBackForwardEntries(): BackForwardList 4092 4093获取当前Webview的历史信息列表。 4094 4095**系统能力:** SystemCapability.Web.Webview.Core 4096 4097**返回值:** 4098 4099| 类型 | 说明 | 4100| ----------------------------------- | --------------------------- | 4101| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 4102 4103**错误码:** 4104 4105以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4106 4107| 错误码ID | 错误信息 | 4108| -------- | ------------------------------------------------------------ | 4109| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4110 4111**示例:** 4112 4113```ts 4114// xxx.ets 4115import web_webview from '@ohos.web.webview'; 4116import business_error from '@ohos.base'; 4117 4118@Entry 4119@Component 4120struct WebComponent { 4121 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4122 4123 build() { 4124 Column() { 4125 Button('getBackForwardEntries') 4126 .onClick(() => { 4127 try { 4128 let list = this.controller.getBackForwardEntries() 4129 } catch (error) { 4130 let e:business_error.BusinessError = error as business_error.BusinessError; 4131 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4132 } 4133 }) 4134 Web({ src: 'www.example.com', controller: this.controller }) 4135 } 4136 } 4137} 4138``` 4139 4140### serializeWebState 4141 4142serializeWebState(): Uint8Array 4143 4144将当前Webview的页面状态历史记录信息序列化。 4145 4146**系统能力:** SystemCapability.Web.Webview.Core 4147 4148**返回值:** 4149 4150| 类型 | 说明 | 4151| ---------- | --------------------------------------------- | 4152| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 4153 4154**错误码:** 4155 4156以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4157 4158| 错误码ID | 错误信息 | 4159| -------- | ------------------------------------------------------------ | 4160| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4161 4162**示例:** 4163 41641.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4165```ts 4166// xxx.ets 4167import web_webview from '@ohos.web.webview'; 4168import fs from '@ohos.file.fs'; 4169import business_error from '@ohos.base'; 4170 4171@Entry 4172@Component 4173struct WebComponent { 4174 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4175 4176 build() { 4177 Column() { 4178 Button('serializeWebState') 4179 .onClick(() => { 4180 try { 4181 let state = this.controller.serializeWebState(); 4182 let path:string | undefined = AppStorage.get("cacheDir"); 4183 if (path) { 4184 path += '/WebState'; 4185 // 以同步方法打开文件。 4186 let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 4187 fs.writeSync(file.fd, state.buffer); 4188 fs.closeSync(file.fd); 4189 } 4190 } catch (error) { 4191 let e:business_error.BusinessError = error as business_error.BusinessError; 4192 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4193 } 4194 }) 4195 Web({ src: 'www.example.com', controller: this.controller }) 4196 } 4197 } 4198} 4199``` 4200 42012.修改EntryAbility.ets。 4202获取应用缓存文件路径。 4203```ts 4204// xxx.ts 4205import UIAbility from '@ohos.app.ability.UIAbility'; 4206import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 4207import Want from '@ohos.app.ability.Want'; 4208 4209export default class EntryAbility extends UIAbility { 4210 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4211 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4212 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4213 } 4214} 4215``` 4216 4217### restoreWebState 4218 4219restoreWebState(state: Uint8Array): void 4220 4221当前Webview从序列化数据中恢复页面状态历史记录。 4222 4223**系统能力:** SystemCapability.Web.Webview.Core 4224 4225**参数:** 4226 4227| 参数名 | 类型 | 必填 | 说明 | 4228| ------ | ---------- | ---- | ---------------------------- | 4229| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 4230 4231**错误码:** 4232 4233以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4234 4235| 错误码ID | 错误信息 | 4236| -------- | ------------------------------------------------------------ | 4237| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4238 4239**示例:** 4240 42411.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4242```ts 4243// xxx.ets 4244import web_webview from '@ohos.web.webview'; 4245import fs from '@ohos.file.fs'; 4246import business_error from '@ohos.base'; 4247 4248@Entry 4249@Component 4250struct WebComponent { 4251 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4252 4253 build() { 4254 Column() { 4255 Button('RestoreWebState') 4256 .onClick(() => { 4257 try { 4258 let path:string | undefined = AppStorage.get("cacheDir"); 4259 if (path) { 4260 path += '/WebState'; 4261 // 以同步方法打开文件。 4262 let file = fs.openSync(path, fs.OpenMode.READ_WRITE); 4263 let stat = fs.statSync(path); 4264 let size = stat.size; 4265 let buf = new ArrayBuffer(size); 4266 fs.read(file.fd, buf, (err, readLen) => { 4267 if (err) { 4268 console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code); 4269 } else { 4270 console.info("read file data succeed"); 4271 this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen))); 4272 fs.closeSync(file); 4273 } 4274 }); 4275 } 4276 } catch (error) { 4277 let e:business_error.BusinessError = error as business_error.BusinessError; 4278 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4279 } 4280 }) 4281 Web({ src: 'www.example.com', controller: this.controller }) 4282 } 4283 } 4284} 4285``` 4286 42872.修改EntryAbility.ets。 4288获取应用缓存文件路径。 4289```ts 4290// xxx.ts 4291import UIAbility from '@ohos.app.ability.UIAbility'; 4292import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 4293import Want from '@ohos.app.ability.Want'; 4294 4295export default class EntryAbility extends UIAbility { 4296 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4297 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4298 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4299 } 4300} 4301``` 4302 4303### customizeSchemes 4304 4305static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 4306 4307对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。 4308 4309**系统能力:** SystemCapability.Web.Webview.Core 4310 4311**参数:** 4312 4313| 参数名 | 类型 | 必填 | 说明 | 4314| -------- | ------- | ---- | -------------------------------------- | 4315| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 4316 4317**示例:** 4318 4319```ts 4320// xxx.ets 4321import web_webview from '@ohos.web.webview'; 4322import business_error from '@ohos.base'; 4323 4324@Entry 4325@Component 4326struct WebComponent { 4327 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4328 responseweb: WebResourceResponse = new WebResourceResponse() 4329 scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true} 4330 scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true} 4331 scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true} 4332 4333 aboutToAppear():void { 4334 try { 4335 web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]) 4336 } catch(error) { 4337 let e:business_error.BusinessError = error as business_error.BusinessError; 4338 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4339 } 4340 } 4341 4342 build() { 4343 Column() { 4344 Web({ src: 'www.example.com', controller: this.controller }) 4345 .onInterceptRequest((event) => { 4346 if (event) { 4347 console.log('url:' + event.request.getRequestUrl()) 4348 } 4349 return this.responseweb 4350 }) 4351 } 4352 } 4353} 4354``` 4355 4356### getCertificate<sup>10+</sup> 4357 4358getCertificate(): Promise<Array<cert.X509Cert>> 4359 4360获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。 4361 4362**系统能力:** SystemCapability.Web.Webview.Core 4363 4364**返回值:** 4365 4366| 类型 | 说明 | 4367| ---------- | --------------------------------------------- | 4368| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 | 4369 4370**错误码:** 4371 4372以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4373 4374| 错误码ID | 错误信息 | 4375| -------- | ------------------------------------------------------------ | 4376| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4377 4378**示例:** 4379 4380```ts 4381// xxx.ets 4382import web_webview from '@ohos.web.webview'; 4383import business_error from '@ohos.base'; 4384import cert from '@ohos.security.cert'; 4385 4386function Uint8ArrayToString(dataArray:Uint8Array) { 4387 let dataString = '' 4388 for (let i = 0; i < dataArray.length; i++) { 4389 dataString += String.fromCharCode(dataArray[i]) 4390 } 4391 return dataString 4392} 4393 4394function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) { 4395 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4396 for (let i = 0; i < x509CertArray.length; i++) { 4397 res += ', index = ' + i + ', issuer name = ' 4398 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4399 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4400 + x509CertArray[i].getNotBeforeTime() 4401 + ', valid end = ' + x509CertArray[i].getNotAfterTime() 4402 } 4403 return res 4404} 4405 4406@Entry 4407@Component 4408struct Index { 4409 // outputStr在UI界面显示调试信息 4410 @State outputStr: string = '' 4411 webviewCtl: web_webview.WebviewController = new web_webview.WebviewController(); 4412 4413 build() { 4414 Row() { 4415 Column() { 4416 List({space: 20, initialIndex: 0}) { 4417 ListItem() { 4418 Button() { 4419 Text('load bad ssl') 4420 .fontSize(10) 4421 .fontWeight(FontWeight.Bold) 4422 } 4423 .type(ButtonType.Capsule) 4424 .onClick(() => { 4425 // 加载一个过期的证书网站,查看获取到的证书信息 4426 this.webviewCtl.loadUrl('https://expired.badssl.com') 4427 }) 4428 .height(50) 4429 } 4430 4431 ListItem() { 4432 Button() { 4433 Text('load example') 4434 .fontSize(10) 4435 .fontWeight(FontWeight.Bold) 4436 } 4437 .type(ButtonType.Capsule) 4438 .onClick(() => { 4439 // 加载一个https网站,查看网站的证书信息 4440 this.webviewCtl.loadUrl('https://www.example.com') 4441 }) 4442 .height(50) 4443 } 4444 4445 ListItem() { 4446 Button() { 4447 Text('getCertificate Promise') 4448 .fontSize(10) 4449 .fontWeight(FontWeight.Bold) 4450 } 4451 .type(ButtonType.Capsule) 4452 .onClick(() => { 4453 try { 4454 this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => { 4455 this.outputStr = ParseX509CertInfo(x509CertArray); 4456 }) 4457 } catch (error) { 4458 let e:business_error.BusinessError = error as business_error.BusinessError; 4459 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4460 } 4461 }) 4462 .height(50) 4463 } 4464 4465 ListItem() { 4466 Button() { 4467 Text('getCertificate AsyncCallback') 4468 .fontSize(10) 4469 .fontWeight(FontWeight.Bold) 4470 } 4471 .type(ButtonType.Capsule) 4472 .onClick(() => { 4473 try { 4474 this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => { 4475 if (error) { 4476 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4477 } else { 4478 this.outputStr = ParseX509CertInfo(x509CertArray); 4479 } 4480 }) 4481 } catch (error) { 4482 let e:business_error.BusinessError = error as business_error.BusinessError; 4483 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4484 } 4485 }) 4486 .height(50) 4487 } 4488 } 4489 .listDirection(Axis.Horizontal) 4490 .height('10%') 4491 4492 Text(this.outputStr) 4493 .width('100%') 4494 .fontSize(10) 4495 4496 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4497 .fileAccess(true) 4498 .javaScriptAccess(true) 4499 .domStorageAccess(true) 4500 .onlineImageAccess(true) 4501 .onPageEnd((e) => { 4502 if(e) { 4503 this.outputStr = 'onPageEnd : url = ' + e.url 4504 } 4505 }) 4506 .onSslErrorEventReceive((e) => { 4507 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4508 e.handler.handleConfirm() 4509 }) 4510 .width('100%') 4511 .height('70%') 4512 } 4513 .height('100%') 4514 } 4515 } 4516} 4517``` 4518 4519### getCertificate<sup>10+</sup> 4520 4521getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void 4522 4523获取当前网站的证书信息。使用web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。 4524 4525**系统能力:** SystemCapability.Web.Webview.Core 4526 4527**参数:** 4528 4529| 参数名 | 类型 | 必填 | 说明 | 4530| -------- | ---------------------------- | ---- | ---------------------------------------- | 4531| callback | AsyncCallback<Array<cert.X509Cert>> | 是 | 通过AsyncCallback异步返回当前网站的X509格式证书。 | 4532 4533**错误码:** 4534 4535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4536 4537| 错误码ID | 错误信息 | 4538| -------- | ------------------------------------------------------------ | 4539| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4540 4541**示例:** 4542 4543```ts 4544// xxx.ets 4545import web_webview from '@ohos.web.webview'; 4546import business_error from '@ohos.base'; 4547import cert from '@ohos.security.cert'; 4548 4549function Uint8ArrayToString(dataArray:Uint8Array) { 4550 let dataString = '' 4551 for (let i = 0; i < dataArray.length; i++) { 4552 dataString += String.fromCharCode(dataArray[i]) 4553 } 4554 return dataString 4555} 4556 4557function ParseX509CertInfo(x509CertArray:Array<cert.X509Cert>) { 4558 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4559 for (let i = 0; i < x509CertArray.length; i++) { 4560 res += ', index = ' + i + ', issuer name = ' 4561 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4562 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4563 + x509CertArray[i].getNotBeforeTime() 4564 + ', valid end = ' + x509CertArray[i].getNotAfterTime() 4565 } 4566 return res 4567} 4568 4569@Entry 4570@Component 4571struct Index { 4572 // outputStr在UI界面显示调试信息 4573 @State outputStr: string = '' 4574 webviewCtl: web_webview.WebviewController = new web_webview.WebviewController(); 4575 4576 build() { 4577 Row() { 4578 Column() { 4579 List({space: 20, initialIndex: 0}) { 4580 ListItem() { 4581 Button() { 4582 Text('load bad ssl') 4583 .fontSize(10) 4584 .fontWeight(FontWeight.Bold) 4585 } 4586 .type(ButtonType.Capsule) 4587 .onClick(() => { 4588 // 加载一个过期的证书网站,查看获取到的证书信息 4589 this.webviewCtl.loadUrl('https://expired.badssl.com') 4590 }) 4591 .height(50) 4592 } 4593 4594 ListItem() { 4595 Button() { 4596 Text('load example') 4597 .fontSize(10) 4598 .fontWeight(FontWeight.Bold) 4599 } 4600 .type(ButtonType.Capsule) 4601 .onClick(() => { 4602 // 加载一个https网站,查看网站的证书信息 4603 this.webviewCtl.loadUrl('https://www.example.com') 4604 }) 4605 .height(50) 4606 } 4607 4608 ListItem() { 4609 Button() { 4610 Text('getCertificate Promise') 4611 .fontSize(10) 4612 .fontWeight(FontWeight.Bold) 4613 } 4614 .type(ButtonType.Capsule) 4615 .onClick(() => { 4616 try { 4617 this.webviewCtl.getCertificate().then((x509CertArray:Array<cert.X509Cert>) => { 4618 this.outputStr = ParseX509CertInfo(x509CertArray); 4619 }) 4620 } catch (error) { 4621 let e:business_error.BusinessError = error as business_error.BusinessError; 4622 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4623 } 4624 }) 4625 .height(50) 4626 } 4627 4628 ListItem() { 4629 Button() { 4630 Text('getCertificate AsyncCallback') 4631 .fontSize(10) 4632 .fontWeight(FontWeight.Bold) 4633 } 4634 .type(ButtonType.Capsule) 4635 .onClick(() => { 4636 try { 4637 this.webviewCtl.getCertificate((error:business_error.BusinessError, x509CertArray:Array<cert.X509Cert>) => { 4638 if (error) { 4639 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4640 } else { 4641 this.outputStr = ParseX509CertInfo(x509CertArray); 4642 } 4643 }) 4644 } catch (error) { 4645 let e:business_error.BusinessError = error as business_error.BusinessError; 4646 this.outputStr = 'getCertificate failed: ' + e.code + ", errMsg: " + e.message; 4647 } 4648 }) 4649 .height(50) 4650 } 4651 } 4652 .listDirection(Axis.Horizontal) 4653 .height('10%') 4654 4655 Text(this.outputStr) 4656 .width('100%') 4657 .fontSize(10) 4658 4659 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4660 .fileAccess(true) 4661 .javaScriptAccess(true) 4662 .domStorageAccess(true) 4663 .onlineImageAccess(true) 4664 .onPageEnd((e) => { 4665 if (e) { 4666 this.outputStr = 'onPageEnd : url = ' + e.url 4667 } 4668 }) 4669 .onSslErrorEventReceive((e) => { 4670 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4671 e.handler.handleConfirm() 4672 }) 4673 .width('100%') 4674 .height('70%') 4675 } 4676 .height('100%') 4677 } 4678 } 4679} 4680``` 4681 4682### setAudioMuted<sup>10+</sup> 4683 4684setAudioMuted(mute: boolean): void 4685 4686设置网页静音。 4687 4688**系统能力:** SystemCapability.Web.Webview.Core 4689 4690**参数:** 4691 4692| 参数名 | 类型 | 必填 | 说明 | 4693| -------- | ------- | ---- | -------------------------------------- | 4694| mute | boolean | 是 | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 | 4695 4696**错误码:** 4697 4698以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4699 4700| 错误码ID | 错误信息 | 4701| -------- | ------------------------------------------------------------ | 4702| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4703 4704**示例:** 4705 4706```ts 4707// xxx.ets 4708import web_webview from '@ohos.web.webview' 4709 4710@Entry 4711@Component 4712struct WebComponent { 4713 controller: web_webview.WebviewController = new web_webview.WebviewController() 4714 @State muted: boolean = false 4715 build() { 4716 Column() { 4717 Button("Toggle Mute") 4718 .onClick(event => { 4719 this.muted = !this.muted 4720 this.controller.setAudioMuted(this.muted) 4721 }) 4722 Web({ src: 'www.example.com', controller: this.controller }) 4723 } 4724 } 4725} 4726``` 4727 4728### prefetchPage<sup>10+</sup> 4729 4730prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void 4731 4732在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。 4733 4734**系统能力:** SystemCapability.Web.Webview.Core 4735 4736**参数:** 4737 4738| 参数名 | 类型 | 必填 | 说明 | 4739| ------------------| --------------------------------| ---- | ------------- | 4740| url | string | 是 | 预加载的url。| 4741| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | url的附加HTTP请求头。| 4742 4743**错误码:** 4744 4745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 4746 4747| 错误码ID | 错误信息 | 4748| -------- | ------------------------------------------------------------ | 4749| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4750| 17100002 | Invalid url. | 4751 4752**示例:** 4753 4754```ts 4755// xxx.ets 4756import web_webview from '@ohos.web.webview' 4757import business_error from '@ohos.base' 4758 4759@Entry 4760@Component 4761struct WebComponent { 4762 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4763 4764 build() { 4765 Column() { 4766 Button('prefetchPopularPage') 4767 .onClick(() => { 4768 try { 4769 // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。 4770 this.controller.prefetchPage('https://www.example.com'); 4771 } catch (error) { 4772 let e:business_error.BusinessError = error as business_error.BusinessError; 4773 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4774 } 4775 }) 4776 // 需要将'www.example1.com'替换成一个真实的网站地址。 4777 Web({ src: 'www.example1.com', controller: this.controller }) 4778 } 4779 } 4780} 4781``` 4782 4783### prepareForPageLoad<sup>10+</sup> 4784 4785static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void 4786 4787预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。 4788 4789**系统能力:** SystemCapability.Web.Webview.Core 4790 4791**参数:** 4792 4793| 参数名 | 类型 | 必填 | 说明 | 4794| ---------------| ------- | ---- | ------------- | 4795| url | string | 是 | 预连接的url。| 4796| preconnectable | boolean | 是 | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。| 4797| numSockets | number | 是 | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。| 4798 4799**错误码:** 4800 4801以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 4802 4803| 错误码ID | 错误信息 | 4804| -------- | ------------------------------------------------------------ | 4805| 17100002 | Invalid url. | 4806| 171000013| The number of preconnect sockets is invalid. | 4807 4808**示例:** 4809 4810```ts 4811// xxx.ts 4812import UIAbility from '@ohos.app.ability.UIAbility'; 4813import web_webview from '@ohos.web.webview'; 4814import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 4815import Want from '@ohos.app.ability.Want'; 4816 4817export default class EntryAbility extends UIAbility { 4818 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4819 console.log("EntryAbility onCreate"); 4820 web_webview.WebviewController.initializeWebEngine(); 4821 // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。 4822 web_webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 4823 AppStorage.setOrCreate("abilityWant", want); 4824 console.log("EntryAbility onCreate done"); 4825 } 4826} 4827``` 4828 4829### setCustomUserAgent<sup>10+</sup> 4830 4831setCustomUserAgent(userAgent: string): void 4832 4833设置自定义用户代理,会覆盖系统的用户代理,推荐设置的位置是onControllerAttached回调事件,不建议放在onLoadIntercept。 4834 4835> **说明:** 4836> 4837>setCustomUserAgent设置后与web页面的跳转时序是web跳转后才设置UserAgent,这就导致页面跳转了但新agent关联的页面堆栈数仍只有一个,webviewController.accessBackward()总是返回false。 4838>若需要setCustomUserAgent,在setCustomUserAgent方法后添加this.controller.loadUrl(this.webUrl),webUrl为要加载的web页面,在原始的web组件的src可以设置一个空字符串。 4839 4840**系统能力:** SystemCapability.Web.Webview.Core 4841 4842**参数:** 4843 4844| 参数名 | 类型 | 必填 | 说明 | 4845| ---------------| ------- | ---- | ------------- | 4846| userAgent | string | 是 | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 | 4847 4848**错误码:** 4849 4850以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 4851 4852| 错误码ID | 错误信息 | 4853| -------- | ------------------------------------------------------------ | 4854| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4855 4856**示例:** 4857 4858```ts 4859// xxx.ets 4860import web_webview from '@ohos.web.webview' 4861import business_error from '@ohos.base' 4862 4863@Entry 4864@Component 4865struct WebComponent { 4866 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4867 @State customUserAgent: string = 'test' 4868 4869 build() { 4870 Column() { 4871 Button('setCustomUserAgent') 4872 .onClick(() => { 4873 try { 4874 let userAgent = this.controller.getUserAgent() + this.customUserAgent; 4875 this.controller.setCustomUserAgent(userAgent); 4876 } catch (error) { 4877 let e:business_error.BusinessError = error as business_error.BusinessError; 4878 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4879 } 4880 }) 4881 Web({ src: 'www.example.com', controller: this.controller }) 4882 } 4883 } 4884} 4885``` 4886 4887### setDownloadDelegate<sup>11+</sup> 4888 4889setDownloadDelegate(delegate: WebDownloadDelegate): void 4890 4891为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。 4892 4893**系统能力:** SystemCapability.Web.Webview.Core 4894 4895**参数:** 4896 4897| 参数名 | 类型 | 必填 | 说明 | 4898| ---------------| ------- | ---- | ------------- | 4899| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 4900 4901**错误码:** 4902 4903以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 4904 4905| 错误码ID | 错误信息 | 4906| -------- | ------------------------------------------------------------ | 4907| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4908 4909**示例:** 4910 4911```ts 4912// xxx.ets 4913import web_webview from '@ohos.web.webview' 4914import business_error from '@ohos.base' 4915 4916@Entry 4917@Component 4918struct WebComponent { 4919 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4920 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 4921 4922 build() { 4923 Column() { 4924 Button('setDownloadDelegate') 4925 .onClick(() => { 4926 try { 4927 this.controller.setDownloadDelegate(this.delegate); 4928 } catch (error) { 4929 let e:business_error.BusinessError = error as business_error.BusinessError; 4930 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4931 } 4932 }) 4933 Web({ src: 'www.example.com', controller: this.controller }) 4934 } 4935 } 4936} 4937``` 4938 4939### startDownload<sup>11+</sup> 4940 4941startDownload(url: string): void 4942 4943使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。 4944 4945**系统能力:** SystemCapability.Web.Webview.Core 4946 4947**参数:** 4948 4949| 参数名 | 类型 | 必填 | 说明 | 4950| ---------------| ------- | ---- | ------------- | 4951| url | string | 是 | 下载地址。 | 4952 4953**错误码:** 4954 4955以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 4956 4957| 错误码ID | 错误信息 | 4958| -------- | ------------------------------------------------------------ | 4959| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4960| 17100002 | Invalid url. | 4961 4962**示例:** 4963 4964```ts 4965// xxx.ets 4966import web_webview from '@ohos.web.webview' 4967import business_error from '@ohos.base' 4968 4969@Entry 4970@Component 4971struct WebComponent { 4972 controller: web_webview.WebviewController = new web_webview.WebviewController(); 4973 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 4974 4975 build() { 4976 Column() { 4977 Button('setDownloadDelegate') 4978 .onClick(() => { 4979 try { 4980 this.controller.setDownloadDelegate(this.delegate); 4981 } catch (error) { 4982 let e:business_error.BusinessError = error as business_error.BusinessError; 4983 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4984 } 4985 }) 4986 Button('startDownload') 4987 .onClick(() => { 4988 try { 4989 this.controller.startDownload('www.example.com'); 4990 } catch (error) { 4991 let e:business_error.BusinessError = error as business_error.BusinessError; 4992 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 4993 } 4994 }) 4995 Web({ src: 'www.example.com', controller: this.controller }) 4996 } 4997 } 4998} 4999``` 5000 5001### getCustomUserAgent<sup>10+</sup> 5002 5003getCustomUserAgent(): string 5004 5005获取自定义用户代理。 5006 5007**系统能力:** SystemCapability.Web.Webview.Core 5008 5009**返回值:** 5010 5011| 类型 | 说明 | 5012| ------ | ------------------------- | 5013| string | 用户自定义代理信息。 | 5014 5015**错误码:** 5016 5017以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 5018 5019| 错误码ID | 错误信息 | 5020| -------- | ------------------------------------------------------------ | 5021| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5022 5023**示例:** 5024 5025```ts 5026// xxx.ets 5027import web_webview from '@ohos.web.webview' 5028import business_error from '@ohos.base' 5029 5030@Entry 5031@Component 5032struct WebComponent { 5033 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5034 @State userAgent: string = '' 5035 5036 build() { 5037 Column() { 5038 Button('getCustomUserAgent') 5039 .onClick(() => { 5040 try { 5041 this.userAgent = this.controller.getCustomUserAgent(); 5042 console.log("userAgent: " + this.userAgent); 5043 } catch (error) { 5044 let e:business_error.BusinessError = error as business_error.BusinessError; 5045 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5046 } 5047 }) 5048 Web({ src: 'www.example.com', controller: this.controller }) 5049 } 5050 } 5051} 5052``` 5053 5054### setConnectionTimeout<sup>11+</sup> 5055 5056static setConnectionTimeout(timeout: number): void 5057 5058设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。 5059 5060**系统能力:** SystemCapability.Web.Webview.Core 5061 5062**参数:** 5063 5064| 参数名 | 类型 | 必填 | 说明 | 5065| ---------------| ------- | ---- | ------------- | 5066| timeout | number | 是 | socket连接超时时间,以秒为单位。 | 5067 5068**示例:** 5069 5070```ts 5071// xxx.ets 5072import web_webview from '@ohos.web.webview' 5073import business_error from '@ohos.base' 5074 5075@Entry 5076@Component 5077struct WebComponent { 5078 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5079 5080 build() { 5081 Column() { 5082 Button('setConnectionTimeout') 5083 .onClick(() => { 5084 try { 5085 web_webview.WebviewController.setConnectionTimeout(5); 5086 console.log("setConnectionTimeout: 5s"); 5087 } catch (error) { 5088 let e:business_error.BusinessError = error as business_error.BusinessError; 5089 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5090 } 5091 }) 5092 Web({ src: 'www.example.com', controller: this.controller }) 5093 .onErrorReceive((event) => { 5094 if (event) { 5095 console.log('getErrorInfo:' + event.error.getErrorInfo()) 5096 console.log('getErrorCode:' + event.error.getErrorCode()) 5097 } 5098 }) 5099 } 5100 } 5101} 5102``` 5103 5104### enableSafeBrowsing<sup>11+</sup> 5105 5106enableSafeBrowsing(enable: boolean): void 5107 5108启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。 5109 5110**系统能力:** SystemCapability.Web.Webview.Core 5111 5112**参数:** 5113 5114| 参数名 | 类型 | 必填 | 说明 | 5115| --------| ------- | ---- | ---------------------------| 5116| enable | boolean | 是 | 是否启用检查网站安全风险的功能。 | 5117 5118**错误码:** 5119 5120以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5121 5122| 错误码ID | 错误信息 | 5123| -------- | ----------------------- | 5124| 401 | Invalid input parameter. | 5125 5126**示例:** 5127 5128```ts 5129// xxx.ets 5130import web_webview from '@ohos.web.webview' 5131import business_error from '@ohos.base' 5132 5133@Entry 5134@Component 5135struct WebComponent { 5136 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5137 5138 build() { 5139 Column() { 5140 Button('enableSafeBrowsing') 5141 .onClick(() => { 5142 try { 5143 this.controller.enableSafeBrowsing(true); 5144 console.log("enableSafeBrowsing: true"); 5145 } catch (error) { 5146 let e:business_error.BusinessError = error as business_error.BusinessError; 5147 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5148 } 5149 }) 5150 Web({ src: 'www.example.com', controller: this.controller }) 5151 } 5152 } 5153} 5154``` 5155 5156### isSafeBrowsingEnabled<sup>11+</sup> 5157 5158isSafeBrowsingEnabled(): boolean 5159 5160获取当前网页是否启用了检查网站安全风险。 5161 5162**系统能力:** SystemCapability.Web.Webview.Core 5163 5164**返回值:** 5165 5166| 类型 | 说明 | 5167| ------- | --------------------------------------- | 5168| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。| 5169 5170**示例:** 5171 5172```ts 5173// xxx.ets 5174import web_webview from '@ohos.web.webview' 5175 5176@Entry 5177@Component 5178struct WebComponent { 5179 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5180 5181 build() { 5182 Column() { 5183 Button('isSafeBrowsingEnabled') 5184 .onClick(() => { 5185 let result = this.controller.isSafeBrowsingEnabled(); 5186 console.log("result: " + result); 5187 }) 5188 Web({ src: 'www.example.com', controller: this.controller }) 5189 } 5190 } 5191} 5192``` 5193 5194### postUrl<sup>11+</sup> 5195 5196postUrl(url: string, postData: ArrayBuffer): void 5197 5198使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。 5199 5200**系统能力:** SystemCapability.Web.Webview.Core 5201 5202**参数:** 5203 5204| 参数名 | 类型 | 必填 | 说明 | 5205| ------- | ---------------- | ---- | :-------------------- | 5206| url | string | 是 | 需要加载的 URL。 | 5207| postData | ArrayBuffer | 是 | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。| 5208 5209**错误码:** 5210 5211以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5212 5213| 错误码ID | 错误信息 | 5214| -------- | ------------------------------------------------------------ | 5215| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5216| 17100002 | Invalid url. | 5217 5218**示例:** 5219 5220```ts 5221// xxx.ets 5222import web_webview from '@ohos.web.webview' 5223import business_error from '@ohos.base' 5224 5225class TestObj { 5226 constructor() { 5227 } 5228 5229 test(str: string): ArrayBuffer { 5230 let buf = new ArrayBuffer(str.length); 5231 let buff = new Uint8Array(buf); 5232 5233 for (let i = 0; i < str.length; i++) { 5234 buff[i] = str.charCodeAt(i); 5235 } 5236 return buf; 5237 } 5238} 5239 5240@Entry 5241@Component 5242struct WebComponent { 5243 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5244 @State testObjtest: TestObj = new TestObj(); 5245 5246 build() { 5247 Column() { 5248 Button('postUrl') 5249 .onClick(() => { 5250 try { 5251 // 数据转化为ArrayBuffer类型。 5252 let postData = this.testObjtest.test("Name=test&Password=test"); 5253 this.controller.postUrl('www.example.com', postData); 5254 } catch (error) { 5255 let e: business_error.BusinessError = error as business_error.BusinessError; 5256 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5257 } 5258 }) 5259 Web({ src: '', controller: this.controller }) 5260 } 5261 } 5262} 5263``` 5264 5265### createWebPrintDocumentAdapter<sup>11+</sup> 5266 5267createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter 5268 5269创建web相关打印功能。 5270 5271**系统能力:** SystemCapability.Web.Webview.Core 5272 5273**参数:** 5274 5275| 参数名 | 类型 | 必填 | 说明 | 5276| ------- | ------ | ---- | :-------------------- | 5277| jobName | string | 是 | 需要打印的文件名。 | 5278 5279**返回值:** 5280 5281| 类型 | 说明 | 5282| -------------------- | ------------------------- | 5283| print.printDocumentAdapter | 返回打印文档的适配器。 | 5284 5285**错误码:** 5286 5287以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5288 5289| 错误码ID | 错误信息 | 5290| -------- | -------------------------------------------------------------------------- | 5291| 401 | Invalid input parameter. | 5292| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5293 5294**示例:** 5295 5296```ts 5297// xxx.ets 5298import web_webview from '@ohos.web.webview' 5299import business_error from '@ohos.base' 5300import print from '@ohos.print' 5301 5302@Entry 5303@Component 5304struct WebComponent { 5305 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5306 5307 build() { 5308 Column() { 5309 Button('createWebPrintDocumentAdapter') 5310 .onClick(() => { 5311 try { 5312 let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf'); 5313 print.print('example_jobid', webPrintDocadapter, null, getContext()); 5314 } catch (error) { 5315 let e: business_error.BusinessError = error as business_error.BusinessError; 5316 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5317 } 5318 }) 5319 Web({ src: 'www.example.com', controller: this.controller }) 5320 } 5321 } 5322} 5323``` 5324### isIncognitoMode<sup>11+</sup> 5325 5326isIncognitoMode(): boolean 5327 5328查询当前是否是隐私模式的Webview。 5329 5330**系统能力:** SystemCapability.Web.Webview.Core 5331 5332**返回值:** 5333 5334| 类型 | 说明 | 5335| -------------------- | ------------------------- | 5336| boolean | 返回是否是隐私模式的Webview。 | 5337 5338**错误码:** 5339 5340以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5341 5342| 错误码ID | 错误信息 | 5343| -------- | -------------------------------------------------------------------------- | 5344| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5345 5346**示例:** 5347 5348```ts 5349// xxx.ets 5350import web_webview from '@ohos.web.webview' 5351import business_error from '@ohos.base' 5352 5353@Entry 5354@Component 5355struct WebComponent { 5356 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5357 5358 build() { 5359 Column() { 5360 Button('isIncognitoMode') 5361 .onClick(() => { 5362 try { 5363 let result = this.controller.isIncognitoMode(); 5364 console.log('isIncognitoMode' + result); 5365 } catch (error) { 5366 let e: business_error.BusinessError = error as business_error.BusinessError; 5367 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5368 } 5369 }) 5370 Web({ src: 'www.example.com', controller: this.controller }) 5371 } 5372 } 5373} 5374``` 5375 5376### getSecurityLevel<sup>11+</sup> 5377 5378getSecurityLevel(): SecurityLevel 5379 5380获取当前网页的安全级别。 5381 5382**系统能力:** SystemCapability.Web.Webview.Core 5383 5384**返回值:** 5385 5386| 类型 | 说明 | 5387| ----------------------------------- | --------------------------- | 5388| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 | 5389 5390**错误码:** 5391 5392以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5393 5394| 错误码ID | 错误信息 | 5395| -------- | ------------------------------------------------------------ | 5396| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5397 5398**示例:** 5399 5400```ts 5401import webview from '@ohos.web.webview' 5402 5403 5404 5405@Entry 5406@Component 5407struct WebComponent { 5408 controller: webview.WebviewController = new webview.WebviewController() 5409 build() { 5410 Column() { 5411 Web({ src: 'www.example.com', controller: this.controller }) 5412 .onPageEnd((event) => { 5413 if (event) { 5414 let securityLevel = this.controller.getSecurityLevel() 5415 console.info('securityLevel: ', securityLevel) 5416 } 5417 }) 5418 } 5419 } 5420} 5421``` 5422 5423## WebCookieManager 5424 5425通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。 5426 5427### getCookie<sup>(deprecated)</sup> 5428 5429static getCookie(url: string): string 5430 5431获取指定url对应cookie的值。 5432 5433> **说明:** 5434> 5435> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代 5436 5437**系统能力:** SystemCapability.Web.Webview.Core 5438 5439**参数:** 5440 5441| 参数名 | 类型 | 必填 | 说明 | 5442| ------ | ------ | ---- | :------------------------ | 5443| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5444 5445**返回值:** 5446 5447| 类型 | 说明 | 5448| ------ | ------------------------- | 5449| string | 指定url对应的cookie的值。 | 5450 5451**错误码:** 5452 5453以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5454 5455| 错误码ID | 错误信息 | 5456| -------- | ------------------------------------------------------ | 5457| 17100002 | Invalid url. | 5458 5459**示例:** 5460 5461```ts 5462// xxx.ets 5463import web_webview from '@ohos.web.webview' 5464import business_error from '@ohos.base' 5465 5466@Entry 5467@Component 5468struct WebComponent { 5469 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5470 5471 build() { 5472 Column() { 5473 Button('getCookie') 5474 .onClick(() => { 5475 try { 5476 let value = web_webview.WebCookieManager.getCookie('https://www.example.com'); 5477 console.log("value: " + value); 5478 } catch (error) { 5479 let e:business_error.BusinessError = error as business_error.BusinessError; 5480 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5481 } 5482 }) 5483 Web({ src: 'www.example.com', controller: this.controller }) 5484 } 5485 } 5486} 5487``` 5488 5489### fetchCookieSync<sup>11+</sup> 5490 5491static fetchCookieSync(url: string, incognito?: boolean): string 5492 5493获取指定url对应cookie的值。 5494 5495**系统能力:** SystemCapability.Web.Webview.Core 5496 5497**参数:** 5498 5499| 参数名 | 类型 | 必填 | 说明 | 5500| ------ | ------ | ---- | :------------------------ | 5501| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5502| incognito | boolean | 否 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 5503 5504**返回值:** 5505 5506| 类型 | 说明 | 5507| ------ | ------------------------- | 5508| string | 指定url对应的cookie的值。 | 5509 5510**错误码:** 5511 5512以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5513 5514| 错误码ID | 错误信息 | 5515| -------- | ------------------------------------------------------ | 5516| 17100002 | Invalid url. | 5517 5518**示例:** 5519 5520```ts 5521// xxx.ets 5522import web_webview from '@ohos.web.webview' 5523import business_error from '@ohos.base' 5524 5525@Entry 5526@Component 5527struct WebComponent { 5528 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5529 5530 build() { 5531 Column() { 5532 Button('fetchCookieSync') 5533 .onClick(() => { 5534 try { 5535 let value = web_webview.WebCookieManager.fetchCookieSync('https://www.example.com'); 5536 console.log("fetchCookieSync cookie = " + value); 5537 } catch (error) { 5538 let e:business_error.BusinessError = error as business_error.BusinessError; 5539 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5540 } 5541 }) 5542 Web({ src: 'www.example.com', controller: this.controller }) 5543 } 5544 } 5545} 5546``` 5547 5548### fetchCookie<sup>11+</sup> 5549 5550static fetchCookie(url: string, callback: AsyncCallback\<string>): void 5551 5552异步callback方式获取指定url对应cookie的值。 5553 5554**系统能力:** SystemCapability.Web.Webview.Core 5555 5556**参数:** 5557 5558| 参数名 | 类型 | 必填 | 说明 | 5559| ------ | ------ | ---- | :------------------------ | 5560| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5561| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie | 5562 5563**错误码:** 5564 5565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5566 5567| 错误码ID | 错误信息 | 5568| -------- | ------------------------------------------------------ | 5569| 401 | Invalid input parameter. | 5570| 17100002 | Invalid url. | 5571 5572**示例:** 5573 5574```ts 5575// xxx.ets 5576import web_webview from '@ohos.web.webview' 5577import business_error from '@ohos.base' 5578 5579@Entry 5580@Component 5581struct WebComponent { 5582 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5583 5584 build() { 5585 Column() { 5586 Button('fetchCookie') 5587 .onClick(() => { 5588 try { 5589 web_webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => { 5590 if (error) { 5591 let e:business_error.BusinessError = error as business_error.BusinessError; 5592 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5593 return; 5594 } 5595 if (cookie) { 5596 console.log('fetchCookie cookie = ' + cookie); 5597 } 5598 }) 5599 } catch (error) { 5600 let e:business_error.BusinessError = error as business_error.BusinessError; 5601 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5602 } 5603 }) 5604 Web({ src: 'www.example.com', controller: this.controller }) 5605 } 5606 } 5607} 5608``` 5609 5610### fetchCookie<sup>11+</sup> 5611 5612static fetchCookie(url: string): Promise\<string> 5613 5614以Promise方式异步获取指定url对应cookie的值。 5615 5616**系统能力:** SystemCapability.Web.Webview.Core 5617 5618**参数:** 5619 5620| 参数名 | 类型 | 必填 | 说明 | 5621| ------ | ------ | ---- | :------------------------ | 5622| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5623 5624**返回值:** 5625 5626| 类型 | 说明 | 5627| ------ | ------------------------- | 5628| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 5629 5630**错误码:** 5631 5632以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5633 5634| 错误码ID | 错误信息 | 5635| -------- | ------------------------------------------------------ | 5636| 401 | Invalid input parameter. | 5637| 17100002 | Invalid url. | 5638 5639**示例:** 5640 5641```ts 5642// xxx.ets 5643import web_webview from '@ohos.web.webview' 5644import business_error from '@ohos.base' 5645 5646@Entry 5647@Component 5648struct WebComponent { 5649 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5650 5651 build() { 5652 Column() { 5653 Button('fetchCookie') 5654 .onClick(() => { 5655 try { 5656 web_webview.WebCookieManager.fetchCookie('https://www.example.com') 5657 .then(cookie => { 5658 console.log("fetchCookie cookie = " + cookie); 5659 }) 5660 .catch((error:business_error.BusinessError) => { 5661 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 5662 }) 5663 } catch (error) { 5664 let e:business_error.BusinessError = error as business_error.BusinessError; 5665 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5666 } 5667 }) 5668 Web({ src: 'www.example.com', controller: this.controller }) 5669 } 5670 } 5671} 5672``` 5673 5674 5675### setCookie<sup>(deprecated)</sup> 5676 5677static setCookie(url: string, value: string): void 5678 5679为指定url设置单个cookie的值。 5680 5681> **说明:** 5682> 5683> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代 5684 5685**系统能力:** SystemCapability.Web.Webview.Core 5686 5687**参数:** 5688 5689| 参数名 | 类型 | 必填 | 说明 | 5690| ------ | ------ | ---- | :------------------------ | 5691| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 5692| value | string | 是 | 要设置的cookie的值。 | 5693 5694**错误码:** 5695 5696以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5697 5698| 错误码ID | 错误信息 | 5699| -------- | ------------------------------------------------------ | 5700| 17100002 | Invalid url. | 5701| 17100005 | Invalid cookie value. | 5702 5703**示例:** 5704 5705```ts 5706// xxx.ets 5707import web_webview from '@ohos.web.webview' 5708import business_error from '@ohos.base' 5709 5710@Entry 5711@Component 5712struct WebComponent { 5713 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5714 5715 build() { 5716 Column() { 5717 Button('setCookie') 5718 .onClick(() => { 5719 try { 5720 web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 5721 } catch (error) { 5722 let e:business_error.BusinessError = error as business_error.BusinessError; 5723 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5724 } 5725 }) 5726 Web({ src: 'www.example.com', controller: this.controller }) 5727 } 5728 } 5729} 5730``` 5731 5732### configCookieSync<sup>11+</sup> 5733 5734static configCookieSync(url: string, value: string, incognito?: boolean): void 5735 5736为指定url设置cookie的值。 5737 5738> **说明:** 5739> 5740>configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。 5741>同步cookie的时机建议在webview组件加载之前完成。 5742 5743**系统能力:** SystemCapability.Web.Webview.Core 5744 5745**参数:** 5746 5747| 参数名 | 类型 | 必填 | 说明 | 5748| ------ | ------ | ---- | :------------------------ | 5749| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 5750| value | string | 是 | 要设置的cookie的值。 | 5751| incognito | boolean | 否 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 5752 5753**错误码:** 5754 5755以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5756 5757| 错误码ID | 错误信息 | 5758| -------- | ------------------------------------------------------ | 5759| 17100002 | Invalid url. | 5760| 17100005 | Invalid cookie value. | 5761 5762**示例:** 5763 5764```ts 5765// xxx.ets 5766import web_webview from '@ohos.web.webview' 5767import business_error from '@ohos.base' 5768 5769@Entry 5770@Component 5771struct WebComponent { 5772 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5773 5774 build() { 5775 Column() { 5776 Button('configCookieSync') 5777 .onClick(() => { 5778 try { 5779 // 设置多个cookie值时用','隔开,设置单个cookie值时不需要。 5780 web_webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b,c=d,e=f'); 5781 } catch (error) { 5782 let e:business_error.BusinessError = error as business_error.BusinessError; 5783 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5784 } 5785 }) 5786 Web({ src: 'www.example.com', controller: this.controller }) 5787 } 5788 } 5789} 5790``` 5791 5792### configCookie<sup>11+</sup> 5793 5794static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void 5795 5796异步callback方式为指定url设置单个cookie的值。 5797 5798**系统能力:** SystemCapability.Web.Webview.Core 5799 5800**参数:** 5801 5802| 参数名 | 类型 | 必填 | 说明 | 5803| ------ | ------ | ---- | :------------------------ | 5804| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5805| value | string | 是 | 要设置的cookie的值。 | 5806| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 | 5807 5808**错误码:** 5809 5810以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5811 5812| 错误码ID | 错误信息 | 5813| -------- | ------------------------------------------------------ | 5814| 401 | Invalid input parameter. | 5815| 17100002 | Invalid url. | 5816| 17100005 | Invalid cookie value. | 5817 5818**示例:** 5819 5820```ts 5821// xxx.ets 5822import web_webview from '@ohos.web.webview' 5823import business_error from '@ohos.base' 5824 5825@Entry 5826@Component 5827struct WebComponent { 5828 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5829 5830 build() { 5831 Column() { 5832 Button('configCookie') 5833 .onClick(() => { 5834 try { 5835 web_webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => { 5836 if (error) { 5837 let e: business_error.BusinessError = error as business_error.BusinessError; 5838 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5839 } 5840 }) 5841 } catch (error) { 5842 let e:business_error.BusinessError = error as business_error.BusinessError; 5843 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5844 } 5845 }) 5846 Web({ src: 'www.example.com', controller: this.controller }) 5847 } 5848 } 5849} 5850``` 5851 5852### configCookie<sup>11+</sup> 5853 5854static configCookie(url: string, value: string): Promise\<void> 5855 5856以异步Promise方式为指定url设置单个cookie的值。 5857 5858**系统能力:** SystemCapability.Web.Webview.Core 5859 5860**参数:** 5861 5862| 参数名 | 类型 | 必填 | 说明 | 5863| ------ | ------ | ---- | :------------------------ | 5864| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 5865| value | string | 是 | 要设置的cookie的值。 | 5866 5867**返回值:** 5868 5869| 类型 | 说明 | 5870| ------ | ------------------------- | 5871| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 5872 5873**错误码:** 5874 5875以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5876 5877| 错误码ID | 错误信息 | 5878| -------- | ------------------------------------------------------ | 5879| 401 | Invalid input parameter. | 5880| 17100002 | Invalid url. | 5881| 17100005 | Invalid cookie value. | 5882 5883**示例:** 5884 5885```ts 5886// xxx.ets 5887import web_webview from '@ohos.web.webview' 5888import business_error from '@ohos.base' 5889 5890@Entry 5891@Component 5892struct WebComponent { 5893 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5894 5895 build() { 5896 Column() { 5897 Button('configCookie') 5898 .onClick(() => { 5899 try { 5900 web_webview.WebCookieManager.configCookie('https://www.example.com', 'a=b') 5901 .then(() => { 5902 console.log('configCookie success!'); 5903 }) 5904 .catch((error:business_error.BusinessError) => { 5905 console.log('error: ' + JSON.stringify(error)); 5906 }) 5907 } catch (error) { 5908 let e:business_error.BusinessError = error as business_error.BusinessError; 5909 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5910 } 5911 }) 5912 Web({ src: 'www.example.com', controller: this.controller }) 5913 } 5914 } 5915} 5916``` 5917 5918### saveCookieAsync 5919 5920static saveCookieAsync(callback: AsyncCallback\<void>): void 5921 5922将当前存在内存中的cookie异步保存到磁盘中。 5923 5924**系统能力:** SystemCapability.Web.Webview.Core 5925 5926**参数:** 5927 5928| 参数名 | 类型 | 必填 | 说明 | 5929| -------- | ---------------------- | ---- | :------------------------------------------------- | 5930| callback | AsyncCallback\<void> | 是 | callback回调,用于获取cookie是否成功保存。 | 5931 5932**示例:** 5933 5934```ts 5935// xxx.ets 5936import web_webview from '@ohos.web.webview' 5937import business_error from '@ohos.base' 5938 5939@Entry 5940@Component 5941struct WebComponent { 5942 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5943 5944 build() { 5945 Column() { 5946 Button('saveCookieAsync') 5947 .onClick(() => { 5948 try { 5949 web_webview.WebCookieManager.saveCookieAsync((error) => { 5950 if (error) { 5951 let e: business_error.BusinessError = error as business_error.BusinessError; 5952 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5953 } 5954 }) 5955 } catch (error) { 5956 let e:business_error.BusinessError = error as business_error.BusinessError; 5957 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 5958 } 5959 }) 5960 Web({ src: 'www.example.com', controller: this.controller }) 5961 } 5962 } 5963} 5964``` 5965 5966### saveCookieAsync 5967 5968static saveCookieAsync(): Promise\<void> 5969 5970将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 5971 5972**系统能力:** SystemCapability.Web.Webview.Core 5973 5974**返回值:** 5975 5976| 类型 | 说明 | 5977| ---------------- | ----------------------------------------- | 5978| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 5979 5980**示例:** 5981 5982```ts 5983// xxx.ets 5984import web_webview from '@ohos.web.webview' 5985import business_error from '@ohos.base' 5986 5987@Entry 5988@Component 5989struct WebComponent { 5990 controller: web_webview.WebviewController = new web_webview.WebviewController(); 5991 5992 build() { 5993 Column() { 5994 Button('saveCookieAsync') 5995 .onClick(() => { 5996 try { 5997 web_webview.WebCookieManager.saveCookieAsync() 5998 .then(() => { 5999 console.log("saveCookieAsyncCallback success!"); 6000 }) 6001 .catch((error:business_error.BusinessError) => { 6002 console.error("error: " + error); 6003 }); 6004 } catch (error) { 6005 let e:business_error.BusinessError = error as business_error.BusinessError; 6006 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6007 } 6008 }) 6009 Web({ src: 'www.example.com', controller: this.controller }) 6010 } 6011 } 6012} 6013``` 6014 6015### putAcceptCookieEnabled 6016 6017static putAcceptCookieEnabled(accept: boolean): void 6018 6019设置WebCookieManager实例是否拥有发送和接收cookie的权限。 6020 6021**系统能力:** SystemCapability.Web.Webview.Core 6022 6023**参数:** 6024 6025| 参数名 | 类型 | 必填 | 说明 | 6026| ------ | ------- | ---- | :----------------------------------- | 6027| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限,默认为true。 | 6028 6029**示例:** 6030 6031```ts 6032// xxx.ets 6033import web_webview from '@ohos.web.webview' 6034import business_error from '@ohos.base' 6035 6036@Entry 6037@Component 6038struct WebComponent { 6039 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6040 6041 build() { 6042 Column() { 6043 Button('putAcceptCookieEnabled') 6044 .onClick(() => { 6045 try { 6046 web_webview.WebCookieManager.putAcceptCookieEnabled(false); 6047 } catch (error) { 6048 let e:business_error.BusinessError = error as business_error.BusinessError; 6049 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6050 } 6051 }) 6052 Web({ src: 'www.example.com', controller: this.controller }) 6053 } 6054 } 6055} 6056``` 6057 6058### isCookieAllowed 6059 6060static isCookieAllowed(): boolean 6061 6062获取WebCookieManager实例是否拥有发送和接收cookie的权限。 6063 6064**系统能力:** SystemCapability.Web.Webview.Core 6065 6066**返回值:** 6067 6068| 类型 | 说明 | 6069| ------- | -------------------------------- | 6070| boolean | 是否拥有发送和接收cookie的权限,默认为true。 | 6071 6072**示例:** 6073 6074```ts 6075// xxx.ets 6076import web_webview from '@ohos.web.webview' 6077 6078@Entry 6079@Component 6080struct WebComponent { 6081 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6082 6083 build() { 6084 Column() { 6085 Button('isCookieAllowed') 6086 .onClick(() => { 6087 let result = web_webview.WebCookieManager.isCookieAllowed(); 6088 console.log("result: " + result); 6089 }) 6090 Web({ src: 'www.example.com', controller: this.controller }) 6091 } 6092 } 6093} 6094``` 6095 6096### putAcceptThirdPartyCookieEnabled 6097 6098static putAcceptThirdPartyCookieEnabled(accept: boolean): void 6099 6100设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 6101 6102**系统能力:** SystemCapability.Web.Webview.Core 6103 6104**参数:** 6105 6106| 参数名 | 类型 | 必填 | 说明 | 6107| ------ | ------- | ---- | :----------------------------------------- | 6108| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 | 6109 6110**示例:** 6111 6112```ts 6113// xxx.ets 6114import web_webview from '@ohos.web.webview' 6115import business_error from '@ohos.base' 6116 6117@Entry 6118@Component 6119struct WebComponent { 6120 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6121 6122 build() { 6123 Column() { 6124 Button('putAcceptThirdPartyCookieEnabled') 6125 .onClick(() => { 6126 try { 6127 web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 6128 } catch (error) { 6129 let e:business_error.BusinessError = error as business_error.BusinessError; 6130 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6131 } 6132 }) 6133 Web({ src: 'www.example.com', controller: this.controller }) 6134 } 6135 } 6136} 6137``` 6138 6139### isThirdPartyCookieAllowed 6140 6141static isThirdPartyCookieAllowed(): boolean 6142 6143获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 6144 6145**系统能力:** SystemCapability.Web.Webview.Core 6146 6147**返回值:** 6148 6149| 类型 | 说明 | 6150| ------- | -------------------------------------- | 6151| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 | 6152 6153**示例:** 6154 6155```ts 6156// xxx.ets 6157import web_webview from '@ohos.web.webview' 6158 6159@Entry 6160@Component 6161struct WebComponent { 6162 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6163 6164 build() { 6165 Column() { 6166 Button('isThirdPartyCookieAllowed') 6167 .onClick(() => { 6168 let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed(); 6169 console.log("result: " + result); 6170 }) 6171 Web({ src: 'www.example.com', controller: this.controller }) 6172 } 6173 } 6174} 6175``` 6176 6177### existCookie 6178 6179static existCookie(incognito?: boolean): boolean 6180 6181获取是否存在cookie。 6182 6183**系统能力:** SystemCapability.Web.Webview.Core 6184 6185**参数:** 6186 6187| 参数名 | 类型 | 必填 | 说明 | 6188| ------ | ------- | ---- | :----------------------------------------- | 6189| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 | 6190 6191**返回值:** 6192 6193| 类型 | 说明 | 6194| ------- | -------------------------------------- | 6195| boolean | true表示存在cookie,false表示不存在cookie。 | 6196 6197**示例:** 6198 6199```ts 6200// xxx.ets 6201import web_webview from '@ohos.web.webview' 6202 6203@Entry 6204@Component 6205struct WebComponent { 6206 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6207 6208 build() { 6209 Column() { 6210 Button('existCookie') 6211 .onClick(() => { 6212 let result = web_webview.WebCookieManager.existCookie(); 6213 console.log("result: " + result); 6214 }) 6215 Web({ src: 'www.example.com', controller: this.controller }) 6216 } 6217 } 6218} 6219``` 6220 6221### deleteEntireCookie<sup>(deprecated)</sup> 6222 6223static deleteEntireCookie(): void 6224 6225清除所有cookie。 6226 6227> **说明:** 6228> 6229> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代 6230 6231**系统能力:** SystemCapability.Web.Webview.Core 6232 6233**示例:** 6234 6235```ts 6236// xxx.ets 6237import web_webview from '@ohos.web.webview' 6238 6239@Entry 6240@Component 6241struct WebComponent { 6242 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6243 6244 build() { 6245 Column() { 6246 Button('deleteEntireCookie') 6247 .onClick(() => { 6248 web_webview.WebCookieManager.deleteEntireCookie(); 6249 }) 6250 Web({ src: 'www.example.com', controller: this.controller }) 6251 } 6252 } 6253} 6254``` 6255 6256### clearAllCookiesSync<sup>11+</sup> 6257 6258static clearAllCookiesSync(incognito?: boolean): void 6259 6260清除所有cookie。 6261 6262**系统能力:** SystemCapability.Web.Webview.Core 6263 6264**参数:** 6265 6266| 参数名 | 类型 | 必填 | 说明 | 6267| ------ | ------- | ---- | :----------------------------------------- | 6268| incognito | boolean | 否 | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 | 6269 6270**示例:** 6271 6272```ts 6273// xxx.ets 6274import web_webview from '@ohos.web.webview' 6275 6276@Entry 6277@Component 6278struct WebComponent { 6279 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6280 6281 build() { 6282 Column() { 6283 Button('clearAllCookiesSync') 6284 .onClick(() => { 6285 web_webview.WebCookieManager.clearAllCookiesSync(); 6286 }) 6287 Web({ src: 'www.example.com', controller: this.controller }) 6288 } 6289 } 6290} 6291``` 6292 6293### clearAllCookies<sup>11+</sup> 6294 6295static clearAllCookies(callback: AsyncCallback\<void>): void 6296 6297异步callback方式清除所有cookie。 6298 6299**系统能力:** SystemCapability.Web.Webview.Core 6300 6301**参数:** 6302 6303| 参数名 | 类型 | 必填 | 说明 | 6304| -------- | ---------------------- | ---- | :------------------------------------------------- | 6305| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有cookie是否成功。 | 6306 6307**示例:** 6308 6309```ts 6310// xxx.ets 6311import web_webview from '@ohos.web.webview' 6312import business_error from '@ohos.base' 6313 6314@Entry 6315@Component 6316struct WebComponent { 6317 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6318 6319 build() { 6320 Column() { 6321 Button('clearAllCookies') 6322 .onClick(() => { 6323 try { 6324 web_webview.WebCookieManager.clearAllCookies((error) => { 6325 if (error) { 6326 let e: business_error.BusinessError = error as business_error.BusinessError; 6327 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6328 } 6329 }) 6330 } catch (error) { 6331 let e:business_error.BusinessError = error as business_error.BusinessError; 6332 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6333 } 6334 }) 6335 Web({ src: 'www.example.com', controller: this.controller }) 6336 } 6337 } 6338} 6339``` 6340 6341### clearAllCookies<sup>11+</sup> 6342 6343static clearAllCookies(): Promise\<void> 6344 6345异步promise方式清除所有cookie。 6346 6347**系统能力:** SystemCapability.Web.Webview.Core 6348 6349**返回值:** 6350 6351| 类型 | 说明 | 6352| ---------------- | ----------------------------------------- | 6353| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 | 6354 6355**示例:** 6356 6357```ts 6358// xxx.ets 6359import web_webview from '@ohos.web.webview' 6360import business_error from '@ohos.base' 6361 6362@Entry 6363@Component 6364struct WebComponent { 6365 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6366 6367 build() { 6368 Column() { 6369 Button('clearAllCookies') 6370 .onClick(() => { 6371 try { 6372 web_webview.WebCookieManager.clearAllCookies() 6373 .then(() => { 6374 console.log("clearAllCookies success!"); 6375 }) 6376 .catch((error:business_error.BusinessError) => { 6377 console.error("error: " + error); 6378 }); 6379 } catch (error) { 6380 let e:business_error.BusinessError = error as business_error.BusinessError; 6381 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6382 } 6383 }) 6384 Web({ src: 'www.example.com', controller: this.controller }) 6385 } 6386 } 6387} 6388``` 6389 6390### deleteSessionCookie<sup>(deprecated)</sup> 6391 6392static deleteSessionCookie(): void 6393 6394清除所有会话cookie。 6395 6396> **说明:** 6397> 6398> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代 6399 6400**系统能力:** SystemCapability.Web.Webview.Core 6401 6402**示例:** 6403 6404```ts 6405// xxx.ets 6406import web_webview from '@ohos.web.webview' 6407 6408@Entry 6409@Component 6410struct WebComponent { 6411 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6412 6413 build() { 6414 Column() { 6415 Button('deleteSessionCookie') 6416 .onClick(() => { 6417 web_webview.WebCookieManager.deleteSessionCookie(); 6418 }) 6419 Web({ src: 'www.example.com', controller: this.controller }) 6420 } 6421 } 6422} 6423``` 6424 6425### clearSessionCookieSync<sup>11+</sup> 6426 6427static clearSessionCookieSync(): void 6428 6429清除所有会话cookie。 6430 6431**系统能力:** SystemCapability.Web.Webview.Core 6432 6433**示例:** 6434 6435```ts 6436// xxx.ets 6437import web_webview from '@ohos.web.webview' 6438 6439@Entry 6440@Component 6441struct WebComponent { 6442 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6443 6444 build() { 6445 Column() { 6446 Button('clearSessionCookieSync') 6447 .onClick(() => { 6448 web_webview.WebCookieManager.clearSessionCookieSync(); 6449 }) 6450 Web({ src: 'www.example.com', controller: this.controller }) 6451 } 6452 } 6453} 6454``` 6455 6456### clearSessionCookie<sup>11+</sup> 6457 6458static clearSessionCookie(callback: AsyncCallback\<void>): void 6459 6460异步callback方式清除所有会话cookie。 6461 6462**系统能力:** SystemCapability.Web.Webview.Core 6463 6464**参数:** 6465 6466| 参数名 | 类型 | 必填 | 说明 | 6467| -------- | ---------------------- | ---- | :------------------------------------------------- | 6468| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有会话cookie是否成功。 | 6469 6470**示例:** 6471 6472```ts 6473// xxx.ets 6474import web_webview from '@ohos.web.webview' 6475import business_error from '@ohos.base' 6476 6477@Entry 6478@Component 6479struct WebComponent { 6480 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6481 6482 build() { 6483 Column() { 6484 Button('clearSessionCookie') 6485 .onClick(() => { 6486 try { 6487 web_webview.WebCookieManager.clearSessionCookie((error) => { 6488 if (error) { 6489 let e: business_error.BusinessError = error as business_error.BusinessError; 6490 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6491 } 6492 }) 6493 } catch (error) { 6494 let e:business_error.BusinessError = error as business_error.BusinessError; 6495 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6496 } 6497 }) 6498 Web({ src: 'www.example.com', controller: this.controller }) 6499 } 6500 } 6501} 6502``` 6503 6504### clearSessionCookie<sup>11+</sup> 6505 6506static clearSessionCookie(): Promise\<void> 6507 6508异步promise方式清除所有会话cookie。 6509 6510**系统能力:** SystemCapability.Web.Webview.Core 6511 6512**返回值:** 6513 6514| 类型 | 说明 | 6515| ---------------- | ----------------------------------------- | 6516| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 | 6517 6518**示例:** 6519 6520```ts 6521// xxx.ets 6522import web_webview from '@ohos.web.webview' 6523import business_error from '@ohos.base' 6524 6525@Entry 6526@Component 6527struct WebComponent { 6528 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6529 6530 build() { 6531 Column() { 6532 Button('clearSessionCookie') 6533 .onClick(() => { 6534 try { 6535 web_webview.WebCookieManager.clearSessionCookie() 6536 .then(() => { 6537 console.log("clearSessionCookie success!"); 6538 }) 6539 .catch((error:business_error.BusinessError) => { 6540 console.error("error: " + error); 6541 }); 6542 } catch (error) { 6543 let e:business_error.BusinessError = error as business_error.BusinessError; 6544 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6545 } 6546 }) 6547 Web({ src: 'www.example.com', controller: this.controller }) 6548 } 6549 } 6550} 6551``` 6552 6553## WebStorage 6554 6555通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 6556 6557> **说明:** 6558> 6559> 目前调用WebStorage下的方法,都需要先加载Web组件。 6560 6561### deleteOrigin 6562 6563static deleteOrigin(origin: string): void 6564 6565清除指定源所使用的存储。 6566 6567**系统能力:** SystemCapability.Web.Webview.Core 6568 6569**参数:** 6570 6571| 参数名 | 类型 | 必填 | 说明 | 6572| ------ | ------ | ---- | ------------------------ | 6573| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 6574 6575**错误码:** 6576 6577以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6578 6579| 错误码ID | 错误信息 | 6580| -------- | ------------------------------------------------------ | 6581| 17100011 | Invalid origin. | 6582 6583**示例:** 6584 6585```ts 6586// xxx.ets 6587import web_webview from '@ohos.web.webview'; 6588import business_error from '@ohos.base'; 6589 6590@Entry 6591@Component 6592struct WebComponent { 6593 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6594 origin: string = "resource://rawfile/"; 6595 6596 build() { 6597 Column() { 6598 Button('deleteOrigin') 6599 .onClick(() => { 6600 try { 6601 web_webview.WebStorage.deleteOrigin(this.origin); 6602 } catch (error) { 6603 let e: business_error.BusinessError = error as business_error.BusinessError; 6604 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6605 } 6606 6607 }) 6608 Web({ src: $rawfile('index.html'), controller: this.controller }) 6609 .databaseAccess(true) 6610 } 6611 } 6612} 6613``` 6614 6615加载的html文件。 6616 ```html 6617 <!-- index.html --> 6618 <!DOCTYPE html> 6619 <html> 6620 <head> 6621 <meta charset="UTF-8"> 6622 <title>test</title> 6623 <script type="text/javascript"> 6624 6625 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 6626 var msg; 6627 6628 db.transaction(function(tx){ 6629 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 6630 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 6631 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 6632 6633 document.querySelector('#status').innerHTML = msg; 6634 }); 6635 6636 db.transaction(function(tx){ 6637 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 6638 var len = results.rows.length,i; 6639 msg = "<p>查询记录条数:" + len + "</p>"; 6640 6641 document.querySelector('#status').innerHTML += msg; 6642 6643 for(i = 0; i < len; i++){ 6644 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 6645 6646 document.querySelector('#status').innerHTML += msg; 6647 } 6648 },null); 6649 }); 6650 6651 </script> 6652 </head> 6653 <body> 6654 <div id="status" name="status">状态信息</div> 6655 </body> 6656 </html> 6657 ``` 6658 6659### getOrigins 6660 6661static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void 6662 6663以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 6664 6665**系统能力:** SystemCapability.Web.Webview.Core 6666 6667**参数:** 6668 6669| 参数名 | 类型 | 必填 | 说明 | 6670| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 6671| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 6672 6673**错误码:** 6674 6675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6676 6677| 错误码ID | 错误信息 | 6678| -------- | ------------------------------------------------------ | 6679| 17100012 | Invalid web storage origin. | 6680 6681**示例:** 6682 6683```ts 6684// xxx.ets 6685import web_webview from '@ohos.web.webview'; 6686import business_error from '@ohos.base'; 6687 6688@Entry 6689@Component 6690struct WebComponent { 6691 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6692 6693 build() { 6694 Column() { 6695 Button('getOrigins') 6696 .onClick(() => { 6697 try { 6698 web_webview.WebStorage.getOrigins((error, origins) => { 6699 if (error) { 6700 let e: business_error.BusinessError = error as business_error.BusinessError; 6701 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6702 return; 6703 } 6704 for (let i = 0; i < origins.length; i++) { 6705 console.log('origin: ' + origins[i].origin); 6706 console.log('usage: ' + origins[i].usage); 6707 console.log('quota: ' + origins[i].quota); 6708 } 6709 }) 6710 } catch (error) { 6711 let e: business_error.BusinessError = error as business_error.BusinessError; 6712 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6713 } 6714 6715 }) 6716 Web({ src: $rawfile('index.html'), controller: this.controller }) 6717 .databaseAccess(true) 6718 } 6719 } 6720} 6721``` 6722 6723加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 6724 6725### getOrigins 6726 6727static getOrigins(): Promise\<Array\<WebStorageOrigin>> 6728 6729以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 6730 6731**系统能力:** SystemCapability.Web.Webview.Core 6732 6733**返回值:** 6734 6735| 类型 | 说明 | 6736| -------------------------------- | ------------------------------------------------------------ | 6737| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 6738 6739**错误码:** 6740 6741以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6742 6743| 错误码ID | 错误信息 | 6744| -------- | ------------------------------------------------------ | 6745| 17100012 | Invalid web storage origin. | 6746 6747**示例:** 6748 6749```ts 6750// xxx.ets 6751import web_webview from '@ohos.web.webview'; 6752import business_error from '@ohos.base'; 6753 6754@Entry 6755@Component 6756struct WebComponent { 6757 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6758 6759 build() { 6760 Column() { 6761 Button('getOrigins') 6762 .onClick(() => { 6763 try { 6764 web_webview.WebStorage.getOrigins() 6765 .then(origins => { 6766 for (let i = 0; i < origins.length; i++) { 6767 console.log('origin: ' + origins[i].origin); 6768 console.log('usage: ' + origins[i].usage); 6769 console.log('quota: ' + origins[i].quota); 6770 } 6771 }) 6772 .catch((e : business_error.BusinessError) => { 6773 console.log('error: ' + JSON.stringify(e)); 6774 }) 6775 } catch (error) { 6776 let e: business_error.BusinessError = error as business_error.BusinessError; 6777 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6778 } 6779 6780 }) 6781 Web({ src: $rawfile('index.html'), controller: this.controller }) 6782 .databaseAccess(true) 6783 } 6784 } 6785} 6786``` 6787 6788加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 6789 6790### getOriginQuota 6791 6792static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void 6793 6794使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 6795 6796**系统能力:** SystemCapability.Web.Webview.Core 6797 6798**参数:** 6799 6800| 参数名 | 类型 | 必填 | 说明 | 6801| -------- | --------------------- | ---- | ------------------ | 6802| origin | string | 是 | 指定源的字符串索引 | 6803| callback | AsyncCallback\<number> | 是 | 指定源的存储配额 | 6804 6805**错误码:** 6806 6807以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6808 6809| 错误码ID | 错误信息 | 6810| -------- | ------------------------------------------------------ | 6811| 17100011 | Invalid origin. | 6812 6813**示例:** 6814 6815```ts 6816// xxx.ets 6817import web_webview from '@ohos.web.webview'; 6818import business_error from '@ohos.base'; 6819 6820@Entry 6821@Component 6822struct WebComponent { 6823 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6824 origin: string = "resource://rawfile/"; 6825 6826 build() { 6827 Column() { 6828 Button('getOriginQuota') 6829 .onClick(() => { 6830 try { 6831 web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 6832 if (error) { 6833 let e: business_error.BusinessError = error as business_error.BusinessError; 6834 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6835 return; 6836 } 6837 console.log('quota: ' + quota); 6838 }) 6839 } catch (error) { 6840 let e: business_error.BusinessError = error as business_error.BusinessError; 6841 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6842 } 6843 6844 }) 6845 Web({ src: $rawfile('index.html'), controller: this.controller }) 6846 .databaseAccess(true) 6847 } 6848 } 6849} 6850``` 6851 6852加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 6853 6854### getOriginQuota 6855 6856static getOriginQuota(origin: string): Promise\<number> 6857 6858以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 6859 6860**系统能力:** SystemCapability.Web.Webview.Core 6861 6862**参数:** 6863 6864| 参数名 | 类型 | 必填 | 说明 | 6865| ------ | ------ | ---- | ------------------ | 6866| origin | string | 是 | 指定源的字符串索引 | 6867 6868**返回值:** 6869 6870| 类型 | 说明 | 6871| --------------- | --------------------------------------- | 6872| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 6873 6874**错误码:** 6875 6876以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6877 6878| 错误码ID | 错误信息 | 6879| -------- | ------------------------------------------------------ | 6880| 17100011 | Invalid origin. | 6881 6882**示例:** 6883 6884```ts 6885// xxx.ets 6886import web_webview from '@ohos.web.webview'; 6887import business_error from '@ohos.base'; 6888 6889@Entry 6890@Component 6891struct WebComponent { 6892 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6893 origin: string = "resource://rawfile/"; 6894 6895 build() { 6896 Column() { 6897 Button('getOriginQuota') 6898 .onClick(() => { 6899 try { 6900 web_webview.WebStorage.getOriginQuota(this.origin) 6901 .then(quota => { 6902 console.log('quota: ' + quota); 6903 }) 6904 .catch((e : business_error.BusinessError) => { 6905 console.log('error: ' + JSON.stringify(e)); 6906 }) 6907 } catch (error) { 6908 let e: business_error.BusinessError = error as business_error.BusinessError; 6909 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6910 } 6911 6912 }) 6913 Web({ src: $rawfile('index.html'), controller: this.controller }) 6914 .databaseAccess(true) 6915 } 6916 } 6917} 6918``` 6919 6920加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 6921 6922### getOriginUsage 6923 6924static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void 6925 6926以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 6927 6928**系统能力:** SystemCapability.Web.Webview.Core 6929 6930**参数:** 6931 6932| 参数名 | 类型 | 必填 | 说明 | 6933| -------- | --------------------- | ---- | ------------------ | 6934| origin | string | 是 | 指定源的字符串索引 | 6935| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 6936 6937**错误码:** 6938 6939以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6940 6941| 错误码ID | 错误信息 | 6942| -------- | ------------------------------------------------------ | 6943| 17100011 | Invalid origin. | 6944 6945**示例:** 6946 6947```ts 6948// xxx.ets 6949import web_webview from '@ohos.web.webview'; 6950import business_error from '@ohos.base'; 6951 6952@Entry 6953@Component 6954struct WebComponent { 6955 controller: web_webview.WebviewController = new web_webview.WebviewController(); 6956 origin: string = "resource://rawfile/"; 6957 6958 build() { 6959 Column() { 6960 Button('getOriginUsage') 6961 .onClick(() => { 6962 try { 6963 web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 6964 if (error) { 6965 let e: business_error.BusinessError = error as business_error.BusinessError; 6966 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6967 return; 6968 } 6969 console.log('usage: ' + usage); 6970 }) 6971 } catch (error) { 6972 let e: business_error.BusinessError = error as business_error.BusinessError; 6973 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 6974 } 6975 6976 }) 6977 Web({ src: $rawfile('index.html'), controller: this.controller }) 6978 .databaseAccess(true) 6979 } 6980 } 6981} 6982``` 6983 6984加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 6985 6986### getOriginUsage 6987 6988static getOriginUsage(origin: string): Promise\<number> 6989 6990以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 6991 6992**系统能力:** SystemCapability.Web.Webview.Core 6993 6994**参数:** 6995 6996| 参数名 | 类型 | 必填 | 说明 | 6997| ------ | ------ | ---- | ------------------ | 6998| origin | string | 是 | 指定源的字符串索引 | 6999 7000**返回值:** 7001 7002| 类型 | 说明 | 7003| --------------- | ------------------------------------- | 7004| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 7005 7006**错误码:** 7007 7008以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7009 7010| 错误码ID | 错误信息 | 7011| -------- | ----------------------------------------------------- | 7012| 17100011 | Invalid origin. | 7013 7014**示例:** 7015 7016```ts 7017// xxx.ets 7018import web_webview from '@ohos.web.webview'; 7019import business_error from '@ohos.base'; 7020 7021@Entry 7022@Component 7023struct WebComponent { 7024 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7025 origin: string = "resource://rawfile/"; 7026 7027 build() { 7028 Column() { 7029 Button('getOriginUsage') 7030 .onClick(() => { 7031 try { 7032 web_webview.WebStorage.getOriginUsage(this.origin) 7033 .then(usage => { 7034 console.log('usage: ' + usage); 7035 }) 7036 .catch((e : business_error.BusinessError) => { 7037 console.log('error: ' + JSON.stringify(e)); 7038 }) 7039 } catch (error) { 7040 let e: business_error.BusinessError = error as business_error.BusinessError; 7041 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7042 } 7043 7044 }) 7045 Web({ src: $rawfile('index.html'), controller: this.controller }) 7046 .databaseAccess(true) 7047 } 7048 } 7049} 7050``` 7051 7052加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 7053 7054### deleteAllData 7055 7056static deleteAllData(incognito?: boolean): void 7057 7058清除Web SQL数据库当前使用的所有存储。 7059 7060**系统能力:** SystemCapability.Web.Webview.Core 7061 7062**参数:** 7063 7064| 参数名 | 类型 | 必填 | 说明 | 7065| ------ | ------ | ---- | ------------------ | 7066| incognito<sup>11+</sup> | boolean | 否 | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 | 7067 7068**示例:** 7069 7070```ts 7071// xxx.ets 7072import web_webview from '@ohos.web.webview'; 7073import business_error from '@ohos.base'; 7074 7075@Entry 7076@Component 7077struct WebComponent { 7078 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7079 7080 build() { 7081 Column() { 7082 Button('deleteAllData') 7083 .onClick(() => { 7084 try { 7085 web_webview.WebStorage.deleteAllData(); 7086 } catch (error) { 7087 let e: business_error.BusinessError = error as business_error.BusinessError; 7088 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7089 } 7090 }) 7091 Web({ src: $rawfile('index.html'), controller: this.controller }) 7092 .databaseAccess(true) 7093 } 7094 } 7095} 7096``` 7097 7098加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。 7099 7100## WebDataBase 7101 7102web组件数据库管理对象。 7103 7104> **说明:** 7105> 7106> 目前调用WebDataBase下的方法,都需要先加载Web组件。 7107 7108### getHttpAuthCredentials 7109 7110static getHttpAuthCredentials(host: string, realm: string): Array\<string> 7111 7112检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 7113 7114**系统能力:** SystemCapability.Web.Webview.Core 7115 7116**参数:** 7117 7118| 参数名 | 类型 | 必填 | 说明 | 7119| ------ | ------ | ---- | ---------------------------- | 7120| host | string | 是 | HTTP身份验证凭据应用的主机。 | 7121| realm | string | 是 | HTTP身份验证凭据应用的域。 | 7122 7123**返回值:** 7124 7125| 类型 | 说明 | 7126| ----- | -------------------------------------------- | 7127| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 7128 7129**示例:** 7130 7131```ts 7132// xxx.ets 7133import web_webview from '@ohos.web.webview'; 7134import business_error from '@ohos.base'; 7135 7136@Entry 7137@Component 7138struct WebComponent { 7139 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7140 host: string = "www.spincast.org"; 7141 realm: string = "protected example"; 7142 username_password: string[] = []; 7143 7144 build() { 7145 Column() { 7146 Button('getHttpAuthCredentials') 7147 .onClick(() => { 7148 try { 7149 this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 7150 console.log('num: ' + this.username_password.length); 7151 } catch (error) { 7152 let e: business_error.BusinessError = error as business_error.BusinessError; 7153 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7154 } 7155 }) 7156 Web({ src: 'www.example.com', controller: this.controller }) 7157 } 7158 } 7159} 7160``` 7161 7162### saveHttpAuthCredentials 7163 7164static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 7165 7166保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 7167 7168**系统能力:** SystemCapability.Web.Webview.Core 7169 7170**参数:** 7171 7172| 参数名 | 类型 | 必填 | 说明 | 7173| -------- | ------ | ---- | ---------------------------- | 7174| host | string | 是 | HTTP身份验证凭据应用的主机。 | 7175| realm | string | 是 | HTTP身份验证凭据应用的域。 | 7176| username | string | 是 | 用户名。 | 7177| password | string | 是 | 密码。 | 7178 7179**示例:** 7180 7181```ts 7182// xxx.ets 7183import web_webview from '@ohos.web.webview'; 7184import business_error from '@ohos.base'; 7185 7186@Entry 7187@Component 7188struct WebComponent { 7189 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7190 host: string = "www.spincast.org"; 7191 realm: string = "protected example"; 7192 7193 build() { 7194 Column() { 7195 Button('saveHttpAuthCredentials') 7196 .onClick(() => { 7197 try { 7198 web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 7199 } catch (error) { 7200 let e: business_error.BusinessError = error as business_error.BusinessError; 7201 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7202 } 7203 }) 7204 Web({ src: 'www.example.com', controller: this.controller }) 7205 } 7206 } 7207} 7208``` 7209 7210### existHttpAuthCredentials 7211 7212static existHttpAuthCredentials(): boolean 7213 7214判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 7215 7216**系统能力:** SystemCapability.Web.Webview.Core 7217 7218**返回值:** 7219 7220| 类型 | 说明 | 7221| ------- | ------------------------------------------------------------ | 7222| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 7223 7224**示例:** 7225 7226```ts 7227// xxx.ets 7228import web_webview from '@ohos.web.webview'; 7229import business_error from '@ohos.base'; 7230 7231@Entry 7232@Component 7233struct WebComponent { 7234 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7235 7236 build() { 7237 Column() { 7238 Button('existHttpAuthCredentials') 7239 .onClick(() => { 7240 try { 7241 let result = web_webview.WebDataBase.existHttpAuthCredentials(); 7242 } catch (error) { 7243 let e: business_error.BusinessError = error as business_error.BusinessError; 7244 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7245 } 7246 }) 7247 Web({ src: 'www.example.com', controller: this.controller }) 7248 } 7249 } 7250} 7251``` 7252 7253### deleteHttpAuthCredentials 7254 7255static deleteHttpAuthCredentials(): void 7256 7257清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 7258 7259**系统能力:** SystemCapability.Web.Webview.Core 7260 7261**示例:** 7262 7263```ts 7264// xxx.ets 7265import web_webview from '@ohos.web.webview'; 7266import business_error from '@ohos.base'; 7267 7268@Entry 7269@Component 7270struct WebComponent { 7271 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7272 7273 build() { 7274 Column() { 7275 Button('deleteHttpAuthCredentials') 7276 .onClick(() => { 7277 try { 7278 web_webview.WebDataBase.deleteHttpAuthCredentials(); 7279 } catch (error) { 7280 let e: business_error.BusinessError = error as business_error.BusinessError; 7281 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7282 } 7283 }) 7284 Web({ src: 'www.example.com', controller: this.controller }) 7285 } 7286 } 7287} 7288``` 7289 7290## GeolocationPermissions 7291 7292web组件地理位置权限管理对象。 7293 7294> **说明:** 7295> 7296> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。 7297 7298### 需要权限 7299 7300访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。 7301 7302### allowGeolocation 7303 7304static allowGeolocation(origin: string, incognito?: boolean): void 7305 7306允许指定来源使用地理位置接口。 7307 7308**系统能力:** SystemCapability.Web.Webview.Core 7309 7310**参数:** 7311 7312| 参数名 | 类型 | 必填 | 说明 | 7313| ------ | ------ | ---- | ------------------ | 7314| origin | string | 是 |指定源的字符串索引 | 7315| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 | 7316 7317**错误码:** 7318 7319以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7320 7321| 错误码ID | 错误信息 | 7322| -------- | ------------------------------------------------------ | 7323| 17100011 | Invalid origin. | 7324 7325**示例:** 7326 7327```ts 7328// xxx.ets 7329import web_webview from '@ohos.web.webview'; 7330import business_error from '@ohos.base'; 7331 7332@Entry 7333@Component 7334struct WebComponent { 7335 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7336 origin: string = "file:///"; 7337 7338 build() { 7339 Column() { 7340 Button('allowGeolocation') 7341 .onClick(() => { 7342 try { 7343 web_webview.GeolocationPermissions.allowGeolocation(this.origin); 7344 } catch (error) { 7345 let e: business_error.BusinessError = error as business_error.BusinessError; 7346 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7347 } 7348 }) 7349 Web({ src: 'www.example.com', controller: this.controller }) 7350 } 7351 } 7352} 7353``` 7354 7355### deleteGeolocation 7356 7357static deleteGeolocation(origin: string, incognito?: boolean): void 7358 7359清除指定来源的地理位置权限状态。 7360 7361**系统能力:** SystemCapability.Web.Webview.Core 7362 7363**参数:** 7364 7365| 参数名 | 类型 | 必填 | 说明 | 7366| ------ | ------ | ---- | ------------------ | 7367| origin | string | 是 | 指定源的字符串索引 | 7368| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 | 7369 7370**错误码:** 7371 7372以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7373 7374| 错误码ID | 错误信息 | 7375| -------- | ------------------------------------------------------ | 7376| 17100011 | Invalid origin. | 7377 7378**示例:** 7379 7380```ts 7381// xxx.ets 7382import web_webview from '@ohos.web.webview'; 7383import business_error from '@ohos.base'; 7384 7385@Entry 7386@Component 7387struct WebComponent { 7388 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7389 origin: string = "file:///"; 7390 7391 build() { 7392 Column() { 7393 Button('deleteGeolocation') 7394 .onClick(() => { 7395 try { 7396 web_webview.GeolocationPermissions.deleteGeolocation(this.origin); 7397 } catch (error) { 7398 let e: business_error.BusinessError = error as business_error.BusinessError; 7399 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7400 } 7401 }) 7402 Web({ src: 'www.example.com', controller: this.controller }) 7403 } 7404 } 7405} 7406``` 7407 7408### getAccessibleGeolocation 7409 7410static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void 7411 7412以回调方式异步获取指定源的地理位置权限状态。 7413 7414**系统能力:** SystemCapability.Web.Webview.Core 7415 7416**参数:** 7417 7418| 参数名 | 类型 | 必填 | 说明 | 7419| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 7420| origin | string | 是 | 指定源的字符串索引 | 7421| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 7422| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 | 7423 7424**错误码:** 7425 7426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7427 7428| 错误码ID | 错误信息 | 7429| -------- | ------------------------------------------------------ | 7430| 17100011 | Invalid origin. | 7431 7432**示例:** 7433 7434```ts 7435// xxx.ets 7436import web_webview from '@ohos.web.webview'; 7437import business_error from '@ohos.base'; 7438 7439@Entry 7440@Component 7441struct WebComponent { 7442 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7443 origin: string = "file:///"; 7444 7445 build() { 7446 Column() { 7447 Button('getAccessibleGeolocation') 7448 .onClick(() => { 7449 try { 7450 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 7451 if (error) { 7452 let e: business_error.BusinessError = error as business_error.BusinessError; 7453 console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${e.code}, Message: ${e.message}`); 7454 return; 7455 } 7456 console.log('getAccessibleGeolocationAsync result: ' + result); 7457 }); 7458 } catch (error) { 7459 let e: business_error.BusinessError = error as business_error.BusinessError; 7460 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7461 } 7462 }) 7463 Web({ src: 'www.example.com', controller: this.controller }) 7464 } 7465 } 7466} 7467``` 7468 7469### getAccessibleGeolocation 7470 7471static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean> 7472 7473以Promise方式异步获取指定源的地理位置权限状态。 7474 7475**系统能力:** SystemCapability.Web.Webview.Core 7476 7477**参数:** 7478 7479| 参数名 | 类型 | 必填 | 说明 | 7480| ------ | -------- | ---- | -------------------- | 7481| origin | string | 是 | 指定源的字符串索引。 | 7482| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 | 7483 7484**返回值:** 7485 7486| 类型 | 说明 | 7487| ---------------- | ------------------------------------------------------------ | 7488| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 7489 7490**错误码:** 7491 7492以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7493 7494| 错误码ID | 错误信息 | 7495| -------- | ------------------------------------------------------ | 7496| 17100011 | Invalid origin. | 7497 7498**示例:** 7499 7500```ts 7501// xxx.ets 7502import web_webview from '@ohos.web.webview'; 7503import business_error from '@ohos.base'; 7504 7505@Entry 7506@Component 7507struct WebComponent { 7508 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7509 origin: string = "file:///"; 7510 7511 build() { 7512 Column() { 7513 Button('getAccessibleGeolocation') 7514 .onClick(() => { 7515 try { 7516 web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 7517 .then(result => { 7518 console.log('getAccessibleGeolocationPromise result: ' + result); 7519 }).catch((error : business_error.BusinessError) => { 7520 console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 7521 }); 7522 } catch (error) { 7523 let e: business_error.BusinessError = error as business_error.BusinessError; 7524 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7525 } 7526 }) 7527 Web({ src: 'www.example.com', controller: this.controller }) 7528 } 7529 } 7530} 7531``` 7532 7533### getStoredGeolocation 7534 7535static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void 7536 7537以回调方式异步获取已存储地理位置权限状态的所有源信息。 7538 7539**系统能力:** SystemCapability.Web.Webview.Core 7540 7541**参数:** 7542 7543| 参数名 | 类型 | 必填 | 说明 | 7544| -------- | ---------------------------- | ---- | ---------------------------------------- | 7545| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 7546| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 | 7547 7548**示例:** 7549 7550```ts 7551// xxx.ets 7552import web_webview from '@ohos.web.webview'; 7553import business_error from '@ohos.base'; 7554 7555@Entry 7556@Component 7557struct WebComponent { 7558 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7559 7560 build() { 7561 Column() { 7562 Button('getStoredGeolocation') 7563 .onClick(() => { 7564 try { 7565 web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 7566 if (error) { 7567 let e: business_error.BusinessError = error as business_error.BusinessError; 7568 console.error(`getStoredGeolocationAsync error, ErrorCode: ${e.code}, Message: ${e.message}`); 7569 return; 7570 } 7571 let origins_str: string = origins.join(); 7572 console.log('getStoredGeolocationAsync origins: ' + origins_str); 7573 }); 7574 } catch (error) { 7575 let e: business_error.BusinessError = error as business_error.BusinessError; 7576 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7577 } 7578 }) 7579 Web({ src: 'www.example.com', controller: this.controller }) 7580 } 7581 } 7582} 7583``` 7584 7585### getStoredGeolocation 7586 7587static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>> 7588 7589以Promise方式异步获取已存储地理位置权限状态的所有源信息。 7590 7591**系统能力:** SystemCapability.Web.Webview.Core 7592 7593**参数:** 7594 7595| 参数名 | 类型 | 必填 | 说明 | 7596| -------- | ---------------------------- | ---- | ---------------------------------------- | 7597| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 | 7598 7599**返回值:** 7600 7601| 类型 | 说明 | 7602| ---------------------- | --------------------------------------------------------- | 7603| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 7604 7605**示例:** 7606 7607```ts 7608// xxx.ets 7609import web_webview from '@ohos.web.webview'; 7610import business_error from '@ohos.base'; 7611 7612@Entry 7613@Component 7614struct WebComponent { 7615 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7616 7617 build() { 7618 Column() { 7619 Button('getStoredGeolocation') 7620 .onClick(() => { 7621 try { 7622 web_webview.GeolocationPermissions.getStoredGeolocation() 7623 .then(origins => { 7624 let origins_str: string = origins.join(); 7625 console.log('getStoredGeolocationPromise origins: ' + origins_str); 7626 }).catch((error : business_error.BusinessError) => { 7627 console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 7628 }); 7629 } catch (error) { 7630 let e: business_error.BusinessError = error as business_error.BusinessError; 7631 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7632 } 7633 }) 7634 Web({ src: 'www.example.com', controller: this.controller }) 7635 } 7636 } 7637} 7638``` 7639 7640### deleteAllGeolocation 7641 7642static deleteAllGeolocation(incognito?: boolean): void 7643 7644清除所有来源的地理位置权限状态。 7645 7646**系统能力:** SystemCapability.Web.Webview.Core 7647 7648**参数:** 7649 7650| 参数名 | 类型 | 必填 | 说明 | 7651| -------- | ---------------------------- | ---- | ---------------------------------------- | 7652| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 | 7653 7654**示例:** 7655 7656```ts 7657// xxx.ets 7658import web_webview from '@ohos.web.webview'; 7659import business_error from '@ohos.base'; 7660 7661@Entry 7662@Component 7663struct WebComponent { 7664 controller: web_webview.WebviewController = new web_webview.WebviewController(); 7665 7666 build() { 7667 Column() { 7668 Button('deleteAllGeolocation') 7669 .onClick(() => { 7670 try { 7671 web_webview.GeolocationPermissions.deleteAllGeolocation(); 7672 } catch (error) { 7673 let e: business_error.BusinessError = error as business_error.BusinessError; 7674 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 7675 } 7676 }) 7677 Web({ src: 'www.example.com', controller: this.controller }) 7678 } 7679 } 7680} 7681``` 7682## WebHeader 7683 7684Web组件返回的请求/响应头对象。 7685 7686**系统能力:** SystemCapability.Web.Webview.Core 7687 7688| 名称 | 类型 | 可读 | 可写 |说明 | 7689| ----------- | ------ | -----|------|------------------- | 7690| headerKey | string | 是 | 是 | 请求/响应头的key。 | 7691| headerValue | string | 是 | 是 | 请求/响应头的value。 | 7692 7693## WebHitTestType 7694 7695[getHitTest](#gethittest)接口用于指示游标节点。 7696 7697**系统能力:** SystemCapability.Web.Webview.Core 7698 7699| 名称 | 值 | 说明 | 7700| ------------- | -- |----------------------------------------- | 7701| EditText | 0 |可编辑的区域。 | 7702| Email | 1 |电子邮件地址。 | 7703| HttpAnchor | 2 |超链接,其中src为http。 | 7704| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 | 7705| Img | 4 |HTML::img标签。 | 7706| Map | 5 |地理地址。 | 7707| Phone | 6 |电话号码。 | 7708| Unknown | 7 |未知内容。 | 7709 7710## SecurityLevel<sup>11+</sup> 7711 7712当前网页的安全级别。 7713 7714**系统能力:** SystemCapability.Web.Webview.Core 7715 7716| 名称 | 值 | 说明 | 7717| ------------- | -- |----------------------------------------- | 7718| NONE | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。| 7719| SECURE | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。| 7720| WARNING | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。| 7721| DANGEROUS | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 | 7722 7723## HitTestValue 7724 7725提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。 7726 7727**系统能力:** SystemCapability.Web.Webview.Core 7728 7729| 名称 | 类型 | 可读 | 可写 | 说明| 7730| ---- | ---- | ---- | ---- |---- | 7731| type | [WebHitTestType](#webhittesttype) | 是 | 否 | 当前被点击区域的元素类型。| 7732| extra | string | 是 | 否 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 7733 7734## WebMessage 7735 7736用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 7737 7738**系统能力:** SystemCapability.Web.Webview.Core 7739 7740| 类型 | 说明 | 7741| -------- | -------------------------------------- | 7742| string | 字符串类型数据。 | 7743| ArrayBuffer | 二进制类型数据。 | 7744 7745## JsMessageType<sup>10+</sup> 7746 7747[runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 7748 7749**系统能力:** SystemCapability.Web.Webview.Core 7750 7751| 名称 | 值 | 说明 | 7752| ------------ | -- |--------------------------------- | 7753| NOT_SUPPORT | 0 |不支持的数据类型。| 7754| STRING | 1 |字符串类型。| 7755| NUMBER | 2 |数值类型。| 7756| BOOLEAN | 3 |布尔类型。| 7757| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 7758| ARRAY | 5 |数组类型| 7759 7760## WebMessageType<sup>10+</sup> 7761 7762[webMessagePort](#webmessageport)接口所支持的数据类型。 7763 7764**系统能力:** SystemCapability.Web.Webview.Core 7765 7766| 名称 | 值 | 说明 | 7767| ------------ | -- |------------------------------- | 7768| NOT_SUPPORT | 0 |不支持的数据类型。| 7769| STRING | 1 |字符串类型。| 7770| NUMBER | 2 |数值类型。| 7771| BOOLEAN | 3 |布尔类型。| 7772| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 7773| ARRAY | 5 |数组类型。| 7774| ERROR | 6 |错误类型。| 7775 7776## JsMessageExt<sup>10+</sup> 7777 7778[runJavaScirptExt](#runjavascriptext10)接口执行脚本返回的数据对象。 7779 7780### getType<sup>10+</sup> 7781 7782getType(): JsMessageType 7783 7784获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7785 7786**系统能力:** SystemCapability.Web.Webview.Core 7787 7788**返回值:** 7789 7790| 类型 | 说明 | 7791| --------------| --------------------------------------------------------- | 7792| [JsMessageType](#jsmessagetype10) | [runJavaScirptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 | 7793 7794### getString<sup>10+</sup> 7795 7796getString(): string 7797 7798获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7799 7800**系统能力:** SystemCapability.Web.Webview.Core 7801 7802**返回值:** 7803 7804| 类型 | 说明 | 7805| --------------| ------------- | 7806| string | 返回字符串类型的数据。 | 7807 7808**错误码:** 7809 7810以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7811 7812| 错误码ID | 错误信息 | 7813| -------- | ------------------------------------- | 7814| 17100014 | The type does not match with the value of the result. | 7815 7816### getNumber<sup>10+</sup> 7817 7818getNumber(): number 7819 7820获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7821 7822**系统能力:** SystemCapability.Web.Webview.Core 7823 7824**返回值:** 7825 7826| 类型 | 说明 | 7827| --------------| ------------- | 7828| number | 返回数值类型的数据。 | 7829 7830**错误码:** 7831 7832以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7833 7834| 错误码ID | 错误信息 | 7835| -------- | ------------------------------------- | 7836| 17100014 | The type does not match with the value of the result. | 7837 7838### getBoolean<sup>10+</sup> 7839 7840getBoolean(): boolean 7841 7842获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7843 7844**系统能力:** SystemCapability.Web.Webview.Core 7845 7846**返回值:** 7847 7848| 类型 | 说明 | 7849| --------------| ------------- | 7850| boolean | 返回布尔类型的数据。 | 7851 7852**错误码:** 7853 7854以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7855 7856| 错误码ID | 错误信息 | 7857| -------- | ------------------------------------- | 7858| 17100014 | The type does not match with the value of the result. | 7859 7860### getArrayBuffer<sup>10+</sup> 7861 7862getArrayBuffer(): ArrayBuffer 7863 7864获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7865 7866**系统能力:** SystemCapability.Web.Webview.Core 7867 7868**返回值:** 7869 7870| 类型 | 说明 | 7871| --------------| ------------- | 7872| ArrayBuffer | 返回原始二进制数据。 | 7873 7874**错误码:** 7875 7876以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7877 7878| 错误码ID | 错误信息 | 7879| -------- | ------------------------------------- | 7880| 17100014 | The type does not match with the value of the result. | 7881 7882### getArray<sup>10+</sup> 7883 7884getArray(): Array\<string | number | boolean\> 7885 7886获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 7887 7888**系统能力:** SystemCapability.Web.Webview.Core 7889 7890**返回值:** 7891 7892| 类型 | 说明 | 7893| --------------| ------------- | 7894| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 7895 7896**错误码:** 7897 7898以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7899 7900| 错误码ID | 错误信息 | 7901| -------- | ------------------------------------- | 7902| 17100014 | The type does not match with the value of the result. | 7903 7904## WebMessageExt<sup>10+</sup> 7905 7906[webMessagePort](#webmessageport)接口接收、发送的的数据对象。 7907 7908### getType<sup>10+</sup> 7909 7910getType(): WebMessageType 7911 7912获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 7913 7914**系统能力:** SystemCapability.Web.Webview.Core 7915 7916**返回值:** 7917 7918| 类型 | 说明 | 7919| --------------| --------------------------------------------------------- | 7920| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 7921 7922### getString<sup>10+</sup> 7923 7924getString(): string 7925 7926获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 7927 7928**系统能力:** SystemCapability.Web.Webview.Core 7929 7930**返回值:** 7931 7932| 类型 | 说明 | 7933| --------------| ------------- | 7934| string | 返回字符串类型的数据。 | 7935 7936**错误码:** 7937 7938以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7939 7940| 错误码ID | 错误信息 | 7941| -------- | ------------------------------------- | 7942| 17100014 | The type does not match with the value of the web message. | 7943 7944### getNumber<sup>10+</sup> 7945 7946getNumber(): number 7947 7948获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 7949 7950**系统能力:** SystemCapability.Web.Webview.Core 7951 7952**返回值:** 7953 7954| 类型 | 说明 | 7955| --------------| ------------- | 7956| number | 返回数值类型的数据。 | 7957 7958**错误码:** 7959 7960以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7961 7962| 错误码ID | 错误信息 | 7963| -------- | ------------------------------------- | 7964| 17100014 | The type does not match with the value of the web message. | 7965 7966### getBoolean<sup>10+</sup> 7967 7968getBoolean(): boolean 7969 7970获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 7971 7972**系统能力:** SystemCapability.Web.Webview.Core 7973 7974**返回值:** 7975 7976| 类型 | 说明 | 7977| --------------| ------------- | 7978| boolean | 返回布尔类型的数据。 | 7979 7980**错误码:** 7981 7982以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7983 7984| 错误码ID | 错误信息 | 7985| -------- | ------------------------------------- | 7986| 17100014 | The type does not match with the value of the web message. | 7987 7988### getArrayBuffer<sup>10+</sup> 7989 7990getArrayBuffer(): ArrayBuffer 7991 7992获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 7993 7994**系统能力:** SystemCapability.Web.Webview.Core 7995 7996**返回值:** 7997 7998| 类型 | 说明 | 7999| --------------| ------------- | 8000| ArrayBuffer | 返回原始二进制数据。 | 8001 8002**错误码:** 8003 8004以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8005 8006| 错误码ID | 错误信息 | 8007| -------- | ------------------------------------- | 8008| 17100014 | The type does not match with the value of the web message. | 8009 8010### getArray<sup>10+</sup> 8011 8012getArray(): Array\<string | number | boolean\> 8013 8014获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8015 8016**系统能力:** SystemCapability.Web.Webview.Core 8017 8018**返回值:** 8019 8020| 类型 | 说明 | 8021| --------------| ------------- | 8022| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 8023 8024**错误码:** 8025 8026以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8027 8028| 错误码ID | 错误信息 | 8029| -------- | ------------------------------------- | 8030| 17100014 | The type does not match with the value of the web message. | 8031 8032### getError<sup>10+</sup> 8033 8034getError(): Error 8035 8036获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8037 8038**系统能力:** SystemCapability.Web.Webview.Core 8039 8040**返回值:** 8041 8042| 类型 | 说明 | 8043| --------------| ------------- | 8044| Error | 返回错误对象类型的数据。 | 8045 8046**错误码:** 8047 8048以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8049 8050| 错误码ID | 错误信息 | 8051| -------- | ------------------------------------- | 8052| 17100014 | The type does not match with the value of the web message. | 8053 8054### setType<sup>10+</sup> 8055 8056setType(type: WebMessageType): void 8057 8058设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8059 8060**系统能力:** SystemCapability.Web.Webview.Core 8061 8062**参数:** 8063 8064| 参数名 | 类型 | 必填 | 说明 | 8065| ------ | ------ | ---- | ---------------------- | 8066| type | [WebMessageType](#webmessagetype10) | 是 | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 8067 8068**错误码:** 8069 8070| 错误码ID | 错误信息 | 8071| -------- | ------------------------------------- | 8072| 17100014 | The type does not match with the value of the web message. | 8073 8074### setString<sup>10+</sup> 8075 8076setString(message: string): void 8077 8078设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8079 8080**系统能力:** SystemCapability.Web.Webview.Core 8081 8082**参数:** 8083 8084| 参数名 | 类型 | 必填 | 说明 | 8085| ------ | ------ | ---- | -------------------- | 8086| message | string | 是 | 字符串类型数据。 | 8087 8088**错误码:** 8089 8090| 错误码ID | 错误信息 | 8091| -------- | ------------------------------------- | 8092| 17100014 | The type does not match with the value of the web message. | 8093 8094### setNumber<sup>10+</sup> 8095 8096setNumber(message: number): void 8097 8098设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8099 8100**系统能力:** SystemCapability.Web.Webview.Core 8101 8102**参数:** 8103 8104| 参数名 | 类型 | 必填 | 说明 | 8105| ------ | ------ | ---- | -------------------- | 8106| message | number | 是 | 数值类型数据。 | 8107 8108**错误码:** 8109 8110| 错误码ID | 错误信息 | 8111| -------- | ------------------------------------- | 8112| 17100014 | The type does not match with the value of the web message. | 8113 8114### setBoolean<sup>10+</sup> 8115 8116setBoolean(message: boolean): void 8117 8118设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8119 8120**系统能力:** SystemCapability.Web.Webview.Core 8121 8122**参数:** 8123 8124| 参数名 | 类型 | 必填 | 说明 | 8125| ------ | ------ | ---- | -------------------- | 8126| message | boolean | 是 | 布尔类型数据。 | 8127 8128**错误码:** 8129 8130| 错误码ID | 错误信息 | 8131| -------- | ------------------------------------- | 8132| 17100014 | The type does not match with the value of the web message. | 8133 8134### setArrayBuffer<sup>10+</sup> 8135 8136setArrayBuffer(message: ArrayBuffer): void 8137 8138设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8139 8140**系统能力:** SystemCapability.Web.Webview.Core 8141 8142**参数:** 8143 8144| 参数名 | 类型 | 必填 | 说明 | 8145| ------ | ------ | ---- | -------------------- | 8146| message | ArrayBuffer | 是 | 原始二进制类型数据。 | 8147 8148**错误码:** 8149 8150以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8151 8152| 错误码ID | 错误信息 | 8153| -------- | ------------------------------------- | 8154| 17100014 | The type does not match with the value of the web message. | 8155 8156### setArray<sup>10+</sup> 8157 8158setArray(message: Array\<string | number | boolean\>): void 8159 8160设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8161 8162**系统能力:** SystemCapability.Web.Webview.Core 8163 8164**参数:** 8165 8166| 参数名 | 类型 | 必填 | 说明 | 8167| ------ | ------ | ---- | -------------------- | 8168| message | Array\<string \| number \| boolean\> | 是 | 数组类型数据。 | 8169 8170**错误码:** 8171 8172以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8173 8174| 错误码ID | 错误信息 | 8175| -------- | ------------------------------------- | 8176| 17100014 | The type does not match with the value of the web message. | 8177 8178### setError<sup>10+</sup> 8179 8180setError(message: Error): void 8181 8182设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 8183 8184**系统能力:** SystemCapability.Web.Webview.Core 8185 8186**参数:** 8187 8188| 参数名 | 类型 | 必填 | 说明 | 8189| ------ | ------ | ---- | -------------------- | 8190| message | Error | 是 | 错误对象类型数据。 | 8191 8192**错误码:** 8193 8194以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8195 8196| 错误码ID | 错误信息 | 8197| -------- | ------------------------------------- | 8198| 17100014 | The type does not match with the value of the web message. | 8199 8200## WebStorageOrigin 8201 8202提供Web SQL数据库的使用信息。 8203 8204**系统能力:** SystemCapability.Web.Webview.Core 8205 8206| 名称 | 类型 | 可读 | 可写 | 说明 | 8207| ------ | ------ | ---- | ---- | ---- | 8208| origin | string | 是 | 否 | 指定源的字符串索引。 | 8209| usage | number | 是 | 否 | 指定源的存储量。 | 8210| quota | number | 是 | 否 | 指定源的存储配额。 | 8211 8212## BackForwardList 8213 8214当前Webview的历史信息列表。 8215 8216**系统能力:** SystemCapability.Web.Webview.Core 8217 8218| 名称 | 类型 | 可读 | 可写 | 说明 | 8219| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 8220| currentIndex | number | 是 | 否 | 当前在页面历史列表中的索引。 | 8221| size | number | 是 | 否 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 8222 8223### getItemAtIndex 8224 8225getItemAtIndex(index: number): HistoryItem 8226 8227获取历史列表中指定索引的历史记录项信息。 8228 8229**系统能力:** SystemCapability.Web.Webview.Core 8230 8231**参数:** 8232 8233| 参数名 | 类型 | 必填 | 说明 | 8234| ------ | ------ | ---- | ---------------------- | 8235| index | number | 是 | 指定历史列表中的索引。 | 8236 8237**返回值:** 8238 8239| 类型 | 说明 | 8240| --------------------------- | ------------ | 8241| [HistoryItem](#historyitem) | 历史记录项。 | 8242 8243**示例:** 8244 8245```ts 8246// xxx.ets 8247import web_webview from '@ohos.web.webview'; 8248import image from "@ohos.multimedia.image"; 8249import business_error from '@ohos.base'; 8250 8251@Entry 8252@Component 8253struct WebComponent { 8254 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8255 @State icon: image.PixelMap | undefined = undefined; 8256 8257 build() { 8258 Column() { 8259 Button('getBackForwardEntries') 8260 .onClick(() => { 8261 try { 8262 let list = this.controller.getBackForwardEntries(); 8263 let historyItem = list.getItemAtIndex(list.currentIndex); 8264 console.log("HistoryItem: " + JSON.stringify(historyItem)); 8265 this.icon = historyItem.icon; 8266 } catch (error) { 8267 let e: business_error.BusinessError = error as business_error.BusinessError; 8268 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8269 } 8270 }) 8271 Web({ src: 'www.example.com', controller: this.controller }) 8272 } 8273 } 8274} 8275``` 8276 8277## HistoryItem 8278 8279页面历史记录项。 8280 8281**系统能力:** SystemCapability.Web.Webview.Core 8282 8283| 名称 | 类型 | 可读 | 可写 | 说明 | 8284| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 8285| icon | [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 8286| historyUrl | string | 是 | 否 | 历史记录项的url地址。 | 8287| historyRawUrl | string | 是 | 否 | 历史记录项的原始url地址。 | 8288| title | string | 是 | 否 | 历史记录项的标题。 | 8289 8290## WebCustomScheme 8291 8292自定义协议配置。 8293 8294**系统能力:** SystemCapability.Web.Webview.Core 8295 8296| 名称 | 类型 | 可读 | 可写 | 说明 | 8297| -------------- | --------- | ---- | ---- | ---------------------------- | 8298| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-'。 | 8299| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。 | 8300| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。 | 8301 8302## SecureDnsMode<sup>10+</sup> 8303 8304Web组件使用HTTPDNS的模式。 8305 8306**系统能力:** SystemCapability.Web.Webview.Core 8307 8308| 名称 | 值 | 说明 | 8309| ------------- | -- |----------------------------------------- | 8310| OFF | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。| 8311| AUTO | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。| 8312| SECURE_ONLY | 2 |强制使用设定的HTTPDNS服务器进行域名解析。| 8313 8314## WebDownloadState<sup>11+</sup> 8315 8316下载任务的状态。 8317 8318**系统能力:** SystemCapability.Web.Webview.Core 8319 8320| 名称 | 值 | 说明 | 8321| ------------- | -- |----------------------------------------- | 8322| IN_PROGRESS | 0 |下载任务正在进行中。| 8323| COMPLETED | 1 |下载任务已经完成。| 8324| CANCELED | 2 |下载任务已经被取消。| 8325| INTERRUPTED | 3 |下载任务被中断。| 8326| PENDING | 4 |下载任务等待开始。| 8327| PAUSED | 5 |下载任务已经被暂停。| 8328| UNKNOWN | 6 |下载任务未知状态。| 8329 8330## WebDownloadErrorCode<sup>11+</sup> 8331 8332下载任务的错误码。 8333 8334**系统能力:** SystemCapability.Web.Webview.Core 8335 8336| 名称 | 值 | 说明 | 8337| ------------- | -- |----------------------------------------- | 8338| ERROR_UNKNOWN | 0 |未知的错误。| 8339| FILE_FAILED | 1 | 常规文件操作失败。| 8340| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。| 8341| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。| 8342| FILE_NAME_TOO_LONG | 5 | 文件名字过长。| 8343| FILE_TOO_LARGE | 6 | 文件太大。| 8344| FILE_TRANSIENT_ERROR | 10 | 出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。| 8345| FILE_BLOCKED | 11 | 由于某些本地策略,文件被阻止访问。| 8346| FILE_TOO_SHORT | 13 | 当尝试恢复下载时,发现文件不够长,可能该文件已不存在。| 8347| FILE_HASH_MISMATCH | 14 | 哈希不匹配。| 8348| FILE_SAME_AS_SOURCE | 15 | 文件已存在。| 8349| NETWORK_FAILED | 20 | 一般网络错误。| 8350| NETWORK_TIMEOUT | 21 | 网络超时。| 8351| NETWORK_DISCONNECTED | 22 | 网络断开连接。| 8352| NETWORK_SERVER_DOWN | 23 | 服务器关闭。| 8353| NETWORK_INVALID_REQUEST | 24 | 无效的网络请求,可能重定向到不支持的方案或无效的URL。| 8354| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。| 8355| SERVER_NO_RANGE | 31 | 服务器不支持范围请求。| 8356| SERVER_BAD_CONTENT | 33 | 服务器没有请求的数据。| 8357| SERVER_UNAUTHORIZED | 34 | 服务器不允许下载该文件。| 8358| SERVER_CERT_PROBLEM | 35 | 服务器证书错误。| 8359| SERVER_FORBIDDEN | 36 | 服务器访问被禁止。| 8360| SERVER_UNREACHABLE | 37 | 无法访问服务器。| 8361| SERVER_CONTENT_LENGTH_MISMATCH | 38 | 接收到的数据与内容长度不匹配。| 8362| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。| 8363| USER_CANCELED | 40 | 用户取消了下载。| 8364| USER_SHUTDOWN | 41 | 用户关闭了应用。| 8365| CRASH | 50 | 应用发生了崩溃。| 8366 8367## WebDownloadItem<sup>11+</sup> 8368 8369 表示下载任务,您可以使用此对象来操作相应的下载任务。 8370 8371> **说明:** 8372> 8373> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。 8374 8375### getGuid<sup>11+</sup> 8376 8377getGuid(): string 8378 8379获取下载任务的唯一ID。 8380 8381**系统能力:** SystemCapability.Web.Webview.Core 8382 8383**返回值:** 8384 8385| 类型 | 说明 | 8386| ------ | ------------------------- | 8387| string | 下载任务的唯一ID。 | 8388 8389**示例:** 8390 8391```ts 8392// xxx.ets 8393import web_webview from '@ohos.web.webview' 8394import business_error from '@ohos.base' 8395 8396@Entry 8397@Component 8398struct WebComponent { 8399 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8400 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8401 8402 build() { 8403 Column() { 8404 Button('setDownloadDelegate') 8405 .onClick(() => { 8406 try { 8407 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8408 console.log("will start a download."); 8409 // 传入一个下载路径,并开始下载。 8410 webDownloadItem.start("xxxxxxxx"); 8411 }) 8412 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8413 console.log("download update guid: " + webDownloadItem.getGuid()); 8414 }) 8415 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8416 console.log("download failed guid: " + webDownloadItem.getGuid()); 8417 }) 8418 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8419 console.log("download finish guid: " + webDownloadItem.getGuid()); 8420 }) 8421 this.controller.setDownloadDelegate(this.delegate); 8422 } catch (error) { 8423 let e:business_error.BusinessError = error as business_error.BusinessError; 8424 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8425 } 8426 }) 8427 Button('startDownload') 8428 .onClick(() => { 8429 try { 8430 this.controller.startDownload('www.example.com'); 8431 } catch (error) { 8432 let e:business_error.BusinessError = error as business_error.BusinessError; 8433 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8434 } 8435 }) 8436 Web({ src: 'www.example.com', controller: this.controller }) 8437 } 8438 } 8439} 8440``` 8441 8442### getCurrentSpeed<sup>11+</sup> 8443 8444getCurrentSpeed(): number 8445 8446获取下载的速度,单位:字节每秒。 8447 8448**系统能力:** SystemCapability.Web.Webview.Core 8449 8450**返回值:** 8451 8452| 类型 | 说明 | 8453| ------ | ------------------------- | 8454| number | 下载的速度(字节每秒)。 | 8455 8456**示例:** 8457 8458```ts 8459// xxx.ets 8460import web_webview from '@ohos.web.webview' 8461import business_error from '@ohos.base' 8462 8463@Entry 8464@Component 8465struct WebComponent { 8466 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8467 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8468 8469 build() { 8470 Column() { 8471 Button('setDownloadDelegate') 8472 .onClick(() => { 8473 try { 8474 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8475 console.log("will start a download."); 8476 // 传入一个下载路径,并开始下载。 8477 webDownloadItem.start("xxxxxxxx"); 8478 }) 8479 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8480 console.log("download update current speed: " + webDownloadItem.getCurrentSpeed()); 8481 }) 8482 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8483 console.log("download failed guid: " + webDownloadItem.getGuid()); 8484 }) 8485 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8486 console.log("download finish guid: " + webDownloadItem.getGuid()); 8487 }) 8488 this.controller.setDownloadDelegate(this.delegate); 8489 } catch (error) { 8490 let e:business_error.BusinessError = error as business_error.BusinessError; 8491 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8492 } 8493 }) 8494 Button('startDownload') 8495 .onClick(() => { 8496 try { 8497 this.controller.startDownload('www.example.com'); 8498 } catch (error) { 8499 let e:business_error.BusinessError = error as business_error.BusinessError; 8500 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8501 } 8502 }) 8503 Web({ src: 'www.example.com', controller: this.controller }) 8504 } 8505 } 8506} 8507``` 8508 8509### getPercentComplete<sup>11+</sup> 8510 8511getPercentComplete(): number 8512 8513获取下载的进度,100代表下载完成。 8514 8515**系统能力:** SystemCapability.Web.Webview.Core 8516 8517**返回值:** 8518 8519| 类型 | 说明 | 8520| ------ | ------------------------- | 8521| number | 下载完成的进度,100代表下载完成。 | 8522 8523**示例:** 8524 8525```ts 8526// xxx.ets 8527import web_webview from '@ohos.web.webview' 8528import business_error from '@ohos.base' 8529 8530@Entry 8531@Component 8532struct WebComponent { 8533 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8534 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8535 8536 build() { 8537 Column() { 8538 Button('setDownloadDelegate') 8539 .onClick(() => { 8540 try { 8541 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8542 console.log("will start a download."); 8543 // 传入一个下载路径,并开始下载。 8544 webDownloadItem.start("xxxxxxxx"); 8545 }) 8546 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8547 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 8548 }) 8549 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8550 console.log("download failed guid: " + webDownloadItem.getGuid()); 8551 }) 8552 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8553 console.log("download finish guid: " + webDownloadItem.getGuid()); 8554 }) 8555 this.controller.setDownloadDelegate(this.delegate); 8556 } catch (error) { 8557 let e:business_error.BusinessError = error as business_error.BusinessError; 8558 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8559 } 8560 }) 8561 Button('startDownload') 8562 .onClick(() => { 8563 try { 8564 this.controller.startDownload('www.example.com'); 8565 } catch (error) { 8566 let e:business_error.BusinessError = error as business_error.BusinessError; 8567 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8568 } 8569 }) 8570 Web({ src: 'www.example.com', controller: this.controller }) 8571 } 8572 } 8573} 8574``` 8575 8576### getTotalBytes<sup>11+</sup> 8577 8578getTotalBytes(): number 8579 8580获取待下载文件的总长度。 8581 8582**系统能力:** SystemCapability.Web.Webview.Core 8583 8584**返回值:** 8585 8586| 类型 | 说明 | 8587| ------ | ------------------------- | 8588| number | 待下载文件的总长度。 | 8589 8590**示例:** 8591 8592```ts 8593// xxx.ets 8594import web_webview from '@ohos.web.webview' 8595import business_error from '@ohos.base' 8596 8597@Entry 8598@Component 8599struct WebComponent { 8600 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8601 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8602 8603 build() { 8604 Column() { 8605 Button('setDownloadDelegate') 8606 .onClick(() => { 8607 try { 8608 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8609 console.log("will start a download."); 8610 // 传入一个下载路径,并开始下载。 8611 webDownloadItem.start("xxxxxxxx"); 8612 }) 8613 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8614 console.log("download update total bytes: " + webDownloadItem.getTotalBytes()); 8615 }) 8616 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8617 console.log("download failed guid: " + webDownloadItem.getGuid()); 8618 }) 8619 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8620 console.log("download finish guid: " + webDownloadItem.getGuid()); 8621 }) 8622 this.controller.setDownloadDelegate(this.delegate); 8623 } catch (error) { 8624 let e:business_error.BusinessError = error as business_error.BusinessError; 8625 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8626 } 8627 }) 8628 Button('startDownload') 8629 .onClick(() => { 8630 try { 8631 this.controller.startDownload('www.example.com'); 8632 } catch (error) { 8633 let e:business_error.BusinessError = error as business_error.BusinessError; 8634 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8635 } 8636 }) 8637 Web({ src: 'www.example.com', controller: this.controller }) 8638 } 8639 } 8640} 8641``` 8642 8643### getState<sup>11+</sup> 8644 8645getState(): WebDownloadState 8646 8647获取下载的状态。 8648 8649**系统能力:** SystemCapability.Web.Webview.Core 8650 8651**返回值:** 8652 8653| 类型 | 说明 | 8654| ------ | ------------------------- | 8655| [WebDownloadState](#webdownloadstate11) | 下载的状态。 | 8656 8657**示例:** 8658 8659```ts 8660// xxx.ets 8661import web_webview from '@ohos.web.webview' 8662import business_error from '@ohos.base' 8663 8664@Entry 8665@Component 8666struct WebComponent { 8667 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8668 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8669 8670 build() { 8671 Column() { 8672 Button('setDownloadDelegate') 8673 .onClick(() => { 8674 try { 8675 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8676 console.log("will start a download."); 8677 // 传入一个下载路径,并开始下载。 8678 webDownloadItem.start("xxxxxxxx"); 8679 }) 8680 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8681 console.log("download update download state: " + webDownloadItem.getState()); 8682 }) 8683 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8684 console.log("download failed guid: " + webDownloadItem.getGuid()); 8685 }) 8686 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8687 console.log("download finish guid: " + webDownloadItem.getGuid()); 8688 }) 8689 this.controller.setDownloadDelegate(this.delegate); 8690 } catch (error) { 8691 let e:business_error.BusinessError = error as business_error.BusinessError; 8692 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8693 } 8694 }) 8695 Button('startDownload') 8696 .onClick(() => { 8697 try { 8698 this.controller.startDownload('www.example.com'); 8699 } catch (error) { 8700 let e:business_error.BusinessError = error as business_error.BusinessError; 8701 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8702 } 8703 }) 8704 Web({ src: 'www.example.com', controller: this.controller }) 8705 } 8706 } 8707} 8708``` 8709 8710### getLastErrorCode<sup>11+</sup> 8711 8712getLastErrorCode(): WebDownloadErrorCode 8713 8714获取下载的错误码。 8715 8716**系统能力:** SystemCapability.Web.Webview.Core 8717 8718**返回值:** 8719 8720| 类型 | 说明 | 8721| ------ | ------------------------- | 8722| number | 下载发生错误的时候的错误码。 | 8723 8724**示例:** 8725 8726```ts 8727// xxx.ets 8728import web_webview from '@ohos.web.webview' 8729import business_error from '@ohos.base' 8730 8731@Entry 8732@Component 8733struct WebComponent { 8734 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8735 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8736 8737 build() { 8738 Column() { 8739 Button('setDownloadDelegate') 8740 .onClick(() => { 8741 try { 8742 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8743 console.log("will start a download."); 8744 // 传入一个下载路径,并开始下载。 8745 webDownloadItem.start("xxxxxxxx"); 8746 }) 8747 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8748 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 8749 }) 8750 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8751 console.log("download failed guid: " + webDownloadItem.getGuid()); 8752 console.log("download error code: " + webDownloadItem.getLastErrorCode()); 8753 }) 8754 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8755 console.log("download finish guid: " + webDownloadItem.getGuid()); 8756 }) 8757 this.controller.setDownloadDelegate(this.delegate); 8758 } catch (error) { 8759 let e:business_error.BusinessError = error as business_error.BusinessError; 8760 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8761 } 8762 }) 8763 Button('startDownload') 8764 .onClick(() => { 8765 try { 8766 this.controller.startDownload('www.example.com'); 8767 } catch (error) { 8768 let e:business_error.BusinessError = error as business_error.BusinessError; 8769 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8770 } 8771 }) 8772 Web({ src: 'www.example.com', controller: this.controller }) 8773 } 8774 } 8775} 8776``` 8777 8778### getMethod<sup>11+</sup> 8779 8780getMethod(): string 8781 8782获取下载任务的请求方式。 8783 8784**系统能力:** SystemCapability.Web.Webview.Core 8785 8786**返回值:** 8787 8788| 类型 | 说明 | 8789| ------ | ------------------------- | 8790| string | 下载的请求方式。 | 8791 8792**示例:** 8793 8794```ts 8795// xxx.ets 8796import web_webview from '@ohos.web.webview' 8797import business_error from '@ohos.base' 8798 8799@Entry 8800@Component 8801struct WebComponent { 8802 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8803 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8804 8805 build() { 8806 Column() { 8807 Button('setDownloadDelegate') 8808 .onClick(() => { 8809 try { 8810 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8811 console.log("will start a download, method:" + webDownloadItem.getMethod()); 8812 // 传入一个下载路径,并开始下载。 8813 webDownloadItem.start("xxxxxxxx"); 8814 }) 8815 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8816 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 8817 }) 8818 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8819 console.log("download failed guid: " + webDownloadItem.getGuid()); 8820 }) 8821 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8822 console.log("download finish guid: " + webDownloadItem.getGuid()); 8823 }) 8824 this.controller.setDownloadDelegate(this.delegate); 8825 } catch (error) { 8826 let e:business_error.BusinessError = error as business_error.BusinessError; 8827 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8828 } 8829 }) 8830 Button('startDownload') 8831 .onClick(() => { 8832 try { 8833 this.controller.startDownload('www.example.com'); 8834 } catch (error) { 8835 let e:business_error.BusinessError = error as business_error.BusinessError; 8836 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8837 } 8838 }) 8839 Web({ src: 'www.example.com', controller: this.controller }) 8840 } 8841 } 8842} 8843``` 8844 8845### getMimeType<sup>11+</sup> 8846 8847getMimeType(): string 8848 8849获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。 8850 8851**系统能力:** SystemCapability.Web.Webview.Core 8852 8853**返回值:** 8854 8855| 类型 | 说明 | 8856| ------ | ------------------------- | 8857| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。| 8858 8859**示例:** 8860 8861```ts 8862// xxx.ets 8863import web_webview from '@ohos.web.webview' 8864import business_error from '@ohos.base' 8865 8866@Entry 8867@Component 8868struct WebComponent { 8869 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8870 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8871 8872 build() { 8873 Column() { 8874 Button('setDownloadDelegate') 8875 .onClick(() => { 8876 try { 8877 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8878 console.log("will start a download, mime type:" + webDownloadItem.getMimeType()); 8879 // 传入一个下载路径,并开始下载。 8880 webDownloadItem.start("xxxxxxxx"); 8881 }) 8882 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8883 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 8884 }) 8885 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8886 console.log("download failed guid: " + webDownloadItem.getGuid()); 8887 }) 8888 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8889 console.log("download finish guid: " + webDownloadItem.getGuid()); 8890 }) 8891 this.controller.setDownloadDelegate(this.delegate); 8892 } catch (error) { 8893 let e:business_error.BusinessError = error as business_error.BusinessError; 8894 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8895 } 8896 }) 8897 Button('startDownload') 8898 .onClick(() => { 8899 try { 8900 this.controller.startDownload('www.example.com'); 8901 } catch (error) { 8902 let e:business_error.BusinessError = error as business_error.BusinessError; 8903 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8904 } 8905 }) 8906 Web({ src: 'www.example.com', controller: this.controller }) 8907 } 8908 } 8909} 8910``` 8911 8912### getUrl<sup>11+</sup> 8913 8914getUrl(): string 8915 8916获取下载的请求地址。 8917 8918**系统能力:** SystemCapability.Web.Webview.Core 8919 8920**返回值:** 8921 8922| 类型 | 说明 | 8923| ------ | ------------------------- | 8924| string | 下载的请求地址。 | 8925 8926**示例:** 8927 8928```ts 8929// xxx.ets 8930import web_webview from '@ohos.web.webview' 8931import business_error from '@ohos.base' 8932 8933@Entry 8934@Component 8935struct WebComponent { 8936 controller: web_webview.WebviewController = new web_webview.WebviewController(); 8937 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 8938 8939 build() { 8940 Column() { 8941 Button('setDownloadDelegate') 8942 .onClick(() => { 8943 try { 8944 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 8945 console.log("will start a download, url:" + webDownloadItem.getUrl()); 8946 // 传入一个下载路径,并开始下载。 8947 webDownloadItem.start("xxxxxxxx"); 8948 }) 8949 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 8950 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 8951 }) 8952 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 8953 console.log("download failed guid: " + webDownloadItem.getGuid()); 8954 }) 8955 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 8956 console.log("download finish guid: " + webDownloadItem.getGuid()); 8957 }) 8958 this.controller.setDownloadDelegate(this.delegate); 8959 } catch (error) { 8960 let e:business_error.BusinessError = error as business_error.BusinessError; 8961 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8962 } 8963 }) 8964 Button('startDownload') 8965 .onClick(() => { 8966 try { 8967 this.controller.startDownload('www.example.com'); 8968 } catch (error) { 8969 let e:business_error.BusinessError = error as business_error.BusinessError; 8970 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 8971 } 8972 }) 8973 Web({ src: 'www.example.com', controller: this.controller }) 8974 } 8975 } 8976} 8977``` 8978 8979### getSuggestedFileName<sup>11+</sup> 8980 8981getSuggestedFileName(): string 8982 8983获取下载的建议文件名。 8984 8985**系统能力:** SystemCapability.Web.Webview.Core 8986 8987**返回值:** 8988 8989| 类型 | 说明 | 8990| ------ | ------------------------- | 8991| string | 下载的建议文件名。 | 8992 8993**示例:** 8994 8995```ts 8996// xxx.ets 8997import web_webview from '@ohos.web.webview' 8998import business_error from '@ohos.base' 8999 9000@Entry 9001@Component 9002struct WebComponent { 9003 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9004 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9005 9006 build() { 9007 Column() { 9008 Button('setDownloadDelegate') 9009 .onClick(() => { 9010 try { 9011 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9012 console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName()); 9013 // 传入一个下载路径,并开始下载。 9014 webDownloadItem.start("xxxxxxxx"); 9015 }) 9016 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9017 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9018 }) 9019 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9020 console.log("download failed guid: " + webDownloadItem.getGuid()); 9021 }) 9022 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9023 console.log("download finish guid: " + webDownloadItem.getGuid()); 9024 }) 9025 this.controller.setDownloadDelegate(this.delegate); 9026 } catch (error) { 9027 let e:business_error.BusinessError = error as business_error.BusinessError; 9028 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9029 } 9030 }) 9031 Button('startDownload') 9032 .onClick(() => { 9033 try { 9034 this.controller.startDownload('www.example.com'); 9035 } catch (error) { 9036 let e:business_error.BusinessError = error as business_error.BusinessError; 9037 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9038 } 9039 }) 9040 Web({ src: 'www.example.com', controller: this.controller }) 9041 } 9042 } 9043} 9044``` 9045 9046### getReceivedBytes<sup>11+</sup> 9047 9048getReceivedBytes(): number 9049 9050获取已经接收的字节数。 9051 9052**系统能力:** SystemCapability.Web.Webview.Core 9053 9054**返回值:** 9055 9056| 类型 | 说明 | 9057| ------ | ------------------------- | 9058| number | 已经接收的字节数。 | 9059 9060**示例:** 9061 9062```ts 9063// xxx.ets 9064import web_webview from '@ohos.web.webview' 9065import business_error from '@ohos.base' 9066 9067@Entry 9068@Component 9069struct WebComponent { 9070 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9071 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9072 9073 build() { 9074 Column() { 9075 Button('setDownloadDelegate') 9076 .onClick(() => { 9077 try { 9078 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9079 console.log("will start a download."); 9080 // 传入一个下载路径,并开始下载。 9081 webDownloadItem.start("xxxxxxxx"); 9082 }) 9083 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9084 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9085 console.log("download update received bytes: " + webDownloadItem.getReceivedBytes()); 9086 }) 9087 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9088 console.log("download failed guid: " + webDownloadItem.getGuid()); 9089 }) 9090 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9091 console.log("download finish guid: " + webDownloadItem.getGuid()); 9092 }) 9093 this.controller.setDownloadDelegate(this.delegate); 9094 } catch (error) { 9095 let e:business_error.BusinessError = error as business_error.BusinessError; 9096 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9097 } 9098 }) 9099 Button('startDownload') 9100 .onClick(() => { 9101 try { 9102 this.controller.startDownload('www.example.com'); 9103 } catch (error) { 9104 let e:business_error.BusinessError = error as business_error.BusinessError; 9105 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9106 } 9107 }) 9108 Web({ src: 'www.example.com', controller: this.controller }) 9109 } 9110 } 9111} 9112``` 9113 9114### getFullPath<sup>11+</sup> 9115 9116getFullPath(): string 9117 9118获取下载文件在磁盘上的全路径。 9119 9120**系统能力:** SystemCapability.Web.Webview.Core 9121 9122**返回值:** 9123 9124| 类型 | 说明 | 9125| ------ | ------------------------- | 9126| string | 下载文件在磁盘上的全路径。 | 9127 9128**示例:** 9129 9130```ts 9131// xxx.ets 9132import web_webview from '@ohos.web.webview' 9133import business_error from '@ohos.base' 9134 9135@Entry 9136@Component 9137struct WebComponent { 9138 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9139 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9140 9141 build() { 9142 Column() { 9143 Button('setDownloadDelegate') 9144 .onClick(() => { 9145 try { 9146 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9147 console.log("will start a download."); 9148 // 传入一个下载路径,并开始下载。 9149 webDownloadItem.start("xxxxxxxx"); 9150 }) 9151 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9152 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9153 }) 9154 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9155 console.log("download failed guid: " + webDownloadItem.getGuid()); 9156 }) 9157 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9158 console.log("download finish guid: " + webDownloadItem.getGuid()); 9159 console.log("download finish full path: " + webDownloadItem.getFullPath()); 9160 }) 9161 this.controller.setDownloadDelegate(this.delegate); 9162 } catch (error) { 9163 let e:business_error.BusinessError = error as business_error.BusinessError; 9164 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9165 } 9166 }) 9167 Button('startDownload') 9168 .onClick(() => { 9169 try { 9170 this.controller.startDownload('www.example.com'); 9171 } catch (error) { 9172 let e:business_error.BusinessError = error as business_error.BusinessError; 9173 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9174 } 9175 }) 9176 Web({ src: 'www.example.com', controller: this.controller }) 9177 } 9178 } 9179} 9180``` 9181 9182### serialize<sup>11+</sup> 9183 9184serialize(): Uint8Array 9185 9186将失败的下载序列化到一个字节数组。 9187 9188**系统能力:** SystemCapability.Web.Webview.Core 9189 9190**返回值:** 9191 9192| 类型 | 说明 | 9193| ------ | ------------------------- | 9194| Uint8Array | 失败的下载序列化后的字节数组。 | 9195 9196**示例:** 9197 9198```ts 9199// xxx.ets 9200import web_webview from '@ohos.web.webview' 9201import business_error from '@ohos.base' 9202 9203@Entry 9204@Component 9205struct WebComponent { 9206 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9207 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9208 failedData: Uint8Array = new Uint8Array(); 9209 9210 build() { 9211 Column() { 9212 Button('setDownloadDelegate') 9213 .onClick(() => { 9214 try { 9215 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9216 console.log("will start a download."); 9217 // 传入一个下载路径,并开始下载。 9218 webDownloadItem.start("xxxxxxxx"); 9219 }) 9220 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9221 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9222 }) 9223 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9224 console.log("download failed guid: " + webDownloadItem.getGuid()); 9225 // 序列化失败的下载到一个字节数组。 9226 this.failedData = webDownloadItem.serialize(); 9227 }) 9228 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9229 console.log("download finish guid: " + webDownloadItem.getGuid()); 9230 }) 9231 this.controller.setDownloadDelegate(this.delegate); 9232 } catch (error) { 9233 let e:business_error.BusinessError = error as business_error.BusinessError; 9234 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9235 } 9236 }) 9237 Button('startDownload') 9238 .onClick(() => { 9239 try { 9240 this.controller.startDownload('www.example.com'); 9241 } catch (error) { 9242 let e:business_error.BusinessError = error as business_error.BusinessError; 9243 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9244 } 9245 }) 9246 Web({ src: 'www.example.com', controller: this.controller }) 9247 } 9248 } 9249} 9250``` 9251 9252### deserialize<sup>11+</sup> 9253 9254static deserialize(serializedData: Uint8Array): WebDownloadItem 9255 9256将序列化后的字节数组反序列化为一个WebDownloadItem对象。 9257 9258**系统能力:** SystemCapability.Web.Webview.Core 9259 9260**参数:** 9261 9262| 参数名 | 类型 | 必填 | 说明 | 9263| ------------------ | ------- | ---- | ------------- | 9264| serializedData | Uint8Array | 是 | 序列化后的下载。| 9265 9266**返回值:** 9267 9268| 类型 | 说明 | 9269| ------ | ------------------------- | 9270| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 | 9271 9272**示例:** 9273 9274```ts 9275// xxx.ets 9276import web_webview from '@ohos.web.webview' 9277import business_error from '@ohos.base' 9278 9279@Entry 9280@Component 9281struct WebComponent { 9282 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9283 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9284 failedData: Uint8Array = new Uint8Array(); 9285 9286 build() { 9287 Column() { 9288 Button('setDownloadDelegate') 9289 .onClick(() => { 9290 try { 9291 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9292 console.log("will start a download."); 9293 // 传入一个下载路径,并开始下载。 9294 webDownloadItem.start("xxxxxxxx"); 9295 }) 9296 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9297 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9298 }) 9299 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9300 console.log("download failed guid: " + webDownloadItem.getGuid()); 9301 // 序列化失败的下载到一个字节数组。 9302 this.failedData = webDownloadItem.serialize(); 9303 }) 9304 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9305 console.log("download finish guid: " + webDownloadItem.getGuid()); 9306 }) 9307 this.controller.setDownloadDelegate(this.delegate); 9308 } catch (error) { 9309 let e:business_error.BusinessError = error as business_error.BusinessError; 9310 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9311 } 9312 }) 9313 Button('startDownload') 9314 .onClick(() => { 9315 try { 9316 this.controller.startDownload('www.example.com'); 9317 } catch (error) { 9318 let e:business_error.BusinessError = error as business_error.BusinessError; 9319 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9320 } 9321 }) 9322 Button('resumeDownload') 9323 .onClick(() => { 9324 try { 9325 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9326 } catch (error) { 9327 let e:business_error.BusinessError = error as business_error.BusinessError; 9328 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9329 } 9330 }) 9331 Web({ src: 'www.example.com', controller: this.controller }) 9332 } 9333 } 9334} 9335``` 9336 9337### start<sup>11+</sup> 9338 9339start(downloadPath: string): void 9340 9341开始一个下载,参数为下载文件的磁盘存储路径(包含文件名)。该接口需要在WebDownloadDelegate的onBeforeDownload回调中使用,如果在WebDownloadDelegate的onBeforeDownload中不调用start('xxx')该下载任务会一直处于PENDING状态。 9342 9343**系统能力:** SystemCapability.Web.Webview.Core 9344 9345**参数:** 9346 9347| 参数名 | 类型 | 必填 | 说明 | 9348| ------ | ---------------------- | ---- | ------------------------------| 9349| downloadPath | string | 是 | 下载文件的路径(包含文件名)。| 9350 9351**示例:** 9352 9353```ts 9354// xxx.ets 9355import web_webview from '@ohos.web.webview' 9356import business_error from '@ohos.base' 9357 9358@Entry 9359@Component 9360struct WebComponent { 9361 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9362 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9363 failedData: Uint8Array = new Uint8Array(); 9364 9365 build() { 9366 Column() { 9367 Button('setDownloadDelegate') 9368 .onClick(() => { 9369 try { 9370 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9371 console.log("will start a download."); 9372 // 传入一个下载路径,并开始下载。 9373 webDownloadItem.start("xxxxxxxx"); 9374 }) 9375 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9376 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9377 }) 9378 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9379 console.log("download failed guid: " + webDownloadItem.getGuid()); 9380 // 序列化失败的下载到一个字节数组。 9381 this.failedData = webDownloadItem.serialize(); 9382 }) 9383 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9384 console.log("download finish guid: " + webDownloadItem.getGuid()); 9385 }) 9386 this.controller.setDownloadDelegate(this.delegate); 9387 } catch (error) { 9388 let e:business_error.BusinessError = error as business_error.BusinessError; 9389 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9390 } 9391 }) 9392 Button('startDownload') 9393 .onClick(() => { 9394 try { 9395 this.controller.startDownload('www.example.com'); 9396 } catch (error) { 9397 let e:business_error.BusinessError = error as business_error.BusinessError; 9398 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9399 } 9400 }) 9401 Button('resumeDownload') 9402 .onClick(() => { 9403 try { 9404 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9405 } catch (error) { 9406 let e:business_error.BusinessError = error as business_error.BusinessError; 9407 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9408 } 9409 }) 9410 Web({ src: 'www.example.com', controller: this.controller }) 9411 } 9412 } 9413} 9414``` 9415 9416### cancel<sup>11+</sup> 9417 9418cancel(): void 9419 9420取消一个正在下载的下载任务。 9421 9422**系统能力:** SystemCapability.Web.Webview.Core 9423 9424**示例:** 9425 9426```ts 9427// xxx.ets 9428import web_webview from '@ohos.web.webview' 9429import business_error from '@ohos.base' 9430 9431@Entry 9432@Component 9433struct WebComponent { 9434 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9435 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9436 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9437 failedData: Uint8Array = new Uint8Array(); 9438 9439 build() { 9440 Column() { 9441 Button('setDownloadDelegate') 9442 .onClick(() => { 9443 try { 9444 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9445 console.log("will start a download."); 9446 // 传入一个下载路径,并开始下载。 9447 webDownloadItem.start("xxxxxxxx"); 9448 }) 9449 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9450 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9451 this.download = webDownloadItem; 9452 }) 9453 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9454 console.log("download failed guid: " + webDownloadItem.getGuid()); 9455 // 序列化失败的下载到一个字节数组。 9456 this.failedData = webDownloadItem.serialize(); 9457 }) 9458 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9459 console.log("download finish guid: " + webDownloadItem.getGuid()); 9460 }) 9461 this.controller.setDownloadDelegate(this.delegate); 9462 } catch (error) { 9463 let e:business_error.BusinessError = error as business_error.BusinessError; 9464 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9465 } 9466 }) 9467 Button('startDownload') 9468 .onClick(() => { 9469 try { 9470 this.controller.startDownload('www.example.com'); 9471 } catch (error) { 9472 let e:business_error.BusinessError = error as business_error.BusinessError; 9473 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9474 } 9475 }) 9476 Button('resumeDownload') 9477 .onClick(() => { 9478 try { 9479 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9480 } catch (error) { 9481 let e:business_error.BusinessError = error as business_error.BusinessError; 9482 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9483 } 9484 }) 9485 Button('cancel') 9486 .onClick(() => { 9487 try { 9488 this.download.cancel(); 9489 } catch (error) { 9490 let e:business_error.BusinessError = error as business_error.BusinessError; 9491 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9492 } 9493 }) 9494 Web({ src: 'www.example.com', controller: this.controller }) 9495 } 9496 } 9497} 9498``` 9499 9500### pause<sup>11+</sup> 9501 9502pause(): void 9503 9504暂停一个正在下载的下载任务。 9505 9506**系统能力:** SystemCapability.Web.Webview.Core 9507 9508**错误码:** 9509 9510以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 9511 9512| 错误码ID | 错误信息 | 9513| -------- | ------------------------------------------------------------ | 9514| 17100019 | The download has not been started yet. | 9515 9516**示例:** 9517 9518```ts 9519// xxx.ets 9520import web_webview from '@ohos.web.webview' 9521import business_error from '@ohos.base' 9522 9523@Entry 9524@Component 9525struct WebComponent { 9526 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9527 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9528 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9529 failedData: Uint8Array = new Uint8Array(); 9530 9531 build() { 9532 Column() { 9533 Button('setDownloadDelegate') 9534 .onClick(() => { 9535 try { 9536 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9537 console.log("will start a download."); 9538 // 传入一个下载路径,并开始下载。 9539 webDownloadItem.start("xxxxxxxx"); 9540 }) 9541 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9542 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9543 this.download = webDownloadItem; 9544 }) 9545 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9546 console.log("download failed guid: " + webDownloadItem.getGuid()); 9547 // 序列化失败的下载到一个字节数组。 9548 this.failedData = webDownloadItem.serialize(); 9549 }) 9550 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9551 console.log("download finish guid: " + webDownloadItem.getGuid()); 9552 }) 9553 this.controller.setDownloadDelegate(this.delegate); 9554 } catch (error) { 9555 let e:business_error.BusinessError = error as business_error.BusinessError; 9556 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9557 } 9558 }) 9559 Button('startDownload') 9560 .onClick(() => { 9561 try { 9562 this.controller.startDownload('www.example.com'); 9563 } catch (error) { 9564 let e:business_error.BusinessError = error as business_error.BusinessError; 9565 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9566 } 9567 }) 9568 Button('resumeDownload') 9569 .onClick(() => { 9570 try { 9571 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9572 } catch (error) { 9573 let e:business_error.BusinessError = error as business_error.BusinessError; 9574 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9575 } 9576 }) 9577 Button('cancel') 9578 .onClick(() => { 9579 try { 9580 this.download.cancel(); 9581 } catch (error) { 9582 let e:business_error.BusinessError = error as business_error.BusinessError; 9583 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9584 } 9585 }) 9586 Button('pause') 9587 .onClick(() => { 9588 try { 9589 this.download.pause(); 9590 } catch (error) { 9591 let e:business_error.BusinessError = error as business_error.BusinessError; 9592 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9593 } 9594 }) 9595 Web({ src: 'www.example.com', controller: this.controller }) 9596 } 9597 } 9598} 9599``` 9600 9601### resume<sup>11+</sup> 9602 9603resume(): void 9604 9605恢复一个暂停的下载任务。 9606 9607**系统能力:** SystemCapability.Web.Webview.Core 9608 9609**错误码:** 9610 9611以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md). 9612 9613| 错误码ID | 错误信息 | 9614| -------- | ------------------------------------------------------------ | 9615| 17100016 | The download is not paused. | 9616 9617**示例:** 9618 9619```ts 9620// xxx.ets 9621import web_webview from '@ohos.web.webview' 9622import business_error from '@ohos.base' 9623 9624@Entry 9625@Component 9626struct WebComponent { 9627 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9628 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9629 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9630 failedData: Uint8Array = new Uint8Array(); 9631 9632 build() { 9633 Column() { 9634 Button('setDownloadDelegate') 9635 .onClick(() => { 9636 try { 9637 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9638 console.log("will start a download."); 9639 // 传入一个下载路径,并开始下载。 9640 webDownloadItem.start("xxxxxxxx"); 9641 }) 9642 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9643 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9644 this.download = webDownloadItem; 9645 }) 9646 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9647 console.log("download failed guid: " + webDownloadItem.getGuid()); 9648 // 序列化失败的下载到一个字节数组。 9649 this.failedData = webDownloadItem.serialize(); 9650 }) 9651 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9652 console.log("download finish guid: " + webDownloadItem.getGuid()); 9653 }) 9654 this.controller.setDownloadDelegate(this.delegate); 9655 } catch (error) { 9656 let e:business_error.BusinessError = error as business_error.BusinessError; 9657 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9658 } 9659 }) 9660 Button('startDownload') 9661 .onClick(() => { 9662 try { 9663 this.controller.startDownload('www.example.com'); 9664 } catch (error) { 9665 let e:business_error.BusinessError = error as business_error.BusinessError; 9666 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9667 } 9668 }) 9669 Button('resumeDownload') 9670 .onClick(() => { 9671 try { 9672 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9673 } catch (error) { 9674 let e:business_error.BusinessError = error as business_error.BusinessError; 9675 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9676 } 9677 }) 9678 Button('cancel') 9679 .onClick(() => { 9680 try { 9681 this.download.cancel(); 9682 } catch (error) { 9683 let e:business_error.BusinessError = error as business_error.BusinessError; 9684 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9685 } 9686 }) 9687 Button('pause') 9688 .onClick(() => { 9689 try { 9690 this.download.pause(); 9691 } catch (error) { 9692 let e:business_error.BusinessError = error as business_error.BusinessError; 9693 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9694 } 9695 }) 9696 Button('resume') 9697 .onClick(() => { 9698 try { 9699 this.download.resume(); 9700 } catch (error) { 9701 let e:business_error.BusinessError = error as business_error.BusinessError; 9702 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9703 } 9704 }) 9705 Web({ src: 'www.example.com', controller: this.controller }) 9706 } 9707 } 9708} 9709``` 9710 9711## WebDownloadDelegate<sup>11+</sup> 9712 9713 下载任务的状态会通过该类的回调接口通知给用户。 9714 9715### onBeforeDownload<sup>11+</sup> 9716 9717onBeforeDownload(callback: Callback\<WebDownloadItem>): void 9718 9719下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。 9720 9721**系统能力:** SystemCapability.Web.Webview.Core 9722 9723**示例:** 9724 9725```ts 9726// xxx.ets 9727import web_webview from '@ohos.web.webview' 9728import business_error from '@ohos.base' 9729 9730@Entry 9731@Component 9732struct WebComponent { 9733 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9734 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9735 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9736 failedData: Uint8Array = new Uint8Array(); 9737 9738 build() { 9739 Column() { 9740 Button('setDownloadDelegate') 9741 .onClick(() => { 9742 try { 9743 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9744 console.log("will start a download."); 9745 // 传入一个下载路径,并开始下载。 9746 webDownloadItem.start("xxxxxxxx"); 9747 }) 9748 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9749 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9750 this.download = webDownloadItem; 9751 }) 9752 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9753 console.log("download failed guid: " + webDownloadItem.getGuid()); 9754 // 序列化失败的下载到一个字节数组。 9755 this.failedData = webDownloadItem.serialize(); 9756 }) 9757 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9758 console.log("download finish guid: " + webDownloadItem.getGuid()); 9759 }) 9760 this.controller.setDownloadDelegate(this.delegate); 9761 } catch (error) { 9762 let e:business_error.BusinessError = error as business_error.BusinessError; 9763 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9764 } 9765 }) 9766 Button('startDownload') 9767 .onClick(() => { 9768 try { 9769 this.controller.startDownload('www.example.com'); 9770 } catch (error) { 9771 let e:business_error.BusinessError = error as business_error.BusinessError; 9772 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9773 } 9774 }) 9775 Button('resumeDownload') 9776 .onClick(() => { 9777 try { 9778 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9779 } catch (error) { 9780 let e:business_error.BusinessError = error as business_error.BusinessError; 9781 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9782 } 9783 }) 9784 Button('cancel') 9785 .onClick(() => { 9786 try { 9787 this.download.cancel(); 9788 } catch (error) { 9789 let e:business_error.BusinessError = error as business_error.BusinessError; 9790 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9791 } 9792 }) 9793 Button('pause') 9794 .onClick(() => { 9795 try { 9796 this.download.pause(); 9797 } catch (error) { 9798 let e:business_error.BusinessError = error as business_error.BusinessError; 9799 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9800 } 9801 }) 9802 Button('resume') 9803 .onClick(() => { 9804 try { 9805 this.download.resume(); 9806 } catch (error) { 9807 let e:business_error.BusinessError = error as business_error.BusinessError; 9808 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9809 } 9810 }) 9811 Web({ src: 'www.example.com', controller: this.controller }) 9812 } 9813 } 9814} 9815``` 9816 9817### onDownloadUpdated<sup>11+</sup> 9818 9819onDownloadUpdated(callback: Callback\<WebDownloadItem>): void 9820 9821下载过程中的回调,通过该回调的参数可以了解下载进度等信息。 9822 9823**系统能力:** SystemCapability.Web.Webview.Core 9824 9825**示例:** 9826 9827```ts 9828// xxx.ets 9829import web_webview from '@ohos.web.webview' 9830import business_error from '@ohos.base' 9831 9832@Entry 9833@Component 9834struct WebComponent { 9835 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9836 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9837 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9838 failedData: Uint8Array = new Uint8Array(); 9839 9840 build() { 9841 Column() { 9842 Button('setDownloadDelegate') 9843 .onClick(() => { 9844 try { 9845 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9846 console.log("will start a download."); 9847 // 传入一个下载路径,并开始下载。 9848 webDownloadItem.start("xxxxxxxx"); 9849 }) 9850 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9851 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9852 this.download = webDownloadItem; 9853 }) 9854 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9855 console.log("download failed guid: " + webDownloadItem.getGuid()); 9856 // 序列化失败的下载到一个字节数组。 9857 this.failedData = webDownloadItem.serialize(); 9858 }) 9859 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9860 console.log("download finish guid: " + webDownloadItem.getGuid()); 9861 }) 9862 this.controller.setDownloadDelegate(this.delegate); 9863 } catch (error) { 9864 let e:business_error.BusinessError = error as business_error.BusinessError; 9865 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9866 } 9867 }) 9868 Button('startDownload') 9869 .onClick(() => { 9870 try { 9871 this.controller.startDownload('www.example.com'); 9872 } catch (error) { 9873 let e:business_error.BusinessError = error as business_error.BusinessError; 9874 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9875 } 9876 }) 9877 Button('resumeDownload') 9878 .onClick(() => { 9879 try { 9880 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9881 } catch (error) { 9882 let e:business_error.BusinessError = error as business_error.BusinessError; 9883 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9884 } 9885 }) 9886 Button('cancel') 9887 .onClick(() => { 9888 try { 9889 this.download.cancel(); 9890 } catch (error) { 9891 let e:business_error.BusinessError = error as business_error.BusinessError; 9892 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9893 } 9894 }) 9895 Button('pause') 9896 .onClick(() => { 9897 try { 9898 this.download.pause(); 9899 } catch (error) { 9900 let e:business_error.BusinessError = error as business_error.BusinessError; 9901 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9902 } 9903 }) 9904 Button('resume') 9905 .onClick(() => { 9906 try { 9907 this.download.resume(); 9908 } catch (error) { 9909 let e:business_error.BusinessError = error as business_error.BusinessError; 9910 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9911 } 9912 }) 9913 Web({ src: 'www.example.com', controller: this.controller }) 9914 } 9915 } 9916} 9917``` 9918 9919### onDownloadFinish<sup>11+</sup> 9920 9921onDownloadFinish(callback: Callback\<WebDownloadItem>): void 9922 9923下载完成的通知。 9924 9925**系统能力:** SystemCapability.Web.Webview.Core 9926 9927**示例:** 9928 9929```ts 9930// xxx.ets 9931import web_webview from '@ohos.web.webview' 9932import business_error from '@ohos.base' 9933 9934@Entry 9935@Component 9936struct WebComponent { 9937 controller: web_webview.WebviewController = new web_webview.WebviewController(); 9938 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 9939 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 9940 failedData: Uint8Array = new Uint8Array(); 9941 9942 build() { 9943 Column() { 9944 Button('setDownloadDelegate') 9945 .onClick(() => { 9946 try { 9947 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 9948 console.log("will start a download."); 9949 // 传入一个下载路径,并开始下载。 9950 webDownloadItem.start("xxxxxxxx"); 9951 }) 9952 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 9953 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 9954 this.download = webDownloadItem; 9955 }) 9956 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 9957 console.log("download failed guid: " + webDownloadItem.getGuid()); 9958 // 序列化失败的下载到一个字节数组。 9959 this.failedData = webDownloadItem.serialize(); 9960 }) 9961 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 9962 console.log("download finish guid: " + webDownloadItem.getGuid()); 9963 }) 9964 this.controller.setDownloadDelegate(this.delegate); 9965 } catch (error) { 9966 let e:business_error.BusinessError = error as business_error.BusinessError; 9967 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9968 } 9969 }) 9970 Button('startDownload') 9971 .onClick(() => { 9972 try { 9973 this.controller.startDownload('www.example.com'); 9974 } catch (error) { 9975 let e:business_error.BusinessError = error as business_error.BusinessError; 9976 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9977 } 9978 }) 9979 Button('resumeDownload') 9980 .onClick(() => { 9981 try { 9982 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 9983 } catch (error) { 9984 let e:business_error.BusinessError = error as business_error.BusinessError; 9985 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9986 } 9987 }) 9988 Button('cancel') 9989 .onClick(() => { 9990 try { 9991 this.download.cancel(); 9992 } catch (error) { 9993 let e:business_error.BusinessError = error as business_error.BusinessError; 9994 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 9995 } 9996 }) 9997 Button('pause') 9998 .onClick(() => { 9999 try { 10000 this.download.pause(); 10001 } catch (error) { 10002 let e:business_error.BusinessError = error as business_error.BusinessError; 10003 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10004 } 10005 }) 10006 Button('resume') 10007 .onClick(() => { 10008 try { 10009 this.download.resume(); 10010 } catch (error) { 10011 let e:business_error.BusinessError = error as business_error.BusinessError; 10012 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10013 } 10014 }) 10015 Web({ src: 'www.example.com', controller: this.controller }) 10016 } 10017 } 10018} 10019``` 10020 10021### onDownloadFailed<sup>11+</sup> 10022 10023onDownloadFailed(callback: Callback\<WebDownloadItem>): void 10024 10025下载失败的通知。 10026 10027**系统能力:** SystemCapability.Web.Webview.Core 10028 10029**示例:** 10030 10031```ts 10032// xxx.ets 10033import web_webview from '@ohos.web.webview' 10034import business_error from '@ohos.base' 10035 10036@Entry 10037@Component 10038struct WebComponent { 10039 controller: web_webview.WebviewController = new web_webview.WebviewController(); 10040 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 10041 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 10042 failedData: Uint8Array = new Uint8Array(); 10043 10044 build() { 10045 Column() { 10046 Button('setDownloadDelegate') 10047 .onClick(() => { 10048 try { 10049 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 10050 console.log("will start a download."); 10051 // 传入一个下载路径,并开始下载。 10052 webDownloadItem.start("xxxxxxxx"); 10053 }) 10054 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 10055 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 10056 this.download = webDownloadItem; 10057 }) 10058 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 10059 console.log("download failed guid: " + webDownloadItem.getGuid()); 10060 // 序列化失败的下载到一个字节数组。 10061 this.failedData = webDownloadItem.serialize(); 10062 }) 10063 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 10064 console.log("download finish guid: " + webDownloadItem.getGuid()); 10065 }) 10066 this.controller.setDownloadDelegate(this.delegate); 10067 } catch (error) { 10068 let e:business_error.BusinessError = error as business_error.BusinessError; 10069 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10070 } 10071 }) 10072 Button('startDownload') 10073 .onClick(() => { 10074 try { 10075 this.controller.startDownload('www.example.com'); 10076 } catch (error) { 10077 let e:business_error.BusinessError = error as business_error.BusinessError; 10078 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10079 } 10080 }) 10081 Button('resumeDownload') 10082 .onClick(() => { 10083 try { 10084 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 10085 } catch (error) { 10086 let e:business_error.BusinessError = error as business_error.BusinessError; 10087 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10088 } 10089 }) 10090 Button('cancel') 10091 .onClick(() => { 10092 try { 10093 this.download.cancel(); 10094 } catch (error) { 10095 let e:business_error.BusinessError = error as business_error.BusinessError; 10096 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10097 } 10098 }) 10099 Button('pause') 10100 .onClick(() => { 10101 try { 10102 this.download.pause(); 10103 } catch (error) { 10104 let e:business_error.BusinessError = error as business_error.BusinessError; 10105 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10106 } 10107 }) 10108 Button('resume') 10109 .onClick(() => { 10110 try { 10111 this.download.resume(); 10112 } catch (error) { 10113 let e:business_error.BusinessError = error as business_error.BusinessError; 10114 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10115 } 10116 }) 10117 Web({ src: 'www.example.com', controller: this.controller }) 10118 } 10119 } 10120} 10121``` 10122 10123## WebDownloadManager<sup>11+</sup> 10124 10125可以通过该类提供的接口来恢复失败的下载任务。 10126 10127### setDownloadDelegate<sup>11+</sup> 10128 10129static setDownloadDelegate(delegate: WebDownloadDelegate): void 10130 10131设置用于接收从WebDownloadManager触发的下载进度的委托。 10132 10133**系统能力:** SystemCapability.Web.Webview.Core 10134 10135**参数:** 10136 10137| 参数名 | 类型 | 必填 | 说明 | 10138| ---------------| ------- | ---- | ------------- | 10139| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 10140 10141**示例:** 10142 10143```ts 10144// xxx.ets 10145import web_webview from '@ohos.web.webview' 10146import business_error from '@ohos.base' 10147 10148@Entry 10149@Component 10150struct WebComponent { 10151 controller: web_webview.WebviewController = new web_webview.WebviewController(); 10152 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 10153 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 10154 failedData: Uint8Array = new Uint8Array(); 10155 10156 build() { 10157 Column() { 10158 Button('setDownloadDelegate') 10159 .onClick(() => { 10160 try { 10161 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 10162 console.log("will start a download."); 10163 // 传入一个下载路径,并开始下载。 10164 webDownloadItem.start("xxxxxxxx"); 10165 }) 10166 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 10167 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 10168 this.download = webDownloadItem; 10169 }) 10170 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 10171 console.log("download failed guid: " + webDownloadItem.getGuid()); 10172 // 序列化失败的下载到一个字节数组。 10173 this.failedData = webDownloadItem.serialize(); 10174 }) 10175 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 10176 console.log("download finish guid: " + webDownloadItem.getGuid()); 10177 }) 10178 this.controller.setDownloadDelegate(this.delegate); 10179 } catch (error) { 10180 let e:business_error.BusinessError = error as business_error.BusinessError; 10181 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10182 } 10183 }) 10184 Button('startDownload') 10185 .onClick(() => { 10186 try { 10187 this.controller.startDownload('www.example.com'); 10188 } catch (error) { 10189 let e:business_error.BusinessError = error as business_error.BusinessError; 10190 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10191 } 10192 }) 10193 Button('resumeDownload') 10194 .onClick(() => { 10195 try { 10196 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 10197 } catch (error) { 10198 let e:business_error.BusinessError = error as business_error.BusinessError; 10199 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10200 } 10201 }) 10202 Button('cancel') 10203 .onClick(() => { 10204 try { 10205 this.download.cancel(); 10206 } catch (error) { 10207 let e:business_error.BusinessError = error as business_error.BusinessError; 10208 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10209 } 10210 }) 10211 Button('pause') 10212 .onClick(() => { 10213 try { 10214 this.download.pause(); 10215 } catch (error) { 10216 let e:business_error.BusinessError = error as business_error.BusinessError; 10217 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10218 } 10219 }) 10220 Button('resume') 10221 .onClick(() => { 10222 try { 10223 this.download.resume(); 10224 } catch (error) { 10225 let e:business_error.BusinessError = error as business_error.BusinessError; 10226 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10227 } 10228 }) 10229 Web({ src: 'www.example.com', controller: this.controller }) 10230 } 10231 } 10232} 10233``` 10234 10235### resumeDownload<sup>11+</sup> 10236 10237static resumeDownload(webDownloadItem: WebDownloadItem): void 10238 10239设置用于接收从WebDownloadManager触发的下载进度的委托。 10240 10241**系统能力:** SystemCapability.Web.Webview.Core 10242 10243**参数:** 10244 10245| 参数名 | 类型 | 必填 | 说明 | 10246| ---------------| ------- | ---- | ------------- | 10247| webDownloadItem | [WebDownloadItem](#webdownloaditem11) | 是 | 待恢复的下载任务。 | 10248 10249**错误码:** 10250 10251以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10252 10253| 错误码ID | 错误信息 | 10254| -------- | ------------------------------------- | 10255| 17100018 | No WebDownloadDelegate has been set yet. | 10256 10257**示例:** 10258 10259```ts 10260// xxx.ets 10261import web_webview from '@ohos.web.webview' 10262import business_error from '@ohos.base' 10263 10264@Entry 10265@Component 10266struct WebComponent { 10267 controller: web_webview.WebviewController = new web_webview.WebviewController(); 10268 delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate(); 10269 download: web_webview.WebDownloadItem = new web_webview.WebDownloadItem(); 10270 failedData: Uint8Array = new Uint8Array(); 10271 10272 build() { 10273 Column() { 10274 Button('setDownloadDelegate') 10275 .onClick(() => { 10276 try { 10277 this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => { 10278 console.log("will start a download."); 10279 // 传入一个下载路径,并开始下载。 10280 webDownloadItem.start("xxxxxxxx"); 10281 }) 10282 this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => { 10283 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 10284 this.download = webDownloadItem; 10285 }) 10286 this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => { 10287 console.log("download failed guid: " + webDownloadItem.getGuid()); 10288 // 序列化失败的下载到一个字节数组。 10289 this.failedData = webDownloadItem.serialize(); 10290 }) 10291 this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => { 10292 console.log("download finish guid: " + webDownloadItem.getGuid()); 10293 }) 10294 this.controller.setDownloadDelegate(this.delegate); 10295 } catch (error) { 10296 let e:business_error.BusinessError = error as business_error.BusinessError; 10297 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10298 } 10299 }) 10300 Button('startDownload') 10301 .onClick(() => { 10302 try { 10303 this.controller.startDownload('www.example.com'); 10304 } catch (error) { 10305 let e:business_error.BusinessError = error as business_error.BusinessError; 10306 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10307 } 10308 }) 10309 Button('resumeDownload') 10310 .onClick(() => { 10311 try { 10312 web_webview.WebDownloadManager.resumeDownload(web_webview.WebDownloadItem.deserialize(this.failedData)); 10313 } catch (error) { 10314 let e:business_error.BusinessError = error as business_error.BusinessError; 10315 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10316 } 10317 }) 10318 Button('cancel') 10319 .onClick(() => { 10320 try { 10321 this.download.cancel(); 10322 } catch (error) { 10323 let e:business_error.BusinessError = error as business_error.BusinessError; 10324 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10325 } 10326 }) 10327 Button('pause') 10328 .onClick(() => { 10329 try { 10330 this.download.pause(); 10331 } catch (error) { 10332 let e:business_error.BusinessError = error as business_error.BusinessError; 10333 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10334 } 10335 }) 10336 Button('resume') 10337 .onClick(() => { 10338 try { 10339 this.download.resume(); 10340 } catch (error) { 10341 let e:business_error.BusinessError = error as business_error.BusinessError; 10342 console.error(`ErrorCode: ${e.code}, Message: ${e.message}`); 10343 } 10344 }) 10345 Web({ src: 'www.example.com', controller: this.controller }) 10346 } 10347 } 10348} 10349``` 10350