1# @ohos.web.webview (Webview) 2 3@ohos.web.webview提供web控制能力,[Web](ts-basic-components-web.md)组件提供网页显示的能力。 4 5> **说明:** 6> 7> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> - 示例效果请以真机运行为准,当前IDE预览器不支持。 10 11## 需要权限 12 13访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。 14 15## 导入模块 16 17```ts 18import { webview } from '@kit.ArkWeb'; 19``` 20 21## once 22 23once(type: string, callback: Callback\<void\>): void 24 25订阅一次指定类型Web事件的回调。 26 27**系统能力:** SystemCapability.Web.Webview.Core 28 29**参数:** 30 31| 参数名 | 类型 | 必填 | 说明 | 32| ------- | ---------------- | ---- | -------------------- | 33| type | string | 是 | Web事件的类型,目前支持:"webInited"(Web初始化完成)。 | 34| callback | Callback\<void\> | 是 | 所订阅的回调函数。 | 35 36**错误码:** 37 38以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 39 40| 错误码ID | 错误信息 | 41| -------- | ----------------------- | 42| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 43 44**示例:** 45 46```ts 47// xxx.ets 48import { webview } from '@kit.ArkWeb'; 49 50webview.once("webInited", () => { 51 console.log("configCookieSync"); 52 webview.WebCookieManager.configCookieSync("https://www.example.com", "a=b"); 53}) 54 55@Entry 56@Component 57struct WebComponent { 58 controller: webview.WebviewController = new webview.WebviewController(); 59 60 build() { 61 Column() { 62 Web({ src: 'www.example.com', controller: this.controller }) 63 } 64 } 65} 66``` 67 68## WebMessagePort 69 70通过WebMessagePort可以进行消息的发送以及接收。 71 72### 属性 73 74**系统能力:** SystemCapability.Web.Webview.Core 75 76| 名称 | 类型 | 可读 | 可写 | 说明 | 77| ------------ | ------ | ---- | ---- | ------------------------------------------------| 78| isExtentionType<sup>10+</sup> | boolean | 是 | 是 | 创建WebMessagePort时是否指定使用扩展增强接口。 | 79 80### postMessageEvent 81 82postMessageEvent(message: WebMessage): void 83 84发送消息,必须先调用[onMessageEvent](#onmessageevent),否则会发送失败。完整示例代码参考[postMessage](#postmessage)。 85 86**系统能力:** SystemCapability.Web.Webview.Core 87 88**参数:** 89 90| 参数名 | 类型 | 必填 | 说明 | 91| ------- | ------ | ---- | :------------- | 92| message | [WebMessage](#webmessage) | 是 | 要发送的消息。 | 93 94**错误码:** 95 96以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 97 98| 错误码ID | 错误信息 | 99| -------- | ------------------------------------- | 100| 17100010 | Failed to post messages through the port. | 101| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 102 103**示例:** 104 105```ts 106// xxx.ets 107import { webview } from '@kit.ArkWeb'; 108import { BusinessError } from '@kit.BasicServicesKit'; 109 110@Entry 111@Component 112struct WebComponent { 113 controller: webview.WebviewController = new webview.WebviewController(); 114 ports: webview.WebMessagePort[] = []; 115 116 build() { 117 Column() { 118 Button('postMessageEvent') 119 .onClick(() => { 120 try { 121 this.ports = this.controller.createWebMessagePorts(); 122 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 123 this.ports[1].postMessageEvent("post message from ets to html5"); 124 } catch (error) { 125 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 126 } 127 }) 128 Web({ src: 'www.example.com', controller: this.controller }) 129 } 130 } 131} 132``` 133 134### onMessageEvent 135 136onMessageEvent(callback: (result: WebMessage) => void): void 137 138注册回调函数,接收HTML侧发送过来的消息。完整示例代码参考[postMessage](#postmessage)。 139 140**系统能力:** SystemCapability.Web.Webview.Core 141 142**参数:** 143 144| 参数名 | 类型 | 必填 | 说明 | 145| -------- | -------- | ---- | :------------------- | 146| callback | (result: [WebMessage](#webmessage)) => void | 是 | 接收到的消息。 | 147 148**错误码:** 149 150以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 151 152| 错误码ID | 错误信息 | 153| -------- | ----------------------------------------------- | 154| 17100006 | Failed to register a message event for the port.| 155| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.| 156 157**示例:** 158 159```ts 160// xxx.ets 161import { webview } from '@kit.ArkWeb'; 162import { BusinessError } from '@kit.BasicServicesKit'; 163 164@Entry 165@Component 166struct WebComponent { 167 controller: webview.WebviewController = new webview.WebviewController(); 168 ports: webview.WebMessagePort[] = []; 169 170 build() { 171 Column() { 172 Button('onMessageEvent') 173 .onClick(() => { 174 try { 175 this.ports = this.controller.createWebMessagePorts(); 176 this.ports[1].onMessageEvent((msg) => { 177 if (typeof (msg) == "string") { 178 console.log("received string message from html5, string is:" + msg); 179 } else if (typeof (msg) == "object") { 180 if (msg instanceof ArrayBuffer) { 181 console.log("received arraybuffer from html5, length is:" + msg.byteLength); 182 } else { 183 console.log("not support"); 184 } 185 } else { 186 console.log("not support"); 187 } 188 }) 189 } catch (error) { 190 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 191 } 192 }) 193 Web({ src: 'www.example.com', controller: this.controller }) 194 } 195 } 196} 197``` 198 199### postMessageEventExt<sup>10+</sup> 200 201postMessageEventExt(message: WebMessageExt): void 202 203发送消息,必须先调用[onMessageEventExt](#onmessageeventext10),否则会发送失败。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 204 205**系统能力:** SystemCapability.Web.Webview.Core 206 207**参数:** 208 209| 参数名 | 类型 | 必填 | 说明 | 210| ------- | ------ | ---- | :------------- | 211| message | [WebMessageExt](#webmessageext10) | 是 | 要发送的消息。 | 212 213**错误码:** 214 215以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 216 217| 错误码ID | 错误信息 | 218| -------- | ------------------------------------- | 219| 17100010 | Failed to post messages through the port. | 220| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 221 222### onMessageEventExt<sup>10+</sup> 223 224onMessageEventExt(callback: (result: WebMessageExt) => void): void 225 226注册回调函数,接收HTML5侧发送过来的消息。 227 228**系统能力:** SystemCapability.Web.Webview.Core 229 230**参数:** 231 232| 参数名 | 类型 | 必填 | 说明 | 233| -------- | -------- | ---- | :------------------- | 234| callback | (result: [WebMessageExt](#webmessageext10)) => void | 是 | 接收到的消息。 | 235 236**错误码:** 237 238以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 239 240| 错误码ID | 错误信息 | 241| -------- | ----------------------------------------------- | 242| 17100006 | Failed to register a message event for the port. | 243| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 244 245**示例:** 246 247```ts 248// xxx.ets 249import { webview } from '@kit.ArkWeb'; 250import { BusinessError } from '@kit.BasicServicesKit'; 251 252class TestObj { 253 test(str: string): ArrayBuffer { 254 let buf = new ArrayBuffer(str.length); 255 let buff = new Uint8Array(buf); 256 257 for (let i = 0; i < str.length; i++) { 258 buff[i] = str.charCodeAt(i); 259 } 260 return buf; 261 } 262} 263 264// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。 265@Entry 266@Component 267struct WebComponent { 268 controller: webview.WebviewController = new webview.WebviewController(); 269 ports: webview.WebMessagePort[] = []; 270 nativePort: webview.WebMessagePort | null = null; 271 @State msg1: string = ""; 272 @State msg2: string = ""; 273 message: webview.WebMessageExt = new webview.WebMessageExt(); 274 @State testObjtest: TestObj = new TestObj(); 275 276 build() { 277 Column() { 278 Text(this.msg1).fontSize(16) 279 Text(this.msg2).fontSize(16) 280 Button('SendToH5 setString').margin({ 281 right: 800, 282 }) 283 .onClick(() => { 284 // 使用本侧端口发送消息给HTML5 285 try { 286 console.log("In ArkTS side send true start"); 287 if (this.nativePort) { 288 this.message.setType(1); 289 this.message.setString("helloFromEts"); 290 this.nativePort.postMessageEventExt(this.message); 291 } 292 } 293 catch (error) { 294 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 295 } 296 }) 297 Button('SendToH5 setNumber').margin({ 298 top: 10, 299 right: 800, 300 }) 301 .onClick(() => { 302 // 使用本侧端口发送消息给HTML5 303 try { 304 console.log("In ArkTS side send true start"); 305 if (this.nativePort) { 306 this.message.setType(2); 307 this.message.setNumber(12345); 308 this.nativePort.postMessageEventExt(this.message); 309 } 310 } 311 catch (error) { 312 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 313 } 314 }) 315 Button('SendToH5 setBoolean').margin({ 316 top: -90, 317 }) 318 .onClick(() => { 319 // 使用本侧端口发送消息给HTML5 320 try { 321 console.log("In ArkTS side send true start"); 322 if (this.nativePort) { 323 this.message.setType(3); 324 this.message.setBoolean(true); 325 this.nativePort.postMessageEventExt(this.message); 326 } 327 } 328 catch (error) { 329 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 330 } 331 }) 332 Button('SendToH5 setArrayBuffer').margin({ 333 top: 10, 334 }) 335 .onClick(() => { 336 // 使用本侧端口发送消息给HTML5 337 try { 338 console.log("In ArkTS side send true start"); 339 if (this.nativePort) { 340 this.message.setType(4); 341 this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test")); 342 this.nativePort.postMessageEventExt(this.message); 343 } 344 } 345 catch (error) { 346 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 347 } 348 }) 349 Button('SendToH5 setArray').margin({ 350 top: -90, 351 left: 800, 352 }) 353 .onClick(() => { 354 // 使用本侧端口发送消息给HTML5 355 try { 356 console.log("In ArkTS side send true start"); 357 if (this.nativePort) { 358 this.message.setType(5); 359 this.message.setArray([1, 2, 3]); 360 this.nativePort.postMessageEventExt(this.message); 361 } 362 } 363 catch (error) { 364 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 365 } 366 }) 367 Button('SendToH5 setError').margin({ 368 top: 10, 369 left: 800, 370 }) 371 .onClick(() => { 372 // 使用本侧端口发送消息给HTML5 373 try { 374 console.log("In ArkTS side send true start"); 375 throw new ReferenceError("ReferenceError"); 376 } 377 catch (error) { 378 if (this.nativePort) { 379 this.message.setType(6); 380 this.message.setError(error); 381 this.nativePort.postMessageEventExt(this.message); 382 } 383 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 384 } 385 }) 386 387 Web({ src: $rawfile('index.html'), controller: this.controller }) 388 .onPageEnd(() => { 389 console.log("In ArkTS side message onPageEnd init message channel"); 390 // 1. 创建消息端口 391 this.ports = this.controller.createWebMessagePorts(true); 392 // 2. 发送端口1到HTML5 393 this.controller.postMessage("init_web_messageport", [this.ports[1]], "*"); 394 // 3. 保存端口0到本地 395 this.nativePort = this.ports[0]; 396 // 4. 设置回调函数 397 this.nativePort.onMessageEventExt((result) => { 398 console.log("In ArkTS side got message"); 399 try { 400 let type = result.getType(); 401 console.log("In ArkTS side getType:" + type); 402 switch (type) { 403 case webview.WebMessageType.STRING: { 404 this.msg1 = "result type:" + typeof (result.getString()); 405 this.msg2 = "result getString:" + ((result.getString())); 406 break; 407 } 408 case webview.WebMessageType.NUMBER: { 409 this.msg1 = "result type:" + typeof (result.getNumber()); 410 this.msg2 = "result getNumber:" + ((result.getNumber())); 411 break; 412 } 413 case webview.WebMessageType.BOOLEAN: { 414 this.msg1 = "result type:" + typeof (result.getBoolean()); 415 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 416 break; 417 } 418 case webview.WebMessageType.ARRAY_BUFFER: { 419 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 420 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 421 break; 422 } 423 case webview.WebMessageType.ARRAY: { 424 this.msg1 = "result type:" + typeof (result.getArray()); 425 this.msg2 = "result getArray:" + result.getArray(); 426 break; 427 } 428 case webview.WebMessageType.ERROR: { 429 this.msg1 = "result type:" + typeof (result.getError()); 430 this.msg2 = "result getError:" + result.getError(); 431 break; 432 } 433 default: { 434 this.msg1 = "default break, type:" + type; 435 break; 436 } 437 } 438 } 439 catch (error) { 440 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 441 } 442 }); 443 }) 444 } 445 } 446} 447``` 448 449加载的html文件。 450```html 451<!--index.html--> 452<!DOCTYPE html> 453<html lang="en-gb"> 454<head> 455 <title>WebView MessagePort Demo</title> 456</head> 457 458<body> 459<h1>Html5 Send and Receive Message</h1> 460<h3 id="msg">Receive string:</h3> 461<h3 id="msg2">Receive arraybuffer:</h3> 462<div style="font-size: 10pt; text-align: center;"> 463 <input type="button" value="Send String" onclick="postStringToApp();" /><br/> 464</div> 465</body> 466<script src="index.js"></script> 467</html> 468``` 469 470```js 471//index.js 472var h5Port; 473window.addEventListener('message', function(event) { 474 if (event.data == 'init_web_messageport') { 475 if(event.ports[0] != null) { 476 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 477 h5Port.onmessage = function(event) { 478 console.log("hwd In html got message"); 479 // 2. 接收ets侧发送过来的消息. 480 var result = event.data; 481 console.log("In html got message, typeof: ", typeof(result)); 482 console.log("In html got message, result: ", (result)); 483 if (typeof(result) == "string") { 484 console.log("In html got message, String: ", result); 485 document.getElementById("msg").innerHTML = "String:" + result; 486 } else if (typeof(result) == "number") { 487 console.log("In html side got message, number: ", result); 488 document.getElementById("msg").innerHTML = "Number:" + result; 489 } else if (typeof(result) == "boolean") { 490 console.log("In html side got message, boolean: ", result); 491 document.getElementById("msg").innerHTML = "Boolean:" + result; 492 } else if (typeof(result) == "object") { 493 if (result instanceof ArrayBuffer) { 494 document.getElementById("msg2").innerHTML = "ArrayBuffer:" + result.byteLength; 495 console.log("In html got message, byteLength: ", result.byteLength); 496 } else if (result instanceof Error) { 497 console.log("In html error message, err:" + (result)); 498 console.log("In html error message, typeof err:" + typeof(result)); 499 document.getElementById("msg2").innerHTML = "Error:" + result.name + ", msg:" + result.message; 500 } else if (result instanceof Array) { 501 console.log("In html got message, Array"); 502 console.log("In html got message, Array length:" + result.length); 503 console.log("In html got message, Array[0]:" + (result[0])); 504 console.log("In html got message, typeof Array[0]:" + typeof(result[0])); 505 document.getElementById("msg2").innerHTML = "Array len:" + result.length + ", value:" + result; 506 } else { 507 console.log("In html got message, not any instance of support type"); 508 document.getElementById("msg").innerHTML = "not any instance of support type"; 509 } 510 } else { 511 console.log("In html got message, not support type"); 512 document.getElementById("msg").innerHTML = "not support type"; 513 } 514 } 515 h5Port.onmessageerror = (event) => { 516 console.error(`hwd In html Error receiving message: ${event}`); 517 }; 518 } 519 } 520}) 521 522// 使用h5Port往ets侧发送String类型的消息. 523function postStringToApp() { 524 if (h5Port) { 525 console.log("In html send string message"); 526 h5Port.postMessage("hello"); 527 console.log("In html send string message end"); 528 } else { 529 console.error("In html h5port is null, please init first"); 530 } 531} 532``` 533 534### close 535 536close(): void 537 538关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。 539 540**系统能力:** SystemCapability.Web.Webview.Core 541 542**示例:** 543 544```ts 545// xxx.ets 546import { webview } from '@kit.ArkWeb'; 547import { BusinessError } from '@kit.BasicServicesKit'; 548 549@Entry 550@Component 551struct WebComponent { 552 controller: webview.WebviewController = new webview.WebviewController(); 553 msgPort: webview.WebMessagePort[] = []; 554 555 build() { 556 Column() { 557 // 先使用createWebMessagePorts创建端口。 558 Button('createWebMessagePorts') 559 .onClick(() => { 560 try { 561 this.msgPort = this.controller.createWebMessagePorts(); 562 console.log("createWebMessagePorts size:" + this.msgPort.length) 563 } catch (error) { 564 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).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 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 577 } 578 }) 579 Web({ src: 'www.example.com', controller: this.controller }) 580 } 581 } 582} 583``` 584 585## WebviewController 586 587通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 588 589### constructor<sup>11+</sup> 590 591constructor(webTag?: string) 592 593用于创建 WebviewController 对象的构造函数。 594 595> **说明:** 596> 597> webTag是需要开发者自定义的一个标记,即开发者给web的一个字符串形式参数,用来做标记。 598 599**系统能力:** SystemCapability.Web.Webview.Core 600 601**参数:** 602 603| 参数名 | 类型 | 必填 | 说明 | 604| ---------- | ------ | ---- | -------------------------------- | 605| webTag | string | 否 | 指定了 Web 组件的名称,默认为 Empty。 | 606 607**示例:** 608 609```ts 610// xxx.ets 611import { webview } from '@kit.ArkWeb'; 612import { BusinessError } from '@kit.BasicServicesKit'; 613 614class WebObj { 615 constructor() { 616 } 617 618 webTest(): string { 619 console.log('Web test'); 620 return "Web test"; 621 } 622 623 webString(): void { 624 console.log('Web test toString'); 625 } 626} 627 628@Entry 629@Component 630struct WebComponent { 631 controller: webview.WebviewController = new webview.WebviewController() 632 @State webTestObj: WebObj = new WebObj(); 633 634 build() { 635 Column() { 636 Button('refresh') 637 .onClick(() => { 638 try { 639 this.controller.refresh(); 640 } catch (error) { 641 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 642 } 643 }) 644 Web({ src: '', controller: this.controller }) 645 .javaScriptAccess(true) 646 .onControllerAttached(() => { 647 this.controller.loadUrl($rawfile("index.html")); 648 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 649 }) 650 } 651 } 652} 653``` 654 655加载的html文件。 656```html 657<!-- index.html --> 658<!DOCTYPE html> 659<html> 660 <meta charset="utf-8"> 661 <body> 662 <button type="button" onclick="htmlTest()">Click Me!</button> 663 <p id="demo"></p> 664 <p id="webDemo"></p> 665 </body> 666 <script type="text/javascript"> 667 function htmlTest() { 668 // This function call expects to return "Web test" 669 let webStr = objTestName.webTest(); 670 document.getElementById("webDemo").innerHTML=webStr; 671 console.log('objTestName.webTest result:'+ webStr) 672 } 673</script> 674</html> 675``` 676 677### initializeWebEngine 678 679static initializeWebEngine(): void 680 681在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。 682 683> **说明:** 684> 685> - initializeWebEngine不支持在异步线程中调用,否则会造成崩溃。 686> - initializeWebEngine全局生效,在整个APP生命周期中调用一次即可,不需要重复调用。 687 688**系统能力:** SystemCapability.Web.Webview.Core 689 690**示例:** 691 692本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。 693 694```ts 695// xxx.ets 696import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 697import { webview } from '@kit.ArkWeb'; 698 699export default class EntryAbility extends UIAbility { 700 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 701 console.log("EntryAbility onCreate") 702 webview.WebviewController.initializeWebEngine() 703 console.log("EntryAbility onCreate done") 704 } 705} 706``` 707 708### setHttpDns<sup>10+</sup> 709 710static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void 711 712设置Web组件是否使用HTTPDNS解析dns。 713 714**系统能力:** SystemCapability.Web.Webview.Core 715 716**参数:** 717 718| 参数名 | 类型 | 必填 | 说明 | 719| ------------------ | ------- | ---- | ------------- | 720| secureDnsMode | [SecureDnsMode](#securednsmode10) | 是 | 使用HTTPDNS的模式。| 721| secureDnsConfig | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 | 722 723**错误码:** 724 725以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 726 727| 错误码ID | 错误信息 | 728| -------- | ----------------------- | 729| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 730 731**示例:** 732 733```ts 734// xxx.ets 735import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 736import { webview } from '@kit.ArkWeb'; 737import { BusinessError } from '@kit.BasicServicesKit'; 738 739export default class EntryAbility extends UIAbility { 740 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 741 console.log("EntryAbility onCreate") 742 try { 743 webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, "https://example1.test") 744 } catch (error) { 745 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 746 } 747 748 AppStorage.setOrCreate("abilityWant", want); 749 console.log("EntryAbility onCreate done") 750 } 751} 752``` 753 754### setWebDebuggingAccess 755 756static setWebDebuggingAccess(webDebuggingAccess: boolean): void 757 758设置是否启用网页调试功能,默认不开启。详情请参考[Devtools工具](../../web/web-debugging-with-devtools.md)。 759 760安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。 761 762**系统能力:** SystemCapability.Web.Webview.Core 763 764**参数:** 765 766| 参数名 | 类型 | 必填 | 说明 | 767| ------------------ | ------- | ---- | ------------- | 768| webDebuggingAccess | boolean | 是 | 设置是否启用网页调试功能。| 769 770**错误码:** 771 772以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 773 774| 错误码ID | 错误信息 | 775| -------- | ------------------------------------------------------------ | 776| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 777 778**示例:** 779 780```ts 781// xxx.ets 782import { webview } from '@kit.ArkWeb'; 783import { BusinessError } from '@kit.BasicServicesKit'; 784 785@Entry 786@Component 787struct WebComponent { 788 controller: webview.WebviewController = new webview.WebviewController(); 789 790 aboutToAppear(): void { 791 try { 792 webview.WebviewController.setWebDebuggingAccess(true); 793 } catch (error) { 794 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 795 } 796 } 797 798 build() { 799 Column() { 800 Web({ src: 'www.example.com', controller: this.controller }) 801 } 802 } 803} 804``` 805 806### loadUrl 807 808loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 809 810加载指定的URL。 811 812**系统能力:** SystemCapability.Web.Webview.Core 813 814**参数:** 815 816| 参数名 | 类型 | 必填 | 说明 | 817| ------- | ---------------- | ---- | :-------------------- | 818| url | string \| Resource | 是 | 需要加载的 URL。 | 819| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 820 821**错误码:** 822 823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 824 825| 错误码ID | 错误信息 | 826| -------- | ------------------------------------------------------------ | 827| 17100001 | Init error. The WebviewController must be associated with a Web component. | 828| 17100002 | Invalid url. | 829| 17100003 | Invalid resource path or file type. | 830| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 831 832**示例:** 833 834```ts 835// xxx.ets 836import { webview } from '@kit.ArkWeb'; 837import { BusinessError } from '@kit.BasicServicesKit'; 838 839@Entry 840@Component 841struct WebComponent { 842 controller: webview.WebviewController = new webview.WebviewController(); 843 844 build() { 845 Column() { 846 Button('loadUrl') 847 .onClick(() => { 848 try { 849 // 需要加载的URL是string类型。 850 this.controller.loadUrl('www.example.com'); 851 } catch (error) { 852 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 853 } 854 }) 855 Web({ src: 'www.example.com', controller: this.controller }) 856 } 857 } 858} 859``` 860 861```ts 862// xxx.ets 863import { webview } from '@kit.ArkWeb'; 864import { BusinessError } from '@kit.BasicServicesKit'; 865 866@Entry 867@Component 868struct WebComponent { 869 controller: webview.WebviewController = new webview.WebviewController(); 870 871 build() { 872 Column() { 873 Button('loadUrl') 874 .onClick(() => { 875 try { 876 // 带参数headers。 877 this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]); 878 } catch (error) { 879 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 880 } 881 }) 882 Web({ src: 'www.example.com', controller: this.controller }) 883 } 884 } 885} 886``` 887 888加载本地网页,加载本地资源文件有三种方式。 889 8901.$rawfile方式。 891```ts 892// xxx.ets 893import { webview } from '@kit.ArkWeb'; 894import { BusinessError } from '@kit.BasicServicesKit'; 895 896@Entry 897@Component 898struct WebComponent { 899 controller: webview.WebviewController = new webview.WebviewController(); 900 901 build() { 902 Column() { 903 Button('loadUrl') 904 .onClick(() => { 905 try { 906 // 通过$rawfile加载本地资源文件。 907 this.controller.loadUrl($rawfile('index.html')); 908 } catch (error) { 909 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 910 } 911 }) 912 Web({ src: 'www.example.com', controller: this.controller }) 913 } 914 } 915} 916``` 917 9182.resources协议,适用Webview加载带有"#"路由的链接。 919```ts 920// xxx.ets 921import { webview } from '@kit.ArkWeb'; 922import { BusinessError } from '@kit.BasicServicesKit'; 923 924@Entry 925@Component 926struct WebComponent { 927 controller: webview.WebviewController = new webview.WebviewController(); 928 929 build() { 930 Column() { 931 Button('loadUrl') 932 .onClick(() => { 933 try { 934 // 通过resource协议加载本地资源文件。 935 this.controller.loadUrl("resource://rawfile/index.html"); 936 } catch (error) { 937 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 938 } 939 }) 940 Web({ src: 'www.example.com', controller: this.controller }) 941 } 942 } 943} 944``` 945 9463.通过沙箱路径加载本地文件,可以参考[web](ts-basic-components-web.md#web)加载沙箱路径的示例代码。 947 948加载的html文件。 949```html 950<!-- index.html --> 951<!DOCTYPE html> 952<html> 953 <body> 954 <p>Hello World</p> 955 </body> 956</html> 957``` 958 959### loadData 960 961loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void 962 963加载指定的数据。 964 965baseUrl与historyUrl同时为空的情况下: 966 967encoding如果为非base64(包括空值),则假定数据对安全URL字符范围内的八位字节使用ASCII编码,对该范围外的八位字节使用URL的标准%xx十六进制编码。 968 969data数据必须使用base64编码或将内容中的任何#字符编码为%23。否则#将被视为内容的结尾而剩余的文本将被用作文档片段标识符。 970 971**系统能力:** SystemCapability.Web.Webview.Core 972 973**参数:** 974 975| 参数名 | 类型 | 必填 | 说明 | 976| ---------- | ------ | ---- | ------------------------------------------------------------ | 977| data | string | 是 | 按照"base64"或者"URL"编码后的一段字符串。 | 978| mimeType | string | 是 | 媒体类型(MIME)。 | 979| encoding | string | 是 | 编码类型,具体为"base64"或者"URL"编码。 | 980| baseUrl | string | 否 | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。 | 981| historyUrl | string | 否 | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 | 982 983> **说明:** 984> 985> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。 986> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。 987> 若html中的富文本中带有注入#等特殊字符,建议将baseUrl和historyUrl两个参数的值设置为"空格"。 988 989**错误码:** 990 991以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 992 993| 错误码ID | 错误信息 | 994| -------- | ------------------------------------------------------------ | 995| 17100001 | Init error. The WebviewController must be associated with a Web component. | 996| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 997 998**示例:** 999 1000baseUrl与historyUrl同时为空。 1001```ts 1002// xxx.ets 1003import { webview } from '@kit.ArkWeb'; 1004import { BusinessError } from '@kit.BasicServicesKit'; 1005 1006@Entry 1007@Component 1008struct WebComponent { 1009 controller: webview.WebviewController = new webview.WebviewController(); 1010 1011 build() { 1012 Column() { 1013 Button('loadData') 1014 .onClick(() => { 1015 try { 1016 this.controller.loadData( 1017 "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 1018 "text/html", 1019 // UTF-8为charset。 1020 "UTF-8" 1021 ); 1022 } catch (error) { 1023 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1024 } 1025 }) 1026 Web({ src: 'www.example.com', controller: this.controller }) 1027 } 1028 } 1029} 1030``` 1031 1032```ts 1033// xxx.ets 1034import { webview } from '@kit.ArkWeb'; 1035import { BusinessError } from '@kit.BasicServicesKit'; 1036 1037@Entry 1038@Component 1039struct WebComponent { 1040 controller: webview.WebviewController = new webview.WebviewController(); 1041 1042 build() { 1043 Column() { 1044 Button('loadData') 1045 .onClick(() => { 1046 try { 1047 this.controller.loadData( 1048 // Coding tests通过base64编码后的字符串。 1049 "Q29kaW5nIHRlc3Rz", 1050 "text/html", 1051 "base64" 1052 ); 1053 } catch (error) { 1054 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1055 } 1056 }) 1057 Web({ src: 'www.example.com', controller: this.controller }) 1058 } 1059 } 1060} 1061``` 1062 1063加载本地资源 1064```ts 1065// xxx.ets 1066import { webview } from '@kit.ArkWeb'; 1067import { BusinessError } from '@kit.BasicServicesKit'; 1068 1069@Entry 1070@Component 1071struct WebComponent { 1072 controller: webview.WebviewController = new webview.WebviewController(); 1073 updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>' 1074 1075 build() { 1076 Column() { 1077 Button('loadData') 1078 .onClick(() => { 1079 try { 1080 // UTF-8为charset。 1081 this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " "); 1082 } catch (error) { 1083 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1084 } 1085 }) 1086 Web({ src: 'www.example.com', controller: this.controller }) 1087 } 1088 } 1089} 1090``` 1091 1092### accessForward 1093 1094accessForward(): boolean 1095 1096当前页面是否可前进,即当前页面是否有前进历史记录。 1097 1098**系统能力:** SystemCapability.Web.Webview.Core 1099 1100**返回值:** 1101 1102| 类型 | 说明 | 1103| ------- | --------------------------------- | 1104| boolean | 可以前进返回true,否则返回false。 | 1105 1106**错误码:** 1107 1108以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1109 1110| 错误码ID | 错误信息 | 1111| -------- | ------------------------------------------------------------ | 1112| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1113 1114**示例:** 1115 1116```ts 1117// xxx.ets 1118import { webview } from '@kit.ArkWeb'; 1119import { BusinessError } from '@kit.BasicServicesKit'; 1120 1121@Entry 1122@Component 1123struct WebComponent { 1124 controller: webview.WebviewController = new webview.WebviewController(); 1125 1126 build() { 1127 Column() { 1128 Button('accessForward') 1129 .onClick(() => { 1130 try { 1131 let result = this.controller.accessForward(); 1132 console.log('result:' + result); 1133 } catch (error) { 1134 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1135 } 1136 }) 1137 Web({ src: 'www.example.com', controller: this.controller }) 1138 } 1139 } 1140} 1141``` 1142 1143### forward 1144 1145forward(): void 1146 1147按照历史栈,前进一个页面。一般结合accessForward一起使用。 1148 1149**系统能力:** SystemCapability.Web.Webview.Core 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 { webview } from '@kit.ArkWeb'; 1164import { BusinessError } from '@kit.BasicServicesKit'; 1165 1166@Entry 1167@Component 1168struct WebComponent { 1169 controller: webview.WebviewController = new webview.WebviewController(); 1170 1171 build() { 1172 Column() { 1173 Button('forward') 1174 .onClick(() => { 1175 try { 1176 this.controller.forward(); 1177 } catch (error) { 1178 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1179 } 1180 }) 1181 Web({ src: 'www.example.com', controller: this.controller }) 1182 } 1183 } 1184} 1185``` 1186 1187### accessBackward 1188 1189accessBackward(): boolean 1190 1191当前页面是否可后退,即当前页面是否有返回历史记录。 1192 1193**系统能力:** SystemCapability.Web.Webview.Core 1194 1195**返回值:** 1196 1197| 类型 | 说明 | 1198| ------- | -------------------------------- | 1199| boolean | 可以后退返回true,否则返回false。 | 1200 1201**错误码:** 1202 1203以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1204 1205| 错误码ID | 错误信息 | 1206| -------- | ------------------------------------------------------------ | 1207| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1208 1209**示例:** 1210 1211```ts 1212// xxx.ets 1213import { webview } from '@kit.ArkWeb'; 1214import { BusinessError } from '@kit.BasicServicesKit'; 1215 1216@Entry 1217@Component 1218struct WebComponent { 1219 controller: webview.WebviewController = new webview.WebviewController(); 1220 1221 build() { 1222 Column() { 1223 Button('accessBackward') 1224 .onClick(() => { 1225 try { 1226 let result = this.controller.accessBackward(); 1227 console.log('result:' + result); 1228 } catch (error) { 1229 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1230 } 1231 }) 1232 Web({ src: 'www.example.com', controller: this.controller }) 1233 } 1234 } 1235} 1236``` 1237 1238### backward 1239 1240backward(): void 1241 1242按照历史栈,后退一个页面。一般结合accessBackward一起使用。 1243 1244**系统能力:** SystemCapability.Web.Webview.Core 1245 1246**错误码:** 1247 1248以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1249 1250| 错误码ID | 错误信息 | 1251| -------- | ------------------------------------------------------------ | 1252| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1253 1254**示例:** 1255 1256```ts 1257// xxx.ets 1258import { webview } from '@kit.ArkWeb'; 1259import { BusinessError } from '@kit.BasicServicesKit'; 1260 1261@Entry 1262@Component 1263struct WebComponent { 1264 controller: webview.WebviewController = new webview.WebviewController(); 1265 1266 build() { 1267 Column() { 1268 Button('backward') 1269 .onClick(() => { 1270 try { 1271 this.controller.backward(); 1272 } catch (error) { 1273 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1274 } 1275 }) 1276 Web({ src: 'www.example.com', controller: this.controller }) 1277 } 1278 } 1279} 1280``` 1281 1282### onActive 1283 1284onActive(): void 1285 1286调用此接口通知Web组件进入前台激活状态。 1287<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。 1288 1289**系统能力:** SystemCapability.Web.Webview.Core 1290 1291**错误码:** 1292 1293以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1294 1295| 错误码ID | 错误信息 | 1296| -------- | ------------------------------------------------------------ | 1297| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1298 1299**示例:** 1300 1301```ts 1302// xxx.ets 1303import { webview } from '@kit.ArkWeb'; 1304import { BusinessError } from '@kit.BasicServicesKit'; 1305 1306@Entry 1307@Component 1308struct WebComponent { 1309 controller: webview.WebviewController = new webview.WebviewController(); 1310 1311 build() { 1312 Column() { 1313 Button('onActive') 1314 .onClick(() => { 1315 try { 1316 this.controller.onActive(); 1317 } catch (error) { 1318 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1319 } 1320 }) 1321 Web({ src: 'www.example.com', controller: this.controller }) 1322 } 1323 } 1324} 1325``` 1326 1327### onInactive 1328 1329onInactive(): void 1330 1331调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。 1332 1333此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。 1334 1335**系统能力:** SystemCapability.Web.Webview.Core 1336 1337**错误码:** 1338 1339以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1340 1341| 错误码ID | 错误信息 | 1342| -------- | ------------------------------------------------------------ | 1343| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1344 1345**示例:** 1346 1347```ts 1348// xxx.ets 1349import { webview } from '@kit.ArkWeb'; 1350import { BusinessError } from '@kit.BasicServicesKit'; 1351 1352@Entry 1353@Component 1354struct WebComponent { 1355 controller: webview.WebviewController = new webview.WebviewController(); 1356 1357 build() { 1358 Column() { 1359 Button('onInactive') 1360 .onClick(() => { 1361 try { 1362 this.controller.onInactive(); 1363 } catch (error) { 1364 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1365 } 1366 }) 1367 Web({ src: 'www.example.com', controller: this.controller }) 1368 } 1369 } 1370} 1371``` 1372 1373### refresh 1374refresh(): void 1375 1376调用此接口通知Web组件刷新网页。 1377 1378**系统能力:** SystemCapability.Web.Webview.Core 1379 1380**错误码:** 1381 1382以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1383 1384| 错误码ID | 错误信息 | 1385| -------- | ------------------------------------------------------------ | 1386| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1387 1388**示例:** 1389 1390```ts 1391// xxx.ets 1392import { webview } from '@kit.ArkWeb'; 1393import { BusinessError } from '@kit.BasicServicesKit'; 1394 1395@Entry 1396@Component 1397struct WebComponent { 1398 controller: webview.WebviewController = new webview.WebviewController(); 1399 1400 build() { 1401 Column() { 1402 Button('refresh') 1403 .onClick(() => { 1404 try { 1405 this.controller.refresh(); 1406 } catch (error) { 1407 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1408 } 1409 }) 1410 Web({ src: 'www.example.com', controller: this.controller }) 1411 } 1412 } 1413} 1414``` 1415 1416### accessStep 1417 1418accessStep(step: number): boolean 1419 1420当前页面是否可前进或者后退给定的step步。 1421 1422**系统能力:** SystemCapability.Web.Webview.Core 1423 1424**参数:** 1425 1426| 参数名 | 类型 | 必填 | 说明 | 1427| ------ | -------- | ---- | ------------------------------------------ | 1428| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 1429 1430**返回值:** 1431 1432| 类型 | 说明 | 1433| ------- | ------------------ | 1434| boolean | 页面是否前进或后退 | 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| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1444 1445**示例:** 1446 1447```ts 1448// xxx.ets 1449import { webview } from '@kit.ArkWeb'; 1450import { BusinessError } from '@kit.BasicServicesKit'; 1451 1452@Entry 1453@Component 1454struct WebComponent { 1455 controller: webview.WebviewController = new webview.WebviewController(); 1456 @State steps: number = 2; 1457 1458 build() { 1459 Column() { 1460 Button('accessStep') 1461 .onClick(() => { 1462 try { 1463 let result = this.controller.accessStep(this.steps); 1464 console.log('result:' + result); 1465 } catch (error) { 1466 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1467 } 1468 }) 1469 Web({ src: 'www.example.com', controller: this.controller }) 1470 } 1471 } 1472} 1473``` 1474 1475### clearHistory 1476 1477clearHistory(): void 1478 1479删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。 1480 1481**系统能力:** SystemCapability.Web.Webview.Core 1482 1483**错误码:** 1484 1485以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1486 1487| 错误码ID | 错误信息 | 1488| -------- | ------------------------------------------------------------ | 1489| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1490 1491**示例:** 1492 1493```ts 1494// xxx.ets 1495import { webview } from '@kit.ArkWeb'; 1496import { BusinessError } from '@kit.BasicServicesKit'; 1497 1498@Entry 1499@Component 1500struct WebComponent { 1501 controller: webview.WebviewController = new webview.WebviewController(); 1502 1503 build() { 1504 Column() { 1505 Button('clearHistory') 1506 .onClick(() => { 1507 try { 1508 this.controller.clearHistory(); 1509 } catch (error) { 1510 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1511 } 1512 }) 1513 Web({ src: 'www.example.com', controller: this.controller }) 1514 } 1515 } 1516} 1517``` 1518 1519### getHitTest 1520 1521getHitTest(): WebHitTestType 1522 1523获取当前被点击区域的元素类型。 1524 1525**系统能力:** SystemCapability.Web.Webview.Core 1526 1527**返回值:** 1528 1529| 类型 | 说明 | 1530| ------------------------------------------------------------ | ---------------------- | 1531| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 1532 1533**错误码:** 1534 1535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1536 1537| 错误码ID | 错误信息 | 1538| -------- | ------------------------------------------------------------ | 1539| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1540 1541**示例:** 1542 1543```ts 1544// xxx.ets 1545import { webview } from '@kit.ArkWeb'; 1546import { BusinessError } from '@kit.BasicServicesKit'; 1547 1548@Entry 1549@Component 1550struct WebComponent { 1551 controller: webview.WebviewController = new webview.WebviewController(); 1552 1553 build() { 1554 Column() { 1555 Button('getHitTest') 1556 .onClick(() => { 1557 try { 1558 let hitTestType = this.controller.getHitTest(); 1559 console.log("hitTestType: " + hitTestType); 1560 } catch (error) { 1561 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1562 } 1563 }) 1564 Web({ src: 'www.example.com', controller: this.controller }) 1565 } 1566 } 1567} 1568``` 1569 1570### registerJavaScriptProxy 1571 1572registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void 1573 1574registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。 1575<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 1576 1577> **说明:** 1578> 1579> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。 1580> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。 1581> - 同一方法在同步与异步列表中重复注册,将默认异步调用。 1582> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。 1583 1584**系统能力:** SystemCapability.Web.Webview.Core 1585 1586**参数:** 1587 1588| 参数名 | 类型 | 必填 | 说明 | 1589| ---------- | -------------- | ---- | ------------------------------------------------------------ | 1590| 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)。 | 1591| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 1592| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的同步方法。 | 1593| asyncMethodList<sup>12+</sup> | Array\<string> | 否 | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。 | 1594| permission<sup>12+</sup> | string | 否 | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。| 1595 1596**错误码:** 1597 1598以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1599 1600| 错误码ID | 错误信息 | 1601| -------- | ------------------------------------------------------------ | 1602| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1603| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1604 1605**示例:** 1606 1607```ts 1608// xxx.ets 1609import { webview } from '@kit.ArkWeb'; 1610import { BusinessError } from '@kit.BasicServicesKit'; 1611 1612class TestObj { 1613 constructor() { 1614 } 1615 1616 test(testStr:string): string { 1617 console.log('Web Component str' + testStr); 1618 return testStr; 1619 } 1620 1621 toString(): void { 1622 console.log('Web Component toString'); 1623 } 1624 1625 testNumber(testNum:number): number { 1626 console.log('Web Component number' + testNum); 1627 return testNum; 1628 } 1629 1630 asyncTestBool(testBol:boolean): void { 1631 console.log('Web Component boolean' + testBol); 1632 } 1633} 1634 1635class WebObj { 1636 constructor() { 1637 } 1638 1639 webTest(): string { 1640 console.log('Web test'); 1641 return "Web test"; 1642 } 1643 1644 webString(): void { 1645 console.log('Web test toString'); 1646 } 1647} 1648 1649class AsyncObj { 1650 constructor() { 1651 } 1652 1653 asyncTest(): void { 1654 console.log('Async test'); 1655 } 1656 1657 asyncString(testStr:string): void { 1658 console.log('Web async string' + testStr); 1659 } 1660} 1661 1662@Entry 1663@Component 1664struct Index { 1665 controller: webview.WebviewController = new webview.WebviewController(); 1666 @State testObjtest: TestObj = new TestObj(); 1667 @State webTestObj: WebObj = new WebObj(); 1668 @State asyncTestObj: AsyncObj = new AsyncObj(); 1669 1670 build() { 1671 Column() { 1672 Button('refresh') 1673 .onClick(() => { 1674 try { 1675 this.controller.refresh(); 1676 } catch (error) { 1677 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1678 } 1679 }) 1680 Button('Register JavaScript To Window') 1681 .onClick(() => { 1682 try { 1683 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]); 1684 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 1685 this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]); 1686 } catch (error) { 1687 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1688 } 1689 }) 1690 Web({ src: $rawfile('index.html'), controller: this.controller }) 1691 .javaScriptAccess(true) 1692 } 1693 } 1694} 1695``` 1696 1697加载的html文件。 1698```html 1699<!-- index.html --> 1700<!DOCTYPE html> 1701<html> 1702 <meta charset="utf-8"> 1703 <body> 1704 <button type="button" onclick="htmlTest()">Click Me!</button> 1705 <p id="demo"></p> 1706 <p id="webDemo"></p> 1707 <p id="asyncDemo"></p> 1708 </body> 1709 <script type="text/javascript"> 1710 function htmlTest() { 1711 // This function call expects to return "ArkUI Web Component" 1712 let str=objName.test("webtest data"); 1713 objName.testNumber(1); 1714 objName.asyncTestBool(true); 1715 document.getElementById("demo").innerHTML=str; 1716 console.log('objName.test result:'+ str) 1717 1718 // This function call expects to return "Web test" 1719 let webStr = objTestName.webTest(); 1720 document.getElementById("webDemo").innerHTML=webStr; 1721 console.log('objTestName.webTest result:'+ webStr) 1722 1723 objAsyncName.asyncTest(); 1724 objAsyncName.asyncString("async test data"); 1725 } 1726</script> 1727</html> 1728``` 1729更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 1730 1731### runJavaScript 1732 1733runJavaScript(script: string, callback : AsyncCallback\<string>): void 1734 1735异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1736 1737**系统能力:** SystemCapability.Web.Webview.Core 1738 1739**参数:** 1740 1741| 参数名 | 类型 | 必填 | 说明 | 1742| -------- | -------------------- | ---- | ---------------------------- | 1743| script | string | 是 | JavaScript脚本。 | 1744| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1745 1746**错误码:** 1747 1748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1749 1750| 错误码ID | 错误信息 | 1751| -------- | ------------------------------------------------------------ | 1752| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1753| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1754 1755**示例:** 1756 1757```ts 1758import { webview } from '@kit.ArkWeb'; 1759import { BusinessError } from '@kit.BasicServicesKit'; 1760 1761@Entry 1762@Component 1763struct WebComponent { 1764 controller: webview.WebviewController = new webview.WebviewController(); 1765 @State webResult: string = ''; 1766 1767 build() { 1768 Column() { 1769 Text(this.webResult).fontSize(20) 1770 Web({ src: $rawfile('index.html'), controller: this.controller }) 1771 .javaScriptAccess(true) 1772 .onPageEnd(e => { 1773 try { 1774 this.controller.runJavaScript( 1775 'test()', 1776 (error, result) => { 1777 if (error) { 1778 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1779 return; 1780 } 1781 if (result) { 1782 this.webResult = result; 1783 console.info(`The test() return value is: ${result}`); 1784 } 1785 }); 1786 if (e) { 1787 console.info('url: ', e.url); 1788 } 1789 } catch (error) { 1790 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1791 } 1792 }) 1793 } 1794 } 1795} 1796``` 1797 1798加载的html文件。 1799```html 1800<!-- index.html --> 1801<!DOCTYPE html> 1802<html> 1803 <meta charset="utf-8"> 1804 <body> 1805 Hello world! 1806 </body> 1807 <script type="text/javascript"> 1808 function test() { 1809 console.log('Ark WebComponent') 1810 return "This value is from index.html" 1811 } 1812 </script> 1813</html> 1814``` 1815 1816### runJavaScript 1817 1818runJavaScript(script: string): Promise\<string> 1819 1820异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1821 1822**系统能力:** SystemCapability.Web.Webview.Core 1823 1824**参数:** 1825 1826| 参数名 | 类型 | 必填 | 说明 | 1827| ------ | -------- | ---- | ---------------- | 1828| script | string | 是 | JavaScript脚本。 | 1829 1830**返回值:** 1831 1832| 类型 | 说明 | 1833| --------------- | --------------------------------------------------- | 1834| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1835 1836**错误码:** 1837 1838以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1839 1840| 错误码ID | 错误信息 | 1841| -------- | ------------------------------------------------------------ | 1842| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1843| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1844 1845**示例:** 1846 1847```ts 1848// xxx.ets 1849import { webview } from '@kit.ArkWeb'; 1850import { BusinessError } from '@kit.BasicServicesKit'; 1851 1852@Entry 1853@Component 1854struct WebComponent { 1855 controller: webview.WebviewController = new webview.WebviewController(); 1856 1857 build() { 1858 Column() { 1859 Web({ src: $rawfile('index.html'), controller: this.controller }) 1860 .javaScriptAccess(true) 1861 .onPageEnd(e => { 1862 try { 1863 this.controller.runJavaScript('test()') 1864 .then((result) => { 1865 console.log('result: ' + result); 1866 }) 1867 .catch((error: BusinessError) => { 1868 console.error("error: " + error); 1869 }) 1870 if (e) { 1871 console.info('url: ', e.url); 1872 } 1873 } catch (error) { 1874 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1875 } 1876 }) 1877 } 1878 } 1879} 1880``` 1881 1882加载的html文件。 1883```html 1884<!-- index.html --> 1885<!DOCTYPE html> 1886<html> 1887 <meta charset="utf-8"> 1888 <body> 1889 Hello world! 1890 </body> 1891 <script type="text/javascript"> 1892 function test() { 1893 console.log('Ark WebComponent') 1894 return "This value is from index.html" 1895 } 1896 </script> 1897</html> 1898``` 1899 1900### runJavaScriptExt<sup>10+</sup> 1901 1902runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void 1903 1904异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1905 1906**系统能力:** SystemCapability.Web.Webview.Core 1907 1908**参数:** 1909 1910| 参数名 | 类型 | 必填 | 说明 | 1911| -------- | -------------------- | ---- | ---------------------------- | 1912| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 1913| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是 | 回调执行JavaScript脚本结果。 | 1914 1915**错误码:** 1916 1917以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1918 1919| 错误码ID | 错误信息 | 1920| -------- | ------------------------------------------------------------ | 1921| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1922| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1923 1924**示例:** 1925 1926```ts 1927import { webview } from '@kit.ArkWeb'; 1928import { BusinessError } from '@kit.BasicServicesKit'; 1929 1930@Entry 1931@Component 1932struct WebComponent { 1933 controller: webview.WebviewController = new webview.WebviewController(); 1934 @State msg1: string = ''; 1935 @State msg2: string = ''; 1936 1937 build() { 1938 Column() { 1939 Text(this.msg1).fontSize(20) 1940 Text(this.msg2).fontSize(20) 1941 Web({ src: $rawfile('index.html'), controller: this.controller }) 1942 .javaScriptAccess(true) 1943 .onPageEnd(e => { 1944 try { 1945 this.controller.runJavaScriptExt( 1946 'test()', 1947 (error, result) => { 1948 if (error) { 1949 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 1950 return; 1951 } 1952 if (result) { 1953 try { 1954 let type = result.getType(); 1955 switch (type) { 1956 case webview.JsMessageType.STRING: { 1957 this.msg1 = "result type:" + typeof (result.getString()); 1958 this.msg2 = "result getString:" + ((result.getString())); 1959 break; 1960 } 1961 case webview.JsMessageType.NUMBER: { 1962 this.msg1 = "result type:" + typeof (result.getNumber()); 1963 this.msg2 = "result getNumber:" + ((result.getNumber())); 1964 break; 1965 } 1966 case webview.JsMessageType.BOOLEAN: { 1967 this.msg1 = "result type:" + typeof (result.getBoolean()); 1968 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 1969 break; 1970 } 1971 case webview.JsMessageType.ARRAY_BUFFER: { 1972 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 1973 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 1974 break; 1975 } 1976 case webview.JsMessageType.ARRAY: { 1977 this.msg1 = "result type:" + typeof (result.getArray()); 1978 this.msg2 = "result getArray:" + result.getArray(); 1979 break; 1980 } 1981 default: { 1982 this.msg1 = "default break, type:" + type; 1983 break; 1984 } 1985 } 1986 } 1987 catch (resError) { 1988 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1989 } 1990 } 1991 }); 1992 if (e) { 1993 console.info('url: ', e.url); 1994 } 1995 } catch (error) { 1996 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1997 } 1998 }) 1999 } 2000 } 2001} 2002``` 2003 2004```ts 2005// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据 2006import { webview } from '@kit.ArkWeb'; 2007import { BusinessError } from '@kit.BasicServicesKit'; 2008import { fileIo } from '@kit.CoreFileKit'; 2009import { common } from '@kit.AbilityKit'; 2010 2011@Entry 2012@Component 2013struct WebComponent { 2014 controller: webview.WebviewController = new webview.WebviewController(); 2015 @State msg1: string = '' 2016 @State msg2: string = '' 2017 2018 build() { 2019 Column() { 2020 Text(this.msg1).fontSize(20) 2021 Text(this.msg2).fontSize(20) 2022 Button('runJavaScriptExt') 2023 .onClick(() => { 2024 try { 2025 let context = getContext(this) as common.UIAbilityContext; 2026 let filePath = context.filesDir + 'test.txt'; 2027 // 新建并打开文件 2028 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2029 // 写入一段内容至文件 2030 fileIo.writeSync(file.fd, "test()"); 2031 // 从文件中读取内容 2032 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2033 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2034 // 关闭文件 2035 fileIo.closeSync(file); 2036 this.controller.runJavaScriptExt( 2037 arrayBuffer, 2038 (error, result) => { 2039 if (error) { 2040 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 2041 return; 2042 } 2043 if (result) { 2044 try { 2045 let type = result.getType(); 2046 switch (type) { 2047 case webview.JsMessageType.STRING: { 2048 this.msg1 = "result type:" + typeof (result.getString()); 2049 this.msg2 = "result getString:" + ((result.getString())); 2050 break; 2051 } 2052 case webview.JsMessageType.NUMBER: { 2053 this.msg1 = "result type:" + typeof (result.getNumber()); 2054 this.msg2 = "result getNumber:" + ((result.getNumber())); 2055 break; 2056 } 2057 case webview.JsMessageType.BOOLEAN: { 2058 this.msg1 = "result type:" + typeof (result.getBoolean()); 2059 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2060 break; 2061 } 2062 case webview.JsMessageType.ARRAY_BUFFER: { 2063 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2064 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2065 break; 2066 } 2067 case webview.JsMessageType.ARRAY: { 2068 this.msg1 = "result type:" + typeof (result.getArray()); 2069 this.msg2 = "result getArray:" + result.getArray(); 2070 break; 2071 } 2072 default: { 2073 this.msg1 = "default break, type:" + type; 2074 break; 2075 } 2076 } 2077 } 2078 catch (resError) { 2079 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2080 } 2081 } 2082 }); 2083 } catch (error) { 2084 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2085 } 2086 }) 2087 Web({ src: $rawfile('index.html'), controller: this.controller }) 2088 .javaScriptAccess(true) 2089 } 2090 } 2091} 2092``` 2093 2094加载的html文件。 2095```html 2096<!-- index.html --> 2097<!DOCTYPE html> 2098<html lang="en-gb"> 2099<body> 2100<h1>run JavaScript Ext demo</h1> 2101</body> 2102<script type="text/javascript"> 2103function test() { 2104 return "hello, world"; 2105} 2106</script> 2107</html> 2108``` 2109 2110### runJavaScriptExt<sup>10+</sup> 2111 2112runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt> 2113 2114异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 2115 2116**系统能力:** SystemCapability.Web.Webview.Core 2117 2118**参数:** 2119 2120| 参数名 | 类型 | 必填 | 说明 | 2121| ------ | -------- | ---- | ---------------- | 2122| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 2123 2124**返回值:** 2125 2126| 类型 | 说明 | 2127| --------------- | --------------------------------------------------- | 2128| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 | 2129 2130**错误码:** 2131 2132以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2133 2134| 错误码ID | 错误信息 | 2135| -------- | ------------------------------------------------------------ | 2136| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2137| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2138 2139**示例:** 2140 2141```ts 2142// xxx.ets 2143import { webview } from '@kit.ArkWeb'; 2144import { BusinessError } from '@kit.BasicServicesKit'; 2145 2146@Entry 2147@Component 2148struct WebComponent { 2149 controller: webview.WebviewController = new webview.WebviewController(); 2150 @State webResult: string = ''; 2151 @State msg1: string = ''; 2152 @State msg2: string = ''; 2153 2154 build() { 2155 Column() { 2156 Text(this.webResult).fontSize(20) 2157 Text(this.msg1).fontSize(20) 2158 Text(this.msg2).fontSize(20) 2159 Web({ src: $rawfile('index.html'), controller: this.controller }) 2160 .javaScriptAccess(true) 2161 .onPageEnd(() => { 2162 this.controller.runJavaScriptExt('test()') 2163 .then((result) => { 2164 try { 2165 let type = result.getType(); 2166 switch (type) { 2167 case webview.JsMessageType.STRING: { 2168 this.msg1 = "result type:" + typeof (result.getString()); 2169 this.msg2 = "result getString:" + ((result.getString())); 2170 break; 2171 } 2172 case webview.JsMessageType.NUMBER: { 2173 this.msg1 = "result type:" + typeof (result.getNumber()); 2174 this.msg2 = "result getNumber:" + ((result.getNumber())); 2175 break; 2176 } 2177 case webview.JsMessageType.BOOLEAN: { 2178 this.msg1 = "result type:" + typeof (result.getBoolean()); 2179 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2180 break; 2181 } 2182 case webview.JsMessageType.ARRAY_BUFFER: { 2183 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2184 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2185 break; 2186 } 2187 case webview.JsMessageType.ARRAY: { 2188 this.msg1 = "result type:" + typeof (result.getArray()); 2189 this.msg2 = "result getArray:" + result.getArray(); 2190 break; 2191 } 2192 default: { 2193 this.msg1 = "default break, type:" + type; 2194 break; 2195 } 2196 } 2197 } 2198 catch (resError) { 2199 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2200 } 2201 }).catch((error: BusinessError) => { 2202 console.error("error: " + error); 2203 }) 2204 }) 2205 } 2206 } 2207} 2208``` 2209 2210```ts 2211// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据 2212import { webview } from '@kit.ArkWeb'; 2213import { BusinessError } from '@kit.BasicServicesKit'; 2214import { fileIo } from '@kit.CoreFileKit'; 2215import { common } from '@kit.AbilityKit'; 2216 2217@Entry 2218@Component 2219struct WebComponent { 2220 controller: webview.WebviewController = new webview.WebviewController(); 2221 @State msg1: string = ''; 2222 @State msg2: string = ''; 2223 2224 build() { 2225 Column() { 2226 Text(this.msg1).fontSize(20) 2227 Text(this.msg2).fontSize(20) 2228 Button('runJavaScriptExt') 2229 .onClick(() => { 2230 try { 2231 let context = getContext(this) as common.UIAbilityContext; 2232 let filePath = context.filesDir + 'test.txt'; 2233 // 新建并打开文件 2234 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2235 // 写入一段内容至文件 2236 fileIo.writeSync(file.fd, "test()"); 2237 // 从文件中读取内容 2238 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2239 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2240 // 关闭文件 2241 fileIo.closeSync(file); 2242 this.controller.runJavaScriptExt(arrayBuffer) 2243 .then((result) => { 2244 try { 2245 let type = result.getType(); 2246 switch (type) { 2247 case webview.JsMessageType.STRING: { 2248 this.msg1 = "result type:" + typeof (result.getString()); 2249 this.msg2 = "result getString:" + ((result.getString())); 2250 break; 2251 } 2252 case webview.JsMessageType.NUMBER: { 2253 this.msg1 = "result type:" + typeof (result.getNumber()); 2254 this.msg2 = "result getNumber:" + ((result.getNumber())); 2255 break; 2256 } 2257 case webview.JsMessageType.BOOLEAN: { 2258 this.msg1 = "result type:" + typeof (result.getBoolean()); 2259 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2260 break; 2261 } 2262 case webview.JsMessageType.ARRAY_BUFFER: { 2263 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2264 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2265 break; 2266 } 2267 case webview.JsMessageType.ARRAY: { 2268 this.msg1 = "result type:" + typeof (result.getArray()); 2269 this.msg2 = "result getArray:" + result.getArray(); 2270 break; 2271 } 2272 default: { 2273 this.msg1 = "default break, type:" + type; 2274 break; 2275 } 2276 } 2277 } 2278 catch (resError) { 2279 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2280 } 2281 }) 2282 .catch((error: BusinessError) => { 2283 console.error("error: " + error); 2284 }) 2285 } catch (error) { 2286 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2287 } 2288 }) 2289 Web({ src: $rawfile('index.html'), controller: this.controller }) 2290 .javaScriptAccess(true) 2291 } 2292 } 2293} 2294``` 2295 2296加载的html文件。 2297```html 2298<!-- index.html --> 2299<!DOCTYPE html> 2300<html lang="en-gb"> 2301<body> 2302<h1>run JavaScript Ext demo</h1> 2303</body> 2304<script type="text/javascript"> 2305function test() { 2306 return "hello, world"; 2307} 2308</script> 2309</html> 2310``` 2311 2312### deleteJavaScriptRegister 2313 2314deleteJavaScriptRegister(name: string): void 2315 2316删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。 2317 2318**系统能力:** SystemCapability.Web.Webview.Core 2319 2320**参数:** 2321 2322| 参数名 | 类型 | 必填 | 说明 | 2323| ------ | -------- | ---- | ---- | 2324| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 2325 2326**错误码:** 2327 2328以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2329 2330| 错误码ID | 错误信息 | 2331| -------- | ------------------------------------------------------------ | 2332| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2333| 17100008 | Failed to delete JavaScriptProxy because it does not exist. | 2334| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2335 2336**示例:** 2337 2338```ts 2339// xxx.ets 2340import { webview } from '@kit.ArkWeb'; 2341import { BusinessError } from '@kit.BasicServicesKit'; 2342 2343class TestObj { 2344 constructor() { 2345 } 2346 2347 test(): string { 2348 return "ArkUI Web Component"; 2349 } 2350 2351 toString(): void { 2352 console.log('Web Component toString'); 2353 } 2354} 2355 2356@Entry 2357@Component 2358struct WebComponent { 2359 controller: webview.WebviewController = new webview.WebviewController(); 2360 @State testObjtest: TestObj = new TestObj(); 2361 @State name: string = 'objName'; 2362 build() { 2363 Column() { 2364 Button('refresh') 2365 .onClick(() => { 2366 try { 2367 this.controller.refresh(); 2368 } catch (error) { 2369 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2370 } 2371 }) 2372 Button('Register JavaScript To Window') 2373 .onClick(() => { 2374 try { 2375 this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]); 2376 } catch (error) { 2377 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2378 } 2379 }) 2380 Button('deleteJavaScriptRegister') 2381 .onClick(() => { 2382 try { 2383 this.controller.deleteJavaScriptRegister(this.name); 2384 } catch (error) { 2385 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2386 } 2387 }) 2388 Web({ src: $rawfile('index.html'), controller: this.controller }) 2389 .javaScriptAccess(true) 2390 } 2391 } 2392} 2393``` 2394 2395加载的html文件。 2396```html 2397<!-- index.html --> 2398<!DOCTYPE html> 2399<html> 2400 <meta charset="utf-8"> 2401 <body> 2402 <button type="button" onclick="htmlTest()">Click Me!</button> 2403 <p id="demo"></p> 2404 </body> 2405 <script type="text/javascript"> 2406 function htmlTest() { 2407 let str=objName.test(); 2408 document.getElementById("demo").innerHTML=str; 2409 console.log('objName.test result:'+ str) 2410 } 2411</script> 2412</html> 2413``` 2414 2415### zoom 2416 2417zoom(factor: number): void 2418 2419调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。 2420 2421**系统能力:** SystemCapability.Web.Webview.Core 2422 2423**参数:** 2424 2425| 参数名 | 类型 | 必填 | 说明 | 2426| ------ | -------- | ---- | ------------------------------------------------------------ | 2427| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 | 2428 2429**错误码:** 2430 2431以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2432 2433| 错误码ID | 错误信息 | 2434| -------- | ------------------------------------------------------------ | 2435| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2436| 17100004 | Function not enabled. | 2437| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2438 2439**示例:** 2440 2441```ts 2442// xxx.ets 2443import { webview } from '@kit.ArkWeb'; 2444import { BusinessError } from '@kit.BasicServicesKit'; 2445 2446@Entry 2447@Component 2448struct WebComponent { 2449 controller: webview.WebviewController = new webview.WebviewController(); 2450 @State factor: number = 1; 2451 2452 build() { 2453 Column() { 2454 Button('zoom') 2455 .onClick(() => { 2456 try { 2457 this.controller.zoom(this.factor); 2458 } catch (error) { 2459 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2460 } 2461 }) 2462 Web({ src: 'www.example.com', controller: this.controller }) 2463 .zoomAccess(true) 2464 } 2465 } 2466} 2467``` 2468 2469### searchAllAsync 2470 2471searchAllAsync(searchString: string): void 2472 2473异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。 2474 2475**系统能力:** SystemCapability.Web.Webview.Core 2476 2477**参数:** 2478 2479| 参数名 | 类型 | 必填 | 说明 | 2480| ------------ | -------- | ---- | -------------- | 2481| searchString | string | 是 | 查找的关键字。 | 2482 2483**错误码:** 2484 2485以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2486 2487| 错误码ID | 错误信息 | 2488| -------- | ------------------------------------------------------------ | 2489| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2490| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2491 2492**示例:** 2493 2494```ts 2495// xxx.ets 2496import { webview } from '@kit.ArkWeb'; 2497import { BusinessError } from '@kit.BasicServicesKit'; 2498 2499@Entry 2500@Component 2501struct WebComponent { 2502 controller: webview.WebviewController = new webview.WebviewController(); 2503 @State searchString: string = "Hello World"; 2504 2505 build() { 2506 Column() { 2507 Button('searchString') 2508 .onClick(() => { 2509 try { 2510 this.controller.searchAllAsync(this.searchString); 2511 } catch (error) { 2512 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2513 } 2514 }) 2515 Web({ src: $rawfile('index.html'), controller: this.controller }) 2516 .onSearchResultReceive(ret => { 2517 if (ret) { 2518 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 2519 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 2520 } 2521 }) 2522 } 2523 } 2524} 2525``` 2526 2527加载的html文件。 2528```html 2529<!-- index.html --> 2530<!DOCTYPE html> 2531<html> 2532 <body> 2533 <p>Hello World Highlight Hello World</p> 2534 </body> 2535</html> 2536``` 2537 2538### clearMatches 2539 2540clearMatches(): void 2541 2542清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 2543 2544**系统能力:** SystemCapability.Web.Webview.Core 2545 2546**错误码:** 2547 2548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2549 2550| 错误码ID | 错误信息 | 2551| -------- | ------------------------------------------------------------ | 2552| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2553 2554**示例:** 2555 2556```ts 2557// xxx.ets 2558import { webview } from '@kit.ArkWeb'; 2559import { BusinessError } from '@kit.BasicServicesKit'; 2560 2561@Entry 2562@Component 2563struct WebComponent { 2564 controller: webview.WebviewController = new webview.WebviewController(); 2565 2566 build() { 2567 Column() { 2568 Button('clearMatches') 2569 .onClick(() => { 2570 try { 2571 this.controller.clearMatches(); 2572 } catch (error) { 2573 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2574 } 2575 }) 2576 Web({ src: $rawfile('index.html'), controller: this.controller }) 2577 } 2578 } 2579} 2580``` 2581 2582加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2583 2584### searchNext 2585 2586searchNext(forward: boolean): void 2587 2588滚动到下一个匹配的查找结果并高亮。 2589 2590**系统能力:** SystemCapability.Web.Webview.Core 2591 2592**参数:** 2593 2594| 参数名 | 类型 | 必填 | 说明 | 2595| ------- | -------- | ---- | ---------------------- | 2596| forward | boolean | 是 | 从前向后或者逆向查找。 | 2597 2598**错误码:** 2599 2600以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2601 2602| 错误码ID | 错误信息 | 2603| -------- | ------------------------------------------------------------ | 2604| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2605| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2606 2607**示例:** 2608 2609```ts 2610// xxx.ets 2611import { webview } from '@kit.ArkWeb'; 2612import { BusinessError } from '@kit.BasicServicesKit'; 2613 2614@Entry 2615@Component 2616struct WebComponent { 2617 controller: webview.WebviewController = new webview.WebviewController(); 2618 2619 build() { 2620 Column() { 2621 Button('searchNext') 2622 .onClick(() => { 2623 try { 2624 this.controller.searchNext(true); 2625 } catch (error) { 2626 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2627 } 2628 }) 2629 Web({ src: $rawfile('index.html'), controller: this.controller }) 2630 } 2631 } 2632} 2633``` 2634 2635加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2636 2637### clearSslCache 2638 2639clearSslCache(): void 2640 2641清除Web组件记录的SSL证书错误事件对应的用户操作行为。 2642 2643**系统能力:** SystemCapability.Web.Webview.Core 2644 2645**错误码:** 2646 2647以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2648 2649| 错误码ID | 错误信息 | 2650| -------- | ------------------------------------------------------------ | 2651| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2652 2653**示例:** 2654 2655```ts 2656// xxx.ets 2657import { webview } from '@kit.ArkWeb'; 2658import { BusinessError } from '@kit.BasicServicesKit'; 2659 2660@Entry 2661@Component 2662struct WebComponent { 2663 controller: webview.WebviewController = new webview.WebviewController(); 2664 2665 build() { 2666 Column() { 2667 Button('clearSslCache') 2668 .onClick(() => { 2669 try { 2670 this.controller.clearSslCache(); 2671 } catch (error) { 2672 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2673 } 2674 }) 2675 Web({ src: 'www.example.com', controller: this.controller }) 2676 } 2677 } 2678} 2679``` 2680 2681### clearClientAuthenticationCache 2682 2683clearClientAuthenticationCache(): void 2684 2685清除Web组件记录的客户端证书请求事件对应的用户操作行为。 2686 2687**系统能力:** SystemCapability.Web.Webview.Core 2688 2689**错误码:** 2690 2691以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2692 2693| 错误码ID | 错误信息 | 2694| -------- | ------------------------------------------------------------ | 2695| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2696 2697**示例:** 2698 2699```ts 2700// xxx.ets 2701import { webview } from '@kit.ArkWeb'; 2702import { BusinessError } from '@kit.BasicServicesKit'; 2703 2704@Entry 2705@Component 2706struct WebComponent { 2707 controller: webview.WebviewController = new webview.WebviewController(); 2708 2709 build() { 2710 Column() { 2711 Button('clearClientAuthenticationCache') 2712 .onClick(() => { 2713 try { 2714 this.controller.clearClientAuthenticationCache(); 2715 } catch (error) { 2716 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2717 } 2718 }) 2719 Web({ src: 'www.example.com', controller: this.controller }) 2720 } 2721 } 2722} 2723``` 2724 2725### createWebMessagePorts 2726 2727createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort> 2728 2729创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 2730 2731**系统能力:** SystemCapability.Web.Webview.Core 2732 2733**参数:** 2734 2735| 参数名 | 类型 | 必填 | 说明 | 2736| ------ | ---------------------- | ---- | :------------------------------| 2737| isExtentionType<sup>10+</sup> | boolean | 否 | 是否使用扩展增强接口,默认false不使用。 | 2738 2739**返回值:** 2740 2741| 类型 | 说明 | 2742| ---------------------- | ----------------- | 2743| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 | 2744 2745**错误码:** 2746 2747以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2748 2749| 错误码ID | 错误信息 | 2750| -------- | ------------------------------------------------------------ | 2751| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2752| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2753 2754**示例:** 2755 2756```ts 2757// xxx.ets 2758import { webview } from '@kit.ArkWeb'; 2759import { BusinessError } from '@kit.BasicServicesKit'; 2760 2761@Entry 2762@Component 2763struct WebComponent { 2764 controller: webview.WebviewController = new webview.WebviewController(); 2765 ports: webview.WebMessagePort[] = []; 2766 2767 build() { 2768 Column() { 2769 Button('createWebMessagePorts') 2770 .onClick(() => { 2771 try { 2772 this.ports = this.controller.createWebMessagePorts(); 2773 console.log("createWebMessagePorts size:" + this.ports.length); 2774 } catch (error) { 2775 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2776 } 2777 }) 2778 Web({ src: 'www.example.com', controller: this.controller }) 2779 } 2780 } 2781} 2782``` 2783 2784### postMessage 2785 2786postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 2787 2788发送Web消息端口到HTML。 2789 2790**系统能力:** SystemCapability.Web.Webview.Core 2791 2792**参数:** 2793 2794| 参数名 | 类型 | 必填 | 说明 | 2795| ------ | ---------------------- | ---- | :------------------------------- | 2796| name | string | 是 | 要发送的消息名称。 | 2797| ports | Array\<[WebMessagePort](#webmessageport)> | 是 | 要发送的消息端口。 | 2798| uri | string | 是 | 接收该消息的URI。 | 2799 2800**错误码:** 2801 2802以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2803 2804| 错误码ID | 错误信息 | 2805| -------- | ------------------------------------------------------------ | 2806| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2807| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2808 2809**示例:** 2810 2811```ts 2812// xxx.ets 2813import { webview } from '@kit.ArkWeb'; 2814import { BusinessError } from '@kit.BasicServicesKit'; 2815 2816@Entry 2817@Component 2818struct WebComponent { 2819 controller: webview.WebviewController = new webview.WebviewController(); 2820 ports: webview.WebMessagePort[] = []; 2821 @State sendFromEts: string = 'Send this message from ets to HTML'; 2822 @State receivedFromHtml: string = 'Display received message send from HTML'; 2823 2824 build() { 2825 Column() { 2826 // 展示接收到的来自HTML的内容 2827 Text(this.receivedFromHtml) 2828 // 输入框的内容发送到html 2829 TextInput({ placeholder: 'Send this message from ets to HTML' }) 2830 .onChange((value: string) => { 2831 this.sendFromEts = value; 2832 }) 2833 2834 Button('postMessage') 2835 .onClick(() => { 2836 try { 2837 // 1、创建两个消息端口。 2838 this.ports = this.controller.createWebMessagePorts(); 2839 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 2840 this.ports[1].onMessageEvent((result: webview.WebMessage) => { 2841 let msg = 'Got msg from HTML:'; 2842 if (typeof (result) == "string") { 2843 console.log("received string message from html5, string is:" + result); 2844 msg = msg + result; 2845 } else if (typeof (result) == "object") { 2846 if (result instanceof ArrayBuffer) { 2847 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2848 msg = msg + "length is " + result.byteLength; 2849 } else { 2850 console.log("not support"); 2851 } 2852 } else { 2853 console.log("not support"); 2854 } 2855 this.receivedFromHtml = msg; 2856 }) 2857 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 2858 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 2859 } catch (error) { 2860 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2861 } 2862 }) 2863 2864 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 2865 Button('SendDataToHTML') 2866 .onClick(() => { 2867 try { 2868 if (this.ports && this.ports[1]) { 2869 this.ports[1].postMessageEvent(this.sendFromEts); 2870 } else { 2871 console.error(`ports is null, Please initialize first`); 2872 } 2873 } catch (error) { 2874 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2875 } 2876 }) 2877 Web({ src: $rawfile('index.html'), controller: this.controller }) 2878 } 2879 } 2880} 2881``` 2882 2883加载的html文件。 2884```html 2885<!--index.html--> 2886<!DOCTYPE html> 2887<html> 2888<head> 2889 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 2890 <title>WebView Message Port Demo</title> 2891</head> 2892 2893 <body> 2894 <h1>WebView Message Port Demo</h1> 2895 <div> 2896 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 2897 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 2898 </div> 2899 <p class="output">display received message send from ets</p> 2900 </body> 2901 <script src="xxx.js"></script> 2902</html> 2903``` 2904 2905```js 2906//xxx.js 2907var h5Port; 2908var output = document.querySelector('.output'); 2909window.addEventListener('message', function (event) { 2910 if (event.data == '__init_port__') { 2911 if (event.ports[0] != null) { 2912 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 2913 h5Port.onmessage = function (event) { 2914 // 2. 接收ets侧发送过来的消息. 2915 var msg = 'Got message from ets:'; 2916 var result = event.data; 2917 if (typeof(result) == "string") { 2918 console.log("received string message from html5, string is:" + result); 2919 msg = msg + result; 2920 } else if (typeof(result) == "object") { 2921 if (result instanceof ArrayBuffer) { 2922 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2923 msg = msg + "length is " + result.byteLength; 2924 } else { 2925 console.log("not support"); 2926 } 2927 } else { 2928 console.log("not support"); 2929 } 2930 output.innerHTML = msg; 2931 } 2932 } 2933 } 2934}) 2935 2936// 3. 使用h5Port往ets侧发送消息. 2937function PostMsgToEts(data) { 2938 if (h5Port) { 2939 h5Port.postMessage(data); 2940 } else { 2941 console.error("h5Port is null, Please initialize first"); 2942 } 2943} 2944``` 2945 2946### requestFocus 2947 2948requestFocus(): void 2949 2950使当前web页面获取焦点。 2951 2952**系统能力:** SystemCapability.Web.Webview.Core 2953 2954**错误码:** 2955 2956以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2957 2958| 错误码ID | 错误信息 | 2959| -------- | ------------------------------------------------------------ | 2960| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2961 2962**示例:** 2963 2964```ts 2965// xxx.ets 2966import { webview } from '@kit.ArkWeb'; 2967import { BusinessError } from '@kit.BasicServicesKit'; 2968 2969@Entry 2970@Component 2971struct WebComponent { 2972 controller: webview.WebviewController = new webview.WebviewController(); 2973 2974 build() { 2975 Column() { 2976 Button('requestFocus') 2977 .onClick(() => { 2978 try { 2979 this.controller.requestFocus(); 2980 } catch (error) { 2981 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2982 } 2983 }); 2984 Web({ src: 'www.example.com', controller: this.controller }) 2985 } 2986 } 2987} 2988``` 2989 2990### zoomIn 2991 2992zoomIn(): void 2993 2994调用此接口将当前网页进行放大,比例为20%。 2995 2996**系统能力:** SystemCapability.Web.Webview.Core 2997 2998**错误码:** 2999 3000以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3001 3002| 错误码ID | 错误信息 | 3003| -------- | ------------------------------------------------------------ | 3004| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3005| 17100004 | Function not enabled. | 3006 3007**示例:** 3008 3009```ts 3010// xxx.ets 3011import { webview } from '@kit.ArkWeb'; 3012import { BusinessError } from '@kit.BasicServicesKit'; 3013 3014@Entry 3015@Component 3016struct WebComponent { 3017 controller: webview.WebviewController = new webview.WebviewController(); 3018 3019 build() { 3020 Column() { 3021 Button('zoomIn') 3022 .onClick(() => { 3023 try { 3024 this.controller.zoomIn(); 3025 } catch (error) { 3026 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3027 } 3028 }) 3029 Web({ src: 'www.example.com', controller: this.controller }) 3030 } 3031 } 3032} 3033``` 3034 3035### zoomOut 3036 3037zoomOut(): void 3038 3039调用此接口将当前网页进行缩小,比例为20%。 3040 3041**系统能力:** SystemCapability.Web.Webview.Core 3042 3043**错误码:** 3044 3045以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3046 3047| 错误码ID | 错误信息 | 3048| -------- | ------------------------------------------------------------ | 3049| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3050| 17100004 | Function not enabled. | 3051 3052**示例:** 3053 3054```ts 3055// xxx.ets 3056import { webview } from '@kit.ArkWeb'; 3057import { BusinessError } from '@kit.BasicServicesKit'; 3058 3059@Entry 3060@Component 3061struct WebComponent { 3062 controller: webview.WebviewController = new webview.WebviewController(); 3063 3064 build() { 3065 Column() { 3066 Button('zoomOut') 3067 .onClick(() => { 3068 try { 3069 this.controller.zoomOut(); 3070 } catch (error) { 3071 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3072 } 3073 }) 3074 Web({ src: 'www.example.com', controller: this.controller }) 3075 } 3076 } 3077} 3078``` 3079 3080### getHitTestValue 3081 3082getHitTestValue(): HitTestValue 3083 3084获取当前被点击区域的元素信息。 3085 3086**系统能力:** SystemCapability.Web.Webview.Core 3087 3088**返回值:** 3089 3090| 类型 | 说明 | 3091| ------------ | -------------------- | 3092| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 3093 3094**错误码:** 3095 3096以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3097 3098| 错误码ID | 错误信息 | 3099| -------- | ------------------------------------------------------------ | 3100| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3101 3102**示例:** 3103 3104```ts 3105// xxx.ets 3106import { webview } from '@kit.ArkWeb'; 3107import { BusinessError } from '@kit.BasicServicesKit'; 3108 3109@Entry 3110@Component 3111struct WebComponent { 3112 controller: webview.WebviewController = new webview.WebviewController(); 3113 3114 build() { 3115 Column() { 3116 Button('getHitTestValue') 3117 .onClick(() => { 3118 try { 3119 let hitValue = this.controller.getHitTestValue(); 3120 console.log("hitType: " + hitValue.type); 3121 console.log("extra: " + hitValue.extra); 3122 } catch (error) { 3123 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3124 } 3125 }) 3126 Web({ src: 'www.example.com', controller: this.controller }) 3127 } 3128 } 3129} 3130``` 3131 3132### getWebId 3133 3134getWebId(): number 3135 3136获取当前Web组件的索引值,用于多个Web组件的管理。 3137 3138**系统能力:** SystemCapability.Web.Webview.Core 3139 3140**返回值:** 3141 3142| 类型 | 说明 | 3143| ------ | --------------------- | 3144| number | 当前Web组件的索引值。 | 3145 3146**错误码:** 3147 3148以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3149 3150| 错误码ID | 错误信息 | 3151| -------- | ------------------------------------------------------------ | 3152| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3153 3154**示例:** 3155 3156```ts 3157// xxx.ets 3158import { webview } from '@kit.ArkWeb'; 3159import { BusinessError } from '@kit.BasicServicesKit'; 3160 3161@Entry 3162@Component 3163struct WebComponent { 3164 controller: webview.WebviewController = new webview.WebviewController(); 3165 3166 build() { 3167 Column() { 3168 Button('getWebId') 3169 .onClick(() => { 3170 try { 3171 let id = this.controller.getWebId(); 3172 console.log("id: " + id); 3173 } catch (error) { 3174 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3175 } 3176 }) 3177 Web({ src: 'www.example.com', controller: this.controller }) 3178 } 3179 } 3180} 3181``` 3182 3183### getUserAgent 3184 3185getUserAgent(): string 3186 3187获取当前默认用户代理。 3188 3189默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 3190 3191**系统能力:** SystemCapability.Web.Webview.Core 3192 3193**返回值:** 3194 3195| 类型 | 说明 | 3196| ------ | -------------- | 3197| string | 默认用户代理。 | 3198 3199**错误码:** 3200 3201以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3202 3203| 错误码ID | 错误信息 | 3204| -------- | ------------------------------------------------------------ | 3205| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3206 3207**示例:** 3208 3209```ts 3210// xxx.ets 3211import { webview } from '@kit.ArkWeb'; 3212import { BusinessError } from '@kit.BasicServicesKit'; 3213 3214@Entry 3215@Component 3216struct WebComponent { 3217 controller: webview.WebviewController = new webview.WebviewController(); 3218 3219 build() { 3220 Column() { 3221 Button('getUserAgent') 3222 .onClick(() => { 3223 try { 3224 let userAgent = this.controller.getUserAgent(); 3225 console.log("userAgent: " + userAgent); 3226 } catch (error) { 3227 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3228 } 3229 }) 3230 Web({ src: 'www.example.com', controller: this.controller }) 3231 } 3232 } 3233} 3234``` 3235 3236支持开发者基于默认的UserAgent去定制UserAgent。 3237```ts 3238// xxx.ets 3239import { webview } from '@kit.ArkWeb'; 3240import { BusinessError } from '@kit.BasicServicesKit'; 3241 3242@Entry 3243@Component 3244struct WebComponent { 3245 controller: webview.WebviewController = new webview.WebviewController(); 3246 @State ua: string = ""; 3247 3248 aboutToAppear(): void { 3249 webview.once('webInited', () => { 3250 try { 3251 // 应用侧用法示例,定制UserAgent。 3252 this.ua = this.controller.getUserAgent() + 'xxx'; 3253 this.controller.setCustomUserAgent(this.ua); 3254 } catch (error) { 3255 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3256 } 3257 }) 3258 } 3259 3260 build() { 3261 Column() { 3262 Web({ src: 'www.example.com', controller: this.controller }) 3263 } 3264 } 3265} 3266``` 3267 3268### getTitle 3269 3270getTitle(): string 3271 3272获取当前网页的标题。 3273 3274**系统能力:** SystemCapability.Web.Webview.Core 3275 3276**返回值:** 3277 3278| 类型 | 说明 | 3279| ------ | -------------------- | 3280| string | 当前网页的标题。 | 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 { webview } from '@kit.ArkWeb'; 3295import { BusinessError } from '@kit.BasicServicesKit'; 3296 3297@Entry 3298@Component 3299struct WebComponent { 3300 controller: webview.WebviewController = new webview.WebviewController(); 3301 3302 build() { 3303 Column() { 3304 Button('getTitle') 3305 .onClick(() => { 3306 try { 3307 let title = this.controller.getTitle(); 3308 console.log("title: " + title); 3309 } catch (error) { 3310 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3311 } 3312 }) 3313 Web({ src: 'www.example.com', controller: this.controller }) 3314 } 3315 } 3316} 3317``` 3318 3319### getPageHeight 3320 3321getPageHeight(): number 3322 3323获取当前网页的页面高度。 3324 3325**系统能力:** SystemCapability.Web.Webview.Core 3326 3327**返回值:** 3328 3329| 类型 | 说明 | 3330| ------ | -------------------- | 3331| number | 当前网页的页面高度。单位:vp。 | 3332 3333**错误码:** 3334 3335以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3336 3337| 错误码ID | 错误信息 | 3338| -------- | ------------------------------------------------------------ | 3339| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3340 3341**示例:** 3342 3343```ts 3344// xxx.ets 3345import { webview } from '@kit.ArkWeb'; 3346import { BusinessError } from '@kit.BasicServicesKit'; 3347 3348@Entry 3349@Component 3350struct WebComponent { 3351 controller: webview.WebviewController = new webview.WebviewController(); 3352 3353 build() { 3354 Column() { 3355 Button('getPageHeight') 3356 .onClick(() => { 3357 try { 3358 let pageHeight = this.controller.getPageHeight(); 3359 console.log("pageHeight : " + pageHeight); 3360 } catch (error) { 3361 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3362 } 3363 }) 3364 Web({ src: 'www.example.com', controller: this.controller }) 3365 } 3366 } 3367} 3368``` 3369 3370### storeWebArchive 3371 3372storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 3373 3374以回调方式异步保存当前页面。 3375 3376**系统能力:** SystemCapability.Web.Webview.Core 3377 3378**参数:** 3379 3380| 参数名 | 类型 | 必填 | 说明 | 3381| -------- | --------------------- | ---- | ------------------------------------------------------------ | 3382| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3383| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3384| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保存网页失败会返回null。 | 3385 3386**错误码:** 3387 3388以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3389 3390| 错误码ID | 错误信息 | 3391| -------- | ------------------------------------------------------------ | 3392| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3393| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3394| 17100003 | Invalid resource path or file type. | 3395 3396**示例:** 3397 3398```ts 3399// xxx.ets 3400import { webview } from '@kit.ArkWeb'; 3401import { BusinessError } from '@kit.BasicServicesKit'; 3402 3403@Entry 3404@Component 3405struct WebComponent { 3406 controller: webview.WebviewController = new webview.WebviewController(); 3407 3408 build() { 3409 Column() { 3410 Button('storeWebArchive') 3411 .onClick(() => { 3412 try { 3413 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 3414 if (error) { 3415 console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3416 return; 3417 } 3418 if (filename != null) { 3419 console.info(`save web archive success: ${filename}`); 3420 } 3421 }); 3422 } catch (error) { 3423 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3424 } 3425 }) 3426 Web({ src: 'www.example.com', controller: this.controller }) 3427 } 3428 } 3429} 3430``` 3431 3432### storeWebArchive 3433 3434storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 3435 3436以Promise方式异步保存当前页面。 3437 3438**系统能力:** SystemCapability.Web.Webview.Core 3439 3440**参数:** 3441 3442| 参数名 | 类型 | 必填 | 说明 | 3443| -------- | -------- | ---- | ------------------------------------------------------------ | 3444| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3445| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3446 3447**返回值:** 3448 3449| 类型 | 说明 | 3450| --------------- | ----------------------------------------------------- | 3451| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 3452 3453**错误码:** 3454 3455以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3456 3457| 错误码ID | 错误信息 | 3458| -------- | ------------------------------------------------------------ | 3459| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3460| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3461| 17100003 | Invalid resource path or file type. | 3462 3463**示例:** 3464 3465```ts 3466// xxx.ets 3467import { webview } from '@kit.ArkWeb'; 3468import { BusinessError } from '@kit.BasicServicesKit'; 3469 3470@Entry 3471@Component 3472struct WebComponent { 3473 controller: webview.WebviewController = new webview.WebviewController(); 3474 3475 build() { 3476 Column() { 3477 Button('storeWebArchive') 3478 .onClick(() => { 3479 try { 3480 this.controller.storeWebArchive("/data/storage/el2/base/", true) 3481 .then(filename => { 3482 if (filename != null) { 3483 console.info(`save web archive success: ${filename}`) 3484 } 3485 }) 3486 .catch((error: BusinessError) => { 3487 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3488 }) 3489 } catch (error) { 3490 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3491 } 3492 }) 3493 Web({ src: 'www.example.com', controller: this.controller }) 3494 } 3495 } 3496} 3497``` 3498 3499### getUrl 3500 3501getUrl(): string 3502 3503获取当前页面的url地址。 3504 3505**系统能力:** SystemCapability.Web.Webview.Core 3506 3507**返回值:** 3508 3509| 类型 | 说明 | 3510| ------ | ------------------- | 3511| string | 当前页面的url地址。 | 3512 3513**错误码:** 3514 3515以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3516 3517| 错误码ID | 错误信息 | 3518| -------- | ------------------------------------------------------------ | 3519| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3520 3521**示例:** 3522 3523```ts 3524// xxx.ets 3525import { webview } from '@kit.ArkWeb'; 3526import { BusinessError } from '@kit.BasicServicesKit'; 3527 3528@Entry 3529@Component 3530struct WebComponent { 3531 controller: webview.WebviewController = new webview.WebviewController(); 3532 3533 build() { 3534 Column() { 3535 Button('getUrl') 3536 .onClick(() => { 3537 try { 3538 let url = this.controller.getUrl(); 3539 console.log("url: " + url); 3540 } catch (error) { 3541 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3542 } 3543 }) 3544 Web({ src: 'www.example.com', controller: this.controller }) 3545 } 3546 } 3547} 3548``` 3549 3550### stop 3551 3552stop(): void 3553 3554停止页面加载。 3555 3556**系统能力:** SystemCapability.Web.Webview.Core 3557 3558**错误码:** 3559 3560以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3561 3562| 错误码ID | 错误信息 | 3563| -------- | ------------------------------------------------------------ | 3564| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3565 3566**示例:** 3567 3568```ts 3569// xxx.ets 3570import { webview } from '@kit.ArkWeb'; 3571import { BusinessError } from '@kit.BasicServicesKit'; 3572 3573@Entry 3574@Component 3575struct WebComponent { 3576 controller: webview.WebviewController = new webview.WebviewController(); 3577 3578 build() { 3579 Column() { 3580 Button('stop') 3581 .onClick(() => { 3582 try { 3583 this.controller.stop(); 3584 } catch (error) { 3585 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3586 } 3587 }); 3588 Web({ src: 'www.example.com', controller: this.controller }) 3589 } 3590 } 3591} 3592``` 3593 3594### backOrForward 3595 3596backOrForward(step: number): void 3597 3598按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 3599 3600前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。 3601 3602**系统能力:** SystemCapability.Web.Webview.Core 3603 3604**参数:** 3605 3606| 参数名 | 类型 | 必填 | 说明 | 3607| ------ | -------- | ---- | ---------------------- | 3608| step | number | 是 | 需要前进或后退的步长。 | 3609 3610**错误码:** 3611 3612以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3613 3614| 错误码ID | 错误信息 | 3615| -------- | ------------------------------------------------------------ | 3616| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3617| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3618 3619**示例:** 3620 3621```ts 3622// xxx.ets 3623import { webview } from '@kit.ArkWeb'; 3624import { BusinessError } from '@kit.BasicServicesKit'; 3625 3626@Entry 3627@Component 3628struct WebComponent { 3629 controller: webview.WebviewController = new webview.WebviewController(); 3630 @State step: number = -2; 3631 3632 build() { 3633 Column() { 3634 Button('backOrForward') 3635 .onClick(() => { 3636 try { 3637 this.controller.backOrForward(this.step); 3638 } catch (error) { 3639 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3640 } 3641 }) 3642 Web({ src: 'www.example.com', controller: this.controller }) 3643 } 3644 } 3645} 3646``` 3647 3648### scrollTo 3649 3650scrollTo(x:number, y:number, duration?:number): void 3651 3652在指定时间内,将页面滚动到指定的绝对位置。 3653 3654**系统能力:** SystemCapability.Web.Webview.Core 3655 3656**参数:** 3657 3658| 参数名 | 类型 | 必填 | 说明 | 3659| ------ | -------- | ---- | ---------------------- | 3660| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 | 3661| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。| 3662| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3663 3664**错误码:** 3665 3666以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3667 3668| 错误码ID | 错误信息 | 3669| -------- | ------------------------------------------------------------ | 3670| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3671| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3672 3673**示例:** 3674 3675```ts 3676// xxx.ets 3677import { webview } from '@kit.ArkWeb'; 3678import { BusinessError } from '@kit.BasicServicesKit'; 3679 3680@Entry 3681@Component 3682struct WebComponent { 3683 controller: webview.WebviewController = new webview.WebviewController(); 3684 3685 build() { 3686 Column() { 3687 Button('scrollTo') 3688 .onClick(() => { 3689 try { 3690 this.controller.scrollTo(50, 50, 500); 3691 } catch (error) { 3692 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3693 } 3694 }) 3695 Button('stopScroll') 3696 .onClick(() => { 3697 try { 3698 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3699 } catch (error) { 3700 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3701 } 3702 }) 3703 Web({ src: $rawfile('index.html'), controller: this.controller }) 3704 } 3705 } 3706} 3707``` 3708 3709加载的html文件。 3710```html 3711<!--index.html--> 3712<!DOCTYPE html> 3713<html> 3714<head> 3715 <title>Demo</title> 3716 <style> 3717 body { 3718 width:2000px; 3719 height:2000px; 3720 padding-right:170px; 3721 padding-left:170px; 3722 border:5px solid blueviolet 3723 } 3724 </style> 3725</head> 3726<body> 3727Scroll Test 3728</body> 3729</html> 3730``` 3731 3732### scrollBy 3733 3734scrollBy(deltaX:number, deltaY:number,duration?:number): void 3735 3736在指定时间内将页面滚动指定的偏移量。 3737 3738**系统能力:** SystemCapability.Web.Webview.Core 3739 3740**参数:** 3741 3742| 参数名 | 类型 | 必填 | 说明 | 3743| ------ | -------- | ---- | ---------------------- | 3744| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。单位:vp。 | 3745| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。单位:vp。 | 3746| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3747 3748**错误码:** 3749 3750以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3751 3752| 错误码ID | 错误信息 | 3753| -------- | ------------------------------------------------------------ | 3754| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3755| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3756 3757> **说明:** 3758> 3759> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。 3760 3761**示例:** 3762 3763```ts 3764// xxx.ets 3765import { webview } from '@kit.ArkWeb'; 3766import { BusinessError } from '@kit.BasicServicesKit'; 3767 3768@Entry 3769@Component 3770struct WebComponent { 3771 controller: webview.WebviewController = new webview.WebviewController(); 3772 3773 build() { 3774 Column() { 3775 Button('scrollBy') 3776 .onClick(() => { 3777 try { 3778 this.controller.scrollBy(50, 50, 500); 3779 } catch (error) { 3780 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3781 } 3782 }) 3783 Button('stopScroll') 3784 .onClick(() => { 3785 try { 3786 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3787 } catch (error) { 3788 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3789 } 3790 Web({ src: $rawfile('index.html'), controller: this.controller }) 3791 } 3792 } 3793} 3794``` 3795 3796加载的html文件。 3797```html 3798<!--index.html--> 3799<!DOCTYPE html> 3800<html> 3801<head> 3802 <title>Demo</title> 3803 <style> 3804 body { 3805 width:2000px; 3806 height:2000px; 3807 padding-right:170px; 3808 padding-left:170px; 3809 border:5px solid blueviolet 3810 } 3811 </style> 3812</head> 3813<body> 3814Scroll Test 3815</body> 3816</html> 3817``` 3818### scrollByWithResult<sup>12+</sup> 3819 3820scrollByWithResult(deltaX: number, deltaY: number): boolean 3821 3822将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。 3823 3824**系统能力:** SystemCapability.Web.Webview.Core 3825 3826**参数:** 3827 3828| 参数名 | 类型 | 必填 | 说明 | 3829| ------ | -------- | ---- | ---------------------- | 3830| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 3831| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 3832 3833**返回值:** 3834 3835| 类型 | 说明 | 3836| ------- | --------------------------------------- | 3837| boolean | 当前网页是否可以滑动,默认为false。| 3838 3839**错误码:** 3840 3841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3842 3843| 错误码ID | 错误信息 | 3844| -------- | ------------------------------------------------------------ | 3845| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3846| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3847 3848> **说明:** 3849> 3850> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。 3851> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。 3852> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。 3853> - 此接口不保证滑动帧率性能。 3854 3855**示例:** 3856 3857```ts 3858// xxx.ets 3859import { webview } from '@kit.ArkWeb'; 3860import { BusinessError } from '@kit.BasicServicesKit'; 3861 3862@Entry 3863@Component 3864struct WebComponent { 3865 controller: webview.WebviewController = new webview.WebviewController(); 3866 3867 build() { 3868 Column() { 3869 Button('scrollByWithResult') 3870 .onClick(() => { 3871 try { 3872 let result = this.controller.scrollByWithResult(50, 50); 3873 console.log("original result: " + result); 3874 } catch (error) { 3875 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3876 } 3877 }) 3878 Web({ src: $rawfile('index.html'), controller: this.controller }) 3879 } 3880 } 3881} 3882``` 3883 3884加载的html文件。 3885```html 3886<!--index.html--> 3887<!DOCTYPE html> 3888<html> 3889<head> 3890 <title>Demo</title> 3891 <style> 3892 body { 3893 width:2000px; 3894 height:2000px; 3895 padding-right:170px; 3896 padding-left:170px; 3897 border:5px solid blueviolet 3898 } 3899 </style> 3900</head> 3901<body> 3902Scroll Test 3903</body> 3904</html> 3905``` 3906### slideScroll 3907 3908slideScroll(vx:number, vy:number): void 3909 3910按照指定速度模拟对页面的轻扫滚动动作。 3911 3912**系统能力:** SystemCapability.Web.Webview.Core 3913 3914**参数:** 3915 3916| 参数名 | 类型 | 必填 | 说明 | 3917| ------ | -------- | ---- | ---------------------- | 3918| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 | 3919| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 | 3920 3921**错误码:** 3922 3923以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3924 3925| 错误码ID | 错误信息 | 3926| -------- | ------------------------------------------------------------ | 3927| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3928| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3929 3930**示例:** 3931 3932```ts 3933// xxx.ets 3934import { webview } from '@kit.ArkWeb'; 3935import { BusinessError } from '@kit.BasicServicesKit'; 3936 3937@Entry 3938@Component 3939struct WebComponent { 3940 controller: webview.WebviewController = new webview.WebviewController(); 3941 3942 build() { 3943 Column() { 3944 Button('slideScroll') 3945 .onClick(() => { 3946 try { 3947 this.controller.slideScroll(500, 500); 3948 } catch (error) { 3949 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3950 } 3951 }) 3952 Web({ src: $rawfile('index.html'), controller: this.controller }) 3953 } 3954 } 3955} 3956``` 3957 3958加载的html文件。 3959```html 3960<!--index.html--> 3961<!DOCTYPE html> 3962<html> 3963<head> 3964 <title>Demo</title> 3965 <style> 3966 body { 3967 width:3000px; 3968 height:3000px; 3969 padding-right:170px; 3970 padding-left:170px; 3971 border:5px solid blueviolet 3972 } 3973 </style> 3974</head> 3975<body> 3976Scroll Test 3977</body> 3978</html> 3979``` 3980 3981### getOriginalUrl 3982 3983getOriginalUrl(): string 3984 3985获取当前页面的原始url地址。 3986风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 3987 3988**系统能力:** SystemCapability.Web.Webview.Core 3989 3990**返回值:** 3991 3992| 类型 | 说明 | 3993| ------ | ----------------------- | 3994| string | 当前页面的原始url地址。 | 3995 3996**错误码:** 3997 3998以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3999 4000| 错误码ID | 错误信息 | 4001| -------- | ------------------------------------------------------------ | 4002| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4003 4004**示例:** 4005 4006```ts 4007// xxx.ets 4008import { webview } from '@kit.ArkWeb'; 4009import { BusinessError } from '@kit.BasicServicesKit'; 4010 4011@Entry 4012@Component 4013struct WebComponent { 4014 controller: webview.WebviewController = new webview.WebviewController(); 4015 4016 build() { 4017 Column() { 4018 Button('getOrgUrl') 4019 .onClick(() => { 4020 try { 4021 let url = this.controller.getOriginalUrl(); 4022 console.log("original url: " + url); 4023 } catch (error) { 4024 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4025 } 4026 }) 4027 Web({ src: 'www.example.com', controller: this.controller }) 4028 } 4029 } 4030} 4031``` 4032 4033### getFavicon 4034 4035getFavicon(): image.PixelMap 4036 4037获取页面的favicon图标。 4038 4039**系统能力:** SystemCapability.Web.Webview.Core 4040 4041**返回值:** 4042 4043| 类型 | 说明 | 4044| -------------------------------------- | ------------------------------- | 4045| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 4046 4047**错误码:** 4048 4049以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4050 4051| 错误码ID | 错误信息 | 4052| -------- | ------------------------------------------------------------ | 4053| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4054 4055**示例:** 4056 4057```ts 4058// xxx.ets 4059import { webview } from '@kit.ArkWeb'; 4060import { BusinessError } from '@kit.BasicServicesKit'; 4061import { image } from '@kit.ImageKit'; 4062 4063@Entry 4064@Component 4065struct WebComponent { 4066 controller: webview.WebviewController = new webview.WebviewController(); 4067 @State pixelmap: image.PixelMap | undefined = undefined; 4068 4069 build() { 4070 Column() { 4071 Button('getFavicon') 4072 .onClick(() => { 4073 try { 4074 this.pixelmap = this.controller.getFavicon(); 4075 } catch (error) { 4076 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4077 } 4078 }) 4079 Web({ src: 'www.example.com', controller: this.controller }) 4080 } 4081 } 4082} 4083``` 4084 4085### setNetworkAvailable 4086 4087setNetworkAvailable(enable: boolean): void 4088 4089设置JavaScript中的window.navigator.onLine属性。 4090 4091**系统能力:** SystemCapability.Web.Webview.Core 4092 4093**参数:** 4094 4095| 参数名 | 类型 | 必填 | 说明 | 4096| ------ | ------- | ---- | --------------------------------- | 4097| enable | boolean | 是 | 是否使能window.navigator.onLine。 | 4098 4099**错误码:** 4100 4101以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4102 4103| 错误码ID | 错误信息 | 4104| -------- | ------------------------------------------------------------ | 4105| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4106| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4107 4108**示例:** 4109 4110```ts 4111// xxx.ets 4112import { webview } from '@kit.ArkWeb'; 4113import { BusinessError } from '@kit.BasicServicesKit'; 4114 4115@Entry 4116@Component 4117struct WebComponent { 4118 controller: webview.WebviewController = new webview.WebviewController(); 4119 4120 build() { 4121 Column() { 4122 Button('setNetworkAvailable') 4123 .onClick(() => { 4124 try { 4125 this.controller.setNetworkAvailable(true); 4126 } catch (error) { 4127 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4128 } 4129 }) 4130 Web({ src: $rawfile('index.html'), controller: this.controller }) 4131 } 4132 } 4133} 4134``` 4135 4136加载的html文件。 4137```html 4138<!-- index.html --> 4139<!DOCTYPE html> 4140<html> 4141<body> 4142<h1>online 属性</h1> 4143<p id="demo"></p> 4144<button onclick="func()">click</button> 4145<script> 4146 let online = navigator.onLine; 4147 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4148 4149 function func(){ 4150 var online = navigator.onLine; 4151 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4152 } 4153</script> 4154</body> 4155</html> 4156``` 4157 4158### hasImage 4159 4160hasImage(callback: AsyncCallback\<boolean>): void 4161 4162通过Callback方式异步查找当前页面是否存在图像。 4163 4164**系统能力:** SystemCapability.Web.Webview.Core 4165 4166**参数:** 4167 4168| 参数名 | 类型 | 必填 | 说明 | 4169| -------- | ----------------------- | ---- | -------------------------- | 4170| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。 | 4171 4172**错误码:** 4173 4174以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4175 4176| 错误码ID | 错误信息 | 4177| -------- | ------------------------------------------------------------ | 4178| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4179| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4180 4181**示例:** 4182 4183```ts 4184// xxx.ets 4185import { webview } from '@kit.ArkWeb'; 4186import { BusinessError } from '@kit.BasicServicesKit'; 4187 4188@Entry 4189@Component 4190struct WebComponent { 4191 controller: webview.WebviewController = new webview.WebviewController(); 4192 4193 build() { 4194 Column() { 4195 Button('hasImageCb') 4196 .onClick(() => { 4197 try { 4198 this.controller.hasImage((error, data) => { 4199 if (error) { 4200 console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4201 return; 4202 } 4203 console.info("hasImage: " + data); 4204 }); 4205 } catch (error) { 4206 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4207 } 4208 }) 4209 Web({ src: 'www.example.com', controller: this.controller }) 4210 } 4211 } 4212} 4213``` 4214 4215### hasImage 4216 4217hasImage(): Promise\<boolean> 4218 4219通过Promise方式异步查找当前页面是否存在图像。 4220 4221**系统能力:** SystemCapability.Web.Webview.Core 4222 4223**返回值:** 4224 4225| 类型 | 说明 | 4226| ----------------- | --------------------------------------- | 4227| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 | 4228 4229**错误码:** 4230 4231以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4232 4233| 错误码ID | 错误信息 | 4234| -------- | ------------------------------------------------------------ | 4235| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4236| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 4237 4238**示例:** 4239 4240```ts 4241// xxx.ets 4242import { webview } from '@kit.ArkWeb'; 4243import { BusinessError } from '@kit.BasicServicesKit'; 4244 4245@Entry 4246@Component 4247struct WebComponent { 4248 controller: webview.WebviewController = new webview.WebviewController(); 4249 4250 build() { 4251 Column() { 4252 Button('hasImagePm') 4253 .onClick(() => { 4254 try { 4255 this.controller.hasImage().then((data) => { 4256 console.info('hasImage: ' + data); 4257 }).catch((error: BusinessError) => { 4258 console.error("error: " + error); 4259 }) 4260 } catch (error) { 4261 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4262 } 4263 }) 4264 Web({ src: 'www.example.com', controller: this.controller }) 4265 } 4266 } 4267} 4268``` 4269 4270### removeCache 4271 4272removeCache(clearRom: boolean): void 4273 4274清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 4275 4276**系统能力:** SystemCapability.Web.Webview.Core 4277 4278**参数:** 4279 4280| 参数名 | 类型 | 必填 | 说明 | 4281| -------- | ------- | ---- | -------------------------------------------------------- | 4282| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 4283 4284**错误码:** 4285 4286以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4287 4288| 错误码ID | 错误信息 | 4289| -------- | ------------------------------------------------------------ | 4290| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4291| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4292 4293**示例:** 4294 4295```ts 4296// xxx.ets 4297import { webview } from '@kit.ArkWeb'; 4298import { BusinessError } from '@kit.BasicServicesKit'; 4299 4300@Entry 4301@Component 4302struct WebComponent { 4303 controller: webview.WebviewController = new webview.WebviewController(); 4304 4305 build() { 4306 Column() { 4307 Button('removeCache') 4308 .onClick(() => { 4309 try { 4310 this.controller.removeCache(false); 4311 } catch (error) { 4312 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4313 } 4314 }) 4315 Web({ src: 'www.example.com', controller: this.controller }) 4316 } 4317 } 4318} 4319``` 4320 4321### pageUp 4322 4323pageUp(top: boolean): void 4324 4325将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 4326 4327**系统能力:** SystemCapability.Web.Webview.Core 4328 4329**参数:** 4330 4331| 参数名 | 类型 | 必填 | 说明 | 4332| ------ | ------- | ---- | ------------------------------------------------------------ | 4333| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 4334 4335**错误码:** 4336 4337以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4338 4339| 错误码ID | 错误信息 | 4340| -------- | ------------------------------------------------------------ | 4341| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4342| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4343 4344**示例:** 4345 4346```ts 4347// xxx.ets 4348import { webview } from '@kit.ArkWeb'; 4349import { BusinessError } from '@kit.BasicServicesKit'; 4350 4351@Entry 4352@Component 4353struct WebComponent { 4354 controller: webview.WebviewController = new webview.WebviewController(); 4355 4356 build() { 4357 Column() { 4358 Button('pageUp') 4359 .onClick(() => { 4360 try { 4361 this.controller.pageUp(false); 4362 } catch (error) { 4363 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4364 } 4365 }) 4366 Web({ src: 'www.example.com', controller: this.controller }) 4367 } 4368 } 4369} 4370``` 4371 4372### pageDown 4373 4374pageDown(bottom: boolean): void 4375 4376将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 4377 4378**系统能力:** SystemCapability.Web.Webview.Core 4379 4380**参数:** 4381 4382| 参数名 | 类型 | 必填 | 说明 | 4383| ------ | ------- | ---- | ------------------------------------------------------------ | 4384| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 4385 4386**错误码:** 4387 4388以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4389 4390| 错误码ID | 错误信息 | 4391| -------- | ------------------------------------------------------------ | 4392| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4393| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4394 4395**示例:** 4396 4397```ts 4398// xxx.ets 4399import { webview } from '@kit.ArkWeb'; 4400import { BusinessError } from '@kit.BasicServicesKit'; 4401 4402@Entry 4403@Component 4404struct WebComponent { 4405 controller: webview.WebviewController = new webview.WebviewController(); 4406 4407 build() { 4408 Column() { 4409 Button('pageDown') 4410 .onClick(() => { 4411 try { 4412 this.controller.pageDown(false); 4413 } catch (error) { 4414 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4415 } 4416 }) 4417 Web({ src: 'www.example.com', controller: this.controller }) 4418 } 4419 } 4420} 4421``` 4422 4423### getBackForwardEntries 4424 4425getBackForwardEntries(): BackForwardList 4426 4427获取当前Webview的历史信息列表。 4428 4429**系统能力:** SystemCapability.Web.Webview.Core 4430 4431**返回值:** 4432 4433| 类型 | 说明 | 4434| ----------------------------------- | --------------------------- | 4435| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 4436 4437**错误码:** 4438 4439以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4440 4441| 错误码ID | 错误信息 | 4442| -------- | ------------------------------------------------------------ | 4443| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4444 4445**示例:** 4446 4447```ts 4448// xxx.ets 4449import { webview } from '@kit.ArkWeb'; 4450import { BusinessError } from '@kit.BasicServicesKit'; 4451 4452@Entry 4453@Component 4454struct WebComponent { 4455 controller: webview.WebviewController = new webview.WebviewController(); 4456 4457 build() { 4458 Column() { 4459 Button('getBackForwardEntries') 4460 .onClick(() => { 4461 try { 4462 let list = this.controller.getBackForwardEntries() 4463 } catch (error) { 4464 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4465 } 4466 }) 4467 Web({ src: 'www.example.com', controller: this.controller }) 4468 } 4469 } 4470} 4471``` 4472 4473### serializeWebState 4474 4475serializeWebState(): Uint8Array 4476 4477将当前Webview的页面状态历史记录信息序列化。 4478 4479**系统能力:** SystemCapability.Web.Webview.Core 4480 4481**返回值:** 4482 4483| 类型 | 说明 | 4484| ---------- | --------------------------------------------- | 4485| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 4486 4487**错误码:** 4488 4489以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4490 4491| 错误码ID | 错误信息 | 4492| -------- | ------------------------------------------------------------ | 4493| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4494 4495**示例:** 4496 44971.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4498```ts 4499// xxx.ets 4500import { webview } from '@kit.ArkWeb'; 4501import { BusinessError } from '@kit.BasicServicesKit'; 4502import { fileIo } from '@kit.CoreFileKit'; 4503 4504@Entry 4505@Component 4506struct WebComponent { 4507 controller: webview.WebviewController = new webview.WebviewController(); 4508 4509 build() { 4510 Column() { 4511 Button('serializeWebState') 4512 .onClick(() => { 4513 try { 4514 let state = this.controller.serializeWebState(); 4515 let path:string | undefined = AppStorage.get("cacheDir"); 4516 if (path) { 4517 path += '/WebState'; 4518 // 以同步方法打开文件。 4519 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 4520 fileIo.writeSync(file.fd, state.buffer); 4521 fileIo.closeSync(file.fd); 4522 } 4523 } catch (error) { 4524 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4525 } 4526 }) 4527 Web({ src: 'www.example.com', controller: this.controller }) 4528 } 4529 } 4530} 4531``` 4532 45332.修改EntryAbility.ets。 4534获取应用缓存文件路径。 4535```ts 4536// xxx.ets 4537import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4538 4539export default class EntryAbility extends UIAbility { 4540 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4541 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4542 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4543 } 4544} 4545``` 4546 4547### restoreWebState 4548 4549restoreWebState(state: Uint8Array): void 4550 4551当前Webview从序列化数据中恢复页面状态历史记录。 4552 4553**系统能力:** SystemCapability.Web.Webview.Core 4554 4555**参数:** 4556 4557| 参数名 | 类型 | 必填 | 说明 | 4558| ------ | ---------- | ---- | ---------------------------- | 4559| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 4560 4561**错误码:** 4562 4563以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4564 4565| 错误码ID | 错误信息 | 4566| -------- | ------------------------------------------------------------ | 4567| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4568| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4569 4570**示例:** 4571 45721.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4573```ts 4574// xxx.ets 4575import { webview } from '@kit.ArkWeb'; 4576import { BusinessError } from '@kit.BasicServicesKit'; 4577import { fileIo } from '@kit.CoreFileKit'; 4578 4579@Entry 4580@Component 4581struct WebComponent { 4582 controller: webview.WebviewController = new webview.WebviewController(); 4583 4584 build() { 4585 Column() { 4586 Button('RestoreWebState') 4587 .onClick(() => { 4588 try { 4589 let path: string | undefined = AppStorage.get("cacheDir"); 4590 if (path) { 4591 path += '/WebState'; 4592 // 以同步方法打开文件。 4593 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE); 4594 let stat = fileIo.statSync(path); 4595 let size = stat.size; 4596 let buf = new ArrayBuffer(size); 4597 fileIo.read(file.fd, buf, (err, readLen) => { 4598 if (err) { 4599 console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code); 4600 } else { 4601 console.info("read file data succeed"); 4602 this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen))); 4603 fileIo.closeSync(file); 4604 } 4605 }); 4606 } 4607 } catch (error) { 4608 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4609 } 4610 }) 4611 Web({ src: 'www.example.com', controller: this.controller }) 4612 } 4613 } 4614} 4615``` 4616 46172.修改EntryAbility.ets。 4618获取应用缓存文件路径。 4619```ts 4620// xxx.ets 4621import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4622 4623export default class EntryAbility extends UIAbility { 4624 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4625 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4626 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4627 } 4628} 4629``` 4630 4631### customizeSchemes 4632 4633static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 4634 4635对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。 4636 4637**系统能力:** SystemCapability.Web.Webview.Core 4638 4639**参数:** 4640 4641| 参数名 | 类型 | 必填 | 说明 | 4642| -------- | ------- | ---- | -------------------------------------- | 4643| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 4644 4645**错误码:** 4646 4647以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4648 4649| 错误码ID | 错误信息 | 4650| -------- | ------------------------------------------------------------ | 4651| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4652| 17100020 | Failed to register custom schemes. | 4653 4654**示例:** 4655 4656```ts 4657// xxx.ets 4658import { webview } from '@kit.ArkWeb'; 4659import { BusinessError } from '@kit.BasicServicesKit'; 4660 4661@Entry 4662@Component 4663struct WebComponent { 4664 controller: webview.WebviewController = new webview.WebviewController(); 4665 responseWeb: WebResourceResponse = new WebResourceResponse(); 4666 scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true }; 4667 scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true }; 4668 scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true }; 4669 4670 aboutToAppear(): void { 4671 try { 4672 webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]); 4673 } catch (error) { 4674 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4675 } 4676 } 4677 4678 build() { 4679 Column() { 4680 Web({ src: 'www.example.com', controller: this.controller }) 4681 .onInterceptRequest((event) => { 4682 if (event) { 4683 console.log('url:' + event.request.getRequestUrl()); 4684 } 4685 return this.responseWeb; 4686 }) 4687 } 4688 } 4689} 4690``` 4691 4692### getCertificate<sup>10+</sup> 4693 4694getCertificate(): Promise<Array<cert.X509Cert>> 4695 4696获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。 4697 4698**系统能力:** SystemCapability.Web.Webview.Core 4699 4700**返回值:** 4701 4702| 类型 | 说明 | 4703| ---------- | --------------------------------------------- | 4704| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 | 4705 4706**错误码:** 4707 4708以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4709 4710| 错误码ID | 错误信息 | 4711| -------- | ------------------------------------------------------------ | 4712| 17100001 | Init error. The WebviewController must be associated with a web component. | 4713 4714**示例:** 4715 4716```ts 4717// xxx.ets 4718import { webview } from '@kit.ArkWeb'; 4719import { BusinessError } from '@kit.BasicServicesKit'; 4720import { cert } from '@kit.DeviceCertificateKit'; 4721 4722function Uint8ArrayToString(dataArray: Uint8Array) { 4723 let dataString = ''; 4724 for (let i = 0; i < dataArray.length; i++) { 4725 dataString += String.fromCharCode(dataArray[i]); 4726 } 4727 return dataString; 4728} 4729 4730function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 4731 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4732 for (let i = 0; i < x509CertArray.length; i++) { 4733 res += ', index = ' + i + ', issuer name = ' 4734 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4735 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4736 + x509CertArray[i].getNotBeforeTime() 4737 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 4738 } 4739 return res; 4740} 4741 4742@Entry 4743@Component 4744struct Index { 4745 // outputStr在UI界面显示调试信息 4746 @State outputStr: string = ''; 4747 webviewCtl: webview.WebviewController = new webview.WebviewController(); 4748 4749 build() { 4750 Row() { 4751 Column() { 4752 List({ space: 20, initialIndex: 0 }) { 4753 ListItem() { 4754 Button() { 4755 Text('load bad ssl') 4756 .fontSize(10) 4757 .fontWeight(FontWeight.Bold) 4758 } 4759 .type(ButtonType.Capsule) 4760 .onClick(() => { 4761 // 加载一个过期的证书网站,查看获取到的证书信息 4762 this.webviewCtl.loadUrl('https://expired.badssl.com'); 4763 }) 4764 .height(50) 4765 } 4766 4767 ListItem() { 4768 Button() { 4769 Text('load example') 4770 .fontSize(10) 4771 .fontWeight(FontWeight.Bold) 4772 } 4773 .type(ButtonType.Capsule) 4774 .onClick(() => { 4775 // 加载一个https网站,查看网站的证书信息 4776 this.webviewCtl.loadUrl('https://www.example.com'); 4777 }) 4778 .height(50) 4779 } 4780 4781 ListItem() { 4782 Button() { 4783 Text('getCertificate Promise') 4784 .fontSize(10) 4785 .fontWeight(FontWeight.Bold) 4786 } 4787 .type(ButtonType.Capsule) 4788 .onClick(() => { 4789 try { 4790 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 4791 this.outputStr = ParseX509CertInfo(x509CertArray); 4792 }) 4793 } catch (error) { 4794 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4795 } 4796 }) 4797 .height(50) 4798 } 4799 4800 ListItem() { 4801 Button() { 4802 Text('getCertificate AsyncCallback') 4803 .fontSize(10) 4804 .fontWeight(FontWeight.Bold) 4805 } 4806 .type(ButtonType.Capsule) 4807 .onClick(() => { 4808 try { 4809 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 4810 if (error) { 4811 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4812 } else { 4813 this.outputStr = ParseX509CertInfo(x509CertArray); 4814 } 4815 }) 4816 } catch (error) { 4817 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4818 } 4819 }) 4820 .height(50) 4821 } 4822 } 4823 .listDirection(Axis.Horizontal) 4824 .height('10%') 4825 4826 Text(this.outputStr) 4827 .width('100%') 4828 .fontSize(10) 4829 4830 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4831 .fileAccess(true) 4832 .javaScriptAccess(true) 4833 .domStorageAccess(true) 4834 .onlineImageAccess(true) 4835 .onPageEnd((e) => { 4836 if (e) { 4837 this.outputStr = 'onPageEnd : url = ' + e.url; 4838 } 4839 }) 4840 .onSslErrorEventReceive((e) => { 4841 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4842 e.handler.handleConfirm(); 4843 }) 4844 .width('100%') 4845 .height('70%') 4846 } 4847 .height('100%') 4848 } 4849 } 4850} 4851``` 4852 4853### getCertificate<sup>10+</sup> 4854 4855getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void 4856 4857获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。 4858 4859**系统能力:** SystemCapability.Web.Webview.Core 4860 4861**参数:** 4862 4863| 参数名 | 类型 | 必填 | 说明 | 4864| -------- | ---------------------------- | ---- | ---------------------------------------- | 4865| callback | AsyncCallback<Array<cert.X509Cert>> | 是 | 通过AsyncCallback异步返回当前网站的X509格式证书。 | 4866 4867**错误码:** 4868 4869以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4870 4871| 错误码ID | 错误信息 | 4872| -------- | ------------------------------------------------------------ | 4873| 17100001 | Init error. The WebviewController must be associated with a web component. | 4874| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4875 4876**示例:** 4877 4878```ts 4879// xxx.ets 4880import { webview } from '@kit.ArkWeb'; 4881import { BusinessError } from '@kit.BasicServicesKit'; 4882import { cert } from '@kit.DeviceCertificateKit'; 4883 4884function Uint8ArrayToString(dataArray: Uint8Array) { 4885 let dataString = ''; 4886 for (let i = 0; i < dataArray.length; i++) { 4887 dataString += String.fromCharCode(dataArray[i]); 4888 } 4889 return dataString; 4890} 4891 4892function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 4893 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4894 for (let i = 0; i < x509CertArray.length; i++) { 4895 res += ', index = ' + i + ', issuer name = ' 4896 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4897 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4898 + x509CertArray[i].getNotBeforeTime() 4899 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 4900 } 4901 return res; 4902} 4903 4904@Entry 4905@Component 4906struct Index { 4907 // outputStr在UI界面显示调试信息 4908 @State outputStr: string = ''; 4909 webviewCtl: webview.WebviewController = new webview.WebviewController(); 4910 4911 build() { 4912 Row() { 4913 Column() { 4914 List({ space: 20, initialIndex: 0 }) { 4915 ListItem() { 4916 Button() { 4917 Text('load bad ssl') 4918 .fontSize(10) 4919 .fontWeight(FontWeight.Bold) 4920 } 4921 .type(ButtonType.Capsule) 4922 .onClick(() => { 4923 // 加载一个过期的证书网站,查看获取到的证书信息 4924 this.webviewCtl.loadUrl('https://expired.badssl.com'); 4925 }) 4926 .height(50) 4927 } 4928 4929 ListItem() { 4930 Button() { 4931 Text('load example') 4932 .fontSize(10) 4933 .fontWeight(FontWeight.Bold) 4934 } 4935 .type(ButtonType.Capsule) 4936 .onClick(() => { 4937 // 加载一个https网站,查看网站的证书信息 4938 this.webviewCtl.loadUrl('https://www.example.com'); 4939 }) 4940 .height(50) 4941 } 4942 4943 ListItem() { 4944 Button() { 4945 Text('getCertificate Promise') 4946 .fontSize(10) 4947 .fontWeight(FontWeight.Bold) 4948 } 4949 .type(ButtonType.Capsule) 4950 .onClick(() => { 4951 try { 4952 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 4953 this.outputStr = ParseX509CertInfo(x509CertArray); 4954 }) 4955 } catch (error) { 4956 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4957 } 4958 }) 4959 .height(50) 4960 } 4961 4962 ListItem() { 4963 Button() { 4964 Text('getCertificate AsyncCallback') 4965 .fontSize(10) 4966 .fontWeight(FontWeight.Bold) 4967 } 4968 .type(ButtonType.Capsule) 4969 .onClick(() => { 4970 try { 4971 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 4972 if (error) { 4973 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4974 } else { 4975 this.outputStr = ParseX509CertInfo(x509CertArray); 4976 } 4977 }) 4978 } catch (error) { 4979 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4980 } 4981 }) 4982 .height(50) 4983 } 4984 } 4985 .listDirection(Axis.Horizontal) 4986 .height('10%') 4987 4988 Text(this.outputStr) 4989 .width('100%') 4990 .fontSize(10) 4991 4992 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4993 .fileAccess(true) 4994 .javaScriptAccess(true) 4995 .domStorageAccess(true) 4996 .onlineImageAccess(true) 4997 .onPageEnd((e) => { 4998 if (e) { 4999 this.outputStr = 'onPageEnd : url = ' + e.url; 5000 } 5001 }) 5002 .onSslErrorEventReceive((e) => { 5003 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 5004 e.handler.handleConfirm(); 5005 }) 5006 .width('100%') 5007 .height('70%') 5008 } 5009 .height('100%') 5010 } 5011 } 5012} 5013``` 5014 5015### setAudioMuted<sup>10+</sup> 5016 5017setAudioMuted(mute: boolean): void 5018 5019设置网页静音。 5020 5021**系统能力:** SystemCapability.Web.Webview.Core 5022 5023**参数:** 5024 5025| 参数名 | 类型 | 必填 | 说明 | 5026| -------- | ------- | ---- | -------------------------------------- | 5027| mute | boolean | 是 | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 | 5028 5029**错误码:** 5030 5031以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5032 5033| 错误码ID | 错误信息 | 5034| -------- | ------------------------------------------------------------ | 5035| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5036| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5037 5038**示例:** 5039 5040```ts 5041// xxx.ets 5042import { webview } from '@kit.ArkWeb'; 5043 5044@Entry 5045@Component 5046struct WebComponent { 5047 controller: webview.WebviewController = new webview.WebviewController(); 5048 @State muted: boolean = false; 5049 5050 build() { 5051 Column() { 5052 Button("Toggle Mute") 5053 .onClick(event => { 5054 if (event) { 5055 this.muted = !this.muted; 5056 this.controller.setAudioMuted(this.muted); 5057 } 5058 }) 5059 Web({ src: 'www.example.com', controller: this.controller }) 5060 } 5061 } 5062} 5063``` 5064 5065### prefetchPage<sup>10+</sup> 5066 5067prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void 5068 5069在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。 5070 5071> **说明:** 5072> 5073> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。 5074 5075**系统能力:** SystemCapability.Web.Webview.Core 5076 5077**参数:** 5078 5079| 参数名 | 类型 | 必填 | 说明 | 5080| ------------------| --------------------------------| ---- | ------------- | 5081| url | string | 是 | 预加载的url。| 5082| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | url的附加HTTP请求头。| 5083 5084**错误码:** 5085 5086以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5087 5088| 错误码ID | 错误信息 | 5089| -------- | ------------------------------------------------------------ | 5090| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5091| 17100002 | Invalid url. | 5092 5093**示例:** 5094 5095```ts 5096// xxx.ets 5097import { webview } from '@kit.ArkWeb'; 5098import { BusinessError } from '@kit.BasicServicesKit'; 5099 5100@Entry 5101@Component 5102struct WebComponent { 5103 controller: webview.WebviewController = new webview.WebviewController(); 5104 5105 build() { 5106 Column() { 5107 Button('prefetchPopularPage') 5108 .onClick(() => { 5109 try { 5110 // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。 5111 this.controller.prefetchPage('https://www.example.com'); 5112 } catch (error) { 5113 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5114 } 5115 }) 5116 // 需要将'www.example1.com'替换成一个真实的网站地址。 5117 Web({ src: 'www.example1.com', controller: this.controller }) 5118 } 5119 } 5120} 5121``` 5122 5123### prefetchResource<sup>12+</sup> 5124 5125static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void 5126 5127根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。 5128 5129**系统能力:** SystemCapability.Web.Webview.Core 5130 5131**参数:** 5132 5133| 参数名 | 类型 | 必填 | 说明 | 5134| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ | 5135| request | [RequestInfo](#requestinfo12) | 是 | 预获取请求的信息。 | 5136| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | 预获取请求的附加HTTP请求头。 | 5137| cacheKey | string | 否 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5138| cacheValidTime | number | 否 | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。 | 5139 5140**错误码:** 5141 5142以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5143 5144| 错误码ID | 错误信息 | 5145| -------- | ------------------------------------------------------------ | 5146| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 5147| 17100002 | Invalid url. | 5148 5149**示例:** 5150 5151```ts 5152// xxx.ets 5153import { webview } from '@kit.ArkWeb'; 5154import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5155 5156export default class EntryAbility extends UIAbility { 5157 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5158 console.log("EntryAbility onCreate"); 5159 webview.WebviewController.initializeWebEngine(); 5160 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5161 webview.WebviewController.prefetchResource( 5162 {url:"https://www.example1.com/post?e=f&g=h", 5163 method:"POST", 5164 formData:"a=x&b=y",}, 5165 [{headerKey:"c", 5166 headerValue:"z",},], 5167 "KeyX", 500); 5168 AppStorage.setOrCreate("abilityWant", want); 5169 console.log("EntryAbility onCreate done"); 5170 } 5171} 5172``` 5173 5174### clearPrefetchedResource<sup>12+</sup> 5175 5176static clearPrefetchedResource(cacheKeyList: Array\<string>): void 5177 5178根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。 5179 5180**系统能力:** SystemCapability.Web.Webview.Core 5181 5182**参数:** 5183 5184| 参数名 | 类型 | 必填 | 说明 | 5185| ------------------| ----------- | ---- | ------------------------------------------------------------------------- | 5186| cacheKeyList | Array\<string> | 是 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5187 5188**示例:** 5189 5190```ts 5191// xxx.ets 5192import { webview } from '@kit.ArkWeb'; 5193 5194@Entry 5195@Component 5196struct WebComponent { 5197 controller: webview.WebviewController = new webview.WebviewController(); 5198 build() { 5199 Column() { 5200 Web({ src: "https://www.example.com/", controller: this.controller}) 5201 .onAppear(() => { 5202 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5203 webview.WebviewController.prefetchResource( 5204 {url:"https://www.example1.com/post?e=f&g=h", 5205 method:"POST", 5206 formData:"a=x&b=y",}, 5207 [{headerKey:"c", 5208 headerValue:"z",},], 5209 "KeyX", 500); 5210 }) 5211 .onPageEnd(() => { 5212 // 清除后续不再使用的预获取缓存。 5213 webview.WebviewController.clearPrefetchedResource(["KeyX",]); 5214 }) 5215 } 5216 } 5217} 5218``` 5219 5220### prepareForPageLoad<sup>10+</sup> 5221 5222static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void 5223 5224预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。 5225 5226**系统能力:** SystemCapability.Web.Webview.Core 5227 5228**参数:** 5229 5230| 参数名 | 类型 | 必填 | 说明 | 5231| ---------------| ------- | ---- | ------------- | 5232| url | string | 是 | 预连接的url。| 5233| preconnectable | boolean | 是 | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。| 5234| numSockets | number | 是 | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。| 5235 5236**错误码:** 5237 5238以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5239 5240| 错误码ID | 错误信息 | 5241| -------- | ------------------------------------------------------------ | 5242| 17100002 | Invalid url. | 5243| 171000013| The number of preconnect sockets is invalid. | 5244 5245**示例:** 5246 5247```ts 5248// xxx.ets 5249import { webview } from '@kit.ArkWeb'; 5250import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5251 5252export default class EntryAbility extends UIAbility { 5253 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5254 console.log("EntryAbility onCreate"); 5255 webview.WebviewController.initializeWebEngine(); 5256 // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。 5257 webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 5258 AppStorage.setOrCreate("abilityWant", want); 5259 console.log("EntryAbility onCreate done"); 5260 } 5261} 5262``` 5263 5264### setCustomUserAgent<sup>10+</sup> 5265 5266setCustomUserAgent(userAgent: string): void 5267 5268设置自定义用户代理,会覆盖系统的用户代理。 5269 5270当Web组件src设置了url时,建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。 5271 5272当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。 5273 5274默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 5275 5276> **说明:** 5277> 5278>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。 5279 5280**系统能力:** SystemCapability.Web.Webview.Core 5281 5282**参数:** 5283 5284| 参数名 | 类型 | 必填 | 说明 | 5285| ---------------| ------- | ---- | ------------- | 5286| userAgent | string | 是 | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 | 5287 5288**错误码:** 5289 5290以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5291 5292| 错误码ID | 错误信息 | 5293| -------- | ------------------------------------------------------------ | 5294| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5295| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5296 5297**示例:** 5298 5299```ts 5300// xxx.ets 5301import { webview } from '@kit.ArkWeb'; 5302import { BusinessError } from '@kit.BasicServicesKit'; 5303 5304@Entry 5305@Component 5306struct WebComponent { 5307 controller: webview.WebviewController = new webview.WebviewController(); 5308 @State customUserAgent: string = ' DemoApp'; 5309 5310 build() { 5311 Column() { 5312 Web({ src: 'www.example.com', controller: this.controller }) 5313 .onControllerAttached(() => { 5314 console.log("onControllerAttached"); 5315 try { 5316 let userAgent = this.controller.getUserAgent() + this.customUserAgent; 5317 this.controller.setCustomUserAgent(userAgent); 5318 } catch (error) { 5319 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5320 } 5321 }) 5322 } 5323 } 5324} 5325``` 5326 5327### setDownloadDelegate<sup>11+</sup> 5328 5329setDownloadDelegate(delegate: WebDownloadDelegate): void 5330 5331为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。 5332 5333**系统能力:** SystemCapability.Web.Webview.Core 5334 5335**参数:** 5336 5337| 参数名 | 类型 | 必填 | 说明 | 5338| ---------------| ------- | ---- | ------------- | 5339| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 5340 5341**错误码:** 5342 5343以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5344 5345| 错误码ID | 错误信息 | 5346| -------- | ------------------------------------------------------------ | 5347| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5348 5349**示例:** 5350 5351```ts 5352// xxx.ets 5353import { webview } from '@kit.ArkWeb'; 5354import { BusinessError } from '@kit.BasicServicesKit'; 5355 5356@Entry 5357@Component 5358struct WebComponent { 5359 controller: webview.WebviewController = new webview.WebviewController(); 5360 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5361 5362 build() { 5363 Column() { 5364 Button('setDownloadDelegate') 5365 .onClick(() => { 5366 try { 5367 this.controller.setDownloadDelegate(this.delegate); 5368 } catch (error) { 5369 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5370 } 5371 }) 5372 Web({ src: 'www.example.com', controller: this.controller }) 5373 } 5374 } 5375} 5376``` 5377 5378### startDownload<sup>11+</sup> 5379 5380startDownload(url: string): void 5381 5382使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。 5383 5384**系统能力:** SystemCapability.Web.Webview.Core 5385 5386**参数:** 5387 5388| 参数名 | 类型 | 必填 | 说明 | 5389| ---------------| ------- | ---- | ------------- | 5390| url | string | 是 | 下载地址。 | 5391 5392**错误码:** 5393 5394以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5395 5396| 错误码ID | 错误信息 | 5397| -------- | ------------------------------------------------------------ | 5398| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5399| 17100002 | Invalid url. | 5400 5401**示例:** 5402 5403```ts 5404// xxx.ets 5405import { webview } from '@kit.ArkWeb'; 5406import { BusinessError } from '@kit.BasicServicesKit'; 5407 5408@Entry 5409@Component 5410struct WebComponent { 5411 controller: webview.WebviewController = new webview.WebviewController(); 5412 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5413 5414 build() { 5415 Column() { 5416 Button('setDownloadDelegate') 5417 .onClick(() => { 5418 try { 5419 this.controller.setDownloadDelegate(this.delegate); 5420 } catch (error) { 5421 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5422 } 5423 }) 5424 Button('startDownload') 5425 .onClick(() => { 5426 try { 5427 this.controller.startDownload('https://www.example.com'); 5428 } catch (error) { 5429 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5430 } 5431 }) 5432 Web({ src: 'www.example.com', controller: this.controller }) 5433 } 5434 } 5435} 5436``` 5437 5438### getCustomUserAgent<sup>10+</sup> 5439 5440getCustomUserAgent(): string 5441 5442获取自定义用户代理。 5443 5444默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 5445 5446**系统能力:** SystemCapability.Web.Webview.Core 5447 5448**返回值:** 5449 5450| 类型 | 说明 | 5451| ------ | ------------------------- | 5452| string | 用户自定义代理信息。 | 5453 5454**错误码:** 5455 5456以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5457 5458| 错误码ID | 错误信息 | 5459| -------- | ------------------------------------------------------------ | 5460| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5461 5462**示例:** 5463 5464```ts 5465// xxx.ets 5466import { webview } from '@kit.ArkWeb'; 5467import { BusinessError } from '@kit.BasicServicesKit'; 5468 5469@Entry 5470@Component 5471struct WebComponent { 5472 controller: webview.WebviewController = new webview.WebviewController(); 5473 @State userAgent: string = ''; 5474 5475 build() { 5476 Column() { 5477 Button('getCustomUserAgent') 5478 .onClick(() => { 5479 try { 5480 this.userAgent = this.controller.getCustomUserAgent(); 5481 console.log("userAgent: " + this.userAgent); 5482 } catch (error) { 5483 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5484 } 5485 }) 5486 Web({ src: 'www.example.com', controller: this.controller }) 5487 } 5488 } 5489} 5490``` 5491 5492### setConnectionTimeout<sup>11+</sup> 5493 5494static setConnectionTimeout(timeout: number): void 5495 5496设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。 5497 5498**系统能力:** SystemCapability.Web.Webview.Core 5499 5500**参数:** 5501 5502| 参数名 | 类型 | 必填 | 说明 | 5503| ---------------| ------- | ---- | ------------- | 5504| timeout | number | 是 | socket连接超时时间,以秒为单位,socket必须为大于0的整数。 | 5505 5506**错误码:** 5507 5508以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5509 5510| 错误码ID | 错误信息 | 5511| -------- | ------------------------------------------------------------ | 5512| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 5513 5514**示例:** 5515 5516```ts 5517// xxx.ets 5518import { webview } from '@kit.ArkWeb'; 5519import { BusinessError } from '@kit.BasicServicesKit'; 5520 5521@Entry 5522@Component 5523struct WebComponent { 5524 controller: webview.WebviewController = new webview.WebviewController(); 5525 5526 build() { 5527 Column() { 5528 Button('setConnectionTimeout') 5529 .onClick(() => { 5530 try { 5531 webview.WebviewController.setConnectionTimeout(5); 5532 console.log("setConnectionTimeout: 5s"); 5533 } catch (error) { 5534 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5535 } 5536 }) 5537 Web({ src: 'www.example.com', controller: this.controller }) 5538 .onErrorReceive((event) => { 5539 if (event) { 5540 console.log('getErrorInfo:' + event.error.getErrorInfo()); 5541 console.log('getErrorCode:' + event.error.getErrorCode()); 5542 } 5543 }) 5544 } 5545 } 5546} 5547``` 5548 5549### warmupServiceWorker<sup>12+</sup> 5550 5551static warmupServiceWorker(url: string): void 5552 5553预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。 5554 5555**系统能力:** SystemCapability.Web.Webview.Core 5556 5557**参数:** 5558 5559| 参数名 | 类型 | 必填 | 说明 | 5560| ---------------| ------- | ---- | ------------- | 5561| url | string | 是 | 需要预热ServiceWorker的url。| 5562 5563**错误码:** 5564 5565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5566 5567| 错误码ID | 错误信息 | 5568| -------- | ------------------------------------------------------------ | 5569| 17100002 | Invalid url. | 5570 5571**示例:** 5572 5573```ts 5574// xxx.ts 5575import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5576import { hilog } from '@kit.PerformanceAnalysisKit'; 5577import { window } from '@kit.ArkUI'; 5578import { webview } from '@kit.ArkWeb'; 5579 5580export default class EntryAbility extends UIAbility { 5581 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5582 console.log("EntryAbility onCreate"); 5583 webview.WebviewController.warmupServiceWorker("https://www.example.com"); 5584 AppStorage.setOrCreate("abilityWant", want); 5585 } 5586} 5587``` 5588 5589### enableSafeBrowsing<sup>11+</sup> 5590 5591enableSafeBrowsing(enable: boolean): void 5592 5593<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。 5594本功能默认不生效,OpenHarmony只提供恶意网址拦截页WebUI,网址风险检测以及显示WebUI的功能由Vendor实现。推荐在WebContentsObserver中监听跳转[DidStartNavigation](https://gitee.com/openharmony-tpc/chromium_src/blob/master/content/public/browser/web_contents_observer.h#:~:text=virtual%20void-,DidStartNavigation)、[DidRedirectNavigation](https://gitee.com/openharmony-tpc/chromium_src/blob/master/content/public/browser/web_contents_observer.h#:~:text=virtual%20void-,DidRedirectNavigation)进行检测。 5595<!--RP1End--> 5596 5597**系统能力:** SystemCapability.Web.Webview.Core 5598 5599**参数:** 5600 5601| 参数名 | 类型 | 必填 | 说明 | 5602| --------| ------- | ---- | ---------------------------| 5603| enable | boolean | 是 | 是否启用检查网站安全风险的功能。 | 5604 5605**错误码:** 5606 5607以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5608 5609| 错误码ID | 错误信息 | 5610| -------- | ----------------------- | 5611| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5612 5613**示例:** 5614 5615```ts 5616// xxx.ets 5617import { webview } from '@kit.ArkWeb'; 5618import { BusinessError } from '@kit.BasicServicesKit'; 5619 5620@Entry 5621@Component 5622struct WebComponent { 5623 controller: webview.WebviewController = new webview.WebviewController(); 5624 5625 build() { 5626 Column() { 5627 Button('enableSafeBrowsing') 5628 .onClick(() => { 5629 try { 5630 this.controller.enableSafeBrowsing(true); 5631 console.log("enableSafeBrowsing: true"); 5632 } catch (error) { 5633 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5634 } 5635 }) 5636 Web({ src: 'www.example.com', controller: this.controller }) 5637 } 5638 } 5639} 5640``` 5641 5642### isSafeBrowsingEnabled<sup>11+</sup> 5643 5644isSafeBrowsingEnabled(): boolean 5645 5646获取当前网页是否启用了检查网站安全风险。 5647 5648**系统能力:** SystemCapability.Web.Webview.Core 5649 5650**返回值:** 5651 5652| 类型 | 说明 | 5653| ------- | --------------------------------------- | 5654| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。| 5655 5656**示例:** 5657 5658```ts 5659// xxx.ets 5660import { webview } from '@kit.ArkWeb'; 5661 5662@Entry 5663@Component 5664struct WebComponent { 5665 controller: webview.WebviewController = new webview.WebviewController(); 5666 5667 build() { 5668 Column() { 5669 Button('isSafeBrowsingEnabled') 5670 .onClick(() => { 5671 let result = this.controller.isSafeBrowsingEnabled(); 5672 console.log("result: " + result); 5673 }) 5674 Web({ src: 'www.example.com', controller: this.controller }) 5675 } 5676 } 5677} 5678``` 5679 5680### enableIntelligentTrackingPrevention<sup>12+</sup> 5681 5682enableIntelligentTrackingPrevention(enable: boolean): void 5683 5684启用智能防跟踪功能,默认该功能未启用。 5685 5686**系统能力:** SystemCapability.Web.Webview.Core 5687 5688**参数:** 5689 5690| 参数名 | 类型 | 必填 | 说明 | 5691| --------| ------- | ---- | ---------------------------| 5692| enable | boolean | 是 | 是否启用智能防跟踪功能。 | 5693 5694**错误码:** 5695 5696以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5697 5698| 错误码ID | 错误信息 | 5699| -------- | ----------------------- | 5700| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5701| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5702 5703**示例:** 5704 5705```ts 5706// xxx.ets 5707import { webview } from '@kit.ArkWeb'; 5708import { BusinessError } from '@kit.BasicServicesKit'; 5709 5710@Entry 5711@Component 5712struct WebComponent { 5713 controller: webview.WebviewController = new webview.WebviewController(); 5714 5715 build() { 5716 Column() { 5717 Button('enableIntelligentTrackingPrevention') 5718 .onClick(() => { 5719 try { 5720 this.controller.enableIntelligentTrackingPrevention(true); 5721 console.log("enableIntelligentTrackingPrevention: true"); 5722 } catch (error) { 5723 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5724 } 5725 }) 5726 Web({ src: 'www.example.com', controller: this.controller }) 5727 } 5728 } 5729} 5730``` 5731 5732### isIntelligentTrackingPreventionEnabled<sup>12+</sup> 5733 5734isIntelligentTrackingPreventionEnabled(): boolean 5735 5736获取当前Web是否启用了智能防跟踪功能。 5737 5738**系统能力:** SystemCapability.Web.Webview.Core 5739 5740**返回值:** 5741 5742| 类型 | 说明 | 5743| ------- | --------------------------------------- | 5744| boolean | 当前Web是否启用了智能防跟踪功能,默认为false。| 5745 5746**错误码:** 5747 5748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5749 5750| 错误码ID | 错误信息 | 5751| -------- | ----------------------- | 5752| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5753 5754**示例:** 5755 5756```ts 5757// xxx.ets 5758import { webview } from '@kit.ArkWeb'; 5759import { BusinessError } from '@kit.BasicServicesKit'; 5760 5761@Entry 5762@Component 5763struct WebComponent { 5764 controller: webview.WebviewController = new webview.WebviewController(); 5765 5766 build() { 5767 Column() { 5768 Button('isIntelligentTrackingPreventionEnabled') 5769 .onClick(() => { 5770 try { 5771 let result = this.controller.isIntelligentTrackingPreventionEnabled(); 5772 console.log("result: " + result); 5773 } catch (error) { 5774 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5775 } 5776 }) 5777 Web({ src: 'www.example.com', controller: this.controller }) 5778 } 5779 } 5780} 5781``` 5782 5783### addIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5784 5785static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5786 5787添加智能防跟踪功能绕过的域名列表。 5788 5789**系统能力:** SystemCapability.Web.Webview.Core 5790 5791**参数:** 5792 5793| 参数名 | 类型 | 必填 | 说明 | 5794| ----------- | ------------- | ---- | ------------------------ | 5795| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5796 5797**错误码:** 5798 5799以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5800 5801| 错误码ID | 错误信息 | 5802| -------- | ------------------------ | 5803| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5804 5805**示例:** 5806 5807```ts 5808// xxx.ets 5809import { webview } from '@kit.ArkWeb'; 5810import { BusinessError } from '@kit.BasicServicesKit'; 5811 5812@Entry 5813@Component 5814struct WebComponent { 5815 controller: webview.WebviewController = new webview.WebviewController(); 5816 5817 build() { 5818 Column() { 5819 Button('addIntelligentTrackingPreventionBypassingList') 5820 .onClick(() => { 5821 try { 5822 let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"]; 5823 webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList); 5824 } catch (error) { 5825 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5826 } 5827 }) 5828 Web({ src: 'www.example.com', controller: this.controller }) 5829 } 5830 } 5831} 5832``` 5833 5834### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5835 5836static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5837 5838删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。 5839 5840**系统能力:** SystemCapability.Web.Webview.Core 5841 5842**参数:** 5843 5844| 参数名 | 类型 | 必填 | 说明 | 5845| ----------- | ------------- | ---- | ------------------------ | 5846| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5847 5848**错误码:** 5849 5850以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5851 5852| 错误码ID | 错误信息 | 5853| -------- | ------------------------ | 5854| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5855 5856**示例:** 5857 5858```ts 5859// xxx.ets 5860import { webview } from '@kit.ArkWeb'; 5861import { BusinessError } from '@kit.BasicServicesKit'; 5862 5863@Entry 5864@Component 5865struct WebComponent { 5866 controller: webview.WebviewController = new webview.WebviewController(); 5867 5868 build() { 5869 Column() { 5870 Button('removeIntelligentTrackingPreventionBypassingList') 5871 .onClick(() => { 5872 try { 5873 let hostList = ["www.test1.com", "www.test2.com"]; 5874 webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList); 5875 } catch (error) { 5876 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5877 } 5878 }) 5879 Web({ src: 'www.example.com', controller: this.controller }) 5880 } 5881 } 5882} 5883``` 5884 5885### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5886 5887static clearIntelligentTrackingPreventionBypassingList(): void 5888 5889删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。 5890 5891**系统能力:** SystemCapability.Web.Webview.Core 5892 5893**示例:** 5894 5895```ts 5896// xxx.ets 5897import { webview } from '@kit.ArkWeb'; 5898 5899@Entry 5900@Component 5901struct WebComponent { 5902 controller: webview.WebviewController = new webview.WebviewController(); 5903 5904 build() { 5905 Column() { 5906 Button('clearIntelligentTrackingPreventionBypassingList') 5907 .onClick(() => { 5908 webview.WebviewController.clearIntelligentTrackingPreventionBypassingList(); 5909 }) 5910 Web({ src: 'www.example.com', controller: this.controller }) 5911 } 5912 } 5913} 5914``` 5915 5916### enableAdsBlock<sup>12+</sup> 5917 5918enableAdsBlock(enable: boolean): void 5919 5920启用广告过滤功能,默认该功能未启用。 5921 5922**系统能力:** SystemCapability.Web.Webview.Core 5923 5924**参数:** 5925 5926| 参数名 | 类型 | 必填 | 说明 | 5927| --------| ------- | ---- | ---------------------------| 5928| enable | boolean | 是 | 是否启用广告过滤功能。 | 5929 5930**错误码:** 5931 5932以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5933 5934| 错误码ID | 错误信息 | 5935| -------- | ----------------------- | 5936| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5937| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 5938 5939**示例:** 5940 5941```ts 5942// xxx.ets 5943import { webview } from '@kit.ArkWeb'; 5944import { BusinessError } from '@kit.BasicServicesKit'; 5945 5946@Entry 5947@Component 5948struct WebComponent { 5949 controller: webview.WebviewController = new webview.WebviewController(); 5950 5951 build() { 5952 Column() { 5953 Button('enableAdsBlock') 5954 .onClick(() => { 5955 try { 5956 this.controller.enableAdsBlock(true); 5957 console.log("enableAdsBlock: true") 5958 } catch (error) { 5959 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5960 } 5961 }) 5962 Web({ src: 'www.example.com', controller: this.controller }) 5963 } 5964 } 5965} 5966``` 5967 5968### isAdsBlockEnabled<sup>12+</sup> 5969 5970isAdsBlockEnabled() : boolean 5971 5972查询广告过滤功能是否开启,默认该功能未启用。 5973 5974**系统能力:** SystemCapability.Web.Webview.Core 5975 5976**返回值:** 5977 5978| 类型 | 说明 | 5979| ------------------------------------------------------------ | ---------------------- | 5980| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 | 5981 5982**示例:** 5983 5984```ts 5985// xxx.ets 5986import { webview } from '@kit.ArkWeb'; 5987import { BusinessError } from '@kit.BasicServicesKit'; 5988 5989@Entry 5990@Component 5991struct WebComponent { 5992 controller: webview.WebviewController = new webview.WebviewController(); 5993 5994 build() { 5995 Column() { 5996 Button('isAdsBlockEnabled') 5997 .onClick(() => { 5998 try { 5999 let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled(); 6000 console.log("isAdsBlockEnabled:", isAdsBlockEnabled); 6001 } catch (error) { 6002 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6003 } 6004 }) 6005 Web({ src: 'www.example.com', controller: this.controller }) 6006 } 6007 } 6008} 6009``` 6010 6011### isAdsBlockEnabledForCurPage<sup>12+</sup> 6012 6013isAdsBlockEnabledForCurPage() : boolean 6014 6015查询当前网页是否开启广告过滤功能。 6016当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。 6017 6018**系统能力:** SystemCapability.Web.Webview.Core 6019 6020**返回值:** 6021 6022| 类型 | 说明 | 6023| ------------------------------------------------------------ | ---------------------- | 6024| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 | 6025 6026**示例:** 6027 6028```ts 6029// xxx.ets 6030import { webview } from '@kit.ArkWeb'; 6031import { BusinessError } from '@kit.BasicServicesKit'; 6032 6033@Entry 6034@Component 6035struct WebComponent { 6036 controller: webview.WebviewController = new webview.WebviewController(); 6037 6038 build() { 6039 Column() { 6040 Button('isAdsBlockEnabledForCurPage') 6041 .onClick(() => { 6042 try { 6043 let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage(); 6044 console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage); 6045 } catch (error) { 6046 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6047 } 6048 }) 6049 Web({ src: 'www.example.com', controller: this.controller }) 6050 } 6051 } 6052} 6053``` 6054 6055### setRenderProcessMode<sup>12+</sup> 6056 6057static setRenderProcessMode(mode: RenderProcessMode): void 6058 6059设置ArkWeb渲染子进程模式。 6060 6061**系统能力:** SystemCapability.Web.Webview.Core 6062 6063**参数:** 6064 6065| 参数名 | 类型 | 必填 | 说明 | 6066| ----------- | ------------- | ---- | ------------------------ | 6067| mode | [RenderProcessMode](#renderprocessmode12)| 是 | 渲染子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。| 6068 6069**错误码:** 6070 6071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6072 6073| 错误码ID | 错误信息 | 6074| -------- | ------------------------ | 6075| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6076 6077**示例:** 6078 6079```ts 6080// xxx.ets 6081import { webview } from '@kit.ArkWeb'; 6082import { BusinessError } from '@kit.BasicServicesKit'; 6083 6084@Entry 6085@Component 6086struct WebComponent { 6087 controller: webview.WebviewController = new webview.WebviewController(); 6088 6089 build() { 6090 Column() { 6091 Button('setRenderProcessMode') 6092 .onClick(() => { 6093 try { 6094 webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE); 6095 } catch (error) { 6096 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6097 } 6098 }) 6099 Web({ src: 'www.example.com', controller: this.controller }) 6100 } 6101 } 6102} 6103``` 6104### getRenderProcessMode<sup>12+</sup> 6105 6106static getRenderProcessMode(): RenderProcessMode 6107 6108查询ArkWeb的渲染子进程模式。 6109 6110**系统能力:** SystemCapability.Web.Webview.Core 6111 6112**返回值:** 6113 6114| 类型 | 说明 | 6115| ------------------------------------------------------------ | ---------------------- | 6116| [RenderProcessMode](#renderprocessmode12)| 渲染子进程模式类型。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。| 6117 6118 6119**示例:** 6120 6121```ts 6122// xxx.ets 6123import { webview } from '@kit.ArkWeb'; 6124 6125@Entry 6126@Component 6127struct WebComponent { 6128 controller: webview.WebviewController = new webview.WebviewController(); 6129 6130 build() { 6131 Column() { 6132 Button('getRenderProcessMode') 6133 .onClick(() => { 6134 let mode = webview.WebviewController.getRenderProcessMode(); 6135 console.log("getRenderProcessMode: " + mode); 6136 }) 6137 Web({ src: 'www.example.com', controller: this.controller }) 6138 } 6139 } 6140} 6141``` 6142 6143### terminateRenderProcess<sup>12+</sup> 6144 6145terminateRenderProcess(): boolean 6146 6147销毁渲染进程。 6148 6149调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。 6150 6151**系统能力:** SystemCapability.Web.Webview.Core 6152 6153**返回值:** 6154 6155| 类型 | 说明 | 6156| ------------------------------------------------------------ | ---------------------- | 6157| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。| 6158 6159**错误码:** 6160 6161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6162 6163| 错误码ID | 错误信息 | 6164| -------- | ------------------------------------------------------------ | 6165| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6166 6167**示例:** 6168 6169```ts 6170// xxx.ets 6171import { webview } from '@kit.ArkWeb'; 6172 6173@Entry 6174@Component 6175struct WebComponent { 6176 controller: webview.WebviewController = new webview.WebviewController(); 6177 6178 build() { 6179 Column() { 6180 Button('terminateRenderProcess') 6181 .onClick(() => { 6182 let result = this.controller.terminateRenderProcess(); 6183 console.log("terminateRenderProcess result: " + result); 6184 }) 6185 Web({ src: 'www.example.com', controller: this.controller }) 6186 } 6187 } 6188} 6189``` 6190 6191### postUrl<sup>11+</sup> 6192 6193postUrl(url: string, postData: ArrayBuffer): void 6194 6195使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。 6196 6197**系统能力:** SystemCapability.Web.Webview.Core 6198 6199**参数:** 6200 6201| 参数名 | 类型 | 必填 | 说明 | 6202| ------- | ---------------- | ---- | :-------------------- | 6203| url | string | 是 | 需要加载的 URL。 | 6204| postData | ArrayBuffer | 是 | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。| 6205 6206**错误码:** 6207 6208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6209 6210| 错误码ID | 错误信息 | 6211| -------- | ------------------------------------------------------------ | 6212| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6213| 17100002 | Invalid url. | 6214| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6215 6216**示例:** 6217 6218```ts 6219// xxx.ets 6220import { webview } from '@kit.ArkWeb'; 6221import { BusinessError } from '@kit.BasicServicesKit'; 6222 6223class TestObj { 6224 constructor() { 6225 } 6226 6227 test(str: string): ArrayBuffer { 6228 let buf = new ArrayBuffer(str.length); 6229 let buff = new Uint8Array(buf); 6230 6231 for (let i = 0; i < str.length; i++) { 6232 buff[i] = str.charCodeAt(i); 6233 } 6234 return buf; 6235 } 6236} 6237 6238@Entry 6239@Component 6240struct WebComponent { 6241 controller: webview.WebviewController = new webview.WebviewController(); 6242 @State testObjtest: TestObj = new TestObj(); 6243 6244 build() { 6245 Column() { 6246 Button('postUrl') 6247 .onClick(() => { 6248 try { 6249 // 数据转化为ArrayBuffer类型。 6250 let postData = this.testObjtest.test("Name=test&Password=test"); 6251 this.controller.postUrl('www.example.com', postData); 6252 } catch (error) { 6253 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6254 } 6255 }) 6256 Web({ src: '', controller: this.controller }) 6257 } 6258 } 6259} 6260``` 6261 6262### createWebPrintDocumentAdapter<sup>11+</sup> 6263 6264createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter 6265 6266创建web相关打印功能。 6267 6268**系统能力:** SystemCapability.Web.Webview.Core 6269 6270**参数:** 6271 6272| 参数名 | 类型 | 必填 | 说明 | 6273| ------- | ------ | ---- | :-------------------- | 6274| jobName | string | 是 | 需要打印的文件名。 | 6275 6276**返回值:** 6277 6278| 类型 | 说明 | 6279| -------------------- | ------------------------- | 6280| print.printDocumentAdapter | 返回打印文档的适配器。 | 6281 6282**错误码:** 6283 6284以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6285 6286| 错误码ID | 错误信息 | 6287| -------- | -------------------------------------------------------------------------- | 6288| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6289| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6290 6291**示例:** 6292 6293```ts 6294// xxx.ets 6295import { webview } from '@kit.ArkWeb'; 6296import { BusinessError, print } from '@kit.BasicServicesKit'; 6297 6298@Entry 6299@Component 6300struct WebComponent { 6301 controller: webview.WebviewController = new webview.WebviewController(); 6302 6303 build() { 6304 Column() { 6305 Button('createWebPrintDocumentAdapter') 6306 .onClick(() => { 6307 try { 6308 let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf'); 6309 print.print('example_jobid', webPrintDocadapter, null, getContext()); 6310 } catch (error) { 6311 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6312 } 6313 }) 6314 Web({ src: 'www.example.com', controller: this.controller }) 6315 } 6316 } 6317} 6318``` 6319### isIncognitoMode<sup>11+</sup> 6320 6321isIncognitoMode(): boolean 6322 6323查询当前是否是隐私模式的Webview。 6324 6325**系统能力:** SystemCapability.Web.Webview.Core 6326 6327**返回值:** 6328 6329| 类型 | 说明 | 6330| -------------------- | ------------------------- | 6331| boolean | 返回是否是隐私模式的Webview。 | 6332 6333**错误码:** 6334 6335以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6336 6337| 错误码ID | 错误信息 | 6338| -------- | -------------------------------------------------------------------------- | 6339| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6340 6341**示例:** 6342 6343```ts 6344// xxx.ets 6345import { webview } from '@kit.ArkWeb'; 6346import { BusinessError } from '@kit.BasicServicesKit'; 6347 6348@Entry 6349@Component 6350struct WebComponent { 6351 controller: webview.WebviewController = new webview.WebviewController(); 6352 6353 build() { 6354 Column() { 6355 Button('isIncognitoMode') 6356 .onClick(() => { 6357 try { 6358 let result = this.controller.isIncognitoMode(); 6359 console.log('isIncognitoMode' + result); 6360 } catch (error) { 6361 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6362 } 6363 }) 6364 Web({ src: 'www.example.com', controller: this.controller }) 6365 } 6366 } 6367} 6368``` 6369 6370### getSecurityLevel<sup>11+</sup> 6371 6372getSecurityLevel(): SecurityLevel 6373 6374获取当前网页的安全级别。 6375 6376**系统能力:** SystemCapability.Web.Webview.Core 6377 6378**返回值:** 6379 6380| 类型 | 说明 | 6381| ----------------------------------- | --------------------------- | 6382| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 | 6383 6384**错误码:** 6385 6386以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6387 6388| 错误码ID | 错误信息 | 6389| -------- | ------------------------------------------------------------ | 6390| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6391 6392**示例:** 6393 6394```ts 6395import { webview } from '@kit.ArkWeb'; 6396 6397@Entry 6398@Component 6399struct WebComponent { 6400 controller: webview.WebviewController = new webview.WebviewController(); 6401 6402 build() { 6403 Column() { 6404 Web({ src: 'www.example.com', controller: this.controller }) 6405 .onPageEnd((event) => { 6406 if (event) { 6407 let securityLevel = this.controller.getSecurityLevel(); 6408 console.info('securityLevel: ', securityLevel); 6409 } 6410 }) 6411 } 6412 } 6413} 6414``` 6415 6416### setScrollable<sup>12+</sup> 6417 6418setScrollable(enable: boolean, type?: ScrollType): void 6419 6420设置网页是否允许滚动。 6421 6422**系统能力:** SystemCapability.Web.Webview.Core 6423 6424**参数:** 6425 6426| 参数名 | 类型 | 必填 | 说明 | 6427| ------ | -------- | ---- | ---------------------- | 6428| enable | boolean | 是 | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 | 6429| type | [ScrollType](#scrolltype12) | 否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。| 6430 6431**错误码:** 6432 6433以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6434 6435| 错误码ID | 错误信息 | 6436| -------- | ------------------------------------------------------------ | 6437| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 6438| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6439 6440**示例:** 6441 6442```ts 6443// xxx.ets 6444import { webview } from '@kit.ArkWeb'; 6445import { BusinessError } from '@kit.BasicServicesKit'; 6446 6447@Entry 6448@Component 6449struct WebComponent { 6450 controller: webview.WebviewController = new webview.WebviewController(); 6451 6452 build() { 6453 Column() { 6454 Button('setScrollable') 6455 .onClick(() => { 6456 try { 6457 this.controller.setScrollable(true); 6458 } catch (error) { 6459 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6460 } 6461 }) 6462 Web({ src: 'www.example.com', controller: this.controller }) 6463 } 6464 } 6465} 6466``` 6467 6468### getScrollable<sup>12+</sup> 6469 6470getScrollable(): boolean 6471 6472获取当前网页是否允许滚动。 6473 6474**系统能力:** SystemCapability.Web.Webview.Core 6475 6476**返回值:** 6477 6478| 类型 | 说明 | 6479| ------ | -------------- | 6480| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 | 6481 6482**错误码:** 6483 6484以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6485 6486| 错误码ID | 错误信息 | 6487| -------- | ------------------------------------------------------------ | 6488| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6489 6490**示例:** 6491 6492```ts 6493// xxx.ets 6494import { webview } from '@kit.ArkWeb'; 6495import { BusinessError } from '@kit.BasicServicesKit'; 6496 6497@Entry 6498@Component 6499struct WebComponent { 6500 controller: webview.WebviewController = new webview.WebviewController(); 6501 6502 build() { 6503 Column() { 6504 Button('getScrollable') 6505 .onClick(() => { 6506 try { 6507 let scrollEnabled = this.controller.getScrollable(); 6508 console.log("scrollEnabled: " + scrollEnabled); 6509 } catch (error) { 6510 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6511 } 6512 }) 6513 Web({ src: 'www.example.com', controller: this.controller }) 6514 } 6515 } 6516} 6517``` 6518 6519### setPrintBackground<sup>12+</sup> 6520 6521setPrintBackground(enable: boolean): void 6522 6523设置是否打印网页背景。 6524 6525**系统能力:** SystemCapability.Web.Webview.Core 6526 6527**参数:** 6528 6529| 参数名 | 类型 | 必填 | 说明 | 6530| -------- | ------- | ---- | -------------------------------------- | 6531| enable | boolean | 是 | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 | 6532 6533**错误码:** 6534 6535以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6536 6537| 错误码ID | 错误信息 | 6538| -------- | ------------------------------------------------------------ | 6539| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6540| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6541 6542**示例:** 6543 6544```ts 6545import { webview } from '@kit.ArkWeb'; 6546import { BusinessError } from '@kit.BasicServicesKit'; 6547 6548@Entry 6549@Component 6550struct WebComponent { 6551 controller: webview.WebviewController = new webview.WebviewController(); 6552 6553 build() { 6554 Column() { 6555 Button('setPrintBackground') 6556 .onClick(() => { 6557 try { 6558 this.controller.setPrintBackground(false); 6559 } catch (error) { 6560 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6561 } 6562 }) 6563 Web({ src: 'www.example.com', controller: this.controller }) 6564 } 6565 } 6566} 6567``` 6568 6569### getPrintBackground<sup>12+</sup> 6570 6571getPrintBackground(): boolean 6572 6573查询webview是否打印网页背景。 6574 6575**系统能力:** SystemCapability.Web.Webview.Core 6576 6577**返回值:** 6578 6579| 类型 | 说明 | 6580| -------------------- | ------------------------- | 6581| boolean | 返回Webview是否打印网页背景。 | 6582 6583**错误码:** 6584 6585以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6586 6587| 错误码ID | 错误信息 | 6588| -------- | ------------------------------------------------------------ | 6589| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6590 6591**示例:** 6592 6593```ts 6594import { webview } from '@kit.ArkWeb'; 6595import { BusinessError } from '@kit.BasicServicesKit'; 6596 6597@Entry 6598@Component 6599struct WebComponent { 6600 controller: webview.WebviewController = new webview.WebviewController(); 6601 6602 build() { 6603 Column() { 6604 Button('setPrintBackground') 6605 .onClick(() => { 6606 try { 6607 let enable = this.controller.getPrintBackground(); 6608 console.log("getPrintBackground: " + enable); 6609 } catch (error) { 6610 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6611 } 6612 }) 6613 Web({ src: 'www.example.com', controller: this.controller }) 6614 } 6615 } 6616} 6617``` 6618 6619### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup> 6620 6621getLastJavascriptProxyCallingFrameUrl(): string 6622 6623通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。 6624 6625**系统能力:** SystemCapability.Web.Webview.Core 6626 6627**错误码:** 6628 6629以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6630 6631| 错误码ID | 错误信息 | 6632| -------- | ------------------------------------------------------------ | 6633| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6634 6635**示例:** 6636 6637```ts 6638// xxx.ets 6639import { webview } from '@kit.ArkWeb'; 6640import { BusinessError } from '@kit.BasicServicesKit'; 6641 6642class TestObj { 6643 mycontroller: webview.WebviewController; 6644 6645 constructor(controller: webview.WebviewController) { 6646 this.mycontroller = controller; 6647 } 6648 6649 test(testStr: string): string { 6650 console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6651 return testStr; 6652 } 6653 6654 toString(): void { 6655 console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6656 } 6657 6658 testNumber(testNum: number): number { 6659 console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6660 return testNum; 6661 } 6662 6663 testBool(testBol: boolean): boolean { 6664 console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6665 return testBol; 6666 } 6667} 6668 6669class WebObj { 6670 mycontroller: webview.WebviewController; 6671 6672 constructor(controller: webview.WebviewController) { 6673 this.mycontroller = controller; 6674 } 6675 6676 webTest(): string { 6677 console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6678 return "Web test"; 6679 } 6680 6681 webString(): void { 6682 console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6683 } 6684} 6685 6686@Entry 6687@Component 6688struct Index { 6689 controller: webview.WebviewController = new webview.WebviewController(); 6690 @State testObjtest: TestObj = new TestObj(this.controller); 6691 @State webTestObj: WebObj = new WebObj(this.controller); 6692 6693 build() { 6694 Column() { 6695 Button('refresh') 6696 .onClick(() => { 6697 try { 6698 this.controller.refresh(); 6699 } catch (error) { 6700 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6701 } 6702 }) 6703 Button('Register JavaScript To Window') 6704 .onClick(() => { 6705 try { 6706 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]); 6707 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 6708 } catch (error) { 6709 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6710 } 6711 }) 6712 Web({ src: $rawfile('index.html'), controller: this.controller }) 6713 .javaScriptAccess(true) 6714 } 6715 } 6716} 6717``` 6718 6719加载的html文件。 6720```html 6721<!-- index.html --> 6722<!DOCTYPE html> 6723<html> 6724 <meta charset="utf-8"> 6725 <body> 6726 <button type="button" onclick="htmlTest()">Click Me!</button> 6727 <p id="demo"></p> 6728 <p id="webDemo"></p> 6729 </body> 6730 <script type="text/javascript"> 6731 function htmlTest() { 6732 // This function call expects to return "ArkUI Web Component" 6733 let str=objName.test("webtest data"); 6734 objName.testNumber(1); 6735 objName.testBool(true); 6736 document.getElementById("demo").innerHTML=str; 6737 console.log('objName.test result:'+ str) 6738 6739 // This function call expects to return "Web test" 6740 let webStr = objTestName.webTest(); 6741 document.getElementById("webDemo").innerHTML=webStr; 6742 console.log('objTestName.webTest result:'+ webStr) 6743 } 6744</script> 6745</html> 6746``` 6747 6748### pauseAllTimers<sup>12+</sup> 6749 6750pauseAllTimers(): void 6751 6752暂停所有WebView的定时器。 6753 6754**系统能力:** SystemCapability.Web.Webview.Core 6755 6756**错误码:** 6757 6758以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6759 6760| 错误码ID | 错误信息 | 6761| -------- | ------------------------------------------------------------ | 6762| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6763 6764**示例:** 6765 6766```ts 6767import { webview } from '@kit.ArkWeb'; 6768import { BusinessError } from '@kit.BasicServicesKit'; 6769 6770@Entry 6771@Component 6772struct WebComponent { 6773 controller: webview.WebviewController = new webview.WebviewController(); 6774 6775 build() { 6776 Column() { 6777 Row() { 6778 Button('PauseAllTimers') 6779 .onClick(() => { 6780 try { 6781 webview.WebviewController.pauseAllTimers(); 6782 } catch (error) { 6783 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6784 } 6785 }) 6786 } 6787 Web({ src: $rawfile("index.html"), controller: this.controller }) 6788 } 6789 } 6790} 6791``` 6792加载的html文件。 6793 6794```html 6795<!DOCTYPE html> 6796<html> 6797 <body> 6798 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 6799 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 6800 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 6801 </body> 6802</html> 6803<script> 6804 var timer = null; 6805 var num = 0; 6806 6807 function startTimer() { 6808 timer = setInterval(function() { 6809 document.getElementById("show_num").value = ++num; 6810 }, 1000); 6811 } 6812</script> 6813``` 6814 6815### resumeAllTimers<sup>12+</sup> 6816 6817resumeAllTimers(): void 6818 6819恢复从pauseAllTimers()接口中被暂停的所有的定时器。 6820 6821**系统能力:** SystemCapability.Web.Webview.Core 6822 6823**错误码:** 6824 6825以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6826 6827| 错误码ID | 错误信息 | 6828| -------- | ------------------------------------------------------------ | 6829| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6830 6831**示例:** 6832 6833```ts 6834import { webview } from '@kit.ArkWeb'; 6835import { BusinessError } from '@kit.BasicServicesKit'; 6836 6837@Entry 6838@Component 6839struct WebComponent { 6840 controller: webview.WebviewController = new webview.WebviewController(); 6841 6842 build() { 6843 Column() { 6844 Row() { 6845 Button('ResumeAllTimers') 6846 .onClick(() => { 6847 try { 6848 webview.WebviewController.resumeAllTimers(); 6849 } catch (error) { 6850 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6851 } 6852 }) 6853 Button('PauseAllTimers') 6854 .onClick(() => { 6855 try { 6856 webview.WebviewController.pauseAllTimers(); 6857 } catch (error) { 6858 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6859 } 6860 }) 6861 } 6862 Web({ src: $rawfile("index.html"), controller: this.controller }) 6863 } 6864 } 6865} 6866``` 6867加载的html文件。 6868 6869```html 6870<!DOCTYPE html> 6871<html> 6872 <body> 6873 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 6874 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 6875 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 6876 </body> 6877</html> 6878<script> 6879 var timer = null; 6880 var num = 0; 6881 6882 function startTimer() { 6883 timer = setInterval(function() { 6884 document.getElementById("show_num").value = ++num; 6885 }, 1000); 6886 } 6887 6888 function resetTimer() { 6889 clearInterval(timer); 6890 document.getElementById("show_num").value = 0; 6891 num = 0; 6892 } 6893</script> 6894``` 6895 6896### stopAllMedia<sup>12+</sup> 6897 6898stopAllMedia(): void 6899 6900控制网页所有音视频停止。 6901 6902**系统能力:** SystemCapability.Web.Webview.Core 6903 6904**错误码:** 6905 6906以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6907 6908| 错误码ID | 错误信息 | 6909| -------- | ------------------------------------------------------------ | 6910| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6911 6912**示例:** 6913 6914```ts 6915// xxx.ets 6916import { webview } from '@kit.ArkWeb'; 6917import { BusinessError } from '@kit.BasicServicesKit'; 6918 6919@Entry 6920@Component 6921struct WebComponent { 6922 controller: webview.WebviewController = new webview.WebviewController(); 6923 6924 build() { 6925 Column() { 6926 Button('stopAllMedia') 6927 .onClick(() => { 6928 try { 6929 this.controller.stopAllMedia(); 6930 } catch (error) { 6931 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6932 } 6933 }) 6934 Web({ src: 'www.example.com', controller: this.controller }) 6935 } 6936 } 6937} 6938``` 6939 6940### pauseAllMedia<sup>12+</sup> 6941 6942pauseAllMedia(): void 6943 6944控制网页所有音视频暂停。 6945 6946**系统能力:** SystemCapability.Web.Webview.Core 6947 6948**错误码:** 6949 6950以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6951 6952| 错误码ID | 错误信息 | 6953| -------- | ------------------------------------------------------------ | 6954| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6955 6956**示例:** 6957 6958```ts 6959// xxx.ets 6960import { webview } from '@kit.ArkWeb'; 6961import { BusinessError } from '@kit.BasicServicesKit'; 6962 6963@Entry 6964@Component 6965struct WebComponent { 6966 controller: webview.WebviewController = new webview.WebviewController(); 6967 6968 build() { 6969 Column() { 6970 Button('pauseAllMedia') 6971 .onClick(() => { 6972 try { 6973 this.controller.pauseAllMedia(); 6974 } catch (error) { 6975 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6976 } 6977 }) 6978 Web({ src: 'www.example.com', controller: this.controller }) 6979 } 6980 } 6981} 6982``` 6983 6984### resumeAllMedia<sup>12+</sup> 6985 6986resumeAllMedia(): void 6987 6988控制网页被pauseAllMedia接口暂停的音视频继续播放。 6989 6990**系统能力:** SystemCapability.Web.Webview.Core 6991 6992**错误码:** 6993 6994以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6995 6996| 错误码ID | 错误信息 | 6997| -------- | ------------------------------------------------------------ | 6998| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6999 7000**示例:** 7001 7002```ts 7003// xxx.ets 7004import { webview } from '@kit.ArkWeb'; 7005import { BusinessError } from '@kit.BasicServicesKit'; 7006 7007@Entry 7008@Component 7009struct WebComponent { 7010 controller: webview.WebviewController = new webview.WebviewController(); 7011 7012 build() { 7013 Column() { 7014 Button('resumeAllMedia') 7015 .onClick(() => { 7016 try { 7017 this.controller.resumeAllMedia(); 7018 } catch (error) { 7019 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7020 } 7021 }) 7022 Web({ src: 'www.example.com', controller: this.controller }) 7023 } 7024 } 7025} 7026``` 7027 7028### closeAllMediaPresentations<sup>12+</sup> 7029 7030closeAllMediaPresentations(): void 7031 7032控制网页所有全屏视频关闭。 7033 7034**系统能力:** SystemCapability.Web.Webview.Core 7035 7036**错误码:** 7037 7038以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7039 7040| 错误码ID | 错误信息 | 7041| -------- | ------------------------------------------------------------ | 7042| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7043 7044**示例:** 7045 7046```ts 7047// xxx.ets 7048import { webview } from '@kit.ArkWeb'; 7049import { BusinessError } from '@kit.BasicServicesKit'; 7050 7051@Entry 7052@Component 7053struct WebComponent { 7054 controller: webview.WebviewController = new webview.WebviewController(); 7055 7056 build() { 7057 Column() { 7058 Button('closeAllMediaPresentations') 7059 .onClick(() => { 7060 try { 7061 this.controller.closeAllMediaPresentations(); 7062 } catch (error) { 7063 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7064 } 7065 }) 7066 Web({ src: 'www.example.com', controller: this.controller }) 7067 } 7068 } 7069} 7070``` 7071 7072### getMediaPlaybackState<sup>12+</sup> 7073 7074getMediaPlaybackState(): MediaPlaybackState 7075 7076查询当前所有音视频播控状态。 7077 7078**系统能力:** SystemCapability.Web.Webview.Core 7079 7080**返回值:** 7081 7082| 类型 | 说明 | 7083| ------------------------------------------- | --------------------------------------------------------- | 7084| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 | 7085 7086**错误码:** 7087 7088以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7089 7090| 错误码ID | 错误信息 | 7091| -------- | ------------------------------------------------------------ | 7092| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7093 7094**示例:** 7095 7096```ts 7097// xxx.ets 7098import { webview } from '@kit.ArkWeb'; 7099import { BusinessError } from '@kit.BasicServicesKit'; 7100 7101@Entry 7102@Component 7103struct WebComponent { 7104 controller: webview.WebviewController = new webview.WebviewController(); 7105 7106 build() { 7107 Column() { 7108 Button('getMediaPlaybackState') 7109 .onClick(() => { 7110 try { 7111 console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState()); 7112 } catch (error) { 7113 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7114 } 7115 }) 7116 Web({ src: 'www.example.com', controller: this.controller }) 7117 } 7118 } 7119} 7120``` 7121 7122### setWebSchemeHandler<sup>12+</sup> 7123 7124setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7125 7126为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。 7127 7128**系统能力:** SystemCapability.Web.Webview.Core 7129 7130**参数:** 7131 7132| 参数名 | 类型 | 必填 | 说明 | 7133| ------ | ------ | ---- | :------------------------ | 7134| scheme | string | 是 | 要拦截的协议。 | 7135| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7136 7137**错误码:** 7138 7139以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7140 7141| 错误码ID | 错误信息 | 7142| -------- | ------------------------------------------------------------ | 7143| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7144| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7145 7146**示例:** 7147 7148```ts 7149// xxx.ets 7150import { webview } from '@kit.ArkWeb'; 7151import { BusinessError } from '@kit.BasicServicesKit'; 7152 7153@Entry 7154@Component 7155struct WebComponent { 7156 controller: webview.WebviewController = new webview.WebviewController(); 7157 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7158 7159 build() { 7160 Column() { 7161 Button('setWebSchemeHandler') 7162 .onClick(() => { 7163 try { 7164 this.controller.setWebSchemeHandler('http', this.schemeHandler); 7165 } catch (error) { 7166 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7167 } 7168 }) 7169 Web({ src: 'www.example.com', controller: this.controller }) 7170 } 7171 } 7172} 7173``` 7174 7175### clearWebSchemeHandler<sup>12+</sup> 7176 7177clearWebSchemeHandler(): void 7178 7179清除当前Web组件设置的所有WebSchemeHandler。 7180 7181**系统能力:** SystemCapability.Web.Webview.Core 7182 7183**错误码:** 7184 7185以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7186 7187| 错误码ID | 错误信息 | 7188| -------- | ------------------------------------------------------------ | 7189| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7190 7191**示例:** 7192 7193```ts 7194// xxx.ets 7195import { webview } from '@kit.ArkWeb'; 7196import { BusinessError } from '@kit.BasicServicesKit'; 7197 7198@Entry 7199@Component 7200struct WebComponent { 7201 controller: webview.WebviewController = new webview.WebviewController(); 7202 7203 build() { 7204 Column() { 7205 Button('clearWebSchemeHandler') 7206 .onClick(() => { 7207 try { 7208 this.controller.clearWebSchemeHandler(); 7209 } catch (error) { 7210 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7211 } 7212 }) 7213 Web({ src: 'www.example.com', controller: this.controller }) 7214 } 7215 } 7216} 7217``` 7218 7219### setServiceWorkerWebSchemeHandler<sup>12+</sup> 7220 7221setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7222 7223为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。 7224 7225**系统能力:** SystemCapability.Web.Webview.Core 7226 7227**参数:** 7228 7229| 参数名 | 类型 | 必填 | 说明 | 7230| ------ | ------ | ---- | :------------------------ | 7231| scheme | string | 是 | 要拦截的协议。 | 7232| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7233 7234**错误码:** 7235 7236以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7237 7238| 错误码ID | 错误信息 | 7239| -------- | ------------------------------------------------------------ | 7240| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7241 7242**示例:** 7243 7244```ts 7245// xxx.ets 7246import { webview } from '@kit.ArkWeb'; 7247import { BusinessError } from '@kit.BasicServicesKit'; 7248 7249@Entry 7250@Component 7251struct WebComponent { 7252 controller: webview.WebviewController = new webview.WebviewController(); 7253 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7254 7255 build() { 7256 Column() { 7257 Button('setWebSchemeHandler') 7258 .onClick(() => { 7259 try { 7260 webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler); 7261 } catch (error) { 7262 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7263 } 7264 }) 7265 Web({ src: 'www.example.com', controller: this.controller }) 7266 } 7267 } 7268} 7269``` 7270 7271### clearServiceWorkerWebSchemeHandler<sup>12+</sup> 7272 7273clearServiceWorkerWebSchemeHandler(): void 7274 7275清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。 7276 7277**系统能力:** SystemCapability.Web.Webview.Core 7278 7279**示例:** 7280 7281```ts 7282// xxx.ets 7283import { webview } from '@kit.ArkWeb'; 7284 7285@Entry 7286@Component 7287struct WebComponent { 7288 controller: webview.WebviewController = new webview.WebviewController(); 7289 7290 build() { 7291 Column() { 7292 Button('clearServiceWorkerWebSchemeHandler') 7293 .onClick(() => { 7294 webview.WebviewController.clearServiceWorkerWebSchemeHandler(); 7295 }) 7296 Web({ src: 'www.example.com', controller: this.controller }) 7297 } 7298 } 7299} 7300``` 7301 7302### startCamera<sup>12+</sup> 7303 7304startCamera(): void 7305 7306开启当前网页摄像头捕获。 7307 7308**系统能力:** SystemCapability.Web.Webview.Core 7309 7310**错误码:** 7311 7312以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7313 7314| 错误码ID | 错误信息 | 7315| -------- | ------------------------------------------------------------ | 7316| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7317 7318**示例:** 7319```ts 7320// xxx.ets 7321import { webview } from '@kit.ArkWeb'; 7322import { BusinessError } from '@kit.BasicServicesKit'; 7323import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit'; 7324 7325let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 7326try { 7327 let context: Context = getContext(this) as common.UIAbilityContext; 7328 atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => { 7329 console.info('data:' + JSON.stringify(data)); 7330 console.info('data permissions:' + data.permissions); 7331 console.info('data authResults:' + data.authResults); 7332 }) 7333} catch (error) { 7334 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7335} 7336 7337@Entry 7338@Component 7339struct WebComponent { 7340 controller: webview.WebviewController = new webview.WebviewController(); 7341 7342 build() { 7343 Column() { 7344 Button("startCamera").onClick(() => { 7345 try { 7346 this.controller.startCamera(); 7347 } catch (error) { 7348 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7349 } 7350 }) 7351 Button("stopCamera").onClick(() => { 7352 try { 7353 this.controller.stopCamera(); 7354 } catch (error) { 7355 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7356 } 7357 }) 7358 Button("closeCamera").onClick(() => { 7359 try { 7360 this.controller.closeCamera(); 7361 } catch (error) { 7362 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7363 } 7364 }) 7365 Web({ src: $rawfile('index.html'), controller: this.controller }) 7366 .onPermissionRequest((event) => { 7367 if (event) { 7368 AlertDialog.show({ 7369 title: 'title', 7370 message: 'text', 7371 primaryButton: { 7372 value: 'deny', 7373 action: () => { 7374 event.request.deny(); 7375 } 7376 }, 7377 secondaryButton: { 7378 value: 'onConfirm', 7379 action: () => { 7380 event.request.grant(event.request.getAccessibleResource()); 7381 } 7382 }, 7383 cancel: () => { 7384 event.request.deny(); 7385 } 7386 }) 7387 } 7388 }) 7389 } 7390 } 7391} 7392 7393``` 7394加载的html文件。 7395 ```html 7396<!-- index.html --> 7397<!DOCTYPE html> 7398<html> 7399 <head> 7400 <meta charset="UTF-8"> 7401 </head> 7402 <body> 7403 <video id="video" width="400px" height="400px" autoplay="autoplay"> 7404 </video> 7405 <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" /> 7406 <script> 7407 function getMedia() { 7408 let constraints = { 7409 video: { 7410 width: 500, 7411 height: 500 7412 }, 7413 audio: true 7414 } 7415 let video = document.getElementById("video"); 7416 let promise = navigator.mediaDevices.getUserMedia(constraints); 7417 promise.then(function(MediaStream) { 7418 video.srcObject = MediaStream; 7419 video.play(); 7420 }) 7421 } 7422 </script> 7423 </body> 7424</html> 7425 ``` 7426 7427### stopCamera<sup>12+</sup> 7428 7429stopCamera(): void 7430 7431停止当前网页摄像头捕获。 7432 7433**系统能力:** SystemCapability.Web.Webview.Core 7434 7435**错误码:** 7436 7437以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7438 7439| 错误码ID | 错误信息 | 7440| -------- | ------------------------------------------------------------ | 7441| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7442 7443**示例:** 7444 7445完整示例代码参考[startCamera](#startcamera12)。 7446 7447### closeCamera<sup>12+</sup> 7448 7449closeCamera(): void 7450 7451关闭当前网页摄像头捕获。 7452 7453**系统能力:** SystemCapability.Web.Webview.Core 7454 7455**错误码:** 7456 7457以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7458 7459| 错误码ID | 错误信息 | 7460| -------- | ------------------------------------------------------------ | 7461| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7462 7463**示例:** 7464 7465完整示例代码参考[startCamera](#startcamera12)。 7466 7467### precompileJavaScript<sup>12+</sup> 7468 7469precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\> 7470 7471预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。 7472接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。 7473 7474**系统能力:** SystemCapability.Web.Webview.Core 7475 7476**参数:** 7477 7478| 参数名 | 类型 | 必填 | 说明 | 7479| ------- | ------ | ---- | :-------------------- | 7480| url | string | 是 | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。 | 7481| script | string \| Uint8Array | 是 | 本地JavaScript的文本内容。内容不能为空。 | 7482| cacheOptions | [CacheOptions](#cacheoptions12) | 是 | 用于控制字节码缓存更新。 | 7483 7484**返回值:** 7485 7486| 类型 | 说明 | 7487| ----------------------------------- | --------------------------- | 7488| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 | 7489 7490**错误码:** 7491 7492以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7493 7494| 错误码ID | 错误信息 | 7495| -------- | ------------------------------------------------------------ | 7496| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 7497| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7498 7499**示例:** 7500 7501接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例: 7502 75031. 首先,在EntryAbility中将UIContext存到localStorage中。 7504 7505 ```ts 7506 // EntryAbility.ets 7507 import { UIAbility } from '@kit.AbilityKit'; 7508 import { window } from '@kit.ArkUI'; 7509 7510 const localStorage: LocalStorage = new LocalStorage('uiContext'); 7511 7512 export default class EntryAbility extends UIAbility { 7513 storage: LocalStorage = localStorage; 7514 7515 onWindowStageCreate(windowStage: window.WindowStage) { 7516 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 7517 if (err.code) { 7518 return; 7519 } 7520 7521 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 7522 }); 7523 } 7524 } 7525 ``` 7526 75272. 编写动态组件所需基础代码。 7528 7529 ```ts 7530 // DynamicComponent.ets 7531 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 7532 7533 export interface BuilderData { 7534 url: string; 7535 controller: WebviewController; 7536 } 7537 7538 const storage = LocalStorage.getShared(); 7539 7540 export class NodeControllerImpl extends NodeController { 7541 private rootNode: BuilderNode<BuilderData[]> | null = null; 7542 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 7543 7544 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) { 7545 super(); 7546 this.wrappedBuilder = wrappedBuilder; 7547 } 7548 7549 makeNode(): FrameNode | null { 7550 if (this.rootNode != null) { 7551 return this.rootNode.getFrameNode(); 7552 } 7553 return null; 7554 } 7555 7556 initWeb(url: string, controller: WebviewController) { 7557 if(this.rootNode != null) { 7558 return; 7559 } 7560 7561 const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext; 7562 if (!uiContext) { 7563 return; 7564 } 7565 this.rootNode = new BuilderNode(uiContext); 7566 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 7567 } 7568 } 7569 7570 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 7571 const baseNode = new NodeControllerImpl(wrappedBuilder); 7572 baseNode.initWeb(data.url, data.controller); 7573 return baseNode; 7574 } 7575 ``` 7576 75773. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。 7578 7579 <!--code_no_check--> 7580 ```ts 7581 // PrecompileWebview.ets 7582 import { BuilderData } from "./DynamicComponent"; 7583 import { Config, configs } from "./PrecompileConfig"; 7584 7585 @Builder 7586 function WebBuilder(data: BuilderData) { 7587 Web({ src: data.url, controller: data.controller }) 7588 .onControllerAttached(() => { 7589 precompile(data.controller, configs); 7590 }) 7591 .fileAccess(true) 7592 } 7593 7594 export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7595 7596 export const precompile = async (controller: WebviewController, configs: Array<Config>) => { 7597 for (const config of configs) { 7598 let content = await readRawFile(config.localPath); 7599 7600 try { 7601 controller.precompileJavaScript(config.url, content, config.options) 7602 .then(errCode => { 7603 console.error("precompile successfully! " + errCode); 7604 }).catch((errCode: number) => { 7605 console.error("precompile failed. " + errCode); 7606 }); 7607 } catch (err) { 7608 console.error("precompile failed. " + err.code + " " + err.message); 7609 } 7610 } 7611 } 7612 7613 async function readRawFile(path: string) { 7614 try { 7615 return await getContext().resourceManager.getRawFileContent(path);; 7616 } catch (err) { 7617 return new Uint8Array(0); 7618 } 7619 } 7620 ``` 7621 7622JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。 7623 76244. 编写业务用组件代码。 7625 7626 <!--code_no_check--> 7627 ```ts 7628 // BusinessWebview.ets 7629 import { BuilderData } from "./DynamicComponent"; 7630 7631 @Builder 7632 function WebBuilder(data: BuilderData) { 7633 // 此处组件可根据业务需要自行扩展 7634 Web({ src: data.url, controller: data.controller }) 7635 .cacheMode(CacheMode.Default) 7636 } 7637 7638 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7639 ``` 7640 76415. 编写资源配置信息。 7642 7643 ```ts 7644 // PrecompileConfig.ets 7645 import { webview } from '@kit.ArkWeb' 7646 7647 export interface Config { 7648 url: string, 7649 localPath: string, // 本地资源路径 7650 options: webview.CacheOptions 7651 } 7652 7653 export let configs: Array<Config> = [ 7654 { 7655 url: "https://www.example.com/example.js", 7656 localPath: "example.js", 7657 options: { 7658 responseHeaders: [ 7659 { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="}, 7660 { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"} 7661 ] 7662 } 7663 } 7664 ] 7665 ``` 7666 76676. 在页面中使用。 7668 7669 <!--code_no_check--> 7670 ```ts 7671 // Index.ets 7672 import { webview } from '@kit.ArkWeb'; 7673 import { NodeController } from '@kit.ArkUI'; 7674 import { createNode } from "./DynamicComponent" 7675 import { precompileWebview } from "./PrecompileWebview" 7676 import { businessWebview } from "./BusinessWebview" 7677 7678 @Entry 7679 @Component 7680 struct Index { 7681 @State precompileNode: NodeController | undefined = undefined; 7682 precompileController: webview.WebviewController = new webview.WebviewController(); 7683 7684 @State businessNode: NodeController | undefined = undefined; 7685 businessController: webview.WebviewController = new webview.WebviewController(); 7686 7687 aboutToAppear(): void { 7688 // 初始化用于注入本地资源的Web组件 7689 this.precompileNode = createNode(precompileWebview, 7690 { url: "https://www.example.com/empty.html", controller: this.precompileController}); 7691 } 7692 7693 build() { 7694 Column() { 7695 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 7696 Button("加载页面") 7697 .onClick(() => { 7698 this.businessNode = createNode(businessWebview, { 7699 url: "https://www.example.com/business.html", 7700 controller: this.businessController 7701 }); 7702 }) 7703 // 用于业务的Web组件 7704 NodeContainer(this.businessNode); 7705 } 7706 } 7707 } 7708 ``` 7709 7710当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。 7711 7712### onCreateNativeMediaPlayer<sup>12+</sup> 7713 7714onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void 7715 7716注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。 7717如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。 7718 7719**系统能力:** SystemCapability.Web.Webview.Core 7720 7721**参数:** 7722 7723| 参数名 | 类型 | 必填 | 说明 | 7724|--------|------|------|------| 7725| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 | 7726 7727**示例:** 7728 7729```ts 7730// xxx.ets 7731import { webview } from '@kit.ArkWeb'; 7732 7733class ActualNativeMediaPlayerListener { 7734 handler: webview.NativeMediaPlayerHandler; 7735 7736 constructor(handler: webview.NativeMediaPlayerHandler) { 7737 this.handler = handler; 7738 } 7739 7740 onPlaying() { 7741 // 本地播放器开始播放。 7742 this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING); 7743 } 7744 onPaused() { 7745 // 本地播放器暂停播放。 7746 this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED); 7747 } 7748 onSeeking() { 7749 // 本地播放器开始执行跳转到目标时间点。 7750 this.handler.handleSeeking(); 7751 } 7752 onSeekDone() { 7753 // 本地播放器 seek 完成。 7754 this.handler.handleSeekFinished(); 7755 } 7756 onEnded() { 7757 // 本地播放器播放完成。 7758 this.handler.handleEnded(); 7759 } 7760 onVolumeChanged() { 7761 // 获取本地播放器的音量。 7762 let volume: number = getVolume(); 7763 this.handler.handleVolumeChanged(volume); 7764 } 7765 onCurrentPlayingTimeUpdate() { 7766 // 更新播放时间。 7767 let currentTime: number = getCurrentPlayingTime(); 7768 // 将时间单位换算成秒。 7769 let currentTimeInSeconds = convertToSeconds(currentTime); 7770 this.handler.handleTimeUpdate(currentTimeInSeconds); 7771 } 7772 onBufferedChanged() { 7773 // 缓存发生了变化。 7774 // 获取本地播放器的缓存时长。 7775 let bufferedEndTime: number = getCurrentBufferedTime(); 7776 // 将时间单位换算成秒。 7777 let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime); 7778 this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds); 7779 7780 // 检查缓存状态。 7781 // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。 7782 let lastReadyState: webview.ReadyState = getLastReadyState(); 7783 let currentReadyState: webview.ReadyState = getCurrentReadyState(); 7784 if (lastReadyState != currentReadyState) { 7785 this.handler.handleReadyStateChanged(currentReadyState); 7786 } 7787 } 7788 onEnterFullscreen() { 7789 // 本地播放器进入了全屏状态。 7790 let isFullscreen: boolean = true; 7791 this.handler.handleFullscreenChanged(isFullscreen); 7792 } 7793 onExitFullscreen() { 7794 // 本地播放器退出了全屏状态。 7795 let isFullscreen: boolean = false; 7796 this.handler.handleFullscreenChanged(isFullscreen); 7797 } 7798 onUpdateVideoSize(width: number, height: number) { 7799 // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。 7800 this.handler.handleVideoSizeChanged(width, height); 7801 } 7802 onDurationChanged(duration: number) { 7803 // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。 7804 this.handler.handleDurationChanged(duration); 7805 } 7806 onError(error: webview.MediaError, errorMessage: string) { 7807 // 本地播放器出错了,通知 ArkWeb 内核。 7808 this.handler.handleError(error, errorMessage); 7809 } 7810 onNetworkStateChanged(state: webview.NetworkState) { 7811 // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。 7812 this.handler.handleNetworkStateChanged(state); 7813 } 7814 onPlaybackRateChanged(playbackRate: number) { 7815 // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。 7816 this.handler.handlePlaybackRateChanged(playbackRate); 7817 } 7818 onMutedChanged(muted: boolean) { 7819 // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。 7820 this.handler.handleMutedChanged(muted); 7821 } 7822 7823 // ... 监听本地播放器其他的状态 ... 7824} 7825 7826class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge { 7827 constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) { 7828 // 1. 创建一个本地播放器的状态监听。 7829 let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler); 7830 // 2. 创建一个本地播放器。 7831 // 3. 监听该本地播放器。 7832 // ... 7833 } 7834 7835 updateRect(x: number, y: number, width: number, height: number) { 7836 // <video> 标签的位置和大小发生了变化。 7837 // 根据该信息变化,作出相应的改变。 7838 } 7839 7840 play() { 7841 // 启动本地播放器播放。 7842 } 7843 7844 pause() { 7845 // 暂停本地播放器播放。 7846 } 7847 7848 seek(targetTime: number) { 7849 // 本地播放器跳转到指定的时间点。 7850 } 7851 7852 release() { 7853 // 销毁本地播放器。 7854 } 7855 7856 setVolume(volume: number) { 7857 // ArkWeb 内核要求调整本地播放器的音量。 7858 // 设置本地播放器的音量。 7859 } 7860 7861 setMuted(muted: boolean) { 7862 // 将本地播放器静音或取消静音。 7863 } 7864 7865 setPlaybackRate(playbackRate: number) { 7866 // 调整本地播放器的播放速度。 7867 } 7868 7869 enterFullscreen() { 7870 // 将本地播放器设置为全屏播放。 7871 } 7872 7873 exitFullscreen() { 7874 // 将本地播放器退出全屏播放。 7875 } 7876 7877 resumePlayer() { 7878 // 重新创建应用内播放器。 7879 // 恢复应用内播放器的状态信息。 7880 } 7881 7882 suspendPlayer(type: webview.SuspendType) { 7883 // 记录应用内播放器的状态信息。 7884 // 销毁应用内播放器。 7885 } 7886} 7887 7888@Entry 7889@Component 7890struct WebComponent { 7891 controller: webview.WebviewController = new webview.WebviewController() 7892 build() { 7893 Column() { 7894 Web({ src: 'www.example.com', controller: this.controller }) 7895 .enableNativeMediaPlayer({enable: true, shouldOverlay: false}) 7896 .onPageBegin((event) => { 7897 this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => { 7898 if (!shouldHandle(mediaInfo)) { 7899 // 本地播放器不接管该媒体。 7900 // ArkWeb 内核将用自己的播放器来播放该媒体。 7901 return null; 7902 } 7903 let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo); 7904 return nativePlayer; 7905 }); 7906 }) 7907 } 7908 } 7909} 7910 7911// stub 7912function getVolume() { 7913 return 1; 7914} 7915function getCurrentPlayingTime() { 7916 return 1; 7917} 7918function getCurrentBufferedTime() { 7919 return 1; 7920} 7921function convertToSeconds(input: number) { 7922 return input; 7923} 7924function getLastReadyState() { 7925 return webview.ReadyState.HAVE_NOTHING; 7926} 7927function getCurrentReadyState() { 7928 return webview.ReadyState.HAVE_NOTHING; 7929} 7930function shouldHandle(mediaInfo: webview.MediaInfo) { 7931 return true; 7932} 7933``` 7934 7935### enableWholeWebPageDrawing<sup>12+</sup> 7936 7937static enableWholeWebPageDrawing(): void 7938 7939设置开启网页全量绘制能力。仅在web初始化时设置。 7940 7941**系统能力:** SystemCapability.Web.Webview.Core 7942 7943**示例:** 7944 7945```ts 7946// xxx.ets 7947import { webview } from '@kit.ArkWeb'; 7948import { BusinessError } from '@kit.BasicServicesKit'; 7949 7950@Entry 7951@Component 7952struct WebComponent { 7953 controller: webview.WebviewController = new webview.WebviewController(); 7954 7955 aboutToAppear(): void { 7956 try { 7957 webview.WebviewController.enableWholeWebPageDrawing(); 7958 } catch (error) { 7959 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7960 } 7961 } 7962 7963 build() { 7964 Column() { 7965 Web({ src: 'www.example.com', controller: this.controller }) 7966 } 7967 } 7968} 7969``` 7970 7971### webPageSnapshot<sup>12+</sup> 7972 7973webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void 7974 7975获取网页全量绘制结果。(本地资源网页暂不支持) 7976 7977**系统能力:** SystemCapability.Web.Webview.Core 7978 7979**参数:** 7980 7981| 参数名 | 类型 | 必填 | 说明 | 7982| ----------- | ------------- | ---- | ------------------------ | 7983| info | [SnapshotInfo](#snapshotinfo12)| 是 | 全量绘制结果入参。 | 7984| callback | [SnapshotResult](#snapshotresult12)| 是 | 全量绘制回调结果。 | 7985 7986**示例:** 7987 7988```ts 7989// xxx.ets 7990import { webview } from '@kit.ArkWeb'; 7991import { BusinessError } from '@kit.BasicServicesKit'; 7992 7993@Entry 7994@Component 7995struct WebComponent { 7996 controller: webview.WebviewController = new webview.WebviewController(); 7997 7998 build() { 7999 Column() { 8000 Button('webPageSnapshot') 8001 .onClick(() => { 8002 try { 8003 this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => { 8004 if (error) { 8005 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8006 return; 8007 } 8008 if (result) { 8009 console.info(`return value is:${result}`); 8010 //开发者可以根据需要处理返回结果 8011 } 8012 }); 8013 } catch (error) { 8014 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8015 } 8016 }) 8017 Web({ src: 'www.example.com', controller: this.controller }) 8018 } 8019 } 8020} 8021``` 8022 8023### injectOfflineResources<sup>12+</sup> 8024 8025injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void 8026 8027将本地离线资源注入到内存缓存中,以提升页面首次启动速度。 8028内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。 8029正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。 8030资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。 8031以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。 8032当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。 8033 8034**系统能力:** SystemCapability.Web.Webview.Core 8035 8036**参数:** 8037 8038| 参数名 | 类型 | 必填 | 说明 | 8039| ------- | ------ | ---- | :-------------------- | 8040| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是 | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。 | 8041 8042**错误码:** 8043 8044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8045 8046| 错误码ID | 错误信息 | 8047| -------- | ------------------------------------------------------------ | 8048| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8049| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8050| 17100002 | Invalid url. | 8051 8052**示例:** 8053 8054接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例: 80551. 首先,在EntryAbility中将UIContext存到localStorage中。 8056 8057 ```ts 8058 // EntryAbility.ets 8059 import { UIAbility } from '@kit.AbilityKit'; 8060 import { window } from '@kit.ArkUI'; 8061 8062 const localStorage: LocalStorage = new LocalStorage('uiContext'); 8063 8064 export default class EntryAbility extends UIAbility { 8065 storage: LocalStorage = localStorage; 8066 8067 onWindowStageCreate(windowStage: window.WindowStage) { 8068 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 8069 if (err.code) { 8070 return; 8071 } 8072 8073 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 8074 }); 8075 } 8076 } 8077 ``` 8078 80792. 编写动态组件所需基础代码。 8080 8081 ```ts 8082 // DynamicComponent.ets 8083 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 8084 8085 export interface BuilderData { 8086 url: string; 8087 controller: WebviewController; 8088 } 8089 8090 const storage = LocalStorage.getShared(); 8091 8092 export class NodeControllerImpl extends NodeController { 8093 private rootNode: BuilderNode<BuilderData[]> | null = null; 8094 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 8095 8096 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) { 8097 super(); 8098 this.wrappedBuilder = wrappedBuilder; 8099 } 8100 8101 makeNode(): FrameNode | null { 8102 if (this.rootNode != null) { 8103 return this.rootNode.getFrameNode(); 8104 } 8105 return null; 8106 } 8107 8108 initWeb(url: string, controller: WebviewController) { 8109 if(this.rootNode != null) { 8110 return; 8111 } 8112 8113 const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext; 8114 if (!uiContext) { 8115 return; 8116 } 8117 this.rootNode = new BuilderNode(uiContext); 8118 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 8119 } 8120 } 8121 8122 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 8123 const baseNode = new NodeControllerImpl(wrappedBuilder); 8124 baseNode.initWeb(data.url, data.controller); 8125 return baseNode; 8126 } 8127 ``` 8128 81293. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。 8130 8131 <!--code_no_check--> 8132 ```ts 8133 // InjectWebview.ets 8134 import { webview } from '@kit.ArkWeb'; 8135 import { resourceConfigs } from "./Resource"; 8136 import { BuilderData } from "./DynamicComponent"; 8137 8138 @Builder 8139 function WebBuilder(data: BuilderData) { 8140 Web({ src: data.url, controller: data.controller }) 8141 .onControllerAttached(async () => { 8142 try { 8143 data.controller.injectOfflineResources(await getData ()); 8144 } catch (err) { 8145 console.error("error: " + err.code + " " + err.message); 8146 } 8147 }) 8148 .fileAccess(true) 8149 } 8150 8151 export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8152 8153 export async function getData() { 8154 const resourceMapArr: Array<webview.OfflineResourceMap> = []; 8155 8156 // 读取配置,从rawfile目录中读取文件内容 8157 for (let config of resourceConfigs) { 8158 let buf: Uint8Array = new Uint8Array(0); 8159 if (config.localPath) { 8160 buf = await readRawFile(config.localPath); 8161 } 8162 8163 resourceMapArr.push({ 8164 urlList: config.urlList, 8165 resource: buf, 8166 responseHeaders: config.responseHeaders, 8167 type: config.type, 8168 }) 8169 } 8170 8171 return resourceMapArr; 8172 } 8173 8174 export async function readRawFile(url: string) { 8175 try { 8176 return await getContext().resourceManager.getRawFileContent(url); 8177 } catch (err) { 8178 return new Uint8Array(0); 8179 } 8180 } 8181 ``` 8182 81834. 编写业务用组件代码。 8184 8185 <!--code_no_check--> 8186 ```ts 8187 // BusinessWebview.ets 8188 import { BuilderData } from "./DynamicComponent"; 8189 8190 @Builder 8191 function WebBuilder(data: BuilderData) { 8192 // 此处组件可根据业务需要自行扩展 8193 Web({ src: data.url, controller: data.controller }) 8194 .cacheMode(CacheMode.Default) 8195 } 8196 8197 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8198 ``` 8199 82005. 编写资源配置信息。 8201 8202 ```ts 8203 // Resource.ets 8204 import { webview } from '@kit.ArkWeb'; 8205 8206 export interface ResourceConfig { 8207 urlList: Array<string>, 8208 type: webview.OfflineResourceType, 8209 responseHeaders: Array<Header>, 8210 localPath: string, // 本地资源存放在rawfile目录下的路径 8211 } 8212 8213 export const resourceConfigs: Array<ResourceConfig> = [ 8214 { 8215 localPath: "example.png", 8216 urlList: [ 8217 "https://www.example.com/", 8218 "https://www.example.com/path1/example.png", 8219 "https://www.example.com/path2/example.png", 8220 ], 8221 type: webview.OfflineResourceType.IMAGE, 8222 responseHeaders: [ 8223 { headerKey: "Cache-Control", headerValue: "max-age=1000" }, 8224 { headerKey: "Content-Type", headerValue: "image/png" }, 8225 ] 8226 }, 8227 { 8228 localPath: "example.js", 8229 urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址 8230 "https://www.example.com/example.js", 8231 ], 8232 type: webview.OfflineResourceType.CLASSIC_JS, 8233 responseHeaders: [ 8234 // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头 8235 { headerKey: "Cross-Origin", headerValue:"anonymous" } 8236 ] 8237 }, 8238 ]; 8239 ``` 8240 82416. 在页面中使用。 8242 <!--code_no_check--> 8243 ```ts 8244 // Index.ets 8245 import { webview } from '@kit.ArkWeb'; 8246 import { NodeController } from '@kit.ArkUI'; 8247 import { createNode } from "./DynamicComponent" 8248 import { injectWebview } from "./InjectWebview" 8249 import { businessWebview } from "./BusinessWebview" 8250 8251 @Entry 8252 @Component 8253 struct Index { 8254 @State injectNode: NodeController | undefined = undefined; 8255 injectController: webview.WebviewController = new webview.WebviewController(); 8256 8257 @State businessNode: NodeController | undefined = undefined; 8258 businessController: webview.WebviewController = new webview.WebviewController(); 8259 8260 aboutToAppear(): void { 8261 // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可 8262 this.injectNode = createNode(injectWebview, 8263 { url: "https://www.example.com/empty.html", controller: this.injectController}); 8264 } 8265 8266 build() { 8267 Column() { 8268 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 8269 Button("加载页面") 8270 .onClick(() => { 8271 this.businessNode = createNode(businessWebview, { 8272 url: "https://www.example.com/business.html", 8273 controller: this.businessController 8274 }); 8275 }) 8276 // 用于业务的Web组件 8277 NodeContainer(this.businessNode); 8278 } 8279 } 8280 } 8281 ``` 8282 82837. 加载的HTML网页示例。 8284 8285 ```HTML 8286 <!DOCTYPE html> 8287 <html lang="en"> 8288 <head></head> 8289 <body> 8290 <img src="https://www.example.com/path1/request.png" /> 8291 <img src="https://www.example.com/path2/request.png" /> 8292 <script src="https://www.example.com/example.js" crossorigin="anonymous"></script> 8293 </body> 8294 </html> 8295 ``` 8296 8297### setHostIP<sup>12+</sup> 8298 8299static setHostIP(hostName: string, address: string, aliveTime: number): void 8300 8301设置主机域名解析后的IP地址。 8302 8303**系统能力:** SystemCapability.Web.Webview.Core 8304 8305**参数:** 8306 8307| 参数名 | 类型 | 必填 | 说明 | 8308| --------- | -------- | ---- | ------------------------------------ | 8309| hostName | string | 是 | 要添加DNS记录的主机域名。 | 8310| address | string | 是 | 主机域名解析地址(支持IPv4,IPv6)。 | 8311| aliveTime | number | 是 | 缓存有效时间(秒)。 | 8312 8313**错误码:** 8314 8315以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8316 8317| 错误码ID | 错误信息 | 8318| -------- | ------------------------ | 8319| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8320 8321**示例:** 8322 8323请参考[clearHostIP](#clearhostip12)。 8324 8325### clearHostIP<sup>12+</sup> 8326 8327static clearHostIP(hostName: string): void 8328 8329清除指定主机域名解析后的IP地址。 8330 8331**系统能力:** SystemCapability.Web.Webview.Core 8332 8333**参数:** 8334 8335| 参数名 | 类型 | 必填 | 说明 | 8336| -------- | -------- | ---- | ------------------------- | 8337| hostName | string | 是 | 要清除DNS记录的主机域名。 | 8338 8339**错误码:** 8340 8341以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8342 8343| 错误码ID | 错误信息 | 8344| -------- | ------------------------ | 8345| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8346 8347**示例:** 8348 8349```ts 8350// xxx.ets 8351import { webview } from '@kit.ArkWeb'; 8352import { BusinessError } from '@kit.BasicServicesKit'; 8353 8354@Entry 8355@Component 8356struct WebComponent { 8357 controller: webview.WebviewController = new webview.WebviewController(); 8358 8359 build() { 8360 Column() { 8361 // url加载前设置生效. 8362 Button('setHostIP') 8363 .onClick(() => { 8364 try { 8365 webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30); 8366 } catch (error) { 8367 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8368 } 8369 }) 8370 Button('clearHostIP') 8371 .onClick(() => { 8372 try { 8373 webview.WebviewController.clearHostIP('www.example.com'); 8374 } catch (error) { 8375 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8376 } 8377 }) 8378 Web({ src: 'www.example.com', controller: this.controller }) 8379 } 8380 } 8381} 8382``` 8383 8384### getSurfaceId<sup>12+</sup> 8385 8386getSurfaceId(): string 8387 8388获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。 8389 8390**系统能力:** SystemCapability.Web.Webview.Core 8391 8392**返回值:** 8393 8394| 类型 | 说明 | 8395| ------ | ------------------- | 8396| string | ArkWeb持有Surface的ID。 | 8397 8398**示例:** 8399 8400```ts 8401// xxx.ets 8402import { webview } from '@kit.ArkWeb'; 8403import { image } from '@kit.ImageKit'; 8404import { BusinessError } from '@kit.BasicServicesKit'; 8405 8406@Entry 8407@Component 8408struct Example{ 8409 controller: webview.WebviewController = new webview.WebviewController(); 8410 8411 @State imagePixelMap: image.PixelMap | undefined = undefined; 8412 8413 build(){ 8414 Column(){ 8415 Button("截图") 8416 .onClick(()=>{ 8417 try { 8418 let surfaceId = this.controller.getSurfaceId(); 8419 console.log("surfaceId: " + surfaceId); 8420 if(surfaceId.length != 0) { 8421 let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}} 8422 this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region) 8423 } 8424 } catch (error) { 8425 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8426 } 8427 }) 8428 Image(this.imagePixelMap) 8429 .height(100) 8430 Web({src: 'www.example.com', controller: this.controller}) 8431 } 8432 } 8433} 8434``` 8435 8436### setUrlTrustList<sup>12+</sup> 8437 8438setUrlTrustList(urlTrustList: string): void 8439 8440设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。 8441 8442**系统能力:** SystemCapability.Web.Webview.Core 8443 8444**参数:** 8445 8446| 参数名 | 类型 | 必填 | 说明 | 8447| ------- | ------ | ---- | :-------------------- | 8448| urlTrustList | string | 是 | url白名单列表,使用json格式配置,最大支持10MB。<br/>白名单设置接口为覆盖方式,多次调用接口时,以最后一次设置为准。<br/>当本参数为空字符串时,表示取消白名单,放行所有url的访问。<br/>json格式示例:<br/>{<br> "UrlPermissionList": [<br/> {<br/> "scheme": "https",<br/> "host": "www\.example1.com",<br/> "port": 443,<br/> "path": "pathA/pathB"<br/> },<br/> {<br/> "scheme": "http",<br/> "host": "www\.example2.com",<br/> "port": 80,<br/> "path": "test1/test2/test3"<br/> }<br/> ]<br/>} | 8449 8450**白名单json格式参数** 8451| 字段 | 参数类型 | 必填 | 参数描述 | 8452| -------- | -------- | ---- | ------------------------- | 8453| scheme | string | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 | 8454| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 | 8455| port | number | 否 | 可选字段,不设置即不匹配该项。 | 8456| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。| 8457 8458**错误码:** 8459 8460以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8461 8462| 错误码ID | 错误信息 | 8463| -------- | ------------------------------------------------------------ | 8464| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed. | 8465| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8466 8467**示例:** 8468 ```ts 8469 // xxx.ets 8470 import { webview } from '@kit.ArkWeb'; 8471 import { BusinessError } from '@kit.BasicServicesKit'; 8472 8473 @Entry 8474 @Component 8475 struct WebComponent { 8476 controller: webview.WebviewController = new webview.WebviewController(); 8477 urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}" 8478 8479 build() { 8480 Column() { 8481 Button('Setting the trustlist') 8482 .onClick(() => { 8483 try { 8484 // 设置白名单,只允许访问trust网页 8485 this.controller.setUrlTrustList(this.urltrustList); 8486 } catch (error) { 8487 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8488 } 8489 }) 8490 Button('Cancel the trustlist.') 8491 .onClick(() => { 8492 try { 8493 // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问 8494 this.controller.setUrlTrustList(""); 8495 } catch (error) { 8496 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8497 } 8498 }) 8499 Button('Access the trust web') 8500 .onClick(() => { 8501 try { 8502 // 白名单生效,可以访问trust网页 8503 this.controller.loadUrl('http://trust.example.com/test'); 8504 } catch (error) { 8505 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8506 } 8507 }) 8508 Button('Access the untrust web') 8509 .onClick(() => { 8510 try { 8511 // 白名单生效,此时不可以访问untrust网页,并弹出错误页 8512 this.controller.loadUrl('http://untrust.example.com/test'); 8513 } catch (error) { 8514 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8515 } 8516 }) 8517 Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => { 8518 try { 8519 // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页 8520 this.controller.setUrlTrustList(this.urltrustList); 8521 } catch (error) { 8522 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8523 } 8524 }) 8525 } 8526 } 8527 } 8528 ``` 8529 8530### setPathAllowingUniversalAccess<sup>12+</sup> 8531 8532setPathAllowingUniversalAccess(pathList: Array\<string\>): void 8533 8534设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileAccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一: 8535 85361.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8537 8538* /data/storage/el2/base/files/example 8539* /data/storage/el2/base/haps/entry/files/example 8540 85412.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8542 8543* /data/storage/el1/bundle/entry/resource/resfile 8544* /data/storage/el1/bundle/entry/resource/resfile/example 8545 8546当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileAccess)的行为为准。 8547 8548**系统能力:** SystemCapability.Web.Webview.Core 8549 8550**参数:** 8551 8552| 参数名 | 类型 | 必填 | 说明 | 8553| -------- | -------- | ---- | ------------------------- | 8554| pathList | Array\<string\> | 是 | 路径列表 | 8555 8556**错误码:** 8557 8558以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8559 8560| 错误码ID | 错误信息 | 8561| -------- | ------------------------ | 8562| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 8563| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8564 8565**示例:** 8566 8567```ts 8568// xxx.ets 8569import { webview } from '@kit.ArkWeb'; 8570import { BusinessError } from '@kit.BasicServicesKit'; 8571 8572@Entry 8573@Component 8574struct WebComponent { 8575 controller: WebviewController = new webview.WebviewController(); 8576 8577 build() { 8578 Row() { 8579 Web({ src: "", controller: this.controller }) 8580 .onControllerAttached(() => { 8581 try { 8582 // 设置允许可以跨域访问的路径列表 8583 this.controller.setPathAllowingUniversalAccess([ 8584 getContext().resourceDir, 8585 getContext().filesDir + "/example" 8586 ]) 8587 this.controller.loadUrl("file://" + getContext().resourceDir + "/index.html") 8588 } catch (error) { 8589 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8590 } 8591 }) 8592 .javaScriptAccess(true) 8593 .fileAccess(true) 8594 .domStorageAccess(true) 8595 } 8596 } 8597} 8598 8599``` 8600 8601加载的html文件,位于应用资源目录resource/resfile/index.html。 8602```html 8603<!-- index.html --> 8604<!DOCTYPE html> 8605<html lang="en"> 8606 8607<head> 8608 <meta charset="utf-8"> 8609 <title>Demo</title> 8610 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover"> 8611 <script> 8612 function getFile() { 8613 var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js"; 8614 var xmlHttpReq = new XMLHttpRequest(); 8615 xmlHttpReq.onreadystatechange = function(){ 8616 console.log("readyState:" + xmlHttpReq.readyState); 8617 console.log("status:" + xmlHttpReq.status); 8618 if(xmlHttpReq.readyState == 4){ 8619 if (xmlHttpReq.status == 200) { 8620 // 如果ets侧正确设置路径列表,则此处能正常获取资源 8621 const element = document.getElementById('text'); 8622 element.textContent = "load " + file + " success"; 8623 } else { 8624 // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误 8625 const element = document.getElementById('text'); 8626 element.textContent = "load " + file + " failed"; 8627 } 8628 } 8629 } 8630 xmlHttpReq.open("GET", file); 8631 xmlHttpReq.send(null); 8632 } 8633 8634 </script> 8635</head> 8636 8637<body> 8638<div class="page"> 8639 <button id="example" onclick="getFile()">stealFile</button> 8640</div> 8641<div id="text"></div> 8642</body> 8643 8644</html> 8645``` 8646 8647html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/resfile/js/script.js。 8648<!--code_no_check--> 8649```javascript 8650const body = document.body; 8651const element = document.createElement('div'); 8652element.textContent = 'success'; 8653body.appendChild(element); 8654``` 8655 8656### enableBackForwardCache<sup>12+</sup> 8657 8658static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void 8659 8660开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。 8661 8662需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。 8663 8664**系统能力:** SystemCapability.Web.Webview.Core 8665 8666**参数:** 8667 8668| 参数名 | 类型 | 必填 | 说明 | 8669| ---------------| ------- | ---- | ------------- | 8670| features | [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是 | 允许使用特定的页面进入前进后退缓存中。| 8671 8672**示例:** 8673 8674```ts 8675// EntryAbility.ets 8676import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 8677import { hilog } from '@kit.PerformanceAnalysisKit'; 8678import { window } from '@kit.ArkUI'; 8679import { webview } from '@kit.ArkWeb'; 8680 8681export default class EntryAbility extends UIAbility { 8682 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 8683 let features = new webview.BackForwardCacheSupportedFeatures(); 8684 features.nativeEmbed = true; 8685 features.mediaTakeOver = true; 8686 // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和 8687 // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。 8688 webview.WebviewController.enableBackForwardCache(features); 8689 webview.WebviewController.initializeWebEngine(); 8690 AppStorage.setOrCreate("abilityWant", want); 8691 } 8692} 8693``` 8694 8695### setBackForwardCacheOptions<sup>12+</sup> 8696 8697setBackForwardCacheOptions(options: BackForwardCacheOptions): void 8698 8699可以设置Web组件中前进后退缓存的相关选项。 8700 8701**系统能力:** SystemCapability.Web.Webview.Core 8702 8703**参数:** 8704 8705| 参数名 | 类型 | 必填 | 说明 | 8706| ---------------| ------- | ---- | ------------- | 8707| options | [BackForwardCacheOptions](#backforwardcacheoptions12) | 是 | 用来控制web组件前进后退缓存相关选项。| 8708 8709**错误码:** 8710 8711以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8712 8713| 错误码ID | 错误信息 | 8714| -------- | ------------------------------------------------------------ | 8715| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8716 8717**示例:** 8718 8719```ts 8720// xxx.ts 8721import { webview } from '@kit.ArkWeb'; 8722 8723@Entry 8724@Component 8725struct Index { 8726 controller: webview.WebviewController = new webview.WebviewController(); 8727 8728 build() { 8729 Column() { 8730 Row() { 8731 Button("Add options").onClick((event: ClickEvent) => { 8732 let options = new webview.BackForwardCacheOptions(); 8733 options.size = 3; 8734 options.timeToLive = 10; 8735 this.controller.setBackForwardCacheOptions(options); 8736 }) 8737 Button("Backward").onClick((event: ClickEvent) => { 8738 this.controller.backward(); 8739 }) 8740 Button("Forward").onClick((event: ClickEvent) => { 8741 this.controller.forward(); 8742 }) 8743 } 8744 Web({ src: "https://www.example.com", controller: this.controller }) 8745 } 8746 .height('100%') 8747 .width('100%') 8748 } 8749} 8750``` 8751 8752### trimMemoryByPressureLevel<sup>14+</sup> 8753 8754trimMemoryByPressureLevel(level: number): void 8755 8756根据指定的内存压力等级,主动清理Web组件占用的缓存。 8757 8758**系统能力:** SystemCapability.Web.Webview.Core 8759 8760**参数:** 8761 8762| 参数名 | 类型 | 必填 | 说明 | 8763| ------- | ------ | ---- | :-------------------- | 8764| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。| 8765 8766**错误码:** 8767 8768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8769 8770| 错误码ID | 错误信息 | 8771| -------- | ------------------------------------------------------------ | 8772| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed. | 8773 8774**示例:** 8775```ts 8776// xxx.ets 8777import { webview } from '@kit.ArkWeb'; 8778import { BusinessError } from '@kit.BasicServicesKit'; 8779 8780@Entry 8781@Component 8782struct WebComponent { 8783 controller: WebviewController = new webview.WebviewController(); 8784 build() { 8785 Column() { 8786 Row() { 8787 Button('trim_Memory') 8788 .onClick(() => { 8789 try { 8790 // 设置当前内存压力等级为适中,释放少量内存 8791 webview.WebviewController.trimMemoryByPressureLevel( 8792 webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE); 8793 } catch (error) { 8794 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8795 } 8796 }) 8797 }.height('10%') 8798 Web({ src: 'www.example.com', controller: this.controller }) 8799 } 8800 } 8801} 8802``` 8803 8804### createPdf<sup>14+</sup> 8805 8806createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void 8807 8808异步callback方式获取指定网页的数据流。 8809 8810**系统能力:** SystemCapability.Web.Webview.Core 8811 8812**参数:** 8813 8814| 参数名 | 类型 | 必填 | 说明 | 8815| ------------- | --------------------------------------- | ---- | ----------------------- | 8816| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 8817| callback | AsyncCallback<[PdfData](#pdfdata14)> | 是 | 回调返回网页PDF数据流。 | 8818 8819| 错误码ID | 错误信息 | 8820| -------- | ------------------------------------------------------------ | 8821| 401 | Parameter error. Possible causes: Incorrect parameter types. | 8822| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8823 8824**示例**: 8825 8826```ts 8827import { fileIo as fs } from '@kit.CoreFileKit'; 8828import { webview } from '@kit.ArkWeb'; 8829import { BusinessError } from '@kit.BasicServicesKit'; 8830import { common } from '@kit.AbilityKit'; 8831 8832@Entry 8833@Component 8834struct Index { 8835 controller: webview.WebviewController = new webview.WebviewController(); 8836 pdfConfig: webview.PdfConfiguration = { 8837 width: 8.27, 8838 height: 11.69, 8839 marginTop: 0, 8840 marginBottom: 0, 8841 marginRight: 0, 8842 marginLeft: 0, 8843 shouldPrintBackground: true 8844 } 8845 8846 build() { 8847 Column() { 8848 Button('SavePDF') 8849 .onClick(() => { 8850 this.controller.createPdf( 8851 this.pdfConfig, 8852 (error, result: webview.PdfData) => { 8853 try { 8854 // 获取组件上下文 8855 let context = getContext(this) as common.UIAbilityContext; 8856 // 获取沙箱路径,设置pdf文件名 8857 let filePath = context.filesDir + "/test.pdf"; 8858 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 8859 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 8860 console.info("createPDF write data to file succeed and size is:" + writeLen); 8861 }).catch((err: BusinessError) => { 8862 console.error("createPDF write data to file failed with error message: " + err.message + 8863 ", error code: " + err.code); 8864 }).finally(() => { 8865 fs.closeSync(file); 8866 }); 8867 } catch (resError) { 8868 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8869 } 8870 }); 8871 }) 8872 Web({ src: "www.example.com", controller: this.controller }) 8873 } 8874 } 8875} 8876``` 8877 8878### createPdf<sup>14+</sup> 8879 8880createPdf(configuration: PdfConfiguration): Promise\<PdfData\> 8881 8882以Promise方式异步获取指定网页的数据流。 8883 8884**系统能力:** SystemCapability.Web.Webview.Core 8885 8886**参数:** 8887 8888| 参数名 | 类型 | 必填 | 说明 | 8889| ------------- | --------------------------------------- | ---- | ----------------- | 8890| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 8891 8892**返回值:** 8893 8894| 类型 | 说明 | 8895| ------------------------------ | ----------------------------- | 8896| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 | 8897 8898| 错误码ID | 错误信息 | 8899| -------- | ------------------------------------------------------------ | 8900| 401 | Parameter error. Possible causes: Incorrect parameter types. | 8901| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8902 8903**示例**: 8904 8905```ts 8906import { fileIo as fs } from '@kit.CoreFileKit'; 8907import { webview } from '@kit.ArkWeb'; 8908import { BusinessError } from '@kit.BasicServicesKit'; 8909import { common } from '@kit.AbilityKit'; 8910 8911@Entry 8912@Component 8913struct Index { 8914 controller: webview.WebviewController = new webview.WebviewController(); 8915 pdfConfig: webview.PdfConfiguration = { 8916 width: 8.27, 8917 height: 11.69, 8918 marginTop: 0, 8919 marginBottom: 0, 8920 marginRight: 0, 8921 marginLeft: 0, 8922 shouldPrintBackground: true 8923 } 8924 8925 build() { 8926 Column() { 8927 Button('SavePDF') 8928 .onClick(() => { 8929 this.controller.createPdf(this.pdfConfig) 8930 .then((result: webview.PdfData) => { 8931 try { 8932 // 获取组件上下文 8933 let context = getContext(this) as common.UIAbilityContext; 8934 // 获取沙箱路径,设置pdf文件名 8935 let filePath = context.filesDir + "/test.pdf"; 8936 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 8937 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 8938 console.info("createPDF write data to file succeed and size is:" + writeLen); 8939 }).catch((err: BusinessError) => { 8940 console.error("createPDF write data to file failed with error message: " + err.message + 8941 ", error code: " + err.code); 8942 }).finally(() => { 8943 fs.closeSync(file); 8944 }); 8945 } catch (resError) { 8946 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 8947 } 8948 }) 8949 }) 8950 Web({ src: "www.example.com", controller: this.controller }) 8951 } 8952 } 8953} 8954``` 8955 8956### getScrollOffset<sup>13+</sup> 8957 8958getScrollOffset(): ScrollOffset 8959 8960获取网页当前的滚动偏移量。 8961 8962**系统能力:** SystemCapability.Web.Webview.Core 8963 8964**返回值** 8965 8966| 类型 | 说明 | 8967| :------------------------------ | ---------------------- | 8968| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 | 8969 8970**示例:** 8971 8972```ts 8973import { webview } from '@kit.ArkWeb'; 8974import { componentUtils } from '@kit.ArkUI'; 8975 8976@Entry 8977@Component 8978struct WebComponent { 8979 @State testTitle: string = 'webScroll' 8980 controller: webview.WebviewController = new webview.WebviewController(); 8981 @State controllerX: number =-100; 8982 @State controllerY: number =-100; 8983 @State mode: OverScrollMode = OverScrollMode.ALWAYS; 8984 8985 build() { 8986 Column() { 8987 Row() { 8988 Text(this.testTitle) 8989 .fontSize(30) 8990 .fontWeight(FontWeight.Bold) 8991 .margin(5) 8992 } 8993 Column() { 8994 Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`) 8995 } 8996 .margin({ top: 10, bottom: 10 }) 8997 Web({ src: $rawfile("scrollByTo.html"), controller: this.controller }) 8998 .key("web_01") 8999 .overScrollMode(this.mode) 9000 .onTouch((event) => { 9001 this.controllerX = this.controller.getScrollOffset().x; 9002 this.controllerY = this.controller.getScrollOffset().y; 9003 let componentInfo = componentUtils.getRectangleById("web_01"); 9004 let webHeight = px2vp(componentInfo.size.height); 9005 let pageHeight = this.controller.getPageHeight(); 9006 if (this.controllerY < 0) { 9007 // case1:网页向下过滚动时,可直接使用ScrollOffset.y 9008 console.log(`get downwards overscroll offsetY = ${this.controllerY}`); 9009 } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) { 9010 // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量 9011 console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`); 9012 } else { 9013 // case3:网页未发生过滚动时,可直接使用ScrollOffset.y 9014 console.log(`get scroll offsetY = ${this.controllerY}`); 9015 } 9016 }) 9017 .height(600) 9018 } 9019 .width('100%') 9020 .height('100%') 9021 } 9022} 9023``` 9024 9025## WebCookieManager 9026 9027通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。 9028 9029### getCookie<sup>(deprecated)</sup> 9030 9031static getCookie(url: string): string 9032 9033获取指定url对应cookie的值。 9034 9035> **说明:** 9036> 9037> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代 9038 9039**系统能力:** SystemCapability.Web.Webview.Core 9040 9041**参数:** 9042 9043| 参数名 | 类型 | 必填 | 说明 | 9044| ------ | ------ | ---- | :------------------------ | 9045| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9046 9047**返回值:** 9048 9049| 类型 | 说明 | 9050| ------ | ------------------------- | 9051| string | 指定url对应的cookie的值。 | 9052 9053**错误码:** 9054 9055以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9056 9057| 错误码ID | 错误信息 | 9058| -------- | ------------------------------------------------------ | 9059| 17100002 | Invalid url. | 9060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9061 9062**示例:** 9063 9064```ts 9065// xxx.ets 9066import { webview } from '@kit.ArkWeb'; 9067import { BusinessError } from '@kit.BasicServicesKit'; 9068 9069@Entry 9070@Component 9071struct WebComponent { 9072 controller: webview.WebviewController = new webview.WebviewController(); 9073 9074 build() { 9075 Column() { 9076 Button('getCookie') 9077 .onClick(() => { 9078 try { 9079 let value = webview.WebCookieManager.getCookie('https://www.example.com'); 9080 console.log("value: " + value); 9081 } catch (error) { 9082 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9083 } 9084 }) 9085 Web({ src: 'www.example.com', controller: this.controller }) 9086 } 9087 } 9088} 9089``` 9090 9091### fetchCookieSync<sup>11+</sup> 9092 9093static fetchCookieSync(url: string, incognito?: boolean): string 9094 9095获取指定url对应cookie的值。 9096 9097**系统能力:** SystemCapability.Web.Webview.Core 9098 9099**参数:** 9100 9101| 参数名 | 类型 | 必填 | 说明 | 9102| ------ | ------ | ---- | :------------------------ | 9103| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9104| incognito | boolean | 否 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9105 9106**返回值:** 9107 9108| 类型 | 说明 | 9109| ------ | ------------------------- | 9110| string | 指定url对应的cookie的值。 | 9111 9112**错误码:** 9113 9114以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9115 9116| 错误码ID | 错误信息 | 9117| -------- | ------------------------------------------------------ | 9118| 17100002 | Invalid url. | 9119| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9120 9121**示例:** 9122 9123```ts 9124// xxx.ets 9125import { webview } from '@kit.ArkWeb'; 9126import { BusinessError } from '@kit.BasicServicesKit'; 9127 9128@Entry 9129@Component 9130struct WebComponent { 9131 controller: webview.WebviewController = new webview.WebviewController(); 9132 9133 build() { 9134 Column() { 9135 Button('fetchCookieSync') 9136 .onClick(() => { 9137 try { 9138 let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com'); 9139 console.log("fetchCookieSync cookie = " + value); 9140 } catch (error) { 9141 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9142 } 9143 }) 9144 Web({ src: 'www.example.com', controller: this.controller }) 9145 } 9146 } 9147} 9148``` 9149 9150### fetchCookie<sup>11+</sup> 9151 9152static fetchCookie(url: string, callback: AsyncCallback\<string>): void 9153 9154异步callback方式获取指定url对应cookie的值。 9155 9156**系统能力:** SystemCapability.Web.Webview.Core 9157 9158**参数:** 9159 9160| 参数名 | 类型 | 必填 | 说明 | 9161| ------ | ------ | ---- | :------------------------ | 9162| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9163| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie | 9164 9165**错误码:** 9166 9167以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9168 9169| 错误码ID | 错误信息 | 9170| -------- | ------------------------------------------------------ | 9171| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9172| 17100002 | Invalid url. | 9173 9174**示例:** 9175 9176```ts 9177// xxx.ets 9178import { webview } from '@kit.ArkWeb'; 9179import { BusinessError } from '@kit.BasicServicesKit'; 9180 9181@Entry 9182@Component 9183struct WebComponent { 9184 controller: webview.WebviewController = new webview.WebviewController(); 9185 9186 build() { 9187 Column() { 9188 Button('fetchCookie') 9189 .onClick(() => { 9190 try { 9191 webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => { 9192 if (error) { 9193 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9194 return; 9195 } 9196 if (cookie) { 9197 console.log('fetchCookie cookie = ' + cookie); 9198 } 9199 }) 9200 } catch (error) { 9201 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9202 } 9203 }) 9204 Web({ src: 'www.example.com', controller: this.controller }) 9205 } 9206 } 9207} 9208``` 9209 9210### fetchCookie<sup>11+</sup> 9211 9212static fetchCookie(url: string): Promise\<string> 9213 9214以Promise方式异步获取指定url对应cookie的值。 9215 9216**系统能力:** SystemCapability.Web.Webview.Core 9217 9218**参数:** 9219 9220| 参数名 | 类型 | 必填 | 说明 | 9221| ------ | ------ | ---- | :------------------------ | 9222| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9223 9224**返回值:** 9225 9226| 类型 | 说明 | 9227| ------ | ------------------------- | 9228| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9229 9230**错误码:** 9231 9232以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9233 9234| 错误码ID | 错误信息 | 9235| -------- | ------------------------------------------------------ | 9236| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9237| 17100002 | Invalid url. | 9238 9239**示例:** 9240 9241```ts 9242// xxx.ets 9243import { webview } from '@kit.ArkWeb'; 9244import { BusinessError } from '@kit.BasicServicesKit'; 9245 9246@Entry 9247@Component 9248struct WebComponent { 9249 controller: webview.WebviewController = new webview.WebviewController(); 9250 9251 build() { 9252 Column() { 9253 Button('fetchCookie') 9254 .onClick(() => { 9255 try { 9256 webview.WebCookieManager.fetchCookie('https://www.example.com') 9257 .then(cookie => { 9258 console.log("fetchCookie cookie = " + cookie); 9259 }) 9260 .catch((error: BusinessError) => { 9261 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9262 }) 9263 } catch (error) { 9264 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9265 } 9266 }) 9267 Web({ src: 'www.example.com', controller: this.controller }) 9268 } 9269 } 9270} 9271``` 9272 9273### fetchCookie<sup>14+</sup> 9274 9275static fetchCookie(url: string, incognito: boolean): Promise\<string> 9276 9277以Promise方式异步获取指定url对应cookie的值。 9278 9279**系统能力:** SystemCapability.Web.Webview.Core 9280 9281**参数:** 9282 9283| 参数名 | 类型 | 必填 | 说明 | 9284| ------ | ------ | ---- | :------------------------ | 9285| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9286| incognito | boolean | 是 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9287 9288**返回值:** 9289 9290| 类型 | 说明 | 9291| ------ | ------------------------- | 9292| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9293 9294**错误码:** 9295 9296以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9297 9298| 错误码ID | 错误信息 | 9299| -------- | ------------------------------------------------------ | 9300| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9301| 17100002 | Invalid url. | 9302 9303**示例:** 9304 9305```ts 9306// xxx.ets 9307import { webview } from '@kit.ArkWeb'; 9308import { BusinessError } from '@kit.BasicServicesKit'; 9309 9310@Entry 9311@Component 9312struct WebComponent { 9313 controller: webview.WebviewController = new webview.WebviewController(); 9314 9315 build() { 9316 Column() { 9317 Button('fetchCookie') 9318 .onClick(() => { 9319 try { 9320 webview.WebCookieManager.fetchCookie('https://www.example.com', false) 9321 .then(cookie => { 9322 console.log("fetchCookie cookie = " + cookie); 9323 }) 9324 .catch((error: BusinessError) => { 9325 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9326 }) 9327 } catch (error) { 9328 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9329 } 9330 }) 9331 Web({ src: 'www.example.com', controller: this.controller }) 9332 } 9333 } 9334} 9335``` 9336 9337### setCookie<sup>(deprecated)</sup> 9338 9339static setCookie(url: string, value: string): void 9340 9341为指定url设置单个cookie的值。 9342 9343> **说明:** 9344> 9345> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代 9346 9347**系统能力:** SystemCapability.Web.Webview.Core 9348 9349**参数:** 9350 9351| 参数名 | 类型 | 必填 | 说明 | 9352| ------ | ------ | ---- | :------------------------ | 9353| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9354| value | string | 是 | 要设置的cookie的值。 | 9355 9356**错误码:** 9357 9358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9359 9360| 错误码ID | 错误信息 | 9361| -------- | ------------------------------------------------------ | 9362| 17100002 | Invalid url. | 9363| 17100005 | Invalid cookie value. | 9364| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9365 9366**示例:** 9367 9368```ts 9369// xxx.ets 9370import { webview } from '@kit.ArkWeb'; 9371import { BusinessError } from '@kit.BasicServicesKit'; 9372 9373@Entry 9374@Component 9375struct WebComponent { 9376 controller: webview.WebviewController = new webview.WebviewController(); 9377 9378 build() { 9379 Column() { 9380 Button('setCookie') 9381 .onClick(() => { 9382 try { 9383 webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 9384 } catch (error) { 9385 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9386 } 9387 }) 9388 Web({ src: 'www.example.com', controller: this.controller }) 9389 } 9390 } 9391} 9392``` 9393 9394### configCookieSync<sup>11+</sup> 9395 9396static configCookieSync(url: string, value: string, incognito?: boolean): void 9397 9398为指定url设置cookie的值。 9399 9400> **说明:** 9401> 9402>configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。 9403 9404>同步cookie的时机建议在Web组件加载之前完成。 9405 9406**系统能力:** SystemCapability.Web.Webview.Core 9407 9408**参数:** 9409 9410| 参数名 | 类型 | 必填 | 说明 | 9411| ------ | ------ | ---- | :------------------------ | 9412| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9413| value | string | 是 | 要设置的cookie的值。 | 9414| incognito | boolean | 否 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9415 9416**错误码:** 9417 9418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9419 9420| 错误码ID | 错误信息 | 9421| -------- | ------------------------------------------------------ | 9422| 17100002 | Invalid url. | 9423| 17100005 | Invalid cookie value. | 9424| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9425 9426**示例:** 9427 9428```ts 9429// xxx.ets 9430import { webview } from '@kit.ArkWeb'; 9431import { BusinessError } from '@kit.BasicServicesKit'; 9432 9433@Entry 9434@Component 9435struct WebComponent { 9436 controller: webview.WebviewController = new webview.WebviewController(); 9437 9438 build() { 9439 Column() { 9440 Button('configCookieSync') 9441 .onClick(() => { 9442 try { 9443 // 仅支持设置单个cookie值。 9444 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b'); 9445 } catch (error) { 9446 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9447 } 9448 }) 9449 Web({ src: 'www.example.com', controller: this.controller }) 9450 } 9451 } 9452} 9453``` 9454 9455### configCookieSync<sup>14+</sup> 9456 9457static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void 9458 9459为指定url设置cookie的值。 9460 9461**系统能力:** SystemCapability.Web.Webview.Core 9462 9463**参数:** 9464 9465| 参数名 | 类型 | 必填 | 说明 | 9466| ------ | ------ | ---- | :------------------------ | 9467| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9468| value | string | 是 | 要设置的cookie的值。 | 9469| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9470| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9471 9472**错误码:** 9473 9474以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9475 9476| 错误码ID | 错误信息 | 9477| -------- | ------------------------------------------------------ | 9478| 17100002 | Invalid url. | 9479| 17100005 | Invalid cookie value. | 9480| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9481 9482**示例:** 9483 9484```ts 9485// xxx.ets 9486import { webview } from '@kit.ArkWeb'; 9487import { BusinessError } from '@kit.BasicServicesKit'; 9488 9489@Entry 9490@Component 9491struct WebComponent { 9492 controller: webview.WebviewController = new webview.WebviewController(); 9493 9494 build() { 9495 Column() { 9496 Button('configCookieSync') 9497 .onClick(() => { 9498 try { 9499 // 仅支持设置单个cookie值。 9500 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false); 9501 } catch (error) { 9502 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9503 } 9504 }) 9505 Web({ src: 'www.example.com', controller: this.controller }) 9506 } 9507 } 9508} 9509``` 9510 9511### configCookie<sup>11+</sup> 9512 9513static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void 9514 9515异步callback方式为指定url设置单个cookie的值。 9516 9517**系统能力:** SystemCapability.Web.Webview.Core 9518 9519**参数:** 9520 9521| 参数名 | 类型 | 必填 | 说明 | 9522| ------ | ------ | ---- | :------------------------ | 9523| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9524| value | string | 是 | 要设置的cookie的值。 | 9525| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 | 9526 9527**错误码:** 9528 9529以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9530 9531| 错误码ID | 错误信息 | 9532| -------- | ------------------------------------------------------ | 9533| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9534| 17100002 | Invalid url. | 9535| 17100005 | Invalid cookie value. | 9536 9537**示例:** 9538 9539```ts 9540// xxx.ets 9541import { webview } from '@kit.ArkWeb'; 9542import { BusinessError } from '@kit.BasicServicesKit'; 9543 9544@Entry 9545@Component 9546struct WebComponent { 9547 controller: webview.WebviewController = new webview.WebviewController(); 9548 9549 build() { 9550 Column() { 9551 Button('configCookie') 9552 .onClick(() => { 9553 try { 9554 webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => { 9555 if (error) { 9556 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9557 } 9558 }) 9559 } catch (error) { 9560 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9561 } 9562 }) 9563 Web({ src: 'www.example.com', controller: this.controller }) 9564 } 9565 } 9566} 9567``` 9568 9569### configCookie<sup>11+</sup> 9570 9571static configCookie(url: string, value: string): Promise\<void> 9572 9573以异步Promise方式为指定url设置单个cookie的值。 9574 9575**系统能力:** SystemCapability.Web.Webview.Core 9576 9577**参数:** 9578 9579| 参数名 | 类型 | 必填 | 说明 | 9580| ------ | ------ | ---- | :------------------------ | 9581| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9582| value | string | 是 | 要设置的cookie的值。 | 9583 9584**返回值:** 9585 9586| 类型 | 说明 | 9587| ------ | ------------------------- | 9588| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9589 9590**错误码:** 9591 9592以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9593 9594| 错误码ID | 错误信息 | 9595| -------- | ------------------------------------------------------ | 9596| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9597| 17100002 | Invalid url. | 9598| 17100005 | Invalid cookie value. | 9599 9600**示例:** 9601 9602```ts 9603// xxx.ets 9604import { webview } from '@kit.ArkWeb'; 9605import { BusinessError } from '@kit.BasicServicesKit'; 9606 9607@Entry 9608@Component 9609struct WebComponent { 9610 controller: webview.WebviewController = new webview.WebviewController(); 9611 9612 build() { 9613 Column() { 9614 Button('configCookie') 9615 .onClick(() => { 9616 try { 9617 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b') 9618 .then(() => { 9619 console.log('configCookie success!'); 9620 }) 9621 .catch((error: BusinessError) => { 9622 console.log('error: ' + JSON.stringify(error)); 9623 }) 9624 } catch (error) { 9625 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9626 } 9627 }) 9628 Web({ src: 'www.example.com', controller: this.controller }) 9629 } 9630 } 9631} 9632``` 9633 9634### configCookie<sup>14+</sup> 9635 9636static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void> 9637 9638以异步Promise方式为指定url设置单个cookie的值。 9639 9640**系统能力:** SystemCapability.Web.Webview.Core 9641 9642**参数:** 9643 9644| 参数名 | 类型 | 必填 | 说明 | 9645| ------ | ------ | ---- | :------------------------ | 9646| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9647| value | string | 是 | 要设置的cookie的值。 | 9648| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9649| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9650 9651**返回值:** 9652 9653| 类型 | 说明 | 9654| ------ | ------------------------- | 9655| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9656 9657**错误码:** 9658 9659以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9660 9661| 错误码ID | 错误信息 | 9662| -------- | ------------------------------------------------------ | 9663| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9664| 17100002 | Invalid url. | 9665| 17100005 | Invalid cookie value. | 9666 9667**示例:** 9668 9669```ts 9670// xxx.ets 9671import { webview } from '@kit.ArkWeb'; 9672import { BusinessError } from '@kit.BasicServicesKit'; 9673 9674@Entry 9675@Component 9676struct WebComponent { 9677 controller: webview.WebviewController = new webview.WebviewController(); 9678 9679 build() { 9680 Column() { 9681 Button('configCookie') 9682 .onClick(() => { 9683 try { 9684 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false) 9685 .then(() => { 9686 console.log('configCookie success!'); 9687 }) 9688 .catch((error: BusinessError) => { 9689 console.log('error: ' + JSON.stringify(error)); 9690 }) 9691 } catch (error) { 9692 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9693 } 9694 }) 9695 Web({ src: 'www.example.com', controller: this.controller }) 9696 } 9697 } 9698} 9699``` 9700 9701### saveCookieAsync 9702 9703static saveCookieAsync(callback: AsyncCallback\<void>): void 9704 9705将当前存在内存中的cookie异步保存到磁盘中。 9706 9707**系统能力:** SystemCapability.Web.Webview.Core 9708 9709**参数:** 9710 9711| 参数名 | 类型 | 必填 | 说明 | 9712| -------- | ---------------------- | ---- | :------------------------------------------------- | 9713| callback | AsyncCallback\<void> | 是 | callback回调,用于获取cookie是否成功保存。 | 9714 9715**错误码:** 9716 9717以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9718 9719| 错误码ID | 错误信息 | 9720| -------- | ------------------------------------------------------ | 9721| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9722 9723**示例:** 9724 9725```ts 9726// xxx.ets 9727import { webview } from '@kit.ArkWeb'; 9728import { BusinessError } from '@kit.BasicServicesKit'; 9729 9730@Entry 9731@Component 9732struct WebComponent { 9733 controller: webview.WebviewController = new webview.WebviewController(); 9734 9735 build() { 9736 Column() { 9737 Button('saveCookieAsync') 9738 .onClick(() => { 9739 try { 9740 webview.WebCookieManager.saveCookieAsync((error) => { 9741 if (error) { 9742 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9743 } 9744 }) 9745 } catch (error) { 9746 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9747 } 9748 }) 9749 Web({ src: 'www.example.com', controller: this.controller }) 9750 } 9751 } 9752} 9753``` 9754 9755### saveCookieAsync 9756 9757static saveCookieAsync(): Promise\<void> 9758 9759将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 9760 9761**系统能力:** SystemCapability.Web.Webview.Core 9762 9763**返回值:** 9764 9765| 类型 | 说明 | 9766| ---------------- | ----------------------------------------- | 9767| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 9768 9769**错误码:** 9770 9771以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9772 9773| 错误码ID | 错误信息 | 9774| -------- | ------------------------------------------------------ | 9775| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9776 9777**示例:** 9778 9779```ts 9780// xxx.ets 9781import { webview } from '@kit.ArkWeb'; 9782import { BusinessError } from '@kit.BasicServicesKit'; 9783 9784@Entry 9785@Component 9786struct WebComponent { 9787 controller: webview.WebviewController = new webview.WebviewController(); 9788 9789 build() { 9790 Column() { 9791 Button('saveCookieAsync') 9792 .onClick(() => { 9793 try { 9794 webview.WebCookieManager.saveCookieAsync() 9795 .then(() => { 9796 console.log("saveCookieAsyncCallback success!"); 9797 }) 9798 .catch((error: BusinessError) => { 9799 console.error("error: " + error); 9800 }); 9801 } catch (error) { 9802 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9803 } 9804 }) 9805 Web({ src: 'www.example.com', controller: this.controller }) 9806 } 9807 } 9808} 9809``` 9810 9811### putAcceptCookieEnabled 9812 9813static putAcceptCookieEnabled(accept: boolean): void 9814 9815设置WebCookieManager实例是否拥有发送和接收cookie的权限。 9816 9817**系统能力:** SystemCapability.Web.Webview.Core 9818 9819**参数:** 9820 9821| 参数名 | 类型 | 必填 | 说明 | 9822| ------ | ------- | ---- | :----------------------------------- | 9823| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限,默认为true。 | 9824 9825**错误码:** 9826 9827以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9828 9829| 错误码ID | 错误信息 | 9830| -------- | ------------------------------------------------------ | 9831| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9832 9833**示例:** 9834 9835```ts 9836// xxx.ets 9837import { webview } from '@kit.ArkWeb'; 9838import { BusinessError } from '@kit.BasicServicesKit'; 9839 9840@Entry 9841@Component 9842struct WebComponent { 9843 controller: webview.WebviewController = new webview.WebviewController(); 9844 9845 build() { 9846 Column() { 9847 Button('putAcceptCookieEnabled') 9848 .onClick(() => { 9849 try { 9850 webview.WebCookieManager.putAcceptCookieEnabled(false); 9851 } catch (error) { 9852 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9853 } 9854 }) 9855 Web({ src: 'www.example.com', controller: this.controller }) 9856 } 9857 } 9858} 9859``` 9860 9861### isCookieAllowed 9862 9863static isCookieAllowed(): boolean 9864 9865获取WebCookieManager实例是否拥有发送和接收cookie的权限。 9866 9867**系统能力:** SystemCapability.Web.Webview.Core 9868 9869**返回值:** 9870 9871| 类型 | 说明 | 9872| ------- | -------------------------------- | 9873| boolean | 是否拥有发送和接收cookie的权限,默认为true。 | 9874 9875**示例:** 9876 9877```ts 9878// xxx.ets 9879import { webview } from '@kit.ArkWeb'; 9880 9881@Entry 9882@Component 9883struct WebComponent { 9884 controller: webview.WebviewController = new webview.WebviewController(); 9885 9886 build() { 9887 Column() { 9888 Button('isCookieAllowed') 9889 .onClick(() => { 9890 let result = webview.WebCookieManager.isCookieAllowed(); 9891 console.log("result: " + result); 9892 }) 9893 Web({ src: 'www.example.com', controller: this.controller }) 9894 } 9895 } 9896} 9897``` 9898 9899### putAcceptThirdPartyCookieEnabled 9900 9901static putAcceptThirdPartyCookieEnabled(accept: boolean): void 9902 9903设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 9904 9905**系统能力:** SystemCapability.Web.Webview.Core 9906 9907**参数:** 9908 9909| 参数名 | 类型 | 必填 | 说明 | 9910| ------ | ------- | ---- | :----------------------------------------- | 9911| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 | 9912 9913**错误码:** 9914 9915以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9916 9917| 错误码ID | 错误信息 | 9918| -------- | ------------------------------------------------------ | 9919| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9920 9921**示例:** 9922 9923```ts 9924// xxx.ets 9925import { webview } from '@kit.ArkWeb'; 9926import { BusinessError } from '@kit.BasicServicesKit'; 9927 9928@Entry 9929@Component 9930struct WebComponent { 9931 controller: webview.WebviewController = new webview.WebviewController(); 9932 9933 build() { 9934 Column() { 9935 Button('putAcceptThirdPartyCookieEnabled') 9936 .onClick(() => { 9937 try { 9938 webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 9939 } catch (error) { 9940 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9941 } 9942 }) 9943 Web({ src: 'www.example.com', controller: this.controller }) 9944 } 9945 } 9946} 9947``` 9948 9949### isThirdPartyCookieAllowed 9950 9951static isThirdPartyCookieAllowed(): boolean 9952 9953获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 9954 9955**系统能力:** SystemCapability.Web.Webview.Core 9956 9957**返回值:** 9958 9959| 类型 | 说明 | 9960| ------- | -------------------------------------- | 9961| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 | 9962 9963**示例:** 9964 9965```ts 9966// xxx.ets 9967import { webview } from '@kit.ArkWeb'; 9968 9969@Entry 9970@Component 9971struct WebComponent { 9972 controller: webview.WebviewController = new webview.WebviewController(); 9973 9974 build() { 9975 Column() { 9976 Button('isThirdPartyCookieAllowed') 9977 .onClick(() => { 9978 let result = webview.WebCookieManager.isThirdPartyCookieAllowed(); 9979 console.log("result: " + result); 9980 }) 9981 Web({ src: 'www.example.com', controller: this.controller }) 9982 } 9983 } 9984} 9985``` 9986 9987### existCookie 9988 9989static existCookie(incognito?: boolean): boolean 9990 9991获取是否存在cookie。 9992 9993**系统能力:** SystemCapability.Web.Webview.Core 9994 9995**参数:** 9996 9997| 参数名 | 类型 | 必填 | 说明 | 9998| ------ | ------- | ---- | :----------------------------------------- | 9999| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 | 10000 10001**返回值:** 10002 10003| 类型 | 说明 | 10004| ------- | -------------------------------------- | 10005| boolean | true表示存在cookie,false表示不存在cookie。 | 10006 10007**示例:** 10008 10009```ts 10010// xxx.ets 10011import { webview } from '@kit.ArkWeb'; 10012 10013@Entry 10014@Component 10015struct WebComponent { 10016 controller: webview.WebviewController = new webview.WebviewController(); 10017 10018 build() { 10019 Column() { 10020 Button('existCookie') 10021 .onClick(() => { 10022 let result = webview.WebCookieManager.existCookie(); 10023 console.log("result: " + result); 10024 }) 10025 Web({ src: 'www.example.com', controller: this.controller }) 10026 } 10027 } 10028} 10029``` 10030 10031### deleteEntireCookie<sup>(deprecated)</sup> 10032 10033static deleteEntireCookie(): void 10034 10035清除所有cookie。 10036 10037> **说明:** 10038> 10039> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代 10040 10041**系统能力:** SystemCapability.Web.Webview.Core 10042 10043**示例:** 10044 10045```ts 10046// xxx.ets 10047import { webview } from '@kit.ArkWeb'; 10048 10049@Entry 10050@Component 10051struct WebComponent { 10052 controller: webview.WebviewController = new webview.WebviewController(); 10053 10054 build() { 10055 Column() { 10056 Button('deleteEntireCookie') 10057 .onClick(() => { 10058 webview.WebCookieManager.deleteEntireCookie(); 10059 }) 10060 Web({ src: 'www.example.com', controller: this.controller }) 10061 } 10062 } 10063} 10064``` 10065 10066### clearAllCookiesSync<sup>11+</sup> 10067 10068static clearAllCookiesSync(incognito?: boolean): void 10069 10070清除所有cookie。 10071 10072**系统能力:** SystemCapability.Web.Webview.Core 10073 10074**参数:** 10075 10076| 参数名 | 类型 | 必填 | 说明 | 10077| ------ | ------- | ---- | :----------------------------------------- | 10078| incognito | boolean | 否 | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 | 10079 10080**示例:** 10081 10082```ts 10083// xxx.ets 10084import { webview } from '@kit.ArkWeb'; 10085 10086@Entry 10087@Component 10088struct WebComponent { 10089 controller: webview.WebviewController = new webview.WebviewController(); 10090 10091 build() { 10092 Column() { 10093 Button('clearAllCookiesSync') 10094 .onClick(() => { 10095 webview.WebCookieManager.clearAllCookiesSync(); 10096 }) 10097 Web({ src: 'www.example.com', controller: this.controller }) 10098 } 10099 } 10100} 10101``` 10102 10103### clearAllCookies<sup>11+</sup> 10104 10105static clearAllCookies(callback: AsyncCallback\<void>): void 10106 10107异步callback方式清除所有cookie。 10108 10109**系统能力:** SystemCapability.Web.Webview.Core 10110 10111**参数:** 10112 10113| 参数名 | 类型 | 必填 | 说明 | 10114| -------- | ---------------------- | ---- | :------------------------------------------------- | 10115| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有cookie是否成功。 | 10116 10117**错误码:** 10118 10119以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10120 10121| 错误码ID | 错误信息 | 10122| -------- | ------------------------------------------------------ | 10123| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10124 10125**示例:** 10126 10127```ts 10128// xxx.ets 10129import { webview } from '@kit.ArkWeb'; 10130import { BusinessError } from '@kit.BasicServicesKit'; 10131 10132@Entry 10133@Component 10134struct WebComponent { 10135 controller: webview.WebviewController = new webview.WebviewController(); 10136 10137 build() { 10138 Column() { 10139 Button('clearAllCookies') 10140 .onClick(() => { 10141 try { 10142 webview.WebCookieManager.clearAllCookies((error) => { 10143 if (error) { 10144 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10145 } 10146 }) 10147 } catch (error) { 10148 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10149 } 10150 }) 10151 Web({ src: 'www.example.com', controller: this.controller }) 10152 } 10153 } 10154} 10155``` 10156 10157### clearAllCookies<sup>11+</sup> 10158 10159static clearAllCookies(): Promise\<void> 10160 10161异步promise方式清除所有cookie。 10162 10163**系统能力:** SystemCapability.Web.Webview.Core 10164 10165**返回值:** 10166 10167| 类型 | 说明 | 10168| ---------------- | ----------------------------------------- | 10169| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 | 10170 10171**错误码:** 10172 10173以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10174 10175| 错误码ID | 错误信息 | 10176| -------- | ------------------------------------------------------ | 10177| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10178 10179**示例:** 10180 10181```ts 10182// xxx.ets 10183import { webview } from '@kit.ArkWeb'; 10184import { BusinessError } from '@kit.BasicServicesKit'; 10185 10186@Entry 10187@Component 10188struct WebComponent { 10189 controller: webview.WebviewController = new webview.WebviewController(); 10190 10191 build() { 10192 Column() { 10193 Button('clearAllCookies') 10194 .onClick(() => { 10195 try { 10196 webview.WebCookieManager.clearAllCookies() 10197 .then(() => { 10198 console.log("clearAllCookies success!"); 10199 }) 10200 .catch((error: BusinessError) => { 10201 console.error("error: " + error); 10202 }); 10203 } catch (error) { 10204 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10205 } 10206 }) 10207 Web({ src: 'www.example.com', controller: this.controller }) 10208 } 10209 } 10210} 10211``` 10212 10213### deleteSessionCookie<sup>(deprecated)</sup> 10214 10215static deleteSessionCookie(): void 10216 10217清除所有会话cookie。 10218 10219> **说明:** 10220> 10221> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代 10222 10223**系统能力:** SystemCapability.Web.Webview.Core 10224 10225**示例:** 10226 10227```ts 10228// xxx.ets 10229import { webview } from '@kit.ArkWeb'; 10230 10231@Entry 10232@Component 10233struct WebComponent { 10234 controller: webview.WebviewController = new webview.WebviewController(); 10235 10236 build() { 10237 Column() { 10238 Button('deleteSessionCookie') 10239 .onClick(() => { 10240 webview.WebCookieManager.deleteSessionCookie(); 10241 }) 10242 Web({ src: 'www.example.com', controller: this.controller }) 10243 } 10244 } 10245} 10246``` 10247 10248### clearSessionCookieSync<sup>11+</sup> 10249 10250static clearSessionCookieSync(): void 10251 10252清除所有会话cookie。 10253 10254**系统能力:** SystemCapability.Web.Webview.Core 10255 10256**示例:** 10257 10258```ts 10259// xxx.ets 10260import { webview } from '@kit.ArkWeb'; 10261 10262@Entry 10263@Component 10264struct WebComponent { 10265 controller: webview.WebviewController = new webview.WebviewController(); 10266 10267 build() { 10268 Column() { 10269 Button('clearSessionCookieSync') 10270 .onClick(() => { 10271 webview.WebCookieManager.clearSessionCookieSync(); 10272 }) 10273 Web({ src: 'www.example.com', controller: this.controller }) 10274 } 10275 } 10276} 10277``` 10278 10279### clearSessionCookie<sup>11+</sup> 10280 10281static clearSessionCookie(callback: AsyncCallback\<void>): void 10282 10283异步callback方式清除所有会话cookie。 10284 10285**系统能力:** SystemCapability.Web.Webview.Core 10286 10287**参数:** 10288 10289| 参数名 | 类型 | 必填 | 说明 | 10290| -------- | ---------------------- | ---- | :------------------------------------------------- | 10291| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有会话cookie是否成功。 | 10292 10293**错误码:** 10294 10295以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10296 10297| 错误码ID | 错误信息 | 10298| -------- | ------------------------------------------------------ | 10299| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10300 10301**示例:** 10302 10303```ts 10304// xxx.ets 10305import { webview } from '@kit.ArkWeb'; 10306import { BusinessError } from '@kit.BasicServicesKit'; 10307 10308@Entry 10309@Component 10310struct WebComponent { 10311 controller: webview.WebviewController = new webview.WebviewController(); 10312 10313 build() { 10314 Column() { 10315 Button('clearSessionCookie') 10316 .onClick(() => { 10317 try { 10318 webview.WebCookieManager.clearSessionCookie((error) => { 10319 if (error) { 10320 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10321 } 10322 }) 10323 } catch (error) { 10324 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10325 } 10326 }) 10327 Web({ src: 'www.example.com', controller: this.controller }) 10328 } 10329 } 10330} 10331``` 10332 10333### clearSessionCookie<sup>11+</sup> 10334 10335static clearSessionCookie(): Promise\<void> 10336 10337异步promise方式清除所有会话cookie。 10338 10339**系统能力:** SystemCapability.Web.Webview.Core 10340 10341**返回值:** 10342 10343| 类型 | 说明 | 10344| ---------------- | ----------------------------------------- | 10345| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 | 10346 10347**错误码:** 10348 10349以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10350 10351| 错误码ID | 错误信息 | 10352| -------- | ------------------------------------------------------ | 10353| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10354 10355**示例:** 10356 10357```ts 10358// xxx.ets 10359import { webview } from '@kit.ArkWeb'; 10360import { BusinessError } from '@kit.BasicServicesKit'; 10361 10362@Entry 10363@Component 10364struct WebComponent { 10365 controller: webview.WebviewController = new webview.WebviewController(); 10366 10367 build() { 10368 Column() { 10369 Button('clearSessionCookie') 10370 .onClick(() => { 10371 try { 10372 webview.WebCookieManager.clearSessionCookie() 10373 .then(() => { 10374 console.log("clearSessionCookie success!"); 10375 }) 10376 .catch((error: BusinessError) => { 10377 console.error("error: " + error); 10378 }); 10379 } catch (error) { 10380 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10381 } 10382 }) 10383 Web({ src: 'www.example.com', controller: this.controller }) 10384 } 10385 } 10386} 10387``` 10388 10389## WebStorage 10390 10391通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 10392 10393> **说明:** 10394> 10395> 目前调用WebStorage下的方法,都需要先加载Web组件。 10396 10397### deleteOrigin 10398 10399static deleteOrigin(origin: string): void 10400 10401清除指定源所使用的存储。 10402 10403**系统能力:** SystemCapability.Web.Webview.Core 10404 10405**参数:** 10406 10407| 参数名 | 类型 | 必填 | 说明 | 10408| ------ | ------ | ---- | ------------------------ | 10409| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 10410 10411**错误码:** 10412 10413以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10414 10415| 错误码ID | 错误信息 | 10416| -------- | ------------------------------------------------------ | 10417| 17100011 | Invalid origin. | 10418| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10419 10420**示例:** 10421 10422```ts 10423// xxx.ets 10424import { webview } from '@kit.ArkWeb'; 10425import { BusinessError } from '@kit.BasicServicesKit'; 10426 10427@Entry 10428@Component 10429struct WebComponent { 10430 controller: webview.WebviewController = new webview.WebviewController(); 10431 origin: string = "resource://rawfile/"; 10432 10433 build() { 10434 Column() { 10435 Button('deleteOrigin') 10436 .onClick(() => { 10437 try { 10438 webview.WebStorage.deleteOrigin(this.origin); 10439 } catch (error) { 10440 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10441 } 10442 10443 }) 10444 Web({ src: $rawfile('index.html'), controller: this.controller }) 10445 .databaseAccess(true) 10446 } 10447 } 10448} 10449``` 10450 10451加载的html文件。 10452 ```html 10453 <!-- index.html --> 10454 <!DOCTYPE html> 10455 <html> 10456 <head> 10457 <meta charset="UTF-8"> 10458 <title>test</title> 10459 <script type="text/javascript"> 10460 10461 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 10462 var msg; 10463 10464 db.transaction(function(tx){ 10465 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 10466 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 10467 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 10468 10469 document.querySelector('#status').innerHTML = msg; 10470 }); 10471 10472 db.transaction(function(tx){ 10473 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 10474 var len = results.rows.length,i; 10475 msg = "<p>查询记录条数:" + len + "</p>"; 10476 10477 document.querySelector('#status').innerHTML += msg; 10478 10479 for(i = 0; i < len; i++){ 10480 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 10481 10482 document.querySelector('#status').innerHTML += msg; 10483 } 10484 },null); 10485 }); 10486 10487 </script> 10488 </head> 10489 <body> 10490 <div id="status" name="status">状态信息</div> 10491 </body> 10492 </html> 10493 ``` 10494 10495### getOrigins 10496 10497static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void 10498 10499以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 10500 10501**系统能力:** SystemCapability.Web.Webview.Core 10502 10503**参数:** 10504 10505| 参数名 | 类型 | 必填 | 说明 | 10506| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 10507| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10508 10509**错误码:** 10510 10511以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10512 10513| 错误码ID | 错误信息 | 10514| -------- | ------------------------------------------------------ | 10515| 17100012 | Invalid web storage origin. | 10516| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10517 10518**示例:** 10519 10520```ts 10521// xxx.ets 10522import { webview } from '@kit.ArkWeb'; 10523import { BusinessError } from '@kit.BasicServicesKit'; 10524 10525@Entry 10526@Component 10527struct WebComponent { 10528 controller: webview.WebviewController = new webview.WebviewController(); 10529 10530 build() { 10531 Column() { 10532 Button('getOrigins') 10533 .onClick(() => { 10534 try { 10535 webview.WebStorage.getOrigins((error, origins) => { 10536 if (error) { 10537 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10538 return; 10539 } 10540 for (let i = 0; i < origins.length; i++) { 10541 console.log('origin: ' + origins[i].origin); 10542 console.log('usage: ' + origins[i].usage); 10543 console.log('quota: ' + origins[i].quota); 10544 } 10545 }) 10546 } catch (error) { 10547 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10548 } 10549 10550 }) 10551 Web({ src: $rawfile('index.html'), controller: this.controller }) 10552 .databaseAccess(true) 10553 } 10554 } 10555} 10556``` 10557 10558加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10559 10560### getOrigins 10561 10562static getOrigins(): Promise\<Array\<WebStorageOrigin>> 10563 10564以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 10565 10566**系统能力:** SystemCapability.Web.Webview.Core 10567 10568**返回值:** 10569 10570| 类型 | 说明 | 10571| -------------------------------- | ------------------------------------------------------------ | 10572| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10573 10574**错误码:** 10575 10576以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10577 10578| 错误码ID | 错误信息 | 10579| -------- | ------------------------------------------------------ | 10580| 17100012 | Invalid web storage origin. | 10581| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10582 10583**示例:** 10584 10585```ts 10586// xxx.ets 10587import { webview } from '@kit.ArkWeb'; 10588import { BusinessError } from '@kit.BasicServicesKit'; 10589 10590@Entry 10591@Component 10592struct WebComponent { 10593 controller: webview.WebviewController = new webview.WebviewController(); 10594 10595 build() { 10596 Column() { 10597 Button('getOrigins') 10598 .onClick(() => { 10599 try { 10600 webview.WebStorage.getOrigins() 10601 .then(origins => { 10602 for (let i = 0; i < origins.length; i++) { 10603 console.log('origin: ' + origins[i].origin); 10604 console.log('usage: ' + origins[i].usage); 10605 console.log('quota: ' + origins[i].quota); 10606 } 10607 }) 10608 .catch((e: BusinessError) => { 10609 console.log('error: ' + JSON.stringify(e)); 10610 }) 10611 } catch (error) { 10612 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10613 } 10614 10615 }) 10616 Web({ src: $rawfile('index.html'), controller: this.controller }) 10617 .databaseAccess(true) 10618 } 10619 } 10620} 10621``` 10622 10623加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10624 10625### getOriginQuota 10626 10627static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void 10628 10629使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 10630 10631**系统能力:** SystemCapability.Web.Webview.Core 10632 10633**参数:** 10634 10635| 参数名 | 类型 | 必填 | 说明 | 10636| -------- | --------------------- | ---- | ------------------ | 10637| origin | string | 是 | 指定源的字符串索引 | 10638| callback | AsyncCallback\<number> | 是 | 指定源的存储配额 | 10639 10640**错误码:** 10641 10642以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10643 10644| 错误码ID | 错误信息 | 10645| -------- | ------------------------------------------------------ | 10646| 17100011 | Invalid origin. | 10647| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10648 10649**示例:** 10650 10651```ts 10652// xxx.ets 10653import { webview } from '@kit.ArkWeb'; 10654import { BusinessError } from '@kit.BasicServicesKit'; 10655 10656@Entry 10657@Component 10658struct WebComponent { 10659 controller: webview.WebviewController = new webview.WebviewController(); 10660 origin: string = "resource://rawfile/"; 10661 10662 build() { 10663 Column() { 10664 Button('getOriginQuota') 10665 .onClick(() => { 10666 try { 10667 webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 10668 if (error) { 10669 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10670 return; 10671 } 10672 console.log('quota: ' + quota); 10673 }) 10674 } catch (error) { 10675 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10676 } 10677 10678 }) 10679 Web({ src: $rawfile('index.html'), controller: this.controller }) 10680 .databaseAccess(true) 10681 } 10682 } 10683} 10684``` 10685 10686加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10687 10688### getOriginQuota 10689 10690static getOriginQuota(origin: string): Promise\<number> 10691 10692以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 10693 10694**系统能力:** SystemCapability.Web.Webview.Core 10695 10696**参数:** 10697 10698| 参数名 | 类型 | 必填 | 说明 | 10699| ------ | ------ | ---- | ------------------ | 10700| origin | string | 是 | 指定源的字符串索引 | 10701 10702**返回值:** 10703 10704| 类型 | 说明 | 10705| --------------- | --------------------------------------- | 10706| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 10707 10708**错误码:** 10709 10710以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10711 10712| 错误码ID | 错误信息 | 10713| -------- | ------------------------------------------------------ | 10714| 17100011 | Invalid origin. | 10715| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10716 10717**示例:** 10718 10719```ts 10720// xxx.ets 10721import { webview } from '@kit.ArkWeb'; 10722import { BusinessError } from '@kit.BasicServicesKit'; 10723 10724@Entry 10725@Component 10726struct WebComponent { 10727 controller: webview.WebviewController = new webview.WebviewController(); 10728 origin: string = "resource://rawfile/"; 10729 10730 build() { 10731 Column() { 10732 Button('getOriginQuota') 10733 .onClick(() => { 10734 try { 10735 webview.WebStorage.getOriginQuota(this.origin) 10736 .then(quota => { 10737 console.log('quota: ' + quota); 10738 }) 10739 .catch((e: BusinessError) => { 10740 console.log('error: ' + JSON.stringify(e)); 10741 }) 10742 } catch (error) { 10743 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10744 } 10745 10746 }) 10747 Web({ src: $rawfile('index.html'), controller: this.controller }) 10748 .databaseAccess(true) 10749 } 10750 } 10751} 10752``` 10753 10754加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10755 10756### getOriginUsage 10757 10758static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void 10759 10760以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 10761 10762**系统能力:** SystemCapability.Web.Webview.Core 10763 10764**参数:** 10765 10766| 参数名 | 类型 | 必填 | 说明 | 10767| -------- | --------------------- | ---- | ------------------ | 10768| origin | string | 是 | 指定源的字符串索引 | 10769| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 10770 10771**错误码:** 10772 10773以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10774 10775| 错误码ID | 错误信息 | 10776| -------- | ------------------------------------------------------ | 10777| 17100011 | Invalid origin. | 10778| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10779 10780**示例:** 10781 10782```ts 10783// xxx.ets 10784import { webview } from '@kit.ArkWeb'; 10785import { BusinessError } from '@kit.BasicServicesKit'; 10786 10787@Entry 10788@Component 10789struct WebComponent { 10790 controller: webview.WebviewController = new webview.WebviewController(); 10791 origin: string = "resource://rawfile/"; 10792 10793 build() { 10794 Column() { 10795 Button('getOriginUsage') 10796 .onClick(() => { 10797 try { 10798 webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 10799 if (error) { 10800 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10801 return; 10802 } 10803 console.log('usage: ' + usage); 10804 }) 10805 } catch (error) { 10806 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10807 } 10808 10809 }) 10810 Web({ src: $rawfile('index.html'), controller: this.controller }) 10811 .databaseAccess(true) 10812 } 10813 } 10814} 10815``` 10816 10817加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10818 10819### getOriginUsage 10820 10821static getOriginUsage(origin: string): Promise\<number> 10822 10823以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 10824 10825**系统能力:** SystemCapability.Web.Webview.Core 10826 10827**参数:** 10828 10829| 参数名 | 类型 | 必填 | 说明 | 10830| ------ | ------ | ---- | ------------------ | 10831| origin | string | 是 | 指定源的字符串索引 | 10832 10833**返回值:** 10834 10835| 类型 | 说明 | 10836| --------------- | ------------------------------------- | 10837| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 10838 10839**错误码:** 10840 10841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10842 10843| 错误码ID | 错误信息 | 10844| -------- | ----------------------------------------------------- | 10845| 17100011 | Invalid origin. | 10846| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10847 10848**示例:** 10849 10850```ts 10851// xxx.ets 10852import { webview } from '@kit.ArkWeb'; 10853import { BusinessError } from '@kit.BasicServicesKit'; 10854 10855@Entry 10856@Component 10857struct WebComponent { 10858 controller: webview.WebviewController = new webview.WebviewController(); 10859 origin: string = "resource://rawfile/"; 10860 10861 build() { 10862 Column() { 10863 Button('getOriginUsage') 10864 .onClick(() => { 10865 try { 10866 webview.WebStorage.getOriginUsage(this.origin) 10867 .then(usage => { 10868 console.log('usage: ' + usage); 10869 }).catch((e: BusinessError) => { 10870 console.error('error: ' + JSON.stringify(e)); 10871 }) 10872 } catch (error) { 10873 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10874 } 10875 }) 10876 Web({ src: $rawfile('index.html'), controller: this.controller }) 10877 .databaseAccess(true) 10878 } 10879 } 10880} 10881``` 10882 10883加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10884 10885### deleteAllData 10886 10887static deleteAllData(incognito?: boolean): void 10888 10889清除Web SQL数据库当前使用的所有存储。 10890 10891**系统能力:** SystemCapability.Web.Webview.Core 10892 10893**参数:** 10894 10895| 参数名 | 类型 | 必填 | 说明 | 10896| ------ | ------ | ---- | ------------------ | 10897| incognito<sup>11+</sup> | boolean | 否 | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 | 10898 10899**示例:** 10900 10901```ts 10902// xxx.ets 10903import { webview } from '@kit.ArkWeb'; 10904import { BusinessError } from '@kit.BasicServicesKit'; 10905 10906@Entry 10907@Component 10908struct WebComponent { 10909 controller: webview.WebviewController = new webview.WebviewController(); 10910 10911 build() { 10912 Column() { 10913 Button('deleteAllData') 10914 .onClick(() => { 10915 try { 10916 webview.WebStorage.deleteAllData(); 10917 } catch (error) { 10918 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10919 } 10920 }) 10921 Web({ src: $rawfile('index.html'), controller: this.controller }) 10922 .databaseAccess(true) 10923 } 10924 } 10925} 10926``` 10927 10928加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。 10929 10930## WebDataBase 10931 10932Web组件数据库管理对象。 10933 10934> **说明:** 10935> 10936> 目前调用WebDataBase下的方法,都需要先加载Web组件。 10937 10938### getHttpAuthCredentials 10939 10940static getHttpAuthCredentials(host: string, realm: string): Array\<string> 10941 10942检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 10943 10944**系统能力:** SystemCapability.Web.Webview.Core 10945 10946**参数:** 10947 10948| 参数名 | 类型 | 必填 | 说明 | 10949| ------ | ------ | ---- | ---------------------------- | 10950| host | string | 是 | HTTP身份验证凭据应用的主机。 | 10951| realm | string | 是 | HTTP身份验证凭据应用的域。 | 10952 10953**返回值:** 10954 10955| 类型 | 说明 | 10956| ----- | -------------------------------------------- | 10957| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 10958 10959**错误码:** 10960 10961以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10962 10963| 错误码ID | 错误信息 | 10964| -------- | ------------------------------------------------------ | 10965| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10966 10967**示例:** 10968 10969```ts 10970// xxx.ets 10971import { webview } from '@kit.ArkWeb'; 10972import { BusinessError } from '@kit.BasicServicesKit'; 10973 10974@Entry 10975@Component 10976struct WebComponent { 10977 controller: webview.WebviewController = new webview.WebviewController(); 10978 host: string = "www.spincast.org"; 10979 realm: string = "protected example"; 10980 username_password: string[] = []; 10981 10982 build() { 10983 Column() { 10984 Button('getHttpAuthCredentials') 10985 .onClick(() => { 10986 try { 10987 this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 10988 console.log('num: ' + this.username_password.length); 10989 } catch (error) { 10990 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10991 } 10992 }) 10993 Web({ src: 'www.example.com', controller: this.controller }) 10994 } 10995 } 10996} 10997``` 10998 10999### saveHttpAuthCredentials 11000 11001static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 11002 11003保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 11004 11005**系统能力:** SystemCapability.Web.Webview.Core 11006 11007**参数:** 11008 11009| 参数名 | 类型 | 必填 | 说明 | 11010| -------- | ------ | ---- | ---------------------------- | 11011| host | string | 是 | HTTP身份验证凭据应用的主机。 | 11012| realm | string | 是 | HTTP身份验证凭据应用的域。 | 11013| username | string | 是 | 用户名。 | 11014| password | string | 是 | 密码。 | 11015 11016**错误码:** 11017 11018以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11019 11020| 错误码ID | 错误信息 | 11021| -------- | ------------------------------------------------------ | 11022| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11023 11024**示例:** 11025 11026```ts 11027// xxx.ets 11028import { webview } from '@kit.ArkWeb'; 11029import { BusinessError } from '@kit.BasicServicesKit'; 11030 11031@Entry 11032@Component 11033struct WebComponent { 11034 controller: webview.WebviewController = new webview.WebviewController(); 11035 host: string = "www.spincast.org"; 11036 realm: string = "protected example"; 11037 11038 build() { 11039 Column() { 11040 Button('saveHttpAuthCredentials') 11041 .onClick(() => { 11042 try { 11043 webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 11044 } catch (error) { 11045 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11046 } 11047 }) 11048 Web({ src: 'www.example.com', controller: this.controller }) 11049 } 11050 } 11051} 11052``` 11053 11054### existHttpAuthCredentials 11055 11056static existHttpAuthCredentials(): boolean 11057 11058判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 11059 11060**系统能力:** SystemCapability.Web.Webview.Core 11061 11062**返回值:** 11063 11064| 类型 | 说明 | 11065| ------- | ------------------------------------------------------------ | 11066| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 11067 11068**示例:** 11069 11070```ts 11071// xxx.ets 11072import { webview } from '@kit.ArkWeb'; 11073import { BusinessError } from '@kit.BasicServicesKit'; 11074 11075@Entry 11076@Component 11077struct WebComponent { 11078 controller: webview.WebviewController = new webview.WebviewController(); 11079 11080 build() { 11081 Column() { 11082 Button('existHttpAuthCredentials') 11083 .onClick(() => { 11084 try { 11085 let result = webview.WebDataBase.existHttpAuthCredentials(); 11086 } catch (error) { 11087 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11088 } 11089 }) 11090 Web({ src: 'www.example.com', controller: this.controller }) 11091 } 11092 } 11093} 11094``` 11095 11096### deleteHttpAuthCredentials 11097 11098static deleteHttpAuthCredentials(): void 11099 11100清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 11101 11102**系统能力:** SystemCapability.Web.Webview.Core 11103 11104**示例:** 11105 11106```ts 11107// xxx.ets 11108import { webview } from '@kit.ArkWeb'; 11109import { BusinessError } from '@kit.BasicServicesKit'; 11110 11111@Entry 11112@Component 11113struct WebComponent { 11114 controller: webview.WebviewController = new webview.WebviewController(); 11115 11116 build() { 11117 Column() { 11118 Button('deleteHttpAuthCredentials') 11119 .onClick(() => { 11120 try { 11121 webview.WebDataBase.deleteHttpAuthCredentials(); 11122 } catch (error) { 11123 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11124 } 11125 }) 11126 Web({ src: 'www.example.com', controller: this.controller }) 11127 } 11128 } 11129} 11130``` 11131 11132## GeolocationPermissions 11133 11134Web组件地理位置权限管理对象。 11135 11136> **说明:** 11137> 11138> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。 11139 11140### 需要权限 11141 11142访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。 11143 11144### allowGeolocation 11145 11146static allowGeolocation(origin: string, incognito?: boolean): void 11147 11148允许指定来源使用地理位置接口。 11149 11150**系统能力:** SystemCapability.Web.Webview.Core 11151 11152**参数:** 11153 11154| 参数名 | 类型 | 必填 | 说明 | 11155| ------ | ------ | ---- | ------------------ | 11156| origin | string | 是 |指定源的字符串索引 | 11157| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 | 11158 11159**错误码:** 11160 11161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11162 11163| 错误码ID | 错误信息 | 11164| -------- | ------------------------------------------------------ | 11165| 17100011 | Invalid origin. | 11166| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11167 11168**示例:** 11169 11170```ts 11171// xxx.ets 11172import { webview } from '@kit.ArkWeb'; 11173import { BusinessError } from '@kit.BasicServicesKit'; 11174 11175@Entry 11176@Component 11177struct WebComponent { 11178 controller: webview.WebviewController = new webview.WebviewController(); 11179 origin: string = "file:///"; 11180 11181 build() { 11182 Column() { 11183 Button('allowGeolocation') 11184 .onClick(() => { 11185 try { 11186 webview.GeolocationPermissions.allowGeolocation(this.origin); 11187 } catch (error) { 11188 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11189 } 11190 }) 11191 Web({ src: 'www.example.com', controller: this.controller }) 11192 } 11193 } 11194} 11195``` 11196 11197### deleteGeolocation 11198 11199static deleteGeolocation(origin: string, incognito?: boolean): void 11200 11201清除指定来源的地理位置权限状态。 11202 11203**系统能力:** SystemCapability.Web.Webview.Core 11204 11205**参数:** 11206 11207| 参数名 | 类型 | 必填 | 说明 | 11208| ------ | ------ | ---- | ------------------ | 11209| origin | string | 是 | 指定源的字符串索引 | 11210| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 | 11211 11212**错误码:** 11213 11214以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11215 11216| 错误码ID | 错误信息 | 11217| -------- | ------------------------------------------------------ | 11218| 17100011 | Invalid origin. | 11219| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11220 11221**示例:** 11222 11223```ts 11224// xxx.ets 11225import { webview } from '@kit.ArkWeb'; 11226import { BusinessError } from '@kit.BasicServicesKit'; 11227 11228@Entry 11229@Component 11230struct WebComponent { 11231 controller: webview.WebviewController = new webview.WebviewController(); 11232 origin: string = "file:///"; 11233 11234 build() { 11235 Column() { 11236 Button('deleteGeolocation') 11237 .onClick(() => { 11238 try { 11239 webview.GeolocationPermissions.deleteGeolocation(this.origin); 11240 } catch (error) { 11241 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11242 } 11243 }) 11244 Web({ src: 'www.example.com', controller: this.controller }) 11245 } 11246 } 11247} 11248``` 11249 11250### getAccessibleGeolocation 11251 11252static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void 11253 11254以回调方式异步获取指定源的地理位置权限状态。 11255 11256**系统能力:** SystemCapability.Web.Webview.Core 11257 11258**参数:** 11259 11260| 参数名 | 类型 | 必填 | 说明 | 11261| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 11262| origin | string | 是 | 指定源的字符串索引 | 11263| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11264| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 | 11265 11266**错误码:** 11267 11268以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11269 11270| 错误码ID | 错误信息 | 11271| -------- | ------------------------------------------------------ | 11272| 17100011 | Invalid origin. | 11273| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11274 11275**示例:** 11276 11277```ts 11278// xxx.ets 11279import { webview } from '@kit.ArkWeb'; 11280import { BusinessError } from '@kit.BasicServicesKit'; 11281 11282@Entry 11283@Component 11284struct WebComponent { 11285 controller: webview.WebviewController = new webview.WebviewController(); 11286 origin: string = "file:///"; 11287 11288 build() { 11289 Column() { 11290 Button('getAccessibleGeolocation') 11291 .onClick(() => { 11292 try { 11293 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 11294 if (error) { 11295 console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11296 return; 11297 } 11298 console.log('getAccessibleGeolocationAsync result: ' + result); 11299 }); 11300 } catch (error) { 11301 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11302 } 11303 }) 11304 Web({ src: 'www.example.com', controller: this.controller }) 11305 } 11306 } 11307} 11308``` 11309 11310### getAccessibleGeolocation 11311 11312static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean> 11313 11314以Promise方式异步获取指定源的地理位置权限状态。 11315 11316**系统能力:** SystemCapability.Web.Webview.Core 11317 11318**参数:** 11319 11320| 参数名 | 类型 | 必填 | 说明 | 11321| ------ | -------- | ---- | -------------------- | 11322| origin | string | 是 | 指定源的字符串索引。 | 11323| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 | 11324 11325**返回值:** 11326 11327| 类型 | 说明 | 11328| ---------------- | ------------------------------------------------------------ | 11329| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11330 11331**错误码:** 11332 11333以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11334 11335| 错误码ID | 错误信息 | 11336| -------- | ------------------------------------------------------ | 11337| 17100011 | Invalid origin. | 11338| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11339 11340**示例:** 11341 11342```ts 11343// xxx.ets 11344import { webview } from '@kit.ArkWeb'; 11345import { BusinessError } from '@kit.BasicServicesKit'; 11346 11347@Entry 11348@Component 11349struct WebComponent { 11350 controller: webview.WebviewController = new webview.WebviewController(); 11351 origin: string = "file:///"; 11352 11353 build() { 11354 Column() { 11355 Button('getAccessibleGeolocation') 11356 .onClick(() => { 11357 try { 11358 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 11359 .then(result => { 11360 console.log('getAccessibleGeolocationPromise result: ' + result); 11361 }).catch((error: BusinessError) => { 11362 console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11363 }); 11364 } catch (error) { 11365 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11366 } 11367 }) 11368 Web({ src: 'www.example.com', controller: this.controller }) 11369 } 11370 } 11371} 11372``` 11373 11374### getStoredGeolocation 11375 11376static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void 11377 11378以回调方式异步获取已存储地理位置权限状态的所有源信息。 11379 11380**系统能力:** SystemCapability.Web.Webview.Core 11381 11382**参数:** 11383 11384| 参数名 | 类型 | 必填 | 说明 | 11385| -------- | ---------------------------- | ---- | ---------------------------------------- | 11386| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 11387| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 | 11388 11389**错误码:** 11390 11391以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11392 11393| 错误码ID | 错误信息 | 11394| -------- | ------------------------------------------------------ | 11395| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11396 11397**示例:** 11398 11399```ts 11400// xxx.ets 11401import { webview } from '@kit.ArkWeb'; 11402import { BusinessError } from '@kit.BasicServicesKit'; 11403 11404@Entry 11405@Component 11406struct WebComponent { 11407 controller: webview.WebviewController = new webview.WebviewController(); 11408 11409 build() { 11410 Column() { 11411 Button('getStoredGeolocation') 11412 .onClick(() => { 11413 try { 11414 webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 11415 if (error) { 11416 console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11417 return; 11418 } 11419 let origins_str: string = origins.join(); 11420 console.log('getStoredGeolocationAsync origins: ' + origins_str); 11421 }); 11422 } catch (error) { 11423 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11424 } 11425 }) 11426 Web({ src: 'www.example.com', controller: this.controller }) 11427 } 11428 } 11429} 11430``` 11431 11432### getStoredGeolocation 11433 11434static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>> 11435 11436以Promise方式异步获取已存储地理位置权限状态的所有源信息。 11437 11438**系统能力:** SystemCapability.Web.Webview.Core 11439 11440**参数:** 11441 11442| 参数名 | 类型 | 必填 | 说明 | 11443| -------- | ---------------------------- | ---- | ---------------------------------------- | 11444| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 | 11445 11446**返回值:** 11447 11448| 类型 | 说明 | 11449| ---------------------- | --------------------------------------------------------- | 11450| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 11451 11452**错误码:** 11453 11454以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11455 11456| 错误码ID | 错误信息 | 11457| -------- | ------------------------------------------------------ | 11458| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11459 11460**示例:** 11461 11462```ts 11463// xxx.ets 11464import { webview } from '@kit.ArkWeb'; 11465import { BusinessError } from '@kit.BasicServicesKit'; 11466 11467@Entry 11468@Component 11469struct WebComponent { 11470 controller: webview.WebviewController = new webview.WebviewController(); 11471 11472 build() { 11473 Column() { 11474 Button('getStoredGeolocation') 11475 .onClick(() => { 11476 try { 11477 webview.GeolocationPermissions.getStoredGeolocation() 11478 .then(origins => { 11479 let origins_str: string = origins.join(); 11480 console.log('getStoredGeolocationPromise origins: ' + origins_str); 11481 }).catch((error: BusinessError) => { 11482 console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11483 }); 11484 } catch (error) { 11485 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11486 } 11487 }) 11488 Web({ src: 'www.example.com', controller: this.controller }) 11489 } 11490 } 11491} 11492``` 11493 11494### deleteAllGeolocation 11495 11496static deleteAllGeolocation(incognito?: boolean): void 11497 11498清除所有来源的地理位置权限状态。 11499 11500**系统能力:** SystemCapability.Web.Webview.Core 11501 11502**参数:** 11503 11504| 参数名 | 类型 | 必填 | 说明 | 11505| -------- | ---------------------------- | ---- | ---------------------------------------- | 11506| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 | 11507 11508**示例:** 11509 11510```ts 11511// xxx.ets 11512import { webview } from '@kit.ArkWeb'; 11513import { BusinessError } from '@kit.BasicServicesKit'; 11514 11515@Entry 11516@Component 11517struct WebComponent { 11518 controller: webview.WebviewController = new webview.WebviewController(); 11519 11520 build() { 11521 Column() { 11522 Button('deleteAllGeolocation') 11523 .onClick(() => { 11524 try { 11525 webview.GeolocationPermissions.deleteAllGeolocation(); 11526 } catch (error) { 11527 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11528 } 11529 }) 11530 Web({ src: 'www.example.com', controller: this.controller }) 11531 } 11532 } 11533} 11534``` 11535## WebHeader 11536 11537Web组件返回的请求/响应头对象。 11538 11539**系统能力:** SystemCapability.Web.Webview.Core 11540 11541| 名称 | 类型 | 可读 | 可写 |说明 | 11542| ----------- | ------ | -----|------|------------------- | 11543| headerKey | string | 是 | 是 | 请求/响应头的key。 | 11544| headerValue | string | 是 | 是 | 请求/响应头的value。 | 11545 11546## RequestInfo<sup>12+</sup> 11547 11548Web组件发送的资源请求信息。 11549 11550**系统能力:**: SystemCapability.Web.Webview.Core 11551 11552| 名称 | 类型 | 可读 | 可写 |说明 | 11553| ---------| ------ | -----|------|-------- | 11554| url | string | 是 | 是 | 请求的链接。 | 11555| method | string | 是 | 是 | 请求的方法。 | 11556| formData | string | 是 | 是 | 请求的表单数据。 | 11557 11558## WebHitTestType 11559 11560[getHitTest](#gethittest)接口用于指示游标节点。 11561 11562**系统能力:** SystemCapability.Web.Webview.Core 11563 11564| 名称 | 值 | 说明 | 11565| ------------- | -- |----------------------------------------- | 11566| EditText | 0 |可编辑的区域。 | 11567| Email | 1 |电子邮件地址。 | 11568| HttpAnchor | 2 |超链接,其中src为http。 | 11569| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 | 11570| Img | 4 |HTML::img标签。 | 11571| Map | 5 |地理地址。 | 11572| Phone | 6 |电话号码。 | 11573| Unknown | 7 |未知内容。 | 11574 11575## SecurityLevel<sup>11+</sup> 11576 11577当前网页的安全级别。 11578 11579**系统能力:** SystemCapability.Web.Webview.Core 11580 11581| 名称 | 值 | 说明 | 11582| ------------- | -- |----------------------------------------- | 11583| NONE | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。| 11584| SECURE | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。| 11585| WARNING | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。| 11586| DANGEROUS | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 | 11587 11588## HitTestValue 11589 11590提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。 11591 11592**系统能力:** SystemCapability.Web.Webview.Core 11593 11594| 名称 | 类型 | 可读 | 可写 | 说明| 11595| ---- | ---- | ---- | ---- |---- | 11596| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。| 11597| extra | string | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 11598 11599## WebMessage 11600 11601type WebMessage = ArrayBuffer | string 11602 11603用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 11604 11605**系统能力:** SystemCapability.Web.Webview.Core 11606 11607| 类型 | 说明 | 11608| -------- | -------------------------------------- | 11609| string | 字符串类型数据。 | 11610| ArrayBuffer | 二进制类型数据。 | 11611 11612## JsMessageType<sup>10+</sup> 11613 11614[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 11615 11616**系统能力:** SystemCapability.Web.Webview.Core 11617 11618| 名称 | 值 | 说明 | 11619| ------------ | -- |--------------------------------- | 11620| NOT_SUPPORT | 0 |不支持的数据类型。| 11621| STRING | 1 |字符串类型。| 11622| NUMBER | 2 |数值类型。| 11623| BOOLEAN | 3 |布尔类型。| 11624| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11625| ARRAY | 5 |数组类型| 11626 11627## WebMessageType<sup>10+</sup> 11628 11629[webMessagePort](#webmessageport)接口所支持的数据类型。 11630 11631**系统能力:** SystemCapability.Web.Webview.Core 11632 11633| 名称 | 值 | 说明 | 11634| ------------ | -- |------------------------------- | 11635| NOT_SUPPORT | 0 |不支持的数据类型。| 11636| STRING | 1 |字符串类型。| 11637| NUMBER | 2 |数值类型。| 11638| BOOLEAN | 3 |布尔类型。| 11639| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11640| ARRAY | 5 |数组类型。| 11641| ERROR | 6 |错误类型。| 11642 11643## MediaPlaybackState<sup>12+</sup> 11644 11645当前网页的播控状态。 11646 11647**系统能力:** SystemCapability.Web.Webview.Core 11648 11649| 名称 | 值 | 说明 | 11650| ------- | ---- | ------------------ | 11651| NONE | 0 | 页面无音视频启播。 | 11652| PLAYING | 1 | 页面音视频播放中。 | 11653| PAUSED | 2 | 页面音视频暂停。 | 11654| STOPPED | 3 | 页面音视频停止。 | 11655 11656## RenderProcessMode<sup>12+</sup> 11657 11658ArkWeb渲染子进程模式类型。 11659 11660**系统能力:** SystemCapability.Web.Webview.Core 11661 11662| 名称 | 值 | 说明 | 11663| ------------- | -- |----------------------------------------- | 11664| SINGLE | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。| 11665| MULTIPLE | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。| 11666 11667 11668## JsMessageExt<sup>10+</sup> 11669 11670[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。 11671 11672### getType<sup>10+</sup> 11673 11674getType(): JsMessageType 11675 11676获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11677 11678**系统能力:** SystemCapability.Web.Webview.Core 11679 11680**返回值:** 11681 11682| 类型 | 说明 | 11683| --------------| --------------------------------------------------------- | 11684| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 | 11685 11686### getString<sup>10+</sup> 11687 11688getString(): string 11689 11690获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11691 11692**系统能力:** SystemCapability.Web.Webview.Core 11693 11694**返回值:** 11695 11696| 类型 | 说明 | 11697| --------------| ------------- | 11698| string | 返回字符串类型的数据。 | 11699 11700**错误码:** 11701 11702以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11703 11704| 错误码ID | 错误信息 | 11705| -------- | ------------------------------------- | 11706| 17100014 | The type and value of the message do not match. | 11707 11708### getNumber<sup>10+</sup> 11709 11710getNumber(): number 11711 11712获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11713 11714**系统能力:** SystemCapability.Web.Webview.Core 11715 11716**返回值:** 11717 11718| 类型 | 说明 | 11719| --------------| ------------- | 11720| number | 返回数值类型的数据。 | 11721 11722**错误码:** 11723 11724以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11725 11726| 错误码ID | 错误信息 | 11727| -------- | ------------------------------------- | 11728| 17100014 | The type and value of the message do not match. | 11729 11730### getBoolean<sup>10+</sup> 11731 11732getBoolean(): boolean 11733 11734获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11735 11736**系统能力:** SystemCapability.Web.Webview.Core 11737 11738**返回值:** 11739 11740| 类型 | 说明 | 11741| --------------| ------------- | 11742| boolean | 返回布尔类型的数据。 | 11743 11744**错误码:** 11745 11746以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11747 11748| 错误码ID | 错误信息 | 11749| -------- | ------------------------------------- | 11750| 17100014 | The type and value of the message do not match. | 11751 11752### getArrayBuffer<sup>10+</sup> 11753 11754getArrayBuffer(): ArrayBuffer 11755 11756获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11757 11758**系统能力:** SystemCapability.Web.Webview.Core 11759 11760**返回值:** 11761 11762| 类型 | 说明 | 11763| --------------| ------------- | 11764| ArrayBuffer | 返回原始二进制数据。 | 11765 11766**错误码:** 11767 11768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11769 11770| 错误码ID | 错误信息 | 11771| -------- | ------------------------------------- | 11772| 17100014 | The type and value of the message do not match. | 11773 11774### getArray<sup>10+</sup> 11775 11776getArray(): Array\<string | number | boolean\> 11777 11778获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11779 11780**系统能力:** SystemCapability.Web.Webview.Core 11781 11782**返回值:** 11783 11784| 类型 | 说明 | 11785| --------------| ------------- | 11786| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 11787 11788**错误码:** 11789 11790以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11791 11792| 错误码ID | 错误信息 | 11793| -------- | ------------------------------------- | 11794| 17100014 | The type and value of the message do not match. | 11795 11796## WebMessageExt<sup>10+</sup> 11797 11798[webMessagePort](#webmessageport)接口接收、发送的数据对象。 11799 11800### getType<sup>10+</sup> 11801 11802getType(): WebMessageType 11803 11804获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11805 11806**系统能力:** SystemCapability.Web.Webview.Core 11807 11808**返回值:** 11809 11810| 类型 | 说明 | 11811| --------------| --------------------------------------------------------- | 11812| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 11813 11814### getString<sup>10+</sup> 11815 11816getString(): string 11817 11818获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11819 11820**系统能力:** SystemCapability.Web.Webview.Core 11821 11822**返回值:** 11823 11824| 类型 | 说明 | 11825| --------------| ------------- | 11826| string | 返回字符串类型的数据。 | 11827 11828**错误码:** 11829 11830以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11831 11832| 错误码ID | 错误信息 | 11833| -------- | ------------------------------------- | 11834| 17100014 | The type and value of the message do not match. | 11835 11836### getNumber<sup>10+</sup> 11837 11838getNumber(): number 11839 11840获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11841 11842**系统能力:** SystemCapability.Web.Webview.Core 11843 11844**返回值:** 11845 11846| 类型 | 说明 | 11847| --------------| ------------- | 11848| number | 返回数值类型的数据。 | 11849 11850**错误码:** 11851 11852以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11853 11854| 错误码ID | 错误信息 | 11855| -------- | ------------------------------------- | 11856| 17100014 | The type and value of the message do not match. | 11857 11858### getBoolean<sup>10+</sup> 11859 11860getBoolean(): boolean 11861 11862获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11863 11864**系统能力:** SystemCapability.Web.Webview.Core 11865 11866**返回值:** 11867 11868| 类型 | 说明 | 11869| --------------| ------------- | 11870| boolean | 返回布尔类型的数据。 | 11871 11872**错误码:** 11873 11874以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11875 11876| 错误码ID | 错误信息 | 11877| -------- | ------------------------------------- | 11878| 17100014 | The type and value of the message do not match. | 11879 11880### getArrayBuffer<sup>10+</sup> 11881 11882getArrayBuffer(): ArrayBuffer 11883 11884获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11885 11886**系统能力:** SystemCapability.Web.Webview.Core 11887 11888**返回值:** 11889 11890| 类型 | 说明 | 11891| --------------| ------------- | 11892| ArrayBuffer | 返回原始二进制数据。 | 11893 11894**错误码:** 11895 11896以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11897 11898| 错误码ID | 错误信息 | 11899| -------- | ------------------------------------- | 11900| 17100014 | The type and value of the message do not match. | 11901 11902### getArray<sup>10+</sup> 11903 11904getArray(): Array\<string | number | boolean\> 11905 11906获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11907 11908**系统能力:** SystemCapability.Web.Webview.Core 11909 11910**返回值:** 11911 11912| 类型 | 说明 | 11913| --------------| ------------- | 11914| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 11915 11916**错误码:** 11917 11918以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11919 11920| 错误码ID | 错误信息 | 11921| -------- | ------------------------------------- | 11922| 17100014 | The type and value of the message do not match. | 11923 11924### getError<sup>10+</sup> 11925 11926getError(): Error 11927 11928获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11929 11930**系统能力:** SystemCapability.Web.Webview.Core 11931 11932**返回值:** 11933 11934| 类型 | 说明 | 11935| --------------| ------------- | 11936| Error | 返回错误对象类型的数据。 | 11937 11938**错误码:** 11939 11940以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11941 11942| 错误码ID | 错误信息 | 11943| -------- | ------------------------------------- | 11944| 17100014 | The type and value of the message do not match. | 11945 11946### setType<sup>10+</sup> 11947 11948setType(type: WebMessageType): void 11949 11950设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11951 11952**系统能力:** SystemCapability.Web.Webview.Core 11953 11954**参数:** 11955 11956| 参数名 | 类型 | 必填 | 说明 | 11957| ------ | ------ | ---- | ---------------------- | 11958| type | [WebMessageType](#webmessagetype10) | 是 | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 11959 11960**错误码:** 11961 11962| 错误码ID | 错误信息 | 11963| -------- | ------------------------------------- | 11964| 17100014 | The type and value of the message do not match. | 11965| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11966 11967### setString<sup>10+</sup> 11968 11969setString(message: string): void 11970 11971设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11972 11973**系统能力:** SystemCapability.Web.Webview.Core 11974 11975**参数:** 11976 11977| 参数名 | 类型 | 必填 | 说明 | 11978| ------ | ------ | ---- | -------------------- | 11979| message | string | 是 | 字符串类型数据。 | 11980 11981**错误码:** 11982 11983| 错误码ID | 错误信息 | 11984| -------- | ------------------------------------- | 11985| 17100014 | The type and value of the message do not match. | 11986| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11987 11988### setNumber<sup>10+</sup> 11989 11990setNumber(message: number): void 11991 11992设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11993 11994**系统能力:** SystemCapability.Web.Webview.Core 11995 11996**参数:** 11997 11998| 参数名 | 类型 | 必填 | 说明 | 11999| ------ | ------ | ---- | -------------------- | 12000| message | number | 是 | 数值类型数据。 | 12001 12002**错误码:** 12003 12004| 错误码ID | 错误信息 | 12005| -------- | ------------------------------------- | 12006| 17100014 | The type and value of the message do not match. | 12007| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12008 12009### setBoolean<sup>10+</sup> 12010 12011setBoolean(message: boolean): void 12012 12013设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12014 12015**系统能力:** SystemCapability.Web.Webview.Core 12016 12017**参数:** 12018 12019| 参数名 | 类型 | 必填 | 说明 | 12020| ------ | ------ | ---- | -------------------- | 12021| message | boolean | 是 | 布尔类型数据。 | 12022 12023**错误码:** 12024 12025| 错误码ID | 错误信息 | 12026| -------- | ------------------------------------- | 12027| 17100014 | The type and value of the message do not match. | 12028| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12029 12030### setArrayBuffer<sup>10+</sup> 12031 12032setArrayBuffer(message: ArrayBuffer): void 12033 12034设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12035 12036**系统能力:** SystemCapability.Web.Webview.Core 12037 12038**参数:** 12039 12040| 参数名 | 类型 | 必填 | 说明 | 12041| ------ | ------ | ---- | -------------------- | 12042| message | ArrayBuffer | 是 | 原始二进制类型数据。 | 12043 12044**错误码:** 12045 12046以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12047 12048| 错误码ID | 错误信息 | 12049| -------- | ------------------------------------- | 12050| 17100014 | The type and value of the message do not match. | 12051| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12052 12053### setArray<sup>10+</sup> 12054 12055setArray(message: Array\<string | number | boolean\>): void 12056 12057设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12058 12059**系统能力:** SystemCapability.Web.Webview.Core 12060 12061**参数:** 12062 12063| 参数名 | 类型 | 必填 | 说明 | 12064| ------ | ------ | ---- | -------------------- | 12065| message | Array\<string \| number \| boolean\> | 是 | 数组类型数据。 | 12066 12067**错误码:** 12068 12069以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12070 12071| 错误码ID | 错误信息 | 12072| -------- | ------------------------------------- | 12073| 17100014 | The type and value of the message do not match. | 12074| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12075 12076### setError<sup>10+</sup> 12077 12078setError(message: Error): void 12079 12080设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12081 12082**系统能力:** SystemCapability.Web.Webview.Core 12083 12084**参数:** 12085 12086| 参数名 | 类型 | 必填 | 说明 | 12087| ------ | ------ | ---- | -------------------- | 12088| message | Error | 是 | 错误对象类型数据。 | 12089 12090**错误码:** 12091 12092以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12093 12094| 错误码ID | 错误信息 | 12095| -------- | ------------------------------------- | 12096| 17100014 | The type and value of the message do not match. | 12097| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12098 12099## WebStorageOrigin 12100 12101提供Web SQL数据库的使用信息。 12102 12103**系统能力:** SystemCapability.Web.Webview.Core 12104 12105| 名称 | 类型 | 可读 | 可写 | 说明 | 12106| ------ | ------ | ---- | ---- | ---- | 12107| origin | string | 是 | 是 | 指定源的字符串索引。 | 12108| usage | number | 是 | 是 | 指定源的存储量。 | 12109| quota | number | 是 | 是 | 指定源的存储配额。 | 12110 12111## BackForwardList 12112 12113当前Webview的历史信息列表。 12114 12115**系统能力:** SystemCapability.Web.Webview.Core 12116 12117| 名称 | 类型 | 可读 | 可写 | 说明 | 12118| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 12119| currentIndex | number | 是 | 是 | 当前在页面历史列表中的索引。 | 12120| size | number | 是 | 是 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 12121 12122### getItemAtIndex 12123 12124getItemAtIndex(index: number): HistoryItem 12125 12126获取历史列表中指定索引的历史记录项信息。 12127 12128**系统能力:** SystemCapability.Web.Webview.Core 12129 12130**参数:** 12131 12132| 参数名 | 类型 | 必填 | 说明 | 12133| ------ | ------ | ---- | ---------------------- | 12134| index | number | 是 | 指定历史列表中的索引。 | 12135 12136**返回值:** 12137 12138| 类型 | 说明 | 12139| --------------------------- | ------------ | 12140| [HistoryItem](#historyitem) | 历史记录项。 | 12141 12142**错误码:** 12143 12144以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12145 12146| 错误码ID | 错误信息 | 12147| -------- | ------------------------------------------------------ | 12148| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12149 12150**示例:** 12151 12152```ts 12153// xxx.ets 12154import { webview } from '@kit.ArkWeb'; 12155import { BusinessError } from '@kit.BasicServicesKit'; 12156import { image } from '@kit.ImageKit'; 12157 12158@Entry 12159@Component 12160struct WebComponent { 12161 controller: webview.WebviewController = new webview.WebviewController(); 12162 @State icon: image.PixelMap | undefined = undefined; 12163 12164 build() { 12165 Column() { 12166 Button('getBackForwardEntries') 12167 .onClick(() => { 12168 try { 12169 let list = this.controller.getBackForwardEntries(); 12170 let historyItem = list.getItemAtIndex(list.currentIndex); 12171 console.log("HistoryItem: " + JSON.stringify(historyItem)); 12172 this.icon = historyItem.icon; 12173 } catch (error) { 12174 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12175 } 12176 }) 12177 Web({ src: 'www.example.com', controller: this.controller }) 12178 } 12179 } 12180} 12181``` 12182 12183## HistoryItem 12184 12185页面历史记录项。 12186 12187**系统能力:** SystemCapability.Web.Webview.Core 12188 12189| 名称 | 类型 | 可读 | 可写 | 说明 | 12190| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 12191| icon | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 12192| historyUrl | string | 是 | 是 | 历史记录项的url地址。 | 12193| historyRawUrl | string | 是 | 是 | 历史记录项的原始url地址。 | 12194| title | string | 是 | 是 | 历史记录项的标题。 | 12195 12196## WebCustomScheme 12197 12198自定义协议配置。 12199 12200**系统能力:** SystemCapability.Web.Webview.Core 12201 12202| 名称 | 类型 | 可读 | 可写 | 说明 | 12203| -------------- | --------- | ---- | ---- | ---------------------------- | 12204| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。 | 12205| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。 | 12206| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。 | 12207| isStandard<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。 | 12208| isLocal<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与应用于“FILE”的安全规则相同的安全规则来处理。 | 12209| isDisplayIsolated<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。 | 12210| isSecure<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。 | 12211| isCspBypassing<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。在大多数情况下,当设置isStandard为true时,不应设置此值。 | 12212| isCodeCacheSupported<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的js资源,支持生成code cache。 | 12213 12214## SecureDnsMode<sup>10+</sup> 12215 12216Web组件使用HTTPDNS的模式。 12217 12218**系统能力:** SystemCapability.Web.Webview.Core 12219 12220| 名称 | 值 | 说明 | 12221| ------------- | -- |----------------------------------------- | 12222| OFF | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。| 12223| AUTO | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。| 12224| SECURE_ONLY | 2 |强制使用设定的HTTPDNS服务器进行域名解析。| 12225 12226## WebDownloadState<sup>11+</sup> 12227 12228下载任务的状态。 12229 12230**系统能力:** SystemCapability.Web.Webview.Core 12231 12232| 名称 | 值 | 说明 | 12233| ------------- | -- |----------------------------------------- | 12234| IN_PROGRESS | 0 |下载任务正在进行中。| 12235| COMPLETED | 1 |下载任务已经完成。| 12236| CANCELED | 2 |下载任务已经被取消。| 12237| INTERRUPTED | 3 |下载任务被中断。| 12238| PENDING | 4 |下载任务等待开始。| 12239| PAUSED | 5 |下载任务已经被暂停。| 12240| UNKNOWN | 6 |下载任务未知状态。| 12241 12242## WebDownloadErrorCode<sup>11+</sup> 12243 12244下载任务的错误码。 12245 12246**系统能力:** SystemCapability.Web.Webview.Core 12247 12248| 名称 | 值 | 说明 | 12249| ------------- | -- |----------------------------------------- | 12250| ERROR_UNKNOWN | 0 |未知的错误。| 12251| FILE_FAILED | 1 | 常规文件操作失败。| 12252| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。| 12253| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。| 12254| FILE_NAME_TOO_LONG | 5 | 文件名字过长。| 12255| FILE_TOO_LARGE | 6 | 文件太大。| 12256| FILE_TRANSIENT_ERROR | 10 | 出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。| 12257| FILE_BLOCKED | 11 | 由于某些本地策略,文件被阻止访问。| 12258| FILE_TOO_SHORT | 13 | 当尝试恢复下载时,发现文件不够长,可能该文件已不存在。| 12259| FILE_HASH_MISMATCH | 14 | 哈希不匹配。| 12260| FILE_SAME_AS_SOURCE | 15 | 文件已存在。| 12261| NETWORK_FAILED | 20 | 一般网络错误。| 12262| NETWORK_TIMEOUT | 21 | 网络超时。| 12263| NETWORK_DISCONNECTED | 22 | 网络断开连接。| 12264| NETWORK_SERVER_DOWN | 23 | 服务器关闭。| 12265| NETWORK_INVALID_REQUEST | 24 | 无效的网络请求,可能重定向到不支持的方案或无效的URL。| 12266| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。| 12267| SERVER_NO_RANGE | 31 | 服务器不支持范围请求。| 12268| SERVER_BAD_CONTENT | 33 | 服务器没有请求的数据。| 12269| SERVER_UNAUTHORIZED | 34 | 服务器不允许下载该文件。| 12270| SERVER_CERT_PROBLEM | 35 | 服务器证书错误。| 12271| SERVER_FORBIDDEN | 36 | 服务器访问被禁止。| 12272| SERVER_UNREACHABLE | 37 | 无法访问服务器。| 12273| SERVER_CONTENT_LENGTH_MISMATCH | 38 | 接收到的数据与内容长度不匹配。| 12274| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。| 12275| USER_CANCELED | 40 | 用户取消了下载。| 12276| USER_SHUTDOWN | 41 | 用户关闭了应用。| 12277| CRASH | 50 | 应用发生了崩溃。| 12278 12279## WebDownloadItem<sup>11+</sup> 12280 12281 表示下载任务,您可以使用此对象来操作相应的下载任务。 12282 12283> **说明:** 12284> 12285> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。 12286 12287### getGuid<sup>11+</sup> 12288 12289getGuid(): string 12290 12291获取下载任务的唯一ID。 12292 12293**系统能力:** SystemCapability.Web.Webview.Core 12294 12295**返回值:** 12296 12297| 类型 | 说明 | 12298| ------ | ------------------------- | 12299| string | 下载任务的唯一ID。 | 12300 12301**示例:** 12302 12303```ts 12304// xxx.ets 12305import { webview } from '@kit.ArkWeb'; 12306import { BusinessError } from '@kit.BasicServicesKit'; 12307 12308@Entry 12309@Component 12310struct WebComponent { 12311 controller: webview.WebviewController = new webview.WebviewController(); 12312 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12313 12314 build() { 12315 Column() { 12316 Button('setDownloadDelegate') 12317 .onClick(() => { 12318 try { 12319 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12320 console.log("will start a download."); 12321 // 传入一个下载路径,并开始下载。 12322 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12323 }) 12324 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12325 console.log("download update guid: " + webDownloadItem.getGuid()); 12326 }) 12327 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12328 console.log("download failed guid: " + webDownloadItem.getGuid()); 12329 }) 12330 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12331 console.log("download finish guid: " + webDownloadItem.getGuid()); 12332 }) 12333 this.controller.setDownloadDelegate(this.delegate); 12334 } catch (error) { 12335 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12336 } 12337 }) 12338 Button('startDownload') 12339 .onClick(() => { 12340 try { 12341 this.controller.startDownload('https://www.example.com'); 12342 } catch (error) { 12343 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12344 } 12345 }) 12346 Web({ src: 'www.example.com', controller: this.controller }) 12347 } 12348 } 12349} 12350``` 12351 12352### getCurrentSpeed<sup>11+</sup> 12353 12354getCurrentSpeed(): number 12355 12356获取下载的速度,单位:字节每秒。 12357 12358**系统能力:** SystemCapability.Web.Webview.Core 12359 12360**返回值:** 12361 12362| 类型 | 说明 | 12363| ------ | ------------------------- | 12364| number | 下载的速度(字节每秒)。 | 12365 12366**示例:** 12367 12368```ts 12369// xxx.ets 12370import { webview } from '@kit.ArkWeb'; 12371import { BusinessError } from '@kit.BasicServicesKit'; 12372 12373@Entry 12374@Component 12375struct WebComponent { 12376 controller: webview.WebviewController = new webview.WebviewController(); 12377 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12378 12379 build() { 12380 Column() { 12381 Button('setDownloadDelegate') 12382 .onClick(() => { 12383 try { 12384 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12385 console.log("will start a download."); 12386 // 传入一个下载路径,并开始下载。 12387 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12388 }) 12389 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12390 console.log("download update current speed: " + webDownloadItem.getCurrentSpeed()); 12391 }) 12392 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12393 console.log("download failed guid: " + webDownloadItem.getGuid()); 12394 }) 12395 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12396 console.log("download finish guid: " + webDownloadItem.getGuid()); 12397 }) 12398 this.controller.setDownloadDelegate(this.delegate); 12399 } catch (error) { 12400 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12401 } 12402 }) 12403 Button('startDownload') 12404 .onClick(() => { 12405 try { 12406 this.controller.startDownload('https://www.example.com'); 12407 } catch (error) { 12408 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12409 } 12410 }) 12411 Web({ src: 'www.example.com', controller: this.controller }) 12412 } 12413 } 12414} 12415``` 12416 12417### getPercentComplete<sup>11+</sup> 12418 12419getPercentComplete(): number 12420 12421获取下载的进度,100代表下载完成。 12422 12423**系统能力:** SystemCapability.Web.Webview.Core 12424 12425**返回值:** 12426 12427| 类型 | 说明 | 12428| ------ | ------------------------- | 12429| number | 下载完成的进度,100代表下载完成。 | 12430 12431**示例:** 12432 12433```ts 12434// xxx.ets 12435import { webview } from '@kit.ArkWeb'; 12436import { BusinessError } from '@kit.BasicServicesKit'; 12437 12438@Entry 12439@Component 12440struct WebComponent { 12441 controller: webview.WebviewController = new webview.WebviewController(); 12442 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12443 12444 build() { 12445 Column() { 12446 Button('setDownloadDelegate') 12447 .onClick(() => { 12448 try { 12449 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12450 console.log("will start a download."); 12451 // 传入一个下载路径,并开始下载。 12452 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12453 }) 12454 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12455 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12456 }) 12457 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12458 console.log("download failed guid: " + webDownloadItem.getGuid()); 12459 }) 12460 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12461 console.log("download finish guid: " + webDownloadItem.getGuid()); 12462 }) 12463 this.controller.setDownloadDelegate(this.delegate); 12464 } catch (error) { 12465 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12466 } 12467 }) 12468 Button('startDownload') 12469 .onClick(() => { 12470 try { 12471 this.controller.startDownload('https://www.example.com'); 12472 } catch (error) { 12473 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12474 } 12475 }) 12476 Web({ src: 'www.example.com', controller: this.controller }) 12477 } 12478 } 12479} 12480``` 12481 12482### getTotalBytes<sup>11+</sup> 12483 12484getTotalBytes(): number 12485 12486获取待下载文件的总长度。 12487 12488**系统能力:** SystemCapability.Web.Webview.Core 12489 12490**返回值:** 12491 12492| 类型 | 说明 | 12493| ------ | ------------------------- | 12494| number | 待下载文件的总长度。 | 12495 12496**示例:** 12497 12498```ts 12499// xxx.ets 12500import { webview } from '@kit.ArkWeb'; 12501import { BusinessError } from '@kit.BasicServicesKit'; 12502 12503@Entry 12504@Component 12505struct WebComponent { 12506 controller: webview.WebviewController = new webview.WebviewController(); 12507 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12508 12509 build() { 12510 Column() { 12511 Button('setDownloadDelegate') 12512 .onClick(() => { 12513 try { 12514 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12515 console.log("will start a download."); 12516 // 传入一个下载路径,并开始下载。 12517 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12518 }) 12519 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12520 console.log("download update total bytes: " + webDownloadItem.getTotalBytes()); 12521 }) 12522 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12523 console.log("download failed guid: " + webDownloadItem.getGuid()); 12524 }) 12525 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12526 console.log("download finish guid: " + webDownloadItem.getGuid()); 12527 }) 12528 this.controller.setDownloadDelegate(this.delegate); 12529 } catch (error) { 12530 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12531 } 12532 }) 12533 Button('startDownload') 12534 .onClick(() => { 12535 try { 12536 this.controller.startDownload('https://www.example.com'); 12537 } catch (error) { 12538 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12539 } 12540 }) 12541 Web({ src: 'www.example.com', controller: this.controller }) 12542 } 12543 } 12544} 12545``` 12546 12547### getState<sup>11+</sup> 12548 12549getState(): WebDownloadState 12550 12551获取下载的状态。 12552 12553**系统能力:** SystemCapability.Web.Webview.Core 12554 12555**返回值:** 12556 12557| 类型 | 说明 | 12558| ------ | ------------------------- | 12559| [WebDownloadState](#webdownloadstate11) | 下载的状态。 | 12560 12561**示例:** 12562 12563```ts 12564// xxx.ets 12565import { webview } from '@kit.ArkWeb'; 12566import { BusinessError } from '@kit.BasicServicesKit'; 12567 12568@Entry 12569@Component 12570struct WebComponent { 12571 controller: webview.WebviewController = new webview.WebviewController(); 12572 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12573 12574 build() { 12575 Column() { 12576 Button('setDownloadDelegate') 12577 .onClick(() => { 12578 try { 12579 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12580 console.log("will start a download."); 12581 // 传入一个下载路径,并开始下载。 12582 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12583 }) 12584 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12585 console.log("download update download state: " + webDownloadItem.getState()); 12586 }) 12587 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12588 console.log("download failed guid: " + webDownloadItem.getGuid()); 12589 }) 12590 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12591 console.log("download finish guid: " + webDownloadItem.getGuid()); 12592 }) 12593 this.controller.setDownloadDelegate(this.delegate); 12594 } catch (error) { 12595 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12596 } 12597 }) 12598 Button('startDownload') 12599 .onClick(() => { 12600 try { 12601 this.controller.startDownload('https://www.example.com'); 12602 } catch (error) { 12603 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12604 } 12605 }) 12606 Web({ src: 'www.example.com', controller: this.controller }) 12607 } 12608 } 12609} 12610``` 12611 12612### getLastErrorCode<sup>11+</sup> 12613 12614getLastErrorCode(): WebDownloadErrorCode 12615 12616获取下载的错误码。 12617 12618**系统能力:** SystemCapability.Web.Webview.Core 12619 12620**返回值:** 12621 12622| 类型 | 说明 | 12623| ------ | ------------------------- | 12624| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 | 12625 12626**示例:** 12627 12628```ts 12629// xxx.ets 12630import { webview } from '@kit.ArkWeb'; 12631import { BusinessError } from '@kit.BasicServicesKit'; 12632 12633@Entry 12634@Component 12635struct WebComponent { 12636 controller: webview.WebviewController = new webview.WebviewController(); 12637 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12638 12639 build() { 12640 Column() { 12641 Button('setDownloadDelegate') 12642 .onClick(() => { 12643 try { 12644 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12645 console.log("will start a download."); 12646 // 传入一个下载路径,并开始下载。 12647 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12648 }) 12649 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12650 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12651 }) 12652 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12653 console.log("download failed guid: " + webDownloadItem.getGuid()); 12654 console.log("download error code: " + webDownloadItem.getLastErrorCode()); 12655 }) 12656 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12657 console.log("download finish guid: " + webDownloadItem.getGuid()); 12658 }) 12659 this.controller.setDownloadDelegate(this.delegate); 12660 } catch (error) { 12661 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12662 } 12663 }) 12664 Button('startDownload') 12665 .onClick(() => { 12666 try { 12667 this.controller.startDownload('https://www.example.com'); 12668 } catch (error) { 12669 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12670 } 12671 }) 12672 Web({ src: 'www.example.com', controller: this.controller }) 12673 } 12674 } 12675} 12676``` 12677 12678### getMethod<sup>11+</sup> 12679 12680getMethod(): string 12681 12682获取下载任务的请求方式。 12683 12684**系统能力:** SystemCapability.Web.Webview.Core 12685 12686**返回值:** 12687 12688| 类型 | 说明 | 12689| ------ | ------------------------- | 12690| string | 下载的请求方式。 | 12691 12692**示例:** 12693 12694```ts 12695// xxx.ets 12696import { webview } from '@kit.ArkWeb'; 12697import { BusinessError } from '@kit.BasicServicesKit'; 12698 12699@Entry 12700@Component 12701struct WebComponent { 12702 controller: webview.WebviewController = new webview.WebviewController(); 12703 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12704 12705 build() { 12706 Column() { 12707 Button('setDownloadDelegate') 12708 .onClick(() => { 12709 try { 12710 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12711 console.log("will start a download, method:" + webDownloadItem.getMethod()); 12712 // 传入一个下载路径,并开始下载。 12713 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12714 }) 12715 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12716 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12717 }) 12718 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12719 console.log("download failed guid: " + webDownloadItem.getGuid()); 12720 }) 12721 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12722 console.log("download finish guid: " + webDownloadItem.getGuid()); 12723 }) 12724 this.controller.setDownloadDelegate(this.delegate); 12725 } catch (error) { 12726 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12727 } 12728 }) 12729 Button('startDownload') 12730 .onClick(() => { 12731 try { 12732 this.controller.startDownload('https://www.example.com'); 12733 } catch (error) { 12734 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12735 } 12736 }) 12737 Web({ src: 'www.example.com', controller: this.controller }) 12738 } 12739 } 12740} 12741``` 12742 12743### getMimeType<sup>11+</sup> 12744 12745getMimeType(): string 12746 12747获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。 12748 12749**系统能力:** SystemCapability.Web.Webview.Core 12750 12751**返回值:** 12752 12753| 类型 | 说明 | 12754| ------ | ------------------------- | 12755| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。| 12756 12757**示例:** 12758 12759```ts 12760// xxx.ets 12761import { webview } from '@kit.ArkWeb'; 12762import { BusinessError } from '@kit.BasicServicesKit'; 12763 12764@Entry 12765@Component 12766struct WebComponent { 12767 controller: webview.WebviewController = new webview.WebviewController(); 12768 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12769 12770 build() { 12771 Column() { 12772 Button('setDownloadDelegate') 12773 .onClick(() => { 12774 try { 12775 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12776 console.log("will start a download, mime type:" + webDownloadItem.getMimeType()); 12777 // 传入一个下载路径,并开始下载。 12778 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12779 }) 12780 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12781 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12782 }) 12783 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12784 console.log("download failed guid: " + webDownloadItem.getGuid()); 12785 }) 12786 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12787 console.log("download finish guid: " + webDownloadItem.getGuid()); 12788 }) 12789 this.controller.setDownloadDelegate(this.delegate); 12790 } catch (error) { 12791 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12792 } 12793 }) 12794 Button('startDownload') 12795 .onClick(() => { 12796 try { 12797 this.controller.startDownload('https://www.example.com'); 12798 } catch (error) { 12799 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12800 } 12801 }) 12802 Web({ src: 'www.example.com', controller: this.controller }) 12803 } 12804 } 12805} 12806``` 12807 12808### getUrl<sup>11+</sup> 12809 12810getUrl(): string 12811 12812获取下载的请求地址。 12813 12814**系统能力:** SystemCapability.Web.Webview.Core 12815 12816**返回值:** 12817 12818| 类型 | 说明 | 12819| ------ | ------------------------- | 12820| string | 下载的请求地址。 | 12821 12822**示例:** 12823 12824```ts 12825// xxx.ets 12826import { webview } from '@kit.ArkWeb'; 12827import { BusinessError } from '@kit.BasicServicesKit'; 12828 12829@Entry 12830@Component 12831struct WebComponent { 12832 controller: webview.WebviewController = new webview.WebviewController(); 12833 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12834 12835 build() { 12836 Column() { 12837 Button('setDownloadDelegate') 12838 .onClick(() => { 12839 try { 12840 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12841 console.log("will start a download, url:" + webDownloadItem.getUrl()); 12842 // 传入一个下载路径,并开始下载。 12843 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12844 }) 12845 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12846 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12847 }) 12848 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12849 console.log("download failed guid: " + webDownloadItem.getGuid()); 12850 }) 12851 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12852 console.log("download finish guid: " + webDownloadItem.getGuid()); 12853 }) 12854 this.controller.setDownloadDelegate(this.delegate); 12855 } catch (error) { 12856 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12857 } 12858 }) 12859 Button('startDownload') 12860 .onClick(() => { 12861 try { 12862 this.controller.startDownload('https://www.example.com'); 12863 } catch (error) { 12864 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12865 } 12866 }) 12867 Web({ src: 'www.example.com', controller: this.controller }) 12868 } 12869 } 12870} 12871``` 12872 12873### getSuggestedFileName<sup>11+</sup> 12874 12875getSuggestedFileName(): string 12876 12877获取下载的建议文件名。 12878 12879**系统能力:** SystemCapability.Web.Webview.Core 12880 12881**返回值:** 12882 12883| 类型 | 说明 | 12884| ------ | ------------------------- | 12885| string | 下载的建议文件名。 | 12886 12887**示例:** 12888 12889```ts 12890// xxx.ets 12891import { webview } from '@kit.ArkWeb'; 12892import { BusinessError } from '@kit.BasicServicesKit'; 12893 12894@Entry 12895@Component 12896struct WebComponent { 12897 controller: webview.WebviewController = new webview.WebviewController(); 12898 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12899 12900 build() { 12901 Column() { 12902 Button('setDownloadDelegate') 12903 .onClick(() => { 12904 try { 12905 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12906 console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName()); 12907 // 传入一个下载路径,并开始下载。 12908 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12909 }) 12910 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12911 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12912 }) 12913 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12914 console.log("download failed guid: " + webDownloadItem.getGuid()); 12915 }) 12916 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12917 console.log("download finish guid: " + webDownloadItem.getGuid()); 12918 }) 12919 this.controller.setDownloadDelegate(this.delegate); 12920 } catch (error) { 12921 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12922 } 12923 }) 12924 Button('startDownload') 12925 .onClick(() => { 12926 try { 12927 this.controller.startDownload('https://www.example.com'); 12928 } catch (error) { 12929 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12930 } 12931 }) 12932 Web({ src: 'www.example.com', controller: this.controller }) 12933 } 12934 } 12935} 12936``` 12937 12938### getReceivedBytes<sup>11+</sup> 12939 12940getReceivedBytes(): number 12941 12942获取已经接收的字节数。 12943 12944**系统能力:** SystemCapability.Web.Webview.Core 12945 12946**返回值:** 12947 12948| 类型 | 说明 | 12949| ------ | ------------------------- | 12950| number | 已经接收的字节数。 | 12951 12952**示例:** 12953 12954```ts 12955// xxx.ets 12956import { webview } from '@kit.ArkWeb'; 12957import { BusinessError } from '@kit.BasicServicesKit'; 12958 12959@Entry 12960@Component 12961struct WebComponent { 12962 controller: webview.WebviewController = new webview.WebviewController(); 12963 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12964 12965 build() { 12966 Column() { 12967 Button('setDownloadDelegate') 12968 .onClick(() => { 12969 try { 12970 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12971 console.log("will start a download."); 12972 // 传入一个下载路径,并开始下载。 12973 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12974 }) 12975 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12976 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12977 console.log("download update received bytes: " + webDownloadItem.getReceivedBytes()); 12978 }) 12979 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12980 console.log("download failed guid: " + webDownloadItem.getGuid()); 12981 }) 12982 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12983 console.log("download finish guid: " + webDownloadItem.getGuid()); 12984 }) 12985 this.controller.setDownloadDelegate(this.delegate); 12986 } catch (error) { 12987 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12988 } 12989 }) 12990 Button('startDownload') 12991 .onClick(() => { 12992 try { 12993 this.controller.startDownload('https://www.example.com'); 12994 } catch (error) { 12995 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12996 } 12997 }) 12998 Web({ src: 'www.example.com', controller: this.controller }) 12999 } 13000 } 13001} 13002``` 13003 13004### getFullPath<sup>11+</sup> 13005 13006getFullPath(): string 13007 13008获取下载文件在磁盘上的全路径。 13009 13010**系统能力:** SystemCapability.Web.Webview.Core 13011 13012**返回值:** 13013 13014| 类型 | 说明 | 13015| ------ | ------------------------- | 13016| string | 下载文件在磁盘上的全路径。 | 13017 13018**示例:** 13019 13020```ts 13021// xxx.ets 13022import { webview } from '@kit.ArkWeb'; 13023import { BusinessError } from '@kit.BasicServicesKit'; 13024 13025@Entry 13026@Component 13027struct WebComponent { 13028 controller: webview.WebviewController = new webview.WebviewController(); 13029 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13030 13031 build() { 13032 Column() { 13033 Button('setDownloadDelegate') 13034 .onClick(() => { 13035 try { 13036 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13037 console.log("will start a download."); 13038 // 传入一个下载路径,并开始下载。 13039 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13040 }) 13041 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13042 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13043 }) 13044 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13045 console.log("download failed guid: " + webDownloadItem.getGuid()); 13046 }) 13047 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13048 console.log("download finish guid: " + webDownloadItem.getGuid()); 13049 console.log("download finish full path: " + webDownloadItem.getFullPath()); 13050 }) 13051 this.controller.setDownloadDelegate(this.delegate); 13052 } catch (error) { 13053 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13054 } 13055 }) 13056 Button('startDownload') 13057 .onClick(() => { 13058 try { 13059 this.controller.startDownload('https://www.example.com'); 13060 } catch (error) { 13061 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13062 } 13063 }) 13064 Web({ src: 'www.example.com', controller: this.controller }) 13065 } 13066 } 13067} 13068``` 13069 13070### serialize<sup>11+</sup> 13071 13072serialize(): Uint8Array 13073 13074将失败的下载序列化到一个字节数组。 13075 13076**系统能力:** SystemCapability.Web.Webview.Core 13077 13078**返回值:** 13079 13080| 类型 | 说明 | 13081| ------ | ------------------------- | 13082| Uint8Array | 失败的下载序列化后的字节数组。 | 13083 13084**示例:** 13085 13086```ts 13087// xxx.ets 13088import { webview } from '@kit.ArkWeb'; 13089import { BusinessError } from '@kit.BasicServicesKit'; 13090 13091@Entry 13092@Component 13093struct WebComponent { 13094 controller: webview.WebviewController = new webview.WebviewController(); 13095 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13096 failedData: Uint8Array = new Uint8Array(); 13097 13098 build() { 13099 Column() { 13100 Button('setDownloadDelegate') 13101 .onClick(() => { 13102 try { 13103 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13104 console.log("will start a download."); 13105 // 传入一个下载路径,并开始下载。 13106 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13107 }) 13108 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13109 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13110 }) 13111 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13112 console.log("download failed guid: " + webDownloadItem.getGuid()); 13113 // 序列化失败的下载到一个字节数组。 13114 this.failedData = webDownloadItem.serialize(); 13115 }) 13116 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13117 console.log("download finish guid: " + webDownloadItem.getGuid()); 13118 }) 13119 this.controller.setDownloadDelegate(this.delegate); 13120 } catch (error) { 13121 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13122 } 13123 }) 13124 Button('startDownload') 13125 .onClick(() => { 13126 try { 13127 this.controller.startDownload('https://www.example.com'); 13128 } catch (error) { 13129 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13130 } 13131 }) 13132 Web({ src: 'www.example.com', controller: this.controller }) 13133 } 13134 } 13135} 13136``` 13137 13138### deserialize<sup>11+</sup> 13139 13140static deserialize(serializedData: Uint8Array): WebDownloadItem 13141 13142将序列化后的字节数组反序列化为一个WebDownloadItem对象。 13143 13144**系统能力:** SystemCapability.Web.Webview.Core 13145 13146**参数:** 13147 13148| 参数名 | 类型 | 必填 | 说明 | 13149| ------------------ | ------- | ---- | ------------- | 13150| serializedData | Uint8Array | 是 | 序列化后的下载。| 13151 13152**返回值:** 13153 13154| 类型 | 说明 | 13155| ------ | ------------------------- | 13156| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 | 13157 13158**错误码:** 13159 13160以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13161 13162| 错误码ID | 错误信息 | 13163| -------- | ------------------------------------------------------------ | 13164| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13165 13166**示例:** 13167 13168```ts 13169// xxx.ets 13170import { webview } from '@kit.ArkWeb'; 13171import { BusinessError } from '@kit.BasicServicesKit'; 13172 13173@Entry 13174@Component 13175struct WebComponent { 13176 controller: webview.WebviewController = new webview.WebviewController(); 13177 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13178 failedData: Uint8Array = new Uint8Array(); 13179 13180 build() { 13181 Column() { 13182 Button('setDownloadDelegate') 13183 .onClick(() => { 13184 try { 13185 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13186 console.log("will start a download."); 13187 // 传入一个下载路径,并开始下载。 13188 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13189 }) 13190 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13191 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13192 }) 13193 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13194 console.log("download failed guid: " + webDownloadItem.getGuid()); 13195 // 序列化失败的下载到一个字节数组。 13196 this.failedData = webDownloadItem.serialize(); 13197 }) 13198 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13199 console.log("download finish guid: " + webDownloadItem.getGuid()); 13200 }) 13201 this.controller.setDownloadDelegate(this.delegate); 13202 } catch (error) { 13203 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13204 } 13205 }) 13206 Button('startDownload') 13207 .onClick(() => { 13208 try { 13209 this.controller.startDownload('https://www.example.com'); 13210 } catch (error) { 13211 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13212 } 13213 }) 13214 Button('resumeDownload') 13215 .onClick(() => { 13216 try { 13217 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13218 } catch (error) { 13219 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13220 } 13221 }) 13222 Web({ src: 'www.example.com', controller: this.controller }) 13223 } 13224 } 13225} 13226``` 13227 13228### start<sup>11+</sup> 13229 13230start(downloadPath: string): void 13231 13232开始一个下载,参数为下载文件的磁盘存储路径(包含文件名)。该接口需要在WebDownloadDelegate的onBeforeDownload回调中使用,如果在WebDownloadDelegate的onBeforeDownload中不调用start('xxx')该下载任务会一直处于PENDING状态。 13233 13234**系统能力:** SystemCapability.Web.Webview.Core 13235 13236**参数:** 13237 13238| 参数名 | 类型 | 必填 | 说明 | 13239| ------ | ---------------------- | ---- | ------------------------------| 13240| downloadPath | string | 是 | 下载文件的路径(包含文件名)。| 13241 13242**错误码:** 13243 13244以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13245 13246| 错误码ID | 错误信息 | 13247| -------- | ------------------------------------------------------------ | 13248| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13249 13250**示例:** 13251 13252```ts 13253// xxx.ets 13254import { webview } from '@kit.ArkWeb'; 13255import { BusinessError } from '@kit.BasicServicesKit'; 13256 13257@Entry 13258@Component 13259struct WebComponent { 13260 controller: webview.WebviewController = new webview.WebviewController(); 13261 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13262 failedData: Uint8Array = new Uint8Array(); 13263 13264 build() { 13265 Column() { 13266 Button('setDownloadDelegate') 13267 .onClick(() => { 13268 try { 13269 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13270 console.log("will start a download."); 13271 // 传入一个下载路径,并开始下载。 13272 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13273 }) 13274 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13275 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13276 }) 13277 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13278 console.log("download failed guid: " + webDownloadItem.getGuid()); 13279 // 序列化失败的下载到一个字节数组。 13280 this.failedData = webDownloadItem.serialize(); 13281 }) 13282 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13283 console.log("download finish guid: " + webDownloadItem.getGuid()); 13284 }) 13285 this.controller.setDownloadDelegate(this.delegate); 13286 } catch (error) { 13287 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13288 } 13289 }) 13290 Button('startDownload') 13291 .onClick(() => { 13292 try { 13293 this.controller.startDownload('https://www.example.com'); 13294 } catch (error) { 13295 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13296 } 13297 }) 13298 Button('resumeDownload') 13299 .onClick(() => { 13300 try { 13301 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13302 } catch (error) { 13303 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13304 } 13305 }) 13306 Web({ src: 'www.example.com', controller: this.controller }) 13307 } 13308 } 13309} 13310``` 13311 13312### cancel<sup>11+</sup> 13313 13314cancel(): void 13315 13316取消一个正在下载的下载任务。 13317 13318**系统能力:** SystemCapability.Web.Webview.Core 13319 13320**示例:** 13321 13322```ts 13323// xxx.ets 13324import { webview } from '@kit.ArkWeb'; 13325import { BusinessError } from '@kit.BasicServicesKit'; 13326 13327@Entry 13328@Component 13329struct WebComponent { 13330 controller: webview.WebviewController = new webview.WebviewController(); 13331 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13332 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13333 failedData: Uint8Array = new Uint8Array(); 13334 13335 build() { 13336 Column() { 13337 Button('setDownloadDelegate') 13338 .onClick(() => { 13339 try { 13340 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13341 console.log("will start a download."); 13342 // 传入一个下载路径,并开始下载。 13343 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13344 }) 13345 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13346 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13347 this.download = webDownloadItem; 13348 }) 13349 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13350 console.log("download failed guid: " + webDownloadItem.getGuid()); 13351 // 序列化失败的下载到一个字节数组。 13352 this.failedData = webDownloadItem.serialize(); 13353 }) 13354 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13355 console.log("download finish guid: " + webDownloadItem.getGuid()); 13356 }) 13357 this.controller.setDownloadDelegate(this.delegate); 13358 } catch (error) { 13359 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13360 } 13361 }) 13362 Button('startDownload') 13363 .onClick(() => { 13364 try { 13365 this.controller.startDownload('https://www.example.com'); 13366 } catch (error) { 13367 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13368 } 13369 }) 13370 Button('resumeDownload') 13371 .onClick(() => { 13372 try { 13373 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13374 } catch (error) { 13375 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13376 } 13377 }) 13378 Button('cancel') 13379 .onClick(() => { 13380 try { 13381 this.download.cancel(); 13382 } catch (error) { 13383 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13384 } 13385 }) 13386 Web({ src: 'www.example.com', controller: this.controller }) 13387 } 13388 } 13389} 13390``` 13391 13392### pause<sup>11+</sup> 13393 13394pause(): void 13395 13396暂停一个正在下载的下载任务。 13397 13398**系统能力:** SystemCapability.Web.Webview.Core 13399 13400**错误码:** 13401 13402以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13403 13404| 错误码ID | 错误信息 | 13405| -------- | ------------------------------------------------------------ | 13406| 17100019 | The download task is not started yet. | 13407 13408**示例:** 13409 13410```ts 13411// xxx.ets 13412import { webview } from '@kit.ArkWeb'; 13413import { BusinessError } from '@kit.BasicServicesKit'; 13414 13415@Entry 13416@Component 13417struct WebComponent { 13418 controller: webview.WebviewController = new webview.WebviewController(); 13419 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13420 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13421 failedData: Uint8Array = new Uint8Array(); 13422 13423 build() { 13424 Column() { 13425 Button('setDownloadDelegate') 13426 .onClick(() => { 13427 try { 13428 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13429 console.log("will start a download."); 13430 // 传入一个下载路径,并开始下载。 13431 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13432 }) 13433 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13434 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13435 this.download = webDownloadItem; 13436 }) 13437 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13438 console.log("download failed guid: " + webDownloadItem.getGuid()); 13439 // 序列化失败的下载到一个字节数组。 13440 this.failedData = webDownloadItem.serialize(); 13441 }) 13442 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13443 console.log("download finish guid: " + webDownloadItem.getGuid()); 13444 }) 13445 this.controller.setDownloadDelegate(this.delegate); 13446 } catch (error) { 13447 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13448 } 13449 }) 13450 Button('startDownload') 13451 .onClick(() => { 13452 try { 13453 this.controller.startDownload('https://www.example.com'); 13454 } catch (error) { 13455 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13456 } 13457 }) 13458 Button('resumeDownload') 13459 .onClick(() => { 13460 try { 13461 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13462 } catch (error) { 13463 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13464 } 13465 }) 13466 Button('cancel') 13467 .onClick(() => { 13468 try { 13469 this.download.cancel(); 13470 } catch (error) { 13471 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13472 } 13473 }) 13474 Button('pause') 13475 .onClick(() => { 13476 try { 13477 this.download.pause(); 13478 } catch (error) { 13479 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13480 } 13481 }) 13482 Web({ src: 'www.example.com', controller: this.controller }) 13483 } 13484 } 13485} 13486``` 13487 13488### resume<sup>11+</sup> 13489 13490resume(): void 13491 13492恢复一个暂停的下载任务。 13493 13494**系统能力:** SystemCapability.Web.Webview.Core 13495 13496**错误码:** 13497 13498以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13499 13500| 错误码ID | 错误信息 | 13501| -------- | ------------------------------------------------------------ | 13502| 17100016 | The download task is not paused. | 13503 13504**示例:** 13505 13506```ts 13507// xxx.ets 13508import { webview } from '@kit.ArkWeb'; 13509import { BusinessError } from '@kit.BasicServicesKit'; 13510 13511@Entry 13512@Component 13513struct WebComponent { 13514 controller: webview.WebviewController = new webview.WebviewController(); 13515 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13516 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13517 failedData: Uint8Array = new Uint8Array(); 13518 13519 build() { 13520 Column() { 13521 Button('setDownloadDelegate') 13522 .onClick(() => { 13523 try { 13524 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13525 console.log("will start a download."); 13526 // 传入一个下载路径,并开始下载。 13527 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13528 }) 13529 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13530 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13531 this.download = webDownloadItem; 13532 }) 13533 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13534 console.log("download failed guid: " + webDownloadItem.getGuid()); 13535 // 序列化失败的下载到一个字节数组。 13536 this.failedData = webDownloadItem.serialize(); 13537 }) 13538 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13539 console.log("download finish guid: " + webDownloadItem.getGuid()); 13540 }) 13541 this.controller.setDownloadDelegate(this.delegate); 13542 } catch (error) { 13543 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13544 } 13545 }) 13546 Button('startDownload') 13547 .onClick(() => { 13548 try { 13549 this.controller.startDownload('https://www.example.com'); 13550 } catch (error) { 13551 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13552 } 13553 }) 13554 Button('resumeDownload') 13555 .onClick(() => { 13556 try { 13557 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13558 } catch (error) { 13559 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13560 } 13561 }) 13562 Button('cancel') 13563 .onClick(() => { 13564 try { 13565 this.download.cancel(); 13566 } catch (error) { 13567 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13568 } 13569 }) 13570 Button('pause') 13571 .onClick(() => { 13572 try { 13573 this.download.pause(); 13574 } catch (error) { 13575 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13576 } 13577 }) 13578 Button('resume') 13579 .onClick(() => { 13580 try { 13581 this.download.resume(); 13582 } catch (error) { 13583 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13584 } 13585 }) 13586 Web({ src: 'www.example.com', controller: this.controller }) 13587 } 13588 } 13589} 13590``` 13591 13592## WebDownloadDelegate<sup>11+</sup> 13593 13594 下载任务的状态会通过该类的回调接口通知给用户。 13595 13596### onBeforeDownload<sup>11+</sup> 13597 13598onBeforeDownload(callback: Callback\<WebDownloadItem>): void 13599 13600下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。 13601 13602**系统能力:** SystemCapability.Web.Webview.Core 13603 13604**参数:** 13605 13606| 参数名 | 类型 | 必填 | 说明 | 13607| ------- | ------ | ---- | :------------- | 13608| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 触发下载的回调。 | 13609 13610**示例:** 13611 13612```ts 13613// xxx.ets 13614import { webview } from '@kit.ArkWeb'; 13615import { BusinessError } from '@kit.BasicServicesKit'; 13616 13617@Entry 13618@Component 13619struct WebComponent { 13620 controller: webview.WebviewController = new webview.WebviewController(); 13621 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13622 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13623 failedData: Uint8Array = new Uint8Array(); 13624 13625 build() { 13626 Column() { 13627 Button('setDownloadDelegate') 13628 .onClick(() => { 13629 try { 13630 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13631 console.log("will start a download."); 13632 // 传入一个下载路径,并开始下载。 13633 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13634 }) 13635 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13636 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13637 this.download = webDownloadItem; 13638 }) 13639 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13640 console.log("download failed guid: " + webDownloadItem.getGuid()); 13641 // 序列化失败的下载到一个字节数组。 13642 this.failedData = webDownloadItem.serialize(); 13643 }) 13644 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13645 console.log("download finish guid: " + webDownloadItem.getGuid()); 13646 }) 13647 this.controller.setDownloadDelegate(this.delegate); 13648 } catch (error) { 13649 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13650 } 13651 }) 13652 Button('startDownload') 13653 .onClick(() => { 13654 try { 13655 this.controller.startDownload('https://www.example.com'); 13656 } catch (error) { 13657 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13658 } 13659 }) 13660 Button('resumeDownload') 13661 .onClick(() => { 13662 try { 13663 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13664 } catch (error) { 13665 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13666 } 13667 }) 13668 Button('cancel') 13669 .onClick(() => { 13670 try { 13671 this.download.cancel(); 13672 } catch (error) { 13673 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13674 } 13675 }) 13676 Button('pause') 13677 .onClick(() => { 13678 try { 13679 this.download.pause(); 13680 } catch (error) { 13681 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13682 } 13683 }) 13684 Button('resume') 13685 .onClick(() => { 13686 try { 13687 this.download.resume(); 13688 } catch (error) { 13689 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13690 } 13691 }) 13692 Web({ src: 'www.example.com', controller: this.controller }) 13693 } 13694 } 13695} 13696``` 13697 13698### onDownloadUpdated<sup>11+</sup> 13699 13700onDownloadUpdated(callback: Callback\<WebDownloadItem>): void 13701 13702下载过程中的回调,通过该回调的参数可以了解下载进度等信息。 13703 13704**系统能力:** SystemCapability.Web.Webview.Core 13705 13706**参数:** 13707 13708| 参数名 | 类型 | 必填 | 说明 | 13709| ------- | ------ | ---- | :------------- | 13710| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已更新。 | 13711 13712**示例:** 13713 13714```ts 13715// xxx.ets 13716import { webview } from '@kit.ArkWeb'; 13717import { BusinessError } from '@kit.BasicServicesKit'; 13718 13719@Entry 13720@Component 13721struct WebComponent { 13722 controller: webview.WebviewController = new webview.WebviewController(); 13723 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13724 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13725 failedData: Uint8Array = new Uint8Array(); 13726 13727 build() { 13728 Column() { 13729 Button('setDownloadDelegate') 13730 .onClick(() => { 13731 try { 13732 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13733 console.log("will start a download."); 13734 // 传入一个下载路径,并开始下载。 13735 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13736 }) 13737 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13738 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13739 this.download = webDownloadItem; 13740 }) 13741 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13742 console.log("download failed guid: " + webDownloadItem.getGuid()); 13743 // 序列化失败的下载到一个字节数组。 13744 this.failedData = webDownloadItem.serialize(); 13745 }) 13746 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13747 console.log("download finish guid: " + webDownloadItem.getGuid()); 13748 }) 13749 this.controller.setDownloadDelegate(this.delegate); 13750 } catch (error) { 13751 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13752 } 13753 }) 13754 Button('startDownload') 13755 .onClick(() => { 13756 try { 13757 this.controller.startDownload('https://www.example.com'); 13758 } catch (error) { 13759 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13760 } 13761 }) 13762 Button('resumeDownload') 13763 .onClick(() => { 13764 try { 13765 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13766 } catch (error) { 13767 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13768 } 13769 }) 13770 Button('cancel') 13771 .onClick(() => { 13772 try { 13773 this.download.cancel(); 13774 } catch (error) { 13775 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13776 } 13777 }) 13778 Button('pause') 13779 .onClick(() => { 13780 try { 13781 this.download.pause(); 13782 } catch (error) { 13783 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13784 } 13785 }) 13786 Button('resume') 13787 .onClick(() => { 13788 try { 13789 this.download.resume(); 13790 } catch (error) { 13791 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13792 } 13793 }) 13794 Web({ src: 'www.example.com', controller: this.controller }) 13795 } 13796 } 13797} 13798``` 13799 13800### onDownloadFinish<sup>11+</sup> 13801 13802onDownloadFinish(callback: Callback\<WebDownloadItem>): void 13803 13804下载完成的通知。 13805 13806**系统能力:** SystemCapability.Web.Webview.Core 13807 13808**参数:** 13809 13810| 参数名 | 类型 | 必填 | 说明 | 13811| ------- | ------ | ---- | :------------- | 13812| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已完成。 | 13813 13814**示例:** 13815 13816```ts 13817// xxx.ets 13818import { webview } from '@kit.ArkWeb'; 13819import { BusinessError } from '@kit.BasicServicesKit'; 13820 13821@Entry 13822@Component 13823struct WebComponent { 13824 controller: webview.WebviewController = new webview.WebviewController(); 13825 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13826 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13827 failedData: Uint8Array = new Uint8Array(); 13828 13829 build() { 13830 Column() { 13831 Button('setDownloadDelegate') 13832 .onClick(() => { 13833 try { 13834 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13835 console.log("will start a download."); 13836 // 传入一个下载路径,并开始下载。 13837 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13838 }) 13839 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13840 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13841 this.download = webDownloadItem; 13842 }) 13843 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13844 console.log("download failed guid: " + webDownloadItem.getGuid()); 13845 // 序列化失败的下载到一个字节数组。 13846 this.failedData = webDownloadItem.serialize(); 13847 }) 13848 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13849 console.log("download finish guid: " + webDownloadItem.getGuid()); 13850 }) 13851 this.controller.setDownloadDelegate(this.delegate); 13852 } catch (error) { 13853 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13854 } 13855 }) 13856 Button('startDownload') 13857 .onClick(() => { 13858 try { 13859 this.controller.startDownload('https://www.example.com'); 13860 } catch (error) { 13861 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13862 } 13863 }) 13864 Button('resumeDownload') 13865 .onClick(() => { 13866 try { 13867 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13868 } catch (error) { 13869 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13870 } 13871 }) 13872 Button('cancel') 13873 .onClick(() => { 13874 try { 13875 this.download.cancel(); 13876 } catch (error) { 13877 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13878 } 13879 }) 13880 Button('pause') 13881 .onClick(() => { 13882 try { 13883 this.download.pause(); 13884 } catch (error) { 13885 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13886 } 13887 }) 13888 Button('resume') 13889 .onClick(() => { 13890 try { 13891 this.download.resume(); 13892 } catch (error) { 13893 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13894 } 13895 }) 13896 Web({ src: 'www.example.com', controller: this.controller }) 13897 } 13898 } 13899} 13900``` 13901 13902### onDownloadFailed<sup>11+</sup> 13903 13904onDownloadFailed(callback: Callback\<WebDownloadItem>): void 13905 13906下载失败的通知。 13907 13908**系统能力:** SystemCapability.Web.Webview.Core 13909 13910**参数:** 13911 13912| 参数名 | 类型 | 必填 | 说明 | 13913| ------- | ------ | ---- | :------------- | 13914| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载回调失败。 | 13915 13916**示例:** 13917 13918```ts 13919// xxx.ets 13920import { webview } from '@kit.ArkWeb'; 13921import { BusinessError } from '@kit.BasicServicesKit'; 13922 13923@Entry 13924@Component 13925struct WebComponent { 13926 controller: webview.WebviewController = new webview.WebviewController(); 13927 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13928 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13929 failedData: Uint8Array = new Uint8Array(); 13930 13931 build() { 13932 Column() { 13933 Button('setDownloadDelegate') 13934 .onClick(() => { 13935 try { 13936 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13937 console.log("will start a download."); 13938 // 传入一个下载路径,并开始下载。 13939 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13940 }) 13941 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13942 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13943 this.download = webDownloadItem; 13944 }) 13945 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13946 console.log("download failed guid: " + webDownloadItem.getGuid()); 13947 // 序列化失败的下载到一个字节数组。 13948 this.failedData = webDownloadItem.serialize(); 13949 }) 13950 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13951 console.log("download finish guid: " + webDownloadItem.getGuid()); 13952 }) 13953 this.controller.setDownloadDelegate(this.delegate); 13954 } catch (error) { 13955 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13956 } 13957 }) 13958 Button('startDownload') 13959 .onClick(() => { 13960 try { 13961 this.controller.startDownload('https://www.example.com'); 13962 } catch (error) { 13963 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13964 } 13965 }) 13966 Button('resumeDownload') 13967 .onClick(() => { 13968 try { 13969 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13970 } catch (error) { 13971 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13972 } 13973 }) 13974 Button('cancel') 13975 .onClick(() => { 13976 try { 13977 this.download.cancel(); 13978 } catch (error) { 13979 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13980 } 13981 }) 13982 Button('pause') 13983 .onClick(() => { 13984 try { 13985 this.download.pause(); 13986 } catch (error) { 13987 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13988 } 13989 }) 13990 Button('resume') 13991 .onClick(() => { 13992 try { 13993 this.download.resume(); 13994 } catch (error) { 13995 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13996 } 13997 }) 13998 Web({ src: 'www.example.com', controller: this.controller }) 13999 } 14000 } 14001} 14002``` 14003 14004## WebDownloadManager<sup>11+</sup> 14005 14006可以通过该类提供的接口来恢复失败的下载任务。 14007 14008### setDownloadDelegate<sup>11+</sup> 14009 14010static setDownloadDelegate(delegate: WebDownloadDelegate): void 14011 14012设置用于接收从WebDownloadManager触发的下载进度的委托。 14013 14014**系统能力:** SystemCapability.Web.Webview.Core 14015 14016**参数:** 14017 14018| 参数名 | 类型 | 必填 | 说明 | 14019| ---------------| ------- | ---- | ------------- | 14020| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 14021 14022**示例:** 14023 14024```ts 14025// xxx.ets 14026import { webview } from '@kit.ArkWeb'; 14027import { BusinessError } from '@kit.BasicServicesKit'; 14028 14029@Entry 14030@Component 14031struct WebComponent { 14032 controller: webview.WebviewController = new webview.WebviewController(); 14033 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14034 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14035 failedData: Uint8Array = new Uint8Array(); 14036 14037 build() { 14038 Column() { 14039 Button('setDownloadDelegate') 14040 .onClick(() => { 14041 try { 14042 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14043 console.log("will start a download."); 14044 // 传入一个下载路径,并开始下载。 14045 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14046 }) 14047 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14048 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14049 this.download = webDownloadItem; 14050 }) 14051 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14052 console.log("download failed guid: " + webDownloadItem.getGuid()); 14053 // 序列化失败的下载到一个字节数组。 14054 this.failedData = webDownloadItem.serialize(); 14055 }) 14056 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14057 console.log("download finish guid: " + webDownloadItem.getGuid()); 14058 }) 14059 this.controller.setDownloadDelegate(this.delegate); 14060 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14061 } catch (error) { 14062 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14063 } 14064 }) 14065 Button('startDownload') 14066 .onClick(() => { 14067 try { 14068 this.controller.startDownload('https://www.example.com'); 14069 } catch (error) { 14070 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14071 } 14072 }) 14073 Button('resumeDownload') 14074 .onClick(() => { 14075 try { 14076 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14077 } catch (error) { 14078 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14079 } 14080 }) 14081 Button('cancel') 14082 .onClick(() => { 14083 try { 14084 this.download.cancel(); 14085 } catch (error) { 14086 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14087 } 14088 }) 14089 Button('pause') 14090 .onClick(() => { 14091 try { 14092 this.download.pause(); 14093 } catch (error) { 14094 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14095 } 14096 }) 14097 Button('resume') 14098 .onClick(() => { 14099 try { 14100 this.download.resume(); 14101 } catch (error) { 14102 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14103 } 14104 }) 14105 Web({ src: 'www.example.com', controller: this.controller }) 14106 } 14107 } 14108} 14109``` 14110 14111### resumeDownload<sup>11+</sup> 14112 14113static resumeDownload(webDownloadItem: WebDownloadItem): void 14114 14115恢复一个失败的下载任务。 14116 14117**系统能力:** SystemCapability.Web.Webview.Core 14118 14119**参数:** 14120 14121| 参数名 | 类型 | 必填 | 说明 | 14122| ---------------| ------- | ---- | ------------- | 14123| webDownloadItem | [WebDownloadItem](#webdownloaditem11) | 是 | 待恢复的下载任务。 | 14124 14125**错误码:** 14126 14127以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14128 14129| 错误码ID | 错误信息 | 14130| -------- | ------------------------------------- | 14131| 17100018 | No WebDownloadDelegate has been set yet. | 14132 14133**示例:** 14134 14135```ts 14136// xxx.ets 14137import { webview } from '@kit.ArkWeb'; 14138import { BusinessError } from '@kit.BasicServicesKit'; 14139 14140@Entry 14141@Component 14142struct WebComponent { 14143 controller: webview.WebviewController = new webview.WebviewController(); 14144 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14145 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14146 failedData: Uint8Array = new Uint8Array(); 14147 14148 build() { 14149 Column() { 14150 Button('setDownloadDelegate') 14151 .onClick(() => { 14152 try { 14153 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14154 console.log("will start a download."); 14155 // 传入一个下载路径,并开始下载。 14156 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14157 }) 14158 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14159 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14160 this.download = webDownloadItem; 14161 }) 14162 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14163 console.log("download failed guid: " + webDownloadItem.getGuid()); 14164 // 序列化失败的下载到一个字节数组。 14165 this.failedData = webDownloadItem.serialize(); 14166 }) 14167 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14168 console.log("download finish guid: " + webDownloadItem.getGuid()); 14169 }) 14170 this.controller.setDownloadDelegate(this.delegate); 14171 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14172 } catch (error) { 14173 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14174 } 14175 }) 14176 Button('startDownload') 14177 .onClick(() => { 14178 try { 14179 this.controller.startDownload('https://www.example.com'); 14180 } catch (error) { 14181 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14182 } 14183 }) 14184 Button('resumeDownload') 14185 .onClick(() => { 14186 try { 14187 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14188 } catch (error) { 14189 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14190 } 14191 }) 14192 Button('cancel') 14193 .onClick(() => { 14194 try { 14195 this.download.cancel(); 14196 } catch (error) { 14197 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14198 } 14199 }) 14200 Button('pause') 14201 .onClick(() => { 14202 try { 14203 this.download.pause(); 14204 } catch (error) { 14205 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14206 } 14207 }) 14208 Button('resume') 14209 .onClick(() => { 14210 try { 14211 this.download.resume(); 14212 } catch (error) { 14213 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14214 } 14215 }) 14216 Web({ src: 'www.example.com', controller: this.controller }) 14217 } 14218 } 14219} 14220``` 14221 14222## WebHttpBodyStream<sup>12+</sup> 14223 14224POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。 14225 14226### initialize<sup>12+</sup> 14227 14228initialize(): Promise\<void\> 14229 14230初始化WebHttpBodyStream。 14231 14232**系统能力:** SystemCapability.Web.Webview.Core 14233 14234**返回值:** 14235 14236| 类型 | 说明 | 14237| ------ | ------------------------- | 14238| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 | 14239 14240**错误码:** 14241 14242以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14243 14244| 错误码ID | 错误信息 | 14245| -------- | ------------------------------------- | 14246| 17100022 | Failed to initialize the HTTP body stream. | 14247 14248**示例:** 14249 14250```ts 14251// xxx.ets 14252import { webview } from '@kit.ArkWeb'; 14253import { BusinessError } from '@kit.BasicServicesKit'; 14254import { buffer } from '@kit.ArkTS'; 14255import { WebNetErrorList } from '@ohos.web.netErrorList' 14256 14257@Entry 14258@Component 14259struct WebComponent { 14260 controller: webview.WebviewController = new webview.WebviewController(); 14261 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 14262 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 14263 14264 build() { 14265 Column() { 14266 Button('postUrl') 14267 .onClick(() => { 14268 try { 14269 let postData = buffer.from(this.htmlData); 14270 this.controller.postUrl('https://www.example.com', postData.buffer); 14271 } catch (error) { 14272 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14273 } 14274 }) 14275 Web({ src: 'https://www.example.com', controller: this.controller }) 14276 .onControllerAttached(() => { 14277 try { 14278 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 14279 console.log("[schemeHandler] onRequestStart"); 14280 try { 14281 let stream = request.getHttpBodyStream(); 14282 if (stream) { 14283 stream.initialize().then(() => { 14284 if (!stream) { 14285 return; 14286 } 14287 console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize()); 14288 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 14289 console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked()); 14290 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 14291 console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory()); 14292 stream.read(stream.getSize()).then((buffer) => { 14293 if (!stream) { 14294 return; 14295 } 14296 console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength); 14297 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 14298 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 14299 }).catch((error: BusinessError) => { 14300 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 14301 }) 14302 }).catch((error: BusinessError) => { 14303 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 14304 }) 14305 } else { 14306 console.log("[schemeHandler] onRequestStart has no http body stream"); 14307 } 14308 } catch (error) { 14309 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14310 } 14311 14312 return false; 14313 }) 14314 14315 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 14316 console.log("[schemeHandler] onRequestStop"); 14317 }); 14318 14319 this.controller.setWebSchemeHandler('https', this.schemeHandler); 14320 } catch (error) { 14321 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14322 } 14323 }) 14324 .javaScriptAccess(true) 14325 .domStorageAccess(true) 14326 } 14327 } 14328} 14329 14330``` 14331 14332### read<sup>12+</sup> 14333 14334read(size: number): Promise\<ArrayBuffer\> 14335 14336读取WebHttpBodyStream中的数据。 14337 14338**系统能力:** SystemCapability.Web.Webview.Core 14339 14340**参数:** 14341 14342| 参数名 | 类型 | 必填 | 说明 | 14343| --------| ------- | ---- | ---------------------------| 14344| size | number | 是 | 读取WebHttpBodyStream中的字节数。 | 14345 14346**返回值:** 14347 14348| 类型 | 说明 | 14349| ------ | ------------------------- | 14350| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 | 14351 14352**错误码:** 14353 14354以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14355 14356| 错误码ID | 错误信息 | 14357| -------- | ------------------------------------- | 14358| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 14359 14360**示例:** 14361 14362完整示例代码参考[initialize](#initialize12)。 14363 14364### getSize<sup>12+</sup> 14365 14366getSize(): number 14367 14368获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。 14369 14370**系统能力:** SystemCapability.Web.Webview.Core 14371 14372**返回值:** 14373 14374| 类型 | 说明 | 14375| ------ | ------------------------- | 14376| number | 获取WebHttpBodyStream中的数据大小。 | 14377 14378**示例:** 14379 14380完整示例代码参考[initialize](#initialize12)。 14381 14382### getPosition<sup>12+</sup> 14383 14384getPosition(): number 14385 14386读取WebHttpBodyStream中当前的读取位置。 14387 14388**系统能力:** SystemCapability.Web.Webview.Core 14389 14390**返回值:** 14391 14392| 类型 | 说明 | 14393| ------ | ------------------------- | 14394| number | WebHttpBodyStream中当前的读取位置。 | 14395 14396**示例:** 14397 14398完整示例代码参考[initialize](#initialize12)。 14399 14400### isChunked<sup>12+</sup> 14401 14402isChunked(): boolean 14403 14404WebHttpBodyStream是否采用分块传输。 14405 14406**系统能力:** SystemCapability.Web.Webview.Core 14407 14408**返回值:** 14409 14410| 类型 | 说明 | 14411| ------ | ------------------------- | 14412| boolean | WebHttpBodyStream是否采用分块传输。 | 14413 14414**示例:** 14415 14416完整示例代码参考[initialize](#initialize12)。 14417 14418### isEof<sup>12+</sup> 14419 14420isEof(): boolean 14421 14422判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。 14423 14424**系统能力:** SystemCapability.Web.Webview.Core 14425 14426**返回值:** 14427 14428| 类型 | 说明 | 14429| ------ | ------------------------- | 14430| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 | 14431 14432**示例:** 14433 14434完整示例代码参考[initialize](#initialize12)。 14435 14436### isInMemory<sup>12+</sup> 14437 14438isInMemory(): boolean 14439 14440判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。 14441 14442**系统能力:** SystemCapability.Web.Webview.Core 14443 14444**返回值:** 14445 14446| 类型 | 说明 | 14447| ------ | ------------------------- | 14448| boolean | WebHttpBodyStream中的上传数据是否在内存中。 | 14449 14450**示例:** 14451 14452完整示例代码参考[initialize](#initialize12)。 14453 14454## WebSchemeHandlerRequest<sup>12+</sup> 14455 14456通过WebSchemeHandler拦截到的请求。 14457 14458### getHeader<sup>12+</sup> 14459 14460getHeader(): Array\<WebHeader\> 14461 14462获取资源请求头信息。 14463 14464**系统能力:** SystemCapability.Web.Webview.Core 14465 14466**返回值:** 14467 14468| 类型 | 说明 | 14469| -------------------------- | ---------- | 14470| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 | 14471 14472**示例:** 14473 14474完整示例代码参考[onRequestStart](#onrequeststart12)。 14475 14476### getRequestUrl<sup>12+</sup> 14477 14478getRequestUrl(): string 14479 14480获取资源请求的URL信息。 14481 14482**系统能力:** SystemCapability.Web.Webview.Core 14483 14484**返回值:** 14485 14486| 类型 | 说明 | 14487| ------ | ------------- | 14488| string | 返回资源请求的URL信息。 | 14489 14490**示例:** 14491 14492完整示例代码参考[onRequestStart](#onrequeststart12)。 14493 14494### getRequestMethod<sup>12+</sup> 14495 14496getRequestMethod(): string 14497 14498获取请求方法。 14499 14500**系统能力:** SystemCapability.Web.Webview.Core 14501 14502**返回值:** 14503 14504| 类型 | 说明 | 14505| ------ | ------------- | 14506| string | 返回请求方法。 | 14507 14508**示例:** 14509 14510完整示例代码参考[onRequestStart](#onrequeststart12)。 14511 14512### getReferrer<sup>12+</sup> 14513 14514getReferrer(): string 14515 14516获取referrer。 14517 14518**系统能力:** SystemCapability.Web.Webview.Core 14519 14520**返回值:** 14521 14522| 类型 | 说明 | 14523| ------ | ------------- | 14524| string | 获取到的referrer。 | 14525 14526**示例:** 14527 14528完整示例代码参考[onRequestStart](#onrequeststart12)。 14529 14530### isMainFrame<sup>12+</sup> 14531 14532isMainFrame(): boolean 14533 14534判断资源请求是否为主frame。 14535 14536**系统能力:** SystemCapability.Web.Webview.Core 14537 14538**返回值:** 14539 14540| 类型 | 说明 | 14541| ------ | ------------- | 14542| boolean | 判断资源请求是否为主frame。 | 14543 14544**示例:** 14545 14546完整示例代码参考[onRequestStart](#onrequeststart12)。 14547 14548### hasGesture<sup>12+</sup> 14549 14550hasGesture(): boolean 14551 14552获取资源请求是否与手势(如点击)相关联。 14553 14554**系统能力:** SystemCapability.Web.Webview.Core 14555 14556**返回值:** 14557 14558| 类型 | 说明 | 14559| ------ | ------------- | 14560| boolean | 返回资源请求是否与手势(如点击)相关联。 | 14561 14562**示例:** 14563 14564完整示例代码参考[onRequestStart](#onrequeststart12)。 14565 14566### getHttpBodyStream<sup>12+</sup> 14567 14568getHttpBodyStream(): WebHttpBodyStream | null 14569 14570获取资源请求中的WebHttpBodyStream。 14571 14572**系统能力:** SystemCapability.Web.Webview.Core 14573 14574**返回值:** 14575 14576| 类型 | 说明 | 14577| ------ | ------------- | 14578| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 | 14579 14580**示例:** 14581 14582完整示例代码参考[onRequestStart](#onrequeststart12)。 14583 14584### getRequestResourceType<sup>12+</sup> 14585 14586getRequestResourceType(): WebResourceType 14587 14588获取资源请求的资源类型。 14589 14590**系统能力:** SystemCapability.Web.Webview.Core 14591 14592**返回值:** 14593 14594| 类型 | 说明 | 14595| ------ | ------------- | 14596| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 | 14597 14598**示例:** 14599 14600完整示例代码参考[onRequestStart](#onrequeststart12)。 14601 14602### getFrameUrl<sup>12+</sup> 14603 14604getFrameUrl(): string 14605 14606获取触发此请求的Frame的URL。 14607 14608**系统能力:** SystemCapability.Web.Webview.Core 14609 14610**返回值:** 14611 14612| 类型 | 说明 | 14613| ------ | ------------- | 14614| string | 返回触发此请求的Frame的URL。 | 14615 14616**示例:** 14617 14618完整示例代码参考[onRequestStart](#onrequeststart12)。 14619 14620## WebSchemeHandlerResponse<sup>12+</sup> 14621 14622请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。 14623 14624### constructor<sup>12+</sup> 14625 14626constructor() 14627 14628Response的构造函数。 14629 14630**系统能力:** SystemCapability.Web.Webview.Core 14631 14632**示例:** 14633 14634```ts 14635// xxx.ets 14636import { webview } from '@kit.ArkWeb'; 14637import { BusinessError } from '@kit.BasicServicesKit'; 14638import { WebNetErrorList } from '@ohos.web.netErrorList'; 14639 14640@Entry 14641@Component 14642struct WebComponent { 14643 controller: webview.WebviewController = new webview.WebviewController(); 14644 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 14645 14646 build() { 14647 Column() { 14648 Button('response').onClick(() => { 14649 let response = new webview.WebSchemeHandlerResponse(); 14650 try { 14651 response.setUrl("http://www.example.com") 14652 response.setStatus(200) 14653 response.setStatusText("OK") 14654 response.setMimeType("text/html") 14655 response.setEncoding("utf-8") 14656 response.setHeaderByName("header1", "value1", false) 14657 response.setNetErrorCode(WebNetErrorList.NET_OK) 14658 console.log("[schemeHandler] getUrl:" + response.getUrl()) 14659 console.log("[schemeHandler] getStatus:" + response.getStatus()) 14660 console.log("[schemeHandler] getStatusText:" + response.getStatusText()) 14661 console.log("[schemeHandler] getMimeType:" + response.getMimeType()) 14662 console.log("[schemeHandler] getEncoding:" + response.getEncoding()) 14663 console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1")) 14664 console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode()) 14665 14666 } catch (error) { 14667 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14668 } 14669 }) 14670 Web({ src: 'https://www.example.com', controller: this.controller }) 14671 } 14672 } 14673} 14674 14675``` 14676 14677### setUrl<sup>12+</sup> 14678 14679setUrl(url: string): void 14680 14681给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。 14682 14683**系统能力:** SystemCapability.Web.Webview.Core 14684 14685**参数:** 14686 14687| 参数名 | 类型 | 必填 | 说明 | 14688| --------| ------- | ---- | ---------------------------| 14689| url | string | 是 | 即将要跳转的URL。 | 14690 14691**示例:** 14692 14693示例完整示例代码参考[constructor](#constructor12)。 14694 14695**错误码:** 14696 14697以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14698 14699| 错误码ID | 错误信息 | 14700| -------- | ----------------------- | 14701| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14702 14703### setNetErrorCode<sup>12+</sup> 14704 14705setNetErrorCode(code: WebNetErrorList): void 14706 14707给当前的Response设置网络错误码。 14708 14709**系统能力:** SystemCapability.Web.Webview.Core 14710 14711**参数:** 14712 14713| 参数名 | 类型 | 必填 | 说明 | 14714| --------| ------- | ---- | ---------------------------| 14715| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 14716 14717**错误码:** 14718 14719以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14720 14721| 错误码ID | 错误信息 | 14722| -------- | ----------------------- | 14723| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14724 14725**示例:** 14726 14727示例完整示例代码参考[constructor](#constructor12)。 14728 14729### setStatus<sup>12+</sup> 14730 14731setStatus(code: number): void 14732 14733给当前的Response设置HTTP状态码。 14734 14735**系统能力:** SystemCapability.Web.Webview.Core 14736 14737**参数:** 14738 14739| 参数名 | 类型 | 必填 | 说明 | 14740| --------| ------- | ---- | ---------------------------| 14741| code | number | 是 | Http状态码。 | 14742 14743**错误码:** 14744 14745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14746 14747| 错误码ID | 错误信息 | 14748| -------- | ----------------------- | 14749| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14750 14751**示例:** 14752 14753示例完整示例代码参考[constructor](#constructor12)。 14754 14755### setStatusText<sup>12+</sup> 14756 14757setStatusText(text: string): void 14758 14759给当前的Response设置状态文本。 14760 14761**系统能力:** SystemCapability.Web.Webview.Core 14762 14763**参数:** 14764 14765| 参数名 | 类型 | 必填 | 说明 | 14766| --------| ------- | ---- | ---------------------------| 14767| text | string | 是 | 状态文本。 | 14768 14769**错误码:** 14770 14771以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14772 14773| 错误码ID | 错误信息 | 14774| -------- | ----------------------- | 14775| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14776 14777**示例:** 14778 14779示例完整示例代码参考[constructor](#constructor12)。 14780 14781### setMimeType<sup>12+</sup> 14782 14783setMimeType(type: string): void 14784 14785给当前的Response设置媒体类型。 14786 14787**系统能力:** SystemCapability.Web.Webview.Core 14788 14789**参数:** 14790 14791| 参数名 | 类型 | 必填 | 说明 | 14792| --------| ------- | ---- | ---------------------------| 14793| type | string | 是 | 媒体类型。 | 14794 14795**错误码:** 14796 14797以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14798 14799| 错误码ID | 错误信息 | 14800| -------- | ----------------------- | 14801| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14802 14803**示例:** 14804 14805示例完整示例代码参考[constructor](#constructor12)。 14806 14807### setEncoding<sup>12+</sup> 14808 14809setEncoding(encoding: string): void 14810 14811给当前的Response设置字符集。 14812 14813**系统能力:** SystemCapability.Web.Webview.Core 14814 14815**参数:** 14816 14817| 参数名 | 类型 | 必填 | 说明 | 14818| --------| ------- | ---- | ---------------------------| 14819| encoding | string | 是 | 字符集。 | 14820 14821**错误码:** 14822 14823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14824 14825| 错误码ID | 错误信息 | 14826| -------- | ----------------------- | 14827| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14828 14829**示例:** 14830 14831示例完整示例代码参考[constructor](#constructor12)。 14832 14833### setHeaderByName<sup>12+</sup> 14834 14835setHeaderByName(name: string, value: string, overwrite: boolean): void 14836 14837给当前的Response设置头信息。 14838 14839**系统能力:** SystemCapability.Web.Webview.Core 14840 14841**参数:** 14842 14843| 参数名 | 类型 | 必填 | 说明 | 14844| --------| ------- | ---- | ---------------------------| 14845| name | string | 是 | 头部(header)的名称。 | 14846| value | string | 是 | 头部(header)的值。 | 14847| overwrite | boolean | 是 | 如果为true,将覆盖现有的头部,否则不覆盖。 | 14848 14849**错误码:** 14850 14851以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14852 14853| 错误码ID | 错误信息 | 14854| -------- | ----------------------- | 14855| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14856 14857**示例:** 14858 14859示例完整示例代码参考[constructor](#constructor12)。 14860 14861### getUrl<sup>12+</sup> 14862 14863getUrl(): string 14864 14865获取重定向或由于HSTS而更改后的URL。 14866风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 14867 14868**系统能力:** SystemCapability.Web.Webview.Core 14869 14870**返回值:** 14871 14872| 类型 | 说明 | 14873| ------- | --------------------------------------- | 14874| string | 获取经过重定向或由于HSTS而更改后的URL。| 14875 14876**示例:** 14877 14878示例完整示例代码参考[constructor](#constructor12)。 14879 14880### getNetErrorCode<sup>12+</sup> 14881 14882getNetErrorCode(): WebNetErrorList 14883 14884获取Response的网络错误码。 14885 14886**系统能力:** SystemCapability.Web.Webview.Core 14887 14888**返回值:** 14889 14890| 类型 | 说明 | 14891| ------- | --------------------------------------- | 14892| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。| 14893 14894**示例:** 14895 14896示例完整示例代码参考[constructor](#constructor12)。 14897 14898### getStatus<sup>12+</sup> 14899 14900getStatus(): number 14901 14902获取Response的Http状态码。 14903 14904**系统能力:** SystemCapability.Web.Webview.Core 14905 14906**返回值:** 14907 14908| 类型 | 说明 | 14909| ------- | --------------------------------------- | 14910| number | 获取Response的Http状态码。| 14911 14912**示例:** 14913 14914示例完整示例代码参考[constructor](#constructor12)。 14915 14916### getStatusText<sup>12+</sup> 14917 14918getStatusText(): string 14919 14920获取Response的状态文本。 14921 14922**系统能力:** SystemCapability.Web.Webview.Core 14923 14924**返回值:** 14925 14926| 类型 | 说明 | 14927| ------- | --------------------------------------- | 14928| string | 状态文本。| 14929 14930**示例:** 14931 14932示例完整示例代码参考[constructor](#constructor12)。 14933 14934### getMimeType<sup>12+</sup> 14935 14936getMimeType(): string 14937 14938获取Response的媒体类型。 14939 14940**系统能力:** SystemCapability.Web.Webview.Core 14941 14942**返回值:** 14943 14944| 类型 | 说明 | 14945| ------- | --------------------------------------- | 14946| string | 媒体类型。| 14947 14948**示例:** 14949 14950示例完整示例代码参考[constructor](#constructor12)。 14951 14952### getEncoding<sup>12+</sup> 14953 14954getEncoding(): string 14955 14956获取Response的字符集。 14957 14958**系统能力:** SystemCapability.Web.Webview.Core 14959 14960**返回值:** 14961 14962| 类型 | 说明 | 14963| ------- | --------------------------------------- | 14964| string | 字符集。| 14965 14966**示例:** 14967 14968示例完整示例代码参考[constructor](#constructor12)。 14969 14970### getHeaderByName<sup>12+</sup> 14971 14972getHeaderByName(name: string): string 14973 14974获取Response的字符集。 14975 14976**系统能力:** SystemCapability.Web.Webview.Core 14977 14978**参数:** 14979 14980| 参数名 | 类型 | 必填 | 说明 | 14981| ------- | ---------------- | ---- | -------------------- | 14982| name | string | 是 | 头部(header)的名称。 | 14983 14984 14985**返回值:** 14986 14987| 类型 | 说明 | 14988| ------- | --------------------------------------- | 14989| string | 头部(header)的值。| 14990 14991**示例:** 14992 14993示例完整示例代码参考[constructor](#constructor12)。 14994 14995## WebResourceHandler<sup>12+</sup> 14996 14997通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。 14998 14999### didReceiveResponse<sup>12+</sup> 15000 15001didReceiveResponse(response: WebSchemeHandlerResponse): void 15002 15003将构造的响应头传递给被拦截的请求。 15004 15005**系统能力:** SystemCapability.Web.Webview.Core 15006 15007**参数:** 15008 15009| 参数名 | 类型 | 必填 | 说明 | 15010| ---------------| ------- | ---- | ------------- | 15011| response | [WebSchemeHandlerResponse](#webschemehandlerresponse12) | 是 | 该拦截请求的响应。 | 15012 15013**错误码:** 15014 15015以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15016 15017| 错误码ID | 错误信息 | 15018| -------- | ------------------------------------- | 15019| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15020| 17100021 | The resource handler is invalid. | 15021 15022**示例:** 15023 15024示例请参考[OnRequestStart](#onrequeststart12)。 15025 15026### didReceiveResponseBody<sup>12+</sup> 15027 15028didReceiveResponseBody(data: ArrayBuffer): void 15029 15030将构造的响应体传递给被拦截的请求。 15031 15032**系统能力:** SystemCapability.Web.Webview.Core 15033 15034**参数:** 15035 15036| 参数名 | 类型 | 必填 | 说明 | 15037| ---------------| ------- | ---- | ------------- | 15038| data | ArrayBuffer | 是 | 响应体数据。 | 15039 15040**错误码:** 15041 15042以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15043 15044| 错误码ID | 错误信息 | 15045| -------- | ------------------------------------- | 15046| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15047| 17100021 | The resource handler is invalid. | 15048 15049**示例:** 15050 15051示例请参考[OnRequestStart](#onrequeststart12)。 15052 15053### didFinish<sup>12+</sup> 15054 15055didFinish(): void 15056 15057通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15058 15059**系统能力:** SystemCapability.Web.Webview.Core 15060 15061**错误码:** 15062 15063以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15064 15065| 错误码ID | 错误信息 | 15066| -------- | ------------------------------------- | 15067| 17100021 | The resource handler is invalid. | 15068 15069**示例:** 15070 15071示例请参考[OnRequestStart](#onrequeststart12)。 15072 15073### didFail<sup>12+</sup> 15074 15075didFail(code: WebNetErrorList): void 15076 15077通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15078 15079**系统能力:** SystemCapability.Web.Webview.Core 15080 15081**参数:** 15082 15083| 参数名 | 类型 | 必填 | 说明 | 15084| --------| ------- | ---- | ---------------------------| 15085| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 15086 15087**错误码:** 15088 15089以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15090 15091| 错误码ID | 错误信息 | 15092| -------- | ------------------------------------- | 15093| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15094| 17100021 | The resource handler is invalid. | 15095 15096**系统能力:** SystemCapability.Web.Webview.Core 15097 15098**示例:** 15099 15100示例请参考[OnRequestStart](#onrequeststart12)。 15101 15102## WebSchemeHandler<sup>12+</sup> 15103 15104用于拦截指定scheme的请求的拦截器。 15105 15106### onRequestStart<sup>12+</sup> 15107 15108onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void 15109 15110当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。 15111 15112**系统能力:** SystemCapability.Web.Webview.Core 15113 15114**参数**: 15115 15116| 参数名 | 类型 | 必填 | 说明 | 15117| -------- | -------------------- | ---- | ---------- | 15118| callback | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 | 15119 15120**错误码:** 15121 15122以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15123 15124| 错误码ID | 错误信息 | 15125| -------- | ------------------------------------- | 15126| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 15127 15128**示例:** 15129 15130```ts 15131// xxx.ets 15132import { webview } from '@kit.ArkWeb'; 15133import { BusinessError } from '@kit.BasicServicesKit'; 15134import { buffer } from '@kit.ArkTS'; 15135import { WebNetErrorList } from '@ohos.web.netErrorList'; 15136 15137@Entry 15138@Component 15139struct WebComponent { 15140 controller: webview.WebviewController = new webview.WebviewController(); 15141 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 15142 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 15143 15144 build() { 15145 Column() { 15146 Web({ src: 'https://www.example.com', controller: this.controller }) 15147 .onControllerAttached(() => { 15148 try { 15149 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 15150 console.log("[schemeHandler] onRequestStart"); 15151 try { 15152 console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl()); 15153 console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod()); 15154 console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer()); 15155 console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame()); 15156 console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture()); 15157 console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length); 15158 console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType()); 15159 console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl()); 15160 let header = request.getHeader(); 15161 for (let i = 0; i < header.length; i++) { 15162 console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue); 15163 } 15164 let stream = request.getHttpBodyStream(); 15165 if (stream) { 15166 console.log("[schemeHandler] onRequestStart has http body stream"); 15167 } else { 15168 console.log("[schemeHandler] onRequestStart has no http body stream"); 15169 } 15170 } catch (error) { 15171 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15172 } 15173 15174 if (request.getRequestUrl().endsWith("example.com")) { 15175 return false; 15176 } 15177 15178 let response = new webview.WebSchemeHandlerResponse(); 15179 try { 15180 response.setNetErrorCode(WebNetErrorList.NET_OK); 15181 response.setStatus(200); 15182 response.setStatusText("OK"); 15183 response.setMimeType("text/html"); 15184 response.setEncoding("utf-8"); 15185 response.setHeaderByName("header1", "value1", false); 15186 } catch (error) { 15187 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15188 } 15189 15190 // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。 15191 let buf = buffer.from(this.htmlData) 15192 try { 15193 if (buf.length == 0) { 15194 console.log("[schemeHandler] length 0"); 15195 resourceHandler.didReceiveResponse(response); 15196 // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail 15197 resourceHandler.didFail(WebNetErrorList.ERR_FAILED); 15198 } else { 15199 console.log("[schemeHandler] length 1"); 15200 resourceHandler.didReceiveResponse(response); 15201 resourceHandler.didReceiveResponseBody(buf.buffer); 15202 resourceHandler.didFinish(); 15203 } 15204 } catch (error) { 15205 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15206 } 15207 return true; 15208 }) 15209 15210 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 15211 console.log("[schemeHandler] onRequestStop"); 15212 }); 15213 15214 this.controller.setWebSchemeHandler('https', this.schemeHandler); 15215 } catch (error) { 15216 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15217 } 15218 }) 15219 .javaScriptAccess(true) 15220 .domStorageAccess(true) 15221 } 15222 } 15223} 15224``` 15225### onRequestStop<sup>12+</sup> 15226 15227onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void 15228 15229当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点: 15230 152311.WebResourceHandler调用didFail或者didFinish。 15232 152332.此请求因为其他原因中断。 15234 15235**系统能力:** SystemCapability.Web.Webview.Core 15236 15237**参数**: 15238 15239| 参数名 | 类型 | 必填 | 说明 | 15240| -------- | -------------------- | ---- | ---------- | 15241| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是 | 对应请求结束的回调函数。 | 15242 15243**错误码:** 15244 15245以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15246 15247| 错误码ID | 错误信息 | 15248| -------- | ------------------------------------- | 15249| 401 | Invalid input parameter. | 15250 15251**示例:** 15252 15253完整示例代码参考[onRequestStart](#onrequeststart12)。 15254 15255## CacheOptions<sup>12+</sup> 15256 15257Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。 15258 15259**系统能力:** SystemCapability.Web.Webview.Core 15260 15261| 名称 | 类型 | 可读 | 可写 |说明 | 15262| ----------- | ------ | -----|------|------------------- | 15263| responseHeaders | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。 | 15264 15265## PlaybackStatus<sup>12+</sup> 15266 15267[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。 15268 15269**系统能力:** SystemCapability.Web.Webview.Core 15270 15271| 名称 | 值 | 说明 | 15272|------|----|------| 15273| PAUSED | 0 | 播放状态为播放状态。 | 15274| PLAYING | 1 | 播放状态为暂停状态。 | 15275 15276## NetworkState<sup>12+<sup> 15277 15278播放器的网络状态。 15279 15280**系统能力:** SystemCapability.Web.Webview.Core 15281 15282| 名称 | 值 | 说明 | 15283|------|----|------| 15284| EMPTY | 0 | 播放器还没有开始下载数据。 | 15285| IDLE | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 | 15286| LOADING | 2 | 播放器正在下载媒体数据。 | 15287| NETWORK_ERROR | 3 | 发生了网络错误。 | 15288 15289## ReadyState<sup>12+<sup> 15290 15291播放器的缓存状态。 15292 15293**系统能力:** SystemCapability.Web.Webview.Core 15294 15295| 名称 | 值 | 说明 | 15296|------|----|------| 15297| HAVE_NOTHING | 0 | 没有缓存。 | 15298| HAVE_METADATA | 1 | 只缓存了媒体元数据。 | 15299| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 | 15300| HAVE_FUTURE_DATA | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 | 15301| HAVE_ENOUGH_DATA | 4 | 缓存了足够的数据,保证播放流畅。 | 15302 15303## MediaError<sup>12+<sup> 15304 15305播放器的错误类型。 15306 15307**系统能力:** SystemCapability.Web.Webview.Core 15308 15309| 名称 | 值 | 说明 | 15310|------|----|------| 15311| NETWORK_ERROR | 1 | 网络错误。 | 15312| FORMAT_ERROR | 2 | 媒体格式错误。 | 15313| DECODE_ERROR | 3 | 解码错误。 | 15314 15315## NativeMediaPlayerHandler<sup>12+<sup> 15316 15317[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。 15318应用通过该对象,将播放器的状态报告给ArkWeb内核。 15319 15320### handleStatusChanged<sup>12+<sup> 15321 15322handleStatusChanged(status: PlaybackStatus): void 15323 15324当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。 15325 15326**系统能力:** SystemCapability.Web.Webview.Core 15327 15328**参数:** 15329 15330| 参数名 | 类型 | 必填 | 说明 | 15331|--------|------|------|------| 15332| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 | 15333 15334**示例:** 15335 15336完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15337 15338### handleVolumeChanged<sup>12+<sup> 15339 15340handleVolumeChanged(volume: number): void 15341 15342当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。 15343 15344**系统能力:** SystemCapability.Web.Webview.Core 15345 15346**参数:** 15347 15348| 参数名 | 类型 | 必填 | 说明 | 15349|--------|------|------|------| 15350| volume | number | 是 | 播放器的音量。 | 15351 15352**示例:** 15353 15354完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15355 15356### handleMutedChanged<sup>12+<sup> 15357 15358handleMutedChanged(muted: boolean): void 15359 15360当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。 15361 15362**系统能力:** SystemCapability.Web.Webview.Core 15363 15364**参数:** 15365 15366| 参数名 | 类型 | 必填 | 说明 | 15367|--------|------|------|------| 15368| muted | boolean | 是 | 当前播放器是否静音。 | 15369 15370**示例:** 15371 15372完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15373 15374### handlePlaybackRateChanged<sup>12+<sup> 15375 15376handlePlaybackRateChanged(playbackRate: number): void 15377 15378当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。 15379 15380**系统能力:** SystemCapability.Web.Webview.Core 15381 15382**参数:** 15383 15384| 参数名 | 类型 | 必填 | 说明 | 15385|--------|------|------|------| 15386| playbackRate | number | 是 | 播放速率。 | 15387 15388**示例:** 15389 15390完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15391 15392### handleDurationChanged<sup>12+<sup> 15393 15394handleDurationChanged(duration: number): void 15395 15396当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。 15397 15398**系统能力:** SystemCapability.Web.Webview.Core 15399 15400**参数:** 15401 15402| 参数名 | 类型 | 必填 | 说明 | 15403|--------|------|------|------| 15404| duration | number | 是 | 媒体的总时长。单位: 秒 。 | 15405 15406**示例:** 15407 15408完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15409 15410### handleTimeUpdate<sup>12+<sup> 15411 15412handleTimeUpdate(currentPlayTime: number): void 15413 15414当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。 15415 15416**系统能力:** SystemCapability.Web.Webview.Core 15417 15418**参数:** 15419 15420| 参数名 | 类型 | 必填 | 说明 | 15421|--------|------|------|------| 15422| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。 | 15423 15424**示例:** 15425 15426完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15427 15428### handleBufferedEndTimeChanged<sup>12+<sup> 15429 15430handleBufferedEndTimeChanged(bufferedEndTime: number): void 15431 15432当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。 15433 15434**系统能力:** SystemCapability.Web.Webview.Core 15435 15436**参数:** 15437 15438| 参数名 | 类型 | 必填 | 说明 | 15439|--------|------|------|------| 15440| bufferedEndTime | number | 是 | 媒体缓冲的时长。 | 15441 15442**示例:** 15443 15444完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15445 15446### handleEnded<sup>12+<sup> 15447 15448handleEnded(): void 15449 15450当媒体播放结束时,调用该方法通知给 ArkWeb 内核。 15451 15452**系统能力:** SystemCapability.Web.Webview.Core 15453 15454**示例:** 15455 15456完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15457 15458### handleNetworkStateChanged<sup>12+<sup> 15459 15460handleNetworkStateChanged(state: NetworkState): void 15461 15462当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。 15463 15464**系统能力:** SystemCapability.Web.Webview.Core 15465 15466**参数:** 15467 15468| 参数名 | 类型 | 必填 | 说明 | 15469|--------|------|------|------| 15470| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 | 15471 15472**示例:** 15473 15474完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15475 15476### handleReadyStateChanged<sup>12+<sup> 15477 15478handleReadyStateChanged(state: ReadyState): void 15479 15480当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。 15481 15482**系统能力:** SystemCapability.Web.Webview.Core 15483 15484**参数:** 15485 15486| 参数名 | 类型 | 必填 | 说明 | 15487|--------|------|------|------| 15488| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 | 15489 15490**示例:** 15491 15492完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15493 15494### handleFullscreenChanged<sup>12+<sup> 15495 15496handleFullscreenChanged(fullscreen: boolean): void 15497 15498当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。 15499 15500**系统能力:** SystemCapability.Web.Webview.Core 15501 15502**参数:** 15503 15504| 参数名 | 类型 | 必填 | 说明 | 15505|--------|------|------|------| 15506| fullscreen | boolean | 是 | 是否全屏。 | 15507 15508**示例:** 15509 15510完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15511 15512### handleSeeking<sup>12+<sup> 15513 15514handleSeeking(): void 15515 15516当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。 15517 15518**系统能力:** SystemCapability.Web.Webview.Core 15519 15520**示例:** 15521 15522完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15523 15524### handleSeekFinished<sup>12+<sup> 15525 15526handleSeekFinished(): void 15527 15528当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。 15529 15530**系统能力:** SystemCapability.Web.Webview.Core 15531 15532**示例:** 15533 15534完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15535 15536### handleError<sup>12+<sup> 15537 15538handleError(error: MediaError, errorMessage: string): void 15539 15540当播放器发生错误时, 调用该方法通知 ArkWeb 内核。 15541 15542**系统能力:** SystemCapability.Web.Webview.Core 15543 15544**参数:** 15545 15546| 参数名 | 类型 | 必填 | 说明 | 15547|--------|------|------|------| 15548| error | [MediaError](#mediaerror12) | 是 | 错误类型。 | 15549| errorMessage | string | 是 | 错误的详细描述。 | 15550 15551**示例:** 15552 15553完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15554 15555### handleVideoSizeChanged<sup>12+<sup> 15556 15557handleVideoSizeChanged(width: number, height: number): void 15558 15559当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。 15560 15561**系统能力:** SystemCapability.Web.Webview.Core 15562 15563**参数:** 15564 15565| 参数名 | 类型 | 必填 | 说明 | 15566|--------|------|------|------| 15567| width | number | 是 | 视频的宽。 | 15568| height | number | 是 | 视频的高。 | 15569 15570**示例:** 15571 15572完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15573 15574## SuspendType<sup>12+<sup> 15575 15576表示播放器的挂起类型。 15577 15578**系统能力:** SystemCapability.Web.Webview.Core 15579 15580| 名称 | 值 | 说明 | 15581|------|----|------| 15582| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 | 15583| ENTER_BACKGROUND | 1 | 页面进后台。 | 15584| AUTO_CLEANUP | 2 | 系统自动清理。 | 15585 15586## NativeMediaPlayerBridge<sup>12+<sup> 15587 15588[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。 15589接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。 15590ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。 15591 15592### updateRect<sup>12+<sup> 15593 15594updateRect(x: number, y: number, width: number, height: number): void 15595 15596更新 surface 位置信息。 15597 15598**系统能力:** SystemCapability.Web.Webview.Core 15599 15600**参数:** 15601 15602| 参数名 | 类型 | 必填 | 说明 | 15603|--------|------|------|------| 15604| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 | 15605| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 | 15606| width | number | 是 | surface 的宽度。 | 15607| height | number | 是 | surface 的高度。 | 15608 15609**示例:** 15610 15611完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15612 15613### play<sup>12+<sup> 15614 15615play(): void 15616 15617播放视频。 15618 15619**系统能力:** SystemCapability.Web.Webview.Core 15620 15621**示例:** 15622 15623完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15624 15625### pause<sup>12+<sup> 15626 15627pause(): void 15628 15629暂停播放。 15630 15631**系统能力:** SystemCapability.Web.Webview.Core 15632 15633**示例:** 15634 15635完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15636 15637### seek<sup>12+<sup> 15638 15639seek(targetTime: number): void 15640 15641播放跳转到某个时间点。 15642 15643**系统能力:** SystemCapability.Web.Webview.Core 15644 15645**参数:** 15646 15647| 参数名 | 类型 | 必填 | 说明 | 15648|--------|------|------|------| 15649| targetTime | number | 是 | 单位: 秒。 | 15650 15651**示例:** 15652 15653完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15654 15655### setVolume<sup>12+<sup> 15656 15657setVolume(volume: number): void 15658 15659设置播放器音量值。 15660取值范围: [0, 1.0] 15661 15662**参数:** 15663 15664| 参数名 | 类型 | 必填 | 说明 | 15665|--------|------|------|------| 15666| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 | 15667 15668**系统能力:** SystemCapability.Web.Webview.Core 15669 15670**示例:** 15671 15672完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15673 15674### setMuted<sup>12+<sup> 15675 15676setMuted(muted: boolean): void 15677 15678设置静音状态。 15679 15680**系统能力:** SystemCapability.Web.Webview.Core 15681 15682**参数:** 15683 15684| 参数名 | 类型 | 必填 | 说明 | 15685|--------|------|------|------| 15686| muted | boolean | 是 | 是否静音。 | 15687 15688**示例:** 15689 15690完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15691 15692### setPlaybackRate<sup>12+<sup> 15693 15694setPlaybackRate(playbackRate: number): void 15695 15696设置播放速度。 15697取值范围: [0, 10.0] 15698 15699**系统能力:** SystemCapability.Web.Webview.Core 15700 15701**参数:** 15702 15703| 参数名 | 类型 | 必填 | 说明 | 15704|--------|------|------|------| 15705| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 | 15706 15707**示例:** 15708 15709完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15710 15711### release<sup>12+<sup> 15712 15713release(): void 15714 15715销毁播放器。 15716 15717**系统能力:** SystemCapability.Web.Webview.Core 15718 15719**示例:** 15720 15721完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15722 15723### enterFullscreen<sup>12+<sup> 15724 15725enterFullscreen(): void 15726 15727播放器进入全屏。 15728 15729**系统能力:** SystemCapability.Web.Webview.Core 15730 15731**示例:** 15732 15733完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15734 15735### exitFullscreen<sup>12+<sup> 15736 15737exitFullscreen(): void 15738 15739播放器退出全屏。 15740 15741**系统能力:** SystemCapability.Web.Webview.Core 15742 15743**示例:** 15744 15745完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15746 15747### resumePlayer<sup>12+<sup> 15748 15749resumePlayer?(): void 15750 15751通知应用重建应用内播放器,并恢复应用内播放器的状态信息。 15752 15753**系统能力:** SystemCapability.Web.Webview.Core 15754 15755**示例:** 15756 15757完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15758 15759### suspendPlayer<sup>12+<sup> 15760 15761suspendPlayer?(type: SuspendType): void 15762 15763通知应用销毁应用内播放器,并保存应用内播放器的状态信息。 15764 15765**系统能力:** SystemCapability.Web.Webview.Core 15766 15767**参数:** 15768 15769| 参数名 | 类型 | 必填 | 说明 | 15770|--------|------|------|------| 15771| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。| 15772 15773**示例:** 15774 15775完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15776 15777## MediaType<sup>12+<sup> 15778 15779表示媒体类型。 15780 15781**系统能力:** SystemCapability.Web.Webview.Core 15782 15783| 名称 | 值 | 说明 | 15784|------|----|------| 15785| VIDEO | 0 | 视频。 | 15786| AUDIO | 1 | 音频。 | 15787 15788## SourceType<sup>12+<sup> 15789 15790表示媒体源的类型。 15791 15792**系统能力:** SystemCapability.Web.Webview.Core 15793 15794| 名称 | 值 | 说明 | 15795|------|----|------| 15796| URL | 0 | 媒体源的类型是 URL 。 | 15797| MSE | 1 | 媒体源的类型是 blob 。 | 15798 15799## MediaSourceInfo<sup>12+<sup> 15800 15801表示媒体源的信息。 15802 15803**系统能力:** SystemCapability.Web.Webview.Core 15804 15805| 名称 | 类型 | 必填 | 说明 | 15806|------|------|------|------| 15807| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 | 15808| source | string | 是 | 媒体源地址。 | 15809| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 | 15810 15811## NativeMediaPlayerSurfaceInfo<sup>12+<sup> 15812 15813[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。 15814 15815**系统能力:** SystemCapability.Web.Webview.Core 15816 15817| 名称 | 类型 | 必填 | 说明 | 15818|------|------|------|------| 15819| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 | 15820| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 | 15821 15822## Preload<sup>12+<sup> 15823 15824播放器预加载媒体数据。 15825 15826**系统能力:** SystemCapability.Web.Webview.Core 15827 15828| 名称 | 值 | 说明 | 15829|------|----|------| 15830| NONE | 0 | 不预加载。 | 15831| METADATA | 1 | 只预加载媒体的元数据。 | 15832| AUTO | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 | 15833 15834## MediaInfo<sup>12+<sup> 15835 15836[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。 15837包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。 15838 15839**系统能力:** SystemCapability.Web.Webview.Core 15840 15841| 名称 | 类型 | 必填 | 说明 | 15842|------|------|------|------| 15843| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。| 15844| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 | 15845| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 | 15846| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 | 15847| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。 | 15848| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 | 15849| muted | boolean | 是 | 是否要求静音播放。 | 15850| posterUrl | string | 是 | 海报的地址。 | 15851| preload | [Preload](#preload12) | 是 | 是否需要预加载。 | 15852| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 | 15853| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 | 15854 15855 15856## CreateNativeMediaPlayerCallback<sup>12+<sup> 15857 15858type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge 15859 15860[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。 15861一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。 15862 15863**系统能力:** SystemCapability.Web.Webview.Core 15864 15865**参数:** 15866 15867| 参数名 | 类型 | 必填 | 说明 | 15868|--------|------|------|------| 15869| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 | 15870| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 | 15871 15872**返回值:** 15873 15874| 类型 | 说明 | 15875|------|------| 15876| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 | 15877 15878**示例:** 15879 15880完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15881 15882## OfflineResourceMap<sup>12+</sup> 15883 15884本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。 15885 15886**系统能力:** SystemCapability.Web.Webview.Core 15887 15888| 名称 | 类型 | 可读 | 可写 |说明 | 15889| ----------- | ------ | -----|------|------------------- | 15890| urlList | Array\<string\> | 是 | 是 | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。 | 15891| resource | Uint8Array | 是 | 是 | 本地离线资源的内容。 | 15892| responseHeaders | Array<[WebHeader](#webheader)> | 是 | 是 | 资源对应的HTTP响应头。其中提供的Cache-Control或Expires响应头将被用于控制资源在内存缓存中的有效期。如果不提供,默认的有效期为86400秒,即1天。其中提供的Content-Type响应头将被用于定义资源的MIMEType,MODULE_JS必须提供有效的MIMEType,其他类型可不提供,无默认值,不符合标准的MIMEType会导致内存缓存失效。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。 | 15893| type | [OfflineResourceType](#offlineresourcetype12) | 是 | 是 | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。 | 15894 15895## OfflineResourceType<sup>12+</sup> 15896 15897[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。 15898 15899**系统能力:** SystemCapability.Web.Webview.Core 15900 15901| 名称 | 值 | 说明 | 15902| ------------ | -- |--------------------------------- | 15903| IMAGE | 0 | 图片类型的资源。 | 15904| CSS | 1 | CSS类型的资源。| 15905| CLASSIC_JS | 2 | 通过<script src="" /\>标签加载的Javascript资源。| 15906| MODULE_JS | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。| 15907 15908## WebResourceType<sup>12+</sup> 15909 15910资源请求的资源类型。 15911 15912**系统能力:** SystemCapability.Web.Webview.Core 15913 15914| 名称 | 值 | 说明 | 15915| ------------ | -- |--------------------------------- | 15916| MAIN_FRAME | 0 | 顶层页面。 | 15917| SUB_FRAME | 1 | Frame或Iframe。 | 15918| STYLE_SHEET | 2 | CSS样式表。 | 15919| SCRIPT | 3 | 外部脚本。 | 15920| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 | 15921| FONT_RESOURCE | 5 | 字体。 | 15922| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 | 15923| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 | 15924| MEDIA | 8 | 媒体资源。 | 15925| WORKER | 9 | 专用工作线程的主资源。 | 15926| SHARED_WORKER | 10 | 共享工作线程的主资源。 | 15927| PREFETCH | 11 | 明确的预取请求。 | 15928| FAVICON | 12 | 网站图标。 | 15929| XHR | 13 | XMLHttpRequest。 | 15930| PING | 14 | <a ping\>/sendBeacon的Ping请求。 | 15931| SERVICE_WORKER | 15 | service worker的主资源。 | 15932| CSP_REPORT | 16 | 内容安全策略违规报告。 | 15933| PLUGIN_RESOURCE | 17 | 插件请求的资源。 | 15934| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 | 15935| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 | 15936 15937## RectEvent<sup>12+<sup> 15938 15939矩形定义。 15940 15941**系统能力:** SystemCapability.Web.Webview.Core 15942 15943| 名称 | 类型 | 可读 | 可写 | 说明 | 15944| -------------- | --------- | ---- | ---- | ---------------------------- | 15945| x | number | 是 | 是 | 矩形区域左上角x坐标。 | 15946| y | number | 是 | 是 | 矩形区域左上角y坐标。 | 15947| width | number | 是 | 是 | 矩形的宽度。 | 15948| height | number | 是 | 是 | 矩形的高度。 | 15949 15950## BackForwardCacheSupportedFeatures<sup>12+<sup> 15951 15952选择性允许使用以下特性的页面进入前进后退缓存。 15953 15954**系统能力:** SystemCapability.Web.Webview.Core 15955 15956| 名称 | 类型 | 必填 | 说明 | 15957|------|------|------|------| 15958| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为同层渲染元素创建的原生控件的生命周期,避免造成泄漏。 | 15959| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为视频元素创建的原生控件的生命周期,避免造成泄漏。| 15960 15961## BackForwardCacheOptions<sup>12+<sup> 15962 15963前进后退缓存相关设置对象,用来控制web组件前进后退缓存相关选项。 15964 15965**系统能力:** SystemCapability.Web.Webview.Core 15966 15967| 名称 | 类型 | 必填 | 说明 | 15968|------|------|------|------| 15969| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 | 15970| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。| 15971 15972## AdsBlockManager<sup>12+</sup> 15973 15974通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。 15975 15976### setAdsBlockRules<sup>12+</sup> 15977 15978static setAdsBlockRules(rulesFile: string, replace: boolean): void 15979 15980向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。 15981 15982> **说明:** 15983> 15984> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。 15985 15986**系统能力:** SystemCapability.Web.Webview.Core 15987 15988**参数:** 15989 15990| 参数名 | 类型 | 必填 | 说明 | 15991| ---------- | ------ | ---- | -------------------------------- | 15992| rulesFile | string | 是 | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 | 15993| replace | boolean | 是 | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 | 15994 15995**错误码:** 15996 15997以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15998 15999| 错误码ID | 错误信息 | 16000| -------- | ----------------------- | 16001| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16002 16003**示例:** 16004 16005```ts 16006// xxx.ets 16007import { webview } from '@kit.ArkWeb'; 16008import { picker, fileUri } from '@kit.CoreFileKit'; 16009 16010// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中 16011@Entry 16012@Component 16013struct WebComponent { 16014 controller: webview.WebviewController = new webview.WebviewController(); 16015 16016 build() { 16017 Row() { 16018 Flex() { 16019 Button({ type: ButtonType.Capsule }) { 16020 Text("setAdsBlockRules") 16021 } 16022 .onClick(() => { 16023 try { 16024 let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions(); 16025 let documentPicker: ESObject = new picker.DocumentViewPicker(); 16026 documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => { 16027 if (documentSelectResult && documentSelectResult.length > 0) { 16028 let fileRealPath = new fileUri.FileUri(documentSelectResult[0]); 16029 console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath); 16030 webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true); 16031 } 16032 }) 16033 } catch (err) { 16034 console.error('DocumentViewPicker.select failed with err:' + err); 16035 } 16036 }) 16037 } 16038 } 16039 } 16040} 16041``` 16042 16043### addAdsBlockDisallowedList<sup>12+</sup> 16044 16045static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16046 16047向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。 16048 16049> **说明:** 16050> 16051> 此接口设置的域名不会持久化,应用重启需要重新设置。 16052> 16053> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。 16054 16055**系统能力:** SystemCapability.Web.Webview.Core 16056 16057**参数:** 16058 16059| 参数名 | 类型 | 必填 | 说明 | 16060| ---------- | ------ | ---- | -------------------------------- | 16061| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16062 16063**错误码:** 16064 16065以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16066 16067| 错误码ID | 错误信息 | 16068| -------- | ----------------------- | 16069| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16070 16071**示例:** 16072 16073```ts 16074// xxx.ets 16075import { webview } from '@kit.ArkWeb'; 16076 16077// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 16078@Entry 16079@Component 16080struct WebComponent { 16081 main_url: string = 'https://www.example.com'; 16082 text_input_controller: TextInputController = new TextInputController(); 16083 controller: webview.WebviewController = new webview.WebviewController(); 16084 @State input_text: string = 'https://www.example.com'; 16085 16086 build() { 16087 Column() { 16088 Row() { 16089 Flex() { 16090 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16091 .id("input_url") 16092 .height(40) 16093 .margin(5) 16094 .borderColor(Color.Blue) 16095 .onChange((value: string) => { 16096 this.input_text = value; 16097 }) 16098 16099 Button({type: ButtonType.Capsule}) { Text("Go") } 16100 .onClick(() => { 16101 this.controller.loadUrl(this.input_text); 16102 }) 16103 16104 Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") } 16105 .onClick(() => { 16106 let arrDomainSuffixes = new Array<string>(); 16107 arrDomainSuffixes.push('example.com'); 16108 arrDomainSuffixes.push('abcdefg.cn'); 16109 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes); 16110 }) 16111 } 16112 } 16113 Web({ src: this.main_url, controller: this.controller }) 16114 .onControllerAttached(()=>{ 16115 this.controller.enableAdsBlock(true); 16116 }) 16117 } 16118 } 16119} 16120``` 16121 16122### removeAdsBlockDisallowedList<sup>12+</sup> 16123 16124static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16125 16126从AdsBlockManager的DisallowedList中删除一组域名。 16127 16128> **说明:** 16129> 16130> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 16131 16132**系统能力:** SystemCapability.Web.Webview.Core 16133 16134**参数:** 16135 16136| 参数名 | 类型 | 必填 | 说明 | 16137| ---------- | ------ | ---- | -------------------------------- | 16138| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16139 16140**错误码:** 16141 16142以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16143 16144| 错误码ID | 错误信息 | 16145| -------- | ----------------------- | 16146| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16147 16148**示例:** 16149 16150```ts 16151// xxx.ets 16152import { webview } from '@kit.ArkWeb'; 16153 16154// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 16155@Entry 16156@Component 16157struct WebComponent { 16158 main_url: string = 'https://www.example.com'; 16159 text_input_controller: TextInputController = new TextInputController(); 16160 controller: webview.WebviewController = new webview.WebviewController(); 16161 @State input_text: string = 'https://www.example.com'; 16162 16163 build() { 16164 Column() { 16165 Row() { 16166 Flex() { 16167 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16168 .id("input_url") 16169 .height(40) 16170 .margin(5) 16171 .borderColor(Color.Blue) 16172 .onChange((value: string) => { 16173 this.input_text = value; 16174 }) 16175 16176 Button({type: ButtonType.Capsule}) { Text("Go") } 16177 .onClick(() => { 16178 this.controller.loadUrl(this.input_text); 16179 }) 16180 16181 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") } 16182 .onClick(() => { 16183 let arrDomainSuffixes = new Array<string>(); 16184 arrDomainSuffixes.push('example.com'); 16185 arrDomainSuffixes.push('abcdefg.cn'); 16186 webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes); 16187 }) 16188 } 16189 } 16190 Web({ src: this.main_url, controller: this.controller }) 16191 .onControllerAttached(()=>{ 16192 this.controller.enableAdsBlock(true); 16193 }) 16194 } 16195 } 16196} 16197``` 16198 16199### clearAdsBlockDisallowedList<sup>12+</sup> 16200 16201static clearAdsBlockDisallowedList(): void 16202 16203清空AdsBlockManager的DisallowedList。 16204 16205**系统能力:** SystemCapability.Web.Webview.Core 16206 16207**示例:** 16208 16209```ts 16210// xxx.ets 16211import { webview } from '@kit.ArkWeb'; 16212 16213@Entry 16214@Component 16215struct WebComponent { 16216 main_url: string = 'https://www.example.com'; 16217 text_input_controller: TextInputController = new TextInputController(); 16218 controller: webview.WebviewController = new webview.WebviewController(); 16219 @State input_text: string = 'https://www.example.com'; 16220 16221 build() { 16222 Column() { 16223 Row() { 16224 Flex() { 16225 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16226 .id("input_url") 16227 .height(40) 16228 .margin(5) 16229 .borderColor(Color.Blue) 16230 .onChange((value: string) => { 16231 this.input_text = value; 16232 }) 16233 16234 Button({type: ButtonType.Capsule}) { Text("Go") } 16235 .onClick(() => { 16236 this.controller.loadUrl(this.input_text); 16237 }) 16238 16239 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") } 16240 .onClick(() => { 16241 webview.AdsBlockManager.clearAdsBlockDisallowedList(); 16242 }) 16243 } 16244 } 16245 Web({ src: this.main_url, controller: this.controller }) 16246 .onControllerAttached(()=>{ 16247 this.controller.enableAdsBlock(true); 16248 }) 16249 } 16250 } 16251} 16252``` 16253 16254### addAdsBlockAllowedList<sup>12+</sup> 16255 16256static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 16257 16258向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。 16259 16260> **说明:** 16261> 16262> 此接口设置的域名不会持久化,应用重启需要重新设置。 16263> 16264> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。 16265 16266**系统能力:** SystemCapability.Web.Webview.Core 16267 16268**参数:** 16269 16270| 参数名 | 类型 | 必填 | 说明 | 16271| ---------- | ------ | ---- | -------------------------------- | 16272| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16273 16274**错误码:** 16275 16276以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16277 16278| 错误码ID | 错误信息 | 16279| -------- | ----------------------- | 16280| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16281 16282**示例:** 16283 16284```ts 16285// xxx.ets 16286import { webview } from '@kit.ArkWeb'; 16287 16288// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 16289@Entry 16290@Component 16291struct WebComponent { 16292 main_url: string = 'https://www.example.com'; 16293 text_input_controller: TextInputController = new TextInputController(); 16294 controller: webview.WebviewController = new webview.WebviewController(); 16295 @State input_text: string = 'https://www.example.com'; 16296 16297 build() { 16298 Column() { 16299 Row() { 16300 Flex() { 16301 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16302 .id("input_url") 16303 .height(40) 16304 .margin(5) 16305 .borderColor(Color.Blue) 16306 .onChange((value: string) => { 16307 this.input_text = value; 16308 }) 16309 16310 Button({type: ButtonType.Capsule}) { Text("Go") } 16311 .onClick(() => { 16312 this.controller.loadUrl(this.input_text); 16313 }) 16314 16315 Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") } 16316 .onClick(() => { 16317 let arrDisallowDomainSuffixes = new Array<string>(); 16318 arrDisallowDomainSuffixes.push('example.com'); 16319 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes); 16320 16321 let arrAllowedDomainSuffixes = new Array<string>(); 16322 arrAllowedDomainSuffixes.push('news.example.com'); 16323 webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes); 16324 }) 16325 } 16326 } 16327 Web({ src: this.main_url, controller: this.controller }) 16328 .onControllerAttached(()=>{ 16329 this.controller.enableAdsBlock(true) 16330 }) 16331 } 16332 } 16333} 16334``` 16335 16336### removeAdsBlockAllowedList<sup>12+</sup> 16337 16338static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 16339 16340从AdsBlockManager的AllowedList中删除一组域名。 16341 16342> **说明:** 16343> 16344> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 16345 16346**系统能力:** SystemCapability.Web.Webview.Core 16347 16348**参数:** 16349 16350| 参数名 | 类型 | 必填 | 说明 | 16351| ---------- | ------ | ---- | -------------------------------- | 16352| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16353 16354**错误码:** 16355 16356以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16357 16358| 错误码ID | 错误信息 | 16359| -------- | ----------------------- | 16360| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16361 16362**示例:** 16363 16364```ts 16365// xxx.ets 16366import { webview } from '@kit.ArkWeb'; 16367 16368// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 16369@Entry 16370@Component 16371struct WebComponent { 16372 main_url: string = 'https://www.example.com'; 16373 text_input_controller: TextInputController = new TextInputController(); 16374 controller: webview.WebviewController = new webview.WebviewController(); 16375 @State input_text: string = 'https://www.example.com'; 16376 16377 build() { 16378 Column() { 16379 Row() { 16380 Flex() { 16381 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16382 .id("input_url") 16383 .height(40) 16384 .margin(5) 16385 .borderColor(Color.Blue) 16386 .onChange((value: string) => { 16387 this.input_text = value; 16388 }) 16389 16390 Button({type: ButtonType.Capsule}) { Text("Go") } 16391 .onClick(() => { 16392 this.controller.loadUrl(this.input_text); 16393 }) 16394 16395 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") } 16396 .onClick(() => { 16397 let arrDomainSuffixes = new Array<string>(); 16398 arrDomainSuffixes.push('example.com'); 16399 arrDomainSuffixes.push('abcdefg.cn'); 16400 webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes); 16401 }) 16402 } 16403 } 16404 Web({ src: this.main_url, controller: this.controller }) 16405 .onControllerAttached(()=>{ 16406 this.controller.enableAdsBlock(true); 16407 }) 16408 } 16409 } 16410} 16411``` 16412 16413### clearAdsBlockAllowedList<sup>12+</sup> 16414 16415static clearAdsBlockAllowedList(): void 16416 16417清空AdsBlockManager的AllowedList。 16418 16419**系统能力:** SystemCapability.Web.Webview.Core 16420 16421**示例:** 16422 16423```ts 16424// xxx.ets 16425import { webview } from '@kit.ArkWeb'; 16426 16427@Entry 16428@Component 16429struct WebComponent { 16430 main_url: string = 'https://www.example.com'; 16431 text_input_controller: TextInputController = new TextInputController(); 16432 controller: webview.WebviewController = new webview.WebviewController(); 16433 @State input_text: string = 'https://www.example.com'; 16434 16435 16436 build() { 16437 Column() { 16438 Row() { 16439 Flex() { 16440 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16441 .id("input_url") 16442 .height(40) 16443 .margin(5) 16444 .borderColor(Color.Blue) 16445 .onChange((value: string) => { 16446 this.input_text = value; 16447 }) 16448 16449 Button({type: ButtonType.Capsule}) { Text("Go") } 16450 .onClick(() => { 16451 this.controller.loadUrl(this.input_text); 16452 }) 16453 16454 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") } 16455 .onClick(() => { 16456 webview.AdsBlockManager.clearAdsBlockAllowedList(); 16457 }) 16458 } 16459 } 16460 Web({ src: this.main_url, controller: this.controller }) 16461 .onControllerAttached(()=>{ 16462 this.controller.enableAdsBlock(true); 16463 }) 16464 } 16465 } 16466} 16467``` 16468 16469## SnapshotInfo<sup>12+</sup> 16470 16471获取全量绘制结果入参。 16472 16473**系统能力:** SystemCapability.Web.Webview.Core 16474 16475| 名称 | 类型 | 必填 | 说明 | 16476|------|------|------|------| 16477| id | string | 否 | snapshot的id。| 16478| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions) | 否 | web绘制的尺寸,最多支持16000px * 16000px, 长度单位支持px、vp、%,需保持不同参数传入长度单位一致, 默认单位vp,超过规格时返回最大规格。(示例:width:'100px', height:'200px'。或者 width:'20%', height'30%'。只写数字时单位为vp。)| 16479 16480## SnapshotResult<sup>12+</sup> 16481 16482全量绘制回调结果。 16483 16484**系统能力:** SystemCapability.Web.Webview.Core 16485 16486| 名称 | 类型 | 必填 | 说明 | 16487|------|------|--|---------| 16488| id | string | 否 | snapshot的id。| 16489| status | boolean | 否 | snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。| 16490| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions) | 否 | web绘制的真实尺寸,number类型,单位vp。| 16491| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。| 16492 16493## ScrollType<sup>12+</sup> 16494 16495Scroll滚动类型,用于[setScrollable](#setscrollable12)。 16496 16497**系统能力:** SystemCapability.Web.Webview.Core 16498 16499| 名称 | 值 | 说明 | 16500| ------------ | -- |--------------------------------- | 16501| EVENT | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。| 16502 16503## PressureLevel<sup>14+</sup> 16504 16505内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。 16506 16507**系统能力:** SystemCapability.Web.Webview.Core 16508 16509| 名称 | 值 | 说明 | 16510| ------------------------------- | - | ---------- | 16511| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 | 16512| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 | 16513 16514## PdfConfiguration<sup>14+</sup> 16515 16516createPdf函数输入参数。 16517 16518> **说明:** 16519> 16520> 英寸与像素之间转换公式:像素 = 96 * 英寸。 16521 16522**系统能力:** SystemCapability.Web.Webview.Core 16523 16524| 名称 | 类型 | 必填 | 说明 | 16525| --------------------- | ------- | ---- | ------------------------------------------------------------ | 16526| width | number | 是 | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。 | 16527| height | number | 是 | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。 | 16528| scale | number | 否 | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 | 16529| marginTop | number | 是 | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16530| marginBottom | number | 是 | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16531| marginRight | number | 是 | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16532| marginLeft | number | 是 | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16533| shouldPrintBackground | boolean | 否 | 是否打印背景颜色。默认值:false。 | 16534 16535## PdfData<sup>14+</sup> 16536 16537createPdf函数输出数据流类。 16538 16539> **说明:** 16540> 16541> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。 16542 16543### pdfArrayBuffer<sup>14+</sup> 16544 16545pdfArrayBuffer(): Uint8Array 16546 16547获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。 16548 16549**系统能力:** SystemCapability.Web.Webview.Core 16550 16551**返回值:** 16552 16553| 类型 | 说明 | 16554| ---------- | -------- | 16555| Uint8Array | 数据流。 | 16556 16557## ScrollOffset<sup>13+</sup> 16558 16559网页当前的滚动偏移量。 16560 16561**系统能力:** SystemCapability.Web.Webview.Core 16562 16563| 名称 | 类型 | 可读 | 可写 | 说明 | 16564| ---- | ------ | ---- | ---- | ------------------------------------------------------------ | 16565| x | number | 是 | 是 | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 | 16566| y | number | 是 | 是 | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 | 16567