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## webview.once 22 23once(type: string, callback: Callback\<void\>): void 24 25订阅一次指定类型Web事件的回调,Web事件的类型目前仅支持"webInited",在Web引擎初始化完成时触发。 26 27当应用中开始加载第一个Web组件时,Web引擎初始化,且后续再在同一应用中继续加载其他Web组件时不会再触发once接口。当应用销毁最后一个Web组件时,若再加载第一个Web组件,应用重新进入Web引擎初始化流程。 28 29**系统能力:** SystemCapability.Web.Webview.Core 30 31**参数:** 32 33| 参数名 | 类型 | 必填 | 说明 | 34| ------- | ---------------- | ---- | -------------------- | 35| type | string | 是 | Web事件的类型,目前支持:"webInited"(Web初始化完成)。 | 36| callback | Callback\<void\> | 是 | 所订阅的回调函数。 | 37 38**错误码:** 39 40以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 41 42| 错误码ID | 错误信息 | 43| -------- | ----------------------- | 44| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 45 46**示例:** 47 48```ts 49// xxx.ets 50import { webview } from '@kit.ArkWeb'; 51 52webview.once("webInited", () => { 53 console.log("configCookieSync"); 54 webview.WebCookieManager.configCookieSync("https://www.example.com", "a=b"); 55}) 56 57@Entry 58@Component 59struct WebComponent { 60 controller: webview.WebviewController = new webview.WebviewController(); 61 62 build() { 63 Column() { 64 Web({ src: 'www.example.com', controller: this.controller }) 65 } 66 } 67} 68``` 69 70## WebMessagePort 71 72通过WebMessagePort可以进行消息的发送以及接收,发送[WebMessageType](#webmessagetype10)/[WebMessage](#webmessage)类型消息给HTML5侧。 73 74### 属性 75 76**系统能力:** SystemCapability.Web.Webview.Core 77 78| 名称 | 类型 | 可读 | 可写 | 说明 | 79| ------------ | ------ | ---- | ---- | ------------------------------------------------| 80| isExtentionType<sup>10+</sup> | boolean | 是 | 是 | 创建WebMessagePort时是否指定使用扩展增强接口,[postMessageEventExt](#postmessageeventext10)、[onMessageEventExt](#onmessageeventext10),默认false不使用。 | 81 82### postMessageEvent 83 84postMessageEvent(message: WebMessage): void 85 86发送[WebMessage](#webmessage)类型消息给HTML5侧,必须先调用[onMessageEvent](#onmessageevent),否则会发送失败。完整示例代码参考[postMessage](#postmessage)。 87 88**系统能力:** SystemCapability.Web.Webview.Core 89 90**参数:** 91 92| 参数名 | 类型 | 必填 | 说明 | 93| ------- | ------ | ---- | :------------- | 94| message | [WebMessage](#webmessage) | 是 | 要发送的消息。 | 95 96**错误码:** 97 98以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 99 100| 错误码ID | 错误信息 | 101| -------- | ------------------------------------- | 102| 17100010 | Failed to post messages through the port. | 103| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 104 105**示例:** 106 107```ts 108// xxx.ets 109import { webview } from '@kit.ArkWeb'; 110import { BusinessError } from '@kit.BasicServicesKit'; 111 112@Entry 113@Component 114struct WebComponent { 115 controller: webview.WebviewController = new webview.WebviewController(); 116 ports: webview.WebMessagePort[] = []; 117 118 build() { 119 Column() { 120 Button('postMessageEvent') 121 .onClick(() => { 122 try { 123 this.ports = this.controller.createWebMessagePorts(); 124 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 125 this.ports[1].postMessageEvent("post message from ets to html5"); 126 } catch (error) { 127 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 128 } 129 }) 130 Web({ src: 'www.example.com', controller: this.controller }) 131 } 132 } 133} 134``` 135 136### onMessageEvent 137 138onMessageEvent(callback: (result: WebMessage) => void): void 139 140在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessage](#webmessage)类型消息。完整示例代码参考[postMessage](#postmessage)。 141 142**系统能力:** SystemCapability.Web.Webview.Core 143 144**参数:** 145 146| 参数名 | 类型 | 必填 | 说明 | 147| -------- | -------- | ---- | :------------------- | 148| callback | (result: [WebMessage](#webmessage)) => void | 是 | 接收到的消息。 | 149 150**错误码:** 151 152以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 153 154| 错误码ID | 错误信息 | 155| -------- | ----------------------------------------------- | 156| 17100006 | Failed to register a message event for the port.| 157| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.| 158 159**示例:** 160 161```ts 162// xxx.ets 163import { webview } from '@kit.ArkWeb'; 164import { BusinessError } from '@kit.BasicServicesKit'; 165 166@Entry 167@Component 168struct WebComponent { 169 controller: webview.WebviewController = new webview.WebviewController(); 170 ports: webview.WebMessagePort[] = []; 171 172 build() { 173 Column() { 174 Button('onMessageEvent') 175 .onClick(() => { 176 try { 177 this.ports = this.controller.createWebMessagePorts(); 178 this.ports[1].onMessageEvent((msg) => { 179 if (typeof (msg) == "string") { 180 console.log("received string message from html5, string is:" + msg); 181 } else if (typeof (msg) == "object") { 182 if (msg instanceof ArrayBuffer) { 183 console.log("received arraybuffer from html5, length is:" + msg.byteLength); 184 } else { 185 console.log("not support"); 186 } 187 } else { 188 console.log("not support"); 189 } 190 }) 191 } catch (error) { 192 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 193 } 194 }) 195 Web({ src: 'www.example.com', controller: this.controller }) 196 } 197 } 198} 199``` 200 201### postMessageEventExt<sup>10+</sup> 202 203postMessageEventExt(message: WebMessageExt): void 204 205发送[WebMessageType](#webmessagetype10)类型消息给HTML5侧,必须先调用[onMessageEventExt](#onmessageeventext10),否则会发送失败。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 206 207**系统能力:** SystemCapability.Web.Webview.Core 208 209**参数:** 210 211| 参数名 | 类型 | 必填 | 说明 | 212| ------- | ------ | ---- | :------------- | 213| message | [WebMessageExt](#webmessageext10) | 是 | 要发送的消息。 | 214 215**错误码:** 216 217以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 218 219| 错误码ID | 错误信息 | 220| -------- | ------------------------------------- | 221| 17100010 | Failed to post messages through the port. | 222| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 223 224### onMessageEventExt<sup>10+</sup> 225 226onMessageEventExt(callback: (result: WebMessageExt) => void): void 227 228在应用侧的消息端口上注册回调函数,接收HTML5侧发送过来的[WebMessageType](#webmessagetype10)类型消息。 229 230**系统能力:** SystemCapability.Web.Webview.Core 231 232**参数:** 233 234| 参数名 | 类型 | 必填 | 说明 | 235| -------- | -------- | ---- | :------------------- | 236| callback | (result: [WebMessageExt](#webmessageext10)) => void | 是 | 接收到的消息。 | 237 238**错误码:** 239 240以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 241 242| 错误码ID | 错误信息 | 243| -------- | ----------------------------------------------- | 244| 17100006 | Failed to register a message event for the port. | 245| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 246 247**示例:** 248 249```ts 250// xxx.ets 251import { webview } from '@kit.ArkWeb'; 252import { BusinessError } from '@kit.BasicServicesKit'; 253 254class TestObj { 255 test(str: string): ArrayBuffer { 256 let buf = new ArrayBuffer(str.length); 257 let buff = new Uint8Array(buf); 258 259 for (let i = 0; i < str.length; i++) { 260 buff[i] = str.charCodeAt(i); 261 } 262 return buf; 263 } 264} 265 266// 应用与网页互发消息的示例:使用"init_web_messageport"的通道,通过端口0在应用侧接受网页发送的消息,通过端口1在网页侧接受应用发送的消息。 267@Entry 268@Component 269struct WebComponent { 270 controller: webview.WebviewController = new webview.WebviewController(); 271 ports: webview.WebMessagePort[] = []; 272 nativePort: webview.WebMessagePort | null = null; 273 @State msg1: string = ""; 274 @State msg2: string = ""; 275 message: webview.WebMessageExt = new webview.WebMessageExt(); 276 @State testObjtest: TestObj = new TestObj(); 277 278 build() { 279 Column() { 280 Text(this.msg1).fontSize(16) 281 Text(this.msg2).fontSize(16) 282 Button('SendToH5 setString').margin({ 283 right: 800, 284 }) 285 .onClick(() => { 286 // 使用本侧端口发送消息给HTML5 287 try { 288 console.log("In ArkTS side send true start"); 289 if (this.nativePort) { 290 this.message.setType(1); 291 this.message.setString("helloFromEts"); 292 this.nativePort.postMessageEventExt(this.message); 293 } 294 } 295 catch (error) { 296 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 297 } 298 }) 299 Button('SendToH5 setNumber').margin({ 300 top: 10, 301 right: 800, 302 }) 303 .onClick(() => { 304 // 使用本侧端口发送消息给HTML5 305 try { 306 console.log("In ArkTS side send true start"); 307 if (this.nativePort) { 308 this.message.setType(2); 309 this.message.setNumber(12345); 310 this.nativePort.postMessageEventExt(this.message); 311 } 312 } 313 catch (error) { 314 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 315 } 316 }) 317 Button('SendToH5 setBoolean').margin({ 318 top: -90, 319 }) 320 .onClick(() => { 321 // 使用本侧端口发送消息给HTML5 322 try { 323 console.log("In ArkTS side send true start"); 324 if (this.nativePort) { 325 this.message.setType(3); 326 this.message.setBoolean(true); 327 this.nativePort.postMessageEventExt(this.message); 328 } 329 } 330 catch (error) { 331 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 332 } 333 }) 334 Button('SendToH5 setArrayBuffer').margin({ 335 top: 10, 336 }) 337 .onClick(() => { 338 // 使用本侧端口发送消息给HTML5 339 try { 340 console.log("In ArkTS side send true start"); 341 if (this.nativePort) { 342 this.message.setType(4); 343 this.message.setArrayBuffer(this.testObjtest.test("Name=test&Password=test")); 344 this.nativePort.postMessageEventExt(this.message); 345 } 346 } 347 catch (error) { 348 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 349 } 350 }) 351 Button('SendToH5 setArray').margin({ 352 top: -90, 353 left: 800, 354 }) 355 .onClick(() => { 356 // 使用本侧端口发送消息给HTML5 357 try { 358 console.log("In ArkTS side send true start"); 359 if (this.nativePort) { 360 this.message.setType(5); 361 this.message.setArray([1, 2, 3]); 362 this.nativePort.postMessageEventExt(this.message); 363 } 364 } 365 catch (error) { 366 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 367 } 368 }) 369 Button('SendToH5 setError').margin({ 370 top: 10, 371 left: 800, 372 }) 373 .onClick(() => { 374 // 使用本侧端口发送消息给HTML5 375 try { 376 console.log("In ArkTS side send true start"); 377 throw new ReferenceError("ReferenceError"); 378 } 379 catch (error) { 380 if (this.nativePort) { 381 this.message.setType(6); 382 this.message.setError(error); 383 this.nativePort.postMessageEventExt(this.message); 384 } 385 console.error(`In ArkTS side send message catch error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 386 } 387 }) 388 389 Web({ src: $rawfile('index.html'), controller: this.controller }) 390 .onPageEnd(() => { 391 console.log("In ArkTS side message onPageEnd init message channel"); 392 // 1. 创建消息端口 393 this.ports = this.controller.createWebMessagePorts(true); 394 // 2. 发送端口1到HTML5 395 this.controller.postMessage("init_web_messageport", [this.ports[1]], "*"); 396 // 3. 保存端口0到本地 397 this.nativePort = this.ports[0]; 398 // 4. 设置回调函数 399 this.nativePort.onMessageEventExt((result) => { 400 console.log("In ArkTS side got message"); 401 try { 402 let type = result.getType(); 403 console.log("In ArkTS side getType:" + type); 404 switch (type) { 405 case webview.WebMessageType.STRING: { 406 this.msg1 = "result type:" + typeof (result.getString()); 407 this.msg2 = "result getString:" + ((result.getString())); 408 break; 409 } 410 case webview.WebMessageType.NUMBER: { 411 this.msg1 = "result type:" + typeof (result.getNumber()); 412 this.msg2 = "result getNumber:" + ((result.getNumber())); 413 break; 414 } 415 case webview.WebMessageType.BOOLEAN: { 416 this.msg1 = "result type:" + typeof (result.getBoolean()); 417 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 418 break; 419 } 420 case webview.WebMessageType.ARRAY_BUFFER: { 421 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 422 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 423 break; 424 } 425 case webview.WebMessageType.ARRAY: { 426 this.msg1 = "result type:" + typeof (result.getArray()); 427 this.msg2 = "result getArray:" + result.getArray(); 428 break; 429 } 430 case webview.WebMessageType.ERROR: { 431 this.msg1 = "result type:" + typeof (result.getError()); 432 this.msg2 = "result getError:" + result.getError(); 433 break; 434 } 435 default: { 436 this.msg1 = "default break, type:" + type; 437 break; 438 } 439 } 440 } 441 catch (error) { 442 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 443 } 444 }); 445 }) 446 } 447 } 448} 449``` 450 451加载的html文件。 452```html 453<!--index.html--> 454<!DOCTYPE html> 455<html lang="en-gb"> 456<head> 457 <title>WebView MessagePort Demo</title> 458</head> 459 460<body> 461<h1>Html5 Send and Receive Message</h1> 462<h3 id="msg">Receive string:</h3> 463<h3 id="msg2">Receive arraybuffer:</h3> 464<div style="font-size: 10pt; text-align: center;"> 465 <input type="button" value="Send String" onclick="postStringToApp();" /><br/> 466</div> 467</body> 468<script src="index.js"></script> 469</html> 470``` 471 472```js 473//index.js 474var h5Port; 475window.addEventListener('message', function(event) { 476 if (event.data == 'init_web_messageport') { 477 if(event.ports[0] != null) { 478 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 479 h5Port.onmessage = function(event) { 480 console.log("hwd In html got message"); 481 // 2. 接收ets侧发送过来的消息. 482 var result = event.data; 483 console.log("In html got message, typeof: ", typeof(result)); 484 console.log("In html got message, result: ", (result)); 485 if (typeof(result) == "string") { 486 console.log("In html got message, String: ", result); 487 document.getElementById("msg").innerHTML = "String:" + result; 488 } else if (typeof(result) == "number") { 489 console.log("In html side got message, number: ", result); 490 document.getElementById("msg").innerHTML = "Number:" + result; 491 } else if (typeof(result) == "boolean") { 492 console.log("In html side got message, boolean: ", result); 493 document.getElementById("msg").innerHTML = "Boolean:" + result; 494 } else if (typeof(result) == "object") { 495 if (result instanceof ArrayBuffer) { 496 document.getElementById("msg2").innerHTML = "ArrayBuffer:" + result.byteLength; 497 console.log("In html got message, byteLength: ", result.byteLength); 498 } else if (result instanceof Error) { 499 console.log("In html error message, err:" + (result)); 500 console.log("In html error message, typeof err:" + typeof(result)); 501 document.getElementById("msg2").innerHTML = "Error:" + result.name + ", msg:" + result.message; 502 } else if (result instanceof Array) { 503 console.log("In html got message, Array"); 504 console.log("In html got message, Array length:" + result.length); 505 console.log("In html got message, Array[0]:" + (result[0])); 506 console.log("In html got message, typeof Array[0]:" + typeof(result[0])); 507 document.getElementById("msg2").innerHTML = "Array len:" + result.length + ", value:" + result; 508 } else { 509 console.log("In html got message, not any instance of support type"); 510 document.getElementById("msg").innerHTML = "not any instance of support type"; 511 } 512 } else { 513 console.log("In html got message, not support type"); 514 document.getElementById("msg").innerHTML = "not support type"; 515 } 516 } 517 h5Port.onmessageerror = (event) => { 518 console.error(`hwd In html Error receiving message: ${event}`); 519 }; 520 } 521 } 522}) 523 524// 使用h5Port往ets侧发送String类型的消息. 525function postStringToApp() { 526 if (h5Port) { 527 console.log("In html send string message"); 528 h5Port.postMessage("hello"); 529 console.log("In html send string message end"); 530 } else { 531 console.error("In html h5port is null, please init first"); 532 } 533} 534``` 535 536### close 537 538close(): void 539 540不需要发送消息时关闭该消息端口。在使用close前,请先使用[createWebMessagePorts](#createwebmessageports)创建消息端口。 541 542**系统能力:** SystemCapability.Web.Webview.Core 543 544**示例:** 545 546```ts 547// xxx.ets 548import { webview } from '@kit.ArkWeb'; 549import { BusinessError } from '@kit.BasicServicesKit'; 550 551@Entry 552@Component 553struct WebComponent { 554 controller: webview.WebviewController = new webview.WebviewController(); 555 msgPort: webview.WebMessagePort[] = []; 556 557 build() { 558 Column() { 559 // 先使用createWebMessagePorts创建端口。 560 Button('createWebMessagePorts') 561 .onClick(() => { 562 try { 563 this.msgPort = this.controller.createWebMessagePorts(); 564 console.log("createWebMessagePorts size:" + this.msgPort.length) 565 } catch (error) { 566 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 567 } 568 }) 569 Button('close') 570 .onClick(() => { 571 try { 572 if (this.msgPort && this.msgPort.length == 2) { 573 this.msgPort[1].close(); 574 } else { 575 console.error("msgPort is null, Please initialize first"); 576 } 577 } catch (error) { 578 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 579 } 580 }) 581 Web({ src: 'www.example.com', controller: this.controller }) 582 } 583 } 584} 585``` 586 587## WebviewController 588 589通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。 590 591### constructor<sup>11+</sup> 592 593constructor(webTag?: string) 594 595用于创建 WebviewController 对象的构造函数。 596 597> **说明:** 598> 599> 不传参:new webview.WebviewController()表示构造函数为空,不使用C API时不需要传参。 600> 601> 传参且参数是合法字符串:new webview.WebviewController("xxx"),用于开发者区分多实例,并调用对应实例下的方法。 602> 603> 传入参数为空:new webview.WebviewController("")或new webview.WebviewController(undefined),该场景下参数无意义,无法区分多个实例,直接返回undefined,需要开发者判断返回值是否正常。 604 605**系统能力:** SystemCapability.Web.Webview.Core 606 607**参数:** 608 609| 参数名 | 类型 | 必填 | 说明 | 610| ---------- | ------ | ---- | -------------------------------- | 611| webTag | string | 否 | 指定了 Web 组件的名称。 | 612 613**示例:** 614 615```ts 616// xxx.ets 617import { webview } from '@kit.ArkWeb'; 618import { BusinessError } from '@kit.BasicServicesKit'; 619 620class WebObj { 621 constructor() { 622 } 623 624 webTest(): string { 625 console.log('Web test'); 626 return "Web test"; 627 } 628 629 webString(): void { 630 console.log('Web test toString'); 631 } 632} 633 634@Entry 635@Component 636struct WebComponent { 637 controller: webview.WebviewController = new webview.WebviewController() 638 @State webTestObj: WebObj = new WebObj(); 639 640 build() { 641 Column() { 642 Button('refresh') 643 .onClick(() => { 644 try { 645 this.controller.refresh(); 646 } catch (error) { 647 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 648 } 649 }) 650 Button('deleteJavaScriptRegister') 651 .onClick(() => { 652 try { 653 this.controller.deleteJavaScriptRegister("objTestName"); 654 } catch (error) { 655 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 656 } 657 }) 658 Web({ src: '', controller: this.controller }) 659 .javaScriptAccess(true) 660 .onControllerAttached(() => { 661 this.controller.loadUrl($rawfile("index.html")); 662 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 663 }) 664 } 665 } 666} 667``` 668 669加载的html文件。 670```html 671<!-- index.html --> 672<!DOCTYPE html> 673<html> 674 <meta charset="utf-8"> 675 <body> 676 <button type="button" onclick="htmlTest()">Click Me!</button> 677 <p id="demo"></p> 678 <p id="webDemo"></p> 679 </body> 680 <script type="text/javascript"> 681 function htmlTest() { 682 // This function call expects to return "Web test" 683 let webStr = objTestName.webTest(); 684 document.getElementById("webDemo").innerHTML=webStr; 685 console.log('objTestName.webTest result:'+ webStr) 686 } 687</script> 688</html> 689``` 690 691### initializeWebEngine 692 693static initializeWebEngine(): void 694 695在 Web 组件初始化之前,通过此接口加载 Web 引擎的动态库文件,以提高启动性能。自动预连接历史访问过的高频网站。 696 697> **说明:** 698> 699> - initializeWebEngine不支持在异步线程中调用,否则会造成崩溃。 700> - initializeWebEngine全局生效,在整个APP生命周期中调用一次即可,不需要重复调用。 701 702**系统能力:** SystemCapability.Web.Webview.Core 703 704**示例:** 705 706本示例以EntryAbility为例,描述了在 Ability 创建阶段完成 Web 组件动态库加载的功能。 707 708```ts 709// xxx.ets 710import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 711import { webview } from '@kit.ArkWeb'; 712 713export default class EntryAbility extends UIAbility { 714 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 715 console.log("EntryAbility onCreate") 716 webview.WebviewController.initializeWebEngine() 717 console.log("EntryAbility onCreate done") 718 } 719} 720``` 721 722### setHttpDns<sup>10+</sup> 723 724static setHttpDns(secureDnsMode:SecureDnsMode, secureDnsConfig:string): void 725 726设置Web组件是否使用HTTPDNS解析dns。 727 728**系统能力:** SystemCapability.Web.Webview.Core 729 730**参数:** 731 732| 参数名 | 类型 | 必填 | 说明 | 733| ------------------ | ------- | ---- | ------------- | 734| secureDnsMode | [SecureDnsMode](#securednsmode10) | 是 | 使用HTTPDNS的模式。| 735| secureDnsConfig | string | 是 | HTTPDNS server的配置,必须是https协议并且只允许配置一个server。 | 736 737**错误码:** 738 739以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 740 741| 错误码ID | 错误信息 | 742| -------- | ----------------------- | 743| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 744 745**示例:** 746 747```ts 748// xxx.ets 749import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 750import { webview } from '@kit.ArkWeb'; 751import { BusinessError } from '@kit.BasicServicesKit'; 752 753export default class EntryAbility extends UIAbility { 754 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 755 console.log("EntryAbility onCreate") 756 try { 757 webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, "https://example1.test") 758 } catch (error) { 759 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 760 } 761 762 AppStorage.setOrCreate("abilityWant", want); 763 console.log("EntryAbility onCreate done") 764 } 765} 766``` 767 768### setWebDebuggingAccess 769 770static setWebDebuggingAccess(webDebuggingAccess: boolean): void 771 772设置是否启用网页调试功能,默认不开启。详情请参考[DevTools工具](../../web/web-debugging-with-devtools.md)。 773 774安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。 775 776**系统能力:** SystemCapability.Web.Webview.Core 777 778**参数:** 779 780| 参数名 | 类型 | 必填 | 说明 | 781| ------------------ | ------- | ---- | ------------- | 782| webDebuggingAccess | boolean | 是 | 设置是否启用网页调试功能。设置为true,表示启用网页调试功能。设置为false,表示不启用网页调试功能。 | 783 784**错误码:** 785 786以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 787 788| 错误码ID | 错误信息 | 789| -------- | ------------------------------------------------------------ | 790| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 791 792**示例:** 793 794```ts 795// xxx.ets 796import { webview } from '@kit.ArkWeb'; 797import { BusinessError } from '@kit.BasicServicesKit'; 798 799@Entry 800@Component 801struct WebComponent { 802 controller: webview.WebviewController = new webview.WebviewController(); 803 804 aboutToAppear(): void { 805 try { 806 webview.WebviewController.setWebDebuggingAccess(true); 807 } catch (error) { 808 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 809 } 810 } 811 812 build() { 813 Column() { 814 Web({ src: 'www.example.com', controller: this.controller }) 815 } 816 } 817} 818``` 819 820### loadUrl 821 822loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 823 824加载指定的URL。 825 826**系统能力:** SystemCapability.Web.Webview.Core 827 828**参数:** 829 830| 参数名 | 类型 | 必填 | 说明 | 831| ------- | ---------------- | ---- | :-------------------- | 832| url | string \| Resource | 是 | 需要加载的 URL。 | 833| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 834 835**错误码:** 836 837以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 838 839| 错误码ID | 错误信息 | 840| -------- | ------------------------------------------------------------ | 841| 17100001 | Init error. The WebviewController must be associated with a Web component. | 842| 17100002 | Invalid url. | 843| 17100003 | Invalid resource path or file type. | 844| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 845 846**示例:** 847 848```ts 849// xxx.ets 850import { webview } from '@kit.ArkWeb'; 851import { BusinessError } from '@kit.BasicServicesKit'; 852 853@Entry 854@Component 855struct WebComponent { 856 controller: webview.WebviewController = new webview.WebviewController(); 857 858 build() { 859 Column() { 860 Button('loadUrl') 861 .onClick(() => { 862 try { 863 // 需要加载的URL是string类型。 864 this.controller.loadUrl('www.example.com'); 865 } catch (error) { 866 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 867 } 868 }) 869 Web({ src: 'www.example.com', controller: this.controller }) 870 } 871 } 872} 873``` 874 875```ts 876// xxx.ets 877import { webview } from '@kit.ArkWeb'; 878import { BusinessError } from '@kit.BasicServicesKit'; 879 880@Entry 881@Component 882struct WebComponent { 883 controller: webview.WebviewController = new webview.WebviewController(); 884 885 build() { 886 Column() { 887 Button('loadUrl') 888 .onClick(() => { 889 try { 890 // 带参数headers。 891 this.controller.loadUrl('www.example.com', [{ headerKey: "headerKey", headerValue: "headerValue" }]); 892 } catch (error) { 893 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 894 } 895 }) 896 Web({ src: 'www.example.com', controller: this.controller }) 897 } 898 } 899} 900``` 901 902加载本地网页,加载本地资源文件有三种方式。 903 9041.$rawfile方式。 905```ts 906// xxx.ets 907import { webview } from '@kit.ArkWeb'; 908import { BusinessError } from '@kit.BasicServicesKit'; 909 910@Entry 911@Component 912struct WebComponent { 913 controller: webview.WebviewController = new webview.WebviewController(); 914 915 build() { 916 Column() { 917 Button('loadUrl') 918 .onClick(() => { 919 try { 920 // 通过$rawfile加载本地资源文件。 921 this.controller.loadUrl($rawfile('index.html')); 922 } catch (error) { 923 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 924 } 925 }) 926 Web({ src: 'www.example.com', controller: this.controller }) 927 } 928 } 929} 930``` 931 9322.resources协议,适用Webview加载带有"#"路由的链接。 933```ts 934// xxx.ets 935import { webview } from '@kit.ArkWeb'; 936import { BusinessError } from '@kit.BasicServicesKit'; 937 938@Entry 939@Component 940struct WebComponent { 941 controller: webview.WebviewController = new webview.WebviewController(); 942 943 build() { 944 Column() { 945 Button('loadUrl') 946 .onClick(() => { 947 try { 948 // 通过resource协议加载本地资源文件。 949 this.controller.loadUrl("resource://rawfile/index.html"); 950 } catch (error) { 951 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 952 } 953 }) 954 Web({ src: 'www.example.com', controller: this.controller }) 955 } 956 } 957} 958``` 959 9603.通过沙箱路径加载本地文件,可以参考[web](../../web/web-page-loading-with-web-components.md#加载本地页面)加载沙箱路径的示例代码。 961 962加载的html文件。 963```html 964<!-- index.html --> 965<!DOCTYPE html> 966<html> 967 <body> 968 <p>Hello World</p> 969 </body> 970</html> 971``` 972 973### loadData 974 975loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void 976 977加载指定的数据。 978 979baseUrl与historyUrl同时为空的情况下: 980 981encoding如果为非base64(包括空值),则假定数据对安全URL字符范围内的八位字节使用ASCII编码,对该范围外的八位字节使用URL的标准%xx十六进制编码。 982 983data数据必须使用base64编码或将内容中的任何#字符编码为%23。否则#将被视为内容的结尾而剩余的文本将被用作文档片段标识符。 984 985**系统能力:** SystemCapability.Web.Webview.Core 986 987**参数:** 988 989| 参数名 | 类型 | 必填 | 说明 | 990| ---------- | ------ | ---- | ------------------------------------------------------------ | 991| data | string | 是 | 按照"base64"或者"URL"编码后的一段字符串。 | 992| mimeType | string | 是 | 媒体类型(MIME)。 | 993| encoding | string | 是 | 编码类型,具体为"base64"或者"URL"编码。 | 994| baseUrl | string | 否 | 指定的一个URL路径("http"/"https"/"data"协议),并由Web组件赋值给window.origin。当加载大量html文件时,需设置为"data"。 | 995| historyUrl | string | 否 | 用作历史记录所使用的URL。非空时,历史记录以此URL进行管理。当baseUrl为空时,此属性无效。 | 996 997> **说明:** 998> 999> 若加载本地图片,可以给baseUrl或historyUrl任一参数赋值空格,详情请参考示例代码。 1000> 加载本地图片场景,baseUrl和historyUrl不能同时为空,否则图片无法成功加载。 1001> 若html中的富文本中带有注入#等特殊字符,建议将baseUrl和historyUrl两个参数的值设置为"空格"。 1002 1003**错误码:** 1004 1005以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1006 1007| 错误码ID | 错误信息 | 1008| -------- | ------------------------------------------------------------ | 1009| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1010| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1011 1012**示例:** 1013 1014baseUrl与historyUrl同时为空。 1015```ts 1016// xxx.ets 1017import { webview } from '@kit.ArkWeb'; 1018import { BusinessError } from '@kit.BasicServicesKit'; 1019 1020@Entry 1021@Component 1022struct WebComponent { 1023 controller: webview.WebviewController = new webview.WebviewController(); 1024 1025 build() { 1026 Column() { 1027 Button('loadData') 1028 .onClick(() => { 1029 try { 1030 this.controller.loadData( 1031 "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>", 1032 "text/html", 1033 // UTF-8为charset。 1034 "UTF-8" 1035 ); 1036 } catch (error) { 1037 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1038 } 1039 }) 1040 Web({ src: 'www.example.com', controller: this.controller }) 1041 } 1042 } 1043} 1044``` 1045 1046```ts 1047// xxx.ets 1048import { webview } from '@kit.ArkWeb'; 1049import { BusinessError } from '@kit.BasicServicesKit'; 1050 1051@Entry 1052@Component 1053struct WebComponent { 1054 controller: webview.WebviewController = new webview.WebviewController(); 1055 1056 build() { 1057 Column() { 1058 Button('loadData') 1059 .onClick(() => { 1060 try { 1061 this.controller.loadData( 1062 // Coding tests通过base64编码后的字符串。 1063 "Q29kaW5nIHRlc3Rz", 1064 "text/html", 1065 "base64" 1066 ); 1067 } catch (error) { 1068 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1069 } 1070 }) 1071 Web({ src: 'www.example.com', controller: this.controller }) 1072 } 1073 } 1074} 1075``` 1076 1077加载本地资源 1078```ts 1079// xxx.ets 1080import { webview } from '@kit.ArkWeb'; 1081import { BusinessError } from '@kit.BasicServicesKit'; 1082 1083@Entry 1084@Component 1085struct WebComponent { 1086 controller: webview.WebviewController = new webview.WebviewController(); 1087 updataContent: string = '<body><div><image src=resource://rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>' 1088 1089 build() { 1090 Column() { 1091 Button('loadData') 1092 .onClick(() => { 1093 try { 1094 // UTF-8为charset。 1095 this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " "); 1096 } catch (error) { 1097 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1098 } 1099 }) 1100 Web({ src: 'www.example.com', controller: this.controller }) 1101 } 1102 } 1103} 1104``` 1105 1106### accessForward 1107 1108accessForward(): boolean 1109 1110当前页面是否可前进,即当前页面是否有前进历史记录。 1111 1112可以结合使用[getBackForwardEntries](#getbackforwardentries)来获取当前WebView的历史信息列表,以及使用[accessStep](#accessstep)来判断是否可以按照给定的步数前进或后退。 1113 1114**系统能力:** SystemCapability.Web.Webview.Core 1115 1116**返回值:** 1117 1118| 类型 | 说明 | 1119| ------- | --------------------------------- | 1120| boolean | 可以前进返回true,否则返回false。 | 1121 1122**错误码:** 1123 1124以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1125 1126| 错误码ID | 错误信息 | 1127| -------- | ------------------------------------------------------------ | 1128| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1129 1130**示例:** 1131 1132```ts 1133// xxx.ets 1134import { webview } from '@kit.ArkWeb'; 1135import { BusinessError } from '@kit.BasicServicesKit'; 1136 1137@Entry 1138@Component 1139struct WebComponent { 1140 controller: webview.WebviewController = new webview.WebviewController(); 1141 1142 build() { 1143 Column() { 1144 Button('accessForward') 1145 .onClick(() => { 1146 try { 1147 let result = this.controller.accessForward(); 1148 console.log('result:' + result); 1149 } catch (error) { 1150 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1151 } 1152 }) 1153 Web({ src: 'www.example.com', controller: this.controller }) 1154 } 1155 } 1156} 1157``` 1158 1159### forward 1160 1161forward(): void 1162 1163按照历史栈,前进一个页面。一般结合accessForward一起使用。 1164 1165**系统能力:** SystemCapability.Web.Webview.Core 1166 1167**错误码:** 1168 1169以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1170 1171| 错误码ID | 错误信息 | 1172| -------- | ------------------------------------------------------------ | 1173| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1174 1175**示例:** 1176 1177```ts 1178// xxx.ets 1179import { webview } from '@kit.ArkWeb'; 1180import { BusinessError } from '@kit.BasicServicesKit'; 1181 1182@Entry 1183@Component 1184struct WebComponent { 1185 controller: webview.WebviewController = new webview.WebviewController(); 1186 1187 build() { 1188 Column() { 1189 Button('forward') 1190 .onClick(() => { 1191 try { 1192 this.controller.forward(); 1193 } catch (error) { 1194 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1195 } 1196 }) 1197 Web({ src: 'www.example.com', controller: this.controller }) 1198 } 1199 } 1200} 1201``` 1202 1203### accessBackward 1204 1205accessBackward(): boolean 1206 1207当前页面是否可后退,即当前页面是否有返回历史记录。 1208 1209可以结合使用[getBackForwardEntries](#getbackforwardentries)来获取当前WebView的历史信息列表,以及使用[accessStep](#accessstep)来判断是否可以按照给定的步数前进或后退。 1210 1211> **说明:** 1212> 1213> 在Web组件首次加载过程中调用[setCustomUserAgent](#setcustomuseragent10),可能会导致在当前存在多个历史节点的情况下,获取的accessBackForward实际为false,即没有后退节点。建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。 1214> 1215> 该现象是由于在Web组件首次加载时,调用[setCustomUserAgent](#setcustomuseragent10)会导致组件重新加载并保持初始历史节点的状态。随后新增的节点将替换初始历史节点,不会生成新的历史节点,导致accessBackward为false。 1216 1217**系统能力:** SystemCapability.Web.Webview.Core 1218 1219**返回值:** 1220 1221| 类型 | 说明 | 1222| ------- | -------------------------------- | 1223| boolean | 可以后退返回true,否则返回false。 | 1224 1225**错误码:** 1226 1227以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1228 1229| 错误码ID | 错误信息 | 1230| -------- | ------------------------------------------------------------ | 1231| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1232 1233**示例:** 1234 1235```ts 1236// xxx.ets 1237import { webview } from '@kit.ArkWeb'; 1238import { BusinessError } from '@kit.BasicServicesKit'; 1239 1240@Entry 1241@Component 1242struct WebComponent { 1243 controller: webview.WebviewController = new webview.WebviewController(); 1244 1245 build() { 1246 Column() { 1247 Button('accessBackward') 1248 .onClick(() => { 1249 try { 1250 let result = this.controller.accessBackward(); 1251 console.log('result:' + result); 1252 } catch (error) { 1253 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1254 } 1255 }) 1256 Web({ src: 'www.example.com', controller: this.controller }) 1257 } 1258 } 1259} 1260``` 1261 1262### backward 1263 1264backward(): void 1265 1266按照历史栈,后退一个页面。一般结合accessBackward一起使用。 1267 1268**系统能力:** SystemCapability.Web.Webview.Core 1269 1270**错误码:** 1271 1272以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1273 1274| 错误码ID | 错误信息 | 1275| -------- | ------------------------------------------------------------ | 1276| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1277 1278**示例:** 1279 1280```ts 1281// xxx.ets 1282import { webview } from '@kit.ArkWeb'; 1283import { BusinessError } from '@kit.BasicServicesKit'; 1284 1285@Entry 1286@Component 1287struct WebComponent { 1288 controller: webview.WebviewController = new webview.WebviewController(); 1289 1290 build() { 1291 Column() { 1292 Button('backward') 1293 .onClick(() => { 1294 try { 1295 this.controller.backward(); 1296 } catch (error) { 1297 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1298 } 1299 }) 1300 Web({ src: 'www.example.com', controller: this.controller }) 1301 } 1302 } 1303} 1304``` 1305 1306### onActive 1307 1308onActive(): void 1309 1310调用此接口通知Web组件进入前台激活状态。 1311<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。 1312 1313**系统能力:** SystemCapability.Web.Webview.Core 1314 1315**错误码:** 1316 1317以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1318 1319| 错误码ID | 错误信息 | 1320| -------- | ------------------------------------------------------------ | 1321| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1322 1323**示例:** 1324 1325```ts 1326// xxx.ets 1327import { webview } from '@kit.ArkWeb'; 1328import { BusinessError } from '@kit.BasicServicesKit'; 1329 1330@Entry 1331@Component 1332struct WebComponent { 1333 controller: webview.WebviewController = new webview.WebviewController(); 1334 1335 build() { 1336 Column() { 1337 Button('onActive') 1338 .onClick(() => { 1339 try { 1340 this.controller.onActive(); 1341 } catch (error) { 1342 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1343 } 1344 }) 1345 Web({ src: 'www.example.com', controller: this.controller }) 1346 } 1347 } 1348} 1349``` 1350 1351### onInactive 1352 1353onInactive(): void 1354 1355调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。 1356 1357此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。 1358 1359**系统能力:** SystemCapability.Web.Webview.Core 1360 1361**错误码:** 1362 1363以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1364 1365| 错误码ID | 错误信息 | 1366| -------- | ------------------------------------------------------------ | 1367| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1368 1369**示例:** 1370 1371```ts 1372// xxx.ets 1373import { webview } from '@kit.ArkWeb'; 1374import { BusinessError } from '@kit.BasicServicesKit'; 1375 1376@Entry 1377@Component 1378struct WebComponent { 1379 controller: webview.WebviewController = new webview.WebviewController(); 1380 1381 build() { 1382 Column() { 1383 Button('onInactive') 1384 .onClick(() => { 1385 try { 1386 this.controller.onInactive(); 1387 } catch (error) { 1388 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1389 } 1390 }) 1391 Web({ src: 'www.example.com', controller: this.controller }) 1392 } 1393 } 1394} 1395``` 1396 1397### refresh 1398refresh(): void 1399 1400调用此接口通知Web组件刷新网页。 1401 1402**系统能力:** SystemCapability.Web.Webview.Core 1403 1404**错误码:** 1405 1406以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1407 1408| 错误码ID | 错误信息 | 1409| -------- | ------------------------------------------------------------ | 1410| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1411 1412**示例:** 1413 1414```ts 1415// xxx.ets 1416import { webview } from '@kit.ArkWeb'; 1417import { BusinessError } from '@kit.BasicServicesKit'; 1418 1419@Entry 1420@Component 1421struct WebComponent { 1422 controller: webview.WebviewController = new webview.WebviewController(); 1423 1424 build() { 1425 Column() { 1426 Button('refresh') 1427 .onClick(() => { 1428 try { 1429 this.controller.refresh(); 1430 } catch (error) { 1431 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1432 } 1433 }) 1434 Web({ src: 'www.example.com', controller: this.controller }) 1435 } 1436 } 1437} 1438``` 1439 1440### accessStep 1441 1442accessStep(step: number): boolean 1443 1444当前页面是否可前进或者后退给定的step步。 1445 1446**系统能力:** SystemCapability.Web.Webview.Core 1447 1448**参数:** 1449 1450| 参数名 | 类型 | 必填 | 说明 | 1451| ------ | -------- | ---- | ------------------------------------------ | 1452| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 1453 1454**返回值:** 1455 1456| 类型 | 说明 | 1457| ------- | ------------------ | 1458| boolean | 页面是否前进或后退,返回true表示可以前进或者后退,返回false表示不可以前进或后退。 | 1459 1460**错误码:** 1461 1462以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1463 1464| 错误码ID | 错误信息 | 1465| -------- | ------------------------------------------------------------ | 1466| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1467| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1468 1469**示例:** 1470 1471```ts 1472// xxx.ets 1473import { webview } from '@kit.ArkWeb'; 1474import { BusinessError } from '@kit.BasicServicesKit'; 1475 1476@Entry 1477@Component 1478struct WebComponent { 1479 controller: webview.WebviewController = new webview.WebviewController(); 1480 @State steps: number = 2; 1481 1482 build() { 1483 Column() { 1484 Button('accessStep') 1485 .onClick(() => { 1486 try { 1487 let result = this.controller.accessStep(this.steps); 1488 console.log('result:' + result); 1489 } catch (error) { 1490 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1491 } 1492 }) 1493 Web({ src: 'www.example.com', controller: this.controller }) 1494 } 1495 } 1496} 1497``` 1498 1499### clearHistory 1500 1501clearHistory(): void 1502 1503删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。 1504 1505**系统能力:** SystemCapability.Web.Webview.Core 1506 1507**错误码:** 1508 1509以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1510 1511| 错误码ID | 错误信息 | 1512| -------- | ------------------------------------------------------------ | 1513| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1514 1515**示例:** 1516 1517```ts 1518// xxx.ets 1519import { webview } from '@kit.ArkWeb'; 1520import { BusinessError } from '@kit.BasicServicesKit'; 1521 1522@Entry 1523@Component 1524struct WebComponent { 1525 controller: webview.WebviewController = new webview.WebviewController(); 1526 1527 build() { 1528 Column() { 1529 Button('clearHistory') 1530 .onClick(() => { 1531 try { 1532 this.controller.clearHistory(); 1533 } catch (error) { 1534 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1535 } 1536 }) 1537 Web({ src: 'www.example.com', controller: this.controller }) 1538 } 1539 } 1540} 1541``` 1542 1543### getHitTest<sup>(deprecated)</sup> 1544 1545getHitTest(): WebHitTestType 1546 1547获取当前被点击区域的元素类型。 1548 1549> **说明:** 1550> 1551> 从API version11开始支持,从API version 18开始废弃。建议使用[getLastHitTest](#getlasthittest18)替代。 1552 1553**系统能力:** SystemCapability.Web.Webview.Core 1554 1555**返回值:** 1556 1557| 类型 | 说明 | 1558| ------------------------------------------------------------ | ---------------------- | 1559| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 1560 1561**错误码:** 1562 1563以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1564 1565| 错误码ID | 错误信息 | 1566| -------- | ------------------------------------------------------------ | 1567| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1568 1569**示例:** 1570 1571```ts 1572// xxx.ets 1573import { webview } from '@kit.ArkWeb'; 1574import { BusinessError } from '@kit.BasicServicesKit'; 1575 1576@Entry 1577@Component 1578struct WebComponent { 1579 controller: webview.WebviewController = new webview.WebviewController(); 1580 1581 build() { 1582 Column() { 1583 Button('getHitTest') 1584 .onClick(() => { 1585 try { 1586 let hitTestType = this.controller.getHitTest(); 1587 console.log("hitTestType: " + hitTestType); 1588 } catch (error) { 1589 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1590 } 1591 }) 1592 Web({ src: 'www.example.com', controller: this.controller }) 1593 } 1594 } 1595} 1596``` 1597 1598### registerJavaScriptProxy 1599 1600registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void 1601 1602registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。 1603<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 1604 1605> **说明:** 1606> 1607> - registerJavaScriptProxy需要和deleteJavaScriptRegister接口配合使用,防止内存泄漏。 1608> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。 1609> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。 1610> - 同一方法在同步与异步列表中重复注册,将默认异步调用。 1611> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。 1612> - 异步的作用在于:H5线程将异步JavaScript任务提交给ETS主线程后,无需等待任务执行完成并返回结果,H5线程即可继续执行后续任务。这在执行耗时较长的JavaScript任务或ETS线程较为拥堵的情况下,可以有效减少H5线程因JavaScript任务而被阻塞的情况。然而,异步JavaScript任务无法返回值,且任务执行的顺序无法保证,因此需要根据具体情境判断是否使用同步或异步方式。 1613 1614**系统能力:** SystemCapability.Web.Webview.Core 1615 1616**参数:** 1617 1618| 参数名 | 类型 | 必填 | 说明 | 1619| ---------- | -------------- | ---- | ------------------------------------------------------------ | 1620| object | object | 是 | 参与注册的应用侧JavaScript对象。可以单独声明方法和属性,但无法同时进行注册与使用。对象只包含属性时,H5可以访问对象中的属性。对象只包含方法时,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)。 | 1621| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 1622| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的同步方法。 | 1623| asyncMethodList<sup>12+</sup> | Array\<string> | 否 | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。 | 1624| permission<sup>12+</sup> | string | 否 | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。| 1625 1626**错误码:** 1627 1628以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1629 1630| 错误码ID | 错误信息 | 1631| -------- | ------------------------------------------------------------ | 1632| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1633| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1634 1635**示例:** 1636 1637```ts 1638// xxx.ets 1639import { webview } from '@kit.ArkWeb'; 1640import { BusinessError } from '@kit.BasicServicesKit'; 1641 1642class TestObj { 1643 constructor() { 1644 } 1645 1646 test(testStr: string): string { 1647 console.log('Web Component str' + testStr); 1648 return testStr; 1649 } 1650 1651 toString(): void { 1652 console.log('Web Component toString'); 1653 } 1654 1655 testNumber(testNum: number): number { 1656 console.log('Web Component number' + testNum); 1657 return testNum; 1658 } 1659 1660 asyncTestBool(testBol: boolean): void { 1661 console.log('Web Component boolean' + testBol); 1662 } 1663} 1664 1665class WebObj { 1666 constructor() { 1667 } 1668 1669 webTest(): string { 1670 console.log('Web test'); 1671 return "Web test"; 1672 } 1673 1674 webString(): void { 1675 console.log('Web test toString'); 1676 } 1677} 1678 1679class AsyncObj { 1680 constructor() { 1681 } 1682 1683 asyncTest(): void { 1684 console.log('Async test'); 1685 } 1686 1687 asyncString(testStr: string): void { 1688 console.log('Web async string' + testStr); 1689 } 1690} 1691 1692@Entry 1693@Component 1694struct Index { 1695 controller: webview.WebviewController = new webview.WebviewController(); 1696 @State testObjtest: TestObj = new TestObj(); 1697 @State webTestObj: WebObj = new WebObj(); 1698 @State asyncTestObj: AsyncObj = new AsyncObj(); 1699 1700 build() { 1701 Column() { 1702 Button('refresh') 1703 .onClick(() => { 1704 try { 1705 this.controller.refresh(); 1706 } catch (error) { 1707 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1708 } 1709 }) 1710 Button('Register JavaScript To Window') 1711 .onClick(() => { 1712 try { 1713 // 同时注册同步和异步函数 1714 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]); 1715 // 仅注册同步函数 1716 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 1717 // 仅注册异步函数 1718 this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]); 1719 } catch (error) { 1720 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1721 } 1722 }) 1723 Button('deleteJavaScriptRegister') 1724 .onClick(() => { 1725 try { 1726 this.controller.deleteJavaScriptRegister("objName"); 1727 this.controller.deleteJavaScriptRegister("objTestName"); 1728 this.controller.deleteJavaScriptRegister("objAsyncName"); 1729 } catch (error) { 1730 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1731 } 1732 }) 1733 Web({ src: $rawfile('index.html'), controller: this.controller }) 1734 .javaScriptAccess(true) 1735 } 1736 } 1737} 1738``` 1739 1740加载的html文件。 1741```html 1742<!-- index.html --> 1743<!DOCTYPE html> 1744<html> 1745 <meta charset="utf-8"> 1746 <body> 1747 <button type="button" onclick="htmlTest()">Click Me!</button> 1748 <p id="demo"></p> 1749 <p id="webDemo"></p> 1750 <p id="asyncDemo"></p> 1751 </body> 1752 <script type="text/javascript"> 1753 function htmlTest() { 1754 // This function call expects to return "ArkUI Web Component" 1755 let str=objName.test("webtest data"); 1756 objName.testNumber(1); 1757 objName.asyncTestBool(true); 1758 document.getElementById("demo").innerHTML=str; 1759 console.log('objName.test result:'+ str) 1760 1761 // This function call expects to return "Web test" 1762 let webStr = objTestName.webTest(); 1763 document.getElementById("webDemo").innerHTML=webStr; 1764 console.log('objTestName.webTest result:'+ webStr) 1765 1766 objAsyncName.asyncTest(); 1767 objAsyncName.asyncString("async test data"); 1768 } 1769</script> 1770</html> 1771``` 1772更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 1773 1774### runJavaScript 1775 1776runJavaScript(script: string, callback : AsyncCallback\<string>): void 1777 1778异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1779 1780**系统能力:** SystemCapability.Web.Webview.Core 1781 1782**参数:** 1783 1784| 参数名 | 类型 | 必填 | 说明 | 1785| -------- | -------------------- | ---- | ---------------------------- | 1786| script | string | 是 | JavaScript脚本。 | 1787| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1788 1789**错误码:** 1790 1791以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1792 1793| 错误码ID | 错误信息 | 1794| -------- | ------------------------------------------------------------ | 1795| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1796| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1797 1798**示例:** 1799 1800```ts 1801import { webview } from '@kit.ArkWeb'; 1802import { BusinessError } from '@kit.BasicServicesKit'; 1803 1804@Entry 1805@Component 1806struct WebComponent { 1807 controller: webview.WebviewController = new webview.WebviewController(); 1808 @State webResult: string = ''; 1809 1810 build() { 1811 Column() { 1812 Text(this.webResult).fontSize(20) 1813 Web({ src: $rawfile('index.html'), controller: this.controller }) 1814 .javaScriptAccess(true) 1815 .onPageEnd(e => { 1816 try { 1817 this.controller.runJavaScript( 1818 'test()', 1819 (error, result) => { 1820 if (error) { 1821 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1822 return; 1823 } 1824 if (result) { 1825 this.webResult = result; 1826 console.info(`The test() return value is: ${result}`); 1827 } 1828 }); 1829 if (e) { 1830 console.info('url: ', e.url); 1831 } 1832 } catch (error) { 1833 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1834 } 1835 }) 1836 } 1837 } 1838} 1839``` 1840 1841加载的html文件。 1842```html 1843<!-- index.html --> 1844<!DOCTYPE html> 1845<html> 1846 <meta charset="utf-8"> 1847 <body> 1848 Hello world! 1849 </body> 1850 <script type="text/javascript"> 1851 function test() { 1852 console.log('Ark WebComponent') 1853 return "This value is from index.html" 1854 } 1855 </script> 1856</html> 1857``` 1858 1859### runJavaScript 1860 1861runJavaScript(script: string): Promise\<string> 1862 1863异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1864 1865**系统能力:** SystemCapability.Web.Webview.Core 1866 1867**参数:** 1868 1869| 参数名 | 类型 | 必填 | 说明 | 1870| ------ | -------- | ---- | ---------------- | 1871| script | string | 是 | JavaScript脚本。 | 1872 1873**返回值:** 1874 1875| 类型 | 说明 | 1876| --------------- | --------------------------------------------------- | 1877| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1878 1879**错误码:** 1880 1881以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1882 1883| 错误码ID | 错误信息 | 1884| -------- | ------------------------------------------------------------ | 1885| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1886| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1887 1888**示例:** 1889 1890```ts 1891// xxx.ets 1892import { webview } from '@kit.ArkWeb'; 1893import { BusinessError } from '@kit.BasicServicesKit'; 1894 1895@Entry 1896@Component 1897struct WebComponent { 1898 controller: webview.WebviewController = new webview.WebviewController(); 1899 1900 build() { 1901 Column() { 1902 Web({ src: $rawfile('index.html'), controller: this.controller }) 1903 .javaScriptAccess(true) 1904 .onPageEnd(e => { 1905 try { 1906 this.controller.runJavaScript('test()') 1907 .then((result) => { 1908 console.log('result: ' + result); 1909 }) 1910 .catch((error: BusinessError) => { 1911 console.error("error: " + error); 1912 }) 1913 if (e) { 1914 console.info('url: ', e.url); 1915 } 1916 } catch (error) { 1917 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1918 } 1919 }) 1920 } 1921 } 1922} 1923``` 1924 1925加载的html文件。 1926```html 1927<!-- index.html --> 1928<!DOCTYPE html> 1929<html> 1930 <meta charset="utf-8"> 1931 <body> 1932 Hello world! 1933 </body> 1934 <script type="text/javascript"> 1935 function test() { 1936 console.log('Ark WebComponent') 1937 return "This value is from index.html" 1938 } 1939 </script> 1940</html> 1941``` 1942 1943### runJavaScriptExt<sup>10+</sup> 1944 1945runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void 1946 1947异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1948 1949**系统能力:** SystemCapability.Web.Webview.Core 1950 1951**参数:** 1952 1953| 参数名 | 类型 | 必填 | 说明 | 1954| -------- | -------------------- | ---- | ---------------------------- | 1955| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 1956| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是 | 回调执行JavaScript脚本结果。 | 1957 1958**错误码:** 1959 1960以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1961 1962| 错误码ID | 错误信息 | 1963| -------- | ------------------------------------------------------------ | 1964| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1965| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1966 1967**示例:** 1968 1969```ts 1970import { webview } from '@kit.ArkWeb'; 1971import { BusinessError } from '@kit.BasicServicesKit'; 1972 1973@Entry 1974@Component 1975struct WebComponent { 1976 controller: webview.WebviewController = new webview.WebviewController(); 1977 @State msg1: string = ''; 1978 @State msg2: string = ''; 1979 1980 build() { 1981 Column() { 1982 Text(this.msg1).fontSize(20) 1983 Text(this.msg2).fontSize(20) 1984 Web({ src: $rawfile('index.html'), controller: this.controller }) 1985 .javaScriptAccess(true) 1986 .onPageEnd(e => { 1987 try { 1988 this.controller.runJavaScriptExt( 1989 'test()', 1990 (error, result) => { 1991 if (error) { 1992 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 1993 return; 1994 } 1995 if (result) { 1996 try { 1997 let type = result.getType(); 1998 switch (type) { 1999 case webview.JsMessageType.STRING: { 2000 this.msg1 = "result type:" + typeof (result.getString()); 2001 this.msg2 = "result getString:" + ((result.getString())); 2002 break; 2003 } 2004 case webview.JsMessageType.NUMBER: { 2005 this.msg1 = "result type:" + typeof (result.getNumber()); 2006 this.msg2 = "result getNumber:" + ((result.getNumber())); 2007 break; 2008 } 2009 case webview.JsMessageType.BOOLEAN: { 2010 this.msg1 = "result type:" + typeof (result.getBoolean()); 2011 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2012 break; 2013 } 2014 case webview.JsMessageType.ARRAY_BUFFER: { 2015 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2016 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2017 break; 2018 } 2019 case webview.JsMessageType.ARRAY: { 2020 this.msg1 = "result type:" + typeof (result.getArray()); 2021 this.msg2 = "result getArray:" + result.getArray(); 2022 break; 2023 } 2024 default: { 2025 this.msg1 = "default break, type:" + type; 2026 break; 2027 } 2028 } 2029 } 2030 catch (resError) { 2031 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2032 } 2033 } 2034 }); 2035 if (e) { 2036 console.info('url: ', e.url); 2037 } 2038 } catch (error) { 2039 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2040 } 2041 }) 2042 } 2043 } 2044} 2045``` 2046 2047```ts 2048// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据。 2049import { webview } from '@kit.ArkWeb'; 2050import { BusinessError } from '@kit.BasicServicesKit'; 2051import { fileIo } from '@kit.CoreFileKit'; 2052import { common } from '@kit.AbilityKit'; 2053 2054@Entry 2055@Component 2056struct WebComponent { 2057 controller: webview.WebviewController = new webview.WebviewController(); 2058 @State msg1: string = '' 2059 @State msg2: string = '' 2060 2061 build() { 2062 Column() { 2063 Text(this.msg1).fontSize(20) 2064 Text(this.msg2).fontSize(20) 2065 Button('runJavaScriptExt') 2066 .onClick(() => { 2067 try { 2068 let uiContext : UIContext = this.getUIContext(); 2069 let context : Context | undefined = uiContext.getHostContext() as common.UIAbilityContext; 2070 let filePath = context!.filesDir + 'test.txt'; 2071 // 新建并打开文件。 2072 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2073 // 写入一段内容至文件。 2074 fileIo.writeSync(file.fd, "test()"); 2075 // 从文件中读取内容。 2076 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2077 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2078 // 关闭文件。 2079 fileIo.closeSync(file); 2080 this.controller.runJavaScriptExt( 2081 arrayBuffer, 2082 (error, result) => { 2083 if (error) { 2084 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 2085 return; 2086 } 2087 if (result) { 2088 try { 2089 let type = result.getType(); 2090 switch (type) { 2091 case webview.JsMessageType.STRING: { 2092 this.msg1 = "result type:" + typeof (result.getString()); 2093 this.msg2 = "result getString:" + ((result.getString())); 2094 break; 2095 } 2096 case webview.JsMessageType.NUMBER: { 2097 this.msg1 = "result type:" + typeof (result.getNumber()); 2098 this.msg2 = "result getNumber:" + ((result.getNumber())); 2099 break; 2100 } 2101 case webview.JsMessageType.BOOLEAN: { 2102 this.msg1 = "result type:" + typeof (result.getBoolean()); 2103 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2104 break; 2105 } 2106 case webview.JsMessageType.ARRAY_BUFFER: { 2107 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2108 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2109 break; 2110 } 2111 case webview.JsMessageType.ARRAY: { 2112 this.msg1 = "result type:" + typeof (result.getArray()); 2113 this.msg2 = "result getArray:" + result.getArray(); 2114 break; 2115 } 2116 default: { 2117 this.msg1 = "default break, type:" + type; 2118 break; 2119 } 2120 } 2121 } 2122 catch (resError) { 2123 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2124 } 2125 } 2126 }); 2127 } catch (error) { 2128 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2129 } 2130 }) 2131 Web({ src: $rawfile('index.html'), controller: this.controller }) 2132 .javaScriptAccess(true) 2133 } 2134 } 2135} 2136``` 2137 2138加载的html文件。 2139```html 2140<!-- index.html --> 2141<!DOCTYPE html> 2142<html lang="en-gb"> 2143<body> 2144<h1>run JavaScript Ext demo</h1> 2145</body> 2146<script type="text/javascript"> 2147function test() { 2148 return "hello, world"; 2149} 2150</script> 2151</html> 2152``` 2153 2154### runJavaScriptExt<sup>10+</sup> 2155 2156runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt> 2157 2158异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 2159 2160**系统能力:** SystemCapability.Web.Webview.Core 2161 2162**参数:** 2163 2164| 参数名 | 类型 | 必填 | 说明 | 2165| ------ | -------- | ---- | ---------------- | 2166| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 2167 2168**返回值:** 2169 2170| 类型 | 说明 | 2171| --------------- | --------------------------------------------------- | 2172| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 | 2173 2174**错误码:** 2175 2176以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2177 2178| 错误码ID | 错误信息 | 2179| -------- | ------------------------------------------------------------ | 2180| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2181| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2182 2183**示例:** 2184 2185```ts 2186// xxx.ets 2187import { webview } from '@kit.ArkWeb'; 2188import { BusinessError } from '@kit.BasicServicesKit'; 2189 2190@Entry 2191@Component 2192struct WebComponent { 2193 controller: webview.WebviewController = new webview.WebviewController(); 2194 @State webResult: string = ''; 2195 @State msg1: string = ''; 2196 @State msg2: string = ''; 2197 2198 build() { 2199 Column() { 2200 Text(this.webResult).fontSize(20) 2201 Text(this.msg1).fontSize(20) 2202 Text(this.msg2).fontSize(20) 2203 Web({ src: $rawfile('index.html'), controller: this.controller }) 2204 .javaScriptAccess(true) 2205 .onPageEnd(() => { 2206 this.controller.runJavaScriptExt('test()') 2207 .then((result) => { 2208 try { 2209 let type = result.getType(); 2210 switch (type) { 2211 case webview.JsMessageType.STRING: { 2212 this.msg1 = "result type:" + typeof (result.getString()); 2213 this.msg2 = "result getString:" + ((result.getString())); 2214 break; 2215 } 2216 case webview.JsMessageType.NUMBER: { 2217 this.msg1 = "result type:" + typeof (result.getNumber()); 2218 this.msg2 = "result getNumber:" + ((result.getNumber())); 2219 break; 2220 } 2221 case webview.JsMessageType.BOOLEAN: { 2222 this.msg1 = "result type:" + typeof (result.getBoolean()); 2223 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2224 break; 2225 } 2226 case webview.JsMessageType.ARRAY_BUFFER: { 2227 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2228 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2229 break; 2230 } 2231 case webview.JsMessageType.ARRAY: { 2232 this.msg1 = "result type:" + typeof (result.getArray()); 2233 this.msg2 = "result getArray:" + result.getArray(); 2234 break; 2235 } 2236 default: { 2237 this.msg1 = "default break, type:" + type; 2238 break; 2239 } 2240 } 2241 } 2242 catch (resError) { 2243 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2244 } 2245 }).catch((error: BusinessError) => { 2246 console.error("error: " + error); 2247 }) 2248 }) 2249 } 2250 } 2251} 2252``` 2253 2254```ts 2255// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据。 2256import { webview } from '@kit.ArkWeb'; 2257import { BusinessError } from '@kit.BasicServicesKit'; 2258import { fileIo } from '@kit.CoreFileKit'; 2259import { common } from '@kit.AbilityKit'; 2260 2261@Entry 2262@Component 2263struct WebComponent { 2264 controller: webview.WebviewController = new webview.WebviewController(); 2265 @State msg1: string = ''; 2266 @State msg2: string = ''; 2267 2268 build() { 2269 Column() { 2270 Text(this.msg1).fontSize(20) 2271 Text(this.msg2).fontSize(20) 2272 Button('runJavaScriptExt') 2273 .onClick(() => { 2274 try { 2275 let uiContext : UIContext = this.getUIContext(); 2276 let context : Context | undefined = uiContext.getHostContext() as common.UIAbilityContext; 2277 let filePath = context!.filesDir + 'test.txt'; 2278 // 新建并打开文件。 2279 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2280 // 写入一段内容至文件。 2281 fileIo.writeSync(file.fd, "test()"); 2282 // 从文件中读取内容。 2283 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2284 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2285 // 关闭文件。 2286 fileIo.closeSync(file); 2287 this.controller.runJavaScriptExt(arrayBuffer) 2288 .then((result) => { 2289 try { 2290 let type = result.getType(); 2291 switch (type) { 2292 case webview.JsMessageType.STRING: { 2293 this.msg1 = "result type:" + typeof (result.getString()); 2294 this.msg2 = "result getString:" + ((result.getString())); 2295 break; 2296 } 2297 case webview.JsMessageType.NUMBER: { 2298 this.msg1 = "result type:" + typeof (result.getNumber()); 2299 this.msg2 = "result getNumber:" + ((result.getNumber())); 2300 break; 2301 } 2302 case webview.JsMessageType.BOOLEAN: { 2303 this.msg1 = "result type:" + typeof (result.getBoolean()); 2304 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2305 break; 2306 } 2307 case webview.JsMessageType.ARRAY_BUFFER: { 2308 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2309 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2310 break; 2311 } 2312 case webview.JsMessageType.ARRAY: { 2313 this.msg1 = "result type:" + typeof (result.getArray()); 2314 this.msg2 = "result getArray:" + result.getArray(); 2315 break; 2316 } 2317 default: { 2318 this.msg1 = "default break, type:" + type; 2319 break; 2320 } 2321 } 2322 } 2323 catch (resError) { 2324 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2325 } 2326 }) 2327 .catch((error: BusinessError) => { 2328 console.error("error: " + error); 2329 }) 2330 } catch (error) { 2331 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2332 } 2333 }) 2334 Web({ src: $rawfile('index.html'), controller: this.controller }) 2335 .javaScriptAccess(true) 2336 } 2337 } 2338} 2339``` 2340 2341加载的html文件。 2342```html 2343<!-- index.html --> 2344<!DOCTYPE html> 2345<html lang="en-gb"> 2346<body> 2347<h1>run JavaScript Ext demo</h1> 2348</body> 2349<script type="text/javascript"> 2350function test() { 2351 return "hello, world"; 2352} 2353</script> 2354</html> 2355``` 2356 2357### deleteJavaScriptRegister 2358 2359deleteJavaScriptRegister(name: string): void 2360 2361删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。 2362 2363**系统能力:** SystemCapability.Web.Webview.Core 2364 2365**参数:** 2366 2367| 参数名 | 类型 | 必填 | 说明 | 2368| ------ | -------- | ---- | ---- | 2369| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 2370 2371**错误码:** 2372 2373以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2374 2375| 错误码ID | 错误信息 | 2376| -------- | ------------------------------------------------------------ | 2377| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2378| 17100008 | Failed to delete JavaScriptProxy because it does not exist. | 2379| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2380 2381**示例:** 2382 2383```ts 2384// xxx.ets 2385import { webview } from '@kit.ArkWeb'; 2386import { BusinessError } from '@kit.BasicServicesKit'; 2387 2388class TestObj { 2389 constructor() { 2390 } 2391 2392 test(): string { 2393 return "ArkUI Web Component"; 2394 } 2395 2396 toString(): void { 2397 console.log('Web Component toString'); 2398 } 2399} 2400 2401@Entry 2402@Component 2403struct WebComponent { 2404 controller: webview.WebviewController = new webview.WebviewController(); 2405 @State testObjtest: TestObj = new TestObj(); 2406 @State name: string = 'objName'; 2407 build() { 2408 Column() { 2409 Button('refresh') 2410 .onClick(() => { 2411 try { 2412 this.controller.refresh(); 2413 } catch (error) { 2414 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2415 } 2416 }) 2417 Button('Register JavaScript To Window') 2418 .onClick(() => { 2419 try { 2420 this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]); 2421 } catch (error) { 2422 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2423 } 2424 }) 2425 Button('deleteJavaScriptRegister') 2426 .onClick(() => { 2427 try { 2428 this.controller.deleteJavaScriptRegister(this.name); 2429 } catch (error) { 2430 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2431 } 2432 }) 2433 Web({ src: $rawfile('index.html'), controller: this.controller }) 2434 .javaScriptAccess(true) 2435 } 2436 } 2437} 2438``` 2439 2440加载的html文件。 2441```html 2442<!-- index.html --> 2443<!DOCTYPE html> 2444<html> 2445 <meta charset="utf-8"> 2446 <body> 2447 <button type="button" onclick="htmlTest()">Click Me!</button> 2448 <p id="demo"></p> 2449 </body> 2450 <script type="text/javascript"> 2451 function htmlTest() { 2452 let str=objName.test(); 2453 document.getElementById("demo").innerHTML=str; 2454 console.log('objName.test result:'+ str) 2455 } 2456</script> 2457</html> 2458``` 2459 2460### zoom 2461 2462zoom(factor: number): void 2463 2464调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。 2465 2466**系统能力:** SystemCapability.Web.Webview.Core 2467 2468**参数:** 2469 2470| 参数名 | 类型 | 必填 | 说明 | 2471| ------ | -------- | ---- | ------------------------------------------------------------ | 2472| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。<br>取值范围:(0,100]。 | 2473 2474**错误码:** 2475 2476以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2477 2478| 错误码ID | 错误信息 | 2479| -------- | ------------------------------------------------------------ | 2480| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2481| 17100004 | Function not enabled. | 2482| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2483 2484**示例:** 2485 2486```ts 2487// xxx.ets 2488import { webview } from '@kit.ArkWeb'; 2489import { BusinessError } from '@kit.BasicServicesKit'; 2490 2491@Entry 2492@Component 2493struct WebComponent { 2494 controller: webview.WebviewController = new webview.WebviewController(); 2495 @State factor: number = 1; 2496 2497 build() { 2498 Column() { 2499 Button('zoom') 2500 .onClick(() => { 2501 try { 2502 this.controller.zoom(this.factor); 2503 } catch (error) { 2504 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2505 } 2506 }) 2507 Web({ src: 'www.example.com', controller: this.controller }) 2508 .zoomAccess(true) 2509 } 2510 } 2511} 2512``` 2513 2514### searchAllAsync 2515 2516searchAllAsync(searchString: string): void 2517 2518异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。 2519 2520**系统能力:** SystemCapability.Web.Webview.Core 2521 2522**参数:** 2523 2524| 参数名 | 类型 | 必填 | 说明 | 2525| ------------ | -------- | ---- | -------------- | 2526| searchString | string | 是 | 查找的关键字。 | 2527 2528**错误码:** 2529 2530以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2531 2532| 错误码ID | 错误信息 | 2533| -------- | ------------------------------------------------------------ | 2534| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2535| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2536 2537**示例:** 2538 2539```ts 2540// xxx.ets 2541import { webview } from '@kit.ArkWeb'; 2542import { BusinessError } from '@kit.BasicServicesKit'; 2543 2544@Entry 2545@Component 2546struct WebComponent { 2547 controller: webview.WebviewController = new webview.WebviewController(); 2548 @State searchString: string = "Hello World"; 2549 2550 build() { 2551 Column() { 2552 Button('searchString') 2553 .onClick(() => { 2554 try { 2555 this.controller.searchAllAsync(this.searchString); 2556 } catch (error) { 2557 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2558 } 2559 }) 2560 Web({ src: $rawfile('index.html'), controller: this.controller }) 2561 .onSearchResultReceive(ret => { 2562 if (ret) { 2563 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 2564 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 2565 } 2566 }) 2567 } 2568 } 2569} 2570``` 2571 2572加载的html文件。 2573```html 2574<!-- index.html --> 2575<!DOCTYPE html> 2576<html> 2577 <body> 2578 <p>Hello World Highlight Hello World</p> 2579 </body> 2580</html> 2581``` 2582 2583### clearMatches 2584 2585clearMatches(): void 2586 2587清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 2588 2589**系统能力:** SystemCapability.Web.Webview.Core 2590 2591**错误码:** 2592 2593以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2594 2595| 错误码ID | 错误信息 | 2596| -------- | ------------------------------------------------------------ | 2597| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2598 2599**示例:** 2600 2601```ts 2602// xxx.ets 2603import { webview } from '@kit.ArkWeb'; 2604import { BusinessError } from '@kit.BasicServicesKit'; 2605 2606@Entry 2607@Component 2608struct WebComponent { 2609 controller: webview.WebviewController = new webview.WebviewController(); 2610 2611 build() { 2612 Column() { 2613 Button('clearMatches') 2614 .onClick(() => { 2615 try { 2616 this.controller.clearMatches(); 2617 } catch (error) { 2618 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2619 } 2620 }) 2621 Web({ src: $rawfile('index.html'), controller: this.controller }) 2622 } 2623 } 2624} 2625``` 2626 2627加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2628 2629### searchNext 2630 2631searchNext(forward: boolean): void 2632 2633滚动到下一个匹配的查找结果并高亮。 2634 2635**系统能力:** SystemCapability.Web.Webview.Core 2636 2637**参数:** 2638 2639| 参数名 | 类型 | 必填 | 说明 | 2640| ------- | -------- | ---- | ---------------------- | 2641| forward | boolean | 是 | 从前向后或者逆向查找方式。true表示从前向后查找,false表示从后向前查找。 | 2642 2643**错误码:** 2644 2645以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2646 2647| 错误码ID | 错误信息 | 2648| -------- | ------------------------------------------------------------ | 2649| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2650| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2651 2652**示例:** 2653 2654```ts 2655// xxx.ets 2656import { webview } from '@kit.ArkWeb'; 2657import { BusinessError } from '@kit.BasicServicesKit'; 2658 2659@Entry 2660@Component 2661struct WebComponent { 2662 controller: webview.WebviewController = new webview.WebviewController(); 2663 2664 build() { 2665 Column() { 2666 Button('searchNext') 2667 .onClick(() => { 2668 try { 2669 this.controller.searchNext(true); 2670 } catch (error) { 2671 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2672 } 2673 }) 2674 Web({ src: $rawfile('index.html'), controller: this.controller }) 2675 } 2676 } 2677} 2678``` 2679 2680加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2681 2682### clearSslCache 2683 2684clearSslCache(): void 2685 2686清除Web组件记录的SSL证书错误事件对应的用户操作行为。 2687 2688**系统能力:** SystemCapability.Web.Webview.Core 2689 2690**错误码:** 2691 2692以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2693 2694| 错误码ID | 错误信息 | 2695| -------- | ------------------------------------------------------------ | 2696| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2697 2698**示例:** 2699 2700```ts 2701// xxx.ets 2702import { webview } from '@kit.ArkWeb'; 2703import { BusinessError } from '@kit.BasicServicesKit'; 2704 2705@Entry 2706@Component 2707struct WebComponent { 2708 controller: webview.WebviewController = new webview.WebviewController(); 2709 2710 build() { 2711 Column() { 2712 Button('clearSslCache') 2713 .onClick(() => { 2714 try { 2715 this.controller.clearSslCache(); 2716 } catch (error) { 2717 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2718 } 2719 }) 2720 Web({ src: 'www.example.com', controller: this.controller }) 2721 } 2722 } 2723} 2724``` 2725 2726### clearClientAuthenticationCache 2727 2728clearClientAuthenticationCache(): void 2729 2730清除Web组件记录的客户端证书请求事件对应的用户操作行为。 2731 2732**系统能力:** SystemCapability.Web.Webview.Core 2733 2734**错误码:** 2735 2736以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2737 2738| 错误码ID | 错误信息 | 2739| -------- | ------------------------------------------------------------ | 2740| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2741 2742**示例:** 2743 2744```ts 2745// xxx.ets 2746import { webview } from '@kit.ArkWeb'; 2747import { BusinessError } from '@kit.BasicServicesKit'; 2748 2749@Entry 2750@Component 2751struct WebComponent { 2752 controller: webview.WebviewController = new webview.WebviewController(); 2753 2754 build() { 2755 Column() { 2756 Button('clearClientAuthenticationCache') 2757 .onClick(() => { 2758 try { 2759 this.controller.clearClientAuthenticationCache(); 2760 } catch (error) { 2761 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2762 } 2763 }) 2764 Web({ src: 'www.example.com', controller: this.controller }) 2765 } 2766 } 2767} 2768``` 2769 2770### createWebMessagePorts 2771 2772createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort> 2773 2774创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 2775 2776**系统能力:** SystemCapability.Web.Webview.Core 2777 2778**参数:** 2779 2780| 参数名 | 类型 | 必填 | 说明 | 2781| ------ | ---------------------- | ---- | :------------------------------| 2782| isExtentionType<sup>10+</sup> | boolean | 否 | 是否使用扩展增强接口,默认false不使用。 | 2783 2784**返回值:** 2785 2786| 类型 | 说明 | 2787| ---------------------- | ----------------- | 2788| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 | 2789 2790**错误码:** 2791 2792以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2793 2794| 错误码ID | 错误信息 | 2795| -------- | ------------------------------------------------------------ | 2796| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2797| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2798 2799**示例:** 2800 2801```ts 2802// xxx.ets 2803import { webview } from '@kit.ArkWeb'; 2804import { BusinessError } from '@kit.BasicServicesKit'; 2805 2806@Entry 2807@Component 2808struct WebComponent { 2809 controller: webview.WebviewController = new webview.WebviewController(); 2810 ports: webview.WebMessagePort[] = []; 2811 2812 build() { 2813 Column() { 2814 Button('createWebMessagePorts') 2815 .onClick(() => { 2816 try { 2817 this.ports = this.controller.createWebMessagePorts(); 2818 console.log("createWebMessagePorts size:" + this.ports.length); 2819 } catch (error) { 2820 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2821 } 2822 }) 2823 Web({ src: 'www.example.com', controller: this.controller }) 2824 } 2825 } 2826} 2827``` 2828 2829### postMessage 2830 2831postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 2832 2833发送Web消息端口到HTML。 2834 2835**系统能力:** SystemCapability.Web.Webview.Core 2836 2837**参数:** 2838 2839| 参数名 | 类型 | 必填 | 说明 | 2840| ------ | ---------------------- | ---- | :------------------------------- | 2841| name | string | 是 | 要发送的消息名称。 | 2842| ports | Array\<[WebMessagePort](#webmessageport)> | 是 | 要发送的消息端口。 | 2843| uri | string | 是 | 接收该消息的URI。 | 2844 2845**错误码:** 2846 2847以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2848 2849| 错误码ID | 错误信息 | 2850| -------- | ------------------------------------------------------------ | 2851| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2852| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2853 2854**示例:** 2855 2856```ts 2857// xxx.ets 2858import { webview } from '@kit.ArkWeb'; 2859import { BusinessError } from '@kit.BasicServicesKit'; 2860 2861@Entry 2862@Component 2863struct WebComponent { 2864 controller: webview.WebviewController = new webview.WebviewController(); 2865 ports: webview.WebMessagePort[] = []; 2866 @State sendFromEts: string = 'Send this message from ets to HTML'; 2867 @State receivedFromHtml: string = 'Display received message send from HTML'; 2868 2869 build() { 2870 Column() { 2871 // 展示接收到的来自HTML的内容 2872 Text(this.receivedFromHtml) 2873 // 输入框的内容发送到html 2874 TextInput({ placeholder: 'Send this message from ets to HTML' }) 2875 .onChange((value: string) => { 2876 this.sendFromEts = value; 2877 }) 2878 2879 Button('postMessage') 2880 .onClick(() => { 2881 try { 2882 // 1、创建两个消息端口。 2883 this.ports = this.controller.createWebMessagePorts(); 2884 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 2885 this.ports[1].onMessageEvent((result: webview.WebMessage) => { 2886 let msg = 'Got msg from HTML:'; 2887 if (typeof (result) == "string") { 2888 console.log("received string message from html5, string is:" + result); 2889 msg = msg + result; 2890 } else if (typeof (result) == "object") { 2891 if (result instanceof ArrayBuffer) { 2892 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2893 msg = msg + "length is " + result.byteLength; 2894 } else { 2895 console.log("not support"); 2896 } 2897 } else { 2898 console.log("not support"); 2899 } 2900 this.receivedFromHtml = msg; 2901 }) 2902 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 2903 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 2904 } catch (error) { 2905 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2906 } 2907 }) 2908 2909 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 2910 Button('SendDataToHTML') 2911 .onClick(() => { 2912 try { 2913 if (this.ports && this.ports[1]) { 2914 this.ports[1].postMessageEvent(this.sendFromEts); 2915 } else { 2916 console.error(`ports is null, Please initialize first`); 2917 } 2918 } catch (error) { 2919 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2920 } 2921 }) 2922 Web({ src: $rawfile('index.html'), controller: this.controller }) 2923 } 2924 } 2925} 2926``` 2927 2928加载的html文件。 2929```html 2930<!--index.html--> 2931<!DOCTYPE html> 2932<html> 2933<head> 2934 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 2935 <title>WebView Message Port Demo</title> 2936</head> 2937 2938 <body> 2939 <h1>WebView Message Port Demo</h1> 2940 <div> 2941 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 2942 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 2943 </div> 2944 <p class="output">display received message send from ets</p> 2945 </body> 2946 <script src="xxx.js"></script> 2947</html> 2948``` 2949 2950```js 2951//xxx.js 2952var h5Port; 2953var output = document.querySelector('.output'); 2954window.addEventListener('message', function (event) { 2955 if (event.data == '__init_port__') { 2956 if (event.ports[0] != null) { 2957 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 2958 h5Port.onmessage = function (event) { 2959 // 2. 接收ets侧发送过来的消息. 2960 var msg = 'Got message from ets:'; 2961 var result = event.data; 2962 if (typeof(result) == "string") { 2963 console.log("received string message from html5, string is:" + result); 2964 msg = msg + result; 2965 } else if (typeof(result) == "object") { 2966 if (result instanceof ArrayBuffer) { 2967 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2968 msg = msg + "length is " + result.byteLength; 2969 } else { 2970 console.log("not support"); 2971 } 2972 } else { 2973 console.log("not support"); 2974 } 2975 output.innerHTML = msg; 2976 } 2977 } 2978 } 2979}) 2980 2981// 3. 使用h5Port往ets侧发送消息. 2982function PostMsgToEts(data) { 2983 if (h5Port) { 2984 h5Port.postMessage(data); 2985 } else { 2986 console.error("h5Port is null, Please initialize first"); 2987 } 2988} 2989``` 2990 2991### requestFocus 2992 2993requestFocus(): void 2994 2995使当前web页面获取焦点。 2996 2997**系统能力:** SystemCapability.Web.Webview.Core 2998 2999**错误码:** 3000 3001以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3002 3003| 错误码ID | 错误信息 | 3004| -------- | ------------------------------------------------------------ | 3005| 17100001 | Init error. The WebviewController must be associated with a Web component. | 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('requestFocus') 3022 .onClick(() => { 3023 try { 3024 this.controller.requestFocus(); 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### zoomIn 3036 3037zoomIn(): void 3038 3039调用此接口将当前网页进行放大,比例为25%。 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('zoomIn') 3067 .onClick(() => { 3068 try { 3069 this.controller.zoomIn(); 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### zoomOut 3081 3082zoomOut(): void 3083 3084调用此接口将当前网页进行缩小,比例为20%。 3085 3086**系统能力:** SystemCapability.Web.Webview.Core 3087 3088**错误码:** 3089 3090以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3091 3092| 错误码ID | 错误信息 | 3093| -------- | ------------------------------------------------------------ | 3094| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3095| 17100004 | Function not enabled. | 3096 3097**示例:** 3098 3099```ts 3100// xxx.ets 3101import { webview } from '@kit.ArkWeb'; 3102import { BusinessError } from '@kit.BasicServicesKit'; 3103 3104@Entry 3105@Component 3106struct WebComponent { 3107 controller: webview.WebviewController = new webview.WebviewController(); 3108 3109 build() { 3110 Column() { 3111 Button('zoomOut') 3112 .onClick(() => { 3113 try { 3114 this.controller.zoomOut(); 3115 } catch (error) { 3116 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3117 } 3118 }) 3119 Web({ src: 'www.example.com', controller: this.controller }) 3120 } 3121 } 3122} 3123``` 3124 3125### getHitTestValue<sup>(deprecated)</sup> 3126 3127getHitTestValue(): HitTestValue 3128 3129获取当前被点击区域的元素信息。 3130 3131> **说明:** 3132> 3133> 从API version11开始支持,从API version 18开始废弃。建议使用[getLastHitTest](#getlasthittest18)替代。 3134 3135**系统能力:** SystemCapability.Web.Webview.Core 3136 3137**返回值:** 3138 3139| 类型 | 说明 | 3140| ------------ | -------------------- | 3141| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 3142 3143**错误码:** 3144 3145以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3146 3147| 错误码ID | 错误信息 | 3148| -------- | ------------------------------------------------------------ | 3149| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3150 3151**示例:** 3152 3153```ts 3154// xxx.ets 3155import { webview } from '@kit.ArkWeb'; 3156import { BusinessError } from '@kit.BasicServicesKit'; 3157 3158@Entry 3159@Component 3160struct WebComponent { 3161 controller: webview.WebviewController = new webview.WebviewController(); 3162 3163 build() { 3164 Column() { 3165 Button('getHitTestValue') 3166 .onClick(() => { 3167 try { 3168 let hitValue = this.controller.getHitTestValue(); 3169 console.log("hitType: " + hitValue.type); 3170 console.log("extra: " + hitValue.extra); 3171 } catch (error) { 3172 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3173 } 3174 }) 3175 Web({ src: 'www.example.com', controller: this.controller }) 3176 } 3177 } 3178} 3179``` 3180 3181### getWebId 3182 3183getWebId(): number 3184 3185获取当前Web组件的索引值,用于多个Web组件的管理。 3186 3187**系统能力:** SystemCapability.Web.Webview.Core 3188 3189**返回值:** 3190 3191| 类型 | 说明 | 3192| ------ | --------------------- | 3193| number | 当前Web组件的索引值。 | 3194 3195**错误码:** 3196 3197以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3198 3199| 错误码ID | 错误信息 | 3200| -------- | ------------------------------------------------------------ | 3201| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3202 3203**示例:** 3204 3205```ts 3206// xxx.ets 3207import { webview } from '@kit.ArkWeb'; 3208import { BusinessError } from '@kit.BasicServicesKit'; 3209 3210@Entry 3211@Component 3212struct WebComponent { 3213 controller: webview.WebviewController = new webview.WebviewController(); 3214 3215 build() { 3216 Column() { 3217 Button('getWebId') 3218 .onClick(() => { 3219 try { 3220 let id = this.controller.getWebId(); 3221 console.log("id: " + id); 3222 } catch (error) { 3223 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3224 } 3225 }) 3226 Web({ src: 'www.example.com', controller: this.controller }) 3227 } 3228 } 3229} 3230``` 3231 3232### getUserAgent 3233 3234getUserAgent(): string 3235 3236获取当前默认用户代理。 3237 3238默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md) 3239 3240**系统能力:** SystemCapability.Web.Webview.Core 3241 3242**返回值:** 3243 3244| 类型 | 说明 | 3245| ------ | -------------- | 3246| string | 默认用户代理。 | 3247 3248**错误码:** 3249 3250以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3251 3252| 错误码ID | 错误信息 | 3253| -------- | ------------------------------------------------------------ | 3254| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3255 3256**示例:** 3257 3258```ts 3259// xxx.ets 3260import { webview } from '@kit.ArkWeb'; 3261import { BusinessError } from '@kit.BasicServicesKit'; 3262 3263@Entry 3264@Component 3265struct WebComponent { 3266 controller: webview.WebviewController = new webview.WebviewController(); 3267 3268 build() { 3269 Column() { 3270 Button('getUserAgent') 3271 .onClick(() => { 3272 try { 3273 let userAgent = this.controller.getUserAgent(); 3274 console.log("userAgent: " + userAgent); 3275 } catch (error) { 3276 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3277 } 3278 }) 3279 Web({ src: 'www.example.com', controller: this.controller }) 3280 } 3281 } 3282} 3283``` 3284 3285支持开发者基于默认的User-Agent去定制User-Agent。 3286```ts 3287// xxx.ets 3288import { webview } from '@kit.ArkWeb'; 3289import { BusinessError } from '@kit.BasicServicesKit'; 3290 3291@Entry 3292@Component 3293struct WebComponent { 3294 controller: webview.WebviewController = new webview.WebviewController(); 3295 @State ua: string = ""; 3296 3297 aboutToAppear(): void { 3298 webview.once('webInited', () => { 3299 try { 3300 // 应用侧用法示例,定制User-Agent。 3301 this.ua = this.controller.getUserAgent() + 'xxx'; 3302 this.controller.setCustomUserAgent(this.ua); 3303 } catch (error) { 3304 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3305 } 3306 }) 3307 } 3308 3309 build() { 3310 Column() { 3311 Web({ src: 'www.example.com', controller: this.controller }) 3312 } 3313 } 3314} 3315``` 3316 3317### getTitle 3318 3319getTitle(): string 3320 3321获取当前网页的标题。 3322 3323**系统能力:** SystemCapability.Web.Webview.Core 3324 3325**返回值:** 3326 3327| 类型 | 说明 | 3328| ------ | -------------------- | 3329| string | 当前网页的标题。 | 3330 3331**错误码:** 3332 3333以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3334 3335| 错误码ID | 错误信息 | 3336| -------- | ------------------------------------------------------------ | 3337| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3338 3339**示例:** 3340 3341```ts 3342// xxx.ets 3343import { webview } from '@kit.ArkWeb'; 3344import { BusinessError } from '@kit.BasicServicesKit'; 3345 3346@Entry 3347@Component 3348struct WebComponent { 3349 controller: webview.WebviewController = new webview.WebviewController(); 3350 3351 build() { 3352 Column() { 3353 Button('getTitle') 3354 .onClick(() => { 3355 try { 3356 let title = this.controller.getTitle(); 3357 console.log("title: " + title); 3358 } catch (error) { 3359 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3360 } 3361 }) 3362 Web({ src: 'www.example.com', controller: this.controller }) 3363 } 3364 } 3365} 3366``` 3367 3368### getPageHeight 3369 3370getPageHeight(): number 3371 3372获取当前网页的页面高度。 3373 3374**系统能力:** SystemCapability.Web.Webview.Core 3375 3376**返回值:** 3377 3378| 类型 | 说明 | 3379| ------ | -------------------- | 3380| number | 当前网页的页面高度。单位:vp。 | 3381 3382**错误码:** 3383 3384以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3385 3386| 错误码ID | 错误信息 | 3387| -------- | ------------------------------------------------------------ | 3388| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3389 3390**示例:** 3391 3392```ts 3393// xxx.ets 3394import { webview } from '@kit.ArkWeb'; 3395import { BusinessError } from '@kit.BasicServicesKit'; 3396 3397@Entry 3398@Component 3399struct WebComponent { 3400 controller: webview.WebviewController = new webview.WebviewController(); 3401 3402 build() { 3403 Column() { 3404 Button('getPageHeight') 3405 .onClick(() => { 3406 try { 3407 let pageHeight = this.controller.getPageHeight(); 3408 console.log("pageHeight : " + pageHeight); 3409 } catch (error) { 3410 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3411 } 3412 }) 3413 Web({ src: 'www.example.com', controller: this.controller }) 3414 } 3415 } 3416} 3417``` 3418 3419### storeWebArchive 3420 3421storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 3422 3423以回调方式异步保存当前页面。 3424 3425**系统能力:** SystemCapability.Web.Webview.Core 3426 3427**参数:** 3428 3429| 参数名 | 类型 | 必填 | 说明 | 3430| -------- | --------------------- | ---- | ------------------------------------------------------------ | 3431| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3432| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3433| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保存网页失败会返回null。 | 3434 3435**错误码:** 3436 3437以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3438 3439| 错误码ID | 错误信息 | 3440| -------- | ------------------------------------------------------------ | 3441| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3442| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3443| 17100003 | Invalid resource path or file type. | 3444 3445**示例:** 3446 3447```ts 3448// xxx.ets 3449import { webview } from '@kit.ArkWeb'; 3450import { BusinessError } from '@kit.BasicServicesKit'; 3451 3452@Entry 3453@Component 3454struct WebComponent { 3455 controller: webview.WebviewController = new webview.WebviewController(); 3456 3457 build() { 3458 Column() { 3459 Button('storeWebArchive') 3460 .onClick(() => { 3461 try { 3462 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 3463 if (error) { 3464 console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3465 return; 3466 } 3467 if (filename != null) { 3468 console.info(`save web archive success: ${filename}`); 3469 } 3470 }); 3471 } catch (error) { 3472 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3473 } 3474 }) 3475 Web({ src: 'www.example.com', controller: this.controller }) 3476 } 3477 } 3478} 3479``` 3480 3481### storeWebArchive 3482 3483storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 3484 3485以Promise方式异步保存当前页面。 3486 3487**系统能力:** SystemCapability.Web.Webview.Core 3488 3489**参数:** 3490 3491| 参数名 | 类型 | 必填 | 说明 | 3492| -------- | -------- | ---- | ------------------------------------------------------------ | 3493| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3494| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3495 3496**返回值:** 3497 3498| 类型 | 说明 | 3499| --------------- | ----------------------------------------------------- | 3500| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 3501 3502**错误码:** 3503 3504以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3505 3506| 错误码ID | 错误信息 | 3507| -------- | ------------------------------------------------------------ | 3508| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3509| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3510| 17100003 | Invalid resource path or file type. | 3511 3512**示例:** 3513 3514```ts 3515// xxx.ets 3516import { webview } from '@kit.ArkWeb'; 3517import { BusinessError } from '@kit.BasicServicesKit'; 3518 3519@Entry 3520@Component 3521struct WebComponent { 3522 controller: webview.WebviewController = new webview.WebviewController(); 3523 3524 build() { 3525 Column() { 3526 Button('storeWebArchive') 3527 .onClick(() => { 3528 try { 3529 this.controller.storeWebArchive("/data/storage/el2/base/", true) 3530 .then(filename => { 3531 if (filename != null) { 3532 console.info(`save web archive success: ${filename}`) 3533 } 3534 }) 3535 .catch((error: BusinessError) => { 3536 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3537 }) 3538 } catch (error) { 3539 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3540 } 3541 }) 3542 Web({ src: 'www.example.com', controller: this.controller }) 3543 } 3544 } 3545} 3546``` 3547 3548### getUrl 3549 3550getUrl(): string 3551 3552获取当前页面的url地址。 3553 3554**系统能力:** SystemCapability.Web.Webview.Core 3555 3556**返回值:** 3557 3558| 类型 | 说明 | 3559| ------ | ------------------- | 3560| string | 当前页面的url地址。 | 3561 3562**错误码:** 3563 3564以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3565 3566| 错误码ID | 错误信息 | 3567| -------- | ------------------------------------------------------------ | 3568| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3569 3570**示例:** 3571 3572```ts 3573// xxx.ets 3574import { webview } from '@kit.ArkWeb'; 3575import { BusinessError } from '@kit.BasicServicesKit'; 3576 3577@Entry 3578@Component 3579struct WebComponent { 3580 controller: webview.WebviewController = new webview.WebviewController(); 3581 3582 build() { 3583 Column() { 3584 Button('getUrl') 3585 .onClick(() => { 3586 try { 3587 let url = this.controller.getUrl(); 3588 console.log("url: " + url); 3589 } catch (error) { 3590 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3591 } 3592 }) 3593 Web({ src: 'www.example.com', controller: this.controller }) 3594 } 3595 } 3596} 3597``` 3598 3599### stop 3600 3601stop(): void 3602 3603停止页面加载。 3604 3605**系统能力:** SystemCapability.Web.Webview.Core 3606 3607**错误码:** 3608 3609以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3610 3611| 错误码ID | 错误信息 | 3612| -------- | ------------------------------------------------------------ | 3613| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3614 3615**示例:** 3616 3617```ts 3618// xxx.ets 3619import { webview } from '@kit.ArkWeb'; 3620import { BusinessError } from '@kit.BasicServicesKit'; 3621 3622@Entry 3623@Component 3624struct WebComponent { 3625 controller: webview.WebviewController = new webview.WebviewController(); 3626 3627 build() { 3628 Column() { 3629 Button('stop') 3630 .onClick(() => { 3631 try { 3632 this.controller.stop(); 3633 } catch (error) { 3634 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3635 } 3636 }); 3637 Web({ src: 'www.example.com', controller: this.controller }) 3638 } 3639 } 3640} 3641``` 3642 3643### backOrForward 3644 3645backOrForward(step: number): void 3646 3647按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 3648 3649前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。 3650 3651**系统能力:** SystemCapability.Web.Webview.Core 3652 3653**参数:** 3654 3655| 参数名 | 类型 | 必填 | 说明 | 3656| ------ | -------- | ---- | ---------------------- | 3657| step | number | 是 | 需要前进或后退的步长。 | 3658 3659**错误码:** 3660 3661以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3662 3663| 错误码ID | 错误信息 | 3664| -------- | ------------------------------------------------------------ | 3665| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3666| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3667 3668**示例:** 3669 3670```ts 3671// xxx.ets 3672import { webview } from '@kit.ArkWeb'; 3673import { BusinessError } from '@kit.BasicServicesKit'; 3674 3675@Entry 3676@Component 3677struct WebComponent { 3678 controller: webview.WebviewController = new webview.WebviewController(); 3679 @State step: number = -2; 3680 3681 build() { 3682 Column() { 3683 Button('backOrForward') 3684 .onClick(() => { 3685 try { 3686 this.controller.backOrForward(this.step); 3687 } catch (error) { 3688 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3689 } 3690 }) 3691 Web({ src: 'www.example.com', controller: this.controller }) 3692 } 3693 } 3694} 3695``` 3696 3697### scrollTo 3698 3699scrollTo(x:number, y:number, duration?:number): void 3700 3701在指定时间内,将页面滚动到指定的绝对位置。 3702 3703**系统能力:** SystemCapability.Web.Webview.Core 3704 3705**参数:** 3706 3707| 参数名 | 类型 | 必填 | 说明 | 3708| ------ | -------- | ---- | ---------------------- | 3709| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 | 3710| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。| 3711| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3712 3713**错误码:** 3714 3715以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3716 3717| 错误码ID | 错误信息 | 3718| -------- | ------------------------------------------------------------ | 3719| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3720| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3721 3722**示例:** 3723 3724```ts 3725// xxx.ets 3726import { webview } from '@kit.ArkWeb'; 3727import { BusinessError } from '@kit.BasicServicesKit'; 3728 3729@Entry 3730@Component 3731struct WebComponent { 3732 controller: webview.WebviewController = new webview.WebviewController(); 3733 3734 build() { 3735 Column() { 3736 Button('scrollTo') 3737 .onClick(() => { 3738 try { 3739 this.controller.scrollTo(50, 50, 500); 3740 } catch (error) { 3741 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3742 } 3743 }) 3744 Button('stopScroll') 3745 .onClick(() => { 3746 try { 3747 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3748 } catch (error) { 3749 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3750 } 3751 }) 3752 Web({ src: $rawfile('index.html'), controller: this.controller }) 3753 } 3754 } 3755} 3756``` 3757 3758加载的html文件。 3759```html 3760<!--index.html--> 3761<!DOCTYPE html> 3762<html> 3763<head> 3764 <title>Demo</title> 3765 <style> 3766 body { 3767 width:2000px; 3768 height:2000px; 3769 padding-right:170px; 3770 padding-left:170px; 3771 border:5px solid blueviolet 3772 } 3773 </style> 3774</head> 3775<body> 3776Scroll Test 3777</body> 3778</html> 3779``` 3780 3781### scrollBy 3782 3783scrollBy(deltaX:number, deltaY:number,duration?:number): void 3784 3785在指定时间内将页面滚动指定的偏移量。 3786 3787**系统能力:** SystemCapability.Web.Webview.Core 3788 3789**参数:** 3790 3791| 参数名 | 类型 | 必填 | 说明 | 3792| ------ | -------- | ---- | ---------------------- | 3793| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。单位:vp。 | 3794| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。单位:vp。 | 3795| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3796 3797**错误码:** 3798 3799以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3800 3801| 错误码ID | 错误信息 | 3802| -------- | ------------------------------------------------------------ | 3803| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3804| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3805 3806> **说明:** 3807> 3808> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。 3809 3810**示例:** 3811 3812```ts 3813// xxx.ets 3814import { webview } from '@kit.ArkWeb'; 3815import { BusinessError } from '@kit.BasicServicesKit'; 3816 3817@Entry 3818@Component 3819struct WebComponent { 3820 controller: webview.WebviewController = new webview.WebviewController(); 3821 3822 build() { 3823 Column() { 3824 Button('scrollBy') 3825 .onClick(() => { 3826 try { 3827 this.controller.scrollBy(50, 50, 500); 3828 } catch (error) { 3829 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3830 } 3831 }) 3832 Button('stopScroll') 3833 .onClick(() => { 3834 try { 3835 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3836 } catch (error) { 3837 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3838 } 3839 }) 3840 Web({ src: $rawfile('index.html'), controller: this.controller }) 3841 } 3842 } 3843} 3844``` 3845 3846加载的html文件。 3847```html 3848<!--index.html--> 3849<!DOCTYPE html> 3850<html> 3851<head> 3852 <title>Demo</title> 3853 <style> 3854 body { 3855 width:2000px; 3856 height:2000px; 3857 padding-right:170px; 3858 padding-left:170px; 3859 border:5px solid blueviolet 3860 } 3861 </style> 3862</head> 3863<body> 3864Scroll Test 3865</body> 3866</html> 3867``` 3868### scrollByWithResult<sup>12+</sup> 3869 3870scrollByWithResult(deltaX: number, deltaY: number): boolean 3871 3872将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。 3873 3874**系统能力:** SystemCapability.Web.Webview.Core 3875 3876**参数:** 3877 3878| 参数名 | 类型 | 必填 | 说明 | 3879| ------ | -------- | ---- | ---------------------- | 3880| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 3881| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 3882 3883**返回值:** 3884 3885| 类型 | 说明 | 3886| ------- | --------------------------------------- | 3887| boolean | true表示当前网页可以滑动,false表示当前网页不可以滑动。默认为false。| 3888 3889**错误码:** 3890 3891以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3892 3893| 错误码ID | 错误信息 | 3894| -------- | ------------------------------------------------------------ | 3895| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3896| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3897 3898> **说明:** 3899> 3900> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。 3901> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。 3902> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。 3903> - 此接口不保证滑动帧率性能。 3904 3905**示例:** 3906 3907```ts 3908// xxx.ets 3909import { webview } from '@kit.ArkWeb'; 3910import { BusinessError } from '@kit.BasicServicesKit'; 3911 3912@Entry 3913@Component 3914struct WebComponent { 3915 controller: webview.WebviewController = new webview.WebviewController(); 3916 3917 build() { 3918 Column() { 3919 Button('scrollByWithResult') 3920 .onClick(() => { 3921 try { 3922 let result = this.controller.scrollByWithResult(50, 50); 3923 console.log("original result: " + result); 3924 } catch (error) { 3925 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3926 } 3927 }) 3928 Web({ src: $rawfile('index.html'), controller: this.controller }) 3929 } 3930 } 3931} 3932``` 3933 3934加载的html文件。 3935```html 3936<!--index.html--> 3937<!DOCTYPE html> 3938<html> 3939<head> 3940 <title>Demo</title> 3941 <style> 3942 body { 3943 width:2000px; 3944 height:2000px; 3945 padding-right:170px; 3946 padding-left:170px; 3947 border:5px solid blueviolet 3948 } 3949 </style> 3950</head> 3951<body> 3952Scroll Test 3953</body> 3954</html> 3955``` 3956### slideScroll 3957 3958slideScroll(vx:number, vy:number): void 3959 3960按照指定速度模拟对页面的轻扫滚动动作。 3961 3962**系统能力:** SystemCapability.Web.Webview.Core 3963 3964**参数:** 3965 3966| 参数名 | 类型 | 必填 | 说明 | 3967| ------ | -------- | ---- | ---------------------- | 3968| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 | 3969| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 | 3970 3971**错误码:** 3972 3973以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3974 3975| 错误码ID | 错误信息 | 3976| -------- | ------------------------------------------------------------ | 3977| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3978| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3979 3980**示例:** 3981 3982```ts 3983// xxx.ets 3984import { webview } from '@kit.ArkWeb'; 3985import { BusinessError } from '@kit.BasicServicesKit'; 3986 3987@Entry 3988@Component 3989struct WebComponent { 3990 controller: webview.WebviewController = new webview.WebviewController(); 3991 3992 build() { 3993 Column() { 3994 Button('slideScroll') 3995 .onClick(() => { 3996 try { 3997 this.controller.slideScroll(500, 500); 3998 } catch (error) { 3999 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4000 } 4001 }) 4002 Web({ src: $rawfile('index.html'), controller: this.controller }) 4003 } 4004 } 4005} 4006``` 4007 4008加载的html文件。 4009```html 4010<!--index.html--> 4011<!DOCTYPE html> 4012<html> 4013<head> 4014 <title>Demo</title> 4015 <style> 4016 body { 4017 width:3000px; 4018 height:3000px; 4019 padding-right:170px; 4020 padding-left:170px; 4021 border:5px solid blueviolet 4022 } 4023 </style> 4024</head> 4025<body> 4026Scroll Test 4027</body> 4028</html> 4029``` 4030 4031### getOriginalUrl 4032 4033getOriginalUrl(): string 4034 4035获取当前页面的原始url地址。 4036风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 4037 4038**系统能力:** SystemCapability.Web.Webview.Core 4039 4040**返回值:** 4041 4042| 类型 | 说明 | 4043| ------ | ----------------------- | 4044| string | 当前页面的原始url地址。 | 4045 4046**错误码:** 4047 4048以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4049 4050| 错误码ID | 错误信息 | 4051| -------- | ------------------------------------------------------------ | 4052| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4053 4054**示例:** 4055 4056```ts 4057// xxx.ets 4058import { webview } from '@kit.ArkWeb'; 4059import { BusinessError } from '@kit.BasicServicesKit'; 4060 4061@Entry 4062@Component 4063struct WebComponent { 4064 controller: webview.WebviewController = new webview.WebviewController(); 4065 4066 build() { 4067 Column() { 4068 Button('getOrgUrl') 4069 .onClick(() => { 4070 try { 4071 let url = this.controller.getOriginalUrl(); 4072 console.log("original url: " + url); 4073 } catch (error) { 4074 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4075 } 4076 }) 4077 Web({ src: 'www.example.com', controller: this.controller }) 4078 } 4079 } 4080} 4081``` 4082 4083### getFavicon 4084 4085getFavicon(): image.PixelMap 4086 4087获取页面的favicon图标。 4088 4089**系统能力:** SystemCapability.Web.Webview.Core 4090 4091**返回值:** 4092 4093| 类型 | 说明 | 4094| -------------------------------------- | ------------------------------- | 4095| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 4096 4097**错误码:** 4098 4099以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4100 4101| 错误码ID | 错误信息 | 4102| -------- | ------------------------------------------------------------ | 4103| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4104 4105**示例:** 4106 4107```ts 4108// xxx.ets 4109import { webview } from '@kit.ArkWeb'; 4110import { BusinessError } from '@kit.BasicServicesKit'; 4111import { image } from '@kit.ImageKit'; 4112 4113@Entry 4114@Component 4115struct WebComponent { 4116 controller: webview.WebviewController = new webview.WebviewController(); 4117 @State pixelmap: image.PixelMap | undefined = undefined; 4118 4119 build() { 4120 Column() { 4121 Button('getFavicon') 4122 .onClick(() => { 4123 try { 4124 this.pixelmap = this.controller.getFavicon(); 4125 } catch (error) { 4126 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4127 } 4128 }) 4129 Web({ src: 'www.example.com', controller: this.controller }) 4130 } 4131 } 4132} 4133``` 4134 4135### setNetworkAvailable 4136 4137setNetworkAvailable(enable: boolean): void 4138 4139设置JavaScript中的window.navigator.onLine属性。 4140 4141**系统能力:** SystemCapability.Web.Webview.Core 4142 4143**参数:** 4144 4145| 参数名 | 类型 | 必填 | 说明 | 4146| ------ | ------- | ---- | --------------------------------- | 4147| enable | boolean | 是 | 是否使能window.navigator.onLine,默认为true,表示开启JavaScript中的window.navigator.onLine属性。 | 4148 4149**错误码:** 4150 4151以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4152 4153| 错误码ID | 错误信息 | 4154| -------- | ------------------------------------------------------------ | 4155| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4156| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4157 4158**示例:** 4159 4160```ts 4161// xxx.ets 4162import { webview } from '@kit.ArkWeb'; 4163import { BusinessError } from '@kit.BasicServicesKit'; 4164 4165@Entry 4166@Component 4167struct WebComponent { 4168 controller: webview.WebviewController = new webview.WebviewController(); 4169 4170 build() { 4171 Column() { 4172 Button('setNetworkAvailable') 4173 .onClick(() => { 4174 try { 4175 this.controller.setNetworkAvailable(true); 4176 } catch (error) { 4177 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4178 } 4179 }) 4180 Web({ src: $rawfile('index.html'), controller: this.controller }) 4181 } 4182 } 4183} 4184``` 4185 4186加载的html文件。 4187```html 4188<!-- index.html --> 4189<!DOCTYPE html> 4190<html> 4191<body> 4192<h1>online 属性</h1> 4193<p id="demo"></p> 4194<button onclick="func()">click</button> 4195<script> 4196 let online = navigator.onLine; 4197 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4198 4199 function func(){ 4200 var online = navigator.onLine; 4201 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4202 } 4203</script> 4204</body> 4205</html> 4206``` 4207 4208### hasImage 4209 4210hasImage(callback: AsyncCallback\<boolean>): void 4211 4212通过Callback方式异步查找当前页面是否存在图像。 4213 4214**系统能力:** SystemCapability.Web.Webview.Core 4215 4216**参数:** 4217 4218| 参数名 | 类型 | 必填 | 说明 | 4219| -------- | ----------------------- | ---- | -------------------------- | 4220| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。<br> true:存在图像;false:不存在图像。 | 4221 4222**错误码:** 4223 4224以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4225 4226| 错误码ID | 错误信息 | 4227| -------- | ------------------------------------------------------------ | 4228| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4229| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4230 4231**示例:** 4232 4233```ts 4234// xxx.ets 4235import { webview } from '@kit.ArkWeb'; 4236import { BusinessError } from '@kit.BasicServicesKit'; 4237 4238@Entry 4239@Component 4240struct WebComponent { 4241 controller: webview.WebviewController = new webview.WebviewController(); 4242 4243 build() { 4244 Column() { 4245 Button('hasImageCb') 4246 .onClick(() => { 4247 try { 4248 this.controller.hasImage((error, data) => { 4249 if (error) { 4250 console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4251 return; 4252 } 4253 console.info("hasImage: " + data); 4254 }); 4255 } catch (error) { 4256 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4257 } 4258 }) 4259 Web({ src: 'www.example.com', controller: this.controller }) 4260 } 4261 } 4262} 4263``` 4264 4265### hasImage 4266 4267hasImage(): Promise\<boolean> 4268 4269通过Promise方式异步查找当前页面是否存在图像。 4270 4271**系统能力:** SystemCapability.Web.Webview.Core 4272 4273**返回值:** 4274 4275| 类型 | 说明 | 4276| ----------------- | --------------------------------------- | 4277| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。<br>true:存在图像;false:不存在图像。 | 4278 4279**错误码:** 4280 4281以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4282 4283| 错误码ID | 错误信息 | 4284| -------- | ------------------------------------------------------------ | 4285| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4286| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 4287 4288**示例:** 4289 4290```ts 4291// xxx.ets 4292import { webview } from '@kit.ArkWeb'; 4293import { BusinessError } from '@kit.BasicServicesKit'; 4294 4295@Entry 4296@Component 4297struct WebComponent { 4298 controller: webview.WebviewController = new webview.WebviewController(); 4299 4300 build() { 4301 Column() { 4302 Button('hasImagePm') 4303 .onClick(() => { 4304 try { 4305 this.controller.hasImage().then((data) => { 4306 console.info('hasImage: ' + data); 4307 }).catch((error: BusinessError) => { 4308 console.error("error: " + error); 4309 }) 4310 } catch (error) { 4311 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4312 } 4313 }) 4314 Web({ src: 'www.example.com', controller: this.controller }) 4315 } 4316 } 4317} 4318``` 4319 4320### removeCache 4321 4322removeCache(clearRom: boolean): void 4323 4324清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 4325 4326> **说明:** 4327> 4328> 可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。 4329 4330**系统能力:** SystemCapability.Web.Webview.Core 4331 4332**参数:** 4333 4334| 参数名 | 类型 | 必填 | 说明 | 4335| -------- | ------- | ---- | -------------------------------------------------------- | 4336| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 4337 4338**错误码:** 4339 4340以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4341 4342| 错误码ID | 错误信息 | 4343| -------- | ------------------------------------------------------------ | 4344| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4345| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4346 4347**示例:** 4348 4349```ts 4350// xxx.ets 4351import { webview } from '@kit.ArkWeb'; 4352import { BusinessError } from '@kit.BasicServicesKit'; 4353 4354@Entry 4355@Component 4356struct WebComponent { 4357 controller: webview.WebviewController = new webview.WebviewController(); 4358 4359 build() { 4360 Column() { 4361 Button('removeCache') 4362 .onClick(() => { 4363 try { 4364 this.controller.removeCache(false); 4365 } catch (error) { 4366 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4367 } 4368 }) 4369 Web({ src: 'www.example.com', controller: this.controller }) 4370 } 4371 } 4372} 4373``` 4374 4375### removeAllCache<sup>18+</sup> 4376 4377static removeAllCache(clearRom: boolean): void 4378 4379清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 4380 4381> **说明:** 4382> 4383> 可以通过在data/app/el2/100/base/\<applicationPackageName\>/cache/web/目录下查看webview的缓存。 4384 4385**系统能力:** SystemCapability.Web.Webview.Core 4386 4387**参数:** 4388 4389| 参数名 | 类型 | 必填 | 说明 | 4390| -------- | ------- | ---- | -------------------------------------------------------- | 4391| clearRom | boolean | 是 | 设置为true时同时清除ROM和RAM中的缓存,设置为false时只清除RAM中的缓存。 | 4392 4393**错误码:** 4394 4395以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4396 4397| 错误码ID | 错误信息 | 4398| -------- | ------------------------------------------------------------ | 4399| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4400 4401**示例:** 4402 4403```ts 4404// xxx.ets 4405import { webview } from '@kit.ArkWeb'; 4406import { BusinessError } from '@kit.BasicServicesKit'; 4407 4408@Entry 4409@Component 4410struct WebComponent { 4411 controller: webview.WebviewController = new webview.WebviewController(); 4412 4413 build() { 4414 Column() { 4415 Button('removeAllCache') 4416 .onClick(() => { 4417 try { 4418 webview.WebviewController.removeAllCache(false); 4419 } catch (error) { 4420 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4421 } 4422 }) 4423 Web({ src: 'www.example.com', controller: this.controller }) 4424 } 4425 } 4426} 4427``` 4428 4429### pageUp 4430 4431pageUp(top: boolean): void 4432 4433将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 4434 4435**系统能力:** SystemCapability.Web.Webview.Core 4436 4437**参数:** 4438 4439| 参数名 | 类型 | 必填 | 说明 | 4440| ------ | ------- | ---- | ------------------------------------------------------------ | 4441| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 4442 4443**错误码:** 4444 4445以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4446 4447| 错误码ID | 错误信息 | 4448| -------- | ------------------------------------------------------------ | 4449| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4450| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4451 4452**示例:** 4453 4454```ts 4455// xxx.ets 4456import { webview } from '@kit.ArkWeb'; 4457import { BusinessError } from '@kit.BasicServicesKit'; 4458 4459@Entry 4460@Component 4461struct WebComponent { 4462 controller: webview.WebviewController = new webview.WebviewController(); 4463 4464 build() { 4465 Column() { 4466 Button('pageUp') 4467 .onClick(() => { 4468 try { 4469 this.controller.pageUp(false); 4470 } catch (error) { 4471 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4472 } 4473 }) 4474 Web({ src: 'www.example.com', controller: this.controller }) 4475 } 4476 } 4477} 4478``` 4479 4480### pageDown 4481 4482pageDown(bottom: boolean): void 4483 4484将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 4485 4486**系统能力:** SystemCapability.Web.Webview.Core 4487 4488**参数:** 4489 4490| 参数名 | 类型 | 必填 | 说明 | 4491| ------ | ------- | ---- | ------------------------------------------------------------ | 4492| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 4493 4494**错误码:** 4495 4496以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4497 4498| 错误码ID | 错误信息 | 4499| -------- | ------------------------------------------------------------ | 4500| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4501| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4502 4503**示例:** 4504 4505```ts 4506// xxx.ets 4507import { webview } from '@kit.ArkWeb'; 4508import { BusinessError } from '@kit.BasicServicesKit'; 4509 4510@Entry 4511@Component 4512struct WebComponent { 4513 controller: webview.WebviewController = new webview.WebviewController(); 4514 4515 build() { 4516 Column() { 4517 Button('pageDown') 4518 .onClick(() => { 4519 try { 4520 this.controller.pageDown(false); 4521 } catch (error) { 4522 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4523 } 4524 }) 4525 Web({ src: 'www.example.com', controller: this.controller }) 4526 } 4527 } 4528} 4529``` 4530 4531### getBackForwardEntries 4532 4533getBackForwardEntries(): BackForwardList 4534 4535获取当前Webview的历史信息列表。 4536 4537**系统能力:** SystemCapability.Web.Webview.Core 4538 4539**返回值:** 4540 4541| 类型 | 说明 | 4542| ----------------------------------- | --------------------------- | 4543| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 4544 4545**错误码:** 4546 4547以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4548 4549| 错误码ID | 错误信息 | 4550| -------- | ------------------------------------------------------------ | 4551| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4552 4553**示例:** 4554 4555```ts 4556// xxx.ets 4557import { webview } from '@kit.ArkWeb'; 4558import { BusinessError } from '@kit.BasicServicesKit'; 4559 4560@Entry 4561@Component 4562struct WebComponent { 4563 controller: webview.WebviewController = new webview.WebviewController(); 4564 4565 build() { 4566 Column() { 4567 Button('getBackForwardEntries') 4568 .onClick(() => { 4569 try { 4570 let list = this.controller.getBackForwardEntries() 4571 } catch (error) { 4572 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4573 } 4574 }) 4575 Web({ src: 'www.example.com', controller: this.controller }) 4576 } 4577 } 4578} 4579``` 4580 4581### serializeWebState 4582 4583serializeWebState(): Uint8Array 4584 4585将当前Webview的页面状态历史记录信息序列化。 4586 4587**系统能力:** SystemCapability.Web.Webview.Core 4588 4589**返回值:** 4590 4591| 类型 | 说明 | 4592| ---------- | --------------------------------------------- | 4593| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 4594 4595**错误码:** 4596 4597以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4598 4599| 错误码ID | 错误信息 | 4600| -------- | ------------------------------------------------------------ | 4601| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4602 4603**示例:** 4604 46051.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4606```ts 4607// xxx.ets 4608import { webview } from '@kit.ArkWeb'; 4609import { BusinessError } from '@kit.BasicServicesKit'; 4610import { fileIo } from '@kit.CoreFileKit'; 4611 4612@Entry 4613@Component 4614struct WebComponent { 4615 controller: webview.WebviewController = new webview.WebviewController(); 4616 4617 build() { 4618 Column() { 4619 Button('serializeWebState') 4620 .onClick(() => { 4621 try { 4622 let state = this.controller.serializeWebState(); 4623 let path:string | undefined = AppStorage.get("cacheDir"); 4624 if (path) { 4625 path += '/WebState'; 4626 // 以同步方法打开文件。 4627 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 4628 fileIo.writeSync(file.fd, state.buffer); 4629 fileIo.closeSync(file.fd); 4630 } 4631 } catch (error) { 4632 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4633 } 4634 }) 4635 Web({ src: 'www.example.com', controller: this.controller }) 4636 } 4637 } 4638} 4639``` 4640 46412.修改EntryAbility.ets。 4642获取应用缓存文件路径。 4643```ts 4644// xxx.ets 4645import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4646 4647export default class EntryAbility extends UIAbility { 4648 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4649 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4650 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4651 } 4652} 4653``` 4654 4655### restoreWebState 4656 4657restoreWebState(state: Uint8Array): void 4658 4659当前Webview从序列化数据中恢复页面状态历史记录。 4660 4661如果state过大,可能会导致异常。建议state大于512k时,放弃恢复页面状态历史记录。 4662 4663**系统能力:** SystemCapability.Web.Webview.Core 4664 4665**参数:** 4666 4667| 参数名 | 类型 | 必填 | 说明 | 4668| ------ | ---------- | ---- | ---------------------------- | 4669| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 4670 4671**错误码:** 4672 4673以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4674 4675| 错误码ID | 错误信息 | 4676| -------- | ------------------------------------------------------------ | 4677| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4678| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4679 4680**示例:** 4681 46821.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4683```ts 4684// xxx.ets 4685import { webview } from '@kit.ArkWeb'; 4686import { BusinessError } from '@kit.BasicServicesKit'; 4687import { fileIo } from '@kit.CoreFileKit'; 4688 4689@Entry 4690@Component 4691struct WebComponent { 4692 controller: webview.WebviewController = new webview.WebviewController(); 4693 4694 build() { 4695 Column() { 4696 Button('RestoreWebState') 4697 .onClick(() => { 4698 try { 4699 let path: string | undefined = AppStorage.get("cacheDir"); 4700 if (path) { 4701 path += '/WebState'; 4702 // 以同步方法打开文件。 4703 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE); 4704 let stat = fileIo.statSync(path); 4705 let size = stat.size; 4706 let buf = new ArrayBuffer(size); 4707 fileIo.read(file.fd, buf, (err, readLen) => { 4708 if (err) { 4709 console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code); 4710 } else { 4711 console.info("read file data succeed"); 4712 this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen))); 4713 fileIo.closeSync(file); 4714 } 4715 }); 4716 } 4717 } catch (error) { 4718 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4719 } 4720 }) 4721 Web({ src: 'www.example.com', controller: this.controller }) 4722 } 4723 } 4724} 4725``` 4726 47272.修改EntryAbility.ets。 4728获取应用缓存文件路径。 4729```ts 4730// xxx.ets 4731import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4732 4733export default class EntryAbility extends UIAbility { 4734 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4735 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4736 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4737 } 4738} 4739``` 4740 4741### customizeSchemes 4742 4743static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 4744 4745对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。 4746 4747**系统能力:** SystemCapability.Web.Webview.Core 4748 4749**参数:** 4750 4751| 参数名 | 类型 | 必填 | 说明 | 4752| -------- | ------- | ---- | -------------------------------------- | 4753| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 4754 4755**错误码:** 4756 4757以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4758 4759| 错误码ID | 错误信息 | 4760| -------- | ------------------------------------------------------------ | 4761| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4762| 17100020 | Failed to register custom schemes. | 4763 4764**示例:** 4765 4766```ts 4767// xxx.ets 4768import { webview } from '@kit.ArkWeb'; 4769import { BusinessError } from '@kit.BasicServicesKit'; 4770 4771@Entry 4772@Component 4773struct WebComponent { 4774 controller: webview.WebviewController = new webview.WebviewController(); 4775 responseWeb: WebResourceResponse = new WebResourceResponse(); 4776 scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true }; 4777 scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true }; 4778 scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true }; 4779 4780 aboutToAppear(): void { 4781 try { 4782 webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]); 4783 } catch (error) { 4784 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4785 } 4786 } 4787 4788 build() { 4789 Column() { 4790 Web({ src: 'www.example.com', controller: this.controller }) 4791 .onInterceptRequest((event) => { 4792 if (event) { 4793 console.log('url:' + event.request.getRequestUrl()); 4794 } 4795 return this.responseWeb; 4796 }) 4797 } 4798 } 4799} 4800``` 4801 4802### getCertificate<sup>10+</sup> 4803 4804getCertificate(): Promise<Array<cert.X509Cert>> 4805 4806获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。 4807 4808**系统能力:** SystemCapability.Web.Webview.Core 4809 4810**返回值:** 4811 4812| 类型 | 说明 | 4813| ---------- | --------------------------------------------- | 4814| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 | 4815 4816**错误码:** 4817 4818以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4819 4820| 错误码ID | 错误信息 | 4821| -------- | ------------------------------------------------------------ | 4822| 17100001 | Init error. The WebviewController must be associated with a web component. | 4823 4824**示例:** 4825 4826```ts 4827// xxx.ets 4828import { webview } from '@kit.ArkWeb'; 4829import { BusinessError } from '@kit.BasicServicesKit'; 4830import { cert } from '@kit.DeviceCertificateKit'; 4831 4832function Uint8ArrayToString(dataArray: Uint8Array) { 4833 let dataString = ''; 4834 for (let i = 0; i < dataArray.length; i++) { 4835 dataString += String.fromCharCode(dataArray[i]); 4836 } 4837 return dataString; 4838} 4839 4840function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 4841 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4842 for (let i = 0; i < x509CertArray.length; i++) { 4843 res += ', index = ' + i + ', issuer name = ' 4844 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4845 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4846 + x509CertArray[i].getNotBeforeTime() 4847 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 4848 } 4849 return res; 4850} 4851 4852@Entry 4853@Component 4854struct Index { 4855 // outputStr在UI界面显示调试信息 4856 @State outputStr: string = ''; 4857 webviewCtl: webview.WebviewController = new webview.WebviewController(); 4858 4859 build() { 4860 Row() { 4861 Column() { 4862 List({ space: 20, initialIndex: 0 }) { 4863 ListItem() { 4864 Button() { 4865 Text('load bad ssl') 4866 .fontSize(10) 4867 .fontWeight(FontWeight.Bold) 4868 } 4869 .type(ButtonType.Capsule) 4870 .onClick(() => { 4871 // 加载一个过期的证书网站,查看获取到的证书信息 4872 this.webviewCtl.loadUrl('https://expired.badssl.com'); 4873 }) 4874 .height(50) 4875 } 4876 4877 ListItem() { 4878 Button() { 4879 Text('load example') 4880 .fontSize(10) 4881 .fontWeight(FontWeight.Bold) 4882 } 4883 .type(ButtonType.Capsule) 4884 .onClick(() => { 4885 // 加载一个https网站,查看网站的证书信息 4886 this.webviewCtl.loadUrl('https://www.example.com'); 4887 }) 4888 .height(50) 4889 } 4890 4891 ListItem() { 4892 Button() { 4893 Text('getCertificate Promise') 4894 .fontSize(10) 4895 .fontWeight(FontWeight.Bold) 4896 } 4897 .type(ButtonType.Capsule) 4898 .onClick(() => { 4899 try { 4900 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 4901 this.outputStr = ParseX509CertInfo(x509CertArray); 4902 }) 4903 } catch (error) { 4904 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4905 } 4906 }) 4907 .height(50) 4908 } 4909 4910 ListItem() { 4911 Button() { 4912 Text('getCertificate AsyncCallback') 4913 .fontSize(10) 4914 .fontWeight(FontWeight.Bold) 4915 } 4916 .type(ButtonType.Capsule) 4917 .onClick(() => { 4918 try { 4919 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 4920 if (error) { 4921 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4922 } else { 4923 this.outputStr = ParseX509CertInfo(x509CertArray); 4924 } 4925 }) 4926 } catch (error) { 4927 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4928 } 4929 }) 4930 .height(50) 4931 } 4932 } 4933 .listDirection(Axis.Horizontal) 4934 .height('10%') 4935 4936 Text(this.outputStr) 4937 .width('100%') 4938 .fontSize(10) 4939 4940 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4941 .fileAccess(true) 4942 .javaScriptAccess(true) 4943 .domStorageAccess(true) 4944 .onlineImageAccess(true) 4945 .onPageEnd((e) => { 4946 if (e) { 4947 this.outputStr = 'onPageEnd : url = ' + e.url; 4948 } 4949 }) 4950 .onSslErrorEventReceive((e) => { 4951 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4952 e.handler.handleConfirm(); 4953 }) 4954 .width('100%') 4955 .height('70%') 4956 } 4957 .height('100%') 4958 } 4959 } 4960} 4961``` 4962 4963### getCertificate<sup>10+</sup> 4964 4965getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void 4966 4967获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。 4968 4969**系统能力:** SystemCapability.Web.Webview.Core 4970 4971**参数:** 4972 4973| 参数名 | 类型 | 必填 | 说明 | 4974| -------- | ---------------------------- | ---- | ---------------------------------------- | 4975| callback | AsyncCallback<Array<cert.X509Cert>> | 是 | 通过AsyncCallback异步返回当前网站的X509格式证书。 | 4976 4977**错误码:** 4978 4979以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4980 4981| 错误码ID | 错误信息 | 4982| -------- | ------------------------------------------------------------ | 4983| 17100001 | Init error. The WebviewController must be associated with a web component. | 4984| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4985 4986**示例:** 4987 4988```ts 4989// xxx.ets 4990import { webview } from '@kit.ArkWeb'; 4991import { BusinessError } from '@kit.BasicServicesKit'; 4992import { cert } from '@kit.DeviceCertificateKit'; 4993 4994function Uint8ArrayToString(dataArray: Uint8Array) { 4995 let dataString = ''; 4996 for (let i = 0; i < dataArray.length; i++) { 4997 dataString += String.fromCharCode(dataArray[i]); 4998 } 4999 return dataString; 5000} 5001 5002function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 5003 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 5004 for (let i = 0; i < x509CertArray.length; i++) { 5005 res += ', index = ' + i + ', issuer name = ' 5006 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 5007 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 5008 + x509CertArray[i].getNotBeforeTime() 5009 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 5010 } 5011 return res; 5012} 5013 5014@Entry 5015@Component 5016struct Index { 5017 // outputStr在UI界面显示调试信息 5018 @State outputStr: string = ''; 5019 webviewCtl: webview.WebviewController = new webview.WebviewController(); 5020 5021 build() { 5022 Row() { 5023 Column() { 5024 List({ space: 20, initialIndex: 0 }) { 5025 ListItem() { 5026 Button() { 5027 Text('load bad ssl') 5028 .fontSize(10) 5029 .fontWeight(FontWeight.Bold) 5030 } 5031 .type(ButtonType.Capsule) 5032 .onClick(() => { 5033 // 加载一个过期的证书网站,查看获取到的证书信息 5034 this.webviewCtl.loadUrl('https://expired.badssl.com'); 5035 }) 5036 .height(50) 5037 } 5038 5039 ListItem() { 5040 Button() { 5041 Text('load example') 5042 .fontSize(10) 5043 .fontWeight(FontWeight.Bold) 5044 } 5045 .type(ButtonType.Capsule) 5046 .onClick(() => { 5047 // 加载一个https网站,查看网站的证书信息 5048 this.webviewCtl.loadUrl('https://www.example.com'); 5049 }) 5050 .height(50) 5051 } 5052 5053 ListItem() { 5054 Button() { 5055 Text('getCertificate Promise') 5056 .fontSize(10) 5057 .fontWeight(FontWeight.Bold) 5058 } 5059 .type(ButtonType.Capsule) 5060 .onClick(() => { 5061 try { 5062 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 5063 this.outputStr = ParseX509CertInfo(x509CertArray); 5064 }) 5065 } catch (error) { 5066 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 5067 } 5068 }) 5069 .height(50) 5070 } 5071 5072 ListItem() { 5073 Button() { 5074 Text('getCertificate AsyncCallback') 5075 .fontSize(10) 5076 .fontWeight(FontWeight.Bold) 5077 } 5078 .type(ButtonType.Capsule) 5079 .onClick(() => { 5080 try { 5081 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 5082 if (error) { 5083 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 5084 } else { 5085 this.outputStr = ParseX509CertInfo(x509CertArray); 5086 } 5087 }) 5088 } catch (error) { 5089 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 5090 } 5091 }) 5092 .height(50) 5093 } 5094 } 5095 .listDirection(Axis.Horizontal) 5096 .height('10%') 5097 5098 Text(this.outputStr) 5099 .width('100%') 5100 .fontSize(10) 5101 5102 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 5103 .fileAccess(true) 5104 .javaScriptAccess(true) 5105 .domStorageAccess(true) 5106 .onlineImageAccess(true) 5107 .onPageEnd((e) => { 5108 if (e) { 5109 this.outputStr = 'onPageEnd : url = ' + e.url; 5110 } 5111 }) 5112 .onSslErrorEventReceive((e) => { 5113 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 5114 e.handler.handleConfirm(); 5115 }) 5116 .width('100%') 5117 .height('70%') 5118 } 5119 .height('100%') 5120 } 5121 } 5122} 5123``` 5124 5125### setAudioMuted<sup>10+</sup> 5126 5127setAudioMuted(mute: boolean): void 5128 5129设置网页静音。 5130 5131**系统能力:** SystemCapability.Web.Webview.Core 5132 5133**参数:** 5134 5135| 参数名 | 类型 | 必填 | 说明 | 5136| -------- | ------- | ---- | -------------------------------------- | 5137| mute | boolean | 是 | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 | 5138 5139**错误码:** 5140 5141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5142 5143| 错误码ID | 错误信息 | 5144| -------- | ------------------------------------------------------------ | 5145| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5146| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5147 5148**示例:** 5149 5150```ts 5151// xxx.ets 5152import { webview } from '@kit.ArkWeb'; 5153 5154@Entry 5155@Component 5156struct WebComponent { 5157 controller: webview.WebviewController = new webview.WebviewController(); 5158 @State muted: boolean = false; 5159 5160 build() { 5161 Column() { 5162 Button("Toggle Mute") 5163 .onClick(event => { 5164 if (event) { 5165 this.muted = !this.muted; 5166 this.controller.setAudioMuted(this.muted); 5167 } 5168 }) 5169 Web({ src: 'www.example.com', controller: this.controller }) 5170 } 5171 } 5172} 5173``` 5174 5175### prefetchPage<sup>10+</sup> 5176 5177prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void 5178 5179在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。 5180 5181> **说明:** 5182> 5183> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。 5184 5185**系统能力:** SystemCapability.Web.Webview.Core 5186 5187**参数:** 5188 5189| 参数名 | 类型 | 必填 | 说明 | 5190| ------------------| --------------------------------| ---- | ------------- | 5191| url | string | 是 | 预加载的url。| 5192| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | url的附加HTTP请求头。| 5193 5194**错误码:** 5195 5196以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5197 5198| 错误码ID | 错误信息 | 5199| -------- | ------------------------------------------------------------ | 5200| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5201| 17100002 | Invalid url. | 5202 5203**示例:** 5204 5205```ts 5206// xxx.ets 5207import { webview } from '@kit.ArkWeb'; 5208import { BusinessError } from '@kit.BasicServicesKit'; 5209 5210@Entry 5211@Component 5212struct WebComponent { 5213 controller: webview.WebviewController = new webview.WebviewController(); 5214 5215 build() { 5216 Column() { 5217 Button('prefetchPopularPage') 5218 .onClick(() => { 5219 try { 5220 // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。 5221 this.controller.prefetchPage('https://www.example.com'); 5222 } catch (error) { 5223 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5224 } 5225 }) 5226 // 需要将'www.example1.com'替换成一个真实的网站地址。 5227 Web({ src: 'www.example1.com', controller: this.controller }) 5228 } 5229 } 5230} 5231``` 5232 5233### prefetchResource<sup>12+</sup> 5234 5235static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void 5236 5237根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。 5238 5239**系统能力:** SystemCapability.Web.Webview.Core 5240 5241**参数:** 5242 5243| 参数名 | 类型 | 必填 | 说明 | 5244| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ | 5245| request | [RequestInfo](#requestinfo12) | 是 | 预获取请求的信息。 | 5246| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | 预获取请求的附加HTTP请求头。 | 5247| cacheKey | string | 否 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5248| cacheValidTime | number | 否 | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。 | 5249 5250**错误码:** 5251 5252以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5253 5254| 错误码ID | 错误信息 | 5255| -------- | ------------------------------------------------------------ | 5256| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 5257| 17100002 | Invalid url. | 5258 5259**示例:** 5260 5261```ts 5262// xxx.ets 5263import { webview } from '@kit.ArkWeb'; 5264import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5265 5266export default class EntryAbility extends UIAbility { 5267 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5268 console.log("EntryAbility onCreate"); 5269 webview.WebviewController.initializeWebEngine(); 5270 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5271 webview.WebviewController.prefetchResource( 5272 { 5273 url: "https://www.example1.com/post?e=f&g=h", 5274 method: "POST", 5275 formData: "a=x&b=y", 5276 }, 5277 [{ 5278 headerKey: "c", 5279 headerValue: "z", 5280 },], 5281 "KeyX", 500); 5282 AppStorage.setOrCreate("abilityWant", want); 5283 console.log("EntryAbility onCreate done"); 5284 } 5285} 5286``` 5287 5288### clearPrefetchedResource<sup>12+</sup> 5289 5290static clearPrefetchedResource(cacheKeyList: Array\<string>): void 5291 5292根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。 5293 5294**系统能力:** SystemCapability.Web.Webview.Core 5295 5296**参数:** 5297 5298| 参数名 | 类型 | 必填 | 说明 | 5299| ------------------| ----------- | ---- | ------------------------------------------------------------------------- | 5300| cacheKeyList | Array\<string> | 是 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5301 5302**示例:** 5303 5304```ts 5305// xxx.ets 5306import { webview } from '@kit.ArkWeb'; 5307 5308@Entry 5309@Component 5310struct WebComponent { 5311 controller: webview.WebviewController = new webview.WebviewController(); 5312 5313 build() { 5314 Column() { 5315 Web({ src: "https://www.example.com/", controller: this.controller }) 5316 .onAppear(() => { 5317 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5318 webview.WebviewController.prefetchResource( 5319 { 5320 url: "https://www.example1.com/post?e=f&g=h", 5321 method: "POST", 5322 formData: "a=x&b=y", 5323 }, 5324 [{ 5325 headerKey: "c", 5326 headerValue: "z", 5327 },], 5328 "KeyX", 500); 5329 }) 5330 .onPageEnd(() => { 5331 // 清除后续不再使用的预获取缓存。 5332 webview.WebviewController.clearPrefetchedResource(["KeyX",]); 5333 }) 5334 } 5335 } 5336} 5337``` 5338 5339### prepareForPageLoad<sup>10+</sup> 5340 5341static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void 5342 5343预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。 5344 5345**系统能力:** SystemCapability.Web.Webview.Core 5346 5347**参数:** 5348 5349| 参数名 | 类型 | 必填 | 说明 | 5350| ---------------| ------- | ---- | ------------- | 5351| url | string | 是 | 预连接的url。| 5352| preconnectable | boolean | 是 | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。| 5353| numSockets | number | 是 | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。| 5354 5355**错误码:** 5356 5357以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5358 5359| 错误码ID | 错误信息 | 5360| -------- | ------------------------------------------------------------ | 5361| 17100002 | Invalid url. | 5362| 171000013| The number of preconnect sockets is invalid. | 5363 5364**示例:** 5365 5366```ts 5367// xxx.ets 5368import { webview } from '@kit.ArkWeb'; 5369import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5370 5371export default class EntryAbility extends UIAbility { 5372 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5373 console.log("EntryAbility onCreate"); 5374 webview.WebviewController.initializeWebEngine(); 5375 // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。 5376 webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 5377 AppStorage.setOrCreate("abilityWant", want); 5378 console.log("EntryAbility onCreate done"); 5379 } 5380} 5381``` 5382 5383### setCustomUserAgent<sup>10+</sup> 5384 5385setCustomUserAgent(userAgent: string): void 5386 5387设置自定义用户代理,会覆盖系统的用户代理。 5388 5389当Web组件src设置了url时,建议在onControllerAttached回调事件中设置User-Agent,设置方式请参考示例。不建议将User-Agent设置在onLoadIntercept回调事件中,会概率性出现设置失败。 5390 5391当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置User-Agent,再通过loadUrl加载具体页面。 5392 5393默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md) 5394 5395> **说明:** 5396> 5397>当Web组件src设置了url,且未在onControllerAttached回调事件中设置User-Agent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置User-Agent不符的异常现象。 5398 5399**系统能力:** SystemCapability.Web.Webview.Core 5400 5401**参数:** 5402 5403| 参数名 | 类型 | 必填 | 说明 | 5404| ---------------| ------- | ---- | ------------- | 5405| userAgent | string | 是 | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 | 5406 5407**错误码:** 5408 5409以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5410 5411| 错误码ID | 错误信息 | 5412| -------- | ------------------------------------------------------------ | 5413| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5414| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5415 5416**示例:** 5417 5418```ts 5419// xxx.ets 5420import { webview } from '@kit.ArkWeb'; 5421import { BusinessError } from '@kit.BasicServicesKit'; 5422 5423@Entry 5424@Component 5425struct WebComponent { 5426 controller: webview.WebviewController = new webview.WebviewController(); 5427 @State customUserAgent: string = ' DemoApp'; 5428 5429 build() { 5430 Column() { 5431 Web({ src: 'www.example.com', controller: this.controller }) 5432 .onControllerAttached(() => { 5433 console.log("onControllerAttached"); 5434 try { 5435 let userAgent = this.controller.getUserAgent() + this.customUserAgent; 5436 this.controller.setCustomUserAgent(userAgent); 5437 } catch (error) { 5438 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5439 } 5440 }) 5441 } 5442 } 5443} 5444``` 5445 5446### setDownloadDelegate<sup>11+</sup> 5447 5448setDownloadDelegate(delegate: WebDownloadDelegate): void 5449 5450为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。 5451 5452**系统能力:** SystemCapability.Web.Webview.Core 5453 5454**参数:** 5455 5456| 参数名 | 类型 | 必填 | 说明 | 5457| ---------------| ------- | ---- | ------------- | 5458| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 5459 5460**错误码:** 5461 5462以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5463 5464| 错误码ID | 错误信息 | 5465| -------- | ------------------------------------------------------------ | 5466| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5467 5468**示例:** 5469 5470```ts 5471// xxx.ets 5472import { webview } from '@kit.ArkWeb'; 5473import { BusinessError } from '@kit.BasicServicesKit'; 5474 5475@Entry 5476@Component 5477struct WebComponent { 5478 controller: webview.WebviewController = new webview.WebviewController(); 5479 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5480 5481 build() { 5482 Column() { 5483 Button('setDownloadDelegate') 5484 .onClick(() => { 5485 try { 5486 this.controller.setDownloadDelegate(this.delegate); 5487 } catch (error) { 5488 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5489 } 5490 }) 5491 Web({ src: 'www.example.com', controller: this.controller }) 5492 } 5493 } 5494} 5495``` 5496 5497### startDownload<sup>11+</sup> 5498 5499startDownload(url: string): void 5500 5501使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。 5502 5503**系统能力:** SystemCapability.Web.Webview.Core 5504 5505**参数:** 5506 5507| 参数名 | 类型 | 必填 | 说明 | 5508| ---------------| ------- | ---- | ------------- | 5509| url | string | 是 | 下载地址。 | 5510 5511**错误码:** 5512 5513以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5514 5515| 错误码ID | 错误信息 | 5516| -------- | ------------------------------------------------------------ | 5517| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5518| 17100002 | Invalid url. | 5519 5520**示例:** 5521 5522```ts 5523// xxx.ets 5524import { webview } from '@kit.ArkWeb'; 5525import { BusinessError } from '@kit.BasicServicesKit'; 5526 5527@Entry 5528@Component 5529struct WebComponent { 5530 controller: webview.WebviewController = new webview.WebviewController(); 5531 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5532 5533 build() { 5534 Column() { 5535 Button('setDownloadDelegate') 5536 .onClick(() => { 5537 try { 5538 this.controller.setDownloadDelegate(this.delegate); 5539 } catch (error) { 5540 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5541 } 5542 }) 5543 Button('startDownload') 5544 .onClick(() => { 5545 try { 5546 this.controller.startDownload('https://www.example.com'); 5547 } catch (error) { 5548 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5549 } 5550 }) 5551 Web({ src: 'www.example.com', controller: this.controller }) 5552 } 5553 } 5554} 5555``` 5556 5557### getCustomUserAgent<sup>10+</sup> 5558 5559getCustomUserAgent(): string 5560 5561获取自定义用户代理。 5562 5563默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md) 5564 5565**系统能力:** SystemCapability.Web.Webview.Core 5566 5567**返回值:** 5568 5569| 类型 | 说明 | 5570| ------ | ------------------------- | 5571| string | 用户自定义代理信息。 | 5572 5573**错误码:** 5574 5575以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5576 5577| 错误码ID | 错误信息 | 5578| -------- | ------------------------------------------------------------ | 5579| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5580 5581**示例:** 5582 5583```ts 5584// xxx.ets 5585import { webview } from '@kit.ArkWeb'; 5586import { BusinessError } from '@kit.BasicServicesKit'; 5587 5588@Entry 5589@Component 5590struct WebComponent { 5591 controller: webview.WebviewController = new webview.WebviewController(); 5592 @State userAgent: string = ''; 5593 5594 build() { 5595 Column() { 5596 Button('getCustomUserAgent') 5597 .onClick(() => { 5598 try { 5599 this.userAgent = this.controller.getCustomUserAgent(); 5600 console.log("userAgent: " + this.userAgent); 5601 } catch (error) { 5602 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5603 } 5604 }) 5605 Web({ src: 'www.example.com', controller: this.controller }) 5606 } 5607 } 5608} 5609``` 5610 5611### setConnectionTimeout<sup>11+</sup> 5612 5613static setConnectionTimeout(timeout: number): void 5614 5615设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。 5616 5617**系统能力:** SystemCapability.Web.Webview.Core 5618 5619**参数:** 5620 5621| 参数名 | 类型 | 必填 | 说明 | 5622| ---------------| ------- | ---- | ------------- | 5623| timeout | number | 是 | socket连接超时时间,以秒为单位,必须为大于0的整数。 | 5624 5625**错误码:** 5626 5627以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5628 5629| 错误码ID | 错误信息 | 5630| -------- | ------------------------------------------------------------ | 5631| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 5632 5633**示例:** 5634 5635```ts 5636// xxx.ets 5637import { webview } from '@kit.ArkWeb'; 5638import { BusinessError } from '@kit.BasicServicesKit'; 5639 5640@Entry 5641@Component 5642struct WebComponent { 5643 controller: webview.WebviewController = new webview.WebviewController(); 5644 5645 build() { 5646 Column() { 5647 Button('setConnectionTimeout') 5648 .onClick(() => { 5649 try { 5650 webview.WebviewController.setConnectionTimeout(5); 5651 console.log("setConnectionTimeout: 5s"); 5652 } catch (error) { 5653 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5654 } 5655 }) 5656 Web({ src: 'www.example.com', controller: this.controller }) 5657 .onErrorReceive((event) => { 5658 if (event) { 5659 console.log('getErrorInfo:' + event.error.getErrorInfo()); 5660 console.log('getErrorCode:' + event.error.getErrorCode()); 5661 } 5662 }) 5663 } 5664 } 5665} 5666``` 5667 5668### warmupServiceWorker<sup>12+</sup> 5669 5670static warmupServiceWorker(url: string): void 5671 5672预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。 5673 5674**系统能力:** SystemCapability.Web.Webview.Core 5675 5676**参数:** 5677 5678| 参数名 | 类型 | 必填 | 说明 | 5679| ---------------| ------- | ---- | ------------- | 5680| url | string | 是 | 需要预热ServiceWorker的url。| 5681 5682**错误码:** 5683 5684以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5685 5686| 错误码ID | 错误信息 | 5687| -------- | ------------------------------------------------------------ | 5688| 17100002 | Invalid url. | 5689 5690**示例:** 5691 5692```ts 5693// xxx.ts 5694import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5695import { hilog } from '@kit.PerformanceAnalysisKit'; 5696import { window } from '@kit.ArkUI'; 5697import { webview } from '@kit.ArkWeb'; 5698 5699export default class EntryAbility extends UIAbility { 5700 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5701 console.log("EntryAbility onCreate"); 5702 webview.WebviewController.initializeWebEngine(); 5703 webview.WebviewController.warmupServiceWorker("https://www.example.com"); 5704 AppStorage.setOrCreate("abilityWant", want); 5705 } 5706} 5707``` 5708 5709### enableSafeBrowsing<sup>11+</sup> 5710 5711enableSafeBrowsing(enable: boolean): void 5712 5713<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。 5714本功能默认不生效,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)进行检测。 5715<!--RP1End--> 5716 5717**系统能力:** SystemCapability.Web.Webview.Core 5718 5719**参数:** 5720 5721| 参数名 | 类型 | 必填 | 说明 | 5722| --------| ------- | ---- | ---------------------------| 5723| enable | boolean | 是 | 是否启用检查网站安全风险的功能。<br>true表示启用检查网站安全风险的功能,false表示不启用检查网站安全风险的功能。<br>默认值:false。 | 5724 5725**错误码:** 5726 5727以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5728 5729| 错误码ID | 错误信息 | 5730| -------- | ----------------------- | 5731| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5732 5733**示例:** 5734 5735```ts 5736// xxx.ets 5737import { webview } from '@kit.ArkWeb'; 5738import { BusinessError } from '@kit.BasicServicesKit'; 5739 5740@Entry 5741@Component 5742struct WebComponent { 5743 controller: webview.WebviewController = new webview.WebviewController(); 5744 5745 build() { 5746 Column() { 5747 Button('enableSafeBrowsing') 5748 .onClick(() => { 5749 try { 5750 this.controller.enableSafeBrowsing(true); 5751 console.log("enableSafeBrowsing: true"); 5752 } catch (error) { 5753 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5754 } 5755 }) 5756 Web({ src: 'www.example.com', controller: this.controller }) 5757 } 5758 } 5759} 5760``` 5761 5762### isSafeBrowsingEnabled<sup>11+</sup> 5763 5764isSafeBrowsingEnabled(): boolean 5765 5766获取当前网页是否启用了检查网站安全风险。 5767 5768**系统能力:** SystemCapability.Web.Webview.Core 5769 5770**返回值:** 5771 5772| 类型 | 说明 | 5773| ------- | --------------------------------------- | 5774| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false,表示未启用。| 5775 5776**示例:** 5777 5778```ts 5779// xxx.ets 5780import { webview } from '@kit.ArkWeb'; 5781 5782@Entry 5783@Component 5784struct WebComponent { 5785 controller: webview.WebviewController = new webview.WebviewController(); 5786 5787 build() { 5788 Column() { 5789 Button('isSafeBrowsingEnabled') 5790 .onClick(() => { 5791 let result = this.controller.isSafeBrowsingEnabled(); 5792 console.log("result: " + result); 5793 }) 5794 Web({ src: 'www.example.com', controller: this.controller }) 5795 } 5796 } 5797} 5798``` 5799 5800### enableIntelligentTrackingPrevention<sup>12+</sup> 5801 5802enableIntelligentTrackingPrevention(enable: boolean): void 5803 5804启用智能防跟踪功能,默认该功能未启用。 5805 5806**系统能力:** SystemCapability.Web.Webview.Core 5807 5808**参数:** 5809 5810| 参数名 | 类型 | 必填 | 说明 | 5811| --------| ------- | ---- | ---------------------------| 5812| enable | boolean | 是 | 是否启用智能防跟踪功能。<br>true表示启用启用智能防跟踪功能,false表示不启用启用智能防跟踪功能。<br>默认值:false。 | 5813 5814**错误码:** 5815 5816> **说明:** 5817> 5818> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。 5819 5820以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5821 5822| 错误码ID | 错误信息 | 5823| -------- | ----------------------- | 5824| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5825| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5826| 801 | Capability not supported. | 5827 5828**示例:** 5829 5830```ts 5831// xxx.ets 5832import { webview } from '@kit.ArkWeb'; 5833import { BusinessError } from '@kit.BasicServicesKit'; 5834 5835@Entry 5836@Component 5837struct WebComponent { 5838 controller: webview.WebviewController = new webview.WebviewController(); 5839 5840 build() { 5841 Column() { 5842 Button('enableIntelligentTrackingPrevention') 5843 .onClick(() => { 5844 try { 5845 this.controller.enableIntelligentTrackingPrevention(true); 5846 console.log("enableIntelligentTrackingPrevention: true"); 5847 } catch (error) { 5848 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5849 } 5850 }) 5851 Web({ src: 'www.example.com', controller: this.controller }) 5852 } 5853 } 5854} 5855``` 5856 5857### isIntelligentTrackingPreventionEnabled<sup>12+</sup> 5858 5859isIntelligentTrackingPreventionEnabled(): boolean 5860 5861获取当前Web是否启用了智能防跟踪功能。 5862 5863**系统能力:** SystemCapability.Web.Webview.Core 5864 5865**返回值:** 5866 5867| 类型 | 说明 | 5868| ------- | --------------------------------------- | 5869| boolean | 当前Web是否启用了智能防跟踪功能,默认为false,表示未启用。| 5870 5871**错误码:** 5872 5873> **说明:** 5874> 5875> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。 5876 5877以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5878 5879| 错误码ID | 错误信息 | 5880| -------- | ----------------------- | 5881| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5882| 801 | Capability not supported. | 5883 5884**示例:** 5885 5886```ts 5887// xxx.ets 5888import { webview } from '@kit.ArkWeb'; 5889import { BusinessError } from '@kit.BasicServicesKit'; 5890 5891@Entry 5892@Component 5893struct WebComponent { 5894 controller: webview.WebviewController = new webview.WebviewController(); 5895 5896 build() { 5897 Column() { 5898 Button('isIntelligentTrackingPreventionEnabled') 5899 .onClick(() => { 5900 try { 5901 let result = this.controller.isIntelligentTrackingPreventionEnabled(); 5902 console.log("result: " + result); 5903 } catch (error) { 5904 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5905 } 5906 }) 5907 Web({ src: 'www.example.com', controller: this.controller }) 5908 } 5909 } 5910} 5911``` 5912 5913### addIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5914 5915static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5916 5917添加智能防跟踪功能绕过的域名列表。 5918 5919**系统能力:** SystemCapability.Web.Webview.Core 5920 5921**参数:** 5922 5923| 参数名 | 类型 | 必填 | 说明 | 5924| ----------- | ------------- | ---- | ------------------------ | 5925| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5926 5927**错误码:** 5928 5929> **说明:** 5930> 5931> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。 5932 5933以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5934 5935| 错误码ID | 错误信息 | 5936| -------- | ------------------------ | 5937| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5938| 801 | Capability not supported. | 5939 5940**示例:** 5941 5942```ts 5943// xxx.ets 5944import { webview } from '@kit.ArkWeb'; 5945import { BusinessError } from '@kit.BasicServicesKit'; 5946 5947@Entry 5948@Component 5949struct WebComponent { 5950 controller: webview.WebviewController = new webview.WebviewController(); 5951 5952 build() { 5953 Column() { 5954 Button('addIntelligentTrackingPreventionBypassingList') 5955 .onClick(() => { 5956 try { 5957 let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"]; 5958 webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList); 5959 } catch (error) { 5960 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5961 } 5962 }) 5963 Web({ src: 'www.example.com', controller: this.controller }) 5964 } 5965 } 5966} 5967``` 5968 5969### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5970 5971static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5972 5973删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。 5974 5975**系统能力:** SystemCapability.Web.Webview.Core 5976 5977**参数:** 5978 5979| 参数名 | 类型 | 必填 | 说明 | 5980| ----------- | ------------- | ---- | ------------------------ | 5981| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5982 5983**错误码:** 5984 5985> **说明:** 5986> 5987> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。 5988 5989以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5990 5991| 错误码ID | 错误信息 | 5992| -------- | ------------------------ | 5993| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5994| 801 | Capability not supported. | 5995 5996**示例:** 5997 5998```ts 5999// xxx.ets 6000import { webview } from '@kit.ArkWeb'; 6001import { BusinessError } from '@kit.BasicServicesKit'; 6002 6003@Entry 6004@Component 6005struct WebComponent { 6006 controller: webview.WebviewController = new webview.WebviewController(); 6007 6008 build() { 6009 Column() { 6010 Button('removeIntelligentTrackingPreventionBypassingList') 6011 .onClick(() => { 6012 try { 6013 let hostList = ["www.test1.com", "www.test2.com"]; 6014 webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList); 6015 } catch (error) { 6016 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6017 } 6018 }) 6019 Web({ src: 'www.example.com', controller: this.controller }) 6020 } 6021 } 6022} 6023``` 6024 6025### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup> 6026 6027static clearIntelligentTrackingPreventionBypassingList(): void 6028 6029删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。 6030 6031**系统能力:** SystemCapability.Web.Webview.Core 6032 6033**错误码:** 6034 6035> **说明:** 6036> 6037> 从API Version 18开始,在不支持智能防跟踪功能的设备上调用该API会抛出801异常。 6038 6039以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6040 6041| 错误码ID | 错误信息 | 6042| -------- | ------------------------ | 6043| 801 | Capability not supported. | 6044 6045**示例:** 6046 6047```ts 6048// xxx.ets 6049import { webview } from '@kit.ArkWeb'; 6050 6051@Entry 6052@Component 6053struct WebComponent { 6054 controller: webview.WebviewController = new webview.WebviewController(); 6055 6056 build() { 6057 Column() { 6058 Button('clearIntelligentTrackingPreventionBypassingList') 6059 .onClick(() => { 6060 webview.WebviewController.clearIntelligentTrackingPreventionBypassingList(); 6061 }) 6062 Web({ src: 'www.example.com', controller: this.controller }) 6063 } 6064 } 6065} 6066``` 6067 6068### getDefaultUserAgent<sup>14+</sup> 6069 6070static getDefaultUserAgent(): string 6071 6072获取默认用户代理。 6073 6074此接口只允许在UI线程调用。 6075 6076默认User-Agent定义与使用场景请参考[User-Agent开发指导](../../web/web-default-userAgent.md) 6077 6078**系统能力:** SystemCapability.Web.Webview.Core 6079 6080**示例:** 6081 6082```ts 6083// xxx.ets 6084import { webview } from '@kit.ArkWeb'; 6085import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 6086 6087export default class EntryAbility extends UIAbility { 6088 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 6089 console.log("EntryAbility onCreate"); 6090 webview.WebviewController.initializeWebEngine(); 6091 let defaultUserAgent = webview.WebviewController.getDefaultUserAgent(); 6092 console.log("defaultUserAgent: " + defaultUserAgent); 6093 } 6094} 6095``` 6096 6097### enableAdsBlock<sup>12+</sup> 6098 6099enableAdsBlock(enable: boolean): void 6100 6101启用广告过滤功能,默认该功能未启用。 6102 6103**系统能力:** SystemCapability.Web.Webview.Core 6104 6105**参数:** 6106 6107| 参数名 | 类型 | 必填 | 说明 | 6108| --------| ------- | ---- | ---------------------------| 6109| enable | boolean | 是 | 是否启用广告过滤功能,默认为false,表示未启用。 | 6110 6111**错误码:** 6112 6113> **说明:** 6114> 6115> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 6116 6117以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6118 6119| 错误码ID | 错误信息 | 6120| -------- | ----------------------- | 6121| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6122| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 6123| 801 | Capability not supported. | 6124 6125**示例:** 6126 6127```ts 6128// xxx.ets 6129import { webview } from '@kit.ArkWeb'; 6130import { BusinessError } from '@kit.BasicServicesKit'; 6131 6132@Entry 6133@Component 6134struct WebComponent { 6135 controller: webview.WebviewController = new webview.WebviewController(); 6136 6137 build() { 6138 Column() { 6139 Button('enableAdsBlock') 6140 .onClick(() => { 6141 try { 6142 this.controller.enableAdsBlock(true); 6143 console.log("enableAdsBlock: true") 6144 } catch (error) { 6145 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6146 } 6147 }) 6148 Web({ src: 'www.example.com', controller: this.controller }) 6149 } 6150 } 6151} 6152``` 6153 6154### isAdsBlockEnabled<sup>12+</sup> 6155 6156isAdsBlockEnabled() : boolean 6157 6158查询广告过滤功能是否开启,默认该功能未启用。 6159 6160**系统能力:** SystemCapability.Web.Webview.Core 6161 6162**返回值:** 6163 6164| 类型 | 说明 | 6165| ------------------------------------------------------------ | ---------------------- | 6166| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 | 6167 6168**错误码:** 6169 6170> **说明:** 6171> 6172> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 6173 6174以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6175 6176| 错误码ID | 错误信息 | 6177| -------- | ----------------------- | 6178| 801 | Capability not supported. | 6179 6180**示例:** 6181 6182```ts 6183// xxx.ets 6184import { webview } from '@kit.ArkWeb'; 6185import { BusinessError } from '@kit.BasicServicesKit'; 6186 6187@Entry 6188@Component 6189struct WebComponent { 6190 controller: webview.WebviewController = new webview.WebviewController(); 6191 6192 build() { 6193 Column() { 6194 Button('isAdsBlockEnabled') 6195 .onClick(() => { 6196 try { 6197 let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled(); 6198 console.log("isAdsBlockEnabled:", isAdsBlockEnabled); 6199 } catch (error) { 6200 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6201 } 6202 }) 6203 Web({ src: 'www.example.com', controller: this.controller }) 6204 } 6205 } 6206} 6207``` 6208 6209### isAdsBlockEnabledForCurPage<sup>12+</sup> 6210 6211isAdsBlockEnabledForCurPage() : boolean 6212 6213查询当前网页是否开启广告过滤功能。 6214当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。 6215 6216**系统能力:** SystemCapability.Web.Webview.Core 6217 6218**返回值:** 6219 6220| 类型 | 说明 | 6221| ------------------------------------------------------------ | ---------------------- | 6222| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 | 6223 6224**错误码:** 6225 6226> **说明:** 6227> 6228> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 6229 6230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6231 6232| 错误码ID | 错误信息 | 6233| -------- | ----------------------- | 6234| 801 | Capability not supported. | 6235 6236**示例:** 6237 6238```ts 6239// xxx.ets 6240import { webview } from '@kit.ArkWeb'; 6241import { BusinessError } from '@kit.BasicServicesKit'; 6242 6243@Entry 6244@Component 6245struct WebComponent { 6246 controller: webview.WebviewController = new webview.WebviewController(); 6247 6248 build() { 6249 Column() { 6250 Button('isAdsBlockEnabledForCurPage') 6251 .onClick(() => { 6252 try { 6253 let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage(); 6254 console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage); 6255 } catch (error) { 6256 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6257 } 6258 }) 6259 Web({ src: 'www.example.com', controller: this.controller }) 6260 } 6261 } 6262} 6263``` 6264 6265### setRenderProcessMode<sup>12+</sup> 6266 6267static setRenderProcessMode(mode: RenderProcessMode): void 6268 6269设置ArkWeb渲染子进程模式。 6270 6271**系统能力:** SystemCapability.Web.Webview.Core 6272 6273**参数:** 6274 6275| 参数名 | 类型 | 必填 | 说明 | 6276| ----------- | ------------- | ---- | ------------------------ | 6277| mode | [RenderProcessMode](#renderprocessmode12)| 是 | 渲染子进程模式。可以先调用[getRenderProcessMode()](#getrenderprocessmode12)查看当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。 | 6278 6279**错误码:** 6280 6281以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6282 6283| 错误码ID | 错误信息 | 6284| -------- | ------------------------ | 6285| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6286 6287**示例:** 6288 6289```ts 6290// xxx.ets 6291import { webview } from '@kit.ArkWeb'; 6292import { BusinessError } from '@kit.BasicServicesKit'; 6293 6294@Entry 6295@Component 6296struct WebComponent { 6297 controller: webview.WebviewController = new webview.WebviewController(); 6298 6299 build() { 6300 Column() { 6301 Button('setRenderProcessMode') 6302 .onClick(() => { 6303 try { 6304 webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE); 6305 } catch (error) { 6306 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6307 } 6308 }) 6309 Web({ src: 'www.example.com', controller: this.controller }) 6310 } 6311 } 6312} 6313``` 6314### getRenderProcessMode<sup>12+</sup> 6315 6316static getRenderProcessMode(): RenderProcessMode 6317 6318查询ArkWeb的渲染子进程模式。 6319 6320**系统能力:** SystemCapability.Web.Webview.Core 6321 6322**返回值:** 6323 6324| 类型 | 说明 | 6325| ----------------------------------------- | ------------------------------------------------------------ | 6326| [RenderProcessMode](#renderprocessmode12) | 渲染子进程模式类型。调用[getRenderProcessMode()](#getrenderprocessmode12)获取当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。 | 6327 6328 6329**示例:** 6330 6331```ts 6332// xxx.ets 6333import { webview } from '@kit.ArkWeb'; 6334 6335@Entry 6336@Component 6337struct WebComponent { 6338 controller: webview.WebviewController = new webview.WebviewController(); 6339 6340 build() { 6341 Column() { 6342 Button('getRenderProcessMode') 6343 .onClick(() => { 6344 let mode = webview.WebviewController.getRenderProcessMode(); 6345 console.log("getRenderProcessMode: " + mode); 6346 }) 6347 Web({ src: 'www.example.com', controller: this.controller }) 6348 } 6349 } 6350} 6351``` 6352 6353### terminateRenderProcess<sup>12+</sup> 6354 6355terminateRenderProcess(): boolean 6356 6357销毁渲染进程。 6358 6359调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。 6360 6361**系统能力:** SystemCapability.Web.Webview.Core 6362 6363**返回值:** 6364 6365| 类型 | 说明 | 6366| ------------------------------------------------------------ | ---------------------- | 6367| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。| 6368 6369**错误码:** 6370 6371以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6372 6373| 错误码ID | 错误信息 | 6374| -------- | ------------------------------------------------------------ | 6375| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6376 6377**示例:** 6378 6379```ts 6380// xxx.ets 6381import { webview } from '@kit.ArkWeb'; 6382 6383@Entry 6384@Component 6385struct WebComponent { 6386 controller: webview.WebviewController = new webview.WebviewController(); 6387 6388 build() { 6389 Column() { 6390 Button('terminateRenderProcess') 6391 .onClick(() => { 6392 let result = this.controller.terminateRenderProcess(); 6393 console.log("terminateRenderProcess result: " + result); 6394 }) 6395 Web({ src: 'www.example.com', controller: this.controller }) 6396 } 6397 } 6398} 6399``` 6400 6401### postUrl<sup>11+</sup> 6402 6403postUrl(url: string, postData: ArrayBuffer): void 6404 6405使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。 6406 6407**系统能力:** SystemCapability.Web.Webview.Core 6408 6409**参数:** 6410 6411| 参数名 | 类型 | 必填 | 说明 | 6412| ------- | ---------------- | ---- | :-------------------- | 6413| url | string | 是 | 需要加载的 URL。 | 6414| postData | ArrayBuffer | 是 | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。| 6415 6416**错误码:** 6417 6418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6419 6420| 错误码ID | 错误信息 | 6421| -------- | ------------------------------------------------------------ | 6422| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6423| 17100002 | Invalid url. | 6424| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6425 6426**示例:** 6427 6428```ts 6429// xxx.ets 6430import { webview } from '@kit.ArkWeb'; 6431import { BusinessError } from '@kit.BasicServicesKit'; 6432 6433class TestObj { 6434 constructor() { 6435 } 6436 6437 test(str: string): ArrayBuffer { 6438 let buf = new ArrayBuffer(str.length); 6439 let buff = new Uint8Array(buf); 6440 6441 for (let i = 0; i < str.length; i++) { 6442 buff[i] = str.charCodeAt(i); 6443 } 6444 return buf; 6445 } 6446} 6447 6448@Entry 6449@Component 6450struct WebComponent { 6451 controller: webview.WebviewController = new webview.WebviewController(); 6452 @State testObjtest: TestObj = new TestObj(); 6453 6454 build() { 6455 Column() { 6456 Button('postUrl') 6457 .onClick(() => { 6458 try { 6459 // 数据转化为ArrayBuffer类型。 6460 let postData = this.testObjtest.test("Name=test&Password=test"); 6461 this.controller.postUrl('www.example.com', postData); 6462 } catch (error) { 6463 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6464 } 6465 }) 6466 Web({ src: '', controller: this.controller }) 6467 } 6468 } 6469} 6470``` 6471 6472### createWebPrintDocumentAdapter<sup>11+</sup> 6473 6474createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter 6475 6476创建web相关打印功能。 6477 6478**系统能力:** SystemCapability.Web.Webview.Core 6479 6480**参数:** 6481 6482| 参数名 | 类型 | 必填 | 说明 | 6483| ------- | ------ | ---- | :-------------------- | 6484| jobName | string | 是 | 需要打印的文件名。 | 6485 6486**返回值:** 6487 6488| 类型 | 说明 | 6489| -------------------- | ------------------------- | 6490| print.printDocumentAdapter | 返回打印文档的适配器。 | 6491 6492**错误码:** 6493 6494以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6495 6496| 错误码ID | 错误信息 | 6497| -------- | -------------------------------------------------------------------------- | 6498| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6499| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6500 6501**示例:** 6502 6503```ts 6504// xxx.ets 6505import { webview } from '@kit.ArkWeb'; 6506import { BusinessError, print } from '@kit.BasicServicesKit'; 6507 6508@Entry 6509@Component 6510struct WebComponent { 6511 controller: webview.WebviewController = new webview.WebviewController(); 6512 6513 build() { 6514 Column() { 6515 Button('createWebPrintDocumentAdapter') 6516 .onClick(() => { 6517 try { 6518 let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf'); 6519 print.print('example_jobid', webPrintDocadapter, null, this.getUIContext().getHostContext()); 6520 } catch (error) { 6521 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6522 } 6523 }) 6524 Web({ src: 'www.example.com', controller: this.controller }) 6525 } 6526 } 6527} 6528``` 6529### isIncognitoMode<sup>11+</sup> 6530 6531isIncognitoMode(): boolean 6532 6533查询当前是否是隐私模式的Webview。 6534 6535**系统能力:** SystemCapability.Web.Webview.Core 6536 6537**返回值:** 6538 6539| 类型 | 说明 | 6540| -------------------- | ------------------------- | 6541| boolean | 返回是否是隐私模式的Webview,默认为false,表示未开启隐私模式。 | 6542 6543**错误码:** 6544 6545以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6546 6547| 错误码ID | 错误信息 | 6548| -------- | -------------------------------------------------------------------------- | 6549| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6550 6551**示例:** 6552 6553```ts 6554// xxx.ets 6555import { webview } from '@kit.ArkWeb'; 6556import { BusinessError } from '@kit.BasicServicesKit'; 6557 6558@Entry 6559@Component 6560struct WebComponent { 6561 controller: webview.WebviewController = new webview.WebviewController(); 6562 6563 build() { 6564 Column() { 6565 Button('isIncognitoMode') 6566 .onClick(() => { 6567 try { 6568 let result = this.controller.isIncognitoMode(); 6569 console.log('isIncognitoMode' + result); 6570 } catch (error) { 6571 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6572 } 6573 }) 6574 Web({ src: 'www.example.com', controller: this.controller }) 6575 } 6576 } 6577} 6578``` 6579 6580### getSecurityLevel<sup>11+</sup> 6581 6582getSecurityLevel(): SecurityLevel 6583 6584获取当前网页的安全级别。 6585 6586**系统能力:** SystemCapability.Web.Webview.Core 6587 6588**返回值:** 6589 6590| 类型 | 说明 | 6591| ----------------------------------- | --------------------------- | 6592| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 | 6593 6594**错误码:** 6595 6596以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6597 6598| 错误码ID | 错误信息 | 6599| -------- | ------------------------------------------------------------ | 6600| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6601 6602**示例:** 6603 6604```ts 6605import { webview } from '@kit.ArkWeb'; 6606 6607@Entry 6608@Component 6609struct WebComponent { 6610 controller: webview.WebviewController = new webview.WebviewController(); 6611 6612 build() { 6613 Column() { 6614 Web({ src: 'www.example.com', controller: this.controller }) 6615 .onPageEnd((event) => { 6616 if (event) { 6617 let securityLevel = this.controller.getSecurityLevel(); 6618 console.info('securityLevel: ', securityLevel); 6619 } 6620 }) 6621 } 6622 } 6623} 6624``` 6625 6626### setScrollable<sup>12+</sup> 6627 6628setScrollable(enable: boolean, type?: ScrollType): void 6629 6630设置网页是否允许滚动。 6631 6632**系统能力:** SystemCapability.Web.Webview.Core 6633 6634**参数:** 6635 6636| 参数名 | 类型 | 必填 | 说明 | 6637| ------ | -------- | ---- | ---------------------- | 6638| enable | boolean | 是 | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 | 6639| type | [ScrollType](#scrolltype12) | 否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。| 6640 6641**错误码:** 6642 6643以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6644 6645| 错误码ID | 错误信息 | 6646| -------- | ------------------------------------------------------------ | 6647| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 6648| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6649 6650**示例:** 6651 6652```ts 6653// xxx.ets 6654import { webview } from '@kit.ArkWeb'; 6655import { BusinessError } from '@kit.BasicServicesKit'; 6656 6657@Entry 6658@Component 6659struct WebComponent { 6660 controller: webview.WebviewController = new webview.WebviewController(); 6661 6662 build() { 6663 Column() { 6664 Button('setScrollable') 6665 .onClick(() => { 6666 try { 6667 this.controller.setScrollable(true); 6668 } catch (error) { 6669 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6670 } 6671 }) 6672 Web({ src: 'www.example.com', controller: this.controller }) 6673 } 6674 } 6675} 6676``` 6677 6678### getScrollable<sup>12+</sup> 6679 6680getScrollable(): boolean 6681 6682获取当前网页是否允许滚动。 6683 6684**系统能力:** SystemCapability.Web.Webview.Core 6685 6686**返回值:** 6687 6688| 类型 | 说明 | 6689| ------ | -------------- | 6690| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 | 6691 6692**错误码:** 6693 6694以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6695 6696| 错误码ID | 错误信息 | 6697| -------- | ------------------------------------------------------------ | 6698| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6699 6700**示例:** 6701 6702```ts 6703// xxx.ets 6704import { webview } from '@kit.ArkWeb'; 6705import { BusinessError } from '@kit.BasicServicesKit'; 6706 6707@Entry 6708@Component 6709struct WebComponent { 6710 controller: webview.WebviewController = new webview.WebviewController(); 6711 6712 build() { 6713 Column() { 6714 Button('getScrollable') 6715 .onClick(() => { 6716 try { 6717 let scrollEnabled = this.controller.getScrollable(); 6718 console.log("scrollEnabled: " + scrollEnabled); 6719 } catch (error) { 6720 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6721 } 6722 }) 6723 Web({ src: 'www.example.com', controller: this.controller }) 6724 } 6725 } 6726} 6727``` 6728 6729### setPrintBackground<sup>12+</sup> 6730 6731setPrintBackground(enable: boolean): void 6732 6733设置是否打印网页背景。 6734 6735**系统能力:** SystemCapability.Web.Webview.Core 6736 6737**参数:** 6738 6739| 参数名 | 类型 | 必填 | 说明 | 6740| -------- | ------- | ---- | -------------------------------------- | 6741| enable | boolean | 是 | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 | 6742 6743**错误码:** 6744 6745以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6746 6747| 错误码ID | 错误信息 | 6748| -------- | ------------------------------------------------------------ | 6749| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6750| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6751 6752**示例:** 6753 6754```ts 6755import { webview } from '@kit.ArkWeb'; 6756import { BusinessError } from '@kit.BasicServicesKit'; 6757 6758@Entry 6759@Component 6760struct WebComponent { 6761 controller: webview.WebviewController = new webview.WebviewController(); 6762 6763 build() { 6764 Column() { 6765 Button('setPrintBackground') 6766 .onClick(() => { 6767 try { 6768 this.controller.setPrintBackground(false); 6769 } catch (error) { 6770 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6771 } 6772 }) 6773 Web({ src: 'www.example.com', controller: this.controller }) 6774 } 6775 } 6776} 6777``` 6778 6779### getPrintBackground<sup>12+</sup> 6780 6781getPrintBackground(): boolean 6782 6783查询webview是否打印网页背景。 6784 6785**系统能力:** SystemCapability.Web.Webview.Core 6786 6787**返回值:** 6788 6789| 类型 | 说明 | 6790| -------------------- | ------------------------- | 6791| boolean | 返回Webview是否打印网页背景。<br>true:打印网页背景;false:不打印网页背景。 | 6792 6793**错误码:** 6794 6795以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6796 6797| 错误码ID | 错误信息 | 6798| -------- | ------------------------------------------------------------ | 6799| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6800 6801**示例:** 6802 6803```ts 6804import { webview } from '@kit.ArkWeb'; 6805import { BusinessError } from '@kit.BasicServicesKit'; 6806 6807@Entry 6808@Component 6809struct WebComponent { 6810 controller: webview.WebviewController = new webview.WebviewController(); 6811 6812 build() { 6813 Column() { 6814 Button('setPrintBackground') 6815 .onClick(() => { 6816 try { 6817 let enable = this.controller.getPrintBackground(); 6818 console.log("getPrintBackground: " + enable); 6819 } catch (error) { 6820 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6821 } 6822 }) 6823 Web({ src: 'www.example.com', controller: this.controller }) 6824 } 6825 } 6826} 6827``` 6828 6829### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup> 6830 6831getLastJavascriptProxyCallingFrameUrl(): string 6832 6833通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。 6834 6835**系统能力:** SystemCapability.Web.Webview.Core 6836 6837**错误码:** 6838 6839以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6840 6841| 错误码ID | 错误信息 | 6842| -------- | ------------------------------------------------------------ | 6843| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6844 6845**示例:** 6846 6847```ts 6848// xxx.ets 6849import { webview } from '@kit.ArkWeb'; 6850import { BusinessError } from '@kit.BasicServicesKit'; 6851 6852class TestObj { 6853 mycontroller: webview.WebviewController; 6854 6855 constructor(controller: webview.WebviewController) { 6856 this.mycontroller = controller; 6857 } 6858 6859 test(testStr: string): string { 6860 console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6861 return testStr; 6862 } 6863 6864 toString(): void { 6865 console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6866 } 6867 6868 testNumber(testNum: number): number { 6869 console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6870 return testNum; 6871 } 6872 6873 testBool(testBol: boolean): boolean { 6874 console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6875 return testBol; 6876 } 6877} 6878 6879class WebObj { 6880 mycontroller: webview.WebviewController; 6881 6882 constructor(controller: webview.WebviewController) { 6883 this.mycontroller = controller; 6884 } 6885 6886 webTest(): string { 6887 console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6888 return "Web test"; 6889 } 6890 6891 webString(): void { 6892 console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6893 } 6894} 6895 6896@Entry 6897@Component 6898struct Index { 6899 controller: webview.WebviewController = new webview.WebviewController(); 6900 @State testObjtest: TestObj = new TestObj(this.controller); 6901 @State webTestObj: WebObj = new WebObj(this.controller); 6902 6903 build() { 6904 Column() { 6905 Button('refresh') 6906 .onClick(() => { 6907 try { 6908 this.controller.refresh(); 6909 } catch (error) { 6910 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6911 } 6912 }) 6913 Button('Register JavaScript To Window') 6914 .onClick(() => { 6915 try { 6916 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]); 6917 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 6918 } catch (error) { 6919 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6920 } 6921 }) 6922 Button('deleteJavaScriptRegister') 6923 .onClick(() => { 6924 try { 6925 this.controller.deleteJavaScriptRegister("objName"); 6926 this.controller.deleteJavaScriptRegister("objTestName"); 6927 } catch (error) { 6928 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6929 } 6930 }) 6931 Web({ src: $rawfile('index.html'), controller: this.controller }) 6932 .javaScriptAccess(true) 6933 } 6934 } 6935} 6936``` 6937 6938加载的html文件。 6939```html 6940<!-- index.html --> 6941<!DOCTYPE html> 6942<html> 6943 <meta charset="utf-8"> 6944 <body> 6945 <button type="button" onclick="htmlTest()">Click Me!</button> 6946 <p id="demo"></p> 6947 <p id="webDemo"></p> 6948 </body> 6949 <script type="text/javascript"> 6950 function htmlTest() { 6951 // This function call expects to return "ArkUI Web Component" 6952 let str=objName.test("webtest data"); 6953 objName.testNumber(1); 6954 objName.testBool(true); 6955 document.getElementById("demo").innerHTML=str; 6956 console.log('objName.test result:'+ str) 6957 6958 // This function call expects to return "Web test" 6959 let webStr = objTestName.webTest(); 6960 document.getElementById("webDemo").innerHTML=webStr; 6961 console.log('objTestName.webTest result:'+ webStr) 6962 } 6963</script> 6964</html> 6965``` 6966 6967### pauseAllTimers<sup>12+</sup> 6968 6969pauseAllTimers(): void 6970 6971暂停所有WebView的定时器。 6972 6973**系统能力:** SystemCapability.Web.Webview.Core 6974 6975**错误码:** 6976 6977以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6978 6979| 错误码ID | 错误信息 | 6980| -------- | ------------------------------------------------------------ | 6981| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6982 6983**示例:** 6984 6985```ts 6986import { webview } from '@kit.ArkWeb'; 6987import { BusinessError } from '@kit.BasicServicesKit'; 6988 6989@Entry 6990@Component 6991struct WebComponent { 6992 controller: webview.WebviewController = new webview.WebviewController(); 6993 6994 build() { 6995 Column() { 6996 Row() { 6997 Button('PauseAllTimers') 6998 .onClick(() => { 6999 try { 7000 webview.WebviewController.pauseAllTimers(); 7001 } catch (error) { 7002 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7003 } 7004 }) 7005 } 7006 Web({ src: $rawfile("index.html"), controller: this.controller }) 7007 } 7008 } 7009} 7010``` 7011加载的html文件。 7012 7013```html 7014<!DOCTYPE html> 7015<html> 7016 <body> 7017 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 7018 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 7019 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 7020 </body> 7021</html> 7022<script> 7023 var timer = null; 7024 var num = 0; 7025 7026 function startTimer() { 7027 timer = setInterval(function() { 7028 document.getElementById("show_num").value = ++num; 7029 }, 1000); 7030 } 7031</script> 7032``` 7033 7034### resumeAllTimers<sup>12+</sup> 7035 7036resumeAllTimers(): void 7037 7038恢复从pauseAllTimers()接口中被暂停的所有的定时器。 7039 7040**系统能力:** SystemCapability.Web.Webview.Core 7041 7042**错误码:** 7043 7044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7045 7046| 错误码ID | 错误信息 | 7047| -------- | ------------------------------------------------------------ | 7048| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7049 7050**示例:** 7051 7052```ts 7053import { webview } from '@kit.ArkWeb'; 7054import { BusinessError } from '@kit.BasicServicesKit'; 7055 7056@Entry 7057@Component 7058struct WebComponent { 7059 controller: webview.WebviewController = new webview.WebviewController(); 7060 7061 build() { 7062 Column() { 7063 Row() { 7064 Button('ResumeAllTimers') 7065 .onClick(() => { 7066 try { 7067 webview.WebviewController.resumeAllTimers(); 7068 } catch (error) { 7069 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7070 } 7071 }) 7072 Button('PauseAllTimers') 7073 .onClick(() => { 7074 try { 7075 webview.WebviewController.pauseAllTimers(); 7076 } catch (error) { 7077 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7078 } 7079 }) 7080 } 7081 Web({ src: $rawfile("index.html"), controller: this.controller }) 7082 } 7083 } 7084} 7085``` 7086加载的html文件。 7087 7088```html 7089<!DOCTYPE html> 7090<html> 7091 <body> 7092 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 7093 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 7094 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 7095 </body> 7096</html> 7097<script> 7098 var timer = null; 7099 var num = 0; 7100 7101 function startTimer() { 7102 timer = setInterval(function() { 7103 document.getElementById("show_num").value = ++num; 7104 }, 1000); 7105 } 7106 7107 function resetTimer() { 7108 clearInterval(timer); 7109 document.getElementById("show_num").value = 0; 7110 num = 0; 7111 } 7112</script> 7113``` 7114 7115### stopAllMedia<sup>12+</sup> 7116 7117stopAllMedia(): void 7118 7119控制网页所有音视频停止。 7120 7121**系统能力:** SystemCapability.Web.Webview.Core 7122 7123**错误码:** 7124 7125以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7126 7127| 错误码ID | 错误信息 | 7128| -------- | ------------------------------------------------------------ | 7129| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7130 7131**示例:** 7132 7133```ts 7134// xxx.ets 7135import { webview } from '@kit.ArkWeb'; 7136import { BusinessError } from '@kit.BasicServicesKit'; 7137 7138@Entry 7139@Component 7140struct WebComponent { 7141 controller: webview.WebviewController = new webview.WebviewController(); 7142 7143 build() { 7144 Column() { 7145 Button('stopAllMedia') 7146 .onClick(() => { 7147 try { 7148 this.controller.stopAllMedia(); 7149 } catch (error) { 7150 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7151 } 7152 }) 7153 Web({ src: 'www.example.com', controller: this.controller }) 7154 } 7155 } 7156} 7157``` 7158 7159### pauseAllMedia<sup>12+</sup> 7160 7161pauseAllMedia(): void 7162 7163控制网页所有音视频暂停。 7164 7165**系统能力:** SystemCapability.Web.Webview.Core 7166 7167**错误码:** 7168 7169以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7170 7171| 错误码ID | 错误信息 | 7172| -------- | ------------------------------------------------------------ | 7173| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7174 7175**示例:** 7176 7177```ts 7178// xxx.ets 7179import { webview } from '@kit.ArkWeb'; 7180import { BusinessError } from '@kit.BasicServicesKit'; 7181 7182@Entry 7183@Component 7184struct WebComponent { 7185 controller: webview.WebviewController = new webview.WebviewController(); 7186 7187 build() { 7188 Column() { 7189 Button('pauseAllMedia') 7190 .onClick(() => { 7191 try { 7192 this.controller.pauseAllMedia(); 7193 } catch (error) { 7194 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7195 } 7196 }) 7197 Web({ src: 'www.example.com', controller: this.controller }) 7198 } 7199 } 7200} 7201``` 7202 7203### resumeAllMedia<sup>12+</sup> 7204 7205resumeAllMedia(): void 7206 7207控制网页被pauseAllMedia接口暂停的音视频继续播放。 7208 7209**系统能力:** SystemCapability.Web.Webview.Core 7210 7211**错误码:** 7212 7213以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7214 7215| 错误码ID | 错误信息 | 7216| -------- | ------------------------------------------------------------ | 7217| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7218 7219**示例:** 7220 7221```ts 7222// xxx.ets 7223import { webview } from '@kit.ArkWeb'; 7224import { BusinessError } from '@kit.BasicServicesKit'; 7225 7226@Entry 7227@Component 7228struct WebComponent { 7229 controller: webview.WebviewController = new webview.WebviewController(); 7230 7231 build() { 7232 Column() { 7233 Button('resumeAllMedia') 7234 .onClick(() => { 7235 try { 7236 this.controller.resumeAllMedia(); 7237 } catch (error) { 7238 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7239 } 7240 }) 7241 Web({ src: 'www.example.com', controller: this.controller }) 7242 } 7243 } 7244} 7245``` 7246 7247### closeAllMediaPresentations<sup>12+</sup> 7248 7249closeAllMediaPresentations(): void 7250 7251控制网页所有全屏视频关闭。 7252 7253**系统能力:** SystemCapability.Web.Webview.Core 7254 7255**错误码:** 7256 7257以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7258 7259| 错误码ID | 错误信息 | 7260| -------- | ------------------------------------------------------------ | 7261| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7262 7263**示例:** 7264 7265```ts 7266// xxx.ets 7267import { webview } from '@kit.ArkWeb'; 7268import { BusinessError } from '@kit.BasicServicesKit'; 7269 7270@Entry 7271@Component 7272struct WebComponent { 7273 controller: webview.WebviewController = new webview.WebviewController(); 7274 7275 build() { 7276 Column() { 7277 Button('closeAllMediaPresentations') 7278 .onClick(() => { 7279 try { 7280 this.controller.closeAllMediaPresentations(); 7281 } catch (error) { 7282 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7283 } 7284 }) 7285 Web({ src: 'www.example.com', controller: this.controller }) 7286 } 7287 } 7288} 7289``` 7290 7291### getMediaPlaybackState<sup>12+</sup> 7292 7293getMediaPlaybackState(): MediaPlaybackState 7294 7295查询当前所有音视频播控状态。 7296 7297**系统能力:** SystemCapability.Web.Webview.Core 7298 7299**返回值:** 7300 7301| 类型 | 说明 | 7302| ------------------------------------------- | --------------------------------------------------------- | 7303| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 | 7304 7305**错误码:** 7306 7307以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7308 7309| 错误码ID | 错误信息 | 7310| -------- | ------------------------------------------------------------ | 7311| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7312 7313**示例:** 7314 7315```ts 7316// xxx.ets 7317import { webview } from '@kit.ArkWeb'; 7318import { BusinessError } from '@kit.BasicServicesKit'; 7319 7320@Entry 7321@Component 7322struct WebComponent { 7323 controller: webview.WebviewController = new webview.WebviewController(); 7324 7325 build() { 7326 Column() { 7327 Button('getMediaPlaybackState') 7328 .onClick(() => { 7329 try { 7330 console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState()); 7331 } catch (error) { 7332 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7333 } 7334 }) 7335 Web({ src: 'www.example.com', controller: this.controller }) 7336 } 7337 } 7338} 7339``` 7340 7341### setWebSchemeHandler<sup>12+</sup> 7342 7343setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7344 7345为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。 7346 7347**系统能力:** SystemCapability.Web.Webview.Core 7348 7349**参数:** 7350 7351| 参数名 | 类型 | 必填 | 说明 | 7352| ------ | ------ | ---- | :------------------------ | 7353| scheme | string | 是 | 要拦截的协议。 | 7354| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7355 7356**错误码:** 7357 7358以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7359 7360| 错误码ID | 错误信息 | 7361| -------- | ------------------------------------------------------------ | 7362| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7363| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7364 7365**示例:** 7366 7367```ts 7368// xxx.ets 7369import { webview } from '@kit.ArkWeb'; 7370import { BusinessError } from '@kit.BasicServicesKit'; 7371 7372@Entry 7373@Component 7374struct WebComponent { 7375 controller: webview.WebviewController = new webview.WebviewController(); 7376 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7377 7378 build() { 7379 Column() { 7380 Button('setWebSchemeHandler') 7381 .onClick(() => { 7382 try { 7383 this.controller.setWebSchemeHandler('http', this.schemeHandler); 7384 } catch (error) { 7385 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7386 } 7387 }) 7388 Web({ src: 'www.example.com', controller: this.controller }) 7389 } 7390 } 7391} 7392``` 7393 7394### clearWebSchemeHandler<sup>12+</sup> 7395 7396clearWebSchemeHandler(): void 7397 7398清除当前Web组件设置的所有WebSchemeHandler。 7399 7400**系统能力:** SystemCapability.Web.Webview.Core 7401 7402**错误码:** 7403 7404以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7405 7406| 错误码ID | 错误信息 | 7407| -------- | ------------------------------------------------------------ | 7408| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7409 7410**示例:** 7411 7412```ts 7413// xxx.ets 7414import { webview } from '@kit.ArkWeb'; 7415import { BusinessError } from '@kit.BasicServicesKit'; 7416 7417@Entry 7418@Component 7419struct WebComponent { 7420 controller: webview.WebviewController = new webview.WebviewController(); 7421 7422 build() { 7423 Column() { 7424 Button('clearWebSchemeHandler') 7425 .onClick(() => { 7426 try { 7427 this.controller.clearWebSchemeHandler(); 7428 } catch (error) { 7429 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7430 } 7431 }) 7432 Web({ src: 'www.example.com', controller: this.controller }) 7433 } 7434 } 7435} 7436``` 7437 7438### setServiceWorkerWebSchemeHandler<sup>12+</sup> 7439 7440setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7441 7442为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。 7443 7444**系统能力:** SystemCapability.Web.Webview.Core 7445 7446**参数:** 7447 7448| 参数名 | 类型 | 必填 | 说明 | 7449| ------ | ------ | ---- | :------------------------ | 7450| scheme | string | 是 | 要拦截的协议。 | 7451| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7452 7453**错误码:** 7454 7455以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7456 7457| 错误码ID | 错误信息 | 7458| -------- | ------------------------------------------------------------ | 7459| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7460 7461**示例:** 7462 7463```ts 7464// xxx.ets 7465import { webview } from '@kit.ArkWeb'; 7466import { BusinessError } from '@kit.BasicServicesKit'; 7467 7468@Entry 7469@Component 7470struct WebComponent { 7471 controller: webview.WebviewController = new webview.WebviewController(); 7472 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7473 7474 build() { 7475 Column() { 7476 Button('setWebSchemeHandler') 7477 .onClick(() => { 7478 try { 7479 webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler); 7480 } catch (error) { 7481 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7482 } 7483 }) 7484 Web({ src: 'www.example.com', controller: this.controller }) 7485 } 7486 } 7487} 7488``` 7489 7490### clearServiceWorkerWebSchemeHandler<sup>12+</sup> 7491 7492clearServiceWorkerWebSchemeHandler(): void 7493 7494清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。 7495 7496**系统能力:** SystemCapability.Web.Webview.Core 7497 7498**示例:** 7499 7500```ts 7501// xxx.ets 7502import { webview } from '@kit.ArkWeb'; 7503 7504@Entry 7505@Component 7506struct WebComponent { 7507 controller: webview.WebviewController = new webview.WebviewController(); 7508 7509 build() { 7510 Column() { 7511 Button('clearServiceWorkerWebSchemeHandler') 7512 .onClick(() => { 7513 webview.WebviewController.clearServiceWorkerWebSchemeHandler(); 7514 }) 7515 Web({ src: 'www.example.com', controller: this.controller }) 7516 } 7517 } 7518} 7519``` 7520 7521### startCamera<sup>12+</sup> 7522 7523startCamera(): void 7524 7525开启当前网页摄像头捕获。 7526 7527**系统能力:** SystemCapability.Web.Webview.Core 7528 7529**错误码:** 7530 7531以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7532 7533| 错误码ID | 错误信息 | 7534| -------- | ------------------------------------------------------------ | 7535| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7536 7537**示例:** 7538```ts 7539// xxx.ets 7540import { webview } from '@kit.ArkWeb'; 7541import { BusinessError } from '@kit.BasicServicesKit'; 7542import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit'; 7543 7544let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 7545 7546@Entry 7547@Component 7548struct WebComponent { 7549 controller: webview.WebviewController = new webview.WebviewController(); 7550 uiContext: UIContext = this.getUIContext(); 7551 7552 aboutToAppear(): void { 7553 let context: Context | undefined = this.uiContext.getHostContext() as common.UIAbilityContext; 7554 atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => { 7555 console.info('data:' + JSON.stringify(data)); 7556 console.info('data permissions:' + data.permissions); 7557 console.info('data authResults:' + data.authResults); 7558 }) 7559 } 7560 7561 build() { 7562 Column() { 7563 Button("startCamera").onClick(() => { 7564 try { 7565 this.controller.startCamera(); 7566 } catch (error) { 7567 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7568 } 7569 }) 7570 Button("stopCamera").onClick(() => { 7571 try { 7572 this.controller.stopCamera(); 7573 } catch (error) { 7574 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7575 } 7576 }) 7577 Button("closeCamera").onClick(() => { 7578 try { 7579 this.controller.closeCamera(); 7580 } catch (error) { 7581 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7582 } 7583 }) 7584 Web({ src: $rawfile('index.html'), controller: this.controller }) 7585 .onPermissionRequest((event) => { 7586 if (event) { 7587 this.uiContext.showAlertDialog({ 7588 title: 'title', 7589 message: 'text', 7590 primaryButton: { 7591 value: 'deny', 7592 action: () => { 7593 event.request.deny(); 7594 } 7595 }, 7596 secondaryButton: { 7597 value: 'onConfirm', 7598 action: () => { 7599 event.request.grant(event.request.getAccessibleResource()); 7600 } 7601 }, 7602 cancel: () => { 7603 event.request.deny(); 7604 } 7605 }) 7606 } 7607 }) 7608 } 7609 } 7610} 7611``` 7612加载的html文件。 7613 ```html 7614<!-- index.html --> 7615<!DOCTYPE html> 7616<html> 7617 <head> 7618 <meta charset="UTF-8"> 7619 </head> 7620 <body> 7621 <video id="video" width="400px" height="400px" autoplay="autoplay"> 7622 </video> 7623 <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" /> 7624 <script> 7625 function getMedia() { 7626 let constraints = { 7627 video: { 7628 width: 500, 7629 height: 500 7630 }, 7631 audio: true 7632 } 7633 let video = document.getElementById("video"); 7634 let promise = navigator.mediaDevices.getUserMedia(constraints); 7635 promise.then(function(MediaStream) { 7636 video.srcObject = MediaStream; 7637 video.play(); 7638 }) 7639 } 7640 </script> 7641 </body> 7642</html> 7643 ``` 7644 7645### stopCamera<sup>12+</sup> 7646 7647stopCamera(): void 7648 7649停止当前网页摄像头捕获。 7650 7651**系统能力:** SystemCapability.Web.Webview.Core 7652 7653**错误码:** 7654 7655以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7656 7657| 错误码ID | 错误信息 | 7658| -------- | ------------------------------------------------------------ | 7659| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7660 7661**示例:** 7662 7663完整示例代码参考[startCamera](#startcamera12)。 7664 7665### closeCamera<sup>12+</sup> 7666 7667closeCamera(): void 7668 7669关闭当前网页摄像头捕获。 7670 7671**系统能力:** SystemCapability.Web.Webview.Core 7672 7673**错误码:** 7674 7675以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7676 7677| 错误码ID | 错误信息 | 7678| -------- | ------------------------------------------------------------ | 7679| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7680 7681**示例:** 7682 7683完整示例代码参考[startCamera](#startcamera12)。 7684 7685### precompileJavaScript<sup>12+</sup> 7686 7687precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\> 7688 7689预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。 7690接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。 7691 7692**系统能力:** SystemCapability.Web.Webview.Core 7693 7694**参数:** 7695 7696| 参数名 | 类型 | 必填 | 说明 | 7697| ------- | ------ | ---- | :-------------------- | 7698| url | string | 是 | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。 | 7699| script | string \| Uint8Array | 是 | 本地JavaScript的文本内容。内容不能为空。 | 7700| cacheOptions | [CacheOptions](#cacheoptions12) | 是 | 用于控制字节码缓存更新。 | 7701 7702**返回值:** 7703 7704| 类型 | 说明 | 7705| ----------------------------------- | --------------------------- | 7706| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 | 7707 7708**错误码:** 7709 7710以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7711 7712| 错误码ID | 错误信息 | 7713| -------- | ------------------------------------------------------------ | 7714| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 7715| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7716 7717**示例:** 7718 7719接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例: 7720 77211. 首先,在EntryAbility中将UIContext存到localStorage中。 7722 7723 ```ts 7724 // EntryAbility.ets 7725 import { UIAbility } from '@kit.AbilityKit'; 7726 import { window } from '@kit.ArkUI'; 7727 7728 const localStorage: LocalStorage = new LocalStorage('uiContext'); 7729 7730 export default class EntryAbility extends UIAbility { 7731 storage: LocalStorage = localStorage; 7732 7733 onWindowStageCreate(windowStage: window.WindowStage) { 7734 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 7735 if (err.code) { 7736 return; 7737 } 7738 7739 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 7740 }); 7741 } 7742 } 7743 ``` 7744 77452. 编写动态组件所需基础代码。 7746 7747 ```ts 7748 // DynamicComponent.ets 7749 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 7750 7751 export interface BuilderData { 7752 url: string; 7753 controller: WebviewController; 7754 context: UIContext; 7755 } 7756 7757 let storage : LocalStorage | undefined = undefined; 7758 7759 export class NodeControllerImpl extends NodeController { 7760 private rootNode: BuilderNode<BuilderData[]> | null = null; 7761 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 7762 7763 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>, context: UIContext) { 7764 storage = context.getSharedLocalStorage(); 7765 super(); 7766 this.wrappedBuilder = wrappedBuilder; 7767 } 7768 7769 makeNode(): FrameNode | null { 7770 if (this.rootNode != null) { 7771 return this.rootNode.getFrameNode(); 7772 } 7773 return null; 7774 } 7775 7776 initWeb(url: string, controller: WebviewController) { 7777 if(this.rootNode != null) { 7778 return; 7779 } 7780 7781 const uiContext: UIContext = storage!.get<UIContext>("uiContext") as UIContext; 7782 if (!uiContext) { 7783 return; 7784 } 7785 this.rootNode = new BuilderNode(uiContext); 7786 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 7787 } 7788 } 7789 7790 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 7791 const baseNode = new NodeControllerImpl(wrappedBuilder, data.context); 7792 baseNode.initWeb(data.url, data.controller); 7793 return baseNode; 7794 } 7795 ``` 7796 77973. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。 7798 7799 <!--code_no_check--> 7800 ```ts 7801 // PrecompileWebview.ets 7802 import { BuilderData } from "./DynamicComponent"; 7803 import { Config, configs } from "./PrecompileConfig"; 7804 7805 @Builder 7806 function WebBuilder(data: BuilderData) { 7807 Web({ src: data.url, controller: data.controller }) 7808 .onControllerAttached(() => { 7809 precompile(data.controller, configs, data.context); 7810 }) 7811 .fileAccess(true) 7812 } 7813 7814 export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7815 7816 export const precompile = async (controller: WebviewController, configs: Array<Config>, context: UIContext) => { 7817 for (const config of configs) { 7818 let content = await readRawFile(config.localPath, context); 7819 7820 try { 7821 controller.precompileJavaScript(config.url, content, config.options) 7822 .then(errCode => { 7823 console.error("precompile successfully! " + errCode); 7824 }).catch((errCode: number) => { 7825 console.error("precompile failed. " + errCode); 7826 }); 7827 } catch (err) { 7828 console.error("precompile failed. " + err.code + " " + err.message); 7829 } 7830 } 7831 } 7832 7833 async function readRawFile(path: string, context: UIContext) { 7834 try { 7835 return await context.getHostContext()!.resourceManager.getRawFileContent(path);; 7836 } catch (err) { 7837 return new Uint8Array(0); 7838 } 7839 } 7840 ``` 7841 7842JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。 7843 78444. 编写业务用组件代码。 7845 7846 <!--code_no_check--> 7847 ```ts 7848 // BusinessWebview.ets 7849 import { BuilderData } from "./DynamicComponent"; 7850 7851 @Builder 7852 function WebBuilder(data: BuilderData) { 7853 // 此处组件可根据业务需要自行扩展 7854 Web({ src: data.url, controller: data.controller }) 7855 .cacheMode(CacheMode.Default) 7856 } 7857 7858 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7859 ``` 7860 78615. 编写资源配置信息。 7862 7863 ```ts 7864 // PrecompileConfig.ets 7865 import { webview } from '@kit.ArkWeb' 7866 7867 export interface Config { 7868 url: string, 7869 localPath: string, // 本地资源路径 7870 options: webview.CacheOptions 7871 } 7872 7873 export let configs: Array<Config> = [ 7874 { 7875 url: "https://www.example.com/example.js", 7876 localPath: "example.js", 7877 options: { 7878 responseHeaders: [ 7879 { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="}, 7880 { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"} 7881 ] 7882 } 7883 } 7884 ] 7885 ``` 7886 78876. 在页面中使用。 7888 7889 <!--code_no_check--> 7890 ```ts 7891 // Index.ets 7892 import { webview } from '@kit.ArkWeb'; 7893 import { NodeController } from '@kit.ArkUI'; 7894 import { createNode } from "./DynamicComponent" 7895 import { precompileWebview } from "./PrecompileWebview" 7896 import { businessWebview } from "./BusinessWebview" 7897 7898 @Entry 7899 @Component 7900 struct Index { 7901 @State precompileNode: NodeController | undefined = undefined; 7902 precompileController: webview.WebviewController = new webview.WebviewController(); 7903 7904 @State businessNode: NodeController | undefined = undefined; 7905 businessController: webview.WebviewController = new webview.WebviewController(); 7906 7907 aboutToAppear(): void { 7908 // 初始化用于注入本地资源的Web组件 7909 this.precompileNode = createNode(precompileWebview, 7910 { url: "https://www.example.com/empty.html", controller: this.precompileController, context: this.getUIContext()}); 7911 } 7912 7913 build() { 7914 Column() { 7915 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 7916 Button("加载页面") 7917 .onClick(() => { 7918 this.businessNode = createNode(businessWebview, { 7919 url: "https://www.example.com/business.html", 7920 controller: this.businessController, 7921 context: this.getUIContext() 7922 }); 7923 }) 7924 // 用于业务的Web组件 7925 NodeContainer(this.businessNode); 7926 } 7927 } 7928 } 7929 ``` 7930 7931当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。 7932 7933### onCreateNativeMediaPlayer<sup>12+</sup> 7934 7935onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void 7936 7937注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。 7938如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。 7939 7940**系统能力:** SystemCapability.Web.Webview.Core 7941 7942**参数:** 7943 7944| 参数名 | 类型 | 必填 | 说明 | 7945|--------|------|------|------| 7946| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 | 7947 7948**示例:** 7949 7950```ts 7951// xxx.ets 7952import { webview } from '@kit.ArkWeb'; 7953 7954class ActualNativeMediaPlayerListener { 7955 handler: webview.NativeMediaPlayerHandler; 7956 7957 constructor(handler: webview.NativeMediaPlayerHandler) { 7958 this.handler = handler; 7959 } 7960 7961 onPlaying() { 7962 // 本地播放器开始播放。 7963 this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING); 7964 } 7965 onPaused() { 7966 // 本地播放器暂停播放。 7967 this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED); 7968 } 7969 onSeeking() { 7970 // 本地播放器开始执行跳转到目标时间点。 7971 this.handler.handleSeeking(); 7972 } 7973 onSeekDone() { 7974 // 本地播放器 seek 完成。 7975 this.handler.handleSeekFinished(); 7976 } 7977 onEnded() { 7978 // 本地播放器播放完成。 7979 this.handler.handleEnded(); 7980 } 7981 onVolumeChanged() { 7982 // 获取本地播放器的音量。 7983 let volume: number = getVolume(); 7984 this.handler.handleVolumeChanged(volume); 7985 } 7986 onCurrentPlayingTimeUpdate() { 7987 // 更新播放时间。 7988 let currentTime: number = getCurrentPlayingTime(); 7989 // 将时间单位换算成秒。 7990 let currentTimeInSeconds = convertToSeconds(currentTime); 7991 this.handler.handleTimeUpdate(currentTimeInSeconds); 7992 } 7993 onBufferedChanged() { 7994 // 缓存发生了变化。 7995 // 获取本地播放器的缓存时长。 7996 let bufferedEndTime: number = getCurrentBufferedTime(); 7997 // 将时间单位换算成秒。 7998 let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime); 7999 this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds); 8000 8001 // 检查缓存状态。 8002 // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。 8003 let lastReadyState: webview.ReadyState = getLastReadyState(); 8004 let currentReadyState: webview.ReadyState = getCurrentReadyState(); 8005 if (lastReadyState != currentReadyState) { 8006 this.handler.handleReadyStateChanged(currentReadyState); 8007 } 8008 } 8009 onEnterFullscreen() { 8010 // 本地播放器进入了全屏状态。 8011 let isFullscreen: boolean = true; 8012 this.handler.handleFullscreenChanged(isFullscreen); 8013 } 8014 onExitFullscreen() { 8015 // 本地播放器退出了全屏状态。 8016 let isFullscreen: boolean = false; 8017 this.handler.handleFullscreenChanged(isFullscreen); 8018 } 8019 onUpdateVideoSize(width: number, height: number) { 8020 // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。 8021 this.handler.handleVideoSizeChanged(width, height); 8022 } 8023 onDurationChanged(duration: number) { 8024 // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。 8025 this.handler.handleDurationChanged(duration); 8026 } 8027 onError(error: webview.MediaError, errorMessage: string) { 8028 // 本地播放器出错了,通知 ArkWeb 内核。 8029 this.handler.handleError(error, errorMessage); 8030 } 8031 onNetworkStateChanged(state: webview.NetworkState) { 8032 // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。 8033 this.handler.handleNetworkStateChanged(state); 8034 } 8035 onPlaybackRateChanged(playbackRate: number) { 8036 // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。 8037 this.handler.handlePlaybackRateChanged(playbackRate); 8038 } 8039 onMutedChanged(muted: boolean) { 8040 // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。 8041 this.handler.handleMutedChanged(muted); 8042 } 8043 8044 // ... 监听本地播放器其他的状态 ... 8045} 8046 8047class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge { 8048 constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) { 8049 // 1. 创建一个本地播放器的状态监听。 8050 let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler); 8051 // 2. 创建一个本地播放器。 8052 // 3. 监听该本地播放器。 8053 // ... 8054 } 8055 8056 updateRect(x: number, y: number, width: number, height: number) { 8057 // <video> 标签的位置和大小发生了变化。 8058 // 根据该信息变化,作出相应的改变。 8059 } 8060 8061 play() { 8062 // 启动本地播放器播放。 8063 } 8064 8065 pause() { 8066 // 暂停本地播放器播放。 8067 } 8068 8069 seek(targetTime: number) { 8070 // 本地播放器跳转到指定的时间点。 8071 } 8072 8073 release() { 8074 // 销毁本地播放器。 8075 } 8076 8077 setVolume(volume: number) { 8078 // ArkWeb 内核要求调整本地播放器的音量。 8079 // 设置本地播放器的音量。 8080 } 8081 8082 setMuted(muted: boolean) { 8083 // 将本地播放器静音或取消静音。 8084 } 8085 8086 setPlaybackRate(playbackRate: number) { 8087 // 调整本地播放器的播放速度。 8088 } 8089 8090 enterFullscreen() { 8091 // 将本地播放器设置为全屏播放。 8092 } 8093 8094 exitFullscreen() { 8095 // 将本地播放器退出全屏播放。 8096 } 8097 8098 resumePlayer() { 8099 // 重新创建应用内播放器。 8100 // 恢复应用内播放器的状态信息。 8101 } 8102 8103 suspendPlayer(type: webview.SuspendType) { 8104 // 记录应用内播放器的状态信息。 8105 // 销毁应用内播放器。 8106 } 8107} 8108 8109@Entry 8110@Component 8111struct WebComponent { 8112 controller: webview.WebviewController = new webview.WebviewController() 8113 build() { 8114 Column() { 8115 Web({ src: 'www.example.com', controller: this.controller }) 8116 .enableNativeMediaPlayer({enable: true, shouldOverlay: false}) 8117 .onPageBegin((event) => { 8118 this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => { 8119 if (!shouldHandle(mediaInfo)) { 8120 // 本地播放器不接管该媒体。 8121 // ArkWeb 内核将用自己的播放器来播放该媒体。 8122 return null; 8123 } 8124 let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo); 8125 return nativePlayer; 8126 }); 8127 }) 8128 } 8129 } 8130} 8131 8132// stub 8133function getVolume() { 8134 return 1; 8135} 8136function getCurrentPlayingTime() { 8137 return 1; 8138} 8139function getCurrentBufferedTime() { 8140 return 1; 8141} 8142function convertToSeconds(input: number) { 8143 return input; 8144} 8145function getLastReadyState() { 8146 return webview.ReadyState.HAVE_NOTHING; 8147} 8148function getCurrentReadyState() { 8149 return webview.ReadyState.HAVE_NOTHING; 8150} 8151function shouldHandle(mediaInfo: webview.MediaInfo) { 8152 return true; 8153} 8154``` 8155 8156### enableWholeWebPageDrawing<sup>12+</sup> 8157 8158static enableWholeWebPageDrawing(): void 8159 8160设置开启网页全量绘制能力。仅在web初始化时设置。 8161 8162**系统能力:** SystemCapability.Web.Webview.Core 8163 8164**示例:** 8165 8166```ts 8167// xxx.ets 8168import { webview } from '@kit.ArkWeb'; 8169import { BusinessError } from '@kit.BasicServicesKit'; 8170 8171@Entry 8172@Component 8173struct WebComponent { 8174 controller: webview.WebviewController = new webview.WebviewController(); 8175 8176 aboutToAppear(): void { 8177 try { 8178 webview.WebviewController.enableWholeWebPageDrawing(); 8179 } catch (error) { 8180 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8181 } 8182 } 8183 8184 build() { 8185 Column() { 8186 Web({ src: 'www.example.com', controller: this.controller }) 8187 } 8188 } 8189} 8190``` 8191 8192### webPageSnapshot<sup>12+</sup> 8193 8194webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void 8195 8196获取网页全量绘制结果。 8197 8198**系统能力:** SystemCapability.Web.Webview.Core 8199 8200**参数:** 8201 8202| 参数名 | 类型 | 必填 | 说明 | 8203| ----------- | ------------- | ---- | ------------------------ | 8204| info | [SnapshotInfo](#snapshotinfo12)| 是 | 全量绘制结果入参。 | 8205| callback | [SnapshotResult](#snapshotresult12)| 是 | 全量绘制回调结果。 | 8206 8207**示例:** 8208 8209```ts 8210// xxx.ets 8211import { webview } from '@kit.ArkWeb'; 8212import { BusinessError } from '@kit.BasicServicesKit'; 8213 8214@Entry 8215@Component 8216struct WebComponent { 8217 controller: webview.WebviewController = new webview.WebviewController(); 8218 8219 build() { 8220 Column() { 8221 Button('webPageSnapshot') 8222 .onClick(() => { 8223 try { 8224 this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => { 8225 if (error) { 8226 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8227 return; 8228 } 8229 if (result) { 8230 console.info(`return value is:${result}`); 8231 //开发者可以根据需要处理返回结果 8232 } 8233 }); 8234 } catch (error) { 8235 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8236 } 8237 }) 8238 Web({ src: 'www.example.com', controller: this.controller }) 8239 } 8240 } 8241} 8242``` 8243 8244### injectOfflineResources<sup>12+</sup> 8245 8246injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void 8247 8248将本地离线资源注入到内存缓存中,以提升页面首次启动速度。 8249内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。 8250正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。 8251资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。 8252以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。 8253当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。 8254 8255**系统能力:** SystemCapability.Web.Webview.Core 8256 8257**参数:** 8258 8259| 参数名 | 类型 | 必填 | 说明 | 8260| ------- | ------ | ---- | :-------------------- | 8261| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是 | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。 | 8262 8263**错误码:** 8264 8265以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8266 8267| 错误码ID | 错误信息 | 8268| -------- | ------------------------------------------------------------ | 8269| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8270| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8271| 17100002 | Invalid url. | 8272 8273**示例:** 8274 8275接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例: 82761. 首先,在EntryAbility中将UIContext存到localStorage中。 8277 8278 ```ts 8279 // EntryAbility.ets 8280 import { UIAbility } from '@kit.AbilityKit'; 8281 import { window } from '@kit.ArkUI'; 8282 8283 const localStorage: LocalStorage = new LocalStorage('uiContext'); 8284 8285 export default class EntryAbility extends UIAbility { 8286 storage: LocalStorage = localStorage; 8287 8288 onWindowStageCreate(windowStage: window.WindowStage) { 8289 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 8290 if (err.code) { 8291 return; 8292 } 8293 8294 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 8295 }); 8296 } 8297 } 8298 ``` 8299 83002. 编写动态组件所需基础代码。 8301 8302 ```ts 8303 // DynamicComponent.ets 8304 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 8305 8306 export interface BuilderData { 8307 url: string; 8308 controller: WebviewController; 8309 context: UIContext; 8310 } 8311 8312 let storage : LocalStorage | undefined = undefined; 8313 8314 export class NodeControllerImpl extends NodeController { 8315 private rootNode: BuilderNode<BuilderData[]> | null = null; 8316 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 8317 8318 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>, context: UIContext) { 8319 storage = context.getSharedLocalStorage(); 8320 super(); 8321 this.wrappedBuilder = wrappedBuilder; 8322 } 8323 8324 makeNode(): FrameNode | null { 8325 if (this.rootNode != null) { 8326 return this.rootNode.getFrameNode(); 8327 } 8328 return null; 8329 } 8330 8331 initWeb(url: string, controller: WebviewController) { 8332 if(this.rootNode != null) { 8333 return; 8334 } 8335 8336 const uiContext: UIContext = storage!.get<UIContext>("uiContext") as UIContext; 8337 if (!uiContext) { 8338 return; 8339 } 8340 this.rootNode = new BuilderNode(uiContext); 8341 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 8342 } 8343 } 8344 8345 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 8346 const baseNode = new NodeControllerImpl(wrappedBuilder, data.context); 8347 baseNode.initWeb(data.url, data.controller); 8348 return baseNode; 8349 } 8350 ``` 8351 83523. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。 8353 8354 <!--code_no_check--> 8355 ```ts 8356 // InjectWebview.ets 8357 import { webview } from '@kit.ArkWeb'; 8358 import { resourceConfigs } from "./Resource"; 8359 import { BuilderData } from "./DynamicComponent"; 8360 8361 @Builder 8362 function WebBuilder(data: BuilderData) { 8363 Web({ src: data.url, controller: data.controller }) 8364 .onControllerAttached(async () => { 8365 try { 8366 data.controller.injectOfflineResources(await getData (data.context)); 8367 } catch (err) { 8368 console.error("error: " + err.code + " " + err.message); 8369 } 8370 }) 8371 .fileAccess(true) 8372 } 8373 8374 export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8375 8376 export async function getData(context: UIContext) { 8377 const resourceMapArr: Array<webview.OfflineResourceMap> = []; 8378 8379 // 读取配置,从rawfile目录中读取文件内容 8380 for (let config of resourceConfigs) { 8381 let buf: Uint8Array = new Uint8Array(0); 8382 if (config.localPath) { 8383 buf = await readRawFile(config.localPath, context); 8384 } 8385 8386 resourceMapArr.push({ 8387 urlList: config.urlList, 8388 resource: buf, 8389 responseHeaders: config.responseHeaders, 8390 type: config.type, 8391 }) 8392 } 8393 8394 return resourceMapArr; 8395 } 8396 8397 export async function readRawFile(url: string, context: UIContext) { 8398 try { 8399 return await context.getHostContext()!.resourceManager.getRawFileContent(url); 8400 } catch (err) { 8401 return new Uint8Array(0); 8402 } 8403 } 8404 ``` 8405 84064. 编写业务用组件代码。 8407 8408 <!--code_no_check--> 8409 ```ts 8410 // BusinessWebview.ets 8411 import { BuilderData } from "./DynamicComponent"; 8412 8413 @Builder 8414 function WebBuilder(data: BuilderData) { 8415 // 此处组件可根据业务需要自行扩展 8416 Web({ src: data.url, controller: data.controller }) 8417 .cacheMode(CacheMode.Default) 8418 } 8419 8420 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8421 ``` 8422 84235. 编写资源配置信息。 8424 8425 ```ts 8426 // Resource.ets 8427 import { webview } from '@kit.ArkWeb'; 8428 8429 export interface ResourceConfig { 8430 urlList: Array<string>, 8431 type: webview.OfflineResourceType, 8432 responseHeaders: Array<Header>, 8433 localPath: string, // 本地资源存放在rawfile目录下的路径 8434 } 8435 8436 export const resourceConfigs: Array<ResourceConfig> = [ 8437 { 8438 localPath: "example.png", 8439 urlList: [ 8440 "https://www.example.com/", 8441 "https://www.example.com/path1/example.png", 8442 "https://www.example.com/path2/example.png", 8443 ], 8444 type: webview.OfflineResourceType.IMAGE, 8445 responseHeaders: [ 8446 { headerKey: "Cache-Control", headerValue: "max-age=1000" }, 8447 { headerKey: "Content-Type", headerValue: "image/png" }, 8448 ] 8449 }, 8450 { 8451 localPath: "example.js", 8452 urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址 8453 "https://www.example.com/example.js", 8454 ], 8455 type: webview.OfflineResourceType.CLASSIC_JS, 8456 responseHeaders: [ 8457 // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头 8458 { headerKey: "Cross-Origin", headerValue:"anonymous" } 8459 ] 8460 }, 8461 ]; 8462 ``` 8463 84646. 在页面中使用。 8465 <!--code_no_check--> 8466 ```ts 8467 // Index.ets 8468 import { webview } from '@kit.ArkWeb'; 8469 import { NodeController } from '@kit.ArkUI'; 8470 import { createNode } from "./DynamicComponent" 8471 import { injectWebview } from "./InjectWebview" 8472 import { businessWebview } from "./BusinessWebview" 8473 8474 @Entry 8475 @Component 8476 struct Index { 8477 @State injectNode: NodeController | undefined = undefined; 8478 injectController: webview.WebviewController = new webview.WebviewController(); 8479 8480 @State businessNode: NodeController | undefined = undefined; 8481 businessController: webview.WebviewController = new webview.WebviewController(); 8482 8483 aboutToAppear(): void { 8484 // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可 8485 this.injectNode = createNode(injectWebview, 8486 { url: "https://www.example.com/empty.html", controller: this.injectController, context: this.getUIContext()}); 8487 } 8488 8489 build() { 8490 Column() { 8491 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 8492 Button("加载页面") 8493 .onClick(() => { 8494 this.businessNode = createNode(businessWebview, { 8495 url: "https://www.example.com/business.html", 8496 controller: this.businessController, 8497 context: this.getUIContext() 8498 }); 8499 }) 8500 // 用于业务的Web组件 8501 NodeContainer(this.businessNode); 8502 } 8503 } 8504 } 8505 ``` 8506 85077. 加载的HTML网页示例。 8508 8509 ```HTML 8510 <!DOCTYPE html> 8511 <html lang="en"> 8512 <head></head> 8513 <body> 8514 <img src="https://www.example.com/path1/request.png" /> 8515 <img src="https://www.example.com/path2/request.png" /> 8516 <script src="https://www.example.com/example.js" crossorigin="anonymous"></script> 8517 </body> 8518 </html> 8519 ``` 8520 8521### setHostIP<sup>12+</sup> 8522 8523static setHostIP(hostName: string, address: string, aliveTime: number): void 8524 8525设置主机域名解析后的IP地址。 8526 8527**系统能力:** SystemCapability.Web.Webview.Core 8528 8529**参数:** 8530 8531| 参数名 | 类型 | 必填 | 说明 | 8532| --------- | -------- | ---- | ------------------------------------ | 8533| hostName | string | 是 | 要添加DNS记录的主机域名。 | 8534| address | string | 是 | 主机域名解析地址(支持IPv4,IPv6)。 | 8535| aliveTime | number | 是 | 缓存有效时间(秒)。 | 8536 8537**错误码:** 8538 8539以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8540 8541| 错误码ID | 错误信息 | 8542| -------- | ------------------------ | 8543| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8544 8545**示例:** 8546 8547请参考[clearHostIP](#clearhostip12)。 8548 8549### clearHostIP<sup>12+</sup> 8550 8551static clearHostIP(hostName: string): void 8552 8553清除指定主机域名解析后的IP地址。 8554 8555**系统能力:** SystemCapability.Web.Webview.Core 8556 8557**参数:** 8558 8559| 参数名 | 类型 | 必填 | 说明 | 8560| -------- | -------- | ---- | ------------------------- | 8561| hostName | string | 是 | 要清除DNS记录的主机域名。 | 8562 8563**错误码:** 8564 8565以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8566 8567| 错误码ID | 错误信息 | 8568| -------- | ------------------------ | 8569| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8570 8571**示例:** 8572 8573```ts 8574// xxx.ets 8575import { webview } from '@kit.ArkWeb'; 8576import { BusinessError } from '@kit.BasicServicesKit'; 8577 8578@Entry 8579@Component 8580struct WebComponent { 8581 controller: webview.WebviewController = new webview.WebviewController(); 8582 8583 build() { 8584 Column() { 8585 // url加载前设置生效. 8586 Button('setHostIP') 8587 .onClick(() => { 8588 try { 8589 webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30); 8590 } catch (error) { 8591 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8592 } 8593 }) 8594 Button('clearHostIP') 8595 .onClick(() => { 8596 try { 8597 webview.WebviewController.clearHostIP('www.example.com'); 8598 } catch (error) { 8599 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8600 } 8601 }) 8602 Web({ src: 'www.example.com', controller: this.controller }) 8603 } 8604 } 8605} 8606``` 8607 8608### getSurfaceId<sup>12+</sup> 8609 8610getSurfaceId(): string 8611 8612获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。 8613 8614**系统能力:** SystemCapability.Web.Webview.Core 8615 8616**返回值:** 8617 8618| 类型 | 说明 | 8619| ------ | ------------------- | 8620| string | ArkWeb持有Surface的ID。 | 8621 8622**示例:** 8623 8624```ts 8625// xxx.ets 8626import { webview } from '@kit.ArkWeb'; 8627import { image } from '@kit.ImageKit'; 8628import { BusinessError } from '@kit.BasicServicesKit'; 8629 8630@Entry 8631@Component 8632struct Example{ 8633 controller: webview.WebviewController = new webview.WebviewController(); 8634 8635 @State imagePixelMap: image.PixelMap | undefined = undefined; 8636 8637 build(){ 8638 Column(){ 8639 Button("截图") 8640 .onClick(()=>{ 8641 try { 8642 let surfaceId = this.controller.getSurfaceId(); 8643 console.log("surfaceId: " + surfaceId); 8644 if(surfaceId.length != 0) { 8645 let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}} 8646 this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region) 8647 } 8648 } catch (error) { 8649 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8650 } 8651 }) 8652 Image(this.imagePixelMap) 8653 .height(100) 8654 Web({src: 'www.example.com', controller: this.controller}) 8655 } 8656 } 8657} 8658``` 8659 8660### setUrlTrustList<sup>12+</sup> 8661 8662setUrlTrustList(urlTrustList: string): void 8663 8664设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。 8665 8666**系统能力:** SystemCapability.Web.Webview.Core 8667 8668**参数:** 8669 8670| 参数名 | 类型 | 必填 | 说明 | 8671| ------- | ------ | ---- | :-------------------- | 8672| 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/>} | 8673 8674**白名单json格式参数** 8675| 字段 | 参数类型 | 必填 | 参数描述 | 8676| -------- | -------- | ---- | ------------------------- | 8677| scheme | string | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 | 8678| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 | 8679| port | number | 否 | 可选字段,不设置即不匹配该项。 | 8680| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。| 8681 8682**错误码:** 8683 8684以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8685 8686| 错误码ID | 错误信息 | 8687| -------- | ------------------------------------------------------------ | 8688| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed. | 8689| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8690 8691**示例:** 8692 ```ts 8693 // xxx.ets 8694 import { webview } from '@kit.ArkWeb'; 8695 import { BusinessError } from '@kit.BasicServicesKit'; 8696 8697 @Entry 8698 @Component 8699 struct WebComponent { 8700 controller: webview.WebviewController = new webview.WebviewController(); 8701 urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}" 8702 8703 build() { 8704 Column() { 8705 Button('Setting the trustlist') 8706 .onClick(() => { 8707 try { 8708 // 设置白名单,只允许访问trust网页 8709 this.controller.setUrlTrustList(this.urltrustList); 8710 } catch (error) { 8711 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8712 } 8713 }) 8714 Button('Cancel the trustlist.') 8715 .onClick(() => { 8716 try { 8717 // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问 8718 this.controller.setUrlTrustList(""); 8719 } catch (error) { 8720 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8721 } 8722 }) 8723 Button('Access the trust web') 8724 .onClick(() => { 8725 try { 8726 // 白名单生效,可以访问trust网页 8727 this.controller.loadUrl('http://trust.example.com/test'); 8728 } catch (error) { 8729 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8730 } 8731 }) 8732 Button('Access the untrust web') 8733 .onClick(() => { 8734 try { 8735 // 白名单生效,此时不可以访问untrust网页,并弹出错误页 8736 this.controller.loadUrl('http://untrust.example.com/test'); 8737 } catch (error) { 8738 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8739 } 8740 }) 8741 Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => { 8742 try { 8743 // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页 8744 this.controller.setUrlTrustList(this.urltrustList); 8745 } catch (error) { 8746 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8747 } 8748 }) 8749 } 8750 } 8751 } 8752 ``` 8753 8754### setPathAllowingUniversalAccess<sup>12+</sup> 8755 8756setPathAllowingUniversalAccess(pathList: Array\<string\>): void 8757 8758设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileaccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一: 8759 87601.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8761 8762* /data/storage/el2/base/files/example 8763* /data/storage/el2/base/haps/entry/files/example 8764 87652.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8766 8767* /data/storage/el1/bundle/entry/resource/resfile 8768* /data/storage/el1/bundle/entry/resource/resfile/example 8769 8770当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileaccess)的行为为准。 8771 8772**系统能力:** SystemCapability.Web.Webview.Core 8773 8774**参数:** 8775 8776| 参数名 | 类型 | 必填 | 说明 | 8777| -------- | -------- | ---- | ------------------------- | 8778| pathList | Array\<string\> | 是 | 路径列表 | 8779 8780**错误码:** 8781 8782以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8783 8784| 错误码ID | 错误信息 | 8785| -------- | ------------------------ | 8786| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 8787| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8788 8789**示例:** 8790 8791```ts 8792// xxx.ets 8793import { webview } from '@kit.ArkWeb'; 8794import { BusinessError } from '@kit.BasicServicesKit'; 8795 8796@Entry 8797@Component 8798struct WebComponent { 8799 controller: WebviewController = new webview.WebviewController(); 8800 uiContext: UIContext = this.getUIContext(); 8801 8802 build() { 8803 Row() { 8804 Web({ src: "", controller: this.controller }) 8805 .onControllerAttached(() => { 8806 try { 8807 // 设置允许可以跨域访问的路径列表 8808 this.controller.setPathAllowingUniversalAccess([ 8809 this.uiContext.getHostContext()!.resourceDir, 8810 this.uiContext.getHostContext()!.filesDir + "/example" 8811 ]) 8812 this.controller.loadUrl("file://" + this.getUIContext().getHostContext()!.resourceDir + "/index.html") 8813 } catch (error) { 8814 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8815 } 8816 }) 8817 .javaScriptAccess(true) 8818 .fileAccess(true) 8819 .domStorageAccess(true) 8820 } 8821 } 8822} 8823 8824``` 8825 8826加载的html文件,位于应用资源目录resource/resfile/index.html。 8827```html 8828<!-- index.html --> 8829<!DOCTYPE html> 8830<html lang="en"> 8831 8832<head> 8833 <meta charset="utf-8"> 8834 <title>Demo</title> 8835 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover"> 8836 <script> 8837 function getFile() { 8838 var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js"; 8839 var xmlHttpReq = new XMLHttpRequest(); 8840 xmlHttpReq.onreadystatechange = function(){ 8841 console.log("readyState:" + xmlHttpReq.readyState); 8842 console.log("status:" + xmlHttpReq.status); 8843 if(xmlHttpReq.readyState == 4){ 8844 if (xmlHttpReq.status == 200) { 8845 // 如果ets侧正确设置路径列表,则此处能正常获取资源 8846 const element = document.getElementById('text'); 8847 element.textContent = "load " + file + " success"; 8848 } else { 8849 // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误 8850 const element = document.getElementById('text'); 8851 element.textContent = "load " + file + " failed"; 8852 } 8853 } 8854 } 8855 xmlHttpReq.open("GET", file); 8856 xmlHttpReq.send(null); 8857 } 8858 8859 </script> 8860</head> 8861 8862<body> 8863<div class="page"> 8864 <button id="example" onclick="getFile()">stealFile</button> 8865</div> 8866<div id="text"></div> 8867</body> 8868 8869</html> 8870``` 8871 8872html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/resfile/js/script.js。 8873<!--code_no_check--> 8874```javascript 8875const body = document.body; 8876const element = document.createElement('div'); 8877element.textContent = 'success'; 8878body.appendChild(element); 8879``` 8880 8881### enableBackForwardCache<sup>12+</sup> 8882 8883static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void 8884 8885开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。 8886 8887需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。 8888 8889**系统能力:** SystemCapability.Web.Webview.Core 8890 8891**参数:** 8892 8893| 参数名 | 类型 | 必填 | 说明 | 8894| ---------------| ------- | ---- | ------------- | 8895| features | [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是 | 允许使用特定的页面进入前进后退缓存中。| 8896 8897**示例:** 8898 8899```ts 8900// EntryAbility.ets 8901import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 8902import { hilog } from '@kit.PerformanceAnalysisKit'; 8903import { window } from '@kit.ArkUI'; 8904import { webview } from '@kit.ArkWeb'; 8905 8906export default class EntryAbility extends UIAbility { 8907 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 8908 let features = new webview.BackForwardCacheSupportedFeatures(); 8909 features.nativeEmbed = true; 8910 features.mediaTakeOver = true; 8911 // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和 8912 // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。 8913 webview.WebviewController.enableBackForwardCache(features); 8914 webview.WebviewController.initializeWebEngine(); 8915 AppStorage.setOrCreate("abilityWant", want); 8916 } 8917} 8918``` 8919 8920### setBackForwardCacheOptions<sup>12+</sup> 8921 8922setBackForwardCacheOptions(options: BackForwardCacheOptions): void 8923 8924可以设置Web组件中前进后退缓存的相关选项。 8925 8926**系统能力:** SystemCapability.Web.Webview.Core 8927 8928**参数:** 8929 8930| 参数名 | 类型 | 必填 | 说明 | 8931| ---------------| ------- | ---- | ------------- | 8932| options | [BackForwardCacheOptions](#backforwardcacheoptions12) | 是 | 用来控制Web组件前进后退缓存相关选项。| 8933 8934**错误码:** 8935 8936以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8937 8938| 错误码ID | 错误信息 | 8939| -------- | ------------------------------------------------------------ | 8940| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8941 8942**示例:** 8943 8944```ts 8945// xxx.ts 8946import { webview } from '@kit.ArkWeb'; 8947 8948@Entry 8949@Component 8950struct Index { 8951 controller: webview.WebviewController = new webview.WebviewController(); 8952 8953 build() { 8954 Column() { 8955 Row() { 8956 Button("Add options").onClick((event: ClickEvent) => { 8957 let options = new webview.BackForwardCacheOptions(); 8958 options.size = 3; 8959 options.timeToLive = 10; 8960 this.controller.setBackForwardCacheOptions(options); 8961 }) 8962 Button("Backward").onClick((event: ClickEvent) => { 8963 this.controller.backward(); 8964 }) 8965 Button("Forward").onClick((event: ClickEvent) => { 8966 this.controller.forward(); 8967 }) 8968 } 8969 Web({ src: "https://www.example.com", controller: this.controller }) 8970 } 8971 .height('100%') 8972 .width('100%') 8973 } 8974} 8975``` 8976 8977### trimMemoryByPressureLevel<sup>14+</sup> 8978 8979trimMemoryByPressureLevel(level: PressureLevel): void 8980 8981根据指定的内存压力等级,主动清理Web组件占用的缓存。 8982 8983**系统能力:** SystemCapability.Web.Webview.Core 8984 8985**参数:** 8986 8987| 参数名 | 类型 | 必填 | 说明 | 8988| ------- | ------ | ---- | :-------------------- | 8989| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。| 8990 8991**错误码:** 8992 8993以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8994 8995| 错误码ID | 错误信息 | 8996| -------- | ------------------------------------------------------------ | 8997| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 8998 8999**示例:** 9000```ts 9001// xxx.ets 9002import { webview } from '@kit.ArkWeb'; 9003import { BusinessError } from '@kit.BasicServicesKit'; 9004 9005@Entry 9006@Component 9007struct WebComponent { 9008 controller: WebviewController = new webview.WebviewController(); 9009 build() { 9010 Column() { 9011 Row() { 9012 Button('trim_Memory') 9013 .onClick(() => { 9014 try { 9015 // 设置当前内存压力等级为适中,释放少量内存 9016 webview.WebviewController.trimMemoryByPressureLevel( 9017 webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE); 9018 } catch (error) { 9019 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9020 } 9021 }) 9022 }.height('10%') 9023 Web({ src: 'www.example.com', controller: this.controller }) 9024 } 9025 } 9026} 9027``` 9028 9029### createPdf<sup>14+</sup> 9030 9031createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void 9032 9033异步callback方式获取指定网页的数据流。 9034 9035**系统能力:** SystemCapability.Web.Webview.Core 9036 9037**参数:** 9038 9039| 参数名 | 类型 | 必填 | 说明 | 9040| ------------- | --------------------------------------- | ---- | ----------------------- | 9041| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 9042| callback | AsyncCallback<[PdfData](#pdfdata14)> | 是 | 回调返回网页PDF数据流。 | 9043 9044**错误码:** 9045 9046以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9047 9048| 错误码ID | 错误信息 | 9049| -------- | ------------------------------------------------------------ | 9050| 401 | Invalid input parameter. | 9051| 17100001 | Init error. The WebviewController must be associated with a Web component. | 9052 9053**示例**: 9054 9055```ts 9056import { fileIo as fs } from '@kit.CoreFileKit'; 9057import { webview } from '@kit.ArkWeb'; 9058import { BusinessError } from '@kit.BasicServicesKit'; 9059import { common } from '@kit.AbilityKit'; 9060 9061@Entry 9062@Component 9063struct Index { 9064 controller: webview.WebviewController = new webview.WebviewController(); 9065 pdfConfig: webview.PdfConfiguration = { 9066 width: 8.27, 9067 height: 11.69, 9068 marginTop: 0, 9069 marginBottom: 0, 9070 marginRight: 0, 9071 marginLeft: 0, 9072 shouldPrintBackground: true 9073 } 9074 9075 build() { 9076 Column() { 9077 Button('SavePDF') 9078 .onClick(() => { 9079 this.controller.createPdf( 9080 this.pdfConfig, 9081 (error, result: webview.PdfData) => { 9082 try { 9083 // 获取组件上下文 9084 let context = this.getUIContext().getHostContext() as common.UIAbilityContext; 9085 // 获取沙箱路径,设置pdf文件名 9086 let filePath = context.filesDir + "/test.pdf"; 9087 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 9088 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 9089 console.info("createPDF write data to file succeed and size is:" + writeLen); 9090 }).catch((err: BusinessError) => { 9091 console.error("createPDF write data to file failed with error message: " + err.message + 9092 ", error code: " + err.code); 9093 }).finally(() => { 9094 fs.closeSync(file); 9095 }); 9096 } catch (resError) { 9097 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9098 } 9099 }); 9100 }) 9101 Web({ src: "www.example.com", controller: this.controller }) 9102 } 9103 } 9104} 9105``` 9106 9107### createPdf<sup>14+</sup> 9108 9109createPdf(configuration: PdfConfiguration): Promise\<PdfData\> 9110 9111以Promise方式异步获取指定网页的数据流。 9112 9113**系统能力:** SystemCapability.Web.Webview.Core 9114 9115**参数:** 9116 9117| 参数名 | 类型 | 必填 | 说明 | 9118| ------------- | --------------------------------------- | ---- | ----------------- | 9119| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 9120 9121**返回值:** 9122 9123| 类型 | 说明 | 9124| ------------------------------ | ----------------------------- | 9125| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 | 9126 9127**错误码:** 9128 9129以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9130 9131| 错误码ID | 错误信息 | 9132| -------- | ------------------------------------------------------------ | 9133| 401 | Invalid input parameter. | 9134| 17100001 | Init error. The WebviewController must be associated with a Web component. | 9135 9136**示例**: 9137 9138```ts 9139import { fileIo as fs } from '@kit.CoreFileKit'; 9140import { webview } from '@kit.ArkWeb'; 9141import { BusinessError } from '@kit.BasicServicesKit'; 9142import { common } from '@kit.AbilityKit'; 9143 9144@Entry 9145@Component 9146struct Index { 9147 controller: webview.WebviewController = new webview.WebviewController(); 9148 pdfConfig: webview.PdfConfiguration = { 9149 width: 8.27, 9150 height: 11.69, 9151 marginTop: 0, 9152 marginBottom: 0, 9153 marginRight: 0, 9154 marginLeft: 0, 9155 shouldPrintBackground: true 9156 } 9157 9158 build() { 9159 Column() { 9160 Button('SavePDF') 9161 .onClick(() => { 9162 this.controller.createPdf(this.pdfConfig) 9163 .then((result: webview.PdfData) => { 9164 try { 9165 // 获取组件上下文 9166 let context = this.getUIContext().getHostContext() as common.UIAbilityContext; 9167 // 获取沙箱路径,设置pdf文件名 9168 let filePath = context.filesDir + "/test.pdf"; 9169 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 9170 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 9171 console.info("createPDF write data to file succeed and size is:" + writeLen); 9172 }).catch((err: BusinessError) => { 9173 console.error("createPDF write data to file failed with error message: " + err.message + 9174 ", error code: " + err.code); 9175 }).finally(() => { 9176 fs.closeSync(file); 9177 }); 9178 } catch (resError) { 9179 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 9180 } 9181 }) 9182 }) 9183 Web({ src: "www.example.com", controller: this.controller }) 9184 } 9185 } 9186} 9187``` 9188 9189### getScrollOffset<sup>13+</sup> 9190 9191getScrollOffset(): ScrollOffset 9192 9193获取网页当前的滚动偏移量。 9194 9195**系统能力:** SystemCapability.Web.Webview.Core 9196 9197**返回值** 9198 9199| 类型 | 说明 | 9200| :------------------------------ | ---------------------- | 9201| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 | 9202 9203**示例:** 9204 9205```ts 9206import { webview } from '@kit.ArkWeb'; 9207 9208@Entry 9209@Component 9210struct WebComponent { 9211 @State testTitle: string = 'webScroll' 9212 controller: webview.WebviewController = new webview.WebviewController(); 9213 @State controllerX: number =-100; 9214 @State controllerY: number =-100; 9215 @State mode: OverScrollMode = OverScrollMode.ALWAYS; 9216 9217 build() { 9218 Column() { 9219 Row() { 9220 Text(this.testTitle) 9221 .fontSize(30) 9222 .fontWeight(FontWeight.Bold) 9223 .margin(5) 9224 } 9225 Column() { 9226 Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`) 9227 } 9228 .margin({ top: 10, bottom: 10 }) 9229 Web({ src: $rawfile("scrollByTo.html"), controller: this.controller }) 9230 .key("web_01") 9231 .overScrollMode(this.mode) 9232 .onTouch(() => { 9233 this.controllerX = this.controller.getScrollOffset().x; 9234 this.controllerY = this.controller.getScrollOffset().y; 9235 let componentInfo = this.getUIContext().getComponentUtils().getRectangleById("web_01"); 9236 let webHeight = this.getUIContext().px2vp(componentInfo.size.height); 9237 let pageHeight = this.controller.getPageHeight(); 9238 if (this.controllerY < 0) { 9239 // case1:网页向下过滚动时,可直接使用ScrollOffset.y 9240 console.log(`get downwards overscroll offsetY = ${this.controllerY}`); 9241 } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) { 9242 // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量 9243 console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`); 9244 } else { 9245 // case3:网页未发生过滚动时,可直接使用ScrollOffset.y 9246 console.log(`get scroll offsetY = ${this.controllerY}`); 9247 } 9248 }) 9249 .height(600) 9250 } 9251 .width('100%') 9252 .height('100%') 9253 } 9254} 9255``` 9256 9257### getLastHitTest<sup>18+</sup> 9258 9259getLastHitTest(): HitTestValue 9260 9261获取上一次被点击区域的元素信息。 9262 9263**系统能力:** SystemCapability.Web.Webview.Core 9264 9265**返回值:** 9266 9267| 类型 | 说明 | 9268| ------------ | -------------------- | 9269| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 9270 9271**错误码:** 9272 9273以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9274 9275| 错误码ID | 错误信息 | 9276| -------- | ------------------------------------------------------------ | 9277| 17100001 | Init error. The WebviewController must be associated with a Web component. | 9278 9279**示例:** 9280 9281```ts 9282// xxx.ets 9283import { webview } from '@kit.ArkWeb'; 9284import { BusinessError } from '@kit.BasicServicesKit'; 9285 9286@Entry 9287@Component 9288struct WebComponent { 9289 controller: webview.WebviewController = new webview.WebviewController(); 9290 9291 build() { 9292 Column() { 9293 Button('getLastHitTest') 9294 .onClick(() => { 9295 try { 9296 let hitValue = this.controller.getLastHitTest(); 9297 console.log("hitType: " + hitValue.type); 9298 console.log("extra: " + hitValue.extra); 9299 } catch (error) { 9300 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9301 } 9302 }) 9303 Web({ src: 'www.example.com', controller: this.controller }) 9304 } 9305 } 9306} 9307``` 9308 9309## WebCookieManager 9310 9311通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。 9312 9313### getCookie<sup>(deprecated)</sup> 9314 9315static getCookie(url: string): string 9316 9317获取指定url对应cookie的值。 9318 9319> **说明:** 9320> 9321> 从API version 9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代 9322 9323**系统能力:** SystemCapability.Web.Webview.Core 9324 9325**参数:** 9326 9327| 参数名 | 类型 | 必填 | 说明 | 9328| ------ | ------ | ---- | :------------------------ | 9329| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9330 9331**返回值:** 9332 9333| 类型 | 说明 | 9334| ------ | ------------------------- | 9335| string | 指定url对应的cookie的值。 | 9336 9337**错误码:** 9338 9339以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9340 9341| 错误码ID | 错误信息 | 9342| -------- | ------------------------------------------------------ | 9343| 17100002 | Invalid url. | 9344| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9345 9346**示例:** 9347 9348```ts 9349// xxx.ets 9350import { webview } from '@kit.ArkWeb'; 9351import { BusinessError } from '@kit.BasicServicesKit'; 9352 9353@Entry 9354@Component 9355struct WebComponent { 9356 controller: webview.WebviewController = new webview.WebviewController(); 9357 9358 build() { 9359 Column() { 9360 Button('getCookie') 9361 .onClick(() => { 9362 try { 9363 let value = webview.WebCookieManager.getCookie('https://www.example.com'); 9364 console.log("value: " + value); 9365 } catch (error) { 9366 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9367 } 9368 }) 9369 Web({ src: 'www.example.com', controller: this.controller }) 9370 } 9371 } 9372} 9373``` 9374 9375### fetchCookieSync<sup>11+</sup> 9376 9377static fetchCookieSync(url: string, incognito?: boolean): string 9378 9379获取指定url对应cookie的值。 9380 9381> **说明:** 9382> 9383> 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。 9384> 9385> 为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。 9386> 9387> fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。 9388 9389**系统能力:** SystemCapability.Web.Webview.Core 9390 9391**参数:** 9392 9393| 参数名 | 类型 | 必填 | 说明 | 9394| ------ | ------ | ---- | :------------------------ | 9395| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9396| incognito | boolean | 否 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9397 9398**返回值:** 9399 9400| 类型 | 说明 | 9401| ------ | ------------------------- | 9402| string | 指定url对应的cookie的值。 | 9403 9404**错误码:** 9405 9406以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9407 9408| 错误码ID | 错误信息 | 9409| -------- | ------------------------------------------------------ | 9410| 17100002 | Invalid url. | 9411| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9412 9413**示例:** 9414 9415```ts 9416// xxx.ets 9417import { webview } from '@kit.ArkWeb'; 9418import { BusinessError } from '@kit.BasicServicesKit'; 9419 9420@Entry 9421@Component 9422struct WebComponent { 9423 controller: webview.WebviewController = new webview.WebviewController(); 9424 9425 build() { 9426 Column() { 9427 Button('fetchCookieSync') 9428 .onClick(() => { 9429 try { 9430 let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com'); 9431 console.log("fetchCookieSync cookie = " + value); 9432 } catch (error) { 9433 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9434 } 9435 }) 9436 Web({ src: 'www.example.com', controller: this.controller }) 9437 } 9438 } 9439} 9440``` 9441 9442### fetchCookie<sup>11+</sup> 9443 9444static fetchCookie(url: string, callback: AsyncCallback\<string>): void 9445 9446异步callback方式获取指定url对应cookie的值。 9447 9448**系统能力:** SystemCapability.Web.Webview.Core 9449 9450**参数:** 9451 9452| 参数名 | 类型 | 必填 | 说明 | 9453| ------ | ------ | ---- | :------------------------ | 9454| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9455| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie | 9456 9457**错误码:** 9458 9459以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9460 9461| 错误码ID | 错误信息 | 9462| -------- | ------------------------------------------------------ | 9463| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9464| 17100002 | Invalid url. | 9465 9466**示例:** 9467 9468```ts 9469// xxx.ets 9470import { webview } from '@kit.ArkWeb'; 9471import { BusinessError } from '@kit.BasicServicesKit'; 9472 9473@Entry 9474@Component 9475struct WebComponent { 9476 controller: webview.WebviewController = new webview.WebviewController(); 9477 9478 build() { 9479 Column() { 9480 Button('fetchCookie') 9481 .onClick(() => { 9482 try { 9483 webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => { 9484 if (error) { 9485 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9486 return; 9487 } 9488 if (cookie) { 9489 console.log('fetchCookie cookie = ' + cookie); 9490 } 9491 }) 9492 } catch (error) { 9493 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9494 } 9495 }) 9496 Web({ src: 'www.example.com', controller: this.controller }) 9497 } 9498 } 9499} 9500``` 9501 9502### fetchCookie<sup>11+</sup> 9503 9504static fetchCookie(url: string): Promise\<string> 9505 9506以Promise方式异步获取指定url对应cookie的值。 9507 9508**系统能力:** SystemCapability.Web.Webview.Core 9509 9510**参数:** 9511 9512| 参数名 | 类型 | 必填 | 说明 | 9513| ------ | ------ | ---- | :------------------------ | 9514| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9515 9516**返回值:** 9517 9518| 类型 | 说明 | 9519| ------ | ------------------------- | 9520| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9521 9522**错误码:** 9523 9524以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9525 9526| 错误码ID | 错误信息 | 9527| -------- | ------------------------------------------------------ | 9528| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9529| 17100002 | Invalid url. | 9530 9531**示例:** 9532 9533```ts 9534// xxx.ets 9535import { webview } from '@kit.ArkWeb'; 9536import { BusinessError } from '@kit.BasicServicesKit'; 9537 9538@Entry 9539@Component 9540struct WebComponent { 9541 controller: webview.WebviewController = new webview.WebviewController(); 9542 9543 build() { 9544 Column() { 9545 Button('fetchCookie') 9546 .onClick(() => { 9547 try { 9548 webview.WebCookieManager.fetchCookie('https://www.example.com') 9549 .then(cookie => { 9550 console.log("fetchCookie cookie = " + cookie); 9551 }) 9552 .catch((error: BusinessError) => { 9553 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9554 }) 9555 } catch (error) { 9556 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9557 } 9558 }) 9559 Web({ src: 'www.example.com', controller: this.controller }) 9560 } 9561 } 9562} 9563``` 9564 9565### fetchCookie<sup>14+</sup> 9566 9567static fetchCookie(url: string, incognito: boolean): Promise\<string> 9568 9569以Promise方式异步获取指定url对应cookie的值。 9570 9571**系统能力:** SystemCapability.Web.Webview.Core 9572 9573**参数:** 9574 9575| 参数名 | 类型 | 必填 | 说明 | 9576| ------ | ------ | ---- | :------------------------ | 9577| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9578| incognito | boolean | 是 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9579 9580**返回值:** 9581 9582| 类型 | 说明 | 9583| ------ | ------------------------- | 9584| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9585 9586**错误码:** 9587 9588以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9589 9590| 错误码ID | 错误信息 | 9591| -------- | ------------------------------------------------------ | 9592| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9593| 17100002 | Invalid url. | 9594 9595**示例:** 9596 9597```ts 9598// xxx.ets 9599import { webview } from '@kit.ArkWeb'; 9600import { BusinessError } from '@kit.BasicServicesKit'; 9601 9602@Entry 9603@Component 9604struct WebComponent { 9605 controller: webview.WebviewController = new webview.WebviewController(); 9606 9607 build() { 9608 Column() { 9609 Button('fetchCookie') 9610 .onClick(() => { 9611 try { 9612 webview.WebCookieManager.fetchCookie('https://www.example.com', false) 9613 .then(cookie => { 9614 console.log("fetchCookie cookie = " + cookie); 9615 }) 9616 .catch((error: BusinessError) => { 9617 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9618 }) 9619 } catch (error) { 9620 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9621 } 9622 }) 9623 Web({ src: 'www.example.com', controller: this.controller }) 9624 } 9625 } 9626} 9627``` 9628 9629### setCookie<sup>(deprecated)</sup> 9630 9631static setCookie(url: string, value: string): void 9632 9633为指定url设置单个cookie的值。 9634 9635> **说明:** 9636> 9637> 从API version 9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代 9638 9639**系统能力:** SystemCapability.Web.Webview.Core 9640 9641**参数:** 9642 9643| 参数名 | 类型 | 必填 | 说明 | 9644| ------ | ------ | ---- | :------------------------ | 9645| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9646| value | string | 是 | 要设置的cookie的值。 | 9647 9648**错误码:** 9649 9650以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9651 9652| 错误码ID | 错误信息 | 9653| -------- | ------------------------------------------------------ | 9654| 17100002 | Invalid url. | 9655| 17100005 | Invalid cookie value. | 9656| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9657 9658**示例:** 9659 9660```ts 9661// xxx.ets 9662import { webview } from '@kit.ArkWeb'; 9663import { BusinessError } from '@kit.BasicServicesKit'; 9664 9665@Entry 9666@Component 9667struct WebComponent { 9668 controller: webview.WebviewController = new webview.WebviewController(); 9669 9670 build() { 9671 Column() { 9672 Button('setCookie') 9673 .onClick(() => { 9674 try { 9675 webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 9676 } catch (error) { 9677 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9678 } 9679 }) 9680 Web({ src: 'www.example.com', controller: this.controller }) 9681 } 9682 } 9683} 9684``` 9685 9686### configCookieSync<sup>11+</sup> 9687 9688static configCookieSync(url: string, value: string, incognito?: boolean): void 9689 9690为指定url设置单个cookie的值。 9691 9692> **说明:** 9693> 9694> configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。 9695> 9696> 同步cookie的时机建议在Web组件加载之前完成。 9697> 9698> 若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。 9699 9700**系统能力:** SystemCapability.Web.Webview.Core 9701 9702**参数:** 9703 9704| 参数名 | 类型 | 必填 | 说明 | 9705| ------ | ------ | ---- | :------------------------ | 9706| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9707| value | string | 是 | 要设置的cookie的值。 | 9708| incognito | boolean | 否 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9709 9710**错误码:** 9711 9712以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9713 9714| 错误码ID | 错误信息 | 9715| -------- | ------------------------------------------------------ | 9716| 17100002 | Invalid url. | 9717| 17100005 | Invalid cookie value. | 9718| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9719 9720**示例:** 9721 9722```ts 9723// xxx.ets 9724import { webview } from '@kit.ArkWeb'; 9725import { BusinessError } from '@kit.BasicServicesKit'; 9726 9727@Entry 9728@Component 9729struct WebComponent { 9730 controller: webview.WebviewController = new webview.WebviewController(); 9731 9732 build() { 9733 Column() { 9734 Button('configCookieSync') 9735 .onClick(() => { 9736 try { 9737 // configCookieSync每次仅支持设置单个cookie值。 9738 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b'); 9739 } catch (error) { 9740 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9741 } 9742 }) 9743 Web({ src: 'www.example.com', controller: this.controller }) 9744 } 9745 } 9746} 9747``` 9748 9749### configCookieSync<sup>14+</sup> 9750 9751static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void 9752 9753为指定url设置cookie的值。 9754 9755**系统能力:** SystemCapability.Web.Webview.Core 9756 9757**参数:** 9758 9759| 参数名 | 类型 | 必填 | 说明 | 9760| ------ | ------ | ---- | :------------------------ | 9761| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9762| value | string | 是 | 要设置的cookie的值。 | 9763| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9764| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9765 9766**错误码:** 9767 9768以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9769 9770| 错误码ID | 错误信息 | 9771| -------- | ------------------------------------------------------ | 9772| 17100002 | Invalid url. | 9773| 17100005 | Invalid cookie value. | 9774| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9775 9776**示例:** 9777 9778```ts 9779// xxx.ets 9780import { webview } from '@kit.ArkWeb'; 9781import { BusinessError } from '@kit.BasicServicesKit'; 9782 9783@Entry 9784@Component 9785struct WebComponent { 9786 controller: webview.WebviewController = new webview.WebviewController(); 9787 9788 build() { 9789 Column() { 9790 Button('configCookieSync') 9791 .onClick(() => { 9792 try { 9793 // 仅支持设置单个cookie值。 9794 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false); 9795 } catch (error) { 9796 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9797 } 9798 }) 9799 Web({ src: 'www.example.com', controller: this.controller }) 9800 } 9801 } 9802} 9803``` 9804 9805### configCookie<sup>11+</sup> 9806 9807static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void 9808 9809异步callback方式为指定url设置单个cookie的值。 9810 9811**系统能力:** SystemCapability.Web.Webview.Core 9812 9813**参数:** 9814 9815| 参数名 | 类型 | 必填 | 说明 | 9816| ------ | ------ | ---- | :------------------------ | 9817| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9818| value | string | 是 | 要设置的cookie的值。 | 9819| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 | 9820 9821**错误码:** 9822 9823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9824 9825| 错误码ID | 错误信息 | 9826| -------- | ------------------------------------------------------ | 9827| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9828| 17100002 | Invalid url. | 9829| 17100005 | Invalid cookie value. | 9830 9831**示例:** 9832 9833```ts 9834// xxx.ets 9835import { webview } from '@kit.ArkWeb'; 9836import { BusinessError } from '@kit.BasicServicesKit'; 9837 9838@Entry 9839@Component 9840struct WebComponent { 9841 controller: webview.WebviewController = new webview.WebviewController(); 9842 9843 build() { 9844 Column() { 9845 Button('configCookie') 9846 .onClick(() => { 9847 try { 9848 webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => { 9849 if (error) { 9850 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9851 } 9852 }) 9853 } catch (error) { 9854 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9855 } 9856 }) 9857 Web({ src: 'www.example.com', controller: this.controller }) 9858 } 9859 } 9860} 9861``` 9862 9863### configCookie<sup>11+</sup> 9864 9865static configCookie(url: string, value: string): Promise\<void> 9866 9867以异步Promise方式为指定url设置单个cookie的值。 9868 9869**系统能力:** SystemCapability.Web.Webview.Core 9870 9871**参数:** 9872 9873| 参数名 | 类型 | 必填 | 说明 | 9874| ------ | ------ | ---- | :------------------------ | 9875| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9876| value | string | 是 | 要设置的cookie的值。 | 9877 9878**返回值:** 9879 9880| 类型 | 说明 | 9881| ------ | ------------------------- | 9882| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9883 9884**错误码:** 9885 9886以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9887 9888| 错误码ID | 错误信息 | 9889| -------- | ------------------------------------------------------ | 9890| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9891| 17100002 | Invalid url. | 9892| 17100005 | Invalid cookie value. | 9893 9894**示例:** 9895 9896```ts 9897// xxx.ets 9898import { webview } from '@kit.ArkWeb'; 9899import { BusinessError } from '@kit.BasicServicesKit'; 9900 9901@Entry 9902@Component 9903struct WebComponent { 9904 controller: webview.WebviewController = new webview.WebviewController(); 9905 9906 build() { 9907 Column() { 9908 Button('configCookie') 9909 .onClick(() => { 9910 try { 9911 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b') 9912 .then(() => { 9913 console.log('configCookie success!'); 9914 }) 9915 .catch((error: BusinessError) => { 9916 console.log('error: ' + JSON.stringify(error)); 9917 }) 9918 } catch (error) { 9919 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9920 } 9921 }) 9922 Web({ src: 'www.example.com', controller: this.controller }) 9923 } 9924 } 9925} 9926``` 9927 9928### configCookie<sup>14+</sup> 9929 9930static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void> 9931 9932以异步Promise方式为指定url设置单个cookie的值。 9933 9934**系统能力:** SystemCapability.Web.Webview.Core 9935 9936**参数:** 9937 9938| 参数名 | 类型 | 必填 | 说明 | 9939| ------ | ------ | ---- | :------------------------ | 9940| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9941| value | string | 是 | 要设置的cookie的值。 | 9942| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9943| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9944 9945**返回值:** 9946 9947| 类型 | 说明 | 9948| ------ | ------------------------- | 9949| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9950 9951**错误码:** 9952 9953以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9954 9955| 错误码ID | 错误信息 | 9956| -------- | ------------------------------------------------------ | 9957| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9958| 17100002 | Invalid url. | 9959| 17100005 | Invalid cookie value. | 9960 9961**示例:** 9962 9963```ts 9964// xxx.ets 9965import { webview } from '@kit.ArkWeb'; 9966import { BusinessError } from '@kit.BasicServicesKit'; 9967 9968@Entry 9969@Component 9970struct WebComponent { 9971 controller: webview.WebviewController = new webview.WebviewController(); 9972 9973 build() { 9974 Column() { 9975 Button('configCookie') 9976 .onClick(() => { 9977 try { 9978 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false) 9979 .then(() => { 9980 console.log('configCookie success!'); 9981 }) 9982 .catch((error: BusinessError) => { 9983 console.log('error: ' + JSON.stringify(error)); 9984 }) 9985 } catch (error) { 9986 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9987 } 9988 }) 9989 Web({ src: 'www.example.com', controller: this.controller }) 9990 } 9991 } 9992} 9993``` 9994 9995### saveCookieSync<sup>15+</sup> 9996 9997static saveCookieSync(): void 9998 9999将当前存在内存中的cookie同步保存到磁盘中。 10000 10001**系统能力:** SystemCapability.Web.Webview.Core 10002 10003> **说明:** 10004> 10005> saveCookieSync用于强制将需要持久化的cookies写入磁盘。默认情况下,2in1和Tablet设备不会持久化session cookie。 10006 10007**示例:** 10008 10009```ts 10010// xxx.ets 10011import { webview } from '@kit.ArkWeb'; 10012import { BusinessError } from '@kit.BasicServicesKit'; 10013 10014@Entry 10015@Component 10016struct WebComponent { 10017 controller: webview.WebviewController = new webview.WebviewController(); 10018 10019 build() { 10020 Column() { 10021 Button('saveCookieSync') 10022 .onClick(() => { 10023 try { 10024 webview.WebCookieManager.saveCookieSync(); 10025 } catch (error) { 10026 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10027 } 10028 }) 10029 Web({ src: 'www.example.com', controller: this.controller }) 10030 } 10031 } 10032} 10033``` 10034 10035### saveCookieAsync 10036 10037static saveCookieAsync(callback: AsyncCallback\<void>): void 10038 10039将当前存在内存中的cookie异步保存到磁盘中。 10040 10041**系统能力:** SystemCapability.Web.Webview.Core 10042 10043**参数:** 10044 10045| 参数名 | 类型 | 必填 | 说明 | 10046| -------- | ---------------------- | ---- | :------------------------------------------------- | 10047| callback | AsyncCallback\<void> | 是 | callback回调,用于获取cookie是否成功保存。 | 10048 10049**错误码:** 10050 10051以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10052 10053| 错误码ID | 错误信息 | 10054| -------- | ------------------------------------------------------ | 10055| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10056 10057**示例:** 10058 10059```ts 10060// xxx.ets 10061import { webview } from '@kit.ArkWeb'; 10062import { BusinessError } from '@kit.BasicServicesKit'; 10063 10064@Entry 10065@Component 10066struct WebComponent { 10067 controller: webview.WebviewController = new webview.WebviewController(); 10068 10069 build() { 10070 Column() { 10071 Button('saveCookieAsync') 10072 .onClick(() => { 10073 try { 10074 webview.WebCookieManager.saveCookieAsync((error) => { 10075 if (error) { 10076 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10077 } 10078 }) 10079 } catch (error) { 10080 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10081 } 10082 }) 10083 Web({ src: 'www.example.com', controller: this.controller }) 10084 } 10085 } 10086} 10087``` 10088 10089### saveCookieAsync 10090 10091static saveCookieAsync(): Promise\<void> 10092 10093将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 10094 10095**系统能力:** SystemCapability.Web.Webview.Core 10096 10097**返回值:** 10098 10099| 类型 | 说明 | 10100| ---------------- | ----------------------------------------- | 10101| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 10102 10103**错误码:** 10104 10105以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10106 10107| 错误码ID | 错误信息 | 10108| -------- | ------------------------------------------------------ | 10109| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10110 10111**示例:** 10112 10113```ts 10114// xxx.ets 10115import { webview } from '@kit.ArkWeb'; 10116import { BusinessError } from '@kit.BasicServicesKit'; 10117 10118@Entry 10119@Component 10120struct WebComponent { 10121 controller: webview.WebviewController = new webview.WebviewController(); 10122 10123 build() { 10124 Column() { 10125 Button('saveCookieAsync') 10126 .onClick(() => { 10127 try { 10128 webview.WebCookieManager.saveCookieAsync() 10129 .then(() => { 10130 console.log("saveCookieAsyncCallback success!"); 10131 }) 10132 .catch((error: BusinessError) => { 10133 console.error("error: " + error); 10134 }); 10135 } catch (error) { 10136 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10137 } 10138 }) 10139 Web({ src: 'www.example.com', controller: this.controller }) 10140 } 10141 } 10142} 10143``` 10144 10145### putAcceptCookieEnabled 10146 10147static putAcceptCookieEnabled(accept: boolean): void 10148 10149设置WebCookieManager实例是否拥有发送和接收cookie的权限。 10150 10151**系统能力:** SystemCapability.Web.Webview.Core 10152 10153**参数:** 10154 10155| 参数名 | 类型 | 必填 | 说明 | 10156| ------ | ------- | ---- | :----------------------------------- | 10157| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限,默认为true,表示拥有发送和接收cookie的权限。 | 10158 10159**错误码:** 10160 10161以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10162 10163| 错误码ID | 错误信息 | 10164| -------- | ------------------------------------------------------ | 10165| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10166 10167**示例:** 10168 10169```ts 10170// xxx.ets 10171import { webview } from '@kit.ArkWeb'; 10172import { BusinessError } from '@kit.BasicServicesKit'; 10173 10174@Entry 10175@Component 10176struct WebComponent { 10177 controller: webview.WebviewController = new webview.WebviewController(); 10178 10179 build() { 10180 Column() { 10181 Button('putAcceptCookieEnabled') 10182 .onClick(() => { 10183 try { 10184 webview.WebCookieManager.putAcceptCookieEnabled(false); 10185 } catch (error) { 10186 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10187 } 10188 }) 10189 Web({ src: 'www.example.com', controller: this.controller }) 10190 } 10191 } 10192} 10193``` 10194 10195### isCookieAllowed 10196 10197static isCookieAllowed(): boolean 10198 10199获取WebCookieManager实例是否拥有发送和接收cookie的权限。 10200 10201**系统能力:** SystemCapability.Web.Webview.Core 10202 10203**返回值:** 10204 10205| 类型 | 说明 | 10206| ------- | -------------------------------- | 10207| boolean | 是否拥有发送和接收cookie的权限,默认为true,表示拥有发送和接收cookie的权限。 | 10208 10209**示例:** 10210 10211```ts 10212// xxx.ets 10213import { webview } from '@kit.ArkWeb'; 10214 10215@Entry 10216@Component 10217struct WebComponent { 10218 controller: webview.WebviewController = new webview.WebviewController(); 10219 10220 build() { 10221 Column() { 10222 Button('isCookieAllowed') 10223 .onClick(() => { 10224 let result = webview.WebCookieManager.isCookieAllowed(); 10225 console.log("result: " + result); 10226 }) 10227 Web({ src: 'www.example.com', controller: this.controller }) 10228 } 10229 } 10230} 10231``` 10232 10233### putAcceptThirdPartyCookieEnabled 10234 10235static putAcceptThirdPartyCookieEnabled(accept: boolean): void 10236 10237设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 10238 10239**系统能力:** SystemCapability.Web.Webview.Core 10240 10241**参数:** 10242 10243| 参数名 | 类型 | 必填 | 说明 | 10244| ------ | ------- | ---- | :----------------------------------------- | 10245| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限。<br>true表示设置拥有发送和接收第三方cookie的权限,false表示设置无发送和接收第三方cookie的权限。<br>默认值:false。 | 10246 10247**错误码:** 10248 10249以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10250 10251| 错误码ID | 错误信息 | 10252| -------- | ------------------------------------------------------ | 10253| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10254 10255**示例:** 10256 10257```ts 10258// xxx.ets 10259import { webview } from '@kit.ArkWeb'; 10260import { BusinessError } from '@kit.BasicServicesKit'; 10261 10262@Entry 10263@Component 10264struct WebComponent { 10265 controller: webview.WebviewController = new webview.WebviewController(); 10266 10267 build() { 10268 Column() { 10269 Button('putAcceptThirdPartyCookieEnabled') 10270 .onClick(() => { 10271 try { 10272 webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 10273 } catch (error) { 10274 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10275 } 10276 }) 10277 Web({ src: 'www.example.com', controller: this.controller }) 10278 } 10279 } 10280} 10281``` 10282 10283### isThirdPartyCookieAllowed 10284 10285static isThirdPartyCookieAllowed(): boolean 10286 10287获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 10288 10289**系统能力:** SystemCapability.Web.Webview.Core 10290 10291**返回值:** 10292 10293| 类型 | 说明 | 10294| ------- | -------------------------------------- | 10295| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false,表示未拥有发送和接收第三方cookie的权限。 | 10296 10297**示例:** 10298 10299```ts 10300// xxx.ets 10301import { webview } from '@kit.ArkWeb'; 10302 10303@Entry 10304@Component 10305struct WebComponent { 10306 controller: webview.WebviewController = new webview.WebviewController(); 10307 10308 build() { 10309 Column() { 10310 Button('isThirdPartyCookieAllowed') 10311 .onClick(() => { 10312 let result = webview.WebCookieManager.isThirdPartyCookieAllowed(); 10313 console.log("result: " + result); 10314 }) 10315 Web({ src: 'www.example.com', controller: this.controller }) 10316 } 10317 } 10318} 10319``` 10320 10321### existCookie 10322 10323static existCookie(incognito?: boolean): boolean 10324 10325获取是否存在cookie。 10326 10327**系统能力:** SystemCapability.Web.Webview.Core 10328 10329**参数:** 10330 10331| 参数名 | 类型 | 必填 | 说明 | 10332| ------ | ------- | ---- | :----------------------------------------- | 10333| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 | 10334 10335**返回值:** 10336 10337| 类型 | 说明 | 10338| ------- | -------------------------------------- | 10339| boolean | true表示存在cookie,false表示不存在cookie。 | 10340 10341**示例:** 10342 10343```ts 10344// xxx.ets 10345import { webview } from '@kit.ArkWeb'; 10346 10347@Entry 10348@Component 10349struct WebComponent { 10350 controller: webview.WebviewController = new webview.WebviewController(); 10351 10352 build() { 10353 Column() { 10354 Button('existCookie') 10355 .onClick(() => { 10356 let result = webview.WebCookieManager.existCookie(); 10357 console.log("result: " + result); 10358 }) 10359 Web({ src: 'www.example.com', controller: this.controller }) 10360 } 10361 } 10362} 10363``` 10364 10365### deleteEntireCookie<sup>(deprecated)</sup> 10366 10367static deleteEntireCookie(): void 10368 10369清除所有cookie。 10370 10371> **说明:** 10372> 10373> 从API version 9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代 10374 10375**系统能力:** SystemCapability.Web.Webview.Core 10376 10377**示例:** 10378 10379```ts 10380// xxx.ets 10381import { webview } from '@kit.ArkWeb'; 10382 10383@Entry 10384@Component 10385struct WebComponent { 10386 controller: webview.WebviewController = new webview.WebviewController(); 10387 10388 build() { 10389 Column() { 10390 Button('deleteEntireCookie') 10391 .onClick(() => { 10392 webview.WebCookieManager.deleteEntireCookie(); 10393 }) 10394 Web({ src: 'www.example.com', controller: this.controller }) 10395 } 10396 } 10397} 10398``` 10399 10400### clearAllCookiesSync<sup>11+</sup> 10401 10402static clearAllCookiesSync(incognito?: boolean): void 10403 10404清除所有cookie。 10405 10406**系统能力:** SystemCapability.Web.Webview.Core 10407 10408**参数:** 10409 10410| 参数名 | 类型 | 必填 | 说明 | 10411| ------ | ------- | ---- | :----------------------------------------- | 10412| incognito | boolean | 否 | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 | 10413 10414**示例:** 10415 10416```ts 10417// xxx.ets 10418import { webview } from '@kit.ArkWeb'; 10419 10420@Entry 10421@Component 10422struct WebComponent { 10423 controller: webview.WebviewController = new webview.WebviewController(); 10424 10425 build() { 10426 Column() { 10427 Button('clearAllCookiesSync') 10428 .onClick(() => { 10429 webview.WebCookieManager.clearAllCookiesSync(); 10430 }) 10431 Web({ src: 'www.example.com', controller: this.controller }) 10432 } 10433 } 10434} 10435``` 10436 10437### clearAllCookies<sup>11+</sup> 10438 10439static clearAllCookies(callback: AsyncCallback\<void>): void 10440 10441异步callback方式清除所有cookie。 10442 10443**系统能力:** SystemCapability.Web.Webview.Core 10444 10445**参数:** 10446 10447| 参数名 | 类型 | 必填 | 说明 | 10448| -------- | ---------------------- | ---- | :------------------------------------------------- | 10449| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有cookie是否成功。 | 10450 10451**错误码:** 10452 10453以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10454 10455| 错误码ID | 错误信息 | 10456| -------- | ------------------------------------------------------ | 10457| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10458 10459**示例:** 10460 10461```ts 10462// xxx.ets 10463import { webview } from '@kit.ArkWeb'; 10464import { BusinessError } from '@kit.BasicServicesKit'; 10465 10466@Entry 10467@Component 10468struct WebComponent { 10469 controller: webview.WebviewController = new webview.WebviewController(); 10470 10471 build() { 10472 Column() { 10473 Button('clearAllCookies') 10474 .onClick(() => { 10475 try { 10476 webview.WebCookieManager.clearAllCookies((error) => { 10477 if (error) { 10478 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10479 } 10480 }) 10481 } catch (error) { 10482 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10483 } 10484 }) 10485 Web({ src: 'www.example.com', controller: this.controller }) 10486 } 10487 } 10488} 10489``` 10490 10491### clearAllCookies<sup>11+</sup> 10492 10493static clearAllCookies(): Promise\<void> 10494 10495异步promise方式清除所有cookie。 10496 10497**系统能力:** SystemCapability.Web.Webview.Core 10498 10499**返回值:** 10500 10501| 类型 | 说明 | 10502| ---------------- | ----------------------------------------- | 10503| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 | 10504 10505**错误码:** 10506 10507以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10508 10509| 错误码ID | 错误信息 | 10510| -------- | ------------------------------------------------------ | 10511| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10512 10513**示例:** 10514 10515```ts 10516// xxx.ets 10517import { webview } from '@kit.ArkWeb'; 10518import { BusinessError } from '@kit.BasicServicesKit'; 10519 10520@Entry 10521@Component 10522struct WebComponent { 10523 controller: webview.WebviewController = new webview.WebviewController(); 10524 10525 build() { 10526 Column() { 10527 Button('clearAllCookies') 10528 .onClick(() => { 10529 try { 10530 webview.WebCookieManager.clearAllCookies() 10531 .then(() => { 10532 console.log("clearAllCookies success!"); 10533 }) 10534 .catch((error: BusinessError) => { 10535 console.error("error: " + error); 10536 }); 10537 } catch (error) { 10538 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10539 } 10540 }) 10541 Web({ src: 'www.example.com', controller: this.controller }) 10542 } 10543 } 10544} 10545``` 10546 10547### deleteSessionCookie<sup>(deprecated)</sup> 10548 10549static deleteSessionCookie(): void 10550 10551清除所有会话cookie。 10552 10553> **说明:** 10554> 10555> 从API version 9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代 10556 10557**系统能力:** SystemCapability.Web.Webview.Core 10558 10559**示例:** 10560 10561```ts 10562// xxx.ets 10563import { webview } from '@kit.ArkWeb'; 10564 10565@Entry 10566@Component 10567struct WebComponent { 10568 controller: webview.WebviewController = new webview.WebviewController(); 10569 10570 build() { 10571 Column() { 10572 Button('deleteSessionCookie') 10573 .onClick(() => { 10574 webview.WebCookieManager.deleteSessionCookie(); 10575 }) 10576 Web({ src: 'www.example.com', controller: this.controller }) 10577 } 10578 } 10579} 10580``` 10581 10582### clearSessionCookieSync<sup>11+</sup> 10583 10584static clearSessionCookieSync(): void 10585 10586清除所有会话cookie。 10587 10588**系统能力:** SystemCapability.Web.Webview.Core 10589 10590**示例:** 10591 10592```ts 10593// xxx.ets 10594import { webview } from '@kit.ArkWeb'; 10595 10596@Entry 10597@Component 10598struct WebComponent { 10599 controller: webview.WebviewController = new webview.WebviewController(); 10600 10601 build() { 10602 Column() { 10603 Button('clearSessionCookieSync') 10604 .onClick(() => { 10605 webview.WebCookieManager.clearSessionCookieSync(); 10606 }) 10607 Web({ src: 'www.example.com', controller: this.controller }) 10608 } 10609 } 10610} 10611``` 10612 10613### clearSessionCookie<sup>11+</sup> 10614 10615static clearSessionCookie(callback: AsyncCallback\<void>): void 10616 10617异步callback方式清除所有会话cookie。 10618 10619**系统能力:** SystemCapability.Web.Webview.Core 10620 10621**参数:** 10622 10623| 参数名 | 类型 | 必填 | 说明 | 10624| -------- | ---------------------- | ---- | :------------------------------------------------- | 10625| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有会话cookie是否成功。 | 10626 10627**错误码:** 10628 10629以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10630 10631| 错误码ID | 错误信息 | 10632| -------- | ------------------------------------------------------ | 10633| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10634 10635**示例:** 10636 10637```ts 10638// xxx.ets 10639import { webview } from '@kit.ArkWeb'; 10640import { BusinessError } from '@kit.BasicServicesKit'; 10641 10642@Entry 10643@Component 10644struct WebComponent { 10645 controller: webview.WebviewController = new webview.WebviewController(); 10646 10647 build() { 10648 Column() { 10649 Button('clearSessionCookie') 10650 .onClick(() => { 10651 try { 10652 webview.WebCookieManager.clearSessionCookie((error) => { 10653 if (error) { 10654 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10655 } 10656 }) 10657 } catch (error) { 10658 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10659 } 10660 }) 10661 Web({ src: 'www.example.com', controller: this.controller }) 10662 } 10663 } 10664} 10665``` 10666 10667### clearSessionCookie<sup>11+</sup> 10668 10669static clearSessionCookie(): Promise\<void> 10670 10671异步promise方式清除所有会话cookie。 10672 10673**系统能力:** SystemCapability.Web.Webview.Core 10674 10675**返回值:** 10676 10677| 类型 | 说明 | 10678| ---------------- | ----------------------------------------- | 10679| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 | 10680 10681**错误码:** 10682 10683以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10684 10685| 错误码ID | 错误信息 | 10686| -------- | ------------------------------------------------------ | 10687| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10688 10689**示例:** 10690 10691```ts 10692// xxx.ets 10693import { webview } from '@kit.ArkWeb'; 10694import { BusinessError } from '@kit.BasicServicesKit'; 10695 10696@Entry 10697@Component 10698struct WebComponent { 10699 controller: webview.WebviewController = new webview.WebviewController(); 10700 10701 build() { 10702 Column() { 10703 Button('clearSessionCookie') 10704 .onClick(() => { 10705 try { 10706 webview.WebCookieManager.clearSessionCookie() 10707 .then(() => { 10708 console.log("clearSessionCookie success!"); 10709 }) 10710 .catch((error: BusinessError) => { 10711 console.error("error: " + error); 10712 }); 10713 } catch (error) { 10714 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10715 } 10716 }) 10717 Web({ src: 'www.example.com', controller: this.controller }) 10718 } 10719 } 10720} 10721``` 10722 10723## WebStorage 10724 10725通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 10726 10727> **说明:** 10728> 10729> 目前调用WebStorage下的方法,都需要先加载Web组件。 10730 10731### deleteOrigin 10732 10733static deleteOrigin(origin: string): void 10734 10735清除指定源所使用的存储。 10736 10737**系统能力:** SystemCapability.Web.Webview.Core 10738 10739**参数:** 10740 10741| 参数名 | 类型 | 必填 | 说明 | 10742| ------ | ------ | ---- | ------------------------ | 10743| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 10744 10745**错误码:** 10746 10747以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10748 10749| 错误码ID | 错误信息 | 10750| -------- | ------------------------------------------------------ | 10751| 17100011 | Invalid origin. | 10752| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10753 10754**示例:** 10755 10756```ts 10757// xxx.ets 10758import { webview } from '@kit.ArkWeb'; 10759import { BusinessError } from '@kit.BasicServicesKit'; 10760 10761@Entry 10762@Component 10763struct WebComponent { 10764 controller: webview.WebviewController = new webview.WebviewController(); 10765 origin: string = "resource://rawfile/"; 10766 10767 build() { 10768 Column() { 10769 Button('deleteOrigin') 10770 .onClick(() => { 10771 try { 10772 webview.WebStorage.deleteOrigin(this.origin); 10773 } catch (error) { 10774 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10775 } 10776 10777 }) 10778 Web({ src: $rawfile('index.html'), controller: this.controller }) 10779 .databaseAccess(true) 10780 } 10781 } 10782} 10783``` 10784 10785加载的html文件。 10786 ```html 10787 <!-- index.html --> 10788 <!DOCTYPE html> 10789 <html> 10790 <head> 10791 <meta charset="UTF-8"> 10792 <title>test</title> 10793 <script type="text/javascript"> 10794 10795 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 10796 var msg; 10797 10798 db.transaction(function(tx){ 10799 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 10800 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 10801 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 10802 10803 document.querySelector('#status').innerHTML = msg; 10804 }); 10805 10806 db.transaction(function(tx){ 10807 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 10808 var len = results.rows.length,i; 10809 msg = "<p>查询记录条数:" + len + "</p>"; 10810 10811 document.querySelector('#status').innerHTML += msg; 10812 10813 for(i = 0; i < len; i++){ 10814 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 10815 10816 document.querySelector('#status').innerHTML += msg; 10817 } 10818 },null); 10819 }); 10820 10821 </script> 10822 </head> 10823 <body> 10824 <div id="status" name="status">状态信息</div> 10825 </body> 10826 </html> 10827 ``` 10828 10829### getOrigins 10830 10831static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void 10832 10833以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 10834 10835**系统能力:** SystemCapability.Web.Webview.Core 10836 10837**参数:** 10838 10839| 参数名 | 类型 | 必填 | 说明 | 10840| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 10841| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10842 10843**错误码:** 10844 10845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10846 10847| 错误码ID | 错误信息 | 10848| -------- | ------------------------------------------------------ | 10849| 17100012 | Invalid web storage origin. | 10850| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10851 10852**示例:** 10853 10854```ts 10855// xxx.ets 10856import { webview } from '@kit.ArkWeb'; 10857import { BusinessError } from '@kit.BasicServicesKit'; 10858 10859@Entry 10860@Component 10861struct WebComponent { 10862 controller: webview.WebviewController = new webview.WebviewController(); 10863 10864 build() { 10865 Column() { 10866 Button('getOrigins') 10867 .onClick(() => { 10868 try { 10869 webview.WebStorage.getOrigins((error, origins) => { 10870 if (error) { 10871 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10872 return; 10873 } 10874 for (let i = 0; i < origins.length; i++) { 10875 console.log('origin: ' + origins[i].origin); 10876 console.log('usage: ' + origins[i].usage); 10877 console.log('quota: ' + origins[i].quota); 10878 } 10879 }) 10880 } catch (error) { 10881 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10882 } 10883 10884 }) 10885 Web({ src: $rawfile('index.html'), controller: this.controller }) 10886 .databaseAccess(true) 10887 } 10888 } 10889} 10890``` 10891 10892加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10893 10894### getOrigins 10895 10896static getOrigins(): Promise\<Array\<WebStorageOrigin>> 10897 10898以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 10899 10900**系统能力:** SystemCapability.Web.Webview.Core 10901 10902**返回值:** 10903 10904| 类型 | 说明 | 10905| -------------------------------- | ------------------------------------------------------------ | 10906| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10907 10908**错误码:** 10909 10910以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10911 10912| 错误码ID | 错误信息 | 10913| -------- | ------------------------------------------------------ | 10914| 17100012 | Invalid web storage origin. | 10915| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10916 10917**示例:** 10918 10919```ts 10920// xxx.ets 10921import { webview } from '@kit.ArkWeb'; 10922import { BusinessError } from '@kit.BasicServicesKit'; 10923 10924@Entry 10925@Component 10926struct WebComponent { 10927 controller: webview.WebviewController = new webview.WebviewController(); 10928 10929 build() { 10930 Column() { 10931 Button('getOrigins') 10932 .onClick(() => { 10933 try { 10934 webview.WebStorage.getOrigins() 10935 .then(origins => { 10936 for (let i = 0; i < origins.length; i++) { 10937 console.log('origin: ' + origins[i].origin); 10938 console.log('usage: ' + origins[i].usage); 10939 console.log('quota: ' + origins[i].quota); 10940 } 10941 }) 10942 .catch((e: BusinessError) => { 10943 console.log('error: ' + JSON.stringify(e)); 10944 }) 10945 } catch (error) { 10946 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10947 } 10948 10949 }) 10950 Web({ src: $rawfile('index.html'), controller: this.controller }) 10951 .databaseAccess(true) 10952 } 10953 } 10954} 10955``` 10956 10957加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10958 10959### getOriginQuota 10960 10961static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void 10962 10963使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 10964 10965**系统能力:** SystemCapability.Web.Webview.Core 10966 10967**参数:** 10968 10969| 参数名 | 类型 | 必填 | 说明 | 10970| -------- | --------------------- | ---- | ------------------ | 10971| origin | string | 是 | 指定源的字符串索引。 | 10972| callback | AsyncCallback\<number> | 是 | 指定源的存储配额。<br>number是long型整数,范围为(-2,147,483,648)~(2,147,483,647)。 | 10973 10974**错误码:** 10975 10976以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10977 10978| 错误码ID | 错误信息 | 10979| -------- | ------------------------------------------------------ | 10980| 17100011 | Invalid origin. | 10981| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10982 10983**示例:** 10984 10985```ts 10986// xxx.ets 10987import { webview } from '@kit.ArkWeb'; 10988import { BusinessError } from '@kit.BasicServicesKit'; 10989 10990@Entry 10991@Component 10992struct WebComponent { 10993 controller: webview.WebviewController = new webview.WebviewController(); 10994 origin: string = "resource://rawfile/"; 10995 10996 build() { 10997 Column() { 10998 Button('getOriginQuota') 10999 .onClick(() => { 11000 try { 11001 webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 11002 if (error) { 11003 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11004 return; 11005 } 11006 console.log('quota: ' + quota); 11007 }) 11008 } catch (error) { 11009 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11010 } 11011 11012 }) 11013 Web({ src: $rawfile('index.html'), controller: this.controller }) 11014 .databaseAccess(true) 11015 } 11016 } 11017} 11018``` 11019 11020加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 11021 11022### getOriginQuota 11023 11024static getOriginQuota(origin: string): Promise\<number> 11025 11026以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 11027 11028**系统能力:** SystemCapability.Web.Webview.Core 11029 11030**参数:** 11031 11032| 参数名 | 类型 | 必填 | 说明 | 11033| ------ | ------ | ---- | ------------------ | 11034| origin | string | 是 | 指定源的字符串索引 | 11035 11036**返回值:** 11037 11038| 类型 | 说明 | 11039| --------------- | --------------------------------------- | 11040| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 11041 11042**错误码:** 11043 11044以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11045 11046| 错误码ID | 错误信息 | 11047| -------- | ------------------------------------------------------ | 11048| 17100011 | Invalid origin. | 11049| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11050 11051**示例:** 11052 11053```ts 11054// xxx.ets 11055import { webview } from '@kit.ArkWeb'; 11056import { BusinessError } from '@kit.BasicServicesKit'; 11057 11058@Entry 11059@Component 11060struct WebComponent { 11061 controller: webview.WebviewController = new webview.WebviewController(); 11062 origin: string = "resource://rawfile/"; 11063 11064 build() { 11065 Column() { 11066 Button('getOriginQuota') 11067 .onClick(() => { 11068 try { 11069 webview.WebStorage.getOriginQuota(this.origin) 11070 .then(quota => { 11071 console.log('quota: ' + quota); 11072 }) 11073 .catch((e: BusinessError) => { 11074 console.log('error: ' + JSON.stringify(e)); 11075 }) 11076 } catch (error) { 11077 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11078 } 11079 11080 }) 11081 Web({ src: $rawfile('index.html'), controller: this.controller }) 11082 .databaseAccess(true) 11083 } 11084 } 11085} 11086``` 11087 11088加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 11089 11090### getOriginUsage 11091 11092static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void 11093 11094以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 11095 11096**系统能力:** SystemCapability.Web.Webview.Core 11097 11098**参数:** 11099 11100| 参数名 | 类型 | 必填 | 说明 | 11101| -------- | --------------------- | ---- | ------------------ | 11102| origin | string | 是 | 指定源的字符串索引 | 11103| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 11104 11105**错误码:** 11106 11107以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11108 11109| 错误码ID | 错误信息 | 11110| -------- | ------------------------------------------------------ | 11111| 17100011 | Invalid origin. | 11112| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11113 11114**示例:** 11115 11116```ts 11117// xxx.ets 11118import { webview } from '@kit.ArkWeb'; 11119import { BusinessError } from '@kit.BasicServicesKit'; 11120 11121@Entry 11122@Component 11123struct WebComponent { 11124 controller: webview.WebviewController = new webview.WebviewController(); 11125 origin: string = "resource://rawfile/"; 11126 11127 build() { 11128 Column() { 11129 Button('getOriginUsage') 11130 .onClick(() => { 11131 try { 11132 webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 11133 if (error) { 11134 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11135 return; 11136 } 11137 console.log('usage: ' + usage); 11138 }) 11139 } catch (error) { 11140 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11141 } 11142 11143 }) 11144 Web({ src: $rawfile('index.html'), controller: this.controller }) 11145 .databaseAccess(true) 11146 } 11147 } 11148} 11149``` 11150 11151加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 11152 11153### getOriginUsage 11154 11155static getOriginUsage(origin: string): Promise\<number> 11156 11157以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 11158 11159**系统能力:** SystemCapability.Web.Webview.Core 11160 11161**参数:** 11162 11163| 参数名 | 类型 | 必填 | 说明 | 11164| ------ | ------ | ---- | ------------------ | 11165| origin | string | 是 | 指定源的字符串索引 | 11166 11167**返回值:** 11168 11169| 类型 | 说明 | 11170| --------------- | ------------------------------------- | 11171| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 11172 11173**错误码:** 11174 11175以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11176 11177| 错误码ID | 错误信息 | 11178| -------- | ----------------------------------------------------- | 11179| 17100011 | Invalid origin. | 11180| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11181 11182**示例:** 11183 11184```ts 11185// xxx.ets 11186import { webview } from '@kit.ArkWeb'; 11187import { BusinessError } from '@kit.BasicServicesKit'; 11188 11189@Entry 11190@Component 11191struct WebComponent { 11192 controller: webview.WebviewController = new webview.WebviewController(); 11193 origin: string = "resource://rawfile/"; 11194 11195 build() { 11196 Column() { 11197 Button('getOriginUsage') 11198 .onClick(() => { 11199 try { 11200 webview.WebStorage.getOriginUsage(this.origin) 11201 .then(usage => { 11202 console.log('usage: ' + usage); 11203 }).catch((e: BusinessError) => { 11204 console.error('error: ' + JSON.stringify(e)); 11205 }) 11206 } catch (error) { 11207 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11208 } 11209 }) 11210 Web({ src: $rawfile('index.html'), controller: this.controller }) 11211 .databaseAccess(true) 11212 } 11213 } 11214} 11215``` 11216 11217加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 11218 11219### deleteAllData 11220 11221static deleteAllData(incognito?: boolean): void 11222 11223清除Web SQL数据库当前使用的所有存储。 11224 11225**系统能力:** SystemCapability.Web.Webview.Core 11226 11227**参数:** 11228 11229| 参数名 | 类型 | 必填 | 说明 | 11230| ------ | ------ | ---- | ------------------ | 11231| incognito<sup>11+</sup> | boolean | 否 | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 | 11232 11233**示例:** 11234 11235```ts 11236// xxx.ets 11237import { webview } from '@kit.ArkWeb'; 11238import { BusinessError } from '@kit.BasicServicesKit'; 11239 11240@Entry 11241@Component 11242struct WebComponent { 11243 controller: webview.WebviewController = new webview.WebviewController(); 11244 11245 build() { 11246 Column() { 11247 Button('deleteAllData') 11248 .onClick(() => { 11249 try { 11250 webview.WebStorage.deleteAllData(); 11251 } catch (error) { 11252 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11253 } 11254 }) 11255 Web({ src: $rawfile('index.html'), controller: this.controller }) 11256 .databaseAccess(true) 11257 } 11258 } 11259} 11260``` 11261 11262加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。 11263 11264## WebDataBase 11265 11266Web组件数据库管理对象。 11267 11268> **说明:** 11269> 11270> 目前调用WebDataBase下的方法,都需要先加载Web组件。 11271 11272### getHttpAuthCredentials 11273 11274static getHttpAuthCredentials(host: string, realm: string): Array\<string> 11275 11276检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 11277 11278**系统能力:** SystemCapability.Web.Webview.Core 11279 11280**参数:** 11281 11282| 参数名 | 类型 | 必填 | 说明 | 11283| ------ | ------ | ---- | ---------------------------- | 11284| host | string | 是 | HTTP身份验证凭据应用的主机。 | 11285| realm | string | 是 | HTTP身份验证凭据应用的域。 | 11286 11287**返回值:** 11288 11289| 类型 | 说明 | 11290| ----- | -------------------------------------------- | 11291| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 11292 11293**错误码:** 11294 11295以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11296 11297| 错误码ID | 错误信息 | 11298| -------- | ------------------------------------------------------ | 11299| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11300 11301**示例:** 11302 11303```ts 11304// xxx.ets 11305import { webview } from '@kit.ArkWeb'; 11306import { BusinessError } from '@kit.BasicServicesKit'; 11307 11308@Entry 11309@Component 11310struct WebComponent { 11311 controller: webview.WebviewController = new webview.WebviewController(); 11312 host: string = "www.spincast.org"; 11313 realm: string = "protected example"; 11314 username_password: string[] = []; 11315 11316 build() { 11317 Column() { 11318 Button('getHttpAuthCredentials') 11319 .onClick(() => { 11320 try { 11321 this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 11322 console.log('num: ' + this.username_password.length); 11323 } catch (error) { 11324 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11325 } 11326 }) 11327 Web({ src: 'www.example.com', controller: this.controller }) 11328 } 11329 } 11330} 11331``` 11332 11333### saveHttpAuthCredentials 11334 11335static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 11336 11337保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 11338 11339**系统能力:** SystemCapability.Web.Webview.Core 11340 11341**参数:** 11342 11343| 参数名 | 类型 | 必填 | 说明 | 11344| -------- | ------ | ---- | ---------------------------- | 11345| host | string | 是 | HTTP身份验证凭据应用的主机。 | 11346| realm | string | 是 | HTTP身份验证凭据应用的域。 | 11347| username | string | 是 | 用户名。 | 11348| password | string | 是 | 密码。 | 11349 11350**错误码:** 11351 11352以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11353 11354| 错误码ID | 错误信息 | 11355| -------- | ------------------------------------------------------ | 11356| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11357 11358**示例:** 11359 11360```ts 11361// xxx.ets 11362import { webview } from '@kit.ArkWeb'; 11363import { BusinessError } from '@kit.BasicServicesKit'; 11364 11365@Entry 11366@Component 11367struct WebComponent { 11368 controller: webview.WebviewController = new webview.WebviewController(); 11369 host: string = "www.spincast.org"; 11370 realm: string = "protected example"; 11371 11372 build() { 11373 Column() { 11374 Button('saveHttpAuthCredentials') 11375 .onClick(() => { 11376 try { 11377 webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 11378 } catch (error) { 11379 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11380 } 11381 }) 11382 Web({ src: 'www.example.com', controller: this.controller }) 11383 } 11384 } 11385} 11386``` 11387 11388### existHttpAuthCredentials 11389 11390static existHttpAuthCredentials(): boolean 11391 11392判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 11393 11394**系统能力:** SystemCapability.Web.Webview.Core 11395 11396**返回值:** 11397 11398| 类型 | 说明 | 11399| ------- | ------------------------------------------------------------ | 11400| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 11401 11402**示例:** 11403 11404```ts 11405// xxx.ets 11406import { webview } from '@kit.ArkWeb'; 11407import { BusinessError } from '@kit.BasicServicesKit'; 11408 11409@Entry 11410@Component 11411struct WebComponent { 11412 controller: webview.WebviewController = new webview.WebviewController(); 11413 11414 build() { 11415 Column() { 11416 Button('existHttpAuthCredentials') 11417 .onClick(() => { 11418 try { 11419 let result = webview.WebDataBase.existHttpAuthCredentials(); 11420 } catch (error) { 11421 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11422 } 11423 }) 11424 Web({ src: 'www.example.com', controller: this.controller }) 11425 } 11426 } 11427} 11428``` 11429 11430### deleteHttpAuthCredentials 11431 11432static deleteHttpAuthCredentials(): void 11433 11434清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 11435 11436**系统能力:** SystemCapability.Web.Webview.Core 11437 11438**示例:** 11439 11440```ts 11441// xxx.ets 11442import { webview } from '@kit.ArkWeb'; 11443import { BusinessError } from '@kit.BasicServicesKit'; 11444 11445@Entry 11446@Component 11447struct WebComponent { 11448 controller: webview.WebviewController = new webview.WebviewController(); 11449 11450 build() { 11451 Column() { 11452 Button('deleteHttpAuthCredentials') 11453 .onClick(() => { 11454 try { 11455 webview.WebDataBase.deleteHttpAuthCredentials(); 11456 } catch (error) { 11457 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11458 } 11459 }) 11460 Web({ src: 'www.example.com', controller: this.controller }) 11461 } 11462 } 11463} 11464``` 11465 11466## GeolocationPermissions 11467 11468Web组件地理位置权限管理对象。 11469 11470> **说明:** 11471> 11472> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。 11473 11474### 需要权限 11475 11476访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。 11477 11478### allowGeolocation 11479 11480static allowGeolocation(origin: string, incognito?: boolean): void 11481 11482允许指定来源使用地理位置接口。 11483 11484**系统能力:** SystemCapability.Web.Webview.Core 11485 11486**参数:** 11487 11488| 参数名 | 类型 | 必填 | 说明 | 11489| ------ | ------ | ---- | ------------------ | 11490| origin | string | 是 |指定源的字符串索引 | 11491| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 | 11492 11493**错误码:** 11494 11495以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11496 11497| 错误码ID | 错误信息 | 11498| -------- | ------------------------------------------------------ | 11499| 17100011 | Invalid origin. | 11500| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11501 11502**示例:** 11503 11504```ts 11505// xxx.ets 11506import { webview } from '@kit.ArkWeb'; 11507import { BusinessError } from '@kit.BasicServicesKit'; 11508 11509@Entry 11510@Component 11511struct WebComponent { 11512 controller: webview.WebviewController = new webview.WebviewController(); 11513 origin: string = "file:///"; 11514 11515 build() { 11516 Column() { 11517 Button('allowGeolocation') 11518 .onClick(() => { 11519 try { 11520 webview.GeolocationPermissions.allowGeolocation(this.origin); 11521 } catch (error) { 11522 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11523 } 11524 }) 11525 Web({ src: 'www.example.com', controller: this.controller }) 11526 } 11527 } 11528} 11529``` 11530 11531### deleteGeolocation 11532 11533static deleteGeolocation(origin: string, incognito?: boolean): void 11534 11535清除指定来源的地理位置权限状态。 11536 11537**系统能力:** SystemCapability.Web.Webview.Core 11538 11539**参数:** 11540 11541| 参数名 | 类型 | 必填 | 说明 | 11542| ------ | ------ | ---- | ------------------ | 11543| origin | string | 是 | 指定源的字符串索引 | 11544| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 | 11545 11546**错误码:** 11547 11548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11549 11550| 错误码ID | 错误信息 | 11551| -------- | ------------------------------------------------------ | 11552| 17100011 | Invalid origin. | 11553| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11554 11555**示例:** 11556 11557```ts 11558// xxx.ets 11559import { webview } from '@kit.ArkWeb'; 11560import { BusinessError } from '@kit.BasicServicesKit'; 11561 11562@Entry 11563@Component 11564struct WebComponent { 11565 controller: webview.WebviewController = new webview.WebviewController(); 11566 origin: string = "file:///"; 11567 11568 build() { 11569 Column() { 11570 Button('deleteGeolocation') 11571 .onClick(() => { 11572 try { 11573 webview.GeolocationPermissions.deleteGeolocation(this.origin); 11574 } catch (error) { 11575 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11576 } 11577 }) 11578 Web({ src: 'www.example.com', controller: this.controller }) 11579 } 11580 } 11581} 11582``` 11583 11584### getAccessibleGeolocation 11585 11586static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void 11587 11588以回调方式异步获取指定源的地理位置权限状态。 11589 11590**系统能力:** SystemCapability.Web.Webview.Core 11591 11592**参数:** 11593 11594| 参数名 | 类型 | 必填 | 说明 | 11595| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 11596| origin | string | 是 | 指定源的字符串索引 | 11597| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11598| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 | 11599 11600**错误码:** 11601 11602以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11603 11604| 错误码ID | 错误信息 | 11605| -------- | ------------------------------------------------------ | 11606| 17100011 | Invalid origin. | 11607| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11608 11609**示例:** 11610 11611```ts 11612// xxx.ets 11613import { webview } from '@kit.ArkWeb'; 11614import { BusinessError } from '@kit.BasicServicesKit'; 11615 11616@Entry 11617@Component 11618struct WebComponent { 11619 controller: webview.WebviewController = new webview.WebviewController(); 11620 origin: string = "file:///"; 11621 11622 build() { 11623 Column() { 11624 Button('getAccessibleGeolocation') 11625 .onClick(() => { 11626 try { 11627 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 11628 if (error) { 11629 console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11630 return; 11631 } 11632 console.log('getAccessibleGeolocationAsync result: ' + result); 11633 }); 11634 } catch (error) { 11635 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11636 } 11637 }) 11638 Web({ src: 'www.example.com', controller: this.controller }) 11639 } 11640 } 11641} 11642``` 11643 11644### getAccessibleGeolocation 11645 11646static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean> 11647 11648以Promise方式异步获取指定源的地理位置权限状态。 11649 11650**系统能力:** SystemCapability.Web.Webview.Core 11651 11652**参数:** 11653 11654| 参数名 | 类型 | 必填 | 说明 | 11655| ------ | -------- | ---- | -------------------- | 11656| origin | string | 是 | 指定源的字符串索引。 | 11657| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 | 11658 11659**返回值:** 11660 11661| 类型 | 说明 | 11662| ---------------- | ------------------------------------------------------------ | 11663| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11664 11665**错误码:** 11666 11667以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11668 11669| 错误码ID | 错误信息 | 11670| -------- | ------------------------------------------------------ | 11671| 17100011 | Invalid origin. | 11672| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11673 11674**示例:** 11675 11676```ts 11677// xxx.ets 11678import { webview } from '@kit.ArkWeb'; 11679import { BusinessError } from '@kit.BasicServicesKit'; 11680 11681@Entry 11682@Component 11683struct WebComponent { 11684 controller: webview.WebviewController = new webview.WebviewController(); 11685 origin: string = "file:///"; 11686 11687 build() { 11688 Column() { 11689 Button('getAccessibleGeolocation') 11690 .onClick(() => { 11691 try { 11692 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 11693 .then(result => { 11694 console.log('getAccessibleGeolocationPromise result: ' + result); 11695 }).catch((error: BusinessError) => { 11696 console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11697 }); 11698 } catch (error) { 11699 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11700 } 11701 }) 11702 Web({ src: 'www.example.com', controller: this.controller }) 11703 } 11704 } 11705} 11706``` 11707 11708### getStoredGeolocation 11709 11710static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void 11711 11712以回调方式异步获取已存储地理位置权限状态的所有源信息。 11713 11714**系统能力:** SystemCapability.Web.Webview.Core 11715 11716**参数:** 11717 11718| 参数名 | 类型 | 必填 | 说明 | 11719| -------- | ---------------------------- | ---- | ---------------------------------------- | 11720| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 11721| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 | 11722 11723**错误码:** 11724 11725以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11726 11727| 错误码ID | 错误信息 | 11728| -------- | ------------------------------------------------------ | 11729| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11730 11731**示例:** 11732 11733```ts 11734// xxx.ets 11735import { webview } from '@kit.ArkWeb'; 11736import { BusinessError } from '@kit.BasicServicesKit'; 11737 11738@Entry 11739@Component 11740struct WebComponent { 11741 controller: webview.WebviewController = new webview.WebviewController(); 11742 11743 build() { 11744 Column() { 11745 Button('getStoredGeolocation') 11746 .onClick(() => { 11747 try { 11748 webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 11749 if (error) { 11750 console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11751 return; 11752 } 11753 let origins_str: string = origins.join(); 11754 console.log('getStoredGeolocationAsync origins: ' + origins_str); 11755 }); 11756 } catch (error) { 11757 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11758 } 11759 }) 11760 Web({ src: 'www.example.com', controller: this.controller }) 11761 } 11762 } 11763} 11764``` 11765 11766### getStoredGeolocation 11767 11768static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>> 11769 11770以Promise方式异步获取已存储地理位置权限状态的所有源信息。 11771 11772**系统能力:** SystemCapability.Web.Webview.Core 11773 11774**参数:** 11775 11776| 参数名 | 类型 | 必填 | 说明 | 11777| -------- | ---------------------------- | ---- | ---------------------------------------- | 11778| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 | 11779 11780**返回值:** 11781 11782| 类型 | 说明 | 11783| ---------------------- | --------------------------------------------------------- | 11784| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 11785 11786**错误码:** 11787 11788以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11789 11790| 错误码ID | 错误信息 | 11791| -------- | ------------------------------------------------------ | 11792| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11793 11794**示例:** 11795 11796```ts 11797// xxx.ets 11798import { webview } from '@kit.ArkWeb'; 11799import { BusinessError } from '@kit.BasicServicesKit'; 11800 11801@Entry 11802@Component 11803struct WebComponent { 11804 controller: webview.WebviewController = new webview.WebviewController(); 11805 11806 build() { 11807 Column() { 11808 Button('getStoredGeolocation') 11809 .onClick(() => { 11810 try { 11811 webview.GeolocationPermissions.getStoredGeolocation() 11812 .then(origins => { 11813 let origins_str: string = origins.join(); 11814 console.log('getStoredGeolocationPromise origins: ' + origins_str); 11815 }).catch((error: BusinessError) => { 11816 console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11817 }); 11818 } catch (error) { 11819 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11820 } 11821 }) 11822 Web({ src: 'www.example.com', controller: this.controller }) 11823 } 11824 } 11825} 11826``` 11827 11828### deleteAllGeolocation 11829 11830static deleteAllGeolocation(incognito?: boolean): void 11831 11832清除所有来源的地理位置权限状态。 11833 11834**系统能力:** SystemCapability.Web.Webview.Core 11835 11836**参数:** 11837 11838| 参数名 | 类型 | 必填 | 说明 | 11839| -------- | ---------------------------- | ---- | ---------------------------------------- | 11840| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 | 11841 11842**示例:** 11843 11844```ts 11845// xxx.ets 11846import { webview } from '@kit.ArkWeb'; 11847import { BusinessError } from '@kit.BasicServicesKit'; 11848 11849@Entry 11850@Component 11851struct WebComponent { 11852 controller: webview.WebviewController = new webview.WebviewController(); 11853 11854 build() { 11855 Column() { 11856 Button('deleteAllGeolocation') 11857 .onClick(() => { 11858 try { 11859 webview.GeolocationPermissions.deleteAllGeolocation(); 11860 } catch (error) { 11861 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11862 } 11863 }) 11864 Web({ src: 'www.example.com', controller: this.controller }) 11865 } 11866 } 11867} 11868``` 11869## WebHeader 11870 11871Web组件返回的请求/响应头对象。 11872 11873**系统能力:** SystemCapability.Web.Webview.Core 11874 11875| 名称 | 类型 | 可读 | 可写 |说明 | 11876| ----------- | ------ | -----|------|------------------- | 11877| headerKey | string | 是 | 是 | 请求/响应头的key。 | 11878| headerValue | string | 是 | 是 | 请求/响应头的value。 | 11879 11880## RequestInfo<sup>12+</sup> 11881 11882Web组件发送的资源请求信息。 11883 11884**系统能力:**: SystemCapability.Web.Webview.Core 11885 11886| 名称 | 类型 | 可读 | 可写 |说明 | 11887| ---------| ------ | -----|------|-------- | 11888| url | string | 是 | 是 | 请求的链接。 | 11889| method | string | 是 | 是 | 请求的方法。 | 11890| formData | string | 是 | 是 | 请求的表单数据。 | 11891 11892## WebHitTestType 11893 11894[getLastHitTest](#getlasthittest18)接口用于指示游标节点。 11895 11896**系统能力:** SystemCapability.Web.Webview.Core 11897 11898| 名称 | 值 | 说明 | 11899| ------------- | -- |----------------------------------------- | 11900| EditText | 0 |可编辑的区域。 | 11901| Email | 1 |电子邮件地址。 | 11902| HttpAnchor | 2 |超链接,其中src为http。 | 11903| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 | 11904| Img | 4 |HTML::img标签。 | 11905| Map | 5 |地理地址。 | 11906| Phone | 6 |电话号码。 | 11907| Unknown | 7 |未知内容。 | 11908 11909## SecurityLevel<sup>11+</sup> 11910 11911当前网页的安全级别。 11912 11913**系统能力:** SystemCapability.Web.Webview.Core 11914 11915| 名称 | 值 | 说明 | 11916| ------------- | -- |----------------------------------------- | 11917| NONE | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。| 11918| SECURE | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。| 11919| WARNING | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。| 11920| DANGEROUS | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 | 11921 11922## HitTestValue 11923 11924提供点击区域的元素信息。示例代码参考[getLastHitTest](#getlasthittest18)。 11925 11926**系统能力:** SystemCapability.Web.Webview.Core 11927 11928| 名称 | 类型 | 可读 | 可写 | 说明| 11929| ---- | ---- | ---- | ---- |---- | 11930| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。| 11931| extra | string | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 11932 11933## WebMessage 11934 11935type WebMessage = ArrayBuffer | string 11936 11937用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 11938 11939**系统能力:** SystemCapability.Web.Webview.Core 11940 11941| 类型 | 说明 | 11942| -------- | -------------------------------------- | 11943| string | 字符串类型数据。 | 11944| ArrayBuffer | 二进制类型数据。 | 11945 11946## JsMessageType<sup>10+</sup> 11947 11948[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 11949 11950**系统能力:** SystemCapability.Web.Webview.Core 11951 11952| 名称 | 值 | 说明 | 11953| ------------ | -- |--------------------------------- | 11954| NOT_SUPPORT | 0 |不支持的数据类型。| 11955| STRING | 1 |字符串类型。| 11956| NUMBER | 2 |数值类型。| 11957| BOOLEAN | 3 |布尔类型。| 11958| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11959| ARRAY | 5 |数组类型| 11960 11961## WebMessageType<sup>10+</sup> 11962 11963[webMessagePort](#webmessageport)接口所支持的数据类型。 11964 11965**系统能力:** SystemCapability.Web.Webview.Core 11966 11967| 名称 | 值 | 说明 | 11968| ------------ | -- |------------------------------- | 11969| NOT_SUPPORT | 0 |不支持的数据类型。| 11970| STRING | 1 |字符串类型。| 11971| NUMBER | 2 |数值类型。| 11972| BOOLEAN | 3 |布尔类型。| 11973| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11974| ARRAY | 5 |数组类型。| 11975| ERROR | 6 |错误类型。| 11976 11977## MediaPlaybackState<sup>12+</sup> 11978 11979当前网页的播控状态。 11980 11981**系统能力:** SystemCapability.Web.Webview.Core 11982 11983| 名称 | 值 | 说明 | 11984| ------- | ---- | ------------------ | 11985| NONE | 0 | 页面无音视频启播。 | 11986| PLAYING | 1 | 页面音视频播放中。 | 11987| PAUSED | 2 | 页面音视频暂停。 | 11988| STOPPED | 3 | 页面音视频停止。 | 11989 11990## RenderProcessMode<sup>12+</sup> 11991 11992ArkWeb渲染子进程模式类型。 11993 11994**系统能力:** SystemCapability.Web.Webview.Core 11995 11996| 名称 | 值 | 说明 | 11997| ------------- | -- |----------------------------------------- | 11998| SINGLE | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。| 11999| MULTIPLE | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。| 12000 12001 12002## JsMessageExt<sup>10+</sup> 12003 12004[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。 12005 12006### getType<sup>10+</sup> 12007 12008getType(): JsMessageType 12009 12010获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12011 12012**系统能力:** SystemCapability.Web.Webview.Core 12013 12014**返回值:** 12015 12016| 类型 | 说明 | 12017| --------------| --------------------------------------------------------- | 12018| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 | 12019 12020### getString<sup>10+</sup> 12021 12022getString(): string 12023 12024获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12025 12026**系统能力:** SystemCapability.Web.Webview.Core 12027 12028**返回值:** 12029 12030| 类型 | 说明 | 12031| --------------| ------------- | 12032| string | 返回字符串类型的数据。 | 12033 12034**错误码:** 12035 12036以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12037 12038| 错误码ID | 错误信息 | 12039| -------- | ------------------------------------- | 12040| 17100014 | The type and value of the message do not match. | 12041 12042### getNumber<sup>10+</sup> 12043 12044getNumber(): number 12045 12046获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12047 12048**系统能力:** SystemCapability.Web.Webview.Core 12049 12050**返回值:** 12051 12052| 类型 | 说明 | 12053| --------------| ------------- | 12054| number | 返回数值类型的数据。 | 12055 12056**错误码:** 12057 12058以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12059 12060| 错误码ID | 错误信息 | 12061| -------- | ------------------------------------- | 12062| 17100014 | The type and value of the message do not match. | 12063 12064### getBoolean<sup>10+</sup> 12065 12066getBoolean(): boolean 12067 12068获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12069 12070**系统能力:** SystemCapability.Web.Webview.Core 12071 12072**返回值:** 12073 12074| 类型 | 说明 | 12075| --------------| ------------- | 12076| boolean | 返回布尔类型的数据。 | 12077 12078**错误码:** 12079 12080以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12081 12082| 错误码ID | 错误信息 | 12083| -------- | ------------------------------------- | 12084| 17100014 | The type and value of the message do not match. | 12085 12086### getArrayBuffer<sup>10+</sup> 12087 12088getArrayBuffer(): ArrayBuffer 12089 12090获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12091 12092**系统能力:** SystemCapability.Web.Webview.Core 12093 12094**返回值:** 12095 12096| 类型 | 说明 | 12097| --------------| ------------- | 12098| ArrayBuffer | 返回原始二进制数据。 | 12099 12100**错误码:** 12101 12102以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12103 12104| 错误码ID | 错误信息 | 12105| -------- | ------------------------------------- | 12106| 17100014 | The type and value of the message do not match. | 12107 12108### getArray<sup>10+</sup> 12109 12110getArray(): Array\<string | number | boolean\> 12111 12112获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 12113 12114**系统能力:** SystemCapability.Web.Webview.Core 12115 12116**返回值:** 12117 12118| 类型 | 说明 | 12119| --------------| ------------- | 12120| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 12121 12122**错误码:** 12123 12124以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12125 12126| 错误码ID | 错误信息 | 12127| -------- | ------------------------------------- | 12128| 17100014 | The type and value of the message do not match. | 12129 12130## WebMessageExt<sup>10+</sup> 12131 12132[webMessagePort](#webmessageport)接口接收、发送的数据对象。 12133 12134### getType<sup>10+</sup> 12135 12136getType(): WebMessageType 12137 12138获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12139 12140**系统能力:** SystemCapability.Web.Webview.Core 12141 12142**返回值:** 12143 12144| 类型 | 说明 | 12145| --------------| --------------------------------------------------------- | 12146| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 12147 12148### getString<sup>10+</sup> 12149 12150getString(): string 12151 12152获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12153 12154**系统能力:** SystemCapability.Web.Webview.Core 12155 12156**返回值:** 12157 12158| 类型 | 说明 | 12159| --------------| ------------- | 12160| string | 返回字符串类型的数据。 | 12161 12162**错误码:** 12163 12164以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12165 12166| 错误码ID | 错误信息 | 12167| -------- | ------------------------------------- | 12168| 17100014 | The type and value of the message do not match. | 12169 12170### getNumber<sup>10+</sup> 12171 12172getNumber(): number 12173 12174获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12175 12176**系统能力:** SystemCapability.Web.Webview.Core 12177 12178**返回值:** 12179 12180| 类型 | 说明 | 12181| --------------| ------------- | 12182| number | 返回数值类型的数据。 | 12183 12184**错误码:** 12185 12186以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12187 12188| 错误码ID | 错误信息 | 12189| -------- | ------------------------------------- | 12190| 17100014 | The type and value of the message do not match. | 12191 12192### getBoolean<sup>10+</sup> 12193 12194getBoolean(): boolean 12195 12196获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12197 12198**系统能力:** SystemCapability.Web.Webview.Core 12199 12200**返回值:** 12201 12202| 类型 | 说明 | 12203| --------------| ------------- | 12204| boolean | 返回布尔类型的数据。 | 12205 12206**错误码:** 12207 12208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12209 12210| 错误码ID | 错误信息 | 12211| -------- | ------------------------------------- | 12212| 17100014 | The type and value of the message do not match. | 12213 12214### getArrayBuffer<sup>10+</sup> 12215 12216getArrayBuffer(): ArrayBuffer 12217 12218获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12219 12220**系统能力:** SystemCapability.Web.Webview.Core 12221 12222**返回值:** 12223 12224| 类型 | 说明 | 12225| --------------| ------------- | 12226| ArrayBuffer | 返回原始二进制数据。 | 12227 12228**错误码:** 12229 12230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12231 12232| 错误码ID | 错误信息 | 12233| -------- | ------------------------------------- | 12234| 17100014 | The type and value of the message do not match. | 12235 12236### getArray<sup>10+</sup> 12237 12238getArray(): Array\<string | number | boolean\> 12239 12240获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12241 12242**系统能力:** SystemCapability.Web.Webview.Core 12243 12244**返回值:** 12245 12246| 类型 | 说明 | 12247| --------------| ------------- | 12248| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 12249 12250**错误码:** 12251 12252以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12253 12254| 错误码ID | 错误信息 | 12255| -------- | ------------------------------------- | 12256| 17100014 | The type and value of the message do not match. | 12257 12258### getError<sup>10+</sup> 12259 12260getError(): Error 12261 12262获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12263 12264**系统能力:** SystemCapability.Web.Webview.Core 12265 12266**返回值:** 12267 12268| 类型 | 说明 | 12269| --------------| ------------- | 12270| Error | 返回错误对象类型的数据。 | 12271 12272**错误码:** 12273 12274以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12275 12276| 错误码ID | 错误信息 | 12277| -------- | ------------------------------------- | 12278| 17100014 | The type and value of the message do not match. | 12279 12280### setType<sup>10+</sup> 12281 12282setType(type: WebMessageType): void 12283 12284设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12285 12286**系统能力:** SystemCapability.Web.Webview.Core 12287 12288**参数:** 12289 12290| 参数名 | 类型 | 必填 | 说明 | 12291| ------ | ------ | ---- | ---------------------- | 12292| type | [WebMessageType](#webmessagetype10) | 是 | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 12293 12294**错误码:** 12295 12296| 错误码ID | 错误信息 | 12297| -------- | ------------------------------------- | 12298| 17100014 | The type and value of the message do not match. | 12299| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12300 12301### setString<sup>10+</sup> 12302 12303setString(message: string): void 12304 12305设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12306 12307**系统能力:** SystemCapability.Web.Webview.Core 12308 12309**参数:** 12310 12311| 参数名 | 类型 | 必填 | 说明 | 12312| ------ | ------ | ---- | -------------------- | 12313| message | string | 是 | 字符串类型数据。 | 12314 12315**错误码:** 12316 12317| 错误码ID | 错误信息 | 12318| -------- | ------------------------------------- | 12319| 17100014 | The type and value of the message do not match. | 12320| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12321 12322### setNumber<sup>10+</sup> 12323 12324setNumber(message: number): void 12325 12326设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12327 12328**系统能力:** SystemCapability.Web.Webview.Core 12329 12330**参数:** 12331 12332| 参数名 | 类型 | 必填 | 说明 | 12333| ------ | ------ | ---- | -------------------- | 12334| message | number | 是 | 数值类型数据。 | 12335 12336**错误码:** 12337 12338| 错误码ID | 错误信息 | 12339| -------- | ------------------------------------- | 12340| 17100014 | The type and value of the message do not match. | 12341| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12342 12343### setBoolean<sup>10+</sup> 12344 12345setBoolean(message: boolean): void 12346 12347设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12348 12349**系统能力:** SystemCapability.Web.Webview.Core 12350 12351**参数:** 12352 12353| 参数名 | 类型 | 必填 | 说明 | 12354| ------ | ------ | ---- | -------------------- | 12355| message | boolean | 是 | 布尔类型数据。 | 12356 12357**错误码:** 12358 12359| 错误码ID | 错误信息 | 12360| -------- | ------------------------------------- | 12361| 17100014 | The type and value of the message do not match. | 12362| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12363 12364### setArrayBuffer<sup>10+</sup> 12365 12366setArrayBuffer(message: ArrayBuffer): void 12367 12368设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12369 12370**系统能力:** SystemCapability.Web.Webview.Core 12371 12372**参数:** 12373 12374| 参数名 | 类型 | 必填 | 说明 | 12375| ------ | ------ | ---- | -------------------- | 12376| message | ArrayBuffer | 是 | 原始二进制类型数据。 | 12377 12378**错误码:** 12379 12380以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12381 12382| 错误码ID | 错误信息 | 12383| -------- | ------------------------------------- | 12384| 17100014 | The type and value of the message do not match. | 12385| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12386 12387### setArray<sup>10+</sup> 12388 12389setArray(message: Array\<string | number | boolean\>): void 12390 12391设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12392 12393**系统能力:** SystemCapability.Web.Webview.Core 12394 12395**参数:** 12396 12397| 参数名 | 类型 | 必填 | 说明 | 12398| ------ | ------ | ---- | -------------------- | 12399| message | Array\<string \| number \| boolean\> | 是 | 数组类型数据。 | 12400 12401**错误码:** 12402 12403以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12404 12405| 错误码ID | 错误信息 | 12406| -------- | ------------------------------------- | 12407| 17100014 | The type and value of the message do not match. | 12408| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12409 12410### setError<sup>10+</sup> 12411 12412setError(message: Error): void 12413 12414设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12415 12416**系统能力:** SystemCapability.Web.Webview.Core 12417 12418**参数:** 12419 12420| 参数名 | 类型 | 必填 | 说明 | 12421| ------ | ------ | ---- | -------------------- | 12422| message | Error | 是 | 错误对象类型数据。 | 12423 12424**错误码:** 12425 12426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12427 12428| 错误码ID | 错误信息 | 12429| -------- | ------------------------------------- | 12430| 17100014 | The type and value of the message do not match. | 12431| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12432 12433## WebStorageOrigin 12434 12435提供Web SQL数据库的使用信息。 12436 12437**系统能力:** SystemCapability.Web.Webview.Core 12438 12439| 名称 | 类型 | 可读 | 可写 | 说明 | 12440| ------ | ------ | ---- | ---- | ---- | 12441| origin | string | 是 | 是 | 指定源的字符串索引。 | 12442| usage | number | 是 | 是 | 指定源的存储量。 | 12443| quota | number | 是 | 是 | 指定源的存储配额。 | 12444 12445## BackForwardList 12446 12447当前Webview的历史信息列表。 12448 12449**系统能力:** SystemCapability.Web.Webview.Core 12450 12451| 名称 | 类型 | 可读 | 可写 | 说明 | 12452| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 12453| currentIndex | number | 是 | 是 | 当前在页面历史列表中的索引。 | 12454| size | number | 是 | 是 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 12455 12456### getItemAtIndex 12457 12458getItemAtIndex(index: number): HistoryItem 12459 12460获取历史列表中指定索引的历史记录项信息。 12461 12462**系统能力:** SystemCapability.Web.Webview.Core 12463 12464**参数:** 12465 12466| 参数名 | 类型 | 必填 | 说明 | 12467| ------ | ------ | ---- | ---------------------- | 12468| index | number | 是 | 指定历史列表中的索引。 | 12469 12470**返回值:** 12471 12472| 类型 | 说明 | 12473| --------------------------- | ------------ | 12474| [HistoryItem](#historyitem) | 历史记录项。 | 12475 12476**错误码:** 12477 12478以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12479 12480| 错误码ID | 错误信息 | 12481| -------- | ------------------------------------------------------ | 12482| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12483 12484**示例:** 12485 12486```ts 12487// xxx.ets 12488import { webview } from '@kit.ArkWeb'; 12489import { BusinessError } from '@kit.BasicServicesKit'; 12490import { image } from '@kit.ImageKit'; 12491 12492@Entry 12493@Component 12494struct WebComponent { 12495 controller: webview.WebviewController = new webview.WebviewController(); 12496 @State icon: image.PixelMap | undefined = undefined; 12497 12498 build() { 12499 Column() { 12500 Button('getBackForwardEntries') 12501 .onClick(() => { 12502 try { 12503 let list = this.controller.getBackForwardEntries(); 12504 let historyItem = list.getItemAtIndex(list.currentIndex); 12505 console.log("HistoryItem: " + JSON.stringify(historyItem)); 12506 this.icon = historyItem.icon; 12507 } catch (error) { 12508 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12509 } 12510 }) 12511 Web({ src: 'www.example.com', controller: this.controller }) 12512 } 12513 } 12514} 12515``` 12516 12517## HistoryItem 12518 12519页面历史记录项。 12520 12521**系统能力:** SystemCapability.Web.Webview.Core 12522 12523| 名称 | 类型 | 可读 | 可写 | 说明 | 12524| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 12525| icon | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 12526| historyUrl | string | 是 | 是 | 历史记录项的url地址。 | 12527| historyRawUrl | string | 是 | 是 | 历史记录项的原始url地址。 | 12528| title | string | 是 | 是 | 历史记录项的标题。 | 12529 12530## WebCustomScheme 12531 12532自定义协议配置。 12533 12534**系统能力:** SystemCapability.Web.Webview.Core 12535 12536| 名称 | 类型 | 可读 | 可写 | 说明 | 12537| -------------- | --------- | ---- | ---- | ---------------------------- | 12538| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。 | 12539| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。<br>true表示支持跨域请求,false表示不支持跨域请求。<br>默认值:true。 | 12540| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。<br>true表示支持fetch请求,false表示不支持fetch请求。<br>默认值:true。 | 12541| isStandard<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。<br>true表示设置了该选项的scheme将作为标准scheme进行处理,false表示设置了该选项的scheme不作为标准scheme进行处理。<br>默认值:true。 | 12542| isLocal<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与“file”协议相同的安全规则来处理。<br>true表示设置了该选项的scheme将使用与“file”协议相同的安全规则来处理,false表示设置了该选项的scheme不使用与“file”协议相同的安全规则来处理。<br>默认值:true。 | 12543| isDisplayIsolated<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。<br>true表示设置了该选项的scheme的内容只能从相同scheme的其他内容中显示或访问,false表示设置了该选项的scheme的内容不是只能从相同scheme的其他内容中显示或访问。<br>默认值:true。 | 12544| isSecure<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。true表示设置了该选项的scheme将使用与应用于“https”的安全规则相同的安全规则来处理,false表示设置了该选项的scheme不使用与应用于“https”的安全规则相同的安全规则来处理。<br>默认值:true。 | 12545| isCspBypassing<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。<br>true表示设置了该选项的scheme可以绕过内容安全策略(CSP)检查,false表示设置了该选项的scheme不可以绕过内容安全策略(CSP)检查。<br>默认值:true。<br>在大多数情况下,当设置isStandard为true时,不应设置此值。 | 12546| isCodeCacheSupported<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的js资源是否支持生成code cache。<br>true表示设置了该选项的scheme的js资源支持生成code,false表示设置了该选项的scheme的js资源不支持生成code。<br>默认值:false。 | 12547 12548## SecureDnsMode<sup>10+</sup> 12549 12550Web组件使用HTTPDNS的模式。 12551 12552**系统能力:** SystemCapability.Web.Webview.Core 12553 12554| 名称 | 值 | 说明 | 12555| ------------- | -- |----------------------------------------- | 12556| OFF | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。| 12557| AUTO | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。| 12558| SECURE_ONLY | 2 |强制使用设定的HTTPDNS服务器进行域名解析。| 12559 12560## WebDownloadState<sup>11+</sup> 12561 12562下载任务的状态。 12563 12564**系统能力:** SystemCapability.Web.Webview.Core 12565 12566| 名称 | 值 | 说明 | 12567| ------------- | -- |----------------------------------------- | 12568| IN_PROGRESS | 0 |下载任务正在进行中。| 12569| COMPLETED | 1 |下载任务已经完成。| 12570| CANCELED | 2 |下载任务已经被取消。| 12571| INTERRUPTED | 3 |下载任务被中断。| 12572| PENDING | 4 |下载任务等待开始。| 12573| PAUSED | 5 |下载任务已经被暂停。| 12574| UNKNOWN | 6 |下载任务未知状态。| 12575 12576## WebDownloadErrorCode<sup>11+</sup> 12577 12578下载任务的错误码。 12579 12580**系统能力:** SystemCapability.Web.Webview.Core 12581 12582| 名称 | 值 | 说明 | 12583| ------------- | -- |----------------------------------------- | 12584| ERROR_UNKNOWN | 0 |未知的错误。| 12585| FILE_FAILED | 1 | 常规文件操作失败。| 12586| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。| 12587| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。| 12588| FILE_NAME_TOO_LONG | 5 | 文件名字过长。| 12589| FILE_TOO_LARGE | 6 | 文件太大。| 12590| FILE_TRANSIENT_ERROR | 10 | 出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。| 12591| FILE_BLOCKED | 11 | 由于某些本地策略,文件被阻止访问。| 12592| FILE_TOO_SHORT | 13 | 当尝试恢复下载时,发现文件不够长,可能该文件已不存在。| 12593| FILE_HASH_MISMATCH | 14 | 哈希不匹配。| 12594| FILE_SAME_AS_SOURCE | 15 | 文件已存在。| 12595| NETWORK_FAILED | 20 | 一般网络错误。| 12596| NETWORK_TIMEOUT | 21 | 网络超时。| 12597| NETWORK_DISCONNECTED | 22 | 网络断开连接。| 12598| NETWORK_SERVER_DOWN | 23 | 服务器关闭。| 12599| NETWORK_INVALID_REQUEST | 24 | 无效的网络请求,可能重定向到不支持的方案或无效的URL。| 12600| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。| 12601| SERVER_NO_RANGE | 31 | 服务器不支持范围请求。| 12602| SERVER_BAD_CONTENT | 33 | 服务器没有请求的数据。| 12603| SERVER_UNAUTHORIZED | 34 | 服务器不允许下载该文件。| 12604| SERVER_CERT_PROBLEM | 35 | 服务器证书错误。| 12605| SERVER_FORBIDDEN | 36 | 服务器访问被禁止。| 12606| SERVER_UNREACHABLE | 37 | 无法访问服务器。| 12607| SERVER_CONTENT_LENGTH_MISMATCH | 38 | 接收到的数据与内容长度不匹配。| 12608| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。| 12609| USER_CANCELED | 40 | 用户取消了下载。| 12610| USER_SHUTDOWN | 41 | 用户关闭了应用。| 12611| CRASH | 50 | 应用发生了崩溃。| 12612 12613## WebDownloadItem<sup>11+</sup> 12614 12615 表示下载任务,您可以使用此对象来操作相应的下载任务。 12616 12617> **说明:** 12618> 12619> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。 12620 12621### getGuid<sup>11+</sup> 12622 12623getGuid(): string 12624 12625获取下载任务的唯一ID。 12626 12627**系统能力:** SystemCapability.Web.Webview.Core 12628 12629**返回值:** 12630 12631| 类型 | 说明 | 12632| ------ | ------------------------- | 12633| string | 下载任务的唯一ID。 | 12634 12635**示例:** 12636 12637```ts 12638// xxx.ets 12639import { webview } from '@kit.ArkWeb'; 12640import { BusinessError } from '@kit.BasicServicesKit'; 12641 12642@Entry 12643@Component 12644struct WebComponent { 12645 controller: webview.WebviewController = new webview.WebviewController(); 12646 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12647 12648 build() { 12649 Column() { 12650 Button('setDownloadDelegate') 12651 .onClick(() => { 12652 try { 12653 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12654 console.log("will start a download."); 12655 // 传入一个下载路径,并开始下载。 12656 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12657 }) 12658 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12659 console.log("download update guid: " + webDownloadItem.getGuid()); 12660 }) 12661 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12662 console.log("download failed guid: " + webDownloadItem.getGuid()); 12663 }) 12664 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12665 console.log("download finish guid: " + webDownloadItem.getGuid()); 12666 }) 12667 this.controller.setDownloadDelegate(this.delegate); 12668 } catch (error) { 12669 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12670 } 12671 }) 12672 Button('startDownload') 12673 .onClick(() => { 12674 try { 12675 this.controller.startDownload('https://www.example.com'); 12676 } catch (error) { 12677 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12678 } 12679 }) 12680 Web({ src: 'www.example.com', controller: this.controller }) 12681 } 12682 } 12683} 12684``` 12685 12686### getCurrentSpeed<sup>11+</sup> 12687 12688getCurrentSpeed(): number 12689 12690获取下载的速度,单位:字节每秒。 12691 12692**系统能力:** SystemCapability.Web.Webview.Core 12693 12694**返回值:** 12695 12696| 类型 | 说明 | 12697| ------ | ------------------------- | 12698| number | 下载的速度(字节每秒)。 | 12699 12700**示例:** 12701 12702```ts 12703// xxx.ets 12704import { webview } from '@kit.ArkWeb'; 12705import { BusinessError } from '@kit.BasicServicesKit'; 12706 12707@Entry 12708@Component 12709struct WebComponent { 12710 controller: webview.WebviewController = new webview.WebviewController(); 12711 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12712 12713 build() { 12714 Column() { 12715 Button('setDownloadDelegate') 12716 .onClick(() => { 12717 try { 12718 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12719 console.log("will start a download."); 12720 // 传入一个下载路径,并开始下载。 12721 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12722 }) 12723 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12724 console.log("download update current speed: " + webDownloadItem.getCurrentSpeed()); 12725 }) 12726 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12727 console.log("download failed guid: " + webDownloadItem.getGuid()); 12728 }) 12729 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12730 console.log("download finish guid: " + webDownloadItem.getGuid()); 12731 }) 12732 this.controller.setDownloadDelegate(this.delegate); 12733 } catch (error) { 12734 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12735 } 12736 }) 12737 Button('startDownload') 12738 .onClick(() => { 12739 try { 12740 this.controller.startDownload('https://www.example.com'); 12741 } catch (error) { 12742 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12743 } 12744 }) 12745 Web({ src: 'www.example.com', controller: this.controller }) 12746 } 12747 } 12748} 12749``` 12750 12751### getPercentComplete<sup>11+</sup> 12752 12753getPercentComplete(): number 12754 12755获取下载的进度,100代表下载完成。 12756 12757**系统能力:** SystemCapability.Web.Webview.Core 12758 12759**返回值:** 12760 12761| 类型 | 说明 | 12762| ------ | ------------------------- | 12763| number | 下载完成的进度,100代表下载完成。 | 12764 12765**示例:** 12766 12767```ts 12768// xxx.ets 12769import { webview } from '@kit.ArkWeb'; 12770import { BusinessError } from '@kit.BasicServicesKit'; 12771 12772@Entry 12773@Component 12774struct WebComponent { 12775 controller: webview.WebviewController = new webview.WebviewController(); 12776 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12777 12778 build() { 12779 Column() { 12780 Button('setDownloadDelegate') 12781 .onClick(() => { 12782 try { 12783 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12784 console.log("will start a download."); 12785 // 传入一个下载路径,并开始下载。 12786 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12787 }) 12788 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12789 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12790 }) 12791 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12792 console.log("download failed guid: " + webDownloadItem.getGuid()); 12793 }) 12794 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12795 console.log("download finish guid: " + webDownloadItem.getGuid()); 12796 }) 12797 this.controller.setDownloadDelegate(this.delegate); 12798 } catch (error) { 12799 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12800 } 12801 }) 12802 Button('startDownload') 12803 .onClick(() => { 12804 try { 12805 this.controller.startDownload('https://www.example.com'); 12806 } catch (error) { 12807 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12808 } 12809 }) 12810 Web({ src: 'www.example.com', controller: this.controller }) 12811 } 12812 } 12813} 12814``` 12815 12816### getTotalBytes<sup>11+</sup> 12817 12818getTotalBytes(): number 12819 12820获取待下载文件的总长度。 12821 12822**系统能力:** SystemCapability.Web.Webview.Core 12823 12824**返回值:** 12825 12826| 类型 | 说明 | 12827| ------ | ------------------------- | 12828| number | 待下载文件的总长度。 | 12829 12830**示例:** 12831 12832```ts 12833// xxx.ets 12834import { webview } from '@kit.ArkWeb'; 12835import { BusinessError } from '@kit.BasicServicesKit'; 12836 12837@Entry 12838@Component 12839struct WebComponent { 12840 controller: webview.WebviewController = new webview.WebviewController(); 12841 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12842 12843 build() { 12844 Column() { 12845 Button('setDownloadDelegate') 12846 .onClick(() => { 12847 try { 12848 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12849 console.log("will start a download."); 12850 // 传入一个下载路径,并开始下载。 12851 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12852 }) 12853 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12854 console.log("download update total bytes: " + webDownloadItem.getTotalBytes()); 12855 }) 12856 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12857 console.log("download failed guid: " + webDownloadItem.getGuid()); 12858 }) 12859 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12860 console.log("download finish guid: " + webDownloadItem.getGuid()); 12861 }) 12862 this.controller.setDownloadDelegate(this.delegate); 12863 } catch (error) { 12864 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12865 } 12866 }) 12867 Button('startDownload') 12868 .onClick(() => { 12869 try { 12870 this.controller.startDownload('https://www.example.com'); 12871 } catch (error) { 12872 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12873 } 12874 }) 12875 Web({ src: 'www.example.com', controller: this.controller }) 12876 } 12877 } 12878} 12879``` 12880 12881### getState<sup>11+</sup> 12882 12883getState(): WebDownloadState 12884 12885获取下载的状态。 12886 12887**系统能力:** SystemCapability.Web.Webview.Core 12888 12889**返回值:** 12890 12891| 类型 | 说明 | 12892| ------ | ------------------------- | 12893| [WebDownloadState](#webdownloadstate11) | 下载的状态。 | 12894 12895**示例:** 12896 12897```ts 12898// xxx.ets 12899import { webview } from '@kit.ArkWeb'; 12900import { BusinessError } from '@kit.BasicServicesKit'; 12901 12902@Entry 12903@Component 12904struct WebComponent { 12905 controller: webview.WebviewController = new webview.WebviewController(); 12906 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12907 12908 build() { 12909 Column() { 12910 Button('setDownloadDelegate') 12911 .onClick(() => { 12912 try { 12913 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12914 console.log("will start a download."); 12915 // 传入一个下载路径,并开始下载。 12916 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12917 }) 12918 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12919 console.log("download update download state: " + webDownloadItem.getState()); 12920 }) 12921 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12922 console.log("download failed guid: " + webDownloadItem.getGuid()); 12923 }) 12924 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12925 console.log("download finish guid: " + webDownloadItem.getGuid()); 12926 }) 12927 this.controller.setDownloadDelegate(this.delegate); 12928 } catch (error) { 12929 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12930 } 12931 }) 12932 Button('startDownload') 12933 .onClick(() => { 12934 try { 12935 this.controller.startDownload('https://www.example.com'); 12936 } catch (error) { 12937 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12938 } 12939 }) 12940 Web({ src: 'www.example.com', controller: this.controller }) 12941 } 12942 } 12943} 12944``` 12945 12946### getLastErrorCode<sup>11+</sup> 12947 12948getLastErrorCode(): WebDownloadErrorCode 12949 12950获取下载的错误码。 12951 12952**系统能力:** SystemCapability.Web.Webview.Core 12953 12954**返回值:** 12955 12956| 类型 | 说明 | 12957| ------ | ------------------------- | 12958| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 | 12959 12960**示例:** 12961 12962```ts 12963// xxx.ets 12964import { webview } from '@kit.ArkWeb'; 12965import { BusinessError } from '@kit.BasicServicesKit'; 12966 12967@Entry 12968@Component 12969struct WebComponent { 12970 controller: webview.WebviewController = new webview.WebviewController(); 12971 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12972 12973 build() { 12974 Column() { 12975 Button('setDownloadDelegate') 12976 .onClick(() => { 12977 try { 12978 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12979 console.log("will start a download."); 12980 // 传入一个下载路径,并开始下载。 12981 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12982 }) 12983 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12984 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12985 }) 12986 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12987 console.log("download failed guid: " + webDownloadItem.getGuid()); 12988 console.log("download error code: " + webDownloadItem.getLastErrorCode()); 12989 }) 12990 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12991 console.log("download finish guid: " + webDownloadItem.getGuid()); 12992 }) 12993 this.controller.setDownloadDelegate(this.delegate); 12994 } catch (error) { 12995 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12996 } 12997 }) 12998 Button('startDownload') 12999 .onClick(() => { 13000 try { 13001 this.controller.startDownload('https://www.example.com'); 13002 } catch (error) { 13003 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13004 } 13005 }) 13006 Web({ src: 'www.example.com', controller: this.controller }) 13007 } 13008 } 13009} 13010``` 13011 13012### getMethod<sup>11+</sup> 13013 13014getMethod(): string 13015 13016获取下载任务的请求方式。 13017 13018**系统能力:** SystemCapability.Web.Webview.Core 13019 13020**返回值:** 13021 13022| 类型 | 说明 | 13023| ------ | ------------------------- | 13024| string | 下载的请求方式。 | 13025 13026**示例:** 13027 13028```ts 13029// xxx.ets 13030import { webview } from '@kit.ArkWeb'; 13031import { BusinessError } from '@kit.BasicServicesKit'; 13032 13033@Entry 13034@Component 13035struct WebComponent { 13036 controller: webview.WebviewController = new webview.WebviewController(); 13037 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13038 13039 build() { 13040 Column() { 13041 Button('setDownloadDelegate') 13042 .onClick(() => { 13043 try { 13044 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13045 console.log("will start a download, method:" + webDownloadItem.getMethod()); 13046 // 传入一个下载路径,并开始下载。 13047 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13048 }) 13049 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13050 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13051 }) 13052 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13053 console.log("download failed guid: " + webDownloadItem.getGuid()); 13054 }) 13055 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13056 console.log("download finish guid: " + webDownloadItem.getGuid()); 13057 }) 13058 this.controller.setDownloadDelegate(this.delegate); 13059 } catch (error) { 13060 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13061 } 13062 }) 13063 Button('startDownload') 13064 .onClick(() => { 13065 try { 13066 this.controller.startDownload('https://www.example.com'); 13067 } catch (error) { 13068 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13069 } 13070 }) 13071 Web({ src: 'www.example.com', controller: this.controller }) 13072 } 13073 } 13074} 13075``` 13076 13077### getMimeType<sup>11+</sup> 13078 13079getMimeType(): string 13080 13081获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。 13082 13083**系统能力:** SystemCapability.Web.Webview.Core 13084 13085**返回值:** 13086 13087| 类型 | 说明 | 13088| ------ | ------------------------- | 13089| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。| 13090 13091**示例:** 13092 13093```ts 13094// xxx.ets 13095import { webview } from '@kit.ArkWeb'; 13096import { BusinessError } from '@kit.BasicServicesKit'; 13097 13098@Entry 13099@Component 13100struct WebComponent { 13101 controller: webview.WebviewController = new webview.WebviewController(); 13102 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13103 13104 build() { 13105 Column() { 13106 Button('setDownloadDelegate') 13107 .onClick(() => { 13108 try { 13109 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13110 console.log("will start a download, mime type:" + webDownloadItem.getMimeType()); 13111 // 传入一个下载路径,并开始下载。 13112 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13113 }) 13114 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13115 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13116 }) 13117 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13118 console.log("download failed guid: " + webDownloadItem.getGuid()); 13119 }) 13120 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13121 console.log("download finish guid: " + webDownloadItem.getGuid()); 13122 }) 13123 this.controller.setDownloadDelegate(this.delegate); 13124 } catch (error) { 13125 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13126 } 13127 }) 13128 Button('startDownload') 13129 .onClick(() => { 13130 try { 13131 this.controller.startDownload('https://www.example.com'); 13132 } catch (error) { 13133 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13134 } 13135 }) 13136 Web({ src: 'www.example.com', controller: this.controller }) 13137 } 13138 } 13139} 13140``` 13141 13142### getUrl<sup>11+</sup> 13143 13144getUrl(): string 13145 13146获取下载的请求地址。 13147 13148**系统能力:** SystemCapability.Web.Webview.Core 13149 13150**返回值:** 13151 13152| 类型 | 说明 | 13153| ------ | ------------------------- | 13154| string | 下载的请求地址。 | 13155 13156**示例:** 13157 13158```ts 13159// xxx.ets 13160import { webview } from '@kit.ArkWeb'; 13161import { BusinessError } from '@kit.BasicServicesKit'; 13162 13163@Entry 13164@Component 13165struct WebComponent { 13166 controller: webview.WebviewController = new webview.WebviewController(); 13167 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13168 13169 build() { 13170 Column() { 13171 Button('setDownloadDelegate') 13172 .onClick(() => { 13173 try { 13174 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13175 console.log("will start a download, url:" + webDownloadItem.getUrl()); 13176 // 传入一个下载路径,并开始下载。 13177 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13178 }) 13179 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13180 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13181 }) 13182 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13183 console.log("download failed guid: " + webDownloadItem.getGuid()); 13184 }) 13185 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13186 console.log("download finish guid: " + webDownloadItem.getGuid()); 13187 }) 13188 this.controller.setDownloadDelegate(this.delegate); 13189 } catch (error) { 13190 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13191 } 13192 }) 13193 Button('startDownload') 13194 .onClick(() => { 13195 try { 13196 this.controller.startDownload('https://www.example.com'); 13197 } catch (error) { 13198 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13199 } 13200 }) 13201 Web({ src: 'www.example.com', controller: this.controller }) 13202 } 13203 } 13204} 13205``` 13206 13207### getSuggestedFileName<sup>11+</sup> 13208 13209getSuggestedFileName(): string 13210 13211获取下载的建议文件名。 13212 13213**系统能力:** SystemCapability.Web.Webview.Core 13214 13215**返回值:** 13216 13217| 类型 | 说明 | 13218| ------ | ------------------------- | 13219| string | 下载的建议文件名。 | 13220 13221**示例:** 13222 13223```ts 13224// xxx.ets 13225import { webview } from '@kit.ArkWeb'; 13226import { BusinessError } from '@kit.BasicServicesKit'; 13227 13228@Entry 13229@Component 13230struct WebComponent { 13231 controller: webview.WebviewController = new webview.WebviewController(); 13232 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13233 13234 build() { 13235 Column() { 13236 Button('setDownloadDelegate') 13237 .onClick(() => { 13238 try { 13239 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13240 console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName()); 13241 // 传入一个下载路径,并开始下载。 13242 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13243 }) 13244 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13245 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13246 }) 13247 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13248 console.log("download failed guid: " + webDownloadItem.getGuid()); 13249 }) 13250 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13251 console.log("download finish guid: " + webDownloadItem.getGuid()); 13252 }) 13253 this.controller.setDownloadDelegate(this.delegate); 13254 } catch (error) { 13255 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13256 } 13257 }) 13258 Button('startDownload') 13259 .onClick(() => { 13260 try { 13261 this.controller.startDownload('https://www.example.com'); 13262 } catch (error) { 13263 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13264 } 13265 }) 13266 Web({ src: 'www.example.com', controller: this.controller }) 13267 } 13268 } 13269} 13270``` 13271 13272### getReceivedBytes<sup>11+</sup> 13273 13274getReceivedBytes(): number 13275 13276获取已经接收的字节数。 13277 13278**系统能力:** SystemCapability.Web.Webview.Core 13279 13280**返回值:** 13281 13282| 类型 | 说明 | 13283| ------ | ------------------------- | 13284| number | 已经接收的字节数。 | 13285 13286**示例:** 13287 13288```ts 13289// xxx.ets 13290import { webview } from '@kit.ArkWeb'; 13291import { BusinessError } from '@kit.BasicServicesKit'; 13292 13293@Entry 13294@Component 13295struct WebComponent { 13296 controller: webview.WebviewController = new webview.WebviewController(); 13297 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13298 13299 build() { 13300 Column() { 13301 Button('setDownloadDelegate') 13302 .onClick(() => { 13303 try { 13304 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13305 console.log("will start a download."); 13306 // 传入一个下载路径,并开始下载。 13307 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13308 }) 13309 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13310 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13311 console.log("download update received bytes: " + webDownloadItem.getReceivedBytes()); 13312 }) 13313 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13314 console.log("download failed guid: " + webDownloadItem.getGuid()); 13315 }) 13316 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13317 console.log("download finish guid: " + webDownloadItem.getGuid()); 13318 }) 13319 this.controller.setDownloadDelegate(this.delegate); 13320 } catch (error) { 13321 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13322 } 13323 }) 13324 Button('startDownload') 13325 .onClick(() => { 13326 try { 13327 this.controller.startDownload('https://www.example.com'); 13328 } catch (error) { 13329 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13330 } 13331 }) 13332 Web({ src: 'www.example.com', controller: this.controller }) 13333 } 13334 } 13335} 13336``` 13337 13338### getFullPath<sup>11+</sup> 13339 13340getFullPath(): string 13341 13342获取下载文件在磁盘上的全路径。 13343 13344**系统能力:** SystemCapability.Web.Webview.Core 13345 13346**返回值:** 13347 13348| 类型 | 说明 | 13349| ------ | ------------------------- | 13350| string | 下载文件在磁盘上的全路径。 | 13351 13352**示例:** 13353 13354```ts 13355// xxx.ets 13356import { webview } from '@kit.ArkWeb'; 13357import { BusinessError } from '@kit.BasicServicesKit'; 13358 13359@Entry 13360@Component 13361struct WebComponent { 13362 controller: webview.WebviewController = new webview.WebviewController(); 13363 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13364 13365 build() { 13366 Column() { 13367 Button('setDownloadDelegate') 13368 .onClick(() => { 13369 try { 13370 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13371 console.log("will start a download."); 13372 // 传入一个下载路径,并开始下载。 13373 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13374 }) 13375 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13376 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13377 }) 13378 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13379 console.log("download failed guid: " + webDownloadItem.getGuid()); 13380 }) 13381 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13382 console.log("download finish guid: " + webDownloadItem.getGuid()); 13383 console.log("download finish full path: " + webDownloadItem.getFullPath()); 13384 }) 13385 this.controller.setDownloadDelegate(this.delegate); 13386 } catch (error) { 13387 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13388 } 13389 }) 13390 Button('startDownload') 13391 .onClick(() => { 13392 try { 13393 this.controller.startDownload('https://www.example.com'); 13394 } catch (error) { 13395 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13396 } 13397 }) 13398 Web({ src: 'www.example.com', controller: this.controller }) 13399 } 13400 } 13401} 13402``` 13403 13404### serialize<sup>11+</sup> 13405 13406serialize(): Uint8Array 13407 13408将失败的下载序列化到一个字节数组。 13409 13410**系统能力:** SystemCapability.Web.Webview.Core 13411 13412**返回值:** 13413 13414| 类型 | 说明 | 13415| ------ | ------------------------- | 13416| Uint8Array | 失败的下载序列化后的字节数组。 | 13417 13418**示例:** 13419 13420```ts 13421// xxx.ets 13422import { webview } from '@kit.ArkWeb'; 13423import { BusinessError } from '@kit.BasicServicesKit'; 13424 13425@Entry 13426@Component 13427struct WebComponent { 13428 controller: webview.WebviewController = new webview.WebviewController(); 13429 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13430 failedData: Uint8Array = new Uint8Array(); 13431 13432 build() { 13433 Column() { 13434 Button('setDownloadDelegate') 13435 .onClick(() => { 13436 try { 13437 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13438 console.log("will start a download."); 13439 // 传入一个下载路径,并开始下载。 13440 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13441 }) 13442 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13443 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13444 }) 13445 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13446 console.log("download failed guid: " + webDownloadItem.getGuid()); 13447 // 序列化失败的下载到一个字节数组。 13448 this.failedData = webDownloadItem.serialize(); 13449 }) 13450 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13451 console.log("download finish guid: " + webDownloadItem.getGuid()); 13452 }) 13453 this.controller.setDownloadDelegate(this.delegate); 13454 } catch (error) { 13455 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13456 } 13457 }) 13458 Button('startDownload') 13459 .onClick(() => { 13460 try { 13461 this.controller.startDownload('https://www.example.com'); 13462 } catch (error) { 13463 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13464 } 13465 }) 13466 Web({ src: 'www.example.com', controller: this.controller }) 13467 } 13468 } 13469} 13470``` 13471 13472### deserialize<sup>11+</sup> 13473 13474static deserialize(serializedData: Uint8Array): WebDownloadItem 13475 13476将序列化后的字节数组反序列化为一个WebDownloadItem对象。 13477 13478**系统能力:** SystemCapability.Web.Webview.Core 13479 13480**参数:** 13481 13482| 参数名 | 类型 | 必填 | 说明 | 13483| ------------------ | ------- | ---- | ------------- | 13484| serializedData | Uint8Array | 是 | 序列化后的下载。| 13485 13486**返回值:** 13487 13488| 类型 | 说明 | 13489| ------ | ------------------------- | 13490| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 | 13491 13492**错误码:** 13493 13494以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13495 13496| 错误码ID | 错误信息 | 13497| -------- | ------------------------------------------------------------ | 13498| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13499 13500**示例:** 13501 13502```ts 13503// xxx.ets 13504import { webview } from '@kit.ArkWeb'; 13505import { BusinessError } from '@kit.BasicServicesKit'; 13506 13507@Entry 13508@Component 13509struct WebComponent { 13510 controller: webview.WebviewController = new webview.WebviewController(); 13511 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13512 failedData: Uint8Array = new Uint8Array(); 13513 13514 build() { 13515 Column() { 13516 Button('setDownloadDelegate') 13517 .onClick(() => { 13518 try { 13519 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13520 console.log("will start a download."); 13521 // 传入一个下载路径,并开始下载。 13522 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13523 }) 13524 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13525 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13526 }) 13527 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13528 console.log("download failed guid: " + webDownloadItem.getGuid()); 13529 // 序列化失败的下载到一个字节数组。 13530 this.failedData = webDownloadItem.serialize(); 13531 }) 13532 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13533 console.log("download finish guid: " + webDownloadItem.getGuid()); 13534 }) 13535 this.controller.setDownloadDelegate(this.delegate); 13536 } catch (error) { 13537 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13538 } 13539 }) 13540 Button('startDownload') 13541 .onClick(() => { 13542 try { 13543 this.controller.startDownload('https://www.example.com'); 13544 } catch (error) { 13545 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13546 } 13547 }) 13548 Button('resumeDownload') 13549 .onClick(() => { 13550 try { 13551 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13552 } catch (error) { 13553 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13554 } 13555 }) 13556 Web({ src: 'www.example.com', controller: this.controller }) 13557 } 13558 } 13559} 13560``` 13561 13562### start<sup>11+</sup> 13563 13564start(downloadPath: string): void 13565 13566开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。 13567 13568> **说明:** 13569> 13570>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。 13571 13572**系统能力:** SystemCapability.Web.Webview.Core 13573 13574**参数:** 13575 13576| 参数名 | 类型 | 必填 | 说明 | 13577| ------ | ---------------------- | ---- | ------------------------------| 13578| downloadPath | string | 是 | 下载文件的路径(包含文件名),路径长度与文件管理中长度一致,最长255字符。| 13579 13580**错误码:** 13581 13582以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13583 13584| 错误码ID | 错误信息 | 13585| -------- | ------------------------------------------------------------ | 13586| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13587 13588**示例:** 13589 13590```ts 13591// xxx.ets 13592import { webview } from '@kit.ArkWeb'; 13593import { BusinessError } from '@kit.BasicServicesKit'; 13594 13595@Entry 13596@Component 13597struct WebComponent { 13598 controller: webview.WebviewController = new webview.WebviewController(); 13599 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13600 failedData: Uint8Array = new Uint8Array(); 13601 13602 build() { 13603 Column() { 13604 Button('setDownloadDelegate') 13605 .onClick(() => { 13606 try { 13607 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13608 console.log("will start a download."); 13609 // 传入一个下载路径,并开始下载。 13610 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13611 }) 13612 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13613 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13614 }) 13615 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13616 console.log("download failed guid: " + webDownloadItem.getGuid()); 13617 // 序列化失败的下载到一个字节数组。 13618 this.failedData = webDownloadItem.serialize(); 13619 }) 13620 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13621 console.log("download finish guid: " + webDownloadItem.getGuid()); 13622 }) 13623 this.controller.setDownloadDelegate(this.delegate); 13624 } catch (error) { 13625 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13626 } 13627 }) 13628 Button('startDownload') 13629 .onClick(() => { 13630 try { 13631 this.controller.startDownload('https://www.example.com'); 13632 } catch (error) { 13633 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13634 } 13635 }) 13636 Button('resumeDownload') 13637 .onClick(() => { 13638 try { 13639 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13640 } catch (error) { 13641 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13642 } 13643 }) 13644 Web({ src: 'www.example.com', controller: this.controller }) 13645 } 13646 } 13647} 13648``` 13649 13650### cancel<sup>11+</sup> 13651 13652cancel(): void 13653 13654取消一个正在下载的下载任务。 13655 13656**系统能力:** SystemCapability.Web.Webview.Core 13657 13658**示例:** 13659 13660```ts 13661// xxx.ets 13662import { webview } from '@kit.ArkWeb'; 13663import { BusinessError } from '@kit.BasicServicesKit'; 13664 13665@Entry 13666@Component 13667struct WebComponent { 13668 controller: webview.WebviewController = new webview.WebviewController(); 13669 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13670 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13671 failedData: Uint8Array = new Uint8Array(); 13672 13673 build() { 13674 Column() { 13675 Button('setDownloadDelegate') 13676 .onClick(() => { 13677 try { 13678 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13679 console.log("will start a download."); 13680 // 传入一个下载路径,并开始下载。 13681 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13682 }) 13683 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13684 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13685 this.download = webDownloadItem; 13686 }) 13687 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13688 console.log("download failed guid: " + webDownloadItem.getGuid()); 13689 // 序列化失败的下载到一个字节数组。 13690 this.failedData = webDownloadItem.serialize(); 13691 }) 13692 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13693 console.log("download finish guid: " + webDownloadItem.getGuid()); 13694 }) 13695 this.controller.setDownloadDelegate(this.delegate); 13696 } catch (error) { 13697 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13698 } 13699 }) 13700 Button('startDownload') 13701 .onClick(() => { 13702 try { 13703 this.controller.startDownload('https://www.example.com'); 13704 } catch (error) { 13705 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13706 } 13707 }) 13708 Button('resumeDownload') 13709 .onClick(() => { 13710 try { 13711 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13712 } catch (error) { 13713 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13714 } 13715 }) 13716 Button('cancel') 13717 .onClick(() => { 13718 try { 13719 this.download.cancel(); 13720 } catch (error) { 13721 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13722 } 13723 }) 13724 Web({ src: 'www.example.com', controller: this.controller }) 13725 } 13726 } 13727} 13728``` 13729 13730### pause<sup>11+</sup> 13731 13732pause(): void 13733 13734暂停一个正在下载的下载任务。 13735 13736**系统能力:** SystemCapability.Web.Webview.Core 13737 13738**错误码:** 13739 13740以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13741 13742| 错误码ID | 错误信息 | 13743| -------- | ------------------------------------------------------------ | 13744| 17100019 | The download task is not started yet. | 13745 13746**示例:** 13747 13748```ts 13749// xxx.ets 13750import { webview } from '@kit.ArkWeb'; 13751import { BusinessError } from '@kit.BasicServicesKit'; 13752 13753@Entry 13754@Component 13755struct WebComponent { 13756 controller: webview.WebviewController = new webview.WebviewController(); 13757 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13758 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13759 failedData: Uint8Array = new Uint8Array(); 13760 13761 build() { 13762 Column() { 13763 Button('setDownloadDelegate') 13764 .onClick(() => { 13765 try { 13766 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13767 console.log("will start a download."); 13768 // 传入一个下载路径,并开始下载。 13769 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13770 }) 13771 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13772 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13773 this.download = webDownloadItem; 13774 }) 13775 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13776 console.log("download failed guid: " + webDownloadItem.getGuid()); 13777 // 序列化失败的下载到一个字节数组。 13778 this.failedData = webDownloadItem.serialize(); 13779 }) 13780 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13781 console.log("download finish guid: " + webDownloadItem.getGuid()); 13782 }) 13783 this.controller.setDownloadDelegate(this.delegate); 13784 } catch (error) { 13785 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13786 } 13787 }) 13788 Button('startDownload') 13789 .onClick(() => { 13790 try { 13791 this.controller.startDownload('https://www.example.com'); 13792 } catch (error) { 13793 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13794 } 13795 }) 13796 Button('resumeDownload') 13797 .onClick(() => { 13798 try { 13799 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13800 } catch (error) { 13801 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13802 } 13803 }) 13804 Button('cancel') 13805 .onClick(() => { 13806 try { 13807 this.download.cancel(); 13808 } catch (error) { 13809 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13810 } 13811 }) 13812 Button('pause') 13813 .onClick(() => { 13814 try { 13815 this.download.pause(); 13816 } catch (error) { 13817 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13818 } 13819 }) 13820 Web({ src: 'www.example.com', controller: this.controller }) 13821 } 13822 } 13823} 13824``` 13825 13826### resume<sup>11+</sup> 13827 13828resume(): void 13829 13830恢复一个暂停的下载任务。 13831 13832**系统能力:** SystemCapability.Web.Webview.Core 13833 13834**错误码:** 13835 13836以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13837 13838| 错误码ID | 错误信息 | 13839| -------- | ------------------------------------------------------------ | 13840| 17100016 | The download task is not paused. | 13841 13842**示例:** 13843 13844```ts 13845// xxx.ets 13846import { webview } from '@kit.ArkWeb'; 13847import { BusinessError } from '@kit.BasicServicesKit'; 13848 13849@Entry 13850@Component 13851struct WebComponent { 13852 controller: webview.WebviewController = new webview.WebviewController(); 13853 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13854 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13855 failedData: Uint8Array = new Uint8Array(); 13856 13857 build() { 13858 Column() { 13859 Button('setDownloadDelegate') 13860 .onClick(() => { 13861 try { 13862 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13863 console.log("will start a download."); 13864 // 传入一个下载路径,并开始下载。 13865 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13866 }) 13867 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13868 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13869 this.download = webDownloadItem; 13870 }) 13871 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13872 console.log("download failed guid: " + webDownloadItem.getGuid()); 13873 // 序列化失败的下载到一个字节数组。 13874 this.failedData = webDownloadItem.serialize(); 13875 }) 13876 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13877 console.log("download finish guid: " + webDownloadItem.getGuid()); 13878 }) 13879 this.controller.setDownloadDelegate(this.delegate); 13880 } catch (error) { 13881 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13882 } 13883 }) 13884 Button('startDownload') 13885 .onClick(() => { 13886 try { 13887 this.controller.startDownload('https://www.example.com'); 13888 } catch (error) { 13889 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13890 } 13891 }) 13892 Button('resumeDownload') 13893 .onClick(() => { 13894 try { 13895 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13896 } catch (error) { 13897 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13898 } 13899 }) 13900 Button('cancel') 13901 .onClick(() => { 13902 try { 13903 this.download.cancel(); 13904 } catch (error) { 13905 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13906 } 13907 }) 13908 Button('pause') 13909 .onClick(() => { 13910 try { 13911 this.download.pause(); 13912 } catch (error) { 13913 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13914 } 13915 }) 13916 Button('resume') 13917 .onClick(() => { 13918 try { 13919 this.download.resume(); 13920 } catch (error) { 13921 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13922 } 13923 }) 13924 Web({ src: 'www.example.com', controller: this.controller }) 13925 } 13926 } 13927} 13928``` 13929 13930## WebDownloadDelegate<sup>11+</sup> 13931 13932 下载任务的状态会通过该类的回调接口通知给用户。 13933 13934### onBeforeDownload<sup>11+</sup> 13935 13936onBeforeDownload(callback: Callback\<WebDownloadItem>): void 13937 13938下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。 13939 13940> **说明:** 13941> 13942>处于PENDING状态的下载任务会首先将文件保存至临时目录。在调用WebDownloadItem.start并指定目标路径后,临时文件将被重命名为目标文件名,未完成下载的部分会在调用WebDownloadItem.start并指定目标路径后直接下载到目标路径。若希望避免在调用WebDownloadItem.start前生成临时文件,可先通过WebDownloadItem.cancel来取消当前的下载任务,之后再使用WebDownloadManager.resumeDownload来恢复被取消的下载任务。 13943 13944**系统能力:** SystemCapability.Web.Webview.Core 13945 13946**参数:** 13947 13948| 参数名 | 类型 | 必填 | 说明 | 13949| ------- | ------ | ---- | :------------- | 13950| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 触发下载的回调。 | 13951 13952**示例:** 13953 13954```ts 13955// xxx.ets 13956import { webview } from '@kit.ArkWeb'; 13957import { BusinessError } from '@kit.BasicServicesKit'; 13958 13959@Entry 13960@Component 13961struct WebComponent { 13962 controller: webview.WebviewController = new webview.WebviewController(); 13963 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13964 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13965 failedData: Uint8Array = new Uint8Array(); 13966 13967 build() { 13968 Column() { 13969 Button('setDownloadDelegate') 13970 .onClick(() => { 13971 try { 13972 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13973 console.log("will start a download."); 13974 // 传入一个下载路径,并开始下载。 13975 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13976 }) 13977 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13978 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13979 this.download = webDownloadItem; 13980 }) 13981 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13982 console.log("download failed guid: " + webDownloadItem.getGuid()); 13983 // 序列化失败的下载到一个字节数组。 13984 this.failedData = webDownloadItem.serialize(); 13985 }) 13986 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13987 console.log("download finish guid: " + webDownloadItem.getGuid()); 13988 }) 13989 this.controller.setDownloadDelegate(this.delegate); 13990 } catch (error) { 13991 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13992 } 13993 }) 13994 Button('startDownload') 13995 .onClick(() => { 13996 try { 13997 this.controller.startDownload('https://www.example.com'); 13998 } catch (error) { 13999 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14000 } 14001 }) 14002 Button('resumeDownload') 14003 .onClick(() => { 14004 try { 14005 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14006 } catch (error) { 14007 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14008 } 14009 }) 14010 Button('cancel') 14011 .onClick(() => { 14012 try { 14013 this.download.cancel(); 14014 } catch (error) { 14015 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14016 } 14017 }) 14018 Button('pause') 14019 .onClick(() => { 14020 try { 14021 this.download.pause(); 14022 } catch (error) { 14023 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14024 } 14025 }) 14026 Button('resume') 14027 .onClick(() => { 14028 try { 14029 this.download.resume(); 14030 } catch (error) { 14031 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14032 } 14033 }) 14034 Web({ src: 'www.example.com', controller: this.controller }) 14035 } 14036 } 14037} 14038``` 14039 14040### onDownloadUpdated<sup>11+</sup> 14041 14042onDownloadUpdated(callback: Callback\<WebDownloadItem>): void 14043 14044下载过程中的回调,通过该回调的参数可以了解下载进度等信息。 14045 14046**系统能力:** SystemCapability.Web.Webview.Core 14047 14048**参数:** 14049 14050| 参数名 | 类型 | 必填 | 说明 | 14051| ------- | ------ | ---- | :------------- | 14052| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已更新。 | 14053 14054**示例:** 14055 14056```ts 14057// xxx.ets 14058import { webview } from '@kit.ArkWeb'; 14059import { BusinessError } from '@kit.BasicServicesKit'; 14060 14061@Entry 14062@Component 14063struct WebComponent { 14064 controller: webview.WebviewController = new webview.WebviewController(); 14065 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14066 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14067 failedData: Uint8Array = new Uint8Array(); 14068 14069 build() { 14070 Column() { 14071 Button('setDownloadDelegate') 14072 .onClick(() => { 14073 try { 14074 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14075 console.log("will start a download."); 14076 // 传入一个下载路径,并开始下载。 14077 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14078 }) 14079 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14080 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14081 this.download = webDownloadItem; 14082 }) 14083 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14084 console.log("download failed guid: " + webDownloadItem.getGuid()); 14085 // 序列化失败的下载到一个字节数组。 14086 this.failedData = webDownloadItem.serialize(); 14087 }) 14088 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14089 console.log("download finish guid: " + webDownloadItem.getGuid()); 14090 }) 14091 this.controller.setDownloadDelegate(this.delegate); 14092 } catch (error) { 14093 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14094 } 14095 }) 14096 Button('startDownload') 14097 .onClick(() => { 14098 try { 14099 this.controller.startDownload('https://www.example.com'); 14100 } catch (error) { 14101 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14102 } 14103 }) 14104 Button('resumeDownload') 14105 .onClick(() => { 14106 try { 14107 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14108 } catch (error) { 14109 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14110 } 14111 }) 14112 Button('cancel') 14113 .onClick(() => { 14114 try { 14115 this.download.cancel(); 14116 } catch (error) { 14117 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14118 } 14119 }) 14120 Button('pause') 14121 .onClick(() => { 14122 try { 14123 this.download.pause(); 14124 } catch (error) { 14125 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14126 } 14127 }) 14128 Button('resume') 14129 .onClick(() => { 14130 try { 14131 this.download.resume(); 14132 } catch (error) { 14133 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14134 } 14135 }) 14136 Web({ src: 'www.example.com', controller: this.controller }) 14137 } 14138 } 14139} 14140``` 14141 14142### onDownloadFinish<sup>11+</sup> 14143 14144onDownloadFinish(callback: Callback\<WebDownloadItem>): void 14145 14146下载完成的通知。 14147 14148**系统能力:** SystemCapability.Web.Webview.Core 14149 14150**参数:** 14151 14152| 参数名 | 类型 | 必填 | 说明 | 14153| ------- | ------ | ---- | :------------- | 14154| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已完成。 | 14155 14156**示例:** 14157 14158```ts 14159// xxx.ets 14160import { webview } from '@kit.ArkWeb'; 14161import { BusinessError } from '@kit.BasicServicesKit'; 14162 14163@Entry 14164@Component 14165struct WebComponent { 14166 controller: webview.WebviewController = new webview.WebviewController(); 14167 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14168 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14169 failedData: Uint8Array = new Uint8Array(); 14170 14171 build() { 14172 Column() { 14173 Button('setDownloadDelegate') 14174 .onClick(() => { 14175 try { 14176 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14177 console.log("will start a download."); 14178 // 传入一个下载路径,并开始下载。 14179 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14180 }) 14181 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14182 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14183 this.download = webDownloadItem; 14184 }) 14185 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14186 console.log("download failed guid: " + webDownloadItem.getGuid()); 14187 // 序列化失败的下载到一个字节数组。 14188 this.failedData = webDownloadItem.serialize(); 14189 }) 14190 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14191 console.log("download finish guid: " + webDownloadItem.getGuid()); 14192 }) 14193 this.controller.setDownloadDelegate(this.delegate); 14194 } catch (error) { 14195 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14196 } 14197 }) 14198 Button('startDownload') 14199 .onClick(() => { 14200 try { 14201 this.controller.startDownload('https://www.example.com'); 14202 } catch (error) { 14203 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14204 } 14205 }) 14206 Button('resumeDownload') 14207 .onClick(() => { 14208 try { 14209 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14210 } catch (error) { 14211 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14212 } 14213 }) 14214 Button('cancel') 14215 .onClick(() => { 14216 try { 14217 this.download.cancel(); 14218 } catch (error) { 14219 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14220 } 14221 }) 14222 Button('pause') 14223 .onClick(() => { 14224 try { 14225 this.download.pause(); 14226 } catch (error) { 14227 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14228 } 14229 }) 14230 Button('resume') 14231 .onClick(() => { 14232 try { 14233 this.download.resume(); 14234 } catch (error) { 14235 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14236 } 14237 }) 14238 Web({ src: 'www.example.com', controller: this.controller }) 14239 } 14240 } 14241} 14242``` 14243 14244### onDownloadFailed<sup>11+</sup> 14245 14246onDownloadFailed(callback: Callback\<WebDownloadItem>): void 14247 14248下载失败的通知。 14249 14250**系统能力:** SystemCapability.Web.Webview.Core 14251 14252**参数:** 14253 14254| 参数名 | 类型 | 必填 | 说明 | 14255| ------- | ------ | ---- | :------------- | 14256| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载回调失败。 | 14257 14258**示例:** 14259 14260```ts 14261// xxx.ets 14262import { webview } from '@kit.ArkWeb'; 14263import { BusinessError } from '@kit.BasicServicesKit'; 14264 14265@Entry 14266@Component 14267struct WebComponent { 14268 controller: webview.WebviewController = new webview.WebviewController(); 14269 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14270 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14271 failedData: Uint8Array = new Uint8Array(); 14272 14273 build() { 14274 Column() { 14275 Button('setDownloadDelegate') 14276 .onClick(() => { 14277 try { 14278 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14279 console.log("will start a download."); 14280 // 传入一个下载路径,并开始下载。 14281 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14282 }) 14283 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14284 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14285 this.download = webDownloadItem; 14286 }) 14287 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14288 console.log("download failed guid: " + webDownloadItem.getGuid()); 14289 // 序列化失败的下载到一个字节数组。 14290 this.failedData = webDownloadItem.serialize(); 14291 }) 14292 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14293 console.log("download finish guid: " + webDownloadItem.getGuid()); 14294 }) 14295 this.controller.setDownloadDelegate(this.delegate); 14296 } catch (error) { 14297 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14298 } 14299 }) 14300 Button('startDownload') 14301 .onClick(() => { 14302 try { 14303 this.controller.startDownload('https://www.example.com'); 14304 } catch (error) { 14305 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14306 } 14307 }) 14308 Button('resumeDownload') 14309 .onClick(() => { 14310 try { 14311 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14312 } catch (error) { 14313 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14314 } 14315 }) 14316 Button('cancel') 14317 .onClick(() => { 14318 try { 14319 this.download.cancel(); 14320 } catch (error) { 14321 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14322 } 14323 }) 14324 Button('pause') 14325 .onClick(() => { 14326 try { 14327 this.download.pause(); 14328 } catch (error) { 14329 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14330 } 14331 }) 14332 Button('resume') 14333 .onClick(() => { 14334 try { 14335 this.download.resume(); 14336 } catch (error) { 14337 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14338 } 14339 }) 14340 Web({ src: 'www.example.com', controller: this.controller }) 14341 } 14342 } 14343} 14344``` 14345 14346## WebDownloadManager<sup>11+</sup> 14347 14348可以通过该类提供的接口来恢复失败的下载任务。 14349 14350### setDownloadDelegate<sup>11+</sup> 14351 14352static setDownloadDelegate(delegate: WebDownloadDelegate): void 14353 14354设置用于接收从WebDownloadManager触发的下载进度的委托。 14355 14356**系统能力:** SystemCapability.Web.Webview.Core 14357 14358**参数:** 14359 14360| 参数名 | 类型 | 必填 | 说明 | 14361| ---------------| ------- | ---- | ------------- | 14362| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 14363 14364**示例:** 14365 14366```ts 14367// xxx.ets 14368import { webview } from '@kit.ArkWeb'; 14369import { BusinessError } from '@kit.BasicServicesKit'; 14370 14371@Entry 14372@Component 14373struct WebComponent { 14374 controller: webview.WebviewController = new webview.WebviewController(); 14375 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14376 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14377 failedData: Uint8Array = new Uint8Array(); 14378 14379 build() { 14380 Column() { 14381 Button('setDownloadDelegate') 14382 .onClick(() => { 14383 try { 14384 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14385 console.log("will start a download."); 14386 // 传入一个下载路径,并开始下载。 14387 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14388 }) 14389 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14390 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14391 this.download = webDownloadItem; 14392 }) 14393 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14394 console.log("download failed guid: " + webDownloadItem.getGuid()); 14395 // 序列化失败的下载到一个字节数组。 14396 this.failedData = webDownloadItem.serialize(); 14397 }) 14398 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14399 console.log("download finish guid: " + webDownloadItem.getGuid()); 14400 }) 14401 this.controller.setDownloadDelegate(this.delegate); 14402 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14403 } catch (error) { 14404 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14405 } 14406 }) 14407 Button('startDownload') 14408 .onClick(() => { 14409 try { 14410 this.controller.startDownload('https://www.example.com'); 14411 } catch (error) { 14412 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14413 } 14414 }) 14415 Button('resumeDownload') 14416 .onClick(() => { 14417 try { 14418 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14419 } catch (error) { 14420 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14421 } 14422 }) 14423 Button('cancel') 14424 .onClick(() => { 14425 try { 14426 this.download.cancel(); 14427 } catch (error) { 14428 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14429 } 14430 }) 14431 Button('pause') 14432 .onClick(() => { 14433 try { 14434 this.download.pause(); 14435 } catch (error) { 14436 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14437 } 14438 }) 14439 Button('resume') 14440 .onClick(() => { 14441 try { 14442 this.download.resume(); 14443 } catch (error) { 14444 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14445 } 14446 }) 14447 Web({ src: 'www.example.com', controller: this.controller }) 14448 } 14449 } 14450} 14451``` 14452 14453### resumeDownload<sup>11+</sup> 14454 14455static resumeDownload(webDownloadItem: WebDownloadItem): void 14456 14457恢复一个失败的下载任务。 14458 14459**系统能力:** SystemCapability.Web.Webview.Core 14460 14461**参数:** 14462 14463| 参数名 | 类型 | 必填 | 说明 | 14464| ---------------| ------- | ---- | ------------- | 14465| webDownloadItem | [WebDownloadItem](#webdownloaditem11) | 是 | 待恢复的下载任务。 | 14466 14467**错误码:** 14468 14469以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14470 14471| 错误码ID | 错误信息 | 14472| -------- | ------------------------------------- | 14473| 17100018 | No WebDownloadDelegate has been set yet. | 14474 14475**示例:** 14476 14477```ts 14478// xxx.ets 14479import { webview } from '@kit.ArkWeb'; 14480import { BusinessError } from '@kit.BasicServicesKit'; 14481 14482@Entry 14483@Component 14484struct WebComponent { 14485 controller: webview.WebviewController = new webview.WebviewController(); 14486 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14487 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14488 failedData: Uint8Array = new Uint8Array(); 14489 14490 build() { 14491 Column() { 14492 Button('setDownloadDelegate') 14493 .onClick(() => { 14494 try { 14495 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14496 console.log("will start a download."); 14497 // 传入一个下载路径,并开始下载。 14498 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14499 }) 14500 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14501 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14502 this.download = webDownloadItem; 14503 }) 14504 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14505 console.log("download failed guid: " + webDownloadItem.getGuid()); 14506 // 序列化失败的下载到一个字节数组。 14507 this.failedData = webDownloadItem.serialize(); 14508 }) 14509 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14510 console.log("download finish guid: " + webDownloadItem.getGuid()); 14511 }) 14512 this.controller.setDownloadDelegate(this.delegate); 14513 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14514 } catch (error) { 14515 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14516 } 14517 }) 14518 Button('startDownload') 14519 .onClick(() => { 14520 try { 14521 this.controller.startDownload('https://www.example.com'); 14522 } catch (error) { 14523 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14524 } 14525 }) 14526 Button('resumeDownload') 14527 .onClick(() => { 14528 try { 14529 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14530 } catch (error) { 14531 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14532 } 14533 }) 14534 Button('cancel') 14535 .onClick(() => { 14536 try { 14537 this.download.cancel(); 14538 } catch (error) { 14539 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14540 } 14541 }) 14542 Button('pause') 14543 .onClick(() => { 14544 try { 14545 this.download.pause(); 14546 } catch (error) { 14547 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14548 } 14549 }) 14550 Button('resume') 14551 .onClick(() => { 14552 try { 14553 this.download.resume(); 14554 } catch (error) { 14555 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14556 } 14557 }) 14558 Web({ src: 'www.example.com', controller: this.controller }) 14559 } 14560 } 14561} 14562``` 14563 14564## ProxySchemeFilter<sup>15+</sup> 14565 14566使用代理的请求的scheme信息。 14567 14568**系统能力:** SystemCapability.Web.Webview.Core 14569 14570| 名称 | 值 | 说明 | 14571| ------------- | -- |----------------------------------------- | 14572| MATCH_ALL_SCHEMES | 0 |所有的scheme都会使用代理。| 14573| MATCH_HTTP | 1 |HTTP请求会使用代理。| 14574| MATCH_HTTPS | 2 |HTTPS请求会使用代理。| 14575 14576## ProxyConfig<sup>15+</sup> 14577 14578可以通过该类提供的接口对代理进行配置。 14579 14580### insertProxyRule<sup>15+</sup> 14581 14582insertProxyRule(proxyRule: string, schemeFilter?: ProxySchemeFilter): void 14583 14584插入一条代理规则,与schemeFilter匹配的URL都会使用指定代理。如果schemeFilter为空,所有URL都将使用指定代理。 14585 14586**系统能力:** SystemCapability.Web.Webview.Core 14587 14588**参数:** 14589 14590| 参数名 | 类型 | 必填 | 说明 | 14591| ---------------| ------- | ---- | ------------- | 14592| proxyRule | string | 是 | URL要使用的代理。 | 14593| schemeFilter | [ProxySchemeFilter](#proxyschemefilter15) | 否 | 与schemeFilter匹配的URL会使用代理。默认值:MATCH_ALL_SCHEMES | 14594 14595**错误码:** 14596 14597以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14598 14599| 错误码ID | 错误信息 | 14600| -------- | ------------------------------------- | 14601| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14602 14603**示例:** 14604 14605完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14606 14607### insertDirectRule<sup>15+</sup> 14608 14609insertDirectRule(schemeFilter?: ProxySchemeFilter): void 14610 14611插入一条代理规则,指明符合schemeFilter条件的URL将直接连接到服务器。 14612 14613**系统能力:** SystemCapability.Web.Webview.Core 14614 14615**参数:** 14616 14617| 参数名 | 类型 | 必填 | 说明 | 14618| ---------------| ------- | ---- | ------------- | 14619| schemeFilter | [ProxySchemeFilter](#proxyschemefilter15) | 否 | 与schemeFilter匹配的URL会直接与服务器相连。默认值:MATCH_ALL_SCHEMES | 14620 14621**错误码:** 14622 14623以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14624 14625| 错误码ID | 错误信息 | 14626| -------- | ------------------------------------- | 14627| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14628 14629**示例:** 14630 14631完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14632 14633### insertBypassRule<sup>15+</sup> 14634 14635insertBypassRule(bypassRule: string): void 14636 14637插入一条bypass规则,指明哪些URL应该绕过代理并直接连接到服务器。 14638 14639**系统能力:** SystemCapability.Web.Webview.Core 14640 14641**参数:** 14642 14643| 参数名 | 类型 | 必填 | 说明 | 14644| ---------------| ------- | ---- | ------------- | 14645| bypassRule | string | 是 | 与bypassRule匹配的URL会绕过代理。 | 14646 14647**错误码:** 14648 14649以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14650 14651| 错误码ID | 错误信息 | 14652| -------- | ------------------------------------- | 14653| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14654 14655**示例:** 14656 14657完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14658 14659### bypassHostnamesWithoutPeriod<sup>15+</sup> 14660 14661bypassHostnamesWithoutPeriod(): void 14662 14663没有点字符的域名将跳过代理并直接连接到服务器。 14664 14665**系统能力:** SystemCapability.Web.Webview.Core 14666 14667**示例:** 14668 14669完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14670 14671### clearImplicitRules<sup>15+</sup> 14672 14673clearImplicitRules(): void 14674 14675默认情况下,如果某些主机名是本地IP地址或localhost地址,它们会绕过代理。调用此函数以覆盖默认行为,并强制将localhost或本地IP地址通过代理发送。 14676 14677**系统能力:** SystemCapability.Web.Webview.Core 14678 14679**示例:** 14680 14681完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14682 14683### enableReverseBypass<sup>15+</sup> 14684 14685enableReverseBypass(reverse: boolean): void 14686 14687反转bypass规则。 14688 14689**系统能力:** SystemCapability.Web.Webview.Core 14690 14691**参数:** 14692 14693| 参数名 | 类型 | 必填 | 说明 | 14694| ---------------| ------- | ---- | ------------- | 14695| reverse | boolean | 是 | 参数值默认是false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 | 14696 14697**错误码:** 14698 14699以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14700 14701| 错误码ID | 错误信息 | 14702| -------- | ------------------------------------- | 14703| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14704 14705**示例:** 14706 14707完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14708 14709### getBypassRules<sup>15+</sup> 14710 14711getBypassRules(): Array\<string\> 14712 14713获取不使用代理的URL列表。 14714 14715**系统能力:** SystemCapability.Web.Webview.Core 14716 14717**返回值:** 14718 14719| 类型 | 说明 | 14720| ------ | ------------------------- | 14721| Array\<string\> | 不使用代理的URL列表。 | 14722 14723**示例:** 14724 14725完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14726 14727### getProxyRules<sup>15+</sup> 14728 14729getProxyRules(): Array\<ProxyRule\> 14730 14731获取代理规则。 14732 14733**系统能力:** SystemCapability.Web.Webview.Core 14734 14735**返回值:** 14736 14737| 类型 | 说明 | 14738| ------ | ------------------------- | 14739| Array\<[ProxyRule](#proxyrule15)\> | 代理规则。 | 14740 14741**示例:** 14742 14743完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14744 14745### isReverseBypassEnabled<sup>15+</sup> 14746 14747isReverseBypassEnabled(): boolean 14748 14749获取[enableReverseBypass](#enablereversebypass15)的参数值,详见[enableReverseBypass](#enablereversebypass15)。 14750 14751**系统能力:** SystemCapability.Web.Webview.Core 14752 14753**返回值:** 14754 14755| 类型 | 说明 | 14756| ------ | ------------------------- | 14757| boolean | [enableReverseBypass](#enablereversebypass15)的参数值。参数值为false,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会绕过代理,参数值为true时,表示与[insertBypassRule](#insertbypassrule15)中的bypassRule匹配的URL会使用代理。 | 14758 14759**示例:** 14760 14761完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14762 14763 14764## ProxyRule<sup>15+</sup> 14765 14766[insertProxyRule](#insertproxyrule15)中使用的代理规则。 14767 14768### getSchemeFilter<sup>15+</sup> 14769 14770getSchemeFilter(): ProxySchemeFilter 14771 14772获取代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。 14773 14774**系统能力:** SystemCapability.Web.Webview.Core 14775 14776**返回值:** 14777 14778| 类型 | 说明 | 14779| ------ | ------------------------- | 14780| [ProxySchemeFilter](#proxyschemefilter15) | 代理规则中的[ProxySchemeFilter](#proxyschemefilter15)信息。 | 14781 14782**示例:** 14783 14784完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14785 14786### getUrl<sup>15+</sup> 14787 14788getUrl(): string 14789 14790获取代理规则中的代理的URL信息。 14791 14792**系统能力:** SystemCapability.Web.Webview.Core 14793 14794**返回值:** 14795 14796| 类型 | 说明 | 14797| ------ | ------------------------- | 14798| string | 代理规则中的代理的Url信息。 | 14799 14800**示例:** 14801 14802完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14803 14804## OnProxyConfigChangeCallback<sup>15+</sup> 14805 14806type OnProxyConfigChangeCallback = () => void 14807 14808回调函数,回调成功表示代理设置成功。 14809 14810**系统能力:** SystemCapability.Web.Webview.Core 14811 14812**示例:** 14813 14814完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14815 14816## ProxyController<sup>15+</sup> 14817 14818此类用于为应用程序设置代理。 14819 14820### applyProxyOverride<sup>15+</sup> 14821 14822static applyProxyOverride(proxyConfig: ProxyConfig, callback: OnProxyConfigChangeCallback): void 14823 14824设置应用中所有Web使用的代理配置,与[insertBypassRule](#insertbypassrule15)中插入的bypass规则匹配的URL将不会使用代理,而是直接向URL指定的源地址发起请求。代理设置成功后,不保证网络连接后会立即使用新的代理设置,在加载页面之前请等待监听器触发,这个监听器将在UI线程上被调用。 14825 14826**系统能力:** SystemCapability.Web.Webview.Core 14827 14828**参数:** 14829 14830| 参数名 | 类型 | 必填 | 说明 | 14831| ---------------| ------- | ---- | ------------- | 14832| proxyConfig | [ProxyConfig](#proxyconfig15) | 是 | 对代理的配置。 | 14833| callback | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15) | 是 | 代理设置成功的回调。 | 14834 14835**错误码:** 14836 14837以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14838 14839| 错误码ID | 错误信息 | 14840| -------- | ------------------------------------- | 14841| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14842 14843**示例:** 14844 14845完整示例代码参考[removeProxyOverride](#removeproxyoverride15)。 14846 14847### removeProxyOverride<sup>15+</sup> 14848 14849static removeProxyOverride(callback: OnProxyConfigChangeCallback): void 14850 14851移除代理配置。移除代理配置后,不保证网络连接后会立即使用新的代理设置,在加载页面之前等待监听器,这个监听器将在UI线程上被调用。 14852 14853**系统能力:** SystemCapability.Web.Webview.Core 14854 14855**参数:** 14856 14857| 参数名 | 类型 | 必填 | 说明 | 14858| ---------------| ------- | ---- | ------------- | 14859| callback | [OnProxyConfigChangeCallback](#onproxyconfigchangecallback15) | 是 | 代理设置成功的回调。 | 14860 14861**错误码:** 14862 14863以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)说明文档。 14864 14865| 错误码ID | 错误信息 | 14866| -------- | ------------------------------------- | 14867| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14868 14869**示例:** 14870 14871```ts 14872// xxx.ets 14873import { webview } from '@kit.ArkWeb'; 14874import { BusinessError } from '@kit.BasicServicesKit'; 14875 14876@Entry 14877@Component 14878struct WebComponent { 14879 controller: webview.WebviewController = new webview.WebviewController(); 14880 proxyRules: webview.ProxyRule[] = []; 14881 14882 build() { 14883 Row() { 14884 Column() { 14885 Button("applyProxyOverride").onClick(()=>{ 14886 let proxyConfig:webview.ProxyConfig = new webview.ProxyConfig(); 14887 //优先使用第一个代理配置https://proxy.XXX.com 14888 //代理失败后会回落到直连服务器insertDirectRule 14889 try { 14890 proxyConfig.insertProxyRule("https://proxy.XXX.com", webview.ProxySchemeFilter.MATCH_ALL_SCHEMES); 14891 } catch (error) { 14892 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14893 } 14894 try { 14895 proxyConfig.insertDirectRule(webview.ProxySchemeFilter.MATCH_HTTP); 14896 } catch (error) { 14897 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14898 } 14899 try { 14900 proxyConfig.insertBypassRule("*.example.com"); 14901 } catch (error) { 14902 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14903 } 14904 proxyConfig.clearImplicitRules(); 14905 proxyConfig.bypassHostnamesWithoutPeriod(); 14906 try { 14907 proxyConfig.enableReverseBypass(true); 14908 } catch (error) { 14909 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14910 } 14911 let bypassRules = proxyConfig.getBypassRules(); 14912 for (let i = 0; i < bypassRules.length; i++) { 14913 console.log("bypassRules: " + bypassRules[i]); 14914 } 14915 this.proxyRules = proxyConfig.getProxyRules(); 14916 for (let i = 0; i < this.proxyRules.length; i++) { 14917 console.log("SchemeFiletr: " + this.proxyRules[i].getSchemeFilter()); 14918 console.log("Url: " + this.proxyRules[i].getUrl()); 14919 } 14920 let isReverseBypassRule = proxyConfig.isReverseBypassEnabled(); 14921 console.log("isReverseBypassRules: " + isReverseBypassRule); 14922 try { 14923 webview.ProxyController.applyProxyOverride(proxyConfig, () => { 14924 console.log("PROXYCONTROLLER proxy changed"); 14925 }); 14926 } catch (error) { 14927 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14928 } 14929 }) 14930 Button("loadUrl-https").onClick(()=>{ 14931 this.controller.loadUrl("https://www.example.com") 14932 }) 14933 Button("loadUrl-http").onClick(()=>{ 14934 this.controller.loadUrl("http://www.example.com") 14935 }) 14936 Button("removeProxyOverride").onClick(()=>{ 14937 try { 14938 webview.ProxyController.removeProxyOverride(() => { 14939 console.log("PROXYCONTROLLER proxy changed"); 14940 }); 14941 } catch (error) { 14942 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14943 } 14944 }) 14945 Web({ src: 'www.example.com', controller: this.controller}) 14946 } 14947 .width('100%') 14948 } 14949 .height('100%') 14950 } 14951} 14952 14953``` 14954 14955## WebHttpBodyStream<sup>12+</sup> 14956 14957POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。 14958 14959### initialize<sup>12+</sup> 14960 14961initialize(): Promise\<void\> 14962 14963初始化WebHttpBodyStream。 14964 14965**系统能力:** SystemCapability.Web.Webview.Core 14966 14967**返回值:** 14968 14969| 类型 | 说明 | 14970| ------ | ------------------------- | 14971| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 | 14972 14973**错误码:** 14974 14975以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14976 14977| 错误码ID | 错误信息 | 14978| -------- | ------------------------------------- | 14979| 17100022 | Failed to initialize the HTTP body stream. | 14980 14981**示例:** 14982 14983```ts 14984// xxx.ets 14985import { webview } from '@kit.ArkWeb'; 14986import { BusinessError } from '@kit.BasicServicesKit'; 14987import { buffer } from '@kit.ArkTS'; 14988import { WebNetErrorList } from '@ohos.web.netErrorList' 14989 14990@Entry 14991@Component 14992struct WebComponent { 14993 controller: webview.WebviewController = new webview.WebviewController(); 14994 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 14995 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 14996 14997 build() { 14998 Column() { 14999 Button('postUrl') 15000 .onClick(() => { 15001 try { 15002 let postData = buffer.from(this.htmlData); 15003 this.controller.postUrl('https://www.example.com', postData.buffer); 15004 } catch (error) { 15005 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15006 } 15007 }) 15008 Web({ src: 'https://www.example.com', controller: this.controller }) 15009 .onControllerAttached(() => { 15010 try { 15011 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 15012 console.log("[schemeHandler] onRequestStart"); 15013 try { 15014 let stream = request.getHttpBodyStream(); 15015 if (stream) { 15016 stream.initialize().then(() => { 15017 if (!stream) { 15018 return; 15019 } 15020 console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize()); 15021 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 15022 console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked()); 15023 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 15024 console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory()); 15025 stream.read(stream.getSize()).then((buffer) => { 15026 if (!stream) { 15027 return; 15028 } 15029 console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength); 15030 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 15031 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 15032 }).catch((error: BusinessError) => { 15033 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 15034 }) 15035 }).catch((error: BusinessError) => { 15036 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 15037 }) 15038 } else { 15039 console.log("[schemeHandler] onRequestStart has no http body stream"); 15040 } 15041 } catch (error) { 15042 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15043 } 15044 15045 return false; 15046 }) 15047 15048 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 15049 console.log("[schemeHandler] onRequestStop"); 15050 }); 15051 15052 this.controller.setWebSchemeHandler('https', this.schemeHandler); 15053 } catch (error) { 15054 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15055 } 15056 }) 15057 .javaScriptAccess(true) 15058 .domStorageAccess(true) 15059 } 15060 } 15061} 15062 15063``` 15064 15065### read<sup>12+</sup> 15066 15067read(size: number): Promise\<ArrayBuffer\> 15068 15069读取WebHttpBodyStream中的数据。 15070 15071**系统能力:** SystemCapability.Web.Webview.Core 15072 15073**参数:** 15074 15075| 参数名 | 类型 | 必填 | 说明 | 15076| --------| ------- | ---- | ---------------------------| 15077| size | number | 是 | 读取WebHttpBodyStream中的字节数。 | 15078 15079**返回值:** 15080 15081| 类型 | 说明 | 15082| ------ | ------------------------- | 15083| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 | 15084 15085**错误码:** 15086 15087以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15088 15089| 错误码ID | 错误信息 | 15090| -------- | ------------------------------------- | 15091| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 15092 15093**示例:** 15094 15095完整示例代码参考[initialize](#initialize12)。 15096 15097### getSize<sup>12+</sup> 15098 15099getSize(): number 15100 15101获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。 15102 15103**系统能力:** SystemCapability.Web.Webview.Core 15104 15105**返回值:** 15106 15107| 类型 | 说明 | 15108| ------ | ------------------------- | 15109| number | 获取WebHttpBodyStream中的数据大小。 | 15110 15111**示例:** 15112 15113完整示例代码参考[initialize](#initialize12)。 15114 15115### getPosition<sup>12+</sup> 15116 15117getPosition(): number 15118 15119读取WebHttpBodyStream中当前的读取位置。 15120 15121**系统能力:** SystemCapability.Web.Webview.Core 15122 15123**返回值:** 15124 15125| 类型 | 说明 | 15126| ------ | ------------------------- | 15127| number | WebHttpBodyStream中当前的读取位置。 | 15128 15129**示例:** 15130 15131完整示例代码参考[initialize](#initialize12)。 15132 15133### isChunked<sup>12+</sup> 15134 15135isChunked(): boolean 15136 15137WebHttpBodyStream是否采用分块传输。 15138 15139**系统能力:** SystemCapability.Web.Webview.Core 15140 15141**返回值:** 15142 15143| 类型 | 说明 | 15144| ------ | ------------------------- | 15145| boolean | WebHttpBodyStream是否采用分块传输。 | 15146 15147**示例:** 15148 15149完整示例代码参考[initialize](#initialize12)。 15150 15151### isEof<sup>12+</sup> 15152 15153isEof(): boolean 15154 15155判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。 15156 15157**系统能力:** SystemCapability.Web.Webview.Core 15158 15159**返回值:** 15160 15161| 类型 | 说明 | 15162| ------ | ------------------------- | 15163| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 | 15164 15165**示例:** 15166 15167完整示例代码参考[initialize](#initialize12)。 15168 15169### isInMemory<sup>12+</sup> 15170 15171isInMemory(): boolean 15172 15173判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。 15174 15175**系统能力:** SystemCapability.Web.Webview.Core 15176 15177**返回值:** 15178 15179| 类型 | 说明 | 15180| ------ | ------------------------- | 15181| boolean | WebHttpBodyStream中的上传数据是否在内存中。 | 15182 15183**示例:** 15184 15185完整示例代码参考[initialize](#initialize12)。 15186 15187## WebSchemeHandlerRequest<sup>12+</sup> 15188 15189通过WebSchemeHandler拦截到的请求。 15190 15191### getHeader<sup>12+</sup> 15192 15193getHeader(): Array\<WebHeader\> 15194 15195获取资源请求头信息。 15196 15197**系统能力:** SystemCapability.Web.Webview.Core 15198 15199**返回值:** 15200 15201| 类型 | 说明 | 15202| -------------------------- | ---------- | 15203| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 | 15204 15205**示例:** 15206 15207完整示例代码参考[onRequestStart](#onrequeststart12)。 15208 15209### getRequestUrl<sup>12+</sup> 15210 15211getRequestUrl(): string 15212 15213获取资源请求的URL信息。 15214 15215**系统能力:** SystemCapability.Web.Webview.Core 15216 15217**返回值:** 15218 15219| 类型 | 说明 | 15220| ------ | ------------- | 15221| string | 返回资源请求的URL信息。 | 15222 15223**示例:** 15224 15225完整示例代码参考[onRequestStart](#onrequeststart12)。 15226 15227### getRequestMethod<sup>12+</sup> 15228 15229getRequestMethod(): string 15230 15231获取请求方法。 15232 15233**系统能力:** SystemCapability.Web.Webview.Core 15234 15235**返回值:** 15236 15237| 类型 | 说明 | 15238| ------ | ------------- | 15239| string | 返回请求方法。 | 15240 15241**示例:** 15242 15243完整示例代码参考[onRequestStart](#onrequeststart12)。 15244 15245### getReferrer<sup>12+</sup> 15246 15247getReferrer(): string 15248 15249获取referrer。 15250 15251**系统能力:** SystemCapability.Web.Webview.Core 15252 15253**返回值:** 15254 15255| 类型 | 说明 | 15256| ------ | ------------- | 15257| string | 获取到的referrer。 | 15258 15259**示例:** 15260 15261完整示例代码参考[onRequestStart](#onrequeststart12)。 15262 15263### isMainFrame<sup>12+</sup> 15264 15265isMainFrame(): boolean 15266 15267判断资源请求是否为主frame。 15268 15269**系统能力:** SystemCapability.Web.Webview.Core 15270 15271**返回值:** 15272 15273| 类型 | 说明 | 15274| ------ | ------------- | 15275| boolean | 判断资源请求是否为主frame。 | 15276 15277**示例:** 15278 15279完整示例代码参考[onRequestStart](#onrequeststart12)。 15280 15281### hasGesture<sup>12+</sup> 15282 15283hasGesture(): boolean 15284 15285获取资源请求是否与手势(如点击)相关联。 15286 15287**系统能力:** SystemCapability.Web.Webview.Core 15288 15289**返回值:** 15290 15291| 类型 | 说明 | 15292| ------ | ------------- | 15293| boolean | 返回资源请求是否与手势(如点击)相关联。 | 15294 15295**示例:** 15296 15297完整示例代码参考[onRequestStart](#onrequeststart12)。 15298 15299### getHttpBodyStream<sup>12+</sup> 15300 15301getHttpBodyStream(): WebHttpBodyStream | null 15302 15303获取资源请求中的WebHttpBodyStream。 15304 15305**系统能力:** SystemCapability.Web.Webview.Core 15306 15307**返回值:** 15308 15309| 类型 | 说明 | 15310| ------ | ------------- | 15311| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 | 15312 15313**示例:** 15314 15315完整示例代码参考[onRequestStart](#onrequeststart12)。 15316 15317### getRequestResourceType<sup>12+</sup> 15318 15319getRequestResourceType(): WebResourceType 15320 15321获取资源请求的资源类型。 15322 15323**系统能力:** SystemCapability.Web.Webview.Core 15324 15325**返回值:** 15326 15327| 类型 | 说明 | 15328| ------ | ------------- | 15329| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 | 15330 15331**示例:** 15332 15333完整示例代码参考[onRequestStart](#onrequeststart12)。 15334 15335### getFrameUrl<sup>12+</sup> 15336 15337getFrameUrl(): string 15338 15339获取触发此请求的Frame的URL。 15340 15341**系统能力:** SystemCapability.Web.Webview.Core 15342 15343**返回值:** 15344 15345| 类型 | 说明 | 15346| ------ | ------------- | 15347| string | 返回触发此请求的Frame的URL。 | 15348 15349**示例:** 15350 15351完整示例代码参考[onRequestStart](#onrequeststart12)。 15352 15353## WebSchemeHandlerResponse<sup>12+</sup> 15354 15355请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。 15356 15357### constructor<sup>12+</sup> 15358 15359constructor() 15360 15361Response的构造函数。 15362 15363**系统能力:** SystemCapability.Web.Webview.Core 15364 15365**示例:** 15366 15367```ts 15368// xxx.ets 15369import { webview } from '@kit.ArkWeb'; 15370import { BusinessError } from '@kit.BasicServicesKit'; 15371import { WebNetErrorList } from '@ohos.web.netErrorList'; 15372 15373@Entry 15374@Component 15375struct WebComponent { 15376 controller: webview.WebviewController = new webview.WebviewController(); 15377 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 15378 15379 build() { 15380 Column() { 15381 Button('response').onClick(() => { 15382 let response = new webview.WebSchemeHandlerResponse(); 15383 try { 15384 response.setUrl("http://www.example.com") 15385 response.setStatus(200) 15386 response.setStatusText("OK") 15387 response.setMimeType("text/html") 15388 response.setEncoding("utf-8") 15389 response.setHeaderByName("header1", "value1", false) 15390 response.setNetErrorCode(WebNetErrorList.NET_OK) 15391 console.log("[schemeHandler] getUrl:" + response.getUrl()) 15392 console.log("[schemeHandler] getStatus:" + response.getStatus()) 15393 console.log("[schemeHandler] getStatusText:" + response.getStatusText()) 15394 console.log("[schemeHandler] getMimeType:" + response.getMimeType()) 15395 console.log("[schemeHandler] getEncoding:" + response.getEncoding()) 15396 console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1")) 15397 console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode()) 15398 15399 } catch (error) { 15400 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15401 } 15402 }) 15403 Web({ src: 'https://www.example.com', controller: this.controller }) 15404 } 15405 } 15406} 15407 15408``` 15409 15410### setUrl<sup>12+</sup> 15411 15412setUrl(url: string): void 15413 15414给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。 15415 15416**系统能力:** SystemCapability.Web.Webview.Core 15417 15418**参数:** 15419 15420| 参数名 | 类型 | 必填 | 说明 | 15421| --------| ------- | ---- | ---------------------------| 15422| url | string | 是 | 即将要跳转的URL。 | 15423 15424**示例:** 15425 15426示例完整示例代码参考[constructor](#constructor12)。 15427 15428**错误码:** 15429 15430以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15431 15432| 错误码ID | 错误信息 | 15433| -------- | ----------------------- | 15434| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15435 15436### setNetErrorCode<sup>12+</sup> 15437 15438setNetErrorCode(code: WebNetErrorList): void 15439 15440给当前的Response设置网络错误码。 15441 15442**系统能力:** SystemCapability.Web.Webview.Core 15443 15444**参数:** 15445 15446| 参数名 | 类型 | 必填 | 说明 | 15447| --------| ------- | ---- | ---------------------------| 15448| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 15449 15450**错误码:** 15451 15452以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15453 15454| 错误码ID | 错误信息 | 15455| -------- | ----------------------- | 15456| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 15457 15458**示例:** 15459 15460示例完整示例代码参考[constructor](#constructor12)。 15461 15462### setStatus<sup>12+</sup> 15463 15464setStatus(code: number): void 15465 15466给当前的Response设置HTTP状态码。 15467 15468**系统能力:** SystemCapability.Web.Webview.Core 15469 15470**参数:** 15471 15472| 参数名 | 类型 | 必填 | 说明 | 15473| --------| ------- | ---- | ---------------------------| 15474| code | number | 是 | Http状态码。 | 15475 15476**错误码:** 15477 15478以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15479 15480| 错误码ID | 错误信息 | 15481| -------- | ----------------------- | 15482| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15483 15484**示例:** 15485 15486示例完整示例代码参考[constructor](#constructor12)。 15487 15488### setStatusText<sup>12+</sup> 15489 15490setStatusText(text: string): void 15491 15492给当前的Response设置状态文本。 15493 15494**系统能力:** SystemCapability.Web.Webview.Core 15495 15496**参数:** 15497 15498| 参数名 | 类型 | 必填 | 说明 | 15499| --------| ------- | ---- | ---------------------------| 15500| text | string | 是 | 状态文本。 | 15501 15502**错误码:** 15503 15504以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15505 15506| 错误码ID | 错误信息 | 15507| -------- | ----------------------- | 15508| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15509 15510**示例:** 15511 15512示例完整示例代码参考[constructor](#constructor12)。 15513 15514### setMimeType<sup>12+</sup> 15515 15516setMimeType(type: string): void 15517 15518给当前的Response设置媒体类型。 15519 15520**系统能力:** SystemCapability.Web.Webview.Core 15521 15522**参数:** 15523 15524| 参数名 | 类型 | 必填 | 说明 | 15525| --------| ------- | ---- | ---------------------------| 15526| type | string | 是 | 媒体类型。 | 15527 15528**错误码:** 15529 15530以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15531 15532| 错误码ID | 错误信息 | 15533| -------- | ----------------------- | 15534| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15535 15536**示例:** 15537 15538示例完整示例代码参考[constructor](#constructor12)。 15539 15540### setEncoding<sup>12+</sup> 15541 15542setEncoding(encoding: string): void 15543 15544给当前的Response设置字符集。 15545 15546**系统能力:** SystemCapability.Web.Webview.Core 15547 15548**参数:** 15549 15550| 参数名 | 类型 | 必填 | 说明 | 15551| --------| ------- | ---- | ---------------------------| 15552| encoding | string | 是 | 字符集。 | 15553 15554**错误码:** 15555 15556以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15557 15558| 错误码ID | 错误信息 | 15559| -------- | ----------------------- | 15560| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15561 15562**示例:** 15563 15564示例完整示例代码参考[constructor](#constructor12)。 15565 15566### setHeaderByName<sup>12+</sup> 15567 15568setHeaderByName(name: string, value: string, overwrite: boolean): void 15569 15570给当前的Response设置头信息。 15571 15572**系统能力:** SystemCapability.Web.Webview.Core 15573 15574**参数:** 15575 15576| 参数名 | 类型 | 必填 | 说明 | 15577| --------| ------- | ---- | ---------------------------| 15578| name | string | 是 | 头部(header)的名称。 | 15579| value | string | 是 | 头部(header)的值。 | 15580| overwrite | boolean | 是 | 如果为true,将覆盖现有的头部,否则不覆盖。 | 15581 15582**错误码:** 15583 15584以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15585 15586| 错误码ID | 错误信息 | 15587| -------- | ----------------------- | 15588| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 15589 15590**示例:** 15591 15592示例完整示例代码参考[constructor](#constructor12)。 15593 15594### getUrl<sup>12+</sup> 15595 15596getUrl(): string 15597 15598获取重定向或由于HSTS而更改后的URL。 15599风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 15600 15601**系统能力:** SystemCapability.Web.Webview.Core 15602 15603**返回值:** 15604 15605| 类型 | 说明 | 15606| ------- | --------------------------------------- | 15607| string | 获取经过重定向或由于HSTS而更改后的URL。| 15608 15609**示例:** 15610 15611示例完整示例代码参考[constructor](#constructor12)。 15612 15613### getNetErrorCode<sup>12+</sup> 15614 15615getNetErrorCode(): WebNetErrorList 15616 15617获取Response的网络错误码。 15618 15619**系统能力:** SystemCapability.Web.Webview.Core 15620 15621**返回值:** 15622 15623| 类型 | 说明 | 15624| ------- | --------------------------------------- | 15625| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。| 15626 15627**示例:** 15628 15629示例完整示例代码参考[constructor](#constructor12)。 15630 15631### getStatus<sup>12+</sup> 15632 15633getStatus(): number 15634 15635获取Response的Http状态码。 15636 15637**系统能力:** SystemCapability.Web.Webview.Core 15638 15639**返回值:** 15640 15641| 类型 | 说明 | 15642| ------- | --------------------------------------- | 15643| number | 获取Response的Http状态码。| 15644 15645**示例:** 15646 15647示例完整示例代码参考[constructor](#constructor12)。 15648 15649### getStatusText<sup>12+</sup> 15650 15651getStatusText(): string 15652 15653获取Response的状态文本。 15654 15655**系统能力:** SystemCapability.Web.Webview.Core 15656 15657**返回值:** 15658 15659| 类型 | 说明 | 15660| ------- | --------------------------------------- | 15661| string | 状态文本。| 15662 15663**示例:** 15664 15665示例完整示例代码参考[constructor](#constructor12)。 15666 15667### getMimeType<sup>12+</sup> 15668 15669getMimeType(): string 15670 15671获取Response的媒体类型。 15672 15673**系统能力:** SystemCapability.Web.Webview.Core 15674 15675**返回值:** 15676 15677| 类型 | 说明 | 15678| ------- | --------------------------------------- | 15679| string | 媒体类型。| 15680 15681**示例:** 15682 15683示例完整示例代码参考[constructor](#constructor12)。 15684 15685### getEncoding<sup>12+</sup> 15686 15687getEncoding(): string 15688 15689获取Response的字符集。 15690 15691**系统能力:** SystemCapability.Web.Webview.Core 15692 15693**返回值:** 15694 15695| 类型 | 说明 | 15696| ------- | --------------------------------------- | 15697| string | 字符集。| 15698 15699**示例:** 15700 15701示例完整示例代码参考[constructor](#constructor12)。 15702 15703### getHeaderByName<sup>12+</sup> 15704 15705getHeaderByName(name: string): string 15706 15707获取Response的字符集。 15708 15709**系统能力:** SystemCapability.Web.Webview.Core 15710 15711**参数:** 15712 15713| 参数名 | 类型 | 必填 | 说明 | 15714| ------- | ---------------- | ---- | -------------------- | 15715| name | string | 是 | 头部(header)的名称。 | 15716 15717 15718**返回值:** 15719 15720| 类型 | 说明 | 15721| ------- | --------------------------------------- | 15722| string | 头部(header)的值。| 15723 15724**示例:** 15725 15726示例完整示例代码参考[constructor](#constructor12)。 15727 15728## WebResourceHandler<sup>12+</sup> 15729 15730通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。 15731 15732### didReceiveResponse<sup>12+</sup> 15733 15734didReceiveResponse(response: WebSchemeHandlerResponse): void 15735 15736将构造的响应头传递给被拦截的请求。 15737 15738**系统能力:** SystemCapability.Web.Webview.Core 15739 15740**参数:** 15741 15742| 参数名 | 类型 | 必填 | 说明 | 15743| ---------------| ------- | ---- | ------------- | 15744| response | [WebSchemeHandlerResponse](#webschemehandlerresponse12) | 是 | 该拦截请求的响应。 | 15745 15746**错误码:** 15747 15748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15749 15750| 错误码ID | 错误信息 | 15751| -------- | ------------------------------------- | 15752| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15753| 17100021 | The resource handler is invalid. | 15754 15755**示例:** 15756 15757示例请参考[OnRequestStart](#onrequeststart12)。 15758 15759### didReceiveResponseBody<sup>12+</sup> 15760 15761didReceiveResponseBody(data: ArrayBuffer): void 15762 15763将构造的响应体传递给被拦截的请求。 15764 15765**系统能力:** SystemCapability.Web.Webview.Core 15766 15767**参数:** 15768 15769| 参数名 | 类型 | 必填 | 说明 | 15770| ---------------| ------- | ---- | ------------- | 15771| data | ArrayBuffer | 是 | 响应体数据。 | 15772 15773**错误码:** 15774 15775以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15776 15777| 错误码ID | 错误信息 | 15778| -------- | ------------------------------------- | 15779| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15780| 17100021 | The resource handler is invalid. | 15781 15782**示例:** 15783 15784示例请参考[OnRequestStart](#onrequeststart12)。 15785 15786### didFinish<sup>12+</sup> 15787 15788didFinish(): void 15789 15790通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15791 15792**系统能力:** SystemCapability.Web.Webview.Core 15793 15794**错误码:** 15795 15796以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15797 15798| 错误码ID | 错误信息 | 15799| -------- | ------------------------------------- | 15800| 17100021 | The resource handler is invalid. | 15801 15802**示例:** 15803 15804示例请参考[OnRequestStart](#onrequeststart12)。 15805 15806### didFail<sup>12+</sup> 15807 15808didFail(code: WebNetErrorList): void 15809 15810通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15811 15812**系统能力:** SystemCapability.Web.Webview.Core 15813 15814**参数:** 15815 15816| 参数名 | 类型 | 必填 | 说明 | 15817| --------| ------- | ---- | ---------------------------| 15818| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 15819 15820**错误码:** 15821 15822以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15823 15824| 错误码ID | 错误信息 | 15825| -------- | ------------------------------------- | 15826| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15827| 17100021 | The resource handler is invalid. | 15828 15829**系统能力:** SystemCapability.Web.Webview.Core 15830 15831**示例:** 15832 15833示例请参考[OnRequestStart](#onrequeststart12)。 15834 15835## WebSchemeHandler<sup>12+</sup> 15836 15837用于拦截指定scheme的请求的拦截器。 15838 15839### onRequestStart<sup>12+</sup> 15840 15841onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void 15842 15843当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。 15844 15845**系统能力:** SystemCapability.Web.Webview.Core 15846 15847**参数**: 15848 15849| 参数名 | 类型 | 必填 | 说明 | 15850| -------- | -------------------- | ---- | ---------- | 15851| callback | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 | 15852 15853**错误码:** 15854 15855以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15856 15857| 错误码ID | 错误信息 | 15858| -------- | ------------------------------------- | 15859| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 15860 15861**示例:** 15862 15863```ts 15864// xxx.ets 15865import { webview } from '@kit.ArkWeb'; 15866import { BusinessError } from '@kit.BasicServicesKit'; 15867import { buffer } from '@kit.ArkTS'; 15868import { WebNetErrorList } from '@ohos.web.netErrorList'; 15869 15870@Entry 15871@Component 15872struct WebComponent { 15873 controller: webview.WebviewController = new webview.WebviewController(); 15874 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 15875 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 15876 15877 build() { 15878 Column() { 15879 Web({ src: 'https://www.example.com', controller: this.controller }) 15880 .onControllerAttached(() => { 15881 try { 15882 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 15883 console.log("[schemeHandler] onRequestStart"); 15884 try { 15885 console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl()); 15886 console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod()); 15887 console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer()); 15888 console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame()); 15889 console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture()); 15890 console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length); 15891 console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType()); 15892 console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl()); 15893 let header = request.getHeader(); 15894 for (let i = 0; i < header.length; i++) { 15895 console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue); 15896 } 15897 let stream = request.getHttpBodyStream(); 15898 if (stream) { 15899 console.log("[schemeHandler] onRequestStart has http body stream"); 15900 } else { 15901 console.log("[schemeHandler] onRequestStart has no http body stream"); 15902 } 15903 } catch (error) { 15904 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15905 } 15906 15907 if (request.getRequestUrl().endsWith("example.com")) { 15908 return false; 15909 } 15910 15911 let response = new webview.WebSchemeHandlerResponse(); 15912 try { 15913 response.setNetErrorCode(WebNetErrorList.NET_OK); 15914 response.setStatus(200); 15915 response.setStatusText("OK"); 15916 response.setMimeType("text/html"); 15917 response.setEncoding("utf-8"); 15918 response.setHeaderByName("header1", "value1", false); 15919 } catch (error) { 15920 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15921 } 15922 15923 // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。 15924 let buf = buffer.from(this.htmlData) 15925 try { 15926 if (buf.length == 0) { 15927 console.log("[schemeHandler] length 0"); 15928 resourceHandler.didReceiveResponse(response); 15929 // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail 15930 resourceHandler.didFail(WebNetErrorList.ERR_FAILED); 15931 } else { 15932 console.log("[schemeHandler] length 1"); 15933 resourceHandler.didReceiveResponse(response); 15934 resourceHandler.didReceiveResponseBody(buf.buffer); 15935 resourceHandler.didFinish(); 15936 } 15937 } catch (error) { 15938 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15939 } 15940 return true; 15941 }) 15942 15943 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 15944 console.log("[schemeHandler] onRequestStop"); 15945 }); 15946 15947 this.controller.setWebSchemeHandler('https', this.schemeHandler); 15948 } catch (error) { 15949 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15950 } 15951 }) 15952 .javaScriptAccess(true) 15953 .domStorageAccess(true) 15954 } 15955 } 15956} 15957``` 15958### onRequestStop<sup>12+</sup> 15959 15960onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void 15961 15962当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点: 15963 159641.WebResourceHandler调用didFail或者didFinish。 15965 159662.此请求因为其他原因中断。 15967 15968**系统能力:** SystemCapability.Web.Webview.Core 15969 15970**参数**: 15971 15972| 参数名 | 类型 | 必填 | 说明 | 15973| -------- | -------------------- | ---- | ---------- | 15974| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是 | 对应请求结束的回调函数。 | 15975 15976**错误码:** 15977 15978以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15979 15980| 错误码ID | 错误信息 | 15981| -------- | ------------------------------------- | 15982| 401 | Invalid input parameter. | 15983 15984**示例:** 15985 15986完整示例代码参考[onRequestStart](#onrequeststart12)。 15987 15988## CacheOptions<sup>12+</sup> 15989 15990Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。 15991 15992**系统能力:** SystemCapability.Web.Webview.Core 15993 15994| 名称 | 类型 | 可读 | 可写 |说明 | 15995| ----------- | ------ | -----|------|------------------- | 15996| responseHeaders | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。 | 15997 15998## PlaybackStatus<sup>12+</sup> 15999 16000[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。 16001 16002**系统能力:** SystemCapability.Web.Webview.Core 16003 16004| 名称 | 值 | 说明 | 16005|------|----|------| 16006| PAUSED | 0 | 播放状态为播放状态。 | 16007| PLAYING | 1 | 播放状态为暂停状态。 | 16008 16009## NetworkState<sup>12+<sup> 16010 16011播放器的网络状态。 16012 16013**系统能力:** SystemCapability.Web.Webview.Core 16014 16015| 名称 | 值 | 说明 | 16016|------|----|------| 16017| EMPTY | 0 | 播放器还没有开始下载数据。 | 16018| IDLE | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 | 16019| LOADING | 2 | 播放器正在下载媒体数据。 | 16020| NETWORK_ERROR | 3 | 发生了网络错误。 | 16021 16022## ReadyState<sup>12+<sup> 16023 16024播放器的缓存状态。 16025 16026**系统能力:** SystemCapability.Web.Webview.Core 16027 16028| 名称 | 值 | 说明 | 16029|------|----|------| 16030| HAVE_NOTHING | 0 | 没有缓存。 | 16031| HAVE_METADATA | 1 | 只缓存了媒体元数据。 | 16032| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 | 16033| HAVE_FUTURE_DATA | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 | 16034| HAVE_ENOUGH_DATA | 4 | 缓存了足够的数据,保证播放流畅。 | 16035 16036## MediaError<sup>12+<sup> 16037 16038播放器的错误类型。 16039 16040**系统能力:** SystemCapability.Web.Webview.Core 16041 16042| 名称 | 值 | 说明 | 16043|------|----|------| 16044| NETWORK_ERROR | 1 | 网络错误。 | 16045| FORMAT_ERROR | 2 | 媒体格式错误。 | 16046| DECODE_ERROR | 3 | 解码错误。 | 16047 16048## NativeMediaPlayerHandler<sup>12+<sup> 16049 16050[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。 16051应用通过该对象,将播放器的状态报告给ArkWeb内核。 16052 16053### handleStatusChanged<sup>12+<sup> 16054 16055handleStatusChanged(status: PlaybackStatus): void 16056 16057当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。 16058 16059**系统能力:** SystemCapability.Web.Webview.Core 16060 16061**参数:** 16062 16063| 参数名 | 类型 | 必填 | 说明 | 16064|--------|------|------|------| 16065| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 | 16066 16067**示例:** 16068 16069完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16070 16071### handleVolumeChanged<sup>12+<sup> 16072 16073handleVolumeChanged(volume: number): void 16074 16075当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。 16076 16077**系统能力:** SystemCapability.Web.Webview.Core 16078 16079**参数:** 16080 16081| 参数名 | 类型 | 必填 | 说明 | 16082|--------|------|------|------| 16083| volume | number | 是 | 播放器的音量。 | 16084 16085**示例:** 16086 16087完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16088 16089### handleMutedChanged<sup>12+<sup> 16090 16091handleMutedChanged(muted: boolean): void 16092 16093当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。 16094 16095**系统能力:** SystemCapability.Web.Webview.Core 16096 16097**参数:** 16098 16099| 参数名 | 类型 | 必填 | 说明 | 16100|--------|------|------|------| 16101| muted | boolean | 是 | 当前播放器是否静音。<br>true表示当前播放器静音,false表示当前播放器未静音。 | 16102 16103**示例:** 16104 16105完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16106 16107### handlePlaybackRateChanged<sup>12+<sup> 16108 16109handlePlaybackRateChanged(playbackRate: number): void 16110 16111当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。 16112 16113**系统能力:** SystemCapability.Web.Webview.Core 16114 16115**参数:** 16116 16117| 参数名 | 类型 | 必填 | 说明 | 16118|--------|------|------|------| 16119| playbackRate | number | 是 | 播放速率。 | 16120 16121**示例:** 16122 16123完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16124 16125### handleDurationChanged<sup>12+<sup> 16126 16127handleDurationChanged(duration: number): void 16128 16129当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。 16130 16131**系统能力:** SystemCapability.Web.Webview.Core 16132 16133**参数:** 16134 16135| 参数名 | 类型 | 必填 | 说明 | 16136|--------|------|------|------| 16137| duration | number | 是 | 媒体的总时长。单位: 秒 。 | 16138 16139**示例:** 16140 16141完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16142 16143### handleTimeUpdate<sup>12+<sup> 16144 16145handleTimeUpdate(currentPlayTime: number): void 16146 16147当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。 16148 16149**系统能力:** SystemCapability.Web.Webview.Core 16150 16151**参数:** 16152 16153| 参数名 | 类型 | 必填 | 说明 | 16154|--------|------|------|------| 16155| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。 | 16156 16157**示例:** 16158 16159完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16160 16161### handleBufferedEndTimeChanged<sup>12+<sup> 16162 16163handleBufferedEndTimeChanged(bufferedEndTime: number): void 16164 16165当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。 16166 16167**系统能力:** SystemCapability.Web.Webview.Core 16168 16169**参数:** 16170 16171| 参数名 | 类型 | 必填 | 说明 | 16172|--------|------|------|------| 16173| bufferedEndTime | number | 是 | 媒体缓冲的时长。 | 16174 16175**示例:** 16176 16177完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16178 16179### handleEnded<sup>12+<sup> 16180 16181handleEnded(): void 16182 16183当媒体播放结束时,调用该方法通知给 ArkWeb 内核。 16184 16185**系统能力:** SystemCapability.Web.Webview.Core 16186 16187**示例:** 16188 16189完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16190 16191### handleNetworkStateChanged<sup>12+<sup> 16192 16193handleNetworkStateChanged(state: NetworkState): void 16194 16195当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。 16196 16197**系统能力:** SystemCapability.Web.Webview.Core 16198 16199**参数:** 16200 16201| 参数名 | 类型 | 必填 | 说明 | 16202|--------|------|------|------| 16203| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 | 16204 16205**示例:** 16206 16207完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16208 16209### handleReadyStateChanged<sup>12+<sup> 16210 16211handleReadyStateChanged(state: ReadyState): void 16212 16213当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。 16214 16215**系统能力:** SystemCapability.Web.Webview.Core 16216 16217**参数:** 16218 16219| 参数名 | 类型 | 必填 | 说明 | 16220|--------|------|------|------| 16221| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 | 16222 16223**示例:** 16224 16225完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16226 16227### handleFullscreenChanged<sup>12+<sup> 16228 16229handleFullscreenChanged(fullscreen: boolean): void 16230 16231当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。 16232 16233**系统能力:** SystemCapability.Web.Webview.Core 16234 16235**参数:** 16236 16237| 参数名 | 类型 | 必填 | 说明 | 16238|--------|------|------|------| 16239| fullscreen | boolean | 是 | 是否全屏。<br>true表示全屏,false表示未全屏。 | 16240 16241**示例:** 16242 16243完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16244 16245### handleSeeking<sup>12+<sup> 16246 16247handleSeeking(): void 16248 16249当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。 16250 16251**系统能力:** SystemCapability.Web.Webview.Core 16252 16253**示例:** 16254 16255完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16256 16257### handleSeekFinished<sup>12+<sup> 16258 16259handleSeekFinished(): void 16260 16261当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。 16262 16263**系统能力:** SystemCapability.Web.Webview.Core 16264 16265**示例:** 16266 16267完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16268 16269### handleError<sup>12+<sup> 16270 16271handleError(error: MediaError, errorMessage: string): void 16272 16273当播放器发生错误时, 调用该方法通知 ArkWeb 内核。 16274 16275**系统能力:** SystemCapability.Web.Webview.Core 16276 16277**参数:** 16278 16279| 参数名 | 类型 | 必填 | 说明 | 16280|--------|------|------|------| 16281| error | [MediaError](#mediaerror12) | 是 | 错误类型。 | 16282| errorMessage | string | 是 | 错误的详细描述。 | 16283 16284**示例:** 16285 16286完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16287 16288### handleVideoSizeChanged<sup>12+<sup> 16289 16290handleVideoSizeChanged(width: number, height: number): void 16291 16292当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。 16293 16294**系统能力:** SystemCapability.Web.Webview.Core 16295 16296**参数:** 16297 16298| 参数名 | 类型 | 必填 | 说明 | 16299|--------|------|------|------| 16300| width | number | 是 | 视频的宽。 | 16301| height | number | 是 | 视频的高。 | 16302 16303**示例:** 16304 16305完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16306 16307## SuspendType<sup>12+<sup> 16308 16309表示播放器的挂起类型。 16310 16311**系统能力:** SystemCapability.Web.Webview.Core 16312 16313| 名称 | 值 | 说明 | 16314|------|----|------| 16315| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 | 16316| ENTER_BACKGROUND | 1 | 页面进后台。 | 16317| AUTO_CLEANUP | 2 | 系统自动清理。 | 16318 16319## NativeMediaPlayerBridge<sup>12+<sup> 16320 16321[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。 16322接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。 16323ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。 16324 16325### updateRect<sup>12+<sup> 16326 16327updateRect(x: number, y: number, width: number, height: number): void 16328 16329更新 surface 位置信息。 16330 16331**系统能力:** SystemCapability.Web.Webview.Core 16332 16333**参数:** 16334 16335| 参数名 | 类型 | 必填 | 说明 | 16336|--------|------|------|------| 16337| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 | 16338| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 | 16339| width | number | 是 | surface 的宽度。 | 16340| height | number | 是 | surface 的高度。 | 16341 16342**示例:** 16343 16344完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16345 16346### play<sup>12+<sup> 16347 16348play(): void 16349 16350播放视频。 16351 16352**系统能力:** SystemCapability.Web.Webview.Core 16353 16354**示例:** 16355 16356完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16357 16358### pause<sup>12+<sup> 16359 16360pause(): void 16361 16362暂停播放。 16363 16364**系统能力:** SystemCapability.Web.Webview.Core 16365 16366**示例:** 16367 16368完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16369 16370### seek<sup>12+<sup> 16371 16372seek(targetTime: number): void 16373 16374播放跳转到某个时间点。 16375 16376**系统能力:** SystemCapability.Web.Webview.Core 16377 16378**参数:** 16379 16380| 参数名 | 类型 | 必填 | 说明 | 16381|--------|------|------|------| 16382| targetTime | number | 是 | 单位: 秒。 | 16383 16384**示例:** 16385 16386完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16387 16388### setVolume<sup>12+<sup> 16389 16390setVolume(volume: number): void 16391 16392设置播放器音量值。 16393取值范围: [0, 1.0] 16394 16395**参数:** 16396 16397| 参数名 | 类型 | 必填 | 说明 | 16398|--------|------|------|------| 16399| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 | 16400 16401**系统能力:** SystemCapability.Web.Webview.Core 16402 16403**示例:** 16404 16405完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16406 16407### setMuted<sup>12+<sup> 16408 16409setMuted(muted: boolean): void 16410 16411设置静音状态。 16412 16413**系统能力:** SystemCapability.Web.Webview.Core 16414 16415**参数:** 16416 16417| 参数名 | 类型 | 必填 | 说明 | 16418|--------|------|------|------| 16419| muted | boolean | 是 | 是否静音。<br>true表示静音,false表示未静音。 | 16420 16421**示例:** 16422 16423完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16424 16425### setPlaybackRate<sup>12+<sup> 16426 16427setPlaybackRate(playbackRate: number): void 16428 16429设置播放速度。 16430取值范围: [0, 10.0] 16431 16432**系统能力:** SystemCapability.Web.Webview.Core 16433 16434**参数:** 16435 16436| 参数名 | 类型 | 必填 | 说明 | 16437|--------|------|------|------| 16438| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 | 16439 16440**示例:** 16441 16442完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16443 16444### release<sup>12+<sup> 16445 16446release(): void 16447 16448销毁播放器。 16449 16450**系统能力:** SystemCapability.Web.Webview.Core 16451 16452**示例:** 16453 16454完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16455 16456### enterFullscreen<sup>12+<sup> 16457 16458enterFullscreen(): void 16459 16460播放器进入全屏。 16461 16462**系统能力:** SystemCapability.Web.Webview.Core 16463 16464**示例:** 16465 16466完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16467 16468### exitFullscreen<sup>12+<sup> 16469 16470exitFullscreen(): void 16471 16472播放器退出全屏。 16473 16474**系统能力:** SystemCapability.Web.Webview.Core 16475 16476**示例:** 16477 16478完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16479 16480### resumePlayer<sup>12+<sup> 16481 16482resumePlayer?(): void 16483 16484通知应用重建应用内播放器,并恢复应用内播放器的状态信息。 16485 16486**系统能力:** SystemCapability.Web.Webview.Core 16487 16488**示例:** 16489 16490完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16491 16492### suspendPlayer<sup>12+<sup> 16493 16494suspendPlayer?(type: SuspendType): void 16495 16496通知应用销毁应用内播放器,并保存应用内播放器的状态信息。 16497 16498**系统能力:** SystemCapability.Web.Webview.Core 16499 16500**参数:** 16501 16502| 参数名 | 类型 | 必填 | 说明 | 16503|--------|------|------|------| 16504| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。| 16505 16506**示例:** 16507 16508完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16509 16510## MediaType<sup>12+<sup> 16511 16512表示媒体类型。 16513 16514**系统能力:** SystemCapability.Web.Webview.Core 16515 16516| 名称 | 值 | 说明 | 16517|------|----|------| 16518| VIDEO | 0 | 视频。 | 16519| AUDIO | 1 | 音频。 | 16520 16521## SourceType<sup>12+<sup> 16522 16523表示媒体源的类型。 16524 16525**系统能力:** SystemCapability.Web.Webview.Core 16526 16527| 名称 | 值 | 说明 | 16528|------|----|------| 16529| URL | 0 | 媒体源的类型是 URL 。 | 16530| MSE | 1 | 媒体源的类型是 blob 。 | 16531 16532## MediaSourceInfo<sup>12+<sup> 16533 16534表示媒体源的信息。 16535 16536**系统能力:** SystemCapability.Web.Webview.Core 16537 16538| 名称 | 类型 | 必填 | 说明 | 16539|------|------|------|------| 16540| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 | 16541| source | string | 是 | 媒体源地址。 | 16542| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 | 16543 16544## NativeMediaPlayerSurfaceInfo<sup>12+<sup> 16545 16546[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。 16547 16548**系统能力:** SystemCapability.Web.Webview.Core 16549 16550| 名称 | 类型 | 必填 | 说明 | 16551|------|------|------|------| 16552| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 | 16553| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 | 16554 16555## Preload<sup>12+<sup> 16556 16557播放器预加载媒体数据。 16558 16559**系统能力:** SystemCapability.Web.Webview.Core 16560 16561| 名称 | 值 | 说明 | 16562|------|----|------| 16563| NONE | 0 | 不预加载。 | 16564| METADATA | 1 | 只预加载媒体的元数据。 | 16565| AUTO | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 | 16566 16567## MediaInfo<sup>12+<sup> 16568 16569[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。 16570包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。 16571 16572**系统能力:** SystemCapability.Web.Webview.Core 16573 16574| 名称 | 类型 | 必填 | 说明 | 16575|------|------|------|------| 16576| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。| 16577| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 | 16578| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 | 16579| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 | 16580| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。<br>true表示有,false表示没有。 | 16581| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 | 16582| muted | boolean | 是 | 是否要求静音播放。<br>true表示静音播放,false表示未静音播放。 | 16583| posterUrl | string | 是 | 海报的地址。 | 16584| preload | [Preload](#preload12) | 是 | 是否需要预加载。 | 16585| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 | 16586| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 | 16587 16588 16589## CreateNativeMediaPlayerCallback<sup>12+<sup> 16590 16591type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge 16592 16593[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。 16594一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。 16595 16596**系统能力:** SystemCapability.Web.Webview.Core 16597 16598**参数:** 16599 16600| 参数名 | 类型 | 必填 | 说明 | 16601|--------|------|------|------| 16602| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 | 16603| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 | 16604 16605**返回值:** 16606 16607| 类型 | 说明 | 16608|------|------| 16609| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 | 16610 16611**示例:** 16612 16613完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 16614 16615## OfflineResourceMap<sup>12+</sup> 16616 16617本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。 16618 16619**系统能力:** SystemCapability.Web.Webview.Core 16620 16621| 名称 | 类型 | 可读 | 可写 |说明 | 16622| ----------- | ------ | -----|------|------------------- | 16623| urlList | Array\<string\> | 是 | 是 | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。 | 16624| resource | Uint8Array | 是 | 是 | 本地离线资源的内容。 | 16625| 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。 | 16626| type | [OfflineResourceType](#offlineresourcetype12) | 是 | 是 | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。 | 16627 16628## OfflineResourceType<sup>12+</sup> 16629 16630[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。 16631 16632**系统能力:** SystemCapability.Web.Webview.Core 16633 16634| 名称 | 值 | 说明 | 16635| ------------ | -- |--------------------------------- | 16636| IMAGE | 0 | 图片类型的资源。 | 16637| CSS | 1 | CSS类型的资源。| 16638| CLASSIC_JS | 2 | 通过<script src="" /\>标签加载的Javascript资源。| 16639| MODULE_JS | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。| 16640 16641## WebResourceType<sup>12+</sup> 16642 16643资源请求的资源类型。 16644 16645**系统能力:** SystemCapability.Web.Webview.Core 16646 16647| 名称 | 值 | 说明 | 16648| ------------ | -- |--------------------------------- | 16649| MAIN_FRAME | 0 | 顶层页面。 | 16650| SUB_FRAME | 1 | Frame或Iframe。 | 16651| STYLE_SHEET | 2 | CSS样式表。 | 16652| SCRIPT | 3 | 外部脚本。 | 16653| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 | 16654| FONT_RESOURCE | 5 | 字体。 | 16655| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 | 16656| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 | 16657| MEDIA | 8 | 媒体资源。 | 16658| WORKER | 9 | 专用工作线程的主资源。 | 16659| SHARED_WORKER | 10 | 共享工作线程的主资源。 | 16660| PREFETCH | 11 | 明确的预取请求。 | 16661| FAVICON | 12 | 网站图标。 | 16662| XHR | 13 | XMLHttpRequest。 | 16663| PING | 14 | <a ping\>/sendBeacon的Ping请求。 | 16664| SERVICE_WORKER | 15 | service worker的主资源。 | 16665| CSP_REPORT | 16 | 内容安全策略违规报告。 | 16666| PLUGIN_RESOURCE | 17 | 插件请求的资源。 | 16667| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 | 16668| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 | 16669 16670## RectEvent<sup>12+<sup> 16671 16672矩形定义。 16673 16674**系统能力:** SystemCapability.Web.Webview.Core 16675 16676| 名称 | 类型 | 可读 | 可写 | 说明 | 16677| -------------- | --------- | ---- | ---- | ---------------------------- | 16678| x | number | 是 | 是 | 矩形区域左上角x坐标。 | 16679| y | number | 是 | 是 | 矩形区域左上角y坐标。 | 16680| width | number | 是 | 是 | 矩形的宽度。 | 16681| height | number | 是 | 是 | 矩形的高度。 | 16682 16683## BackForwardCacheSupportedFeatures<sup>12+<sup> 16684 16685选择性允许使用以下特性的页面进入前进后退缓存。完整示例代码参考[enableBackForwardCache](#enablebackforwardcache12)。 16686 16687**系统能力:** SystemCapability.Web.Webview.Core 16688 16689| 名称 | 类型 | 必填 | 说明 | 16690|------|------|------|------| 16691| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存。<br>如果设置为允许,需要维护为同层渲染元素创建的系统控件的生命周期,避免造成泄漏。<br>true:允许,false:不允许。<br>默认值:false。 | 16692| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存。<br>如果设置为允许,需要维护为视频元素创建的系统控件的生命周期,避免造成泄漏。<br>true:允许,false:不允许。<br>默认值:false。| 16693 16694### constructor<sup>12+</sup> 16695 16696constructor() 16697 16698BackForwardCacheOptions的构造函数。 16699 16700**系统能力:** SystemCapability.Web.Webview.Core 16701 16702## BackForwardCacheOptions<sup>12+<sup> 16703 16704前进后退缓存相关设置对象,用来控制Web组件前进后退缓存相关选项。完整示例代码参考[BackForwardCacheOptions](#backforwardcacheoptions12)。 16705 16706**系统能力:** SystemCapability.Web.Webview.Core 16707 16708| 名称 | 类型 | 必填 | 说明 | 16709|------|------|------|------| 16710| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 | 16711| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。| 16712 16713### constructor<sup>12+</sup> 16714 16715constructor() 16716 16717BackForwardCacheOptions的构造函数。 16718 16719**系统能力:** SystemCapability.Web.Webview.Core 16720 16721## AdsBlockManager<sup>12+</sup> 16722 16723通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。 16724 16725### setAdsBlockRules<sup>12+</sup> 16726 16727static setAdsBlockRules(rulesFile: string, replace: boolean): void 16728 16729向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。 16730 16731> **说明:** 16732> 16733> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。 16734 16735**系统能力:** SystemCapability.Web.Webview.Core 16736 16737**参数:** 16738 16739| 参数名 | 类型 | 必填 | 说明 | 16740| ---------- | ------ | ---- | -------------------------------- | 16741| rulesFile | string | 是 | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 | 16742| replace | boolean | 是 | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 | 16743 16744**错误码:** 16745 16746> **说明:** 16747> 16748> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 16749 16750以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16751 16752| 错误码ID | 错误信息 | 16753| -------- | ----------------------- | 16754| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16755| 801 | Capability not supported. | 16756 16757**示例:** 16758 16759```ts 16760// xxx.ets 16761import { webview } from '@kit.ArkWeb'; 16762import { picker, fileUri } from '@kit.CoreFileKit'; 16763 16764// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中 16765@Entry 16766@Component 16767struct WebComponent { 16768 controller: webview.WebviewController = new webview.WebviewController(); 16769 16770 build() { 16771 Row() { 16772 Flex() { 16773 Button({ type: ButtonType.Capsule }) { 16774 Text("setAdsBlockRules") 16775 } 16776 .onClick(() => { 16777 try { 16778 let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions(); 16779 let documentPicker: ESObject = new picker.DocumentViewPicker(); 16780 documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => { 16781 if (documentSelectResult && documentSelectResult.length > 0) { 16782 let fileRealPath = new fileUri.FileUri(documentSelectResult[0]); 16783 console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath); 16784 webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true); 16785 } 16786 }) 16787 } catch (err) { 16788 console.error('DocumentViewPicker.select failed with err:' + err); 16789 } 16790 }) 16791 } 16792 } 16793 } 16794} 16795``` 16796 16797### addAdsBlockDisallowedList<sup>12+</sup> 16798 16799static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16800 16801向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。 16802 16803> **说明:** 16804> 16805> 此接口设置的域名不会持久化,应用重启需要重新设置。 16806> 16807> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。 16808 16809**系统能力:** SystemCapability.Web.Webview.Core 16810 16811**参数:** 16812 16813| 参数名 | 类型 | 必填 | 说明 | 16814| ---------- | ------ | ---- | -------------------------------- | 16815| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16816 16817**错误码:** 16818 16819> **说明:** 16820> 16821> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 16822 16823以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16824 16825| 错误码ID | 错误信息 | 16826| -------- | ----------------------- | 16827| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16828| 801 | Capability not supported. | 16829 16830**示例:** 16831 16832```ts 16833// xxx.ets 16834import { webview } from '@kit.ArkWeb'; 16835 16836// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 16837@Entry 16838@Component 16839struct WebComponent { 16840 main_url: string = 'https://www.example.com'; 16841 text_input_controller: TextInputController = new TextInputController(); 16842 controller: webview.WebviewController = new webview.WebviewController(); 16843 @State input_text: string = 'https://www.example.com'; 16844 16845 build() { 16846 Column() { 16847 Row() { 16848 Flex() { 16849 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16850 .id("input_url") 16851 .height(40) 16852 .margin(5) 16853 .borderColor(Color.Blue) 16854 .onChange((value: string) => { 16855 this.input_text = value; 16856 }) 16857 16858 Button({type: ButtonType.Capsule}) { Text("Go") } 16859 .onClick(() => { 16860 this.controller.loadUrl(this.input_text); 16861 }) 16862 16863 Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") } 16864 .onClick(() => { 16865 let arrDomainSuffixes = new Array<string>(); 16866 arrDomainSuffixes.push('example.com'); 16867 arrDomainSuffixes.push('abcdefg.cn'); 16868 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes); 16869 }) 16870 } 16871 } 16872 Web({ src: this.main_url, controller: this.controller }) 16873 .onControllerAttached(()=>{ 16874 this.controller.enableAdsBlock(true); 16875 }) 16876 } 16877 } 16878} 16879``` 16880 16881### removeAdsBlockDisallowedList<sup>12+</sup> 16882 16883static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16884 16885从AdsBlockManager的DisallowedList中删除一组域名。 16886 16887> **说明:** 16888> 16889> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 16890 16891**系统能力:** SystemCapability.Web.Webview.Core 16892 16893**参数:** 16894 16895| 参数名 | 类型 | 必填 | 说明 | 16896| ---------- | ------ | ---- | -------------------------------- | 16897| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16898 16899**错误码:** 16900 16901> **说明:** 16902> 16903> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 16904 16905以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16906 16907| 错误码ID | 错误信息 | 16908| -------- | ----------------------- | 16909| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16910| 801 | Capability not supported. | 16911 16912**示例:** 16913 16914```ts 16915// xxx.ets 16916import { webview } from '@kit.ArkWeb'; 16917 16918// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 16919@Entry 16920@Component 16921struct WebComponent { 16922 main_url: string = 'https://www.example.com'; 16923 text_input_controller: TextInputController = new TextInputController(); 16924 controller: webview.WebviewController = new webview.WebviewController(); 16925 @State input_text: string = 'https://www.example.com'; 16926 16927 build() { 16928 Column() { 16929 Row() { 16930 Flex() { 16931 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16932 .id("input_url") 16933 .height(40) 16934 .margin(5) 16935 .borderColor(Color.Blue) 16936 .onChange((value: string) => { 16937 this.input_text = value; 16938 }) 16939 16940 Button({type: ButtonType.Capsule}) { Text("Go") } 16941 .onClick(() => { 16942 this.controller.loadUrl(this.input_text); 16943 }) 16944 16945 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") } 16946 .onClick(() => { 16947 let arrDomainSuffixes = new Array<string>(); 16948 arrDomainSuffixes.push('example.com'); 16949 arrDomainSuffixes.push('abcdefg.cn'); 16950 webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes); 16951 }) 16952 } 16953 } 16954 Web({ src: this.main_url, controller: this.controller }) 16955 .onControllerAttached(()=>{ 16956 this.controller.enableAdsBlock(true); 16957 }) 16958 } 16959 } 16960} 16961``` 16962 16963### clearAdsBlockDisallowedList<sup>12+</sup> 16964 16965static clearAdsBlockDisallowedList(): void 16966 16967清空AdsBlockManager的DisallowedList。 16968 16969**系统能力:** SystemCapability.Web.Webview.Core 16970 16971**错误码:** 16972 16973> **说明:** 16974> 16975> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 16976 16977以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16978 16979| 错误码ID | 错误信息 | 16980| -------- | ----------------------- | 16981| 801 | Capability not supported. | 16982 16983**示例:** 16984 16985```ts 16986// xxx.ets 16987import { webview } from '@kit.ArkWeb'; 16988 16989@Entry 16990@Component 16991struct WebComponent { 16992 main_url: string = 'https://www.example.com'; 16993 text_input_controller: TextInputController = new TextInputController(); 16994 controller: webview.WebviewController = new webview.WebviewController(); 16995 @State input_text: string = 'https://www.example.com'; 16996 16997 build() { 16998 Column() { 16999 Row() { 17000 Flex() { 17001 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 17002 .id("input_url") 17003 .height(40) 17004 .margin(5) 17005 .borderColor(Color.Blue) 17006 .onChange((value: string) => { 17007 this.input_text = value; 17008 }) 17009 17010 Button({type: ButtonType.Capsule}) { Text("Go") } 17011 .onClick(() => { 17012 this.controller.loadUrl(this.input_text); 17013 }) 17014 17015 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") } 17016 .onClick(() => { 17017 webview.AdsBlockManager.clearAdsBlockDisallowedList(); 17018 }) 17019 } 17020 } 17021 Web({ src: this.main_url, controller: this.controller }) 17022 .onControllerAttached(()=>{ 17023 this.controller.enableAdsBlock(true); 17024 }) 17025 } 17026 } 17027} 17028``` 17029 17030### addAdsBlockAllowedList<sup>12+</sup> 17031 17032static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 17033 17034向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。 17035 17036> **说明:** 17037> 17038> 此接口设置的域名不会持久化,应用重启需要重新设置。 17039> 17040> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。 17041 17042**系统能力:** SystemCapability.Web.Webview.Core 17043 17044**参数:** 17045 17046| 参数名 | 类型 | 必填 | 说明 | 17047| ---------- | ------ | ---- | -------------------------------- | 17048| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 17049 17050**错误码:** 17051 17052> **说明:** 17053> 17054> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 17055 17056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 17057 17058| 错误码ID | 错误信息 | 17059| -------- | ----------------------- | 17060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 17061| 801 | Capability not supported. | 17062 17063**示例:** 17064 17065```ts 17066// xxx.ets 17067import { webview } from '@kit.ArkWeb'; 17068 17069// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 17070@Entry 17071@Component 17072struct WebComponent { 17073 main_url: string = 'https://www.example.com'; 17074 text_input_controller: TextInputController = new TextInputController(); 17075 controller: webview.WebviewController = new webview.WebviewController(); 17076 @State input_text: string = 'https://www.example.com'; 17077 17078 build() { 17079 Column() { 17080 Row() { 17081 Flex() { 17082 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 17083 .id("input_url") 17084 .height(40) 17085 .margin(5) 17086 .borderColor(Color.Blue) 17087 .onChange((value: string) => { 17088 this.input_text = value; 17089 }) 17090 17091 Button({type: ButtonType.Capsule}) { Text("Go") } 17092 .onClick(() => { 17093 this.controller.loadUrl(this.input_text); 17094 }) 17095 17096 Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") } 17097 .onClick(() => { 17098 let arrDisallowDomainSuffixes = new Array<string>(); 17099 arrDisallowDomainSuffixes.push('example.com'); 17100 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes); 17101 17102 let arrAllowedDomainSuffixes = new Array<string>(); 17103 arrAllowedDomainSuffixes.push('news.example.com'); 17104 webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes); 17105 }) 17106 } 17107 } 17108 Web({ src: this.main_url, controller: this.controller }) 17109 .onControllerAttached(()=>{ 17110 this.controller.enableAdsBlock(true) 17111 }) 17112 } 17113 } 17114} 17115``` 17116 17117### removeAdsBlockAllowedList<sup>12+</sup> 17118 17119static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 17120 17121从AdsBlockManager的AllowedList中删除一组域名。 17122 17123> **说明:** 17124> 17125> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 17126 17127**系统能力:** SystemCapability.Web.Webview.Core 17128 17129**参数:** 17130 17131| 参数名 | 类型 | 必填 | 说明 | 17132| ---------- | ------ | ---- | -------------------------------- | 17133| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 17134 17135**错误码:** 17136 17137> **说明:** 17138> 17139> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 17140 17141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 17142 17143| 错误码ID | 错误信息 | 17144| -------- | ----------------------- | 17145| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 17146| 801 | Capability not supported. | 17147 17148**示例:** 17149 17150```ts 17151// xxx.ets 17152import { webview } from '@kit.ArkWeb'; 17153 17154// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 17155@Entry 17156@Component 17157struct WebComponent { 17158 main_url: string = 'https://www.example.com'; 17159 text_input_controller: TextInputController = new TextInputController(); 17160 controller: webview.WebviewController = new webview.WebviewController(); 17161 @State input_text: string = 'https://www.example.com'; 17162 17163 build() { 17164 Column() { 17165 Row() { 17166 Flex() { 17167 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 17168 .id("input_url") 17169 .height(40) 17170 .margin(5) 17171 .borderColor(Color.Blue) 17172 .onChange((value: string) => { 17173 this.input_text = value; 17174 }) 17175 17176 Button({type: ButtonType.Capsule}) { Text("Go") } 17177 .onClick(() => { 17178 this.controller.loadUrl(this.input_text); 17179 }) 17180 17181 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") } 17182 .onClick(() => { 17183 let arrDomainSuffixes = new Array<string>(); 17184 arrDomainSuffixes.push('example.com'); 17185 arrDomainSuffixes.push('abcdefg.cn'); 17186 webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes); 17187 }) 17188 } 17189 } 17190 Web({ src: this.main_url, controller: this.controller }) 17191 .onControllerAttached(()=>{ 17192 this.controller.enableAdsBlock(true); 17193 }) 17194 } 17195 } 17196} 17197``` 17198 17199### clearAdsBlockAllowedList<sup>12+</sup> 17200 17201static clearAdsBlockAllowedList(): void 17202 17203清空AdsBlockManager的AllowedList。 17204 17205**系统能力:** SystemCapability.Web.Webview.Core 17206 17207**错误码:** 17208 17209> **说明:** 17210> 17211> 从API Version 18开始,在不支持广告过滤功能的设备上调用该API会抛出801异常。 17212 17213以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 17214 17215| 错误码ID | 错误信息 | 17216| -------- | ----------------------- | 17217| 801 | Capability not supported. | 17218 17219**示例:** 17220 17221```ts 17222// xxx.ets 17223import { webview } from '@kit.ArkWeb'; 17224 17225@Entry 17226@Component 17227struct WebComponent { 17228 main_url: string = 'https://www.example.com'; 17229 text_input_controller: TextInputController = new TextInputController(); 17230 controller: webview.WebviewController = new webview.WebviewController(); 17231 @State input_text: string = 'https://www.example.com'; 17232 17233 17234 build() { 17235 Column() { 17236 Row() { 17237 Flex() { 17238 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 17239 .id("input_url") 17240 .height(40) 17241 .margin(5) 17242 .borderColor(Color.Blue) 17243 .onChange((value: string) => { 17244 this.input_text = value; 17245 }) 17246 17247 Button({type: ButtonType.Capsule}) { Text("Go") } 17248 .onClick(() => { 17249 this.controller.loadUrl(this.input_text); 17250 }) 17251 17252 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") } 17253 .onClick(() => { 17254 webview.AdsBlockManager.clearAdsBlockAllowedList(); 17255 }) 17256 } 17257 } 17258 Web({ src: this.main_url, controller: this.controller }) 17259 .onControllerAttached(()=>{ 17260 this.controller.enableAdsBlock(true); 17261 }) 17262 } 17263 } 17264} 17265``` 17266 17267## SnapshotInfo<sup>12+</sup> 17268 17269获取全量绘制结果入参。 17270 17271**系统能力:** SystemCapability.Web.Webview.Core 17272 17273| 名称 | 类型 | 必填 | 说明 | 17274|------|------|------|------| 17275| id | string | 否 | snapshot的id。| 17276| 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。)| 17277 17278## SnapshotResult<sup>12+</sup> 17279 17280全量绘制回调结果。 17281 17282**系统能力:** SystemCapability.Web.Webview.Core 17283 17284| 名称 | 类型 | 必填 | 说明 | 17285|------|------|--|---------| 17286| id | string | 否 | snapshot的id。| 17287| status | boolean | 否 | snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。| 17288| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions) | 否 | web绘制的真实尺寸,number类型,单位vp。| 17289| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。| 17290 17291> **说明:** 17292> 17293> 仅支持对渲染进程上的资源进行截图:静态图片和文本。 17294> 不支持动态视频,如果页面有视频则截图时会显示该视频的占位图片。 17295 17296## ScrollType<sup>12+</sup> 17297 17298Scroll滚动类型,用于[setScrollable](#setscrollable12)。 17299 17300**系统能力:** SystemCapability.Web.Webview.Core 17301 17302| 名称 | 值 | 说明 | 17303| ------------ | -- |--------------------------------- | 17304| EVENT | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。| 17305 17306## PressureLevel<sup>14+</sup> 17307 17308内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。 17309 17310**系统能力:** SystemCapability.Web.Webview.Core 17311 17312| 名称 | 值 | 说明 | 17313| ------------------------------- | - | ---------- | 17314| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 | 17315| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 | 17316 17317## PdfConfiguration<sup>14+</sup> 17318 17319createPdf函数输入参数。 17320 17321> **说明:** 17322> 17323> 英寸与像素之间转换公式:像素 = 96 * 英寸。 17324 17325**系统能力:** SystemCapability.Web.Webview.Core 17326 17327| 名称 | 类型 | 必填 | 说明 | 17328| --------------------- | ------- | ---- | ------------------------------------------------------------ | 17329| width | number | 是 | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。 | 17330| height | number | 是 | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。 | 17331| scale | number | 否 | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 | 17332| marginTop | number | 是 | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 17333| marginBottom | number | 是 | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 17334| marginRight | number | 是 | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 17335| marginLeft | number | 是 | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 17336| shouldPrintBackground | boolean | 否 | true表示打印背景颜色,false表示不打印背景颜色。默认值:false。 | 17337 17338## PdfData<sup>14+</sup> 17339 17340createPdf函数输出数据流类。 17341 17342> **说明:** 17343> 17344> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。 17345 17346### pdfArrayBuffer<sup>14+</sup> 17347 17348pdfArrayBuffer(): Uint8Array 17349 17350获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。 17351 17352**系统能力:** SystemCapability.Web.Webview.Core 17353 17354**返回值:** 17355 17356| 类型 | 说明 | 17357| ---------- | -------- | 17358| Uint8Array | 数据流。 | 17359 17360## ScrollOffset<sup>13+</sup> 17361 17362网页当前的滚动偏移量。 17363 17364**系统能力:** SystemCapability.Web.Webview.Core 17365 17366| 名称 | 类型 | 可读 | 可写 | 说明 | 17367| ---- | ------ | ---- | ---- | ------------------------------------------------------------ | 17368| x | number | 是 | 是 | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 | 17369| y | number | 是 | 是 | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 | 17370