1# @ohos.web.webview (Webview) 2 3@ohos.web.webview提供web控制能力,[Web](ts-basic-components-web.md)组件提供网页显示的能力。 4 5> **说明:** 6> 7> - 本模块接口从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> - 示例效果请以真机运行为准,当前IDE预览器不支持。 10 11## 需要权限 12 13访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../security/AccessToken/declare-permissions.md)。 14 15## 导入模块 16 17```ts 18import { webview } from '@kit.ArkWeb'; 19``` 20 21## once 22 23once(type: string, callback: Callback\<void\>): void 24 25订阅一次指定类型Web事件的回调,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 | 是 | 设置是否启用网页调试功能。| 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](ts-basic-components-web.md#web)加载沙箱路径的示例代码。 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**系统能力:** SystemCapability.Web.Webview.Core 1212 1213**返回值:** 1214 1215| 类型 | 说明 | 1216| ------- | -------------------------------- | 1217| boolean | 可以后退返回true,否则返回false。 | 1218 1219**错误码:** 1220 1221以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1222 1223| 错误码ID | 错误信息 | 1224| -------- | ------------------------------------------------------------ | 1225| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1226 1227**示例:** 1228 1229```ts 1230// xxx.ets 1231import { webview } from '@kit.ArkWeb'; 1232import { BusinessError } from '@kit.BasicServicesKit'; 1233 1234@Entry 1235@Component 1236struct WebComponent { 1237 controller: webview.WebviewController = new webview.WebviewController(); 1238 1239 build() { 1240 Column() { 1241 Button('accessBackward') 1242 .onClick(() => { 1243 try { 1244 let result = this.controller.accessBackward(); 1245 console.log('result:' + result); 1246 } catch (error) { 1247 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1248 } 1249 }) 1250 Web({ src: 'www.example.com', controller: this.controller }) 1251 } 1252 } 1253} 1254``` 1255 1256### backward 1257 1258backward(): void 1259 1260按照历史栈,后退一个页面。一般结合accessBackward一起使用。 1261 1262**系统能力:** SystemCapability.Web.Webview.Core 1263 1264**错误码:** 1265 1266以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1267 1268| 错误码ID | 错误信息 | 1269| -------- | ------------------------------------------------------------ | 1270| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1271 1272**示例:** 1273 1274```ts 1275// xxx.ets 1276import { webview } from '@kit.ArkWeb'; 1277import { BusinessError } from '@kit.BasicServicesKit'; 1278 1279@Entry 1280@Component 1281struct WebComponent { 1282 controller: webview.WebviewController = new webview.WebviewController(); 1283 1284 build() { 1285 Column() { 1286 Button('backward') 1287 .onClick(() => { 1288 try { 1289 this.controller.backward(); 1290 } catch (error) { 1291 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1292 } 1293 }) 1294 Web({ src: 'www.example.com', controller: this.controller }) 1295 } 1296 } 1297} 1298``` 1299 1300### onActive 1301 1302onActive(): void 1303 1304调用此接口通知Web组件进入前台激活状态。 1305<br />激活状态是应用与用户互动的状态。应用会保持这种状态,直到发生某些事件(例如收到来电或设备屏幕关闭)时将焦点从应用移开。 1306 1307**系统能力:** SystemCapability.Web.Webview.Core 1308 1309**错误码:** 1310 1311以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1312 1313| 错误码ID | 错误信息 | 1314| -------- | ------------------------------------------------------------ | 1315| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1316 1317**示例:** 1318 1319```ts 1320// xxx.ets 1321import { webview } from '@kit.ArkWeb'; 1322import { BusinessError } from '@kit.BasicServicesKit'; 1323 1324@Entry 1325@Component 1326struct WebComponent { 1327 controller: webview.WebviewController = new webview.WebviewController(); 1328 1329 build() { 1330 Column() { 1331 Button('onActive') 1332 .onClick(() => { 1333 try { 1334 this.controller.onActive(); 1335 } catch (error) { 1336 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1337 } 1338 }) 1339 Web({ src: 'www.example.com', controller: this.controller }) 1340 } 1341 } 1342} 1343``` 1344 1345### onInactive 1346 1347onInactive(): void 1348 1349调用此接口通知Web组件进入未激活状态。开发者可以在此回调中实现应用失去焦点时应表现的恰当行为。 1350 1351此状态下会尽可能的暂停任何可以安全暂停的内容,例如动画和地理位置。但不会暂停JavaScript,要全局暂停JavaScript,请使用[pauseAllTimers](#pausealltimers12)。要重新激活Web组件,请调用[onActive](#onactive)。 1352 1353**系统能力:** SystemCapability.Web.Webview.Core 1354 1355**错误码:** 1356 1357以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1358 1359| 错误码ID | 错误信息 | 1360| -------- | ------------------------------------------------------------ | 1361| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1362 1363**示例:** 1364 1365```ts 1366// xxx.ets 1367import { webview } from '@kit.ArkWeb'; 1368import { BusinessError } from '@kit.BasicServicesKit'; 1369 1370@Entry 1371@Component 1372struct WebComponent { 1373 controller: webview.WebviewController = new webview.WebviewController(); 1374 1375 build() { 1376 Column() { 1377 Button('onInactive') 1378 .onClick(() => { 1379 try { 1380 this.controller.onInactive(); 1381 } catch (error) { 1382 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1383 } 1384 }) 1385 Web({ src: 'www.example.com', controller: this.controller }) 1386 } 1387 } 1388} 1389``` 1390 1391### refresh 1392refresh(): void 1393 1394调用此接口通知Web组件刷新网页。 1395 1396**系统能力:** SystemCapability.Web.Webview.Core 1397 1398**错误码:** 1399 1400以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1401 1402| 错误码ID | 错误信息 | 1403| -------- | ------------------------------------------------------------ | 1404| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1405 1406**示例:** 1407 1408```ts 1409// xxx.ets 1410import { webview } from '@kit.ArkWeb'; 1411import { BusinessError } from '@kit.BasicServicesKit'; 1412 1413@Entry 1414@Component 1415struct WebComponent { 1416 controller: webview.WebviewController = new webview.WebviewController(); 1417 1418 build() { 1419 Column() { 1420 Button('refresh') 1421 .onClick(() => { 1422 try { 1423 this.controller.refresh(); 1424 } catch (error) { 1425 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1426 } 1427 }) 1428 Web({ src: 'www.example.com', controller: this.controller }) 1429 } 1430 } 1431} 1432``` 1433 1434### accessStep 1435 1436accessStep(step: number): boolean 1437 1438当前页面是否可前进或者后退给定的step步。 1439 1440**系统能力:** SystemCapability.Web.Webview.Core 1441 1442**参数:** 1443 1444| 参数名 | 类型 | 必填 | 说明 | 1445| ------ | -------- | ---- | ------------------------------------------ | 1446| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 1447 1448**返回值:** 1449 1450| 类型 | 说明 | 1451| ------- | ------------------ | 1452| boolean | 页面是否前进或后退 | 1453 1454**错误码:** 1455 1456以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1457 1458| 错误码ID | 错误信息 | 1459| -------- | ------------------------------------------------------------ | 1460| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1461| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1462 1463**示例:** 1464 1465```ts 1466// xxx.ets 1467import { webview } from '@kit.ArkWeb'; 1468import { BusinessError } from '@kit.BasicServicesKit'; 1469 1470@Entry 1471@Component 1472struct WebComponent { 1473 controller: webview.WebviewController = new webview.WebviewController(); 1474 @State steps: number = 2; 1475 1476 build() { 1477 Column() { 1478 Button('accessStep') 1479 .onClick(() => { 1480 try { 1481 let result = this.controller.accessStep(this.steps); 1482 console.log('result:' + result); 1483 } catch (error) { 1484 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1485 } 1486 }) 1487 Web({ src: 'www.example.com', controller: this.controller }) 1488 } 1489 } 1490} 1491``` 1492 1493### clearHistory 1494 1495clearHistory(): void 1496 1497删除所有前进后退记录,不建议在onErrorReceive与onPageBegin中调用clearHistory,会造成异常退出。 1498 1499**系统能力:** SystemCapability.Web.Webview.Core 1500 1501**错误码:** 1502 1503以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1504 1505| 错误码ID | 错误信息 | 1506| -------- | ------------------------------------------------------------ | 1507| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1508 1509**示例:** 1510 1511```ts 1512// xxx.ets 1513import { webview } from '@kit.ArkWeb'; 1514import { BusinessError } from '@kit.BasicServicesKit'; 1515 1516@Entry 1517@Component 1518struct WebComponent { 1519 controller: webview.WebviewController = new webview.WebviewController(); 1520 1521 build() { 1522 Column() { 1523 Button('clearHistory') 1524 .onClick(() => { 1525 try { 1526 this.controller.clearHistory(); 1527 } catch (error) { 1528 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1529 } 1530 }) 1531 Web({ src: 'www.example.com', controller: this.controller }) 1532 } 1533 } 1534} 1535``` 1536 1537### getHitTest 1538 1539getHitTest(): WebHitTestType 1540 1541获取当前被点击区域的元素类型。 1542 1543**系统能力:** SystemCapability.Web.Webview.Core 1544 1545**返回值:** 1546 1547| 类型 | 说明 | 1548| ------------------------------------------------------------ | ---------------------- | 1549| [WebHitTestType](#webhittesttype)| 被点击区域的元素类型。 | 1550 1551**错误码:** 1552 1553以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1554 1555| 错误码ID | 错误信息 | 1556| -------- | ------------------------------------------------------------ | 1557| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1558 1559**示例:** 1560 1561```ts 1562// xxx.ets 1563import { webview } from '@kit.ArkWeb'; 1564import { BusinessError } from '@kit.BasicServicesKit'; 1565 1566@Entry 1567@Component 1568struct WebComponent { 1569 controller: webview.WebviewController = new webview.WebviewController(); 1570 1571 build() { 1572 Column() { 1573 Button('getHitTest') 1574 .onClick(() => { 1575 try { 1576 let hitTestType = this.controller.getHitTest(); 1577 console.log("hitTestType: " + hitTestType); 1578 } catch (error) { 1579 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1580 } 1581 }) 1582 Web({ src: 'www.example.com', controller: this.controller }) 1583 } 1584 } 1585} 1586``` 1587 1588### registerJavaScriptProxy 1589 1590registerJavaScriptProxy(object: object, name: string, methodList: Array\<string>, asyncMethodList?: Array\<string>, permission?: string): void 1591 1592registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。 1593<br>注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refresh)接口生效。 1594 1595> **说明:** 1596> 1597> - registerJavaScriptProxy需要和deleteJavaScriptRegister接口配合使用,防止内存泄漏。 1598> - 请尽可能只在可信的URL及安全通信HTTPS场景下进行registerJavaScriptProxy注册。在非可信的Web组件中注入JavaScript对象,可能会导致应用被恶意攻击。 1599> - 在注册registerJavaScriptProxy后,应用会将JavaScript对象暴露给所有的页面frames。 1600> - 同一方法在同步与异步列表中重复注册,将默认异步调用。 1601> - 同步函数列表和异步函数列表不可同时为空,否则此次调用接口注册失败。 1602 1603**系统能力:** SystemCapability.Web.Webview.Core 1604 1605**参数:** 1606 1607| 参数名 | 类型 | 必填 | 说明 | 1608| ---------- | -------------- | ---- | ------------------------------------------------------------ | 1609| 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)。 | 1610| name | string | 是 | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 | 1611| methodList | Array\<string> | 是 | 参与注册的应用侧JavaScript对象的同步方法。 | 1612| asyncMethodList<sup>12+</sup> | Array\<string> | 否 | 参与注册的应用侧JavaScript对象的异步方法,默认为空。异步方法无法获取返回值。 | 1613| permission<sup>12+</sup> | string | 否 | json字符串,默认为空,通过该字符串配置JSBridge的权限管控,可以定义object、method一级的url白名单。<br>示例请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。| 1614 1615**错误码:** 1616 1617以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1618 1619| 错误码ID | 错误信息 | 1620| -------- | ------------------------------------------------------------ | 1621| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1622| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1623 1624**示例:** 1625 1626```ts 1627// xxx.ets 1628import { webview } from '@kit.ArkWeb'; 1629import { BusinessError } from '@kit.BasicServicesKit'; 1630 1631class TestObj { 1632 constructor() { 1633 } 1634 1635 test(testStr:string): string { 1636 console.log('Web Component str' + testStr); 1637 return testStr; 1638 } 1639 1640 toString(): void { 1641 console.log('Web Component toString'); 1642 } 1643 1644 testNumber(testNum:number): number { 1645 console.log('Web Component number' + testNum); 1646 return testNum; 1647 } 1648 1649 asyncTestBool(testBol:boolean): void { 1650 console.log('Web Component boolean' + testBol); 1651 } 1652} 1653 1654class WebObj { 1655 constructor() { 1656 } 1657 1658 webTest(): string { 1659 console.log('Web test'); 1660 return "Web test"; 1661 } 1662 1663 webString(): void { 1664 console.log('Web test toString'); 1665 } 1666} 1667 1668class AsyncObj { 1669 constructor() { 1670 } 1671 1672 asyncTest(): void { 1673 console.log('Async test'); 1674 } 1675 1676 asyncString(testStr:string): void { 1677 console.log('Web async string' + testStr); 1678 } 1679} 1680 1681@Entry 1682@Component 1683struct Index { 1684 controller: webview.WebviewController = new webview.WebviewController(); 1685 @State testObjtest: TestObj = new TestObj(); 1686 @State webTestObj: WebObj = new WebObj(); 1687 @State asyncTestObj: AsyncObj = new AsyncObj(); 1688 1689 build() { 1690 Column() { 1691 Button('refresh') 1692 .onClick(() => { 1693 try { 1694 this.controller.refresh(); 1695 } catch (error) { 1696 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1697 } 1698 }) 1699 Button('Register JavaScript To Window') 1700 .onClick(() => { 1701 try { 1702 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber"], ["asyncTestBool"]); 1703 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 1704 this.controller.registerJavaScriptProxy(this.asyncTestObj, "objAsyncName", [], ["asyncTest", "asyncString"]); 1705 } catch (error) { 1706 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1707 } 1708 }) 1709 Button('deleteJavaScriptRegister') 1710 .onClick(() => { 1711 try { 1712 this.controller.deleteJavaScriptRegister("objName"); 1713 this.controller.deleteJavaScriptRegister("objTestName"); 1714 this.controller.deleteJavaScriptRegister("objAsyncName"); 1715 } catch (error) { 1716 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1717 } 1718 }) 1719 Web({ src: $rawfile('index.html'), controller: this.controller }) 1720 .javaScriptAccess(true) 1721 } 1722 } 1723} 1724``` 1725 1726加载的html文件。 1727```html 1728<!-- index.html --> 1729<!DOCTYPE html> 1730<html> 1731 <meta charset="utf-8"> 1732 <body> 1733 <button type="button" onclick="htmlTest()">Click Me!</button> 1734 <p id="demo"></p> 1735 <p id="webDemo"></p> 1736 <p id="asyncDemo"></p> 1737 </body> 1738 <script type="text/javascript"> 1739 function htmlTest() { 1740 // This function call expects to return "ArkUI Web Component" 1741 let str=objName.test("webtest data"); 1742 objName.testNumber(1); 1743 objName.asyncTestBool(true); 1744 document.getElementById("demo").innerHTML=str; 1745 console.log('objName.test result:'+ str) 1746 1747 // This function call expects to return "Web test" 1748 let webStr = objTestName.webTest(); 1749 document.getElementById("webDemo").innerHTML=webStr; 1750 console.log('objTestName.webTest result:'+ webStr) 1751 1752 objAsyncName.asyncTest(); 1753 objAsyncName.asyncString("async test data"); 1754 } 1755</script> 1756</html> 1757``` 1758更多示例,请参考[前端页面调用应用侧函数](../../web/web-in-page-app-function-invoking.md)。 1759 1760### runJavaScript 1761 1762runJavaScript(script: string, callback : AsyncCallback\<string>): void 1763 1764异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1765 1766> **说明:** 1767> 1768> 离屏组件不会触发runJavaScript接口。 1769 1770**系统能力:** SystemCapability.Web.Webview.Core 1771 1772**参数:** 1773 1774| 参数名 | 类型 | 必填 | 说明 | 1775| -------- | -------------------- | ---- | ---------------------------- | 1776| script | string | 是 | JavaScript脚本。 | 1777| callback | AsyncCallback\<string> | 是 | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 | 1778 1779**错误码:** 1780 1781以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1782 1783| 错误码ID | 错误信息 | 1784| -------- | ------------------------------------------------------------ | 1785| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1786| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1787 1788**示例:** 1789 1790```ts 1791import { webview } from '@kit.ArkWeb'; 1792import { BusinessError } from '@kit.BasicServicesKit'; 1793 1794@Entry 1795@Component 1796struct WebComponent { 1797 controller: webview.WebviewController = new webview.WebviewController(); 1798 @State webResult: string = ''; 1799 1800 build() { 1801 Column() { 1802 Text(this.webResult).fontSize(20) 1803 Web({ src: $rawfile('index.html'), controller: this.controller }) 1804 .javaScriptAccess(true) 1805 .onPageEnd(e => { 1806 try { 1807 this.controller.runJavaScript( 1808 'test()', 1809 (error, result) => { 1810 if (error) { 1811 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1812 return; 1813 } 1814 if (result) { 1815 this.webResult = result; 1816 console.info(`The test() return value is: ${result}`); 1817 } 1818 }); 1819 if (e) { 1820 console.info('url: ', e.url); 1821 } 1822 } catch (error) { 1823 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1824 } 1825 }) 1826 } 1827 } 1828} 1829``` 1830 1831加载的html文件。 1832```html 1833<!-- index.html --> 1834<!DOCTYPE html> 1835<html> 1836 <meta charset="utf-8"> 1837 <body> 1838 Hello world! 1839 </body> 1840 <script type="text/javascript"> 1841 function test() { 1842 console.log('Ark WebComponent') 1843 return "This value is from index.html" 1844 } 1845 </script> 1846</html> 1847``` 1848 1849### runJavaScript 1850 1851runJavaScript(script: string): Promise\<string> 1852 1853异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 1854 1855**系统能力:** SystemCapability.Web.Webview.Core 1856 1857**参数:** 1858 1859| 参数名 | 类型 | 必填 | 说明 | 1860| ------ | -------- | ---- | ---------------- | 1861| script | string | 是 | JavaScript脚本。 | 1862 1863**返回值:** 1864 1865| 类型 | 说明 | 1866| --------------- | --------------------------------------------------- | 1867| Promise\<string> | Promise实例,返回脚本执行的结果,执行失败返回null。 | 1868 1869**错误码:** 1870 1871以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1872 1873| 错误码ID | 错误信息 | 1874| -------- | ------------------------------------------------------------ | 1875| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1876| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1877 1878**示例:** 1879 1880```ts 1881// xxx.ets 1882import { webview } from '@kit.ArkWeb'; 1883import { BusinessError } from '@kit.BasicServicesKit'; 1884 1885@Entry 1886@Component 1887struct WebComponent { 1888 controller: webview.WebviewController = new webview.WebviewController(); 1889 1890 build() { 1891 Column() { 1892 Web({ src: $rawfile('index.html'), controller: this.controller }) 1893 .javaScriptAccess(true) 1894 .onPageEnd(e => { 1895 try { 1896 this.controller.runJavaScript('test()') 1897 .then((result) => { 1898 console.log('result: ' + result); 1899 }) 1900 .catch((error: BusinessError) => { 1901 console.error("error: " + error); 1902 }) 1903 if (e) { 1904 console.info('url: ', e.url); 1905 } 1906 } catch (error) { 1907 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 1908 } 1909 }) 1910 } 1911 } 1912} 1913``` 1914 1915加载的html文件。 1916```html 1917<!-- index.html --> 1918<!DOCTYPE html> 1919<html> 1920 <meta charset="utf-8"> 1921 <body> 1922 Hello world! 1923 </body> 1924 <script type="text/javascript"> 1925 function test() { 1926 console.log('Ark WebComponent') 1927 return "This value is from index.html" 1928 } 1929 </script> 1930</html> 1931``` 1932 1933### runJavaScriptExt<sup>10+</sup> 1934 1935runJavaScriptExt(script: string | ArrayBuffer, callback : AsyncCallback\<JsMessageExt>): void 1936 1937异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 1938 1939**系统能力:** SystemCapability.Web.Webview.Core 1940 1941**参数:** 1942 1943| 参数名 | 类型 | 必填 | 说明 | 1944| -------- | -------------------- | ---- | ---------------------------- | 1945| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 1946| callback | AsyncCallback\<[JsMessageExt](#jsmessageext10)\> | 是 | 回调执行JavaScript脚本结果。 | 1947 1948**错误码:** 1949 1950以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 1951 1952| 错误码ID | 错误信息 | 1953| -------- | ------------------------------------------------------------ | 1954| 17100001 | Init error. The WebviewController must be associated with a Web component. | 1955| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1956 1957**示例:** 1958 1959```ts 1960import { webview } from '@kit.ArkWeb'; 1961import { BusinessError } from '@kit.BasicServicesKit'; 1962 1963@Entry 1964@Component 1965struct WebComponent { 1966 controller: webview.WebviewController = new webview.WebviewController(); 1967 @State msg1: string = ''; 1968 @State msg2: string = ''; 1969 1970 build() { 1971 Column() { 1972 Text(this.msg1).fontSize(20) 1973 Text(this.msg2).fontSize(20) 1974 Web({ src: $rawfile('index.html'), controller: this.controller }) 1975 .javaScriptAccess(true) 1976 .onPageEnd(e => { 1977 try { 1978 this.controller.runJavaScriptExt( 1979 'test()', 1980 (error, result) => { 1981 if (error) { 1982 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 1983 return; 1984 } 1985 if (result) { 1986 try { 1987 let type = result.getType(); 1988 switch (type) { 1989 case webview.JsMessageType.STRING: { 1990 this.msg1 = "result type:" + typeof (result.getString()); 1991 this.msg2 = "result getString:" + ((result.getString())); 1992 break; 1993 } 1994 case webview.JsMessageType.NUMBER: { 1995 this.msg1 = "result type:" + typeof (result.getNumber()); 1996 this.msg2 = "result getNumber:" + ((result.getNumber())); 1997 break; 1998 } 1999 case webview.JsMessageType.BOOLEAN: { 2000 this.msg1 = "result type:" + typeof (result.getBoolean()); 2001 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2002 break; 2003 } 2004 case webview.JsMessageType.ARRAY_BUFFER: { 2005 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2006 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2007 break; 2008 } 2009 case webview.JsMessageType.ARRAY: { 2010 this.msg1 = "result type:" + typeof (result.getArray()); 2011 this.msg2 = "result getArray:" + result.getArray(); 2012 break; 2013 } 2014 default: { 2015 this.msg1 = "default break, type:" + type; 2016 break; 2017 } 2018 } 2019 } 2020 catch (resError) { 2021 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2022 } 2023 } 2024 }); 2025 if (e) { 2026 console.info('url: ', e.url); 2027 } 2028 } catch (error) { 2029 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2030 } 2031 }) 2032 } 2033 } 2034} 2035``` 2036 2037```ts 2038// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据 2039import { webview } from '@kit.ArkWeb'; 2040import { BusinessError } from '@kit.BasicServicesKit'; 2041import { fileIo } from '@kit.CoreFileKit'; 2042import { common } from '@kit.AbilityKit'; 2043 2044@Entry 2045@Component 2046struct WebComponent { 2047 controller: webview.WebviewController = new webview.WebviewController(); 2048 @State msg1: string = '' 2049 @State msg2: string = '' 2050 2051 build() { 2052 Column() { 2053 Text(this.msg1).fontSize(20) 2054 Text(this.msg2).fontSize(20) 2055 Button('runJavaScriptExt') 2056 .onClick(() => { 2057 try { 2058 let context = getContext(this) as common.UIAbilityContext; 2059 let filePath = context.filesDir + 'test.txt'; 2060 // 新建并打开文件 2061 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2062 // 写入一段内容至文件 2063 fileIo.writeSync(file.fd, "test()"); 2064 // 从文件中读取内容 2065 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2066 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2067 // 关闭文件 2068 fileIo.closeSync(file); 2069 this.controller.runJavaScriptExt( 2070 arrayBuffer, 2071 (error, result) => { 2072 if (error) { 2073 console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`) 2074 return; 2075 } 2076 if (result) { 2077 try { 2078 let type = result.getType(); 2079 switch (type) { 2080 case webview.JsMessageType.STRING: { 2081 this.msg1 = "result type:" + typeof (result.getString()); 2082 this.msg2 = "result getString:" + ((result.getString())); 2083 break; 2084 } 2085 case webview.JsMessageType.NUMBER: { 2086 this.msg1 = "result type:" + typeof (result.getNumber()); 2087 this.msg2 = "result getNumber:" + ((result.getNumber())); 2088 break; 2089 } 2090 case webview.JsMessageType.BOOLEAN: { 2091 this.msg1 = "result type:" + typeof (result.getBoolean()); 2092 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2093 break; 2094 } 2095 case webview.JsMessageType.ARRAY_BUFFER: { 2096 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2097 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2098 break; 2099 } 2100 case webview.JsMessageType.ARRAY: { 2101 this.msg1 = "result type:" + typeof (result.getArray()); 2102 this.msg2 = "result getArray:" + result.getArray(); 2103 break; 2104 } 2105 default: { 2106 this.msg1 = "default break, type:" + type; 2107 break; 2108 } 2109 } 2110 } 2111 catch (resError) { 2112 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2113 } 2114 } 2115 }); 2116 } catch (error) { 2117 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2118 } 2119 }) 2120 Web({ src: $rawfile('index.html'), controller: this.controller }) 2121 .javaScriptAccess(true) 2122 } 2123 } 2124} 2125``` 2126 2127加载的html文件。 2128```html 2129<!-- index.html --> 2130<!DOCTYPE html> 2131<html lang="en-gb"> 2132<body> 2133<h1>run JavaScript Ext demo</h1> 2134</body> 2135<script type="text/javascript"> 2136function test() { 2137 return "hello, world"; 2138} 2139</script> 2140</html> 2141``` 2142 2143### runJavaScriptExt<sup>10+</sup> 2144 2145runJavaScriptExt(script: string | ArrayBuffer): Promise\<JsMessageExt> 2146 2147异步执行JavaScript脚本,并通过Promise方式返回脚本执行的结果。runJavaScriptExt需要在loadUrl完成后,比如onPageEnd中调用。 2148 2149**系统能力:** SystemCapability.Web.Webview.Core 2150 2151**参数:** 2152 2153| 参数名 | 类型 | 必填 | 说明 | 2154| ------ | -------- | ---- | ---------------- | 2155| script | string \| ArrayBuffer<sup>12+</sup> | 是 | JavaScript脚本。 | 2156 2157**返回值:** 2158 2159| 类型 | 说明 | 2160| --------------- | --------------------------------------------------- | 2161| Promise\<[JsMessageExt](#jsmessageext10)> | Promise实例,返回脚本执行的结果。 | 2162 2163**错误码:** 2164 2165以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2166 2167| 错误码ID | 错误信息 | 2168| -------- | ------------------------------------------------------------ | 2169| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2170| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2171 2172**示例:** 2173 2174```ts 2175// xxx.ets 2176import { webview } from '@kit.ArkWeb'; 2177import { BusinessError } from '@kit.BasicServicesKit'; 2178 2179@Entry 2180@Component 2181struct WebComponent { 2182 controller: webview.WebviewController = new webview.WebviewController(); 2183 @State webResult: string = ''; 2184 @State msg1: string = ''; 2185 @State msg2: string = ''; 2186 2187 build() { 2188 Column() { 2189 Text(this.webResult).fontSize(20) 2190 Text(this.msg1).fontSize(20) 2191 Text(this.msg2).fontSize(20) 2192 Web({ src: $rawfile('index.html'), controller: this.controller }) 2193 .javaScriptAccess(true) 2194 .onPageEnd(() => { 2195 this.controller.runJavaScriptExt('test()') 2196 .then((result) => { 2197 try { 2198 let type = result.getType(); 2199 switch (type) { 2200 case webview.JsMessageType.STRING: { 2201 this.msg1 = "result type:" + typeof (result.getString()); 2202 this.msg2 = "result getString:" + ((result.getString())); 2203 break; 2204 } 2205 case webview.JsMessageType.NUMBER: { 2206 this.msg1 = "result type:" + typeof (result.getNumber()); 2207 this.msg2 = "result getNumber:" + ((result.getNumber())); 2208 break; 2209 } 2210 case webview.JsMessageType.BOOLEAN: { 2211 this.msg1 = "result type:" + typeof (result.getBoolean()); 2212 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2213 break; 2214 } 2215 case webview.JsMessageType.ARRAY_BUFFER: { 2216 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2217 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2218 break; 2219 } 2220 case webview.JsMessageType.ARRAY: { 2221 this.msg1 = "result type:" + typeof (result.getArray()); 2222 this.msg2 = "result getArray:" + result.getArray(); 2223 break; 2224 } 2225 default: { 2226 this.msg1 = "default break, type:" + type; 2227 break; 2228 } 2229 } 2230 } 2231 catch (resError) { 2232 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2233 } 2234 }).catch((error: BusinessError) => { 2235 console.error("error: " + error); 2236 }) 2237 }) 2238 } 2239 } 2240} 2241``` 2242 2243```ts 2244// 使用ArrayBuffer入参,从文件中获取JavaScript脚本数据 2245import { webview } from '@kit.ArkWeb'; 2246import { BusinessError } from '@kit.BasicServicesKit'; 2247import { fileIo } from '@kit.CoreFileKit'; 2248import { common } from '@kit.AbilityKit'; 2249 2250@Entry 2251@Component 2252struct WebComponent { 2253 controller: webview.WebviewController = new webview.WebviewController(); 2254 @State msg1: string = ''; 2255 @State msg2: string = ''; 2256 2257 build() { 2258 Column() { 2259 Text(this.msg1).fontSize(20) 2260 Text(this.msg2).fontSize(20) 2261 Button('runJavaScriptExt') 2262 .onClick(() => { 2263 try { 2264 let context = getContext(this) as common.UIAbilityContext; 2265 let filePath = context.filesDir + 'test.txt'; 2266 // 新建并打开文件 2267 let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 2268 // 写入一段内容至文件 2269 fileIo.writeSync(file.fd, "test()"); 2270 // 从文件中读取内容 2271 let arrayBuffer: ArrayBuffer = new ArrayBuffer(6); 2272 fileIo.readSync(file.fd, arrayBuffer, { offset: 0, length: arrayBuffer.byteLength }); 2273 // 关闭文件 2274 fileIo.closeSync(file); 2275 this.controller.runJavaScriptExt(arrayBuffer) 2276 .then((result) => { 2277 try { 2278 let type = result.getType(); 2279 switch (type) { 2280 case webview.JsMessageType.STRING: { 2281 this.msg1 = "result type:" + typeof (result.getString()); 2282 this.msg2 = "result getString:" + ((result.getString())); 2283 break; 2284 } 2285 case webview.JsMessageType.NUMBER: { 2286 this.msg1 = "result type:" + typeof (result.getNumber()); 2287 this.msg2 = "result getNumber:" + ((result.getNumber())); 2288 break; 2289 } 2290 case webview.JsMessageType.BOOLEAN: { 2291 this.msg1 = "result type:" + typeof (result.getBoolean()); 2292 this.msg2 = "result getBoolean:" + ((result.getBoolean())); 2293 break; 2294 } 2295 case webview.JsMessageType.ARRAY_BUFFER: { 2296 this.msg1 = "result type:" + typeof (result.getArrayBuffer()); 2297 this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength)); 2298 break; 2299 } 2300 case webview.JsMessageType.ARRAY: { 2301 this.msg1 = "result type:" + typeof (result.getArray()); 2302 this.msg2 = "result getArray:" + result.getArray(); 2303 break; 2304 } 2305 default: { 2306 this.msg1 = "default break, type:" + type; 2307 break; 2308 } 2309 } 2310 } 2311 catch (resError) { 2312 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 2313 } 2314 }) 2315 .catch((error: BusinessError) => { 2316 console.error("error: " + error); 2317 }) 2318 } catch (error) { 2319 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2320 } 2321 }) 2322 Web({ src: $rawfile('index.html'), controller: this.controller }) 2323 .javaScriptAccess(true) 2324 } 2325 } 2326} 2327``` 2328 2329加载的html文件。 2330```html 2331<!-- index.html --> 2332<!DOCTYPE html> 2333<html lang="en-gb"> 2334<body> 2335<h1>run JavaScript Ext demo</h1> 2336</body> 2337<script type="text/javascript"> 2338function test() { 2339 return "hello, world"; 2340} 2341</script> 2342</html> 2343``` 2344 2345### deleteJavaScriptRegister 2346 2347deleteJavaScriptRegister(name: string): void 2348 2349删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后,须调用[refresh](#refresh)接口。 2350 2351**系统能力:** SystemCapability.Web.Webview.Core 2352 2353**参数:** 2354 2355| 参数名 | 类型 | 必填 | 说明 | 2356| ------ | -------- | ---- | ---- | 2357| name | string | 是 | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 | 2358 2359**错误码:** 2360 2361以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2362 2363| 错误码ID | 错误信息 | 2364| -------- | ------------------------------------------------------------ | 2365| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2366| 17100008 | Failed to delete JavaScriptProxy because it does not exist. | 2367| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2368 2369**示例:** 2370 2371```ts 2372// xxx.ets 2373import { webview } from '@kit.ArkWeb'; 2374import { BusinessError } from '@kit.BasicServicesKit'; 2375 2376class TestObj { 2377 constructor() { 2378 } 2379 2380 test(): string { 2381 return "ArkUI Web Component"; 2382 } 2383 2384 toString(): void { 2385 console.log('Web Component toString'); 2386 } 2387} 2388 2389@Entry 2390@Component 2391struct WebComponent { 2392 controller: webview.WebviewController = new webview.WebviewController(); 2393 @State testObjtest: TestObj = new TestObj(); 2394 @State name: string = 'objName'; 2395 build() { 2396 Column() { 2397 Button('refresh') 2398 .onClick(() => { 2399 try { 2400 this.controller.refresh(); 2401 } catch (error) { 2402 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2403 } 2404 }) 2405 Button('Register JavaScript To Window') 2406 .onClick(() => { 2407 try { 2408 this.controller.registerJavaScriptProxy(this.testObjtest, this.name, ["test", "toString"]); 2409 } catch (error) { 2410 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2411 } 2412 }) 2413 Button('deleteJavaScriptRegister') 2414 .onClick(() => { 2415 try { 2416 this.controller.deleteJavaScriptRegister(this.name); 2417 } catch (error) { 2418 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2419 } 2420 }) 2421 Web({ src: $rawfile('index.html'), controller: this.controller }) 2422 .javaScriptAccess(true) 2423 } 2424 } 2425} 2426``` 2427 2428加载的html文件。 2429```html 2430<!-- index.html --> 2431<!DOCTYPE html> 2432<html> 2433 <meta charset="utf-8"> 2434 <body> 2435 <button type="button" onclick="htmlTest()">Click Me!</button> 2436 <p id="demo"></p> 2437 </body> 2438 <script type="text/javascript"> 2439 function htmlTest() { 2440 let str=objName.test(); 2441 document.getElementById("demo").innerHTML=str; 2442 console.log('objName.test result:'+ str) 2443 } 2444</script> 2445</html> 2446``` 2447 2448### zoom 2449 2450zoom(factor: number): void 2451 2452调整当前网页的缩放比例,[zoomAccess](ts-basic-components-web.md#zoomaccess)需为true。 2453 2454**系统能力:** SystemCapability.Web.Webview.Core 2455 2456**参数:** 2457 2458| 参数名 | 类型 | 必填 | 说明 | 2459| ------ | -------- | ---- | ------------------------------------------------------------ | 2460| factor | number | 是 | 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。 | 2461 2462**错误码:** 2463 2464以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2465 2466| 错误码ID | 错误信息 | 2467| -------- | ------------------------------------------------------------ | 2468| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2469| 17100004 | Function not enabled. | 2470| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2471 2472**示例:** 2473 2474```ts 2475// xxx.ets 2476import { webview } from '@kit.ArkWeb'; 2477import { BusinessError } from '@kit.BasicServicesKit'; 2478 2479@Entry 2480@Component 2481struct WebComponent { 2482 controller: webview.WebviewController = new webview.WebviewController(); 2483 @State factor: number = 1; 2484 2485 build() { 2486 Column() { 2487 Button('zoom') 2488 .onClick(() => { 2489 try { 2490 this.controller.zoom(this.factor); 2491 } catch (error) { 2492 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2493 } 2494 }) 2495 Web({ src: 'www.example.com', controller: this.controller }) 2496 .zoomAccess(true) 2497 } 2498 } 2499} 2500``` 2501 2502### searchAllAsync 2503 2504searchAllAsync(searchString: string): void 2505 2506异步查找网页中所有匹配关键字'searchString'的内容并高亮,结果通过[onSearchResultReceive](ts-basic-components-web.md#onsearchresultreceive9)异步返回。 2507 2508**系统能力:** SystemCapability.Web.Webview.Core 2509 2510**参数:** 2511 2512| 参数名 | 类型 | 必填 | 说明 | 2513| ------------ | -------- | ---- | -------------- | 2514| searchString | string | 是 | 查找的关键字。 | 2515 2516**错误码:** 2517 2518以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2519 2520| 错误码ID | 错误信息 | 2521| -------- | ------------------------------------------------------------ | 2522| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2523| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2524 2525**示例:** 2526 2527```ts 2528// xxx.ets 2529import { webview } from '@kit.ArkWeb'; 2530import { BusinessError } from '@kit.BasicServicesKit'; 2531 2532@Entry 2533@Component 2534struct WebComponent { 2535 controller: webview.WebviewController = new webview.WebviewController(); 2536 @State searchString: string = "Hello World"; 2537 2538 build() { 2539 Column() { 2540 Button('searchString') 2541 .onClick(() => { 2542 try { 2543 this.controller.searchAllAsync(this.searchString); 2544 } catch (error) { 2545 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2546 } 2547 }) 2548 Web({ src: $rawfile('index.html'), controller: this.controller }) 2549 .onSearchResultReceive(ret => { 2550 if (ret) { 2551 console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal + 2552 "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting); 2553 } 2554 }) 2555 } 2556 } 2557} 2558``` 2559 2560加载的html文件。 2561```html 2562<!-- index.html --> 2563<!DOCTYPE html> 2564<html> 2565 <body> 2566 <p>Hello World Highlight Hello World</p> 2567 </body> 2568</html> 2569``` 2570 2571### clearMatches 2572 2573clearMatches(): void 2574 2575清除所有通过[searchAllAsync](#searchallasync)匹配到的高亮字符查找结果。 2576 2577**系统能力:** SystemCapability.Web.Webview.Core 2578 2579**错误码:** 2580 2581以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2582 2583| 错误码ID | 错误信息 | 2584| -------- | ------------------------------------------------------------ | 2585| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2586 2587**示例:** 2588 2589```ts 2590// xxx.ets 2591import { webview } from '@kit.ArkWeb'; 2592import { BusinessError } from '@kit.BasicServicesKit'; 2593 2594@Entry 2595@Component 2596struct WebComponent { 2597 controller: webview.WebviewController = new webview.WebviewController(); 2598 2599 build() { 2600 Column() { 2601 Button('clearMatches') 2602 .onClick(() => { 2603 try { 2604 this.controller.clearMatches(); 2605 } catch (error) { 2606 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2607 } 2608 }) 2609 Web({ src: $rawfile('index.html'), controller: this.controller }) 2610 } 2611 } 2612} 2613``` 2614 2615加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2616 2617### searchNext 2618 2619searchNext(forward: boolean): void 2620 2621滚动到下一个匹配的查找结果并高亮。 2622 2623**系统能力:** SystemCapability.Web.Webview.Core 2624 2625**参数:** 2626 2627| 参数名 | 类型 | 必填 | 说明 | 2628| ------- | -------- | ---- | ---------------------- | 2629| forward | boolean | 是 | 从前向后或者逆向查找。 | 2630 2631**错误码:** 2632 2633以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2634 2635| 错误码ID | 错误信息 | 2636| -------- | ------------------------------------------------------------ | 2637| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2638| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2639 2640**示例:** 2641 2642```ts 2643// xxx.ets 2644import { webview } from '@kit.ArkWeb'; 2645import { BusinessError } from '@kit.BasicServicesKit'; 2646 2647@Entry 2648@Component 2649struct WebComponent { 2650 controller: webview.WebviewController = new webview.WebviewController(); 2651 2652 build() { 2653 Column() { 2654 Button('searchNext') 2655 .onClick(() => { 2656 try { 2657 this.controller.searchNext(true); 2658 } catch (error) { 2659 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2660 } 2661 }) 2662 Web({ src: $rawfile('index.html'), controller: this.controller }) 2663 } 2664 } 2665} 2666``` 2667 2668加载的html文件,请参考[searchAllAsync](#searchallasync)接口下加载的html文件。 2669 2670### clearSslCache 2671 2672clearSslCache(): void 2673 2674清除Web组件记录的SSL证书错误事件对应的用户操作行为。 2675 2676**系统能力:** SystemCapability.Web.Webview.Core 2677 2678**错误码:** 2679 2680以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2681 2682| 错误码ID | 错误信息 | 2683| -------- | ------------------------------------------------------------ | 2684| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2685 2686**示例:** 2687 2688```ts 2689// xxx.ets 2690import { webview } from '@kit.ArkWeb'; 2691import { BusinessError } from '@kit.BasicServicesKit'; 2692 2693@Entry 2694@Component 2695struct WebComponent { 2696 controller: webview.WebviewController = new webview.WebviewController(); 2697 2698 build() { 2699 Column() { 2700 Button('clearSslCache') 2701 .onClick(() => { 2702 try { 2703 this.controller.clearSslCache(); 2704 } catch (error) { 2705 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2706 } 2707 }) 2708 Web({ src: 'www.example.com', controller: this.controller }) 2709 } 2710 } 2711} 2712``` 2713 2714### clearClientAuthenticationCache 2715 2716clearClientAuthenticationCache(): void 2717 2718清除Web组件记录的客户端证书请求事件对应的用户操作行为。 2719 2720**系统能力:** SystemCapability.Web.Webview.Core 2721 2722**错误码:** 2723 2724以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2725 2726| 错误码ID | 错误信息 | 2727| -------- | ------------------------------------------------------------ | 2728| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2729 2730**示例:** 2731 2732```ts 2733// xxx.ets 2734import { webview } from '@kit.ArkWeb'; 2735import { BusinessError } from '@kit.BasicServicesKit'; 2736 2737@Entry 2738@Component 2739struct WebComponent { 2740 controller: webview.WebviewController = new webview.WebviewController(); 2741 2742 build() { 2743 Column() { 2744 Button('clearClientAuthenticationCache') 2745 .onClick(() => { 2746 try { 2747 this.controller.clearClientAuthenticationCache(); 2748 } catch (error) { 2749 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2750 } 2751 }) 2752 Web({ src: 'www.example.com', controller: this.controller }) 2753 } 2754 } 2755} 2756``` 2757 2758### createWebMessagePorts 2759 2760createWebMessagePorts(isExtentionType?: boolean): Array\<WebMessagePort> 2761 2762创建Web消息端口。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 2763 2764**系统能力:** SystemCapability.Web.Webview.Core 2765 2766**参数:** 2767 2768| 参数名 | 类型 | 必填 | 说明 | 2769| ------ | ---------------------- | ---- | :------------------------------| 2770| isExtentionType<sup>10+</sup> | boolean | 否 | 是否使用扩展增强接口,默认false不使用。 | 2771 2772**返回值:** 2773 2774| 类型 | 说明 | 2775| ---------------------- | ----------------- | 2776| Array\<[WebMessagePort](#webmessageport)> | web消息端口列表。 | 2777 2778**错误码:** 2779 2780以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2781 2782| 错误码ID | 错误信息 | 2783| -------- | ------------------------------------------------------------ | 2784| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2785| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2786 2787**示例:** 2788 2789```ts 2790// xxx.ets 2791import { webview } from '@kit.ArkWeb'; 2792import { BusinessError } from '@kit.BasicServicesKit'; 2793 2794@Entry 2795@Component 2796struct WebComponent { 2797 controller: webview.WebviewController = new webview.WebviewController(); 2798 ports: webview.WebMessagePort[] = []; 2799 2800 build() { 2801 Column() { 2802 Button('createWebMessagePorts') 2803 .onClick(() => { 2804 try { 2805 this.ports = this.controller.createWebMessagePorts(); 2806 console.log("createWebMessagePorts size:" + this.ports.length); 2807 } catch (error) { 2808 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2809 } 2810 }) 2811 Web({ src: 'www.example.com', controller: this.controller }) 2812 } 2813 } 2814} 2815``` 2816 2817### postMessage 2818 2819postMessage(name: string, ports: Array\<WebMessagePort>, uri: string): void 2820 2821发送Web消息端口到HTML。 2822 2823**系统能力:** SystemCapability.Web.Webview.Core 2824 2825**参数:** 2826 2827| 参数名 | 类型 | 必填 | 说明 | 2828| ------ | ---------------------- | ---- | :------------------------------- | 2829| name | string | 是 | 要发送的消息名称。 | 2830| ports | Array\<[WebMessagePort](#webmessageport)> | 是 | 要发送的消息端口。 | 2831| uri | string | 是 | 接收该消息的URI。 | 2832 2833**错误码:** 2834 2835以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2836 2837| 错误码ID | 错误信息 | 2838| -------- | ------------------------------------------------------------ | 2839| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2840| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2841 2842**示例:** 2843 2844```ts 2845// xxx.ets 2846import { webview } from '@kit.ArkWeb'; 2847import { BusinessError } from '@kit.BasicServicesKit'; 2848 2849@Entry 2850@Component 2851struct WebComponent { 2852 controller: webview.WebviewController = new webview.WebviewController(); 2853 ports: webview.WebMessagePort[] = []; 2854 @State sendFromEts: string = 'Send this message from ets to HTML'; 2855 @State receivedFromHtml: string = 'Display received message send from HTML'; 2856 2857 build() { 2858 Column() { 2859 // 展示接收到的来自HTML的内容 2860 Text(this.receivedFromHtml) 2861 // 输入框的内容发送到html 2862 TextInput({ placeholder: 'Send this message from ets to HTML' }) 2863 .onChange((value: string) => { 2864 this.sendFromEts = value; 2865 }) 2866 2867 Button('postMessage') 2868 .onClick(() => { 2869 try { 2870 // 1、创建两个消息端口。 2871 this.ports = this.controller.createWebMessagePorts(); 2872 // 2、在应用侧的消息端口(如端口1)上注册回调事件。 2873 this.ports[1].onMessageEvent((result: webview.WebMessage) => { 2874 let msg = 'Got msg from HTML:'; 2875 if (typeof (result) == "string") { 2876 console.log("received string message from html5, string is:" + result); 2877 msg = msg + result; 2878 } else if (typeof (result) == "object") { 2879 if (result instanceof ArrayBuffer) { 2880 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2881 msg = msg + "length is " + result.byteLength; 2882 } else { 2883 console.log("not support"); 2884 } 2885 } else { 2886 console.log("not support"); 2887 } 2888 this.receivedFromHtml = msg; 2889 }) 2890 // 3、将另一个消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。 2891 this.controller.postMessage('__init_port__', [this.ports[0]], '*'); 2892 } catch (error) { 2893 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2894 } 2895 }) 2896 2897 // 4、使用应用侧的端口给另一个已经发送到html的端口发送消息。 2898 Button('SendDataToHTML') 2899 .onClick(() => { 2900 try { 2901 if (this.ports && this.ports[1]) { 2902 this.ports[1].postMessageEvent(this.sendFromEts); 2903 } else { 2904 console.error(`ports is null, Please initialize first`); 2905 } 2906 } catch (error) { 2907 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 2908 } 2909 }) 2910 Web({ src: $rawfile('index.html'), controller: this.controller }) 2911 } 2912 } 2913} 2914``` 2915 2916加载的html文件。 2917```html 2918<!--index.html--> 2919<!DOCTYPE html> 2920<html> 2921<head> 2922 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 2923 <title>WebView Message Port Demo</title> 2924</head> 2925 2926 <body> 2927 <h1>WebView Message Port Demo</h1> 2928 <div> 2929 <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/> 2930 <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/> 2931 </div> 2932 <p class="output">display received message send from ets</p> 2933 </body> 2934 <script src="xxx.js"></script> 2935</html> 2936``` 2937 2938```js 2939//xxx.js 2940var h5Port; 2941var output = document.querySelector('.output'); 2942window.addEventListener('message', function (event) { 2943 if (event.data == '__init_port__') { 2944 if (event.ports[0] != null) { 2945 h5Port = event.ports[0]; // 1. 保存从ets侧发送过来的端口 2946 h5Port.onmessage = function (event) { 2947 // 2. 接收ets侧发送过来的消息. 2948 var msg = 'Got message from ets:'; 2949 var result = event.data; 2950 if (typeof(result) == "string") { 2951 console.log("received string message from html5, string is:" + result); 2952 msg = msg + result; 2953 } else if (typeof(result) == "object") { 2954 if (result instanceof ArrayBuffer) { 2955 console.log("received arraybuffer from html5, length is:" + result.byteLength); 2956 msg = msg + "length is " + result.byteLength; 2957 } else { 2958 console.log("not support"); 2959 } 2960 } else { 2961 console.log("not support"); 2962 } 2963 output.innerHTML = msg; 2964 } 2965 } 2966 } 2967}) 2968 2969// 3. 使用h5Port往ets侧发送消息. 2970function PostMsgToEts(data) { 2971 if (h5Port) { 2972 h5Port.postMessage(data); 2973 } else { 2974 console.error("h5Port is null, Please initialize first"); 2975 } 2976} 2977``` 2978 2979### requestFocus 2980 2981requestFocus(): void 2982 2983使当前web页面获取焦点。 2984 2985**系统能力:** SystemCapability.Web.Webview.Core 2986 2987**错误码:** 2988 2989以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 2990 2991| 错误码ID | 错误信息 | 2992| -------- | ------------------------------------------------------------ | 2993| 17100001 | Init error. The WebviewController must be associated with a Web component. | 2994 2995**示例:** 2996 2997```ts 2998// xxx.ets 2999import { webview } from '@kit.ArkWeb'; 3000import { BusinessError } from '@kit.BasicServicesKit'; 3001 3002@Entry 3003@Component 3004struct WebComponent { 3005 controller: webview.WebviewController = new webview.WebviewController(); 3006 3007 build() { 3008 Column() { 3009 Button('requestFocus') 3010 .onClick(() => { 3011 try { 3012 this.controller.requestFocus(); 3013 } catch (error) { 3014 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3015 } 3016 }); 3017 Web({ src: 'www.example.com', controller: this.controller }) 3018 } 3019 } 3020} 3021``` 3022 3023### zoomIn 3024 3025zoomIn(): void 3026 3027调用此接口将当前网页进行放大,比例为20%。 3028 3029**系统能力:** SystemCapability.Web.Webview.Core 3030 3031**错误码:** 3032 3033以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3034 3035| 错误码ID | 错误信息 | 3036| -------- | ------------------------------------------------------------ | 3037| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3038| 17100004 | Function not enabled. | 3039 3040**示例:** 3041 3042```ts 3043// xxx.ets 3044import { webview } from '@kit.ArkWeb'; 3045import { BusinessError } from '@kit.BasicServicesKit'; 3046 3047@Entry 3048@Component 3049struct WebComponent { 3050 controller: webview.WebviewController = new webview.WebviewController(); 3051 3052 build() { 3053 Column() { 3054 Button('zoomIn') 3055 .onClick(() => { 3056 try { 3057 this.controller.zoomIn(); 3058 } catch (error) { 3059 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3060 } 3061 }) 3062 Web({ src: 'www.example.com', controller: this.controller }) 3063 } 3064 } 3065} 3066``` 3067 3068### zoomOut 3069 3070zoomOut(): void 3071 3072调用此接口将当前网页进行缩小,比例为20%。 3073 3074**系统能力:** SystemCapability.Web.Webview.Core 3075 3076**错误码:** 3077 3078以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3079 3080| 错误码ID | 错误信息 | 3081| -------- | ------------------------------------------------------------ | 3082| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3083| 17100004 | Function not enabled. | 3084 3085**示例:** 3086 3087```ts 3088// xxx.ets 3089import { webview } from '@kit.ArkWeb'; 3090import { BusinessError } from '@kit.BasicServicesKit'; 3091 3092@Entry 3093@Component 3094struct WebComponent { 3095 controller: webview.WebviewController = new webview.WebviewController(); 3096 3097 build() { 3098 Column() { 3099 Button('zoomOut') 3100 .onClick(() => { 3101 try { 3102 this.controller.zoomOut(); 3103 } catch (error) { 3104 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3105 } 3106 }) 3107 Web({ src: 'www.example.com', controller: this.controller }) 3108 } 3109 } 3110} 3111``` 3112 3113### getHitTestValue 3114 3115getHitTestValue(): HitTestValue 3116 3117获取当前被点击区域的元素信息。 3118 3119**系统能力:** SystemCapability.Web.Webview.Core 3120 3121**返回值:** 3122 3123| 类型 | 说明 | 3124| ------------ | -------------------- | 3125| [HitTestValue](#hittestvalue) | 点击区域的元素信息。 | 3126 3127**错误码:** 3128 3129以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3130 3131| 错误码ID | 错误信息 | 3132| -------- | ------------------------------------------------------------ | 3133| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3134 3135**示例:** 3136 3137```ts 3138// xxx.ets 3139import { webview } from '@kit.ArkWeb'; 3140import { BusinessError } from '@kit.BasicServicesKit'; 3141 3142@Entry 3143@Component 3144struct WebComponent { 3145 controller: webview.WebviewController = new webview.WebviewController(); 3146 3147 build() { 3148 Column() { 3149 Button('getHitTestValue') 3150 .onClick(() => { 3151 try { 3152 let hitValue = this.controller.getHitTestValue(); 3153 console.log("hitType: " + hitValue.type); 3154 console.log("extra: " + hitValue.extra); 3155 } catch (error) { 3156 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3157 } 3158 }) 3159 Web({ src: 'www.example.com', controller: this.controller }) 3160 } 3161 } 3162} 3163``` 3164 3165### getWebId 3166 3167getWebId(): number 3168 3169获取当前Web组件的索引值,用于多个Web组件的管理。 3170 3171**系统能力:** SystemCapability.Web.Webview.Core 3172 3173**返回值:** 3174 3175| 类型 | 说明 | 3176| ------ | --------------------- | 3177| number | 当前Web组件的索引值。 | 3178 3179**错误码:** 3180 3181以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3182 3183| 错误码ID | 错误信息 | 3184| -------- | ------------------------------------------------------------ | 3185| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3186 3187**示例:** 3188 3189```ts 3190// xxx.ets 3191import { webview } from '@kit.ArkWeb'; 3192import { BusinessError } from '@kit.BasicServicesKit'; 3193 3194@Entry 3195@Component 3196struct WebComponent { 3197 controller: webview.WebviewController = new webview.WebviewController(); 3198 3199 build() { 3200 Column() { 3201 Button('getWebId') 3202 .onClick(() => { 3203 try { 3204 let id = this.controller.getWebId(); 3205 console.log("id: " + id); 3206 } catch (error) { 3207 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3208 } 3209 }) 3210 Web({ src: 'www.example.com', controller: this.controller }) 3211 } 3212 } 3213} 3214``` 3215 3216### getUserAgent 3217 3218getUserAgent(): string 3219 3220获取当前默认用户代理。 3221 3222默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 3223 3224**系统能力:** SystemCapability.Web.Webview.Core 3225 3226**返回值:** 3227 3228| 类型 | 说明 | 3229| ------ | -------------- | 3230| string | 默认用户代理。 | 3231 3232**错误码:** 3233 3234以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3235 3236| 错误码ID | 错误信息 | 3237| -------- | ------------------------------------------------------------ | 3238| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3239 3240**示例:** 3241 3242```ts 3243// xxx.ets 3244import { webview } from '@kit.ArkWeb'; 3245import { BusinessError } from '@kit.BasicServicesKit'; 3246 3247@Entry 3248@Component 3249struct WebComponent { 3250 controller: webview.WebviewController = new webview.WebviewController(); 3251 3252 build() { 3253 Column() { 3254 Button('getUserAgent') 3255 .onClick(() => { 3256 try { 3257 let userAgent = this.controller.getUserAgent(); 3258 console.log("userAgent: " + userAgent); 3259 } catch (error) { 3260 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3261 } 3262 }) 3263 Web({ src: 'www.example.com', controller: this.controller }) 3264 } 3265 } 3266} 3267``` 3268 3269支持开发者基于默认的UserAgent去定制UserAgent。 3270```ts 3271// xxx.ets 3272import { webview } from '@kit.ArkWeb'; 3273import { BusinessError } from '@kit.BasicServicesKit'; 3274 3275@Entry 3276@Component 3277struct WebComponent { 3278 controller: webview.WebviewController = new webview.WebviewController(); 3279 @State ua: string = ""; 3280 3281 aboutToAppear(): void { 3282 webview.once('webInited', () => { 3283 try { 3284 // 应用侧用法示例,定制UserAgent。 3285 this.ua = this.controller.getUserAgent() + 'xxx'; 3286 this.controller.setCustomUserAgent(this.ua); 3287 } catch (error) { 3288 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3289 } 3290 }) 3291 } 3292 3293 build() { 3294 Column() { 3295 Web({ src: 'www.example.com', controller: this.controller }) 3296 } 3297 } 3298} 3299``` 3300 3301### getTitle 3302 3303getTitle(): string 3304 3305获取当前网页的标题。 3306 3307**系统能力:** SystemCapability.Web.Webview.Core 3308 3309**返回值:** 3310 3311| 类型 | 说明 | 3312| ------ | -------------------- | 3313| string | 当前网页的标题。 | 3314 3315**错误码:** 3316 3317以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3318 3319| 错误码ID | 错误信息 | 3320| -------- | ------------------------------------------------------------ | 3321| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3322 3323**示例:** 3324 3325```ts 3326// xxx.ets 3327import { webview } from '@kit.ArkWeb'; 3328import { BusinessError } from '@kit.BasicServicesKit'; 3329 3330@Entry 3331@Component 3332struct WebComponent { 3333 controller: webview.WebviewController = new webview.WebviewController(); 3334 3335 build() { 3336 Column() { 3337 Button('getTitle') 3338 .onClick(() => { 3339 try { 3340 let title = this.controller.getTitle(); 3341 console.log("title: " + title); 3342 } catch (error) { 3343 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3344 } 3345 }) 3346 Web({ src: 'www.example.com', controller: this.controller }) 3347 } 3348 } 3349} 3350``` 3351 3352### getPageHeight 3353 3354getPageHeight(): number 3355 3356获取当前网页的页面高度。 3357 3358**系统能力:** SystemCapability.Web.Webview.Core 3359 3360**返回值:** 3361 3362| 类型 | 说明 | 3363| ------ | -------------------- | 3364| number | 当前网页的页面高度。单位:vp。 | 3365 3366**错误码:** 3367 3368以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3369 3370| 错误码ID | 错误信息 | 3371| -------- | ------------------------------------------------------------ | 3372| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3373 3374**示例:** 3375 3376```ts 3377// xxx.ets 3378import { webview } from '@kit.ArkWeb'; 3379import { BusinessError } from '@kit.BasicServicesKit'; 3380 3381@Entry 3382@Component 3383struct WebComponent { 3384 controller: webview.WebviewController = new webview.WebviewController(); 3385 3386 build() { 3387 Column() { 3388 Button('getPageHeight') 3389 .onClick(() => { 3390 try { 3391 let pageHeight = this.controller.getPageHeight(); 3392 console.log("pageHeight : " + pageHeight); 3393 } catch (error) { 3394 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3395 } 3396 }) 3397 Web({ src: 'www.example.com', controller: this.controller }) 3398 } 3399 } 3400} 3401``` 3402 3403### storeWebArchive 3404 3405storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback\<string>): void 3406 3407以回调方式异步保存当前页面。 3408 3409**系统能力:** SystemCapability.Web.Webview.Core 3410 3411**参数:** 3412 3413| 参数名 | 类型 | 必填 | 说明 | 3414| -------- | --------------------- | ---- | ------------------------------------------------------------ | 3415| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3416| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3417| callback | AsyncCallback\<string> | 是 | 返回文件存储路径,保存网页失败会返回null。 | 3418 3419**错误码:** 3420 3421以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3422 3423| 错误码ID | 错误信息 | 3424| -------- | ------------------------------------------------------------ | 3425| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3426| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3427| 17100003 | Invalid resource path or file type. | 3428 3429**示例:** 3430 3431```ts 3432// xxx.ets 3433import { webview } from '@kit.ArkWeb'; 3434import { BusinessError } from '@kit.BasicServicesKit'; 3435 3436@Entry 3437@Component 3438struct WebComponent { 3439 controller: webview.WebviewController = new webview.WebviewController(); 3440 3441 build() { 3442 Column() { 3443 Button('storeWebArchive') 3444 .onClick(() => { 3445 try { 3446 this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => { 3447 if (error) { 3448 console.error(`save web archive error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3449 return; 3450 } 3451 if (filename != null) { 3452 console.info(`save web archive success: ${filename}`); 3453 } 3454 }); 3455 } catch (error) { 3456 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3457 } 3458 }) 3459 Web({ src: 'www.example.com', controller: this.controller }) 3460 } 3461 } 3462} 3463``` 3464 3465### storeWebArchive 3466 3467storeWebArchive(baseName: string, autoName: boolean): Promise\<string> 3468 3469以Promise方式异步保存当前页面。 3470 3471**系统能力:** SystemCapability.Web.Webview.Core 3472 3473**参数:** 3474 3475| 参数名 | 类型 | 必填 | 说明 | 3476| -------- | -------- | ---- | ------------------------------------------------------------ | 3477| baseName | string | 是 | 生成的离线网页存储位置,该值不能为空。 | 3478| autoName | boolean | 是 | 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。 | 3479 3480**返回值:** 3481 3482| 类型 | 说明 | 3483| --------------- | ----------------------------------------------------- | 3484| Promise\<string> | Promise实例,保存成功返回文件路径,保存失败返回null。 | 3485 3486**错误码:** 3487 3488以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3489 3490| 错误码ID | 错误信息 | 3491| -------- | ------------------------------------------------------------ | 3492| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 3493| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3494| 17100003 | Invalid resource path or file type. | 3495 3496**示例:** 3497 3498```ts 3499// xxx.ets 3500import { webview } from '@kit.ArkWeb'; 3501import { BusinessError } from '@kit.BasicServicesKit'; 3502 3503@Entry 3504@Component 3505struct WebComponent { 3506 controller: webview.WebviewController = new webview.WebviewController(); 3507 3508 build() { 3509 Column() { 3510 Button('storeWebArchive') 3511 .onClick(() => { 3512 try { 3513 this.controller.storeWebArchive("/data/storage/el2/base/", true) 3514 .then(filename => { 3515 if (filename != null) { 3516 console.info(`save web archive success: ${filename}`) 3517 } 3518 }) 3519 .catch((error: BusinessError) => { 3520 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 3521 }) 3522 } catch (error) { 3523 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3524 } 3525 }) 3526 Web({ src: 'www.example.com', controller: this.controller }) 3527 } 3528 } 3529} 3530``` 3531 3532### getUrl 3533 3534getUrl(): string 3535 3536获取当前页面的url地址。 3537 3538**系统能力:** SystemCapability.Web.Webview.Core 3539 3540**返回值:** 3541 3542| 类型 | 说明 | 3543| ------ | ------------------- | 3544| string | 当前页面的url地址。 | 3545 3546**错误码:** 3547 3548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3549 3550| 错误码ID | 错误信息 | 3551| -------- | ------------------------------------------------------------ | 3552| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3553 3554**示例:** 3555 3556```ts 3557// xxx.ets 3558import { webview } from '@kit.ArkWeb'; 3559import { BusinessError } from '@kit.BasicServicesKit'; 3560 3561@Entry 3562@Component 3563struct WebComponent { 3564 controller: webview.WebviewController = new webview.WebviewController(); 3565 3566 build() { 3567 Column() { 3568 Button('getUrl') 3569 .onClick(() => { 3570 try { 3571 let url = this.controller.getUrl(); 3572 console.log("url: " + url); 3573 } catch (error) { 3574 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3575 } 3576 }) 3577 Web({ src: 'www.example.com', controller: this.controller }) 3578 } 3579 } 3580} 3581``` 3582 3583### stop 3584 3585stop(): void 3586 3587停止页面加载。 3588 3589**系统能力:** SystemCapability.Web.Webview.Core 3590 3591**错误码:** 3592 3593以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3594 3595| 错误码ID | 错误信息 | 3596| -------- | ------------------------------------------------------------ | 3597| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3598 3599**示例:** 3600 3601```ts 3602// xxx.ets 3603import { webview } from '@kit.ArkWeb'; 3604import { BusinessError } from '@kit.BasicServicesKit'; 3605 3606@Entry 3607@Component 3608struct WebComponent { 3609 controller: webview.WebviewController = new webview.WebviewController(); 3610 3611 build() { 3612 Column() { 3613 Button('stop') 3614 .onClick(() => { 3615 try { 3616 this.controller.stop(); 3617 } catch (error) { 3618 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3619 } 3620 }); 3621 Web({ src: 'www.example.com', controller: this.controller }) 3622 } 3623 } 3624} 3625``` 3626 3627### backOrForward 3628 3629backOrForward(step: number): void 3630 3631按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。 3632 3633前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。 3634 3635**系统能力:** SystemCapability.Web.Webview.Core 3636 3637**参数:** 3638 3639| 参数名 | 类型 | 必填 | 说明 | 3640| ------ | -------- | ---- | ---------------------- | 3641| step | number | 是 | 需要前进或后退的步长。 | 3642 3643**错误码:** 3644 3645以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3646 3647| 错误码ID | 错误信息 | 3648| -------- | ------------------------------------------------------------ | 3649| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3650| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3651 3652**示例:** 3653 3654```ts 3655// xxx.ets 3656import { webview } from '@kit.ArkWeb'; 3657import { BusinessError } from '@kit.BasicServicesKit'; 3658 3659@Entry 3660@Component 3661struct WebComponent { 3662 controller: webview.WebviewController = new webview.WebviewController(); 3663 @State step: number = -2; 3664 3665 build() { 3666 Column() { 3667 Button('backOrForward') 3668 .onClick(() => { 3669 try { 3670 this.controller.backOrForward(this.step); 3671 } catch (error) { 3672 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3673 } 3674 }) 3675 Web({ src: 'www.example.com', controller: this.controller }) 3676 } 3677 } 3678} 3679``` 3680 3681### scrollTo 3682 3683scrollTo(x:number, y:number, duration?:number): void 3684 3685在指定时间内,将页面滚动到指定的绝对位置。 3686 3687**系统能力:** SystemCapability.Web.Webview.Core 3688 3689**参数:** 3690 3691| 参数名 | 类型 | 必填 | 说明 | 3692| ------ | -------- | ---- | ---------------------- | 3693| x | number | 是 | 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。单位:vp。 | 3694| y | number | 是 | 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。单位:vp。| 3695| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3696 3697**错误码:** 3698 3699以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3700 3701| 错误码ID | 错误信息 | 3702| -------- | ------------------------------------------------------------ | 3703| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3704| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3705 3706**示例:** 3707 3708```ts 3709// xxx.ets 3710import { webview } from '@kit.ArkWeb'; 3711import { BusinessError } from '@kit.BasicServicesKit'; 3712 3713@Entry 3714@Component 3715struct WebComponent { 3716 controller: webview.WebviewController = new webview.WebviewController(); 3717 3718 build() { 3719 Column() { 3720 Button('scrollTo') 3721 .onClick(() => { 3722 try { 3723 this.controller.scrollTo(50, 50, 500); 3724 } catch (error) { 3725 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3726 } 3727 }) 3728 Button('stopScroll') 3729 .onClick(() => { 3730 try { 3731 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3732 } catch (error) { 3733 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3734 } 3735 }) 3736 Web({ src: $rawfile('index.html'), controller: this.controller }) 3737 } 3738 } 3739} 3740``` 3741 3742加载的html文件。 3743```html 3744<!--index.html--> 3745<!DOCTYPE html> 3746<html> 3747<head> 3748 <title>Demo</title> 3749 <style> 3750 body { 3751 width:2000px; 3752 height:2000px; 3753 padding-right:170px; 3754 padding-left:170px; 3755 border:5px solid blueviolet 3756 } 3757 </style> 3758</head> 3759<body> 3760Scroll Test 3761</body> 3762</html> 3763``` 3764 3765### scrollBy 3766 3767scrollBy(deltaX:number, deltaY:number,duration?:number): void 3768 3769在指定时间内将页面滚动指定的偏移量。 3770 3771**系统能力:** SystemCapability.Web.Webview.Core 3772 3773**参数:** 3774 3775| 参数名 | 类型 | 必填 | 说明 | 3776| ------ | -------- | ---- | ---------------------- | 3777| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。单位:vp。 | 3778| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。单位:vp。 | 3779| duration<sup>14+</sup> | number | 否 | 滚动动画时间。<br>单位:ms。<br>不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。 | 3780 3781**错误码:** 3782 3783以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3784 3785| 错误码ID | 错误信息 | 3786| -------- | ------------------------------------------------------------ | 3787| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3788| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3789 3790> **说明:** 3791> 3792> 嵌套滚动场景中,调用scrollBy不会触发父组件的嵌套滚动。 3793 3794**示例:** 3795 3796```ts 3797// xxx.ets 3798import { webview } from '@kit.ArkWeb'; 3799import { BusinessError } from '@kit.BasicServicesKit'; 3800 3801@Entry 3802@Component 3803struct WebComponent { 3804 controller: webview.WebviewController = new webview.WebviewController(); 3805 3806 build() { 3807 Column() { 3808 Button('scrollBy') 3809 .onClick(() => { 3810 try { 3811 this.controller.scrollBy(50, 50, 500); 3812 } catch (error) { 3813 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3814 } 3815 }) 3816 Button('stopScroll') 3817 .onClick(() => { 3818 try { 3819 this.controller.scrollBy(0, 0, 1); //如果想停止当前scroll产生的动画,可再次生成一个1ms的动画去打断该动画。 3820 } catch (error) { 3821 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3822 } 3823 }) 3824 Web({ src: $rawfile('index.html'), controller: this.controller }) 3825 } 3826 } 3827} 3828``` 3829 3830加载的html文件。 3831```html 3832<!--index.html--> 3833<!DOCTYPE html> 3834<html> 3835<head> 3836 <title>Demo</title> 3837 <style> 3838 body { 3839 width:2000px; 3840 height:2000px; 3841 padding-right:170px; 3842 padding-left:170px; 3843 border:5px solid blueviolet 3844 } 3845 </style> 3846</head> 3847<body> 3848Scroll Test 3849</body> 3850</html> 3851``` 3852### scrollByWithResult<sup>12+</sup> 3853 3854scrollByWithResult(deltaX: number, deltaY: number): boolean 3855 3856将页面滚动指定的偏移量,返回值表示此次滚动是否执行成功。 3857 3858**系统能力:** SystemCapability.Web.Webview.Core 3859 3860**参数:** 3861 3862| 参数名 | 类型 | 必填 | 说明 | 3863| ------ | -------- | ---- | ---------------------- | 3864| deltaX | number | 是 | 水平偏移量,其中水平向右为正方向。 | 3865| deltaY | number | 是 | 垂直偏移量,其中垂直向下为正方向。 | 3866 3867**返回值:** 3868 3869| 类型 | 说明 | 3870| ------- | --------------------------------------- | 3871| boolean | 当前网页是否可以滑动,默认为false。| 3872 3873**错误码:** 3874 3875以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3876 3877| 错误码ID | 错误信息 | 3878| -------- | ------------------------------------------------------------ | 3879| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3880| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3881 3882> **说明:** 3883> 3884> - 返回值场景:Web页面处于触摸中状态时,返回false,否则返回true。 3885> - 同层渲染场景中,Web的同层渲染区域处于触摸中状态时,返回值为true。 3886> - 嵌套滚动场景中,调用scrollByWithResult不会触发父组件的嵌套滚动。 3887> - 此接口不保证滑动帧率性能。 3888 3889**示例:** 3890 3891```ts 3892// xxx.ets 3893import { webview } from '@kit.ArkWeb'; 3894import { BusinessError } from '@kit.BasicServicesKit'; 3895 3896@Entry 3897@Component 3898struct WebComponent { 3899 controller: webview.WebviewController = new webview.WebviewController(); 3900 3901 build() { 3902 Column() { 3903 Button('scrollByWithResult') 3904 .onClick(() => { 3905 try { 3906 let result = this.controller.scrollByWithResult(50, 50); 3907 console.log("original result: " + result); 3908 } catch (error) { 3909 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3910 } 3911 }) 3912 Web({ src: $rawfile('index.html'), controller: this.controller }) 3913 } 3914 } 3915} 3916``` 3917 3918加载的html文件。 3919```html 3920<!--index.html--> 3921<!DOCTYPE html> 3922<html> 3923<head> 3924 <title>Demo</title> 3925 <style> 3926 body { 3927 width:2000px; 3928 height:2000px; 3929 padding-right:170px; 3930 padding-left:170px; 3931 border:5px solid blueviolet 3932 } 3933 </style> 3934</head> 3935<body> 3936Scroll Test 3937</body> 3938</html> 3939``` 3940### slideScroll 3941 3942slideScroll(vx:number, vy:number): void 3943 3944按照指定速度模拟对页面的轻扫滚动动作。 3945 3946**系统能力:** SystemCapability.Web.Webview.Core 3947 3948**参数:** 3949 3950| 参数名 | 类型 | 必填 | 说明 | 3951| ------ | -------- | ---- | ---------------------- | 3952| vx | number | 是 | 轻扫滚动的水平速度分量,其中水平向右为速度正方向。单位:vp/ms。 | 3953| vy | number | 是 | 轻扫滚动的垂直速度分量,其中垂直向下为速度正方向。单位:vp/ms。 | 3954 3955**错误码:** 3956 3957以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 3958 3959| 错误码ID | 错误信息 | 3960| -------- | ------------------------------------------------------------ | 3961| 17100001 | Init error. The WebviewController must be associated with a Web component. | 3962| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3963 3964**示例:** 3965 3966```ts 3967// xxx.ets 3968import { webview } from '@kit.ArkWeb'; 3969import { BusinessError } from '@kit.BasicServicesKit'; 3970 3971@Entry 3972@Component 3973struct WebComponent { 3974 controller: webview.WebviewController = new webview.WebviewController(); 3975 3976 build() { 3977 Column() { 3978 Button('slideScroll') 3979 .onClick(() => { 3980 try { 3981 this.controller.slideScroll(500, 500); 3982 } catch (error) { 3983 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 3984 } 3985 }) 3986 Web({ src: $rawfile('index.html'), controller: this.controller }) 3987 } 3988 } 3989} 3990``` 3991 3992加载的html文件。 3993```html 3994<!--index.html--> 3995<!DOCTYPE html> 3996<html> 3997<head> 3998 <title>Demo</title> 3999 <style> 4000 body { 4001 width:3000px; 4002 height:3000px; 4003 padding-right:170px; 4004 padding-left:170px; 4005 border:5px solid blueviolet 4006 } 4007 </style> 4008</head> 4009<body> 4010Scroll Test 4011</body> 4012</html> 4013``` 4014 4015### getOriginalUrl 4016 4017getOriginalUrl(): string 4018 4019获取当前页面的原始url地址。 4020风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 4021 4022**系统能力:** SystemCapability.Web.Webview.Core 4023 4024**返回值:** 4025 4026| 类型 | 说明 | 4027| ------ | ----------------------- | 4028| string | 当前页面的原始url地址。 | 4029 4030**错误码:** 4031 4032以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4033 4034| 错误码ID | 错误信息 | 4035| -------- | ------------------------------------------------------------ | 4036| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4037 4038**示例:** 4039 4040```ts 4041// xxx.ets 4042import { webview } from '@kit.ArkWeb'; 4043import { BusinessError } from '@kit.BasicServicesKit'; 4044 4045@Entry 4046@Component 4047struct WebComponent { 4048 controller: webview.WebviewController = new webview.WebviewController(); 4049 4050 build() { 4051 Column() { 4052 Button('getOrgUrl') 4053 .onClick(() => { 4054 try { 4055 let url = this.controller.getOriginalUrl(); 4056 console.log("original url: " + url); 4057 } catch (error) { 4058 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4059 } 4060 }) 4061 Web({ src: 'www.example.com', controller: this.controller }) 4062 } 4063 } 4064} 4065``` 4066 4067### getFavicon 4068 4069getFavicon(): image.PixelMap 4070 4071获取页面的favicon图标。 4072 4073**系统能力:** SystemCapability.Web.Webview.Core 4074 4075**返回值:** 4076 4077| 类型 | 说明 | 4078| -------------------------------------- | ------------------------------- | 4079| [PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 页面favicon图标的PixelMap对象。 | 4080 4081**错误码:** 4082 4083以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4084 4085| 错误码ID | 错误信息 | 4086| -------- | ------------------------------------------------------------ | 4087| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4088 4089**示例:** 4090 4091```ts 4092// xxx.ets 4093import { webview } from '@kit.ArkWeb'; 4094import { BusinessError } from '@kit.BasicServicesKit'; 4095import { image } from '@kit.ImageKit'; 4096 4097@Entry 4098@Component 4099struct WebComponent { 4100 controller: webview.WebviewController = new webview.WebviewController(); 4101 @State pixelmap: image.PixelMap | undefined = undefined; 4102 4103 build() { 4104 Column() { 4105 Button('getFavicon') 4106 .onClick(() => { 4107 try { 4108 this.pixelmap = this.controller.getFavicon(); 4109 } catch (error) { 4110 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4111 } 4112 }) 4113 Web({ src: 'www.example.com', controller: this.controller }) 4114 } 4115 } 4116} 4117``` 4118 4119### setNetworkAvailable 4120 4121setNetworkAvailable(enable: boolean): void 4122 4123设置JavaScript中的window.navigator.onLine属性。 4124 4125**系统能力:** SystemCapability.Web.Webview.Core 4126 4127**参数:** 4128 4129| 参数名 | 类型 | 必填 | 说明 | 4130| ------ | ------- | ---- | --------------------------------- | 4131| enable | boolean | 是 | 是否使能window.navigator.onLine。 | 4132 4133**错误码:** 4134 4135以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4136 4137| 错误码ID | 错误信息 | 4138| -------- | ------------------------------------------------------------ | 4139| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4140| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4141 4142**示例:** 4143 4144```ts 4145// xxx.ets 4146import { webview } from '@kit.ArkWeb'; 4147import { BusinessError } from '@kit.BasicServicesKit'; 4148 4149@Entry 4150@Component 4151struct WebComponent { 4152 controller: webview.WebviewController = new webview.WebviewController(); 4153 4154 build() { 4155 Column() { 4156 Button('setNetworkAvailable') 4157 .onClick(() => { 4158 try { 4159 this.controller.setNetworkAvailable(true); 4160 } catch (error) { 4161 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4162 } 4163 }) 4164 Web({ src: $rawfile('index.html'), controller: this.controller }) 4165 } 4166 } 4167} 4168``` 4169 4170加载的html文件。 4171```html 4172<!-- index.html --> 4173<!DOCTYPE html> 4174<html> 4175<body> 4176<h1>online 属性</h1> 4177<p id="demo"></p> 4178<button onclick="func()">click</button> 4179<script> 4180 let online = navigator.onLine; 4181 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4182 4183 function func(){ 4184 var online = navigator.onLine; 4185 document.getElementById("demo").innerHTML = "浏览器在线:" + online; 4186 } 4187</script> 4188</body> 4189</html> 4190``` 4191 4192### hasImage 4193 4194hasImage(callback: AsyncCallback\<boolean>): void 4195 4196通过Callback方式异步查找当前页面是否存在图像。 4197 4198**系统能力:** SystemCapability.Web.Webview.Core 4199 4200**参数:** 4201 4202| 参数名 | 类型 | 必填 | 说明 | 4203| -------- | ----------------------- | ---- | -------------------------- | 4204| callback | AsyncCallback\<boolean> | 是 | 返回查找页面是否存在图像。 | 4205 4206**错误码:** 4207 4208以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4209 4210| 错误码ID | 错误信息 | 4211| -------- | ------------------------------------------------------------ | 4212| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4213| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4214 4215**示例:** 4216 4217```ts 4218// xxx.ets 4219import { webview } from '@kit.ArkWeb'; 4220import { BusinessError } from '@kit.BasicServicesKit'; 4221 4222@Entry 4223@Component 4224struct WebComponent { 4225 controller: webview.WebviewController = new webview.WebviewController(); 4226 4227 build() { 4228 Column() { 4229 Button('hasImageCb') 4230 .onClick(() => { 4231 try { 4232 this.controller.hasImage((error, data) => { 4233 if (error) { 4234 console.error(`hasImage error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4235 return; 4236 } 4237 console.info("hasImage: " + data); 4238 }); 4239 } catch (error) { 4240 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4241 } 4242 }) 4243 Web({ src: 'www.example.com', controller: this.controller }) 4244 } 4245 } 4246} 4247``` 4248 4249### hasImage 4250 4251hasImage(): Promise\<boolean> 4252 4253通过Promise方式异步查找当前页面是否存在图像。 4254 4255**系统能力:** SystemCapability.Web.Webview.Core 4256 4257**返回值:** 4258 4259| 类型 | 说明 | 4260| ----------------- | --------------------------------------- | 4261| Promise\<boolean> | Promise实例,返回查找页面是否存在图像。 | 4262 4263**错误码:** 4264 4265以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4266 4267| 错误码ID | 错误信息 | 4268| -------- | ------------------------------------------------------------ | 4269| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4270| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 4271 4272**示例:** 4273 4274```ts 4275// xxx.ets 4276import { webview } from '@kit.ArkWeb'; 4277import { BusinessError } from '@kit.BasicServicesKit'; 4278 4279@Entry 4280@Component 4281struct WebComponent { 4282 controller: webview.WebviewController = new webview.WebviewController(); 4283 4284 build() { 4285 Column() { 4286 Button('hasImagePm') 4287 .onClick(() => { 4288 try { 4289 this.controller.hasImage().then((data) => { 4290 console.info('hasImage: ' + data); 4291 }).catch((error: BusinessError) => { 4292 console.error("error: " + error); 4293 }) 4294 } catch (error) { 4295 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4296 } 4297 }) 4298 Web({ src: 'www.example.com', controller: this.controller }) 4299 } 4300 } 4301} 4302``` 4303 4304### removeCache 4305 4306removeCache(clearRom: boolean): void 4307 4308清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。 4309 4310> **说明:** 4311> 4312> 可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。 4313 4314**系统能力:** SystemCapability.Web.Webview.Core 4315 4316**参数:** 4317 4318| 参数名 | 类型 | 必填 | 说明 | 4319| -------- | ------- | ---- | -------------------------------------------------------- | 4320| clearRom | boolean | 是 | 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存。 | 4321 4322**错误码:** 4323 4324以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4325 4326| 错误码ID | 错误信息 | 4327| -------- | ------------------------------------------------------------ | 4328| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4329| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4330 4331**示例:** 4332 4333```ts 4334// xxx.ets 4335import { webview } from '@kit.ArkWeb'; 4336import { BusinessError } from '@kit.BasicServicesKit'; 4337 4338@Entry 4339@Component 4340struct WebComponent { 4341 controller: webview.WebviewController = new webview.WebviewController(); 4342 4343 build() { 4344 Column() { 4345 Button('removeCache') 4346 .onClick(() => { 4347 try { 4348 this.controller.removeCache(false); 4349 } catch (error) { 4350 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4351 } 4352 }) 4353 Web({ src: 'www.example.com', controller: this.controller }) 4354 } 4355 } 4356} 4357``` 4358 4359### pageUp 4360 4361pageUp(top: boolean): void 4362 4363将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。 4364 4365**系统能力:** SystemCapability.Web.Webview.Core 4366 4367**参数:** 4368 4369| 参数名 | 类型 | 必填 | 说明 | 4370| ------ | ------- | ---- | ------------------------------------------------------------ | 4371| top | boolean | 是 | 是否跳转到页面最顶部,设置为false时将页面内容向上滚动半个视框大小,设置为true时跳转到页面最顶部。 | 4372 4373**错误码:** 4374 4375以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4376 4377| 错误码ID | 错误信息 | 4378| -------- | ------------------------------------------------------------ | 4379| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4380| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4381 4382**示例:** 4383 4384```ts 4385// xxx.ets 4386import { webview } from '@kit.ArkWeb'; 4387import { BusinessError } from '@kit.BasicServicesKit'; 4388 4389@Entry 4390@Component 4391struct WebComponent { 4392 controller: webview.WebviewController = new webview.WebviewController(); 4393 4394 build() { 4395 Column() { 4396 Button('pageUp') 4397 .onClick(() => { 4398 try { 4399 this.controller.pageUp(false); 4400 } catch (error) { 4401 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4402 } 4403 }) 4404 Web({ src: 'www.example.com', controller: this.controller }) 4405 } 4406 } 4407} 4408``` 4409 4410### pageDown 4411 4412pageDown(bottom: boolean): void 4413 4414将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。 4415 4416**系统能力:** SystemCapability.Web.Webview.Core 4417 4418**参数:** 4419 4420| 参数名 | 类型 | 必填 | 说明 | 4421| ------ | ------- | ---- | ------------------------------------------------------------ | 4422| bottom | boolean | 是 | 是否跳转到页面最底部,设置为false时将页面内容向下滚动半个视框大小,设置为true时跳转到页面最底部。 | 4423 4424**错误码:** 4425 4426以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4427 4428| 错误码ID | 错误信息 | 4429| -------- | ------------------------------------------------------------ | 4430| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4431| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4432 4433**示例:** 4434 4435```ts 4436// xxx.ets 4437import { webview } from '@kit.ArkWeb'; 4438import { BusinessError } from '@kit.BasicServicesKit'; 4439 4440@Entry 4441@Component 4442struct WebComponent { 4443 controller: webview.WebviewController = new webview.WebviewController(); 4444 4445 build() { 4446 Column() { 4447 Button('pageDown') 4448 .onClick(() => { 4449 try { 4450 this.controller.pageDown(false); 4451 } catch (error) { 4452 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4453 } 4454 }) 4455 Web({ src: 'www.example.com', controller: this.controller }) 4456 } 4457 } 4458} 4459``` 4460 4461### getBackForwardEntries 4462 4463getBackForwardEntries(): BackForwardList 4464 4465获取当前Webview的历史信息列表。 4466 4467**系统能力:** SystemCapability.Web.Webview.Core 4468 4469**返回值:** 4470 4471| 类型 | 说明 | 4472| ----------------------------------- | --------------------------- | 4473| [BackForwardList](#backforwardlist) | 当前Webview的历史信息列表。 | 4474 4475**错误码:** 4476 4477以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4478 4479| 错误码ID | 错误信息 | 4480| -------- | ------------------------------------------------------------ | 4481| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4482 4483**示例:** 4484 4485```ts 4486// xxx.ets 4487import { webview } from '@kit.ArkWeb'; 4488import { BusinessError } from '@kit.BasicServicesKit'; 4489 4490@Entry 4491@Component 4492struct WebComponent { 4493 controller: webview.WebviewController = new webview.WebviewController(); 4494 4495 build() { 4496 Column() { 4497 Button('getBackForwardEntries') 4498 .onClick(() => { 4499 try { 4500 let list = this.controller.getBackForwardEntries() 4501 } catch (error) { 4502 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4503 } 4504 }) 4505 Web({ src: 'www.example.com', controller: this.controller }) 4506 } 4507 } 4508} 4509``` 4510 4511### serializeWebState 4512 4513serializeWebState(): Uint8Array 4514 4515将当前Webview的页面状态历史记录信息序列化。 4516 4517**系统能力:** SystemCapability.Web.Webview.Core 4518 4519**返回值:** 4520 4521| 类型 | 说明 | 4522| ---------- | --------------------------------------------- | 4523| Uint8Array | 当前Webview的页面状态历史记录序列化后的数据。 | 4524 4525**错误码:** 4526 4527以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4528 4529| 错误码ID | 错误信息 | 4530| -------- | ------------------------------------------------------------ | 4531| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4532 4533**示例:** 4534 45351.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4536```ts 4537// xxx.ets 4538import { webview } from '@kit.ArkWeb'; 4539import { BusinessError } from '@kit.BasicServicesKit'; 4540import { fileIo } from '@kit.CoreFileKit'; 4541 4542@Entry 4543@Component 4544struct WebComponent { 4545 controller: webview.WebviewController = new webview.WebviewController(); 4546 4547 build() { 4548 Column() { 4549 Button('serializeWebState') 4550 .onClick(() => { 4551 try { 4552 let state = this.controller.serializeWebState(); 4553 let path:string | undefined = AppStorage.get("cacheDir"); 4554 if (path) { 4555 path += '/WebState'; 4556 // 以同步方法打开文件。 4557 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); 4558 fileIo.writeSync(file.fd, state.buffer); 4559 fileIo.closeSync(file.fd); 4560 } 4561 } catch (error) { 4562 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4563 } 4564 }) 4565 Web({ src: 'www.example.com', controller: this.controller }) 4566 } 4567 } 4568} 4569``` 4570 45712.修改EntryAbility.ets。 4572获取应用缓存文件路径。 4573```ts 4574// xxx.ets 4575import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4576 4577export default class EntryAbility extends UIAbility { 4578 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4579 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4580 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4581 } 4582} 4583``` 4584 4585### restoreWebState 4586 4587restoreWebState(state: Uint8Array): void 4588 4589当前Webview从序列化数据中恢复页面状态历史记录。 4590 4591如果state过大,可能会导致异常。建议state大于512k时,放弃恢复页面状态历史记录。 4592 4593**系统能力:** SystemCapability.Web.Webview.Core 4594 4595**参数:** 4596 4597| 参数名 | 类型 | 必填 | 说明 | 4598| ------ | ---------- | ---- | ---------------------------- | 4599| state | Uint8Array | 是 | 页面状态历史记录序列化数据。 | 4600 4601**错误码:** 4602 4603以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4604 4605| 错误码ID | 错误信息 | 4606| -------- | ------------------------------------------------------------ | 4607| 17100001 | Init error. The WebviewController must be associated with a Web component. | 4608| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4609 4610**示例:** 4611 46121.对文件的操作需要导入文件管理模块,详情请参考[文件管理](../apis-core-file-kit/js-apis-file-fs.md)。 4613```ts 4614// xxx.ets 4615import { webview } from '@kit.ArkWeb'; 4616import { BusinessError } from '@kit.BasicServicesKit'; 4617import { fileIo } from '@kit.CoreFileKit'; 4618 4619@Entry 4620@Component 4621struct WebComponent { 4622 controller: webview.WebviewController = new webview.WebviewController(); 4623 4624 build() { 4625 Column() { 4626 Button('RestoreWebState') 4627 .onClick(() => { 4628 try { 4629 let path: string | undefined = AppStorage.get("cacheDir"); 4630 if (path) { 4631 path += '/WebState'; 4632 // 以同步方法打开文件。 4633 let file = fileIo.openSync(path, fileIo.OpenMode.READ_WRITE); 4634 let stat = fileIo.statSync(path); 4635 let size = stat.size; 4636 let buf = new ArrayBuffer(size); 4637 fileIo.read(file.fd, buf, (err, readLen) => { 4638 if (err) { 4639 console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code); 4640 } else { 4641 console.info("read file data succeed"); 4642 this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen))); 4643 fileIo.closeSync(file); 4644 } 4645 }); 4646 } 4647 } catch (error) { 4648 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4649 } 4650 }) 4651 Web({ src: 'www.example.com', controller: this.controller }) 4652 } 4653 } 4654} 4655``` 4656 46572.修改EntryAbility.ets。 4658获取应用缓存文件路径。 4659```ts 4660// xxx.ets 4661import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 4662 4663export default class EntryAbility extends UIAbility { 4664 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 4665 // 通过在AppStorage对象上绑定cacheDir,可以实现UIAbility组件与Page之间的数据同步。 4666 AppStorage.setOrCreate("cacheDir", this.context.cacheDir); 4667 } 4668} 4669``` 4670 4671### customizeSchemes 4672 4673static customizeSchemes(schemes: Array\<WebCustomScheme\>): void 4674 4675对Web内核赋予自定义协议url的跨域请求与fetch请求的权限。当Web在跨域fetch自定义协议url时,该fetch请求可被onInterceptRequest事件接口所拦截,从而开发者可以进一步处理该请求。建议在任何Web组件初始化之前调用该接口。 4676 4677**系统能力:** SystemCapability.Web.Webview.Core 4678 4679**参数:** 4680 4681| 参数名 | 类型 | 必填 | 说明 | 4682| -------- | ------- | ---- | -------------------------------------- | 4683| schemes | Array\<[WebCustomScheme](#webcustomscheme)\> | 是 | 自定义协议配置,最多支持同时配置10个自定义协议。 | 4684 4685**错误码:** 4686 4687以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4688 4689| 错误码ID | 错误信息 | 4690| -------- | ------------------------------------------------------------ | 4691| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 4692| 17100020 | Failed to register custom schemes. | 4693 4694**示例:** 4695 4696```ts 4697// xxx.ets 4698import { webview } from '@kit.ArkWeb'; 4699import { BusinessError } from '@kit.BasicServicesKit'; 4700 4701@Entry 4702@Component 4703struct WebComponent { 4704 controller: webview.WebviewController = new webview.WebviewController(); 4705 responseWeb: WebResourceResponse = new WebResourceResponse(); 4706 scheme1: webview.WebCustomScheme = { schemeName: "name1", isSupportCORS: true, isSupportFetch: true }; 4707 scheme2: webview.WebCustomScheme = { schemeName: "name2", isSupportCORS: true, isSupportFetch: true }; 4708 scheme3: webview.WebCustomScheme = { schemeName: "name3", isSupportCORS: true, isSupportFetch: true }; 4709 4710 aboutToAppear(): void { 4711 try { 4712 webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3]); 4713 } catch (error) { 4714 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 4715 } 4716 } 4717 4718 build() { 4719 Column() { 4720 Web({ src: 'www.example.com', controller: this.controller }) 4721 .onInterceptRequest((event) => { 4722 if (event) { 4723 console.log('url:' + event.request.getRequestUrl()); 4724 } 4725 return this.responseWeb; 4726 }) 4727 } 4728 } 4729} 4730``` 4731 4732### getCertificate<sup>10+</sup> 4733 4734getCertificate(): Promise<Array<cert.X509Cert>> 4735 4736获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过Promise异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert](../apis-device-certificate-kit/js-apis-cert.md#x509cert)定义),便于开发者展示网站证书信息。 4737 4738**系统能力:** SystemCapability.Web.Webview.Core 4739 4740**返回值:** 4741 4742| 类型 | 说明 | 4743| ---------- | --------------------------------------------- | 4744| Promise<Array<cert.X509Cert>> | Promise实例,用于获取当前加载的https网站的X509格式证书数组。 | 4745 4746**错误码:** 4747 4748以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4749 4750| 错误码ID | 错误信息 | 4751| -------- | ------------------------------------------------------------ | 4752| 17100001 | Init error. The WebviewController must be associated with a web component. | 4753 4754**示例:** 4755 4756```ts 4757// xxx.ets 4758import { webview } from '@kit.ArkWeb'; 4759import { BusinessError } from '@kit.BasicServicesKit'; 4760import { cert } from '@kit.DeviceCertificateKit'; 4761 4762function Uint8ArrayToString(dataArray: Uint8Array) { 4763 let dataString = ''; 4764 for (let i = 0; i < dataArray.length; i++) { 4765 dataString += String.fromCharCode(dataArray[i]); 4766 } 4767 return dataString; 4768} 4769 4770function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 4771 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4772 for (let i = 0; i < x509CertArray.length; i++) { 4773 res += ', index = ' + i + ', issuer name = ' 4774 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4775 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4776 + x509CertArray[i].getNotBeforeTime() 4777 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 4778 } 4779 return res; 4780} 4781 4782@Entry 4783@Component 4784struct Index { 4785 // outputStr在UI界面显示调试信息 4786 @State outputStr: string = ''; 4787 webviewCtl: webview.WebviewController = new webview.WebviewController(); 4788 4789 build() { 4790 Row() { 4791 Column() { 4792 List({ space: 20, initialIndex: 0 }) { 4793 ListItem() { 4794 Button() { 4795 Text('load bad ssl') 4796 .fontSize(10) 4797 .fontWeight(FontWeight.Bold) 4798 } 4799 .type(ButtonType.Capsule) 4800 .onClick(() => { 4801 // 加载一个过期的证书网站,查看获取到的证书信息 4802 this.webviewCtl.loadUrl('https://expired.badssl.com'); 4803 }) 4804 .height(50) 4805 } 4806 4807 ListItem() { 4808 Button() { 4809 Text('load example') 4810 .fontSize(10) 4811 .fontWeight(FontWeight.Bold) 4812 } 4813 .type(ButtonType.Capsule) 4814 .onClick(() => { 4815 // 加载一个https网站,查看网站的证书信息 4816 this.webviewCtl.loadUrl('https://www.example.com'); 4817 }) 4818 .height(50) 4819 } 4820 4821 ListItem() { 4822 Button() { 4823 Text('getCertificate Promise') 4824 .fontSize(10) 4825 .fontWeight(FontWeight.Bold) 4826 } 4827 .type(ButtonType.Capsule) 4828 .onClick(() => { 4829 try { 4830 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 4831 this.outputStr = ParseX509CertInfo(x509CertArray); 4832 }) 4833 } catch (error) { 4834 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4835 } 4836 }) 4837 .height(50) 4838 } 4839 4840 ListItem() { 4841 Button() { 4842 Text('getCertificate AsyncCallback') 4843 .fontSize(10) 4844 .fontWeight(FontWeight.Bold) 4845 } 4846 .type(ButtonType.Capsule) 4847 .onClick(() => { 4848 try { 4849 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 4850 if (error) { 4851 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 4852 } else { 4853 this.outputStr = ParseX509CertInfo(x509CertArray); 4854 } 4855 }) 4856 } catch (error) { 4857 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4858 } 4859 }) 4860 .height(50) 4861 } 4862 } 4863 .listDirection(Axis.Horizontal) 4864 .height('10%') 4865 4866 Text(this.outputStr) 4867 .width('100%') 4868 .fontSize(10) 4869 4870 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 4871 .fileAccess(true) 4872 .javaScriptAccess(true) 4873 .domStorageAccess(true) 4874 .onlineImageAccess(true) 4875 .onPageEnd((e) => { 4876 if (e) { 4877 this.outputStr = 'onPageEnd : url = ' + e.url; 4878 } 4879 }) 4880 .onSslErrorEventReceive((e) => { 4881 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 4882 e.handler.handleConfirm(); 4883 }) 4884 .width('100%') 4885 .height('70%') 4886 } 4887 .height('100%') 4888 } 4889 } 4890} 4891``` 4892 4893### getCertificate<sup>10+</sup> 4894 4895getCertificate(callback: AsyncCallback<Array<cert.X509Cert>>): void 4896 4897获取当前网站的证书信息。使用Web组件加载https网站,会进行SSL证书校验,该接口会通过AsyncCallback异步返回当前网站的X509格式证书(X509Cert证书类型定义见[X509Cert定义](../apis-device-certificate-kit/js-apis-cert.md)),便于开发者展示网站证书信息。 4898 4899**系统能力:** SystemCapability.Web.Webview.Core 4900 4901**参数:** 4902 4903| 参数名 | 类型 | 必填 | 说明 | 4904| -------- | ---------------------------- | ---- | ---------------------------------------- | 4905| callback | AsyncCallback<Array<cert.X509Cert>> | 是 | 通过AsyncCallback异步返回当前网站的X509格式证书。 | 4906 4907**错误码:** 4908 4909以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 4910 4911| 错误码ID | 错误信息 | 4912| -------- | ------------------------------------------------------------ | 4913| 17100001 | Init error. The WebviewController must be associated with a web component. | 4914| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4915 4916**示例:** 4917 4918```ts 4919// xxx.ets 4920import { webview } from '@kit.ArkWeb'; 4921import { BusinessError } from '@kit.BasicServicesKit'; 4922import { cert } from '@kit.DeviceCertificateKit'; 4923 4924function Uint8ArrayToString(dataArray: Uint8Array) { 4925 let dataString = ''; 4926 for (let i = 0; i < dataArray.length; i++) { 4927 dataString += String.fromCharCode(dataArray[i]); 4928 } 4929 return dataString; 4930} 4931 4932function ParseX509CertInfo(x509CertArray: Array<cert.X509Cert>) { 4933 let res: string = 'getCertificate success: len = ' + x509CertArray.length; 4934 for (let i = 0; i < x509CertArray.length; i++) { 4935 res += ', index = ' + i + ', issuer name = ' 4936 + Uint8ArrayToString(x509CertArray[i].getIssuerName().data) + ', subject name = ' 4937 + Uint8ArrayToString(x509CertArray[i].getSubjectName().data) + ', valid start = ' 4938 + x509CertArray[i].getNotBeforeTime() 4939 + ', valid end = ' + x509CertArray[i].getNotAfterTime(); 4940 } 4941 return res; 4942} 4943 4944@Entry 4945@Component 4946struct Index { 4947 // outputStr在UI界面显示调试信息 4948 @State outputStr: string = ''; 4949 webviewCtl: webview.WebviewController = new webview.WebviewController(); 4950 4951 build() { 4952 Row() { 4953 Column() { 4954 List({ space: 20, initialIndex: 0 }) { 4955 ListItem() { 4956 Button() { 4957 Text('load bad ssl') 4958 .fontSize(10) 4959 .fontWeight(FontWeight.Bold) 4960 } 4961 .type(ButtonType.Capsule) 4962 .onClick(() => { 4963 // 加载一个过期的证书网站,查看获取到的证书信息 4964 this.webviewCtl.loadUrl('https://expired.badssl.com'); 4965 }) 4966 .height(50) 4967 } 4968 4969 ListItem() { 4970 Button() { 4971 Text('load example') 4972 .fontSize(10) 4973 .fontWeight(FontWeight.Bold) 4974 } 4975 .type(ButtonType.Capsule) 4976 .onClick(() => { 4977 // 加载一个https网站,查看网站的证书信息 4978 this.webviewCtl.loadUrl('https://www.example.com'); 4979 }) 4980 .height(50) 4981 } 4982 4983 ListItem() { 4984 Button() { 4985 Text('getCertificate Promise') 4986 .fontSize(10) 4987 .fontWeight(FontWeight.Bold) 4988 } 4989 .type(ButtonType.Capsule) 4990 .onClick(() => { 4991 try { 4992 this.webviewCtl.getCertificate().then((x509CertArray: Array<cert.X509Cert>) => { 4993 this.outputStr = ParseX509CertInfo(x509CertArray); 4994 }) 4995 } catch (error) { 4996 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 4997 } 4998 }) 4999 .height(50) 5000 } 5001 5002 ListItem() { 5003 Button() { 5004 Text('getCertificate AsyncCallback') 5005 .fontSize(10) 5006 .fontWeight(FontWeight.Bold) 5007 } 5008 .type(ButtonType.Capsule) 5009 .onClick(() => { 5010 try { 5011 this.webviewCtl.getCertificate((error: BusinessError, x509CertArray: Array<cert.X509Cert>) => { 5012 if (error) { 5013 this.outputStr = 'getCertificate failed: ' + error.code + ", errMsg: " + error.message; 5014 } else { 5015 this.outputStr = ParseX509CertInfo(x509CertArray); 5016 } 5017 }) 5018 } catch (error) { 5019 this.outputStr = 'getCertificate failed: ' + (error as BusinessError).code + ", errMsg: " + (error as BusinessError).message; 5020 } 5021 }) 5022 .height(50) 5023 } 5024 } 5025 .listDirection(Axis.Horizontal) 5026 .height('10%') 5027 5028 Text(this.outputStr) 5029 .width('100%') 5030 .fontSize(10) 5031 5032 Web({ src: 'https://www.example.com', controller: this.webviewCtl }) 5033 .fileAccess(true) 5034 .javaScriptAccess(true) 5035 .domStorageAccess(true) 5036 .onlineImageAccess(true) 5037 .onPageEnd((e) => { 5038 if (e) { 5039 this.outputStr = 'onPageEnd : url = ' + e.url; 5040 } 5041 }) 5042 .onSslErrorEventReceive((e) => { 5043 // 忽略ssl证书错误,便于测试一些证书过期的网站,如:https://expired.badssl.com 5044 e.handler.handleConfirm(); 5045 }) 5046 .width('100%') 5047 .height('70%') 5048 } 5049 .height('100%') 5050 } 5051 } 5052} 5053``` 5054 5055### setAudioMuted<sup>10+</sup> 5056 5057setAudioMuted(mute: boolean): void 5058 5059设置网页静音。 5060 5061**系统能力:** SystemCapability.Web.Webview.Core 5062 5063**参数:** 5064 5065| 参数名 | 类型 | 必填 | 说明 | 5066| -------- | ------- | ---- | -------------------------------------- | 5067| mute | boolean | 是 | 表示是否将网页设置为静音状态,true表示设置为静音状态,false表示取消静音状态。 | 5068 5069**错误码:** 5070 5071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5072 5073| 错误码ID | 错误信息 | 5074| -------- | ------------------------------------------------------------ | 5075| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5076| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5077 5078**示例:** 5079 5080```ts 5081// xxx.ets 5082import { webview } from '@kit.ArkWeb'; 5083 5084@Entry 5085@Component 5086struct WebComponent { 5087 controller: webview.WebviewController = new webview.WebviewController(); 5088 @State muted: boolean = false; 5089 5090 build() { 5091 Column() { 5092 Button("Toggle Mute") 5093 .onClick(event => { 5094 if (event) { 5095 this.muted = !this.muted; 5096 this.controller.setAudioMuted(this.muted); 5097 } 5098 }) 5099 Web({ src: 'www.example.com', controller: this.controller }) 5100 } 5101 } 5102} 5103``` 5104 5105### prefetchPage<sup>10+</sup> 5106 5107prefetchPage(url: string, additionalHeaders?: Array\<WebHeader>): void 5108 5109在预测到将要加载的页面之前调用,提前下载页面所需的资源,包括主资源子资源,但不会执行网页JavaScript代码或呈现网页,以加快加载速度。 5110 5111> **说明:** 5112> 5113> 下载的页面资源,会缓存五分钟左右,超过这段时间Web组件会自动释放。 5114 5115**系统能力:** SystemCapability.Web.Webview.Core 5116 5117**参数:** 5118 5119| 参数名 | 类型 | 必填 | 说明 | 5120| ------------------| --------------------------------| ---- | ------------- | 5121| url | string | 是 | 预加载的url。| 5122| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | url的附加HTTP请求头。| 5123 5124**错误码:** 5125 5126以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5127 5128| 错误码ID | 错误信息 | 5129| -------- | ------------------------------------------------------------ | 5130| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5131| 17100002 | Invalid url. | 5132 5133**示例:** 5134 5135```ts 5136// xxx.ets 5137import { webview } from '@kit.ArkWeb'; 5138import { BusinessError } from '@kit.BasicServicesKit'; 5139 5140@Entry 5141@Component 5142struct WebComponent { 5143 controller: webview.WebviewController = new webview.WebviewController(); 5144 5145 build() { 5146 Column() { 5147 Button('prefetchPopularPage') 5148 .onClick(() => { 5149 try { 5150 // 预加载时,需要将'https://www.example.com'替换成一个真实的网站地址。 5151 this.controller.prefetchPage('https://www.example.com'); 5152 } catch (error) { 5153 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5154 } 5155 }) 5156 // 需要将'www.example1.com'替换成一个真实的网站地址。 5157 Web({ src: 'www.example1.com', controller: this.controller }) 5158 } 5159 } 5160} 5161``` 5162 5163### prefetchResource<sup>12+</sup> 5164 5165static prefetchResource(request: RequestInfo, additionalHeaders?: Array\<WebHeader>, cacheKey?: string, cacheValidTime?: number): void 5166 5167根据指定的请求信息和附加的http请求头去预获取资源请求,存入内存缓存,并指定其缓存key和有效期,以加快加载速度。目前仅支持Content-Type为application/x-www-form-urlencoded的post请求。最多可以预获取6个post请求。如果要预获取第7个,请通过[clearPrefetchedResource](#clearprefetchedresource12)清除不需要的post请求缓存,否则会自动清除最早预获取的post缓存。如果要使用预获取的资源缓存,开发者需要在正式发起的post请求的请求头中增加键值“ArkWebPostCacheKey”,其内容为对应缓存的cacheKey。 5168 5169**系统能力:** SystemCapability.Web.Webview.Core 5170 5171**参数:** 5172 5173| 参数名 | 类型 | 必填 | 说明 | 5174| ------------------| ------------------------------- | ---- | ------------------------------------------------------------------ | 5175| request | [RequestInfo](#requestinfo12) | 是 | 预获取请求的信息。 | 5176| additionalHeaders | Array\<[WebHeader](#webheader)> | 否 | 预获取请求的附加HTTP请求头。 | 5177| cacheKey | string | 否 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5178| cacheValidTime | number | 否 | 预获取资源缓存的有效期。取值范围:(0, 2147483647]。单位:秒。默认值:300秒。 | 5179 5180**错误码:** 5181 5182以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5183 5184| 错误码ID | 错误信息 | 5185| -------- | ------------------------------------------------------------ | 5186| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 5187| 17100002 | Invalid url. | 5188 5189**示例:** 5190 5191```ts 5192// xxx.ets 5193import { webview } from '@kit.ArkWeb'; 5194import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5195 5196export default class EntryAbility extends UIAbility { 5197 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5198 console.log("EntryAbility onCreate"); 5199 webview.WebviewController.initializeWebEngine(); 5200 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5201 webview.WebviewController.prefetchResource( 5202 {url:"https://www.example1.com/post?e=f&g=h", 5203 method:"POST", 5204 formData:"a=x&b=y",}, 5205 [{headerKey:"c", 5206 headerValue:"z",},], 5207 "KeyX", 500); 5208 AppStorage.setOrCreate("abilityWant", want); 5209 console.log("EntryAbility onCreate done"); 5210 } 5211} 5212``` 5213 5214### clearPrefetchedResource<sup>12+</sup> 5215 5216static clearPrefetchedResource(cacheKeyList: Array\<string>): void 5217 5218根据指定的缓存key列表清除对应的预获取资源缓存。入参中的缓存key必须是[prefetchResource](#prefetchresource12)指定预获取到的资源缓存key。 5219 5220**系统能力:** SystemCapability.Web.Webview.Core 5221 5222**参数:** 5223 5224| 参数名 | 类型 | 必填 | 说明 | 5225| ------------------| ----------- | ---- | ------------------------------------------------------------------------- | 5226| cacheKeyList | Array\<string> | 是 | 用于后续查询预获取资源缓存的key。仅支持字母和数字,未传入或传入空则取默认值url作为key。 | 5227 5228**示例:** 5229 5230```ts 5231// xxx.ets 5232import { webview } from '@kit.ArkWeb'; 5233 5234@Entry 5235@Component 5236struct WebComponent { 5237 controller: webview.WebviewController = new webview.WebviewController(); 5238 build() { 5239 Column() { 5240 Web({ src: "https://www.example.com/", controller: this.controller}) 5241 .onAppear(() => { 5242 // 预获取时,需要將"https://www.example1.com/post?e=f&g=h"替换成真实要访问的网站地址。 5243 webview.WebviewController.prefetchResource( 5244 {url:"https://www.example1.com/post?e=f&g=h", 5245 method:"POST", 5246 formData:"a=x&b=y",}, 5247 [{headerKey:"c", 5248 headerValue:"z",},], 5249 "KeyX", 500); 5250 }) 5251 .onPageEnd(() => { 5252 // 清除后续不再使用的预获取缓存。 5253 webview.WebviewController.clearPrefetchedResource(["KeyX",]); 5254 }) 5255 } 5256 } 5257} 5258``` 5259 5260### prepareForPageLoad<sup>10+</sup> 5261 5262static prepareForPageLoad(url: string, preconnectable: boolean, numSockets: number): void 5263 5264预连接url,在加载url之前调用此API,对url只进行dns解析,socket建链操作,并不获取主资源子资源。 5265 5266**系统能力:** SystemCapability.Web.Webview.Core 5267 5268**参数:** 5269 5270| 参数名 | 类型 | 必填 | 说明 | 5271| ---------------| ------- | ---- | ------------- | 5272| url | string | 是 | 预连接的url。| 5273| preconnectable | boolean | 是 | 是否进行预连接。如果preconnectable为true,则对url进行dns解析,socket建链预连接;如果preconnectable为false,则不做任何预连接操作。| 5274| numSockets | number | 是 | 要预连接的socket数。socket数目连接需要大于0,最多允许6个连接。| 5275 5276**错误码:** 5277 5278以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5279 5280| 错误码ID | 错误信息 | 5281| -------- | ------------------------------------------------------------ | 5282| 17100002 | Invalid url. | 5283| 171000013| The number of preconnect sockets is invalid. | 5284 5285**示例:** 5286 5287```ts 5288// xxx.ets 5289import { webview } from '@kit.ArkWeb'; 5290import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5291 5292export default class EntryAbility extends UIAbility { 5293 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5294 console.log("EntryAbility onCreate"); 5295 webview.WebviewController.initializeWebEngine(); 5296 // 预连接时,需要將'https://www.example.com'替换成一个真实的网站地址。 5297 webview.WebviewController.prepareForPageLoad("https://www.example.com", true, 2); 5298 AppStorage.setOrCreate("abilityWant", want); 5299 console.log("EntryAbility onCreate done"); 5300 } 5301} 5302``` 5303 5304### setCustomUserAgent<sup>10+</sup> 5305 5306setCustomUserAgent(userAgent: string): void 5307 5308设置自定义用户代理,会覆盖系统的用户代理。 5309 5310当Web组件src设置了url时,建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。 5311 5312当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。 5313 5314默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 5315 5316> **说明:** 5317> 5318>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。 5319 5320**系统能力:** SystemCapability.Web.Webview.Core 5321 5322**参数:** 5323 5324| 参数名 | 类型 | 必填 | 说明 | 5325| ---------------| ------- | ---- | ------------- | 5326| userAgent | string | 是 | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 | 5327 5328**错误码:** 5329 5330以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5331 5332| 错误码ID | 错误信息 | 5333| -------- | ------------------------------------------------------------ | 5334| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5335| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5336 5337**示例:** 5338 5339```ts 5340// xxx.ets 5341import { webview } from '@kit.ArkWeb'; 5342import { BusinessError } from '@kit.BasicServicesKit'; 5343 5344@Entry 5345@Component 5346struct WebComponent { 5347 controller: webview.WebviewController = new webview.WebviewController(); 5348 @State customUserAgent: string = ' DemoApp'; 5349 5350 build() { 5351 Column() { 5352 Web({ src: 'www.example.com', controller: this.controller }) 5353 .onControllerAttached(() => { 5354 console.log("onControllerAttached"); 5355 try { 5356 let userAgent = this.controller.getUserAgent() + this.customUserAgent; 5357 this.controller.setCustomUserAgent(userAgent); 5358 } catch (error) { 5359 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5360 } 5361 }) 5362 } 5363 } 5364} 5365``` 5366 5367### setDownloadDelegate<sup>11+</sup> 5368 5369setDownloadDelegate(delegate: WebDownloadDelegate): void 5370 5371为当前的Web组件设置一个WebDownloadDelegate,该delegate用来接收页面内触发的下载与下载的进展。 5372 5373**系统能力:** SystemCapability.Web.Webview.Core 5374 5375**参数:** 5376 5377| 参数名 | 类型 | 必填 | 说明 | 5378| ---------------| ------- | ---- | ------------- | 5379| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 5380 5381**错误码:** 5382 5383以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5384 5385| 错误码ID | 错误信息 | 5386| -------- | ------------------------------------------------------------ | 5387| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5388 5389**示例:** 5390 5391```ts 5392// xxx.ets 5393import { webview } from '@kit.ArkWeb'; 5394import { BusinessError } from '@kit.BasicServicesKit'; 5395 5396@Entry 5397@Component 5398struct WebComponent { 5399 controller: webview.WebviewController = new webview.WebviewController(); 5400 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5401 5402 build() { 5403 Column() { 5404 Button('setDownloadDelegate') 5405 .onClick(() => { 5406 try { 5407 this.controller.setDownloadDelegate(this.delegate); 5408 } catch (error) { 5409 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5410 } 5411 }) 5412 Web({ src: 'www.example.com', controller: this.controller }) 5413 } 5414 } 5415} 5416``` 5417 5418### startDownload<sup>11+</sup> 5419 5420startDownload(url: string): void 5421 5422使用Web组件的下载能力来下载指定的url, 比如下载网页中指定的图片。 5423 5424**系统能力:** SystemCapability.Web.Webview.Core 5425 5426**参数:** 5427 5428| 参数名 | 类型 | 必填 | 说明 | 5429| ---------------| ------- | ---- | ------------- | 5430| url | string | 是 | 下载地址。 | 5431 5432**错误码:** 5433 5434以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5435 5436| 错误码ID | 错误信息 | 5437| -------- | ------------------------------------------------------------ | 5438| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5439| 17100002 | Invalid url. | 5440 5441**示例:** 5442 5443```ts 5444// xxx.ets 5445import { webview } from '@kit.ArkWeb'; 5446import { BusinessError } from '@kit.BasicServicesKit'; 5447 5448@Entry 5449@Component 5450struct WebComponent { 5451 controller: webview.WebviewController = new webview.WebviewController(); 5452 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 5453 5454 build() { 5455 Column() { 5456 Button('setDownloadDelegate') 5457 .onClick(() => { 5458 try { 5459 this.controller.setDownloadDelegate(this.delegate); 5460 } catch (error) { 5461 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5462 } 5463 }) 5464 Button('startDownload') 5465 .onClick(() => { 5466 try { 5467 this.controller.startDownload('https://www.example.com'); 5468 } catch (error) { 5469 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5470 } 5471 }) 5472 Web({ src: 'www.example.com', controller: this.controller }) 5473 } 5474 } 5475} 5476``` 5477 5478### getCustomUserAgent<sup>10+</sup> 5479 5480getCustomUserAgent(): string 5481 5482获取自定义用户代理。 5483 5484默认UserAgent定义与使用场景请参考[UserAgent详情参考](../../web/web-default-userAgent.md) 5485 5486**系统能力:** SystemCapability.Web.Webview.Core 5487 5488**返回值:** 5489 5490| 类型 | 说明 | 5491| ------ | ------------------------- | 5492| string | 用户自定义代理信息。 | 5493 5494**错误码:** 5495 5496以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5497 5498| 错误码ID | 错误信息 | 5499| -------- | ------------------------------------------------------------ | 5500| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5501 5502**示例:** 5503 5504```ts 5505// xxx.ets 5506import { webview } from '@kit.ArkWeb'; 5507import { BusinessError } from '@kit.BasicServicesKit'; 5508 5509@Entry 5510@Component 5511struct WebComponent { 5512 controller: webview.WebviewController = new webview.WebviewController(); 5513 @State userAgent: string = ''; 5514 5515 build() { 5516 Column() { 5517 Button('getCustomUserAgent') 5518 .onClick(() => { 5519 try { 5520 this.userAgent = this.controller.getCustomUserAgent(); 5521 console.log("userAgent: " + this.userAgent); 5522 } catch (error) { 5523 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5524 } 5525 }) 5526 Web({ src: 'www.example.com', controller: this.controller }) 5527 } 5528 } 5529} 5530``` 5531 5532### setConnectionTimeout<sup>11+</sup> 5533 5534static setConnectionTimeout(timeout: number): void 5535 5536设置网络连接超时时间,使用者可通过Web组件中的onErrorReceive方法获取超时错误码。 5537 5538**系统能力:** SystemCapability.Web.Webview.Core 5539 5540**参数:** 5541 5542| 参数名 | 类型 | 必填 | 说明 | 5543| ---------------| ------- | ---- | ------------- | 5544| timeout | number | 是 | socket连接超时时间,以秒为单位,socket必须为大于0的整数。 | 5545 5546**错误码:** 5547 5548以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5549 5550| 错误码ID | 错误信息 | 5551| -------- | ------------------------------------------------------------ | 5552| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 5553 5554**示例:** 5555 5556```ts 5557// xxx.ets 5558import { webview } from '@kit.ArkWeb'; 5559import { BusinessError } from '@kit.BasicServicesKit'; 5560 5561@Entry 5562@Component 5563struct WebComponent { 5564 controller: webview.WebviewController = new webview.WebviewController(); 5565 5566 build() { 5567 Column() { 5568 Button('setConnectionTimeout') 5569 .onClick(() => { 5570 try { 5571 webview.WebviewController.setConnectionTimeout(5); 5572 console.log("setConnectionTimeout: 5s"); 5573 } catch (error) { 5574 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5575 } 5576 }) 5577 Web({ src: 'www.example.com', controller: this.controller }) 5578 .onErrorReceive((event) => { 5579 if (event) { 5580 console.log('getErrorInfo:' + event.error.getErrorInfo()); 5581 console.log('getErrorCode:' + event.error.getErrorCode()); 5582 } 5583 }) 5584 } 5585 } 5586} 5587``` 5588 5589### warmupServiceWorker<sup>12+</sup> 5590 5591static warmupServiceWorker(url: string): void 5592 5593预热ServiceWorker,以提升首屏页面的加载速度(仅限于会使用ServiceWorker的页面)。在加载url之前调用此API。 5594 5595**系统能力:** SystemCapability.Web.Webview.Core 5596 5597**参数:** 5598 5599| 参数名 | 类型 | 必填 | 说明 | 5600| ---------------| ------- | ---- | ------------- | 5601| url | string | 是 | 需要预热ServiceWorker的url。| 5602 5603**错误码:** 5604 5605以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5606 5607| 错误码ID | 错误信息 | 5608| -------- | ------------------------------------------------------------ | 5609| 17100002 | Invalid url. | 5610 5611**示例:** 5612 5613```ts 5614// xxx.ts 5615import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5616import { hilog } from '@kit.PerformanceAnalysisKit'; 5617import { window } from '@kit.ArkUI'; 5618import { webview } from '@kit.ArkWeb'; 5619 5620export default class EntryAbility extends UIAbility { 5621 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5622 console.log("EntryAbility onCreate"); 5623 webview.WebviewController.initializeWebEngine(); 5624 webview.WebviewController.warmupServiceWorker("https://www.example.com"); 5625 AppStorage.setOrCreate("abilityWant", want); 5626 } 5627} 5628``` 5629 5630### enableSafeBrowsing<sup>11+</sup> 5631 5632enableSafeBrowsing(enable: boolean): void 5633 5634<!--RP1-->启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。 5635本功能默认不生效,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)进行检测。 5636<!--RP1End--> 5637 5638**系统能力:** SystemCapability.Web.Webview.Core 5639 5640**参数:** 5641 5642| 参数名 | 类型 | 必填 | 说明 | 5643| --------| ------- | ---- | ---------------------------| 5644| enable | boolean | 是 | 是否启用检查网站安全风险的功能。 | 5645 5646**错误码:** 5647 5648以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5649 5650| 错误码ID | 错误信息 | 5651| -------- | ----------------------- | 5652| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5653 5654**示例:** 5655 5656```ts 5657// xxx.ets 5658import { webview } from '@kit.ArkWeb'; 5659import { BusinessError } from '@kit.BasicServicesKit'; 5660 5661@Entry 5662@Component 5663struct WebComponent { 5664 controller: webview.WebviewController = new webview.WebviewController(); 5665 5666 build() { 5667 Column() { 5668 Button('enableSafeBrowsing') 5669 .onClick(() => { 5670 try { 5671 this.controller.enableSafeBrowsing(true); 5672 console.log("enableSafeBrowsing: true"); 5673 } catch (error) { 5674 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5675 } 5676 }) 5677 Web({ src: 'www.example.com', controller: this.controller }) 5678 } 5679 } 5680} 5681``` 5682 5683### isSafeBrowsingEnabled<sup>11+</sup> 5684 5685isSafeBrowsingEnabled(): boolean 5686 5687获取当前网页是否启用了检查网站安全风险。 5688 5689**系统能力:** SystemCapability.Web.Webview.Core 5690 5691**返回值:** 5692 5693| 类型 | 说明 | 5694| ------- | --------------------------------------- | 5695| boolean | 当前网页是否启用了检查网站安全风险的功能,默认为false。| 5696 5697**示例:** 5698 5699```ts 5700// xxx.ets 5701import { webview } from '@kit.ArkWeb'; 5702 5703@Entry 5704@Component 5705struct WebComponent { 5706 controller: webview.WebviewController = new webview.WebviewController(); 5707 5708 build() { 5709 Column() { 5710 Button('isSafeBrowsingEnabled') 5711 .onClick(() => { 5712 let result = this.controller.isSafeBrowsingEnabled(); 5713 console.log("result: " + result); 5714 }) 5715 Web({ src: 'www.example.com', controller: this.controller }) 5716 } 5717 } 5718} 5719``` 5720 5721### enableIntelligentTrackingPrevention<sup>12+</sup> 5722 5723enableIntelligentTrackingPrevention(enable: boolean): void 5724 5725启用智能防跟踪功能,默认该功能未启用。 5726 5727**系统能力:** SystemCapability.Web.Webview.Core 5728 5729**参数:** 5730 5731| 参数名 | 类型 | 必填 | 说明 | 5732| --------| ------- | ---- | ---------------------------| 5733| enable | boolean | 是 | 是否启用智能防跟踪功能。 | 5734 5735**错误码:** 5736 5737以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5738 5739| 错误码ID | 错误信息 | 5740| -------- | ----------------------- | 5741| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5742| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5743 5744**示例:** 5745 5746```ts 5747// xxx.ets 5748import { webview } from '@kit.ArkWeb'; 5749import { BusinessError } from '@kit.BasicServicesKit'; 5750 5751@Entry 5752@Component 5753struct WebComponent { 5754 controller: webview.WebviewController = new webview.WebviewController(); 5755 5756 build() { 5757 Column() { 5758 Button('enableIntelligentTrackingPrevention') 5759 .onClick(() => { 5760 try { 5761 this.controller.enableIntelligentTrackingPrevention(true); 5762 console.log("enableIntelligentTrackingPrevention: true"); 5763 } catch (error) { 5764 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5765 } 5766 }) 5767 Web({ src: 'www.example.com', controller: this.controller }) 5768 } 5769 } 5770} 5771``` 5772 5773### isIntelligentTrackingPreventionEnabled<sup>12+</sup> 5774 5775isIntelligentTrackingPreventionEnabled(): boolean 5776 5777获取当前Web是否启用了智能防跟踪功能。 5778 5779**系统能力:** SystemCapability.Web.Webview.Core 5780 5781**返回值:** 5782 5783| 类型 | 说明 | 5784| ------- | --------------------------------------- | 5785| boolean | 当前Web是否启用了智能防跟踪功能,默认为false。| 5786 5787**错误码:** 5788 5789以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5790 5791| 错误码ID | 错误信息 | 5792| -------- | ----------------------- | 5793| 17100001 | Init error. The WebviewController must be associated with a Web component. | 5794 5795**示例:** 5796 5797```ts 5798// xxx.ets 5799import { webview } from '@kit.ArkWeb'; 5800import { BusinessError } from '@kit.BasicServicesKit'; 5801 5802@Entry 5803@Component 5804struct WebComponent { 5805 controller: webview.WebviewController = new webview.WebviewController(); 5806 5807 build() { 5808 Column() { 5809 Button('isIntelligentTrackingPreventionEnabled') 5810 .onClick(() => { 5811 try { 5812 let result = this.controller.isIntelligentTrackingPreventionEnabled(); 5813 console.log("result: " + result); 5814 } catch (error) { 5815 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5816 } 5817 }) 5818 Web({ src: 'www.example.com', controller: this.controller }) 5819 } 5820 } 5821} 5822``` 5823 5824### addIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5825 5826static addIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5827 5828添加智能防跟踪功能绕过的域名列表。 5829 5830**系统能力:** SystemCapability.Web.Webview.Core 5831 5832**参数:** 5833 5834| 参数名 | 类型 | 必填 | 说明 | 5835| ----------- | ------------- | ---- | ------------------------ | 5836| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5837 5838**错误码:** 5839 5840以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5841 5842| 错误码ID | 错误信息 | 5843| -------- | ------------------------ | 5844| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5845 5846**示例:** 5847 5848```ts 5849// xxx.ets 5850import { webview } from '@kit.ArkWeb'; 5851import { BusinessError } from '@kit.BasicServicesKit'; 5852 5853@Entry 5854@Component 5855struct WebComponent { 5856 controller: webview.WebviewController = new webview.WebviewController(); 5857 5858 build() { 5859 Column() { 5860 Button('addIntelligentTrackingPreventionBypassingList') 5861 .onClick(() => { 5862 try { 5863 let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"]; 5864 webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList); 5865 } catch (error) { 5866 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5867 } 5868 }) 5869 Web({ src: 'www.example.com', controller: this.controller }) 5870 } 5871 } 5872} 5873``` 5874 5875### removeIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5876 5877static removeIntelligentTrackingPreventionBypassingList(hostList: Array\<string>): void 5878 5879删除通过addIntelligentTrackingPreventionBypassingList接口添加的部分域名列表。 5880 5881**系统能力:** SystemCapability.Web.Webview.Core 5882 5883**参数:** 5884 5885| 参数名 | 类型 | 必填 | 说明 | 5886| ----------- | ------------- | ---- | ------------------------ | 5887| hostList | Array\<string> | 是 | 绕过智能防跟踪功能的域名列表。 | 5888 5889**错误码:** 5890 5891以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 5892 5893| 错误码ID | 错误信息 | 5894| -------- | ------------------------ | 5895| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 5896 5897**示例:** 5898 5899```ts 5900// xxx.ets 5901import { webview } from '@kit.ArkWeb'; 5902import { BusinessError } from '@kit.BasicServicesKit'; 5903 5904@Entry 5905@Component 5906struct WebComponent { 5907 controller: webview.WebviewController = new webview.WebviewController(); 5908 5909 build() { 5910 Column() { 5911 Button('removeIntelligentTrackingPreventionBypassingList') 5912 .onClick(() => { 5913 try { 5914 let hostList = ["www.test1.com", "www.test2.com"]; 5915 webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList); 5916 } catch (error) { 5917 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 5918 } 5919 }) 5920 Web({ src: 'www.example.com', controller: this.controller }) 5921 } 5922 } 5923} 5924``` 5925 5926### clearIntelligentTrackingPreventionBypassingList<sup>12+</sup> 5927 5928static clearIntelligentTrackingPreventionBypassingList(): void 5929 5930删除通过addIntelligentTrackingPreventionBypassingList接口添加的所有域名。 5931 5932**系统能力:** SystemCapability.Web.Webview.Core 5933 5934**示例:** 5935 5936```ts 5937// xxx.ets 5938import { webview } from '@kit.ArkWeb'; 5939 5940@Entry 5941@Component 5942struct WebComponent { 5943 controller: webview.WebviewController = new webview.WebviewController(); 5944 5945 build() { 5946 Column() { 5947 Button('clearIntelligentTrackingPreventionBypassingList') 5948 .onClick(() => { 5949 webview.WebviewController.clearIntelligentTrackingPreventionBypassingList(); 5950 }) 5951 Web({ src: 'www.example.com', controller: this.controller }) 5952 } 5953 } 5954} 5955``` 5956 5957### getDefaultUserAgent<sup>14+</sup> 5958 5959static getDefaultUserAgent(): string 5960 5961获取默认用户代理。 5962 5963此接口只允许在UI线程调用。 5964 5965**系统能力:** SystemCapability.Web.Webview.Core 5966 5967**示例:** 5968 5969```ts 5970// xxx.ets 5971import { webview } from '@kit.ArkWeb'; 5972import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 5973 5974export default class EntryAbility extends UIAbility { 5975 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 5976 console.log("EntryAbility onCreate"); 5977 webview.WebviewController.initializeWebEngine(); 5978 let defaultUserAgent = webview.WebviewController.getDefaultUserAgent(); 5979 console.log("defaultUserAgent: " + defaultUserAgent); 5980 } 5981} 5982``` 5983 5984### enableAdsBlock<sup>12+</sup> 5985 5986enableAdsBlock(enable: boolean): void 5987 5988启用广告过滤功能,默认该功能未启用。 5989 5990**系统能力:** SystemCapability.Web.Webview.Core 5991 5992**参数:** 5993 5994| 参数名 | 类型 | 必填 | 说明 | 5995| --------| ------- | ---- | ---------------------------| 5996| enable | boolean | 是 | 是否启用广告过滤功能。 | 5997 5998**错误码:** 5999 6000以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6001 6002| 错误码ID | 错误信息 | 6003| -------- | ----------------------- | 6004| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6005| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 6006 6007**示例:** 6008 6009```ts 6010// xxx.ets 6011import { webview } from '@kit.ArkWeb'; 6012import { BusinessError } from '@kit.BasicServicesKit'; 6013 6014@Entry 6015@Component 6016struct WebComponent { 6017 controller: webview.WebviewController = new webview.WebviewController(); 6018 6019 build() { 6020 Column() { 6021 Button('enableAdsBlock') 6022 .onClick(() => { 6023 try { 6024 this.controller.enableAdsBlock(true); 6025 console.log("enableAdsBlock: true") 6026 } catch (error) { 6027 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6028 } 6029 }) 6030 Web({ src: 'www.example.com', controller: this.controller }) 6031 } 6032 } 6033} 6034``` 6035 6036### isAdsBlockEnabled<sup>12+</sup> 6037 6038isAdsBlockEnabled() : boolean 6039 6040查询广告过滤功能是否开启,默认该功能未启用。 6041 6042**系统能力:** SystemCapability.Web.Webview.Core 6043 6044**返回值:** 6045 6046| 类型 | 说明 | 6047| ------------------------------------------------------------ | ---------------------- | 6048| boolean | 返回true代表广告过滤功能已开启,返回false代表广告过滤功能关闭。 | 6049 6050**示例:** 6051 6052```ts 6053// xxx.ets 6054import { webview } from '@kit.ArkWeb'; 6055import { BusinessError } from '@kit.BasicServicesKit'; 6056 6057@Entry 6058@Component 6059struct WebComponent { 6060 controller: webview.WebviewController = new webview.WebviewController(); 6061 6062 build() { 6063 Column() { 6064 Button('isAdsBlockEnabled') 6065 .onClick(() => { 6066 try { 6067 let isAdsBlockEnabled: boolean = this.controller.isAdsBlockEnabled(); 6068 console.log("isAdsBlockEnabled:", isAdsBlockEnabled); 6069 } catch (error) { 6070 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6071 } 6072 }) 6073 Web({ src: 'www.example.com', controller: this.controller }) 6074 } 6075 } 6076} 6077``` 6078 6079### isAdsBlockEnabledForCurPage<sup>12+</sup> 6080 6081isAdsBlockEnabledForCurPage() : boolean 6082 6083查询当前网页是否开启广告过滤功能。 6084当Web组件使能广告过滤功能后,默认所有页面都是开启广告过滤的,支持通过[addAdsBlockDisallowedList](#addadsblockdisallowedlist12)指定域名禁用广告过滤。 6085 6086**系统能力:** SystemCapability.Web.Webview.Core 6087 6088**返回值:** 6089 6090| 类型 | 说明 | 6091| ------------------------------------------------------------ | ---------------------- | 6092| boolean | 返回true代表此网页已开启广告过滤,返回false代表当前网页已关闭广告过滤。 | 6093 6094**示例:** 6095 6096```ts 6097// xxx.ets 6098import { webview } from '@kit.ArkWeb'; 6099import { BusinessError } from '@kit.BasicServicesKit'; 6100 6101@Entry 6102@Component 6103struct WebComponent { 6104 controller: webview.WebviewController = new webview.WebviewController(); 6105 6106 build() { 6107 Column() { 6108 Button('isAdsBlockEnabledForCurPage') 6109 .onClick(() => { 6110 try { 6111 let isAdsBlockEnabledForCurPage: boolean = this.controller.isAdsBlockEnabledForCurPage(); 6112 console.log("isAdsBlockEnabledForCurPage:", isAdsBlockEnabledForCurPage); 6113 } catch (error) { 6114 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6115 } 6116 }) 6117 Web({ src: 'www.example.com', controller: this.controller }) 6118 } 6119 } 6120} 6121``` 6122 6123### setRenderProcessMode<sup>12+</sup> 6124 6125static setRenderProcessMode(mode: RenderProcessMode): void 6126 6127设置ArkWeb渲染子进程模式。 6128 6129**系统能力:** SystemCapability.Web.Webview.Core 6130 6131**参数:** 6132 6133| 参数名 | 类型 | 必填 | 说明 | 6134| ----------- | ------------- | ---- | ------------------------ | 6135| mode | [RenderProcessMode](#renderprocessmode12)| 是 | 渲染子进程模式。可以先调用[getRenderProcessMode()](#getrenderprocessmode12)查看当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果传入RenderProcessMode枚举值之外的非法数字,则默认识别为多渲染子进程模式。 | 6136 6137**错误码:** 6138 6139以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6140 6141| 错误码ID | 错误信息 | 6142| -------- | ------------------------ | 6143| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6144 6145**示例:** 6146 6147```ts 6148// xxx.ets 6149import { webview } from '@kit.ArkWeb'; 6150import { BusinessError } from '@kit.BasicServicesKit'; 6151 6152@Entry 6153@Component 6154struct WebComponent { 6155 controller: webview.WebviewController = new webview.WebviewController(); 6156 6157 build() { 6158 Column() { 6159 Button('setRenderProcessMode') 6160 .onClick(() => { 6161 try { 6162 webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE); 6163 } catch (error) { 6164 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6165 } 6166 }) 6167 Web({ src: 'www.example.com', controller: this.controller }) 6168 } 6169 } 6170} 6171``` 6172### getRenderProcessMode<sup>12+</sup> 6173 6174static getRenderProcessMode(): RenderProcessMode 6175 6176查询ArkWeb的渲染子进程模式。 6177 6178**系统能力:** SystemCapability.Web.Webview.Core 6179 6180**返回值:** 6181 6182| 类型 | 说明 | 6183| ----------------------------------------- | ------------------------------------------------------------ | 6184| [RenderProcessMode](#renderprocessmode12) | 渲染子进程模式类型。调用[getRenderProcessMode()](#getrenderprocessmode12)获取当前设备的ArkWeb渲染子进程模式,枚举值0为单子进程模式,枚举值1为多子进程模式。如果获取的值不在RenderProcessMode枚举值范围内,则默认为多渲染子进程模式。 | 6185 6186 6187**示例:** 6188 6189```ts 6190// xxx.ets 6191import { webview } from '@kit.ArkWeb'; 6192 6193@Entry 6194@Component 6195struct WebComponent { 6196 controller: webview.WebviewController = new webview.WebviewController(); 6197 6198 build() { 6199 Column() { 6200 Button('getRenderProcessMode') 6201 .onClick(() => { 6202 let mode = webview.WebviewController.getRenderProcessMode(); 6203 console.log("getRenderProcessMode: " + mode); 6204 }) 6205 Web({ src: 'www.example.com', controller: this.controller }) 6206 } 6207 } 6208} 6209``` 6210 6211### terminateRenderProcess<sup>12+</sup> 6212 6213terminateRenderProcess(): boolean 6214 6215销毁渲染进程。 6216 6217调用该接口将会主动销毁相关联的渲染进程。如果渲染进程尚未启动,或者已销毁则没有任何影响。此外销毁渲染进程会同时影响所有与该渲染进程关联的其他实例。 6218 6219**系统能力:** SystemCapability.Web.Webview.Core 6220 6221**返回值:** 6222 6223| 类型 | 说明 | 6224| ------------------------------------------------------------ | ---------------------- | 6225| boolean | 返回销毁渲染进程的结果,如果渲染进程可以被销毁则返回true,否则返回false。 如果渲染进程已被销毁则直接返回true。| 6226 6227**错误码:** 6228 6229以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6230 6231| 错误码ID | 错误信息 | 6232| -------- | ------------------------------------------------------------ | 6233| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6234 6235**示例:** 6236 6237```ts 6238// xxx.ets 6239import { webview } from '@kit.ArkWeb'; 6240 6241@Entry 6242@Component 6243struct WebComponent { 6244 controller: webview.WebviewController = new webview.WebviewController(); 6245 6246 build() { 6247 Column() { 6248 Button('terminateRenderProcess') 6249 .onClick(() => { 6250 let result = this.controller.terminateRenderProcess(); 6251 console.log("terminateRenderProcess result: " + result); 6252 }) 6253 Web({ src: 'www.example.com', controller: this.controller }) 6254 } 6255 } 6256} 6257``` 6258 6259### postUrl<sup>11+</sup> 6260 6261postUrl(url: string, postData: ArrayBuffer): void 6262 6263使用"POST"方法加载带有postData的url。如果url不是网络url,则会使用[loadUrl](#loadurl)方法加载url,忽略postData参数。 6264 6265**系统能力:** SystemCapability.Web.Webview.Core 6266 6267**参数:** 6268 6269| 参数名 | 类型 | 必填 | 说明 | 6270| ------- | ---------------- | ---- | :-------------------- | 6271| url | string | 是 | 需要加载的 URL。 | 6272| postData | ArrayBuffer | 是 | 使用"POST"方法传递数据。 该请求必须采用"application/x-www-form-urlencoded"编码。| 6273 6274**错误码:** 6275 6276以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6277 6278| 错误码ID | 错误信息 | 6279| -------- | ------------------------------------------------------------ | 6280| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6281| 17100002 | Invalid url. | 6282| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 6283 6284**示例:** 6285 6286```ts 6287// xxx.ets 6288import { webview } from '@kit.ArkWeb'; 6289import { BusinessError } from '@kit.BasicServicesKit'; 6290 6291class TestObj { 6292 constructor() { 6293 } 6294 6295 test(str: string): ArrayBuffer { 6296 let buf = new ArrayBuffer(str.length); 6297 let buff = new Uint8Array(buf); 6298 6299 for (let i = 0; i < str.length; i++) { 6300 buff[i] = str.charCodeAt(i); 6301 } 6302 return buf; 6303 } 6304} 6305 6306@Entry 6307@Component 6308struct WebComponent { 6309 controller: webview.WebviewController = new webview.WebviewController(); 6310 @State testObjtest: TestObj = new TestObj(); 6311 6312 build() { 6313 Column() { 6314 Button('postUrl') 6315 .onClick(() => { 6316 try { 6317 // 数据转化为ArrayBuffer类型。 6318 let postData = this.testObjtest.test("Name=test&Password=test"); 6319 this.controller.postUrl('www.example.com', postData); 6320 } catch (error) { 6321 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6322 } 6323 }) 6324 Web({ src: '', controller: this.controller }) 6325 } 6326 } 6327} 6328``` 6329 6330### createWebPrintDocumentAdapter<sup>11+</sup> 6331 6332createWebPrintDocumentAdapter(jobName: string): print.PrintDocumentAdapter 6333 6334创建web相关打印功能。 6335 6336**系统能力:** SystemCapability.Web.Webview.Core 6337 6338**参数:** 6339 6340| 参数名 | 类型 | 必填 | 说明 | 6341| ------- | ------ | ---- | :-------------------- | 6342| jobName | string | 是 | 需要打印的文件名。 | 6343 6344**返回值:** 6345 6346| 类型 | 说明 | 6347| -------------------- | ------------------------- | 6348| print.printDocumentAdapter | 返回打印文档的适配器。 | 6349 6350**错误码:** 6351 6352以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6353 6354| 错误码ID | 错误信息 | 6355| -------- | -------------------------------------------------------------------------- | 6356| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6357| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6358 6359**示例:** 6360 6361```ts 6362// xxx.ets 6363import { webview } from '@kit.ArkWeb'; 6364import { BusinessError, print } from '@kit.BasicServicesKit'; 6365 6366@Entry 6367@Component 6368struct WebComponent { 6369 controller: webview.WebviewController = new webview.WebviewController(); 6370 6371 build() { 6372 Column() { 6373 Button('createWebPrintDocumentAdapter') 6374 .onClick(() => { 6375 try { 6376 let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf'); 6377 print.print('example_jobid', webPrintDocadapter, null, getContext()); 6378 } catch (error) { 6379 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6380 } 6381 }) 6382 Web({ src: 'www.example.com', controller: this.controller }) 6383 } 6384 } 6385} 6386``` 6387### isIncognitoMode<sup>11+</sup> 6388 6389isIncognitoMode(): boolean 6390 6391查询当前是否是隐私模式的Webview。 6392 6393**系统能力:** SystemCapability.Web.Webview.Core 6394 6395**返回值:** 6396 6397| 类型 | 说明 | 6398| -------------------- | ------------------------- | 6399| boolean | 返回是否是隐私模式的Webview。 | 6400 6401**错误码:** 6402 6403以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6404 6405| 错误码ID | 错误信息 | 6406| -------- | -------------------------------------------------------------------------- | 6407| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6408 6409**示例:** 6410 6411```ts 6412// xxx.ets 6413import { webview } from '@kit.ArkWeb'; 6414import { BusinessError } from '@kit.BasicServicesKit'; 6415 6416@Entry 6417@Component 6418struct WebComponent { 6419 controller: webview.WebviewController = new webview.WebviewController(); 6420 6421 build() { 6422 Column() { 6423 Button('isIncognitoMode') 6424 .onClick(() => { 6425 try { 6426 let result = this.controller.isIncognitoMode(); 6427 console.log('isIncognitoMode' + result); 6428 } catch (error) { 6429 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6430 } 6431 }) 6432 Web({ src: 'www.example.com', controller: this.controller }) 6433 } 6434 } 6435} 6436``` 6437 6438### getSecurityLevel<sup>11+</sup> 6439 6440getSecurityLevel(): SecurityLevel 6441 6442获取当前网页的安全级别。 6443 6444**系统能力:** SystemCapability.Web.Webview.Core 6445 6446**返回值:** 6447 6448| 类型 | 说明 | 6449| ----------------------------------- | --------------------------- | 6450| [SecurityLevel](#securitylevel11) | 当前网页的安全级别,具体值为NONE、SECURE、WARNING、DANGEROUS。 | 6451 6452**错误码:** 6453 6454以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6455 6456| 错误码ID | 错误信息 | 6457| -------- | ------------------------------------------------------------ | 6458| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6459 6460**示例:** 6461 6462```ts 6463import { webview } from '@kit.ArkWeb'; 6464 6465@Entry 6466@Component 6467struct WebComponent { 6468 controller: webview.WebviewController = new webview.WebviewController(); 6469 6470 build() { 6471 Column() { 6472 Web({ src: 'www.example.com', controller: this.controller }) 6473 .onPageEnd((event) => { 6474 if (event) { 6475 let securityLevel = this.controller.getSecurityLevel(); 6476 console.info('securityLevel: ', securityLevel); 6477 } 6478 }) 6479 } 6480 } 6481} 6482``` 6483 6484### setScrollable<sup>12+</sup> 6485 6486setScrollable(enable: boolean, type?: ScrollType): void 6487 6488设置网页是否允许滚动。 6489 6490**系统能力:** SystemCapability.Web.Webview.Core 6491 6492**参数:** 6493 6494| 参数名 | 类型 | 必填 | 说明 | 6495| ------ | -------- | ---- | ---------------------- | 6496| enable | boolean | 是 | 表示是否将网页设置为允许滚动,true表示设置为允许滚动,false表示禁止滚动。 | 6497| type | [ScrollType](#scrolltype12) | 否 | 网页可触发的滚动类型,支持缺省配置。<br/> - enable为false时,表示禁止ScrollType类型的滚动,当ScrollType缺省时表示禁止所有类型网页滚动。<br/> - enable为true时,ScrollType缺省与否,都表示允许所有类型的网页滚动。| 6498 6499**错误码:** 6500 6501以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6502 6503| 错误码ID | 错误信息 | 6504| -------- | ------------------------------------------------------------ | 6505| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 6506| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6507 6508**示例:** 6509 6510```ts 6511// xxx.ets 6512import { webview } from '@kit.ArkWeb'; 6513import { BusinessError } from '@kit.BasicServicesKit'; 6514 6515@Entry 6516@Component 6517struct WebComponent { 6518 controller: webview.WebviewController = new webview.WebviewController(); 6519 6520 build() { 6521 Column() { 6522 Button('setScrollable') 6523 .onClick(() => { 6524 try { 6525 this.controller.setScrollable(true); 6526 } catch (error) { 6527 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6528 } 6529 }) 6530 Web({ src: 'www.example.com', controller: this.controller }) 6531 } 6532 } 6533} 6534``` 6535 6536### getScrollable<sup>12+</sup> 6537 6538getScrollable(): boolean 6539 6540获取当前网页是否允许滚动。 6541 6542**系统能力:** SystemCapability.Web.Webview.Core 6543 6544**返回值:** 6545 6546| 类型 | 说明 | 6547| ------ | -------------- | 6548| boolean | 当前网页是否允许滚动,true为允许滚动,false为禁止滚动。 | 6549 6550**错误码:** 6551 6552以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6553 6554| 错误码ID | 错误信息 | 6555| -------- | ------------------------------------------------------------ | 6556| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6557 6558**示例:** 6559 6560```ts 6561// xxx.ets 6562import { webview } from '@kit.ArkWeb'; 6563import { BusinessError } from '@kit.BasicServicesKit'; 6564 6565@Entry 6566@Component 6567struct WebComponent { 6568 controller: webview.WebviewController = new webview.WebviewController(); 6569 6570 build() { 6571 Column() { 6572 Button('getScrollable') 6573 .onClick(() => { 6574 try { 6575 let scrollEnabled = this.controller.getScrollable(); 6576 console.log("scrollEnabled: " + scrollEnabled); 6577 } catch (error) { 6578 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6579 } 6580 }) 6581 Web({ src: 'www.example.com', controller: this.controller }) 6582 } 6583 } 6584} 6585``` 6586 6587### setPrintBackground<sup>12+</sup> 6588 6589setPrintBackground(enable: boolean): void 6590 6591设置是否打印网页背景。 6592 6593**系统能力:** SystemCapability.Web.Webview.Core 6594 6595**参数:** 6596 6597| 参数名 | 类型 | 必填 | 说明 | 6598| -------- | ------- | ---- | -------------------------------------- | 6599| enable | boolean | 是 | 表示是否打印网页背景,true表示设置为打印网页背景,false表示取消网页背景打印。 | 6600 6601**错误码:** 6602 6603以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6604 6605| 错误码ID | 错误信息 | 6606| -------- | ------------------------------------------------------------ | 6607| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 6608| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6609 6610**示例:** 6611 6612```ts 6613import { webview } from '@kit.ArkWeb'; 6614import { BusinessError } from '@kit.BasicServicesKit'; 6615 6616@Entry 6617@Component 6618struct WebComponent { 6619 controller: webview.WebviewController = new webview.WebviewController(); 6620 6621 build() { 6622 Column() { 6623 Button('setPrintBackground') 6624 .onClick(() => { 6625 try { 6626 this.controller.setPrintBackground(false); 6627 } catch (error) { 6628 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6629 } 6630 }) 6631 Web({ src: 'www.example.com', controller: this.controller }) 6632 } 6633 } 6634} 6635``` 6636 6637### getPrintBackground<sup>12+</sup> 6638 6639getPrintBackground(): boolean 6640 6641查询webview是否打印网页背景。 6642 6643**系统能力:** SystemCapability.Web.Webview.Core 6644 6645**返回值:** 6646 6647| 类型 | 说明 | 6648| -------------------- | ------------------------- | 6649| boolean | 返回Webview是否打印网页背景。 | 6650 6651**错误码:** 6652 6653以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6654 6655| 错误码ID | 错误信息 | 6656| -------- | ------------------------------------------------------------ | 6657| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6658 6659**示例:** 6660 6661```ts 6662import { webview } from '@kit.ArkWeb'; 6663import { BusinessError } from '@kit.BasicServicesKit'; 6664 6665@Entry 6666@Component 6667struct WebComponent { 6668 controller: webview.WebviewController = new webview.WebviewController(); 6669 6670 build() { 6671 Column() { 6672 Button('setPrintBackground') 6673 .onClick(() => { 6674 try { 6675 let enable = this.controller.getPrintBackground(); 6676 console.log("getPrintBackground: " + enable); 6677 } catch (error) { 6678 console.error(`ErrorCode:${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6679 } 6680 }) 6681 Web({ src: 'www.example.com', controller: this.controller }) 6682 } 6683 } 6684} 6685``` 6686 6687### getLastJavascriptProxyCallingFrameUrl<sup>12+</sup> 6688 6689getLastJavascriptProxyCallingFrameUrl(): string 6690 6691通过[registerJavaScriptProxy](#registerjavascriptproxy)或者[javaScriptProxy](ts-basic-components-web.md#javascriptproxy)注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入的对象的frame的url。 6692 6693**系统能力:** SystemCapability.Web.Webview.Core 6694 6695**错误码:** 6696 6697以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6698 6699| 错误码ID | 错误信息 | 6700| -------- | ------------------------------------------------------------ | 6701| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6702 6703**示例:** 6704 6705```ts 6706// xxx.ets 6707import { webview } from '@kit.ArkWeb'; 6708import { BusinessError } from '@kit.BasicServicesKit'; 6709 6710class TestObj { 6711 mycontroller: webview.WebviewController; 6712 6713 constructor(controller: webview.WebviewController) { 6714 this.mycontroller = controller; 6715 } 6716 6717 test(testStr: string): string { 6718 console.log('Web Component str' + testStr + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6719 return testStr; 6720 } 6721 6722 toString(): void { 6723 console.log('Web Component toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6724 } 6725 6726 testNumber(testNum: number): number { 6727 console.log('Web Component number' + testNum + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6728 return testNum; 6729 } 6730 6731 testBool(testBol: boolean): boolean { 6732 console.log('Web Component boolean' + testBol + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6733 return testBol; 6734 } 6735} 6736 6737class WebObj { 6738 mycontroller: webview.WebviewController; 6739 6740 constructor(controller: webview.WebviewController) { 6741 this.mycontroller = controller; 6742 } 6743 6744 webTest(): string { 6745 console.log('Web test ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6746 return "Web test"; 6747 } 6748 6749 webString(): void { 6750 console.log('Web test toString ' + " url " + this.mycontroller.getLastJavascriptProxyCallingFrameUrl()); 6751 } 6752} 6753 6754@Entry 6755@Component 6756struct Index { 6757 controller: webview.WebviewController = new webview.WebviewController(); 6758 @State testObjtest: TestObj = new TestObj(this.controller); 6759 @State webTestObj: WebObj = new WebObj(this.controller); 6760 6761 build() { 6762 Column() { 6763 Button('refresh') 6764 .onClick(() => { 6765 try { 6766 this.controller.refresh(); 6767 } catch (error) { 6768 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6769 } 6770 }) 6771 Button('Register JavaScript To Window') 6772 .onClick(() => { 6773 try { 6774 this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]); 6775 this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]); 6776 } catch (error) { 6777 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6778 } 6779 }) 6780 Button('deleteJavaScriptRegister') 6781 .onClick(() => { 6782 try { 6783 this.controller.deleteJavaScriptRegister("objName"); 6784 this.controller.deleteJavaScriptRegister("objTestName"); 6785 } catch (error) { 6786 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6787 } 6788 }) 6789 Web({ src: $rawfile('index.html'), controller: this.controller }) 6790 .javaScriptAccess(true) 6791 } 6792 } 6793} 6794``` 6795 6796加载的html文件。 6797```html 6798<!-- index.html --> 6799<!DOCTYPE html> 6800<html> 6801 <meta charset="utf-8"> 6802 <body> 6803 <button type="button" onclick="htmlTest()">Click Me!</button> 6804 <p id="demo"></p> 6805 <p id="webDemo"></p> 6806 </body> 6807 <script type="text/javascript"> 6808 function htmlTest() { 6809 // This function call expects to return "ArkUI Web Component" 6810 let str=objName.test("webtest data"); 6811 objName.testNumber(1); 6812 objName.testBool(true); 6813 document.getElementById("demo").innerHTML=str; 6814 console.log('objName.test result:'+ str) 6815 6816 // This function call expects to return "Web test" 6817 let webStr = objTestName.webTest(); 6818 document.getElementById("webDemo").innerHTML=webStr; 6819 console.log('objTestName.webTest result:'+ webStr) 6820 } 6821</script> 6822</html> 6823``` 6824 6825### pauseAllTimers<sup>12+</sup> 6826 6827pauseAllTimers(): void 6828 6829暂停所有WebView的定时器。 6830 6831**系统能力:** SystemCapability.Web.Webview.Core 6832 6833**错误码:** 6834 6835以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6836 6837| 错误码ID | 错误信息 | 6838| -------- | ------------------------------------------------------------ | 6839| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6840 6841**示例:** 6842 6843```ts 6844import { webview } from '@kit.ArkWeb'; 6845import { BusinessError } from '@kit.BasicServicesKit'; 6846 6847@Entry 6848@Component 6849struct WebComponent { 6850 controller: webview.WebviewController = new webview.WebviewController(); 6851 6852 build() { 6853 Column() { 6854 Row() { 6855 Button('PauseAllTimers') 6856 .onClick(() => { 6857 try { 6858 webview.WebviewController.pauseAllTimers(); 6859 } catch (error) { 6860 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6861 } 6862 }) 6863 } 6864 Web({ src: $rawfile("index.html"), controller: this.controller }) 6865 } 6866 } 6867} 6868``` 6869加载的html文件。 6870 6871```html 6872<!DOCTYPE html> 6873<html> 6874 <body> 6875 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 6876 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 6877 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 6878 </body> 6879</html> 6880<script> 6881 var timer = null; 6882 var num = 0; 6883 6884 function startTimer() { 6885 timer = setInterval(function() { 6886 document.getElementById("show_num").value = ++num; 6887 }, 1000); 6888 } 6889</script> 6890``` 6891 6892### resumeAllTimers<sup>12+</sup> 6893 6894resumeAllTimers(): void 6895 6896恢复从pauseAllTimers()接口中被暂停的所有的定时器。 6897 6898**系统能力:** SystemCapability.Web.Webview.Core 6899 6900**错误码:** 6901 6902以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6903 6904| 错误码ID | 错误信息 | 6905| -------- | ------------------------------------------------------------ | 6906| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6907 6908**示例:** 6909 6910```ts 6911import { webview } from '@kit.ArkWeb'; 6912import { BusinessError } from '@kit.BasicServicesKit'; 6913 6914@Entry 6915@Component 6916struct WebComponent { 6917 controller: webview.WebviewController = new webview.WebviewController(); 6918 6919 build() { 6920 Column() { 6921 Row() { 6922 Button('ResumeAllTimers') 6923 .onClick(() => { 6924 try { 6925 webview.WebviewController.resumeAllTimers(); 6926 } catch (error) { 6927 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6928 } 6929 }) 6930 Button('PauseAllTimers') 6931 .onClick(() => { 6932 try { 6933 webview.WebviewController.pauseAllTimers(); 6934 } catch (error) { 6935 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 6936 } 6937 }) 6938 } 6939 Web({ src: $rawfile("index.html"), controller: this.controller }) 6940 } 6941 } 6942} 6943``` 6944加载的html文件。 6945 6946```html 6947<!DOCTYPE html> 6948<html> 6949 <body> 6950 <button style="width:300px;height:150px;font-size:50px" onclick="startTimer()">start</button> 6951 <button style="width:300px;height:150px;font-size:50px" onclick="resetTimer()">reset</button> 6952 <input style="width:300px;height:150px;font-size:50px" value="0" id="show_num"> 6953 </body> 6954</html> 6955<script> 6956 var timer = null; 6957 var num = 0; 6958 6959 function startTimer() { 6960 timer = setInterval(function() { 6961 document.getElementById("show_num").value = ++num; 6962 }, 1000); 6963 } 6964 6965 function resetTimer() { 6966 clearInterval(timer); 6967 document.getElementById("show_num").value = 0; 6968 num = 0; 6969 } 6970</script> 6971``` 6972 6973### stopAllMedia<sup>12+</sup> 6974 6975stopAllMedia(): void 6976 6977控制网页所有音视频停止。 6978 6979**系统能力:** SystemCapability.Web.Webview.Core 6980 6981**错误码:** 6982 6983以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 6984 6985| 错误码ID | 错误信息 | 6986| -------- | ------------------------------------------------------------ | 6987| 17100001 | Init error. The WebviewController must be associated with a Web component. | 6988 6989**示例:** 6990 6991```ts 6992// xxx.ets 6993import { webview } from '@kit.ArkWeb'; 6994import { BusinessError } from '@kit.BasicServicesKit'; 6995 6996@Entry 6997@Component 6998struct WebComponent { 6999 controller: webview.WebviewController = new webview.WebviewController(); 7000 7001 build() { 7002 Column() { 7003 Button('stopAllMedia') 7004 .onClick(() => { 7005 try { 7006 this.controller.stopAllMedia(); 7007 } catch (error) { 7008 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7009 } 7010 }) 7011 Web({ src: 'www.example.com', controller: this.controller }) 7012 } 7013 } 7014} 7015``` 7016 7017### pauseAllMedia<sup>12+</sup> 7018 7019pauseAllMedia(): void 7020 7021控制网页所有音视频暂停。 7022 7023**系统能力:** SystemCapability.Web.Webview.Core 7024 7025**错误码:** 7026 7027以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7028 7029| 错误码ID | 错误信息 | 7030| -------- | ------------------------------------------------------------ | 7031| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7032 7033**示例:** 7034 7035```ts 7036// xxx.ets 7037import { webview } from '@kit.ArkWeb'; 7038import { BusinessError } from '@kit.BasicServicesKit'; 7039 7040@Entry 7041@Component 7042struct WebComponent { 7043 controller: webview.WebviewController = new webview.WebviewController(); 7044 7045 build() { 7046 Column() { 7047 Button('pauseAllMedia') 7048 .onClick(() => { 7049 try { 7050 this.controller.pauseAllMedia(); 7051 } catch (error) { 7052 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7053 } 7054 }) 7055 Web({ src: 'www.example.com', controller: this.controller }) 7056 } 7057 } 7058} 7059``` 7060 7061### resumeAllMedia<sup>12+</sup> 7062 7063resumeAllMedia(): void 7064 7065控制网页被pauseAllMedia接口暂停的音视频继续播放。 7066 7067**系统能力:** SystemCapability.Web.Webview.Core 7068 7069**错误码:** 7070 7071以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7072 7073| 错误码ID | 错误信息 | 7074| -------- | ------------------------------------------------------------ | 7075| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7076 7077**示例:** 7078 7079```ts 7080// xxx.ets 7081import { webview } from '@kit.ArkWeb'; 7082import { BusinessError } from '@kit.BasicServicesKit'; 7083 7084@Entry 7085@Component 7086struct WebComponent { 7087 controller: webview.WebviewController = new webview.WebviewController(); 7088 7089 build() { 7090 Column() { 7091 Button('resumeAllMedia') 7092 .onClick(() => { 7093 try { 7094 this.controller.resumeAllMedia(); 7095 } catch (error) { 7096 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7097 } 7098 }) 7099 Web({ src: 'www.example.com', controller: this.controller }) 7100 } 7101 } 7102} 7103``` 7104 7105### closeAllMediaPresentations<sup>12+</sup> 7106 7107closeAllMediaPresentations(): void 7108 7109控制网页所有全屏视频关闭。 7110 7111**系统能力:** SystemCapability.Web.Webview.Core 7112 7113**错误码:** 7114 7115以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7116 7117| 错误码ID | 错误信息 | 7118| -------- | ------------------------------------------------------------ | 7119| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7120 7121**示例:** 7122 7123```ts 7124// xxx.ets 7125import { webview } from '@kit.ArkWeb'; 7126import { BusinessError } from '@kit.BasicServicesKit'; 7127 7128@Entry 7129@Component 7130struct WebComponent { 7131 controller: webview.WebviewController = new webview.WebviewController(); 7132 7133 build() { 7134 Column() { 7135 Button('closeAllMediaPresentations') 7136 .onClick(() => { 7137 try { 7138 this.controller.closeAllMediaPresentations(); 7139 } catch (error) { 7140 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7141 } 7142 }) 7143 Web({ src: 'www.example.com', controller: this.controller }) 7144 } 7145 } 7146} 7147``` 7148 7149### getMediaPlaybackState<sup>12+</sup> 7150 7151getMediaPlaybackState(): MediaPlaybackState 7152 7153查询当前所有音视频播控状态。 7154 7155**系统能力:** SystemCapability.Web.Webview.Core 7156 7157**返回值:** 7158 7159| 类型 | 说明 | 7160| ------------------------------------------- | --------------------------------------------------------- | 7161| [MediaPlaybackState](#mediaplaybackstate12) | 当前网页的播控状态,具体值为NONE、PLAYING、PAUSED、STOPPED。 | 7162 7163**错误码:** 7164 7165以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7166 7167| 错误码ID | 错误信息 | 7168| -------- | ------------------------------------------------------------ | 7169| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7170 7171**示例:** 7172 7173```ts 7174// xxx.ets 7175import { webview } from '@kit.ArkWeb'; 7176import { BusinessError } from '@kit.BasicServicesKit'; 7177 7178@Entry 7179@Component 7180struct WebComponent { 7181 controller: webview.WebviewController = new webview.WebviewController(); 7182 7183 build() { 7184 Column() { 7185 Button('getMediaPlaybackState') 7186 .onClick(() => { 7187 try { 7188 console.log("MediaPlaybackState : " + this.controller.getMediaPlaybackState()); 7189 } catch (error) { 7190 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7191 } 7192 }) 7193 Web({ src: 'www.example.com', controller: this.controller }) 7194 } 7195 } 7196} 7197``` 7198 7199### setWebSchemeHandler<sup>12+</sup> 7200 7201setWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7202 7203为当前Web组件设置[WebSchemeHandler](#webschemehandler12), [WebSchemeHandler](#webschemehandler12)类用于拦截指定scheme的请求。 7204 7205**系统能力:** SystemCapability.Web.Webview.Core 7206 7207**参数:** 7208 7209| 参数名 | 类型 | 必填 | 说明 | 7210| ------ | ------ | ---- | :------------------------ | 7211| scheme | string | 是 | 要拦截的协议。 | 7212| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7213 7214**错误码:** 7215 7216以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7217 7218| 错误码ID | 错误信息 | 7219| -------- | ------------------------------------------------------------ | 7220| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7221| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7222 7223**示例:** 7224 7225```ts 7226// xxx.ets 7227import { webview } from '@kit.ArkWeb'; 7228import { BusinessError } from '@kit.BasicServicesKit'; 7229 7230@Entry 7231@Component 7232struct WebComponent { 7233 controller: webview.WebviewController = new webview.WebviewController(); 7234 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7235 7236 build() { 7237 Column() { 7238 Button('setWebSchemeHandler') 7239 .onClick(() => { 7240 try { 7241 this.controller.setWebSchemeHandler('http', this.schemeHandler); 7242 } catch (error) { 7243 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7244 } 7245 }) 7246 Web({ src: 'www.example.com', controller: this.controller }) 7247 } 7248 } 7249} 7250``` 7251 7252### clearWebSchemeHandler<sup>12+</sup> 7253 7254clearWebSchemeHandler(): void 7255 7256清除当前Web组件设置的所有WebSchemeHandler。 7257 7258**系统能力:** SystemCapability.Web.Webview.Core 7259 7260**错误码:** 7261 7262以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7263 7264| 错误码ID | 错误信息 | 7265| -------- | ------------------------------------------------------------ | 7266| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7267 7268**示例:** 7269 7270```ts 7271// xxx.ets 7272import { webview } from '@kit.ArkWeb'; 7273import { BusinessError } from '@kit.BasicServicesKit'; 7274 7275@Entry 7276@Component 7277struct WebComponent { 7278 controller: webview.WebviewController = new webview.WebviewController(); 7279 7280 build() { 7281 Column() { 7282 Button('clearWebSchemeHandler') 7283 .onClick(() => { 7284 try { 7285 this.controller.clearWebSchemeHandler(); 7286 } catch (error) { 7287 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7288 } 7289 }) 7290 Web({ src: 'www.example.com', controller: this.controller }) 7291 } 7292 } 7293} 7294``` 7295 7296### setServiceWorkerWebSchemeHandler<sup>12+</sup> 7297 7298setServiceWorkerWebSchemeHandler(scheme: string, handler: WebSchemeHandler): void 7299 7300为当前应用的所有Web组件设置用于拦截ServiceWorker的WebSchemeHandler。 7301 7302**系统能力:** SystemCapability.Web.Webview.Core 7303 7304**参数:** 7305 7306| 参数名 | 类型 | 必填 | 说明 | 7307| ------ | ------ | ---- | :------------------------ | 7308| scheme | string | 是 | 要拦截的协议。 | 7309| handler | [WebSchemeHandler](#webschemehandler12) | 是 | 拦截此协议的拦截器。 | 7310 7311**错误码:** 7312 7313以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7314 7315| 错误码ID | 错误信息 | 7316| -------- | ------------------------------------------------------------ | 7317| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 7318 7319**示例:** 7320 7321```ts 7322// xxx.ets 7323import { webview } from '@kit.ArkWeb'; 7324import { BusinessError } from '@kit.BasicServicesKit'; 7325 7326@Entry 7327@Component 7328struct WebComponent { 7329 controller: webview.WebviewController = new webview.WebviewController(); 7330 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 7331 7332 build() { 7333 Column() { 7334 Button('setWebSchemeHandler') 7335 .onClick(() => { 7336 try { 7337 webview.WebviewController.setServiceWorkerWebSchemeHandler('http', this.schemeHandler); 7338 } catch (error) { 7339 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7340 } 7341 }) 7342 Web({ src: 'www.example.com', controller: this.controller }) 7343 } 7344 } 7345} 7346``` 7347 7348### clearServiceWorkerWebSchemeHandler<sup>12+</sup> 7349 7350clearServiceWorkerWebSchemeHandler(): void 7351 7352清除应用中设置的所有用于拦截ServiceWorker的WebSchemeHandler。 7353 7354**系统能力:** SystemCapability.Web.Webview.Core 7355 7356**示例:** 7357 7358```ts 7359// xxx.ets 7360import { webview } from '@kit.ArkWeb'; 7361 7362@Entry 7363@Component 7364struct WebComponent { 7365 controller: webview.WebviewController = new webview.WebviewController(); 7366 7367 build() { 7368 Column() { 7369 Button('clearServiceWorkerWebSchemeHandler') 7370 .onClick(() => { 7371 webview.WebviewController.clearServiceWorkerWebSchemeHandler(); 7372 }) 7373 Web({ src: 'www.example.com', controller: this.controller }) 7374 } 7375 } 7376} 7377``` 7378 7379### startCamera<sup>12+</sup> 7380 7381startCamera(): void 7382 7383开启当前网页摄像头捕获。 7384 7385**系统能力:** SystemCapability.Web.Webview.Core 7386 7387**错误码:** 7388 7389以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7390 7391| 错误码ID | 错误信息 | 7392| -------- | ------------------------------------------------------------ | 7393| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7394 7395**示例:** 7396```ts 7397// xxx.ets 7398import { webview } from '@kit.ArkWeb'; 7399import { BusinessError } from '@kit.BasicServicesKit'; 7400import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit'; 7401 7402let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 7403try { 7404 let context: Context = getContext(this) as common.UIAbilityContext; 7405 atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => { 7406 console.info('data:' + JSON.stringify(data)); 7407 console.info('data permissions:' + data.permissions); 7408 console.info('data authResults:' + data.authResults); 7409 }) 7410} catch (error) { 7411 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7412} 7413 7414@Entry 7415@Component 7416struct WebComponent { 7417 controller: webview.WebviewController = new webview.WebviewController(); 7418 7419 build() { 7420 Column() { 7421 Button("startCamera").onClick(() => { 7422 try { 7423 this.controller.startCamera(); 7424 } catch (error) { 7425 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7426 } 7427 }) 7428 Button("stopCamera").onClick(() => { 7429 try { 7430 this.controller.stopCamera(); 7431 } catch (error) { 7432 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7433 } 7434 }) 7435 Button("closeCamera").onClick(() => { 7436 try { 7437 this.controller.closeCamera(); 7438 } catch (error) { 7439 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 7440 } 7441 }) 7442 Web({ src: $rawfile('index.html'), controller: this.controller }) 7443 .onPermissionRequest((event) => { 7444 if (event) { 7445 AlertDialog.show({ 7446 title: 'title', 7447 message: 'text', 7448 primaryButton: { 7449 value: 'deny', 7450 action: () => { 7451 event.request.deny(); 7452 } 7453 }, 7454 secondaryButton: { 7455 value: 'onConfirm', 7456 action: () => { 7457 event.request.grant(event.request.getAccessibleResource()); 7458 } 7459 }, 7460 cancel: () => { 7461 event.request.deny(); 7462 } 7463 }) 7464 } 7465 }) 7466 } 7467 } 7468} 7469 7470``` 7471加载的html文件。 7472 ```html 7473<!-- index.html --> 7474<!DOCTYPE html> 7475<html> 7476 <head> 7477 <meta charset="UTF-8"> 7478 </head> 7479 <body> 7480 <video id="video" width="400px" height="400px" autoplay="autoplay"> 7481 </video> 7482 <input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" /> 7483 <script> 7484 function getMedia() { 7485 let constraints = { 7486 video: { 7487 width: 500, 7488 height: 500 7489 }, 7490 audio: true 7491 } 7492 let video = document.getElementById("video"); 7493 let promise = navigator.mediaDevices.getUserMedia(constraints); 7494 promise.then(function(MediaStream) { 7495 video.srcObject = MediaStream; 7496 video.play(); 7497 }) 7498 } 7499 </script> 7500 </body> 7501</html> 7502 ``` 7503 7504### stopCamera<sup>12+</sup> 7505 7506stopCamera(): void 7507 7508停止当前网页摄像头捕获。 7509 7510**系统能力:** SystemCapability.Web.Webview.Core 7511 7512**错误码:** 7513 7514以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7515 7516| 错误码ID | 错误信息 | 7517| -------- | ------------------------------------------------------------ | 7518| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7519 7520**示例:** 7521 7522完整示例代码参考[startCamera](#startcamera12)。 7523 7524### closeCamera<sup>12+</sup> 7525 7526closeCamera(): void 7527 7528关闭当前网页摄像头捕获。 7529 7530**系统能力:** SystemCapability.Web.Webview.Core 7531 7532**错误码:** 7533 7534以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7535 7536| 错误码ID | 错误信息 | 7537| -------- | ------------------------------------------------------------ | 7538| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7539 7540**示例:** 7541 7542完整示例代码参考[startCamera](#startcamera12)。 7543 7544### precompileJavaScript<sup>12+</sup> 7545 7546precompileJavaScript(url: string, script: string | Uint8Array, cacheOptions: CacheOptions): Promise\<number\> 7547 7548预编译JavaScript生成字节码缓存或根据提供的参数更新已有的字节码缓存。 7549接口通过提供的文件信息、E-Tag响应头和Last-Modified响应头判断是否需要更新已有的字节码缓存。 7550 7551**系统能力:** SystemCapability.Web.Webview.Core 7552 7553**参数:** 7554 7555| 参数名 | 类型 | 必填 | 说明 | 7556| ------- | ------ | ---- | :-------------------- | 7557| url | string | 是 | 本地JavaScript文件对应的网络地址,即业务网页请求该文件的服务器版本时使用的网络地址。网络地址仅支持http或https协议,长度不超过2048。如果该网络地址对应的缓存失效,则业务网页将通过网络请求对应的资源。 | 7558| script | string \| Uint8Array | 是 | 本地JavaScript的文本内容。内容不能为空。 | 7559| cacheOptions | [CacheOptions](#cacheoptions12) | 是 | 用于控制字节码缓存更新。 | 7560 7561**返回值:** 7562 7563| 类型 | 说明 | 7564| ----------------------------------- | --------------------------- | 7565| Promise\<number\> | 生成字节码缓存的错误码,0表示无错误,-1表示内部错误。 | 7566 7567**错误码:** 7568 7569以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 7570 7571| 错误码ID | 错误信息 | 7572| -------- | ------------------------------------------------------------ | 7573| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 7574| 17100001 | Init error. The WebviewController must be associated with a Web component. | 7575 7576**示例:** 7577 7578接口推荐配合动态组件使用,使用离线的Web组件用于生成字节码缓存,并在适当的时机加载业务用Web组件使用这些字节码缓存。下方是代码示例: 7579 75801. 首先,在EntryAbility中将UIContext存到localStorage中。 7581 7582 ```ts 7583 // EntryAbility.ets 7584 import { UIAbility } from '@kit.AbilityKit'; 7585 import { window } from '@kit.ArkUI'; 7586 7587 const localStorage: LocalStorage = new LocalStorage('uiContext'); 7588 7589 export default class EntryAbility extends UIAbility { 7590 storage: LocalStorage = localStorage; 7591 7592 onWindowStageCreate(windowStage: window.WindowStage) { 7593 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 7594 if (err.code) { 7595 return; 7596 } 7597 7598 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 7599 }); 7600 } 7601 } 7602 ``` 7603 76042. 编写动态组件所需基础代码。 7605 7606 ```ts 7607 // DynamicComponent.ets 7608 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 7609 7610 export interface BuilderData { 7611 url: string; 7612 controller: WebviewController; 7613 } 7614 7615 const storage = LocalStorage.getShared(); 7616 7617 export class NodeControllerImpl extends NodeController { 7618 private rootNode: BuilderNode<BuilderData[]> | null = null; 7619 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 7620 7621 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) { 7622 super(); 7623 this.wrappedBuilder = wrappedBuilder; 7624 } 7625 7626 makeNode(): FrameNode | null { 7627 if (this.rootNode != null) { 7628 return this.rootNode.getFrameNode(); 7629 } 7630 return null; 7631 } 7632 7633 initWeb(url: string, controller: WebviewController) { 7634 if(this.rootNode != null) { 7635 return; 7636 } 7637 7638 const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext; 7639 if (!uiContext) { 7640 return; 7641 } 7642 this.rootNode = new BuilderNode(uiContext); 7643 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 7644 } 7645 } 7646 7647 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 7648 const baseNode = new NodeControllerImpl(wrappedBuilder); 7649 baseNode.initWeb(data.url, data.controller); 7650 return baseNode; 7651 } 7652 ``` 7653 76543. 编写用于生成字节码缓存的组件,本例中的本地Javascript资源内容通过文件读取接口读取rawfile目录下的本地文件。 7655 7656 <!--code_no_check--> 7657 ```ts 7658 // PrecompileWebview.ets 7659 import { BuilderData } from "./DynamicComponent"; 7660 import { Config, configs } from "./PrecompileConfig"; 7661 7662 @Builder 7663 function WebBuilder(data: BuilderData) { 7664 Web({ src: data.url, controller: data.controller }) 7665 .onControllerAttached(() => { 7666 precompile(data.controller, configs); 7667 }) 7668 .fileAccess(true) 7669 } 7670 7671 export const precompileWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7672 7673 export const precompile = async (controller: WebviewController, configs: Array<Config>) => { 7674 for (const config of configs) { 7675 let content = await readRawFile(config.localPath); 7676 7677 try { 7678 controller.precompileJavaScript(config.url, content, config.options) 7679 .then(errCode => { 7680 console.error("precompile successfully! " + errCode); 7681 }).catch((errCode: number) => { 7682 console.error("precompile failed. " + errCode); 7683 }); 7684 } catch (err) { 7685 console.error("precompile failed. " + err.code + " " + err.message); 7686 } 7687 } 7688 } 7689 7690 async function readRawFile(path: string) { 7691 try { 7692 return await getContext().resourceManager.getRawFileContent(path);; 7693 } catch (err) { 7694 return new Uint8Array(0); 7695 } 7696 } 7697 ``` 7698 7699JavaScript资源的获取方式也可通过[网络请求](../apis-network-kit/js-apis-http.md)的方式获取,但此方法获取到的http响应头非标准HTTP响应头格式,需额外将响应头转换成标准HTTP响应头格式后使用。如通过网络请求获取到的响应头是e-tag,则需要将其转换成E-Tag后使用。 7700 77014. 编写业务用组件代码。 7702 7703 <!--code_no_check--> 7704 ```ts 7705 // BusinessWebview.ets 7706 import { BuilderData } from "./DynamicComponent"; 7707 7708 @Builder 7709 function WebBuilder(data: BuilderData) { 7710 // 此处组件可根据业务需要自行扩展 7711 Web({ src: data.url, controller: data.controller }) 7712 .cacheMode(CacheMode.Default) 7713 } 7714 7715 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 7716 ``` 7717 77185. 编写资源配置信息。 7719 7720 ```ts 7721 // PrecompileConfig.ets 7722 import { webview } from '@kit.ArkWeb' 7723 7724 export interface Config { 7725 url: string, 7726 localPath: string, // 本地资源路径 7727 options: webview.CacheOptions 7728 } 7729 7730 export let configs: Array<Config> = [ 7731 { 7732 url: "https://www.example.com/example.js", 7733 localPath: "example.js", 7734 options: { 7735 responseHeaders: [ 7736 { headerKey: "E-Tag", headerValue: "aWO42N9P9dG/5xqYQCxsx+vDOoU="}, 7737 { headerKey: "Last-Modified", headerValue: "Wed, 21 Mar 2024 10:38:41 GMT"} 7738 ] 7739 } 7740 } 7741 ] 7742 ``` 7743 77446. 在页面中使用。 7745 7746 <!--code_no_check--> 7747 ```ts 7748 // Index.ets 7749 import { webview } from '@kit.ArkWeb'; 7750 import { NodeController } from '@kit.ArkUI'; 7751 import { createNode } from "./DynamicComponent" 7752 import { precompileWebview } from "./PrecompileWebview" 7753 import { businessWebview } from "./BusinessWebview" 7754 7755 @Entry 7756 @Component 7757 struct Index { 7758 @State precompileNode: NodeController | undefined = undefined; 7759 precompileController: webview.WebviewController = new webview.WebviewController(); 7760 7761 @State businessNode: NodeController | undefined = undefined; 7762 businessController: webview.WebviewController = new webview.WebviewController(); 7763 7764 aboutToAppear(): void { 7765 // 初始化用于注入本地资源的Web组件 7766 this.precompileNode = createNode(precompileWebview, 7767 { url: "https://www.example.com/empty.html", controller: this.precompileController}); 7768 } 7769 7770 build() { 7771 Column() { 7772 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 7773 Button("加载页面") 7774 .onClick(() => { 7775 this.businessNode = createNode(businessWebview, { 7776 url: "https://www.example.com/business.html", 7777 controller: this.businessController 7778 }); 7779 }) 7780 // 用于业务的Web组件 7781 NodeContainer(this.businessNode); 7782 } 7783 } 7784 } 7785 ``` 7786 7787当需要更新本地已经生成的编译字节码时,修改cacheOptions参数中responseHeaders中的E-Tag或Last-Modified响应头对应的值,再次调用接口即可。 7788 7789### onCreateNativeMediaPlayer<sup>12+</sup> 7790 7791onCreateNativeMediaPlayer(callback: CreateNativeMediaPlayerCallback): void 7792 7793注册回调函数,开启[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)后,当网页中有播放媒体时,触发注册的回调函数。 7794如果应用接管网页媒体播放功能未开启,则注册的回调函数不会被触发。 7795 7796**系统能力:** SystemCapability.Web.Webview.Core 7797 7798**参数:** 7799 7800| 参数名 | 类型 | 必填 | 说明 | 7801|--------|------|------|------| 7802| callback | [CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) | 是 | 接管网页媒体播放的回调函数。 | 7803 7804**示例:** 7805 7806```ts 7807// xxx.ets 7808import { webview } from '@kit.ArkWeb'; 7809 7810class ActualNativeMediaPlayerListener { 7811 handler: webview.NativeMediaPlayerHandler; 7812 7813 constructor(handler: webview.NativeMediaPlayerHandler) { 7814 this.handler = handler; 7815 } 7816 7817 onPlaying() { 7818 // 本地播放器开始播放。 7819 this.handler.handleStatusChanged(webview.PlaybackStatus.PLAYING); 7820 } 7821 onPaused() { 7822 // 本地播放器暂停播放。 7823 this.handler.handleStatusChanged(webview.PlaybackStatus.PAUSED); 7824 } 7825 onSeeking() { 7826 // 本地播放器开始执行跳转到目标时间点。 7827 this.handler.handleSeeking(); 7828 } 7829 onSeekDone() { 7830 // 本地播放器 seek 完成。 7831 this.handler.handleSeekFinished(); 7832 } 7833 onEnded() { 7834 // 本地播放器播放完成。 7835 this.handler.handleEnded(); 7836 } 7837 onVolumeChanged() { 7838 // 获取本地播放器的音量。 7839 let volume: number = getVolume(); 7840 this.handler.handleVolumeChanged(volume); 7841 } 7842 onCurrentPlayingTimeUpdate() { 7843 // 更新播放时间。 7844 let currentTime: number = getCurrentPlayingTime(); 7845 // 将时间单位换算成秒。 7846 let currentTimeInSeconds = convertToSeconds(currentTime); 7847 this.handler.handleTimeUpdate(currentTimeInSeconds); 7848 } 7849 onBufferedChanged() { 7850 // 缓存发生了变化。 7851 // 获取本地播放器的缓存时长。 7852 let bufferedEndTime: number = getCurrentBufferedTime(); 7853 // 将时间单位换算成秒。 7854 let bufferedEndTimeInSeconds = convertToSeconds(bufferedEndTime); 7855 this.handler.handleBufferedEndTimeChanged(bufferedEndTimeInSeconds); 7856 7857 // 检查缓存状态。 7858 // 如果缓存状态发生了变化,则向 ArkWeb 内核通知缓存状态。 7859 let lastReadyState: webview.ReadyState = getLastReadyState(); 7860 let currentReadyState: webview.ReadyState = getCurrentReadyState(); 7861 if (lastReadyState != currentReadyState) { 7862 this.handler.handleReadyStateChanged(currentReadyState); 7863 } 7864 } 7865 onEnterFullscreen() { 7866 // 本地播放器进入了全屏状态。 7867 let isFullscreen: boolean = true; 7868 this.handler.handleFullscreenChanged(isFullscreen); 7869 } 7870 onExitFullscreen() { 7871 // 本地播放器退出了全屏状态。 7872 let isFullscreen: boolean = false; 7873 this.handler.handleFullscreenChanged(isFullscreen); 7874 } 7875 onUpdateVideoSize(width: number, height: number) { 7876 // 当本地播放器解析出视频宽高时, 通知 ArkWeb 内核。 7877 this.handler.handleVideoSizeChanged(width, height); 7878 } 7879 onDurationChanged(duration: number) { 7880 // 本地播放器解析到了新的媒体时长, 通知 ArkWeb 内核。 7881 this.handler.handleDurationChanged(duration); 7882 } 7883 onError(error: webview.MediaError, errorMessage: string) { 7884 // 本地播放器出错了,通知 ArkWeb 内核。 7885 this.handler.handleError(error, errorMessage); 7886 } 7887 onNetworkStateChanged(state: webview.NetworkState) { 7888 // 本地播放器的网络状态发生了变化, 通知 ArkWeb 内核。 7889 this.handler.handleNetworkStateChanged(state); 7890 } 7891 onPlaybackRateChanged(playbackRate: number) { 7892 // 本地播放器的播放速率发生了变化, 通知 ArkWeb 内核。 7893 this.handler.handlePlaybackRateChanged(playbackRate); 7894 } 7895 onMutedChanged(muted: boolean) { 7896 // 本地播放器的静音状态发生了变化, 通知 ArkWeb 内核。 7897 this.handler.handleMutedChanged(muted); 7898 } 7899 7900 // ... 监听本地播放器其他的状态 ... 7901} 7902 7903class NativeMediaPlayerImpl implements webview.NativeMediaPlayerBridge { 7904 constructor(handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) { 7905 // 1. 创建一个本地播放器的状态监听。 7906 let listener: ActualNativeMediaPlayerListener = new ActualNativeMediaPlayerListener(handler); 7907 // 2. 创建一个本地播放器。 7908 // 3. 监听该本地播放器。 7909 // ... 7910 } 7911 7912 updateRect(x: number, y: number, width: number, height: number) { 7913 // <video> 标签的位置和大小发生了变化。 7914 // 根据该信息变化,作出相应的改变。 7915 } 7916 7917 play() { 7918 // 启动本地播放器播放。 7919 } 7920 7921 pause() { 7922 // 暂停本地播放器播放。 7923 } 7924 7925 seek(targetTime: number) { 7926 // 本地播放器跳转到指定的时间点。 7927 } 7928 7929 release() { 7930 // 销毁本地播放器。 7931 } 7932 7933 setVolume(volume: number) { 7934 // ArkWeb 内核要求调整本地播放器的音量。 7935 // 设置本地播放器的音量。 7936 } 7937 7938 setMuted(muted: boolean) { 7939 // 将本地播放器静音或取消静音。 7940 } 7941 7942 setPlaybackRate(playbackRate: number) { 7943 // 调整本地播放器的播放速度。 7944 } 7945 7946 enterFullscreen() { 7947 // 将本地播放器设置为全屏播放。 7948 } 7949 7950 exitFullscreen() { 7951 // 将本地播放器退出全屏播放。 7952 } 7953 7954 resumePlayer() { 7955 // 重新创建应用内播放器。 7956 // 恢复应用内播放器的状态信息。 7957 } 7958 7959 suspendPlayer(type: webview.SuspendType) { 7960 // 记录应用内播放器的状态信息。 7961 // 销毁应用内播放器。 7962 } 7963} 7964 7965@Entry 7966@Component 7967struct WebComponent { 7968 controller: webview.WebviewController = new webview.WebviewController() 7969 build() { 7970 Column() { 7971 Web({ src: 'www.example.com', controller: this.controller }) 7972 .enableNativeMediaPlayer({enable: true, shouldOverlay: false}) 7973 .onPageBegin((event) => { 7974 this.controller.onCreateNativeMediaPlayer((handler: webview.NativeMediaPlayerHandler, mediaInfo: webview.MediaInfo) => { 7975 if (!shouldHandle(mediaInfo)) { 7976 // 本地播放器不接管该媒体。 7977 // ArkWeb 内核将用自己的播放器来播放该媒体。 7978 return null; 7979 } 7980 let nativePlayer: webview.NativeMediaPlayerBridge = new NativeMediaPlayerImpl(handler, mediaInfo); 7981 return nativePlayer; 7982 }); 7983 }) 7984 } 7985 } 7986} 7987 7988// stub 7989function getVolume() { 7990 return 1; 7991} 7992function getCurrentPlayingTime() { 7993 return 1; 7994} 7995function getCurrentBufferedTime() { 7996 return 1; 7997} 7998function convertToSeconds(input: number) { 7999 return input; 8000} 8001function getLastReadyState() { 8002 return webview.ReadyState.HAVE_NOTHING; 8003} 8004function getCurrentReadyState() { 8005 return webview.ReadyState.HAVE_NOTHING; 8006} 8007function shouldHandle(mediaInfo: webview.MediaInfo) { 8008 return true; 8009} 8010``` 8011 8012### enableWholeWebPageDrawing<sup>12+</sup> 8013 8014static enableWholeWebPageDrawing(): void 8015 8016设置开启网页全量绘制能力。仅在web初始化时设置。 8017 8018**系统能力:** SystemCapability.Web.Webview.Core 8019 8020**示例:** 8021 8022```ts 8023// xxx.ets 8024import { webview } from '@kit.ArkWeb'; 8025import { BusinessError } from '@kit.BasicServicesKit'; 8026 8027@Entry 8028@Component 8029struct WebComponent { 8030 controller: webview.WebviewController = new webview.WebviewController(); 8031 8032 aboutToAppear(): void { 8033 try { 8034 webview.WebviewController.enableWholeWebPageDrawing(); 8035 } catch (error) { 8036 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8037 } 8038 } 8039 8040 build() { 8041 Column() { 8042 Web({ src: 'www.example.com', controller: this.controller }) 8043 } 8044 } 8045} 8046``` 8047 8048### webPageSnapshot<sup>12+</sup> 8049 8050webPageSnapshot(info: SnapshotInfo, callback: AsyncCallback\<SnapshotResult>): void 8051 8052获取网页全量绘制结果。 8053 8054**系统能力:** SystemCapability.Web.Webview.Core 8055 8056**参数:** 8057 8058| 参数名 | 类型 | 必填 | 说明 | 8059| ----------- | ------------- | ---- | ------------------------ | 8060| info | [SnapshotInfo](#snapshotinfo12)| 是 | 全量绘制结果入参。 | 8061| callback | [SnapshotResult](#snapshotresult12)| 是 | 全量绘制回调结果。 | 8062 8063**示例:** 8064 8065```ts 8066// xxx.ets 8067import { webview } from '@kit.ArkWeb'; 8068import { BusinessError } from '@kit.BasicServicesKit'; 8069 8070@Entry 8071@Component 8072struct WebComponent { 8073 controller: webview.WebviewController = new webview.WebviewController(); 8074 8075 build() { 8076 Column() { 8077 Button('webPageSnapshot') 8078 .onClick(() => { 8079 try { 8080 this.controller.webPageSnapshot({ id: "1234", size: { width: 100, height: 100 } }, (error, result) => { 8081 if (error) { 8082 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8083 return; 8084 } 8085 if (result) { 8086 console.info(`return value is:${result}`); 8087 //开发者可以根据需要处理返回结果 8088 } 8089 }); 8090 } catch (error) { 8091 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8092 } 8093 }) 8094 Web({ src: 'www.example.com', controller: this.controller }) 8095 } 8096 } 8097} 8098``` 8099 8100### injectOfflineResources<sup>12+</sup> 8101 8102injectOfflineResources(resourceMaps: Array\<[OfflineResourceMap](#offlineresourcemap12)\>): void 8103 8104将本地离线资源注入到内存缓存中,以提升页面首次启动速度。 8105内存缓存中的资源由内核自动管理,当注入的资源过多导致内存压力过大,内核自动释放未使用的资源,应避免注入大量资源到内存缓存中。 8106正常情况下,资源的有效期由提供的Cache-Control或Expires响应头控制其有效期,默认的有效期为86400秒,即1天。 8107资源的MIMEType通过提供的Content-Type响应头配置,Content-Type需符合标准,否则无法正常使用,MODULE_JS必须提供有效的MIMEType,其他类型可不提供。 8108以此方式注入的资源,仅支持通过HTML中的标签加载。如果业务网页中的script标签使用了crossorigin属性,则必须在接口的responseHeaders参数中设置Cross-Origin响应头的值为anoymous或use-credentials。 8109当调用`webview.WebviewController.SetRenderProcessMode(webview.RenderProcessMode.MULTIPLE)`接口后,应用会启动多渲染进程模式,此接口在此场景下不会生效。 8110 8111**系统能力:** SystemCapability.Web.Webview.Core 8112 8113**参数:** 8114 8115| 参数名 | 类型 | 必填 | 说明 | 8116| ------- | ------ | ---- | :-------------------- | 8117| resourceMaps | Array\<[OfflineResourceMap](#offlineresourcemap12)\> | 是 | 本地离线资源配置对象,单次调用最大支持注入30个资源,单个资源最大支持10Mb。 | 8118 8119**错误码:** 8120 8121以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8122 8123| 错误码ID | 错误信息 | 8124| -------- | ------------------------------------------------------------ | 8125| 401 | Invalid input parameter.Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8126| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8127| 17100002 | Invalid url. | 8128 8129**示例:** 8130 8131接口推荐配合动态组件使用,使用离线的Web组件用于将资源注入到内核的内存缓存中,并在适当的时机加载业务用Web组件使用这些资源。下方是代码示例: 81321. 首先,在EntryAbility中将UIContext存到localStorage中。 8133 8134 ```ts 8135 // EntryAbility.ets 8136 import { UIAbility } from '@kit.AbilityKit'; 8137 import { window } from '@kit.ArkUI'; 8138 8139 const localStorage: LocalStorage = new LocalStorage('uiContext'); 8140 8141 export default class EntryAbility extends UIAbility { 8142 storage: LocalStorage = localStorage; 8143 8144 onWindowStageCreate(windowStage: window.WindowStage) { 8145 windowStage.loadContent('pages/Index', this.storage, (err, data) => { 8146 if (err.code) { 8147 return; 8148 } 8149 8150 this.storage.setOrCreate<UIContext>("uiContext", windowStage.getMainWindowSync().getUIContext()); 8151 }); 8152 } 8153 } 8154 ``` 8155 81562. 编写动态组件所需基础代码。 8157 8158 ```ts 8159 // DynamicComponent.ets 8160 import { NodeController, BuilderNode, FrameNode, UIContext } from '@kit.ArkUI'; 8161 8162 export interface BuilderData { 8163 url: string; 8164 controller: WebviewController; 8165 } 8166 8167 const storage = LocalStorage.getShared(); 8168 8169 export class NodeControllerImpl extends NodeController { 8170 private rootNode: BuilderNode<BuilderData[]> | null = null; 8171 private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null; 8172 8173 constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) { 8174 super(); 8175 this.wrappedBuilder = wrappedBuilder; 8176 } 8177 8178 makeNode(): FrameNode | null { 8179 if (this.rootNode != null) { 8180 return this.rootNode.getFrameNode(); 8181 } 8182 return null; 8183 } 8184 8185 initWeb(url: string, controller: WebviewController) { 8186 if(this.rootNode != null) { 8187 return; 8188 } 8189 8190 const uiContext: UIContext = storage.get<UIContext>("uiContext") as UIContext; 8191 if (!uiContext) { 8192 return; 8193 } 8194 this.rootNode = new BuilderNode(uiContext); 8195 this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller }); 8196 } 8197 } 8198 8199 export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { 8200 const baseNode = new NodeControllerImpl(wrappedBuilder); 8201 baseNode.initWeb(data.url, data.controller); 8202 return baseNode; 8203 } 8204 ``` 8205 82063. 编写用于注入资源的组件代码,本例中的本地资源内容通过文件读取接口读取rawfile目录下的本地文件。 8207 8208 <!--code_no_check--> 8209 ```ts 8210 // InjectWebview.ets 8211 import { webview } from '@kit.ArkWeb'; 8212 import { resourceConfigs } from "./Resource"; 8213 import { BuilderData } from "./DynamicComponent"; 8214 8215 @Builder 8216 function WebBuilder(data: BuilderData) { 8217 Web({ src: data.url, controller: data.controller }) 8218 .onControllerAttached(async () => { 8219 try { 8220 data.controller.injectOfflineResources(await getData ()); 8221 } catch (err) { 8222 console.error("error: " + err.code + " " + err.message); 8223 } 8224 }) 8225 .fileAccess(true) 8226 } 8227 8228 export const injectWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8229 8230 export async function getData() { 8231 const resourceMapArr: Array<webview.OfflineResourceMap> = []; 8232 8233 // 读取配置,从rawfile目录中读取文件内容 8234 for (let config of resourceConfigs) { 8235 let buf: Uint8Array = new Uint8Array(0); 8236 if (config.localPath) { 8237 buf = await readRawFile(config.localPath); 8238 } 8239 8240 resourceMapArr.push({ 8241 urlList: config.urlList, 8242 resource: buf, 8243 responseHeaders: config.responseHeaders, 8244 type: config.type, 8245 }) 8246 } 8247 8248 return resourceMapArr; 8249 } 8250 8251 export async function readRawFile(url: string) { 8252 try { 8253 return await getContext().resourceManager.getRawFileContent(url); 8254 } catch (err) { 8255 return new Uint8Array(0); 8256 } 8257 } 8258 ``` 8259 82604. 编写业务用组件代码。 8261 8262 <!--code_no_check--> 8263 ```ts 8264 // BusinessWebview.ets 8265 import { BuilderData } from "./DynamicComponent"; 8266 8267 @Builder 8268 function WebBuilder(data: BuilderData) { 8269 // 此处组件可根据业务需要自行扩展 8270 Web({ src: data.url, controller: data.controller }) 8271 .cacheMode(CacheMode.Default) 8272 } 8273 8274 export const businessWebview = wrapBuilder<BuilderData[]>(WebBuilder); 8275 ``` 8276 82775. 编写资源配置信息。 8278 8279 ```ts 8280 // Resource.ets 8281 import { webview } from '@kit.ArkWeb'; 8282 8283 export interface ResourceConfig { 8284 urlList: Array<string>, 8285 type: webview.OfflineResourceType, 8286 responseHeaders: Array<Header>, 8287 localPath: string, // 本地资源存放在rawfile目录下的路径 8288 } 8289 8290 export const resourceConfigs: Array<ResourceConfig> = [ 8291 { 8292 localPath: "example.png", 8293 urlList: [ 8294 "https://www.example.com/", 8295 "https://www.example.com/path1/example.png", 8296 "https://www.example.com/path2/example.png", 8297 ], 8298 type: webview.OfflineResourceType.IMAGE, 8299 responseHeaders: [ 8300 { headerKey: "Cache-Control", headerValue: "max-age=1000" }, 8301 { headerKey: "Content-Type", headerValue: "image/png" }, 8302 ] 8303 }, 8304 { 8305 localPath: "example.js", 8306 urlList: [ // 仅提供一个url,这个url既作为资源的源,也作为资源的网络请求地址 8307 "https://www.example.com/example.js", 8308 ], 8309 type: webview.OfflineResourceType.CLASSIC_JS, 8310 responseHeaders: [ 8311 // 以<script crossorigin="anoymous" />方式使用,提供额外的响应头 8312 { headerKey: "Cross-Origin", headerValue:"anonymous" } 8313 ] 8314 }, 8315 ]; 8316 ``` 8317 83186. 在页面中使用。 8319 <!--code_no_check--> 8320 ```ts 8321 // Index.ets 8322 import { webview } from '@kit.ArkWeb'; 8323 import { NodeController } from '@kit.ArkUI'; 8324 import { createNode } from "./DynamicComponent" 8325 import { injectWebview } from "./InjectWebview" 8326 import { businessWebview } from "./BusinessWebview" 8327 8328 @Entry 8329 @Component 8330 struct Index { 8331 @State injectNode: NodeController | undefined = undefined; 8332 injectController: webview.WebviewController = new webview.WebviewController(); 8333 8334 @State businessNode: NodeController | undefined = undefined; 8335 businessController: webview.WebviewController = new webview.WebviewController(); 8336 8337 aboutToAppear(): void { 8338 // 初始化用于注入本地资源的Web组件, 提供一个空的html页面作为url即可 8339 this.injectNode = createNode(injectWebview, 8340 { url: "https://www.example.com/empty.html", controller: this.injectController}); 8341 } 8342 8343 build() { 8344 Column() { 8345 // 在适当的时机加载业务用Web组件,本例以Button点击触发为例 8346 Button("加载页面") 8347 .onClick(() => { 8348 this.businessNode = createNode(businessWebview, { 8349 url: "https://www.example.com/business.html", 8350 controller: this.businessController 8351 }); 8352 }) 8353 // 用于业务的Web组件 8354 NodeContainer(this.businessNode); 8355 } 8356 } 8357 } 8358 ``` 8359 83607. 加载的HTML网页示例。 8361 8362 ```HTML 8363 <!DOCTYPE html> 8364 <html lang="en"> 8365 <head></head> 8366 <body> 8367 <img src="https://www.example.com/path1/request.png" /> 8368 <img src="https://www.example.com/path2/request.png" /> 8369 <script src="https://www.example.com/example.js" crossorigin="anonymous"></script> 8370 </body> 8371 </html> 8372 ``` 8373 8374### setHostIP<sup>12+</sup> 8375 8376static setHostIP(hostName: string, address: string, aliveTime: number): void 8377 8378设置主机域名解析后的IP地址。 8379 8380**系统能力:** SystemCapability.Web.Webview.Core 8381 8382**参数:** 8383 8384| 参数名 | 类型 | 必填 | 说明 | 8385| --------- | -------- | ---- | ------------------------------------ | 8386| hostName | string | 是 | 要添加DNS记录的主机域名。 | 8387| address | string | 是 | 主机域名解析地址(支持IPv4,IPv6)。 | 8388| aliveTime | number | 是 | 缓存有效时间(秒)。 | 8389 8390**错误码:** 8391 8392以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8393 8394| 错误码ID | 错误信息 | 8395| -------- | ------------------------ | 8396| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8397 8398**示例:** 8399 8400请参考[clearHostIP](#clearhostip12)。 8401 8402### clearHostIP<sup>12+</sup> 8403 8404static clearHostIP(hostName: string): void 8405 8406清除指定主机域名解析后的IP地址。 8407 8408**系统能力:** SystemCapability.Web.Webview.Core 8409 8410**参数:** 8411 8412| 参数名 | 类型 | 必填 | 说明 | 8413| -------- | -------- | ---- | ------------------------- | 8414| hostName | string | 是 | 要清除DNS记录的主机域名。 | 8415 8416**错误码:** 8417 8418以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8419 8420| 错误码ID | 错误信息 | 8421| -------- | ------------------------ | 8422| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Incorrect parameter types.3. Parameter verification failed. | 8423 8424**示例:** 8425 8426```ts 8427// xxx.ets 8428import { webview } from '@kit.ArkWeb'; 8429import { BusinessError } from '@kit.BasicServicesKit'; 8430 8431@Entry 8432@Component 8433struct WebComponent { 8434 controller: webview.WebviewController = new webview.WebviewController(); 8435 8436 build() { 8437 Column() { 8438 // url加载前设置生效. 8439 Button('setHostIP') 8440 .onClick(() => { 8441 try { 8442 webview.WebviewController.setHostIP('www.example.com', '127.0.0.1', 30); 8443 } catch (error) { 8444 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8445 } 8446 }) 8447 Button('clearHostIP') 8448 .onClick(() => { 8449 try { 8450 webview.WebviewController.clearHostIP('www.example.com'); 8451 } catch (error) { 8452 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8453 } 8454 }) 8455 Web({ src: 'www.example.com', controller: this.controller }) 8456 } 8457 } 8458} 8459``` 8460 8461### getSurfaceId<sup>12+</sup> 8462 8463getSurfaceId(): string 8464 8465获取ArkWeb对应Surface的ID,仅Web组件渲染模式是ASYNC_RENDER时有效。getSurfaceId需要在Web组件初始化之后才能获取到值。 8466 8467**系统能力:** SystemCapability.Web.Webview.Core 8468 8469**返回值:** 8470 8471| 类型 | 说明 | 8472| ------ | ------------------- | 8473| string | ArkWeb持有Surface的ID。 | 8474 8475**示例:** 8476 8477```ts 8478// xxx.ets 8479import { webview } from '@kit.ArkWeb'; 8480import { image } from '@kit.ImageKit'; 8481import { BusinessError } from '@kit.BasicServicesKit'; 8482 8483@Entry 8484@Component 8485struct Example{ 8486 controller: webview.WebviewController = new webview.WebviewController(); 8487 8488 @State imagePixelMap: image.PixelMap | undefined = undefined; 8489 8490 build(){ 8491 Column(){ 8492 Button("截图") 8493 .onClick(()=>{ 8494 try { 8495 let surfaceId = this.controller.getSurfaceId(); 8496 console.log("surfaceId: " + surfaceId); 8497 if(surfaceId.length != 0) { 8498 let region:image.Region = { x: 0, y: 0, size: { height: 800, width: 1000}} 8499 this.imagePixelMap = image.createPixelMapFromSurfaceSync(surfaceId, region) 8500 } 8501 } catch (error) { 8502 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8503 } 8504 }) 8505 Image(this.imagePixelMap) 8506 .height(100) 8507 Web({src: 'www.example.com', controller: this.controller}) 8508 } 8509 } 8510} 8511``` 8512 8513### setUrlTrustList<sup>12+</sup> 8514 8515setUrlTrustList(urlTrustList: string): void 8516 8517设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。 8518 8519**系统能力:** SystemCapability.Web.Webview.Core 8520 8521**参数:** 8522 8523| 参数名 | 类型 | 必填 | 说明 | 8524| ------- | ------ | ---- | :-------------------- | 8525| 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/>} | 8526 8527**白名单json格式参数** 8528| 字段 | 参数类型 | 必填 | 参数描述 | 8529| -------- | -------- | ---- | ------------------------- | 8530| scheme | string | 否 | 可选参数,不设置即不匹配该项,支持协议:http、https。 | 8531| host | string | 是 | 必选参数,精准匹配,即url的host字段和规则字段完全一致才会放行,可允许同一host多条规则同时生效。 | 8532| port | number | 否 | 可选字段,不设置即不匹配该项。 | 8533| path | string | 否 | 可选字段,不设置即不匹配该项,匹配方式为前缀匹配,以"pathA/pathB/pathC"为例:pathA/pathB/pathC三级目录下全部允许访问,其中pathC必须是完整的目录名或者文件名,不允许部分匹配。| 8534 8535**错误码:** 8536 8537以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8538 8539| 错误码ID | 错误信息 | 8540| -------- | ------------------------------------------------------------ | 8541| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified.2. Parameter string is too long.3. Parameter verification failed. | 8542| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8543 8544**示例:** 8545 ```ts 8546 // xxx.ets 8547 import { webview } from '@kit.ArkWeb'; 8548 import { BusinessError } from '@kit.BasicServicesKit'; 8549 8550 @Entry 8551 @Component 8552 struct WebComponent { 8553 controller: webview.WebviewController = new webview.WebviewController(); 8554 urltrustList: string = "{\"UrlPermissionList\":[{\"scheme\":\"http\", \"host\":\"trust.example.com\", \"port\":80, \"path\":\"test\"}]}" 8555 8556 build() { 8557 Column() { 8558 Button('Setting the trustlist') 8559 .onClick(() => { 8560 try { 8561 // 设置白名单,只允许访问trust网页 8562 this.controller.setUrlTrustList(this.urltrustList); 8563 } catch (error) { 8564 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8565 } 8566 }) 8567 Button('Cancel the trustlist.') 8568 .onClick(() => { 8569 try { 8570 // 白名单传入空字符串表示关闭白名单机制,所有url都可以允许访问 8571 this.controller.setUrlTrustList(""); 8572 } catch (error) { 8573 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8574 } 8575 }) 8576 Button('Access the trust web') 8577 .onClick(() => { 8578 try { 8579 // 白名单生效,可以访问trust网页 8580 this.controller.loadUrl('http://trust.example.com/test'); 8581 } catch (error) { 8582 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8583 } 8584 }) 8585 Button('Access the untrust web') 8586 .onClick(() => { 8587 try { 8588 // 白名单生效,此时不可以访问untrust网页,并弹出错误页 8589 this.controller.loadUrl('http://untrust.example.com/test'); 8590 } catch (error) { 8591 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8592 } 8593 }) 8594 Web({ src: 'http://untrust.example.com/test', controller: this.controller }).onControllerAttached(() => { 8595 try { 8596 // onControllerAttached回调中设置白名单,可以保证在加载url之前生效,此时不可以访问untrust网页,并弹出错误页 8597 this.controller.setUrlTrustList(this.urltrustList); 8598 } catch (error) { 8599 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8600 } 8601 }) 8602 } 8603 } 8604 } 8605 ``` 8606 8607### setPathAllowingUniversalAccess<sup>12+</sup> 8608 8609setPathAllowingUniversalAccess(pathList: Array\<string\>): void 8610 8611设置一个路径列表,当file协议访问该路径列表中的资源时,允许跨域访问本地文件。此外,当设置了路径列表时,file协议仅允许访问路径列表中的资源([fileAccess](ts-basic-components-web.md#fileaccess)的行为将会被此接口行为覆盖)。路径列表中的路径必须满足以下路径格式之一: 8612 86131.应用文件目录的子目录(应用文件目录通过Ability Kit中的[Context.filesDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8614 8615* /data/storage/el2/base/files/example 8616* /data/storage/el2/base/haps/entry/files/example 8617 86182.应用资源目录及其子目录(应用资源目录通过Ability Kit中的[Context.resourceDir](../apis-ability-kit/js-apis-inner-application-context.md#context)获取),例如: 8619 8620* /data/storage/el1/bundle/entry/resource/resfile 8621* /data/storage/el1/bundle/entry/resource/resfile/example 8622 8623当路径列表中有其中一个路径不满足以上条件之一,则会抛出异常码401,并且设置路径列表失败。当设置的路径列表为空,则file协议可访问范围以[fileAccess](ts-basic-components-web.md#fileaccess)的行为为准。 8624 8625**系统能力:** SystemCapability.Web.Webview.Core 8626 8627**参数:** 8628 8629| 参数名 | 类型 | 必填 | 说明 | 8630| -------- | -------- | ---- | ------------------------- | 8631| pathList | Array\<string\> | 是 | 路径列表 | 8632 8633**错误码:** 8634 8635以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8636 8637| 错误码ID | 错误信息 | 8638| -------- | ------------------------ | 8639| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 8640| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8641 8642**示例:** 8643 8644```ts 8645// xxx.ets 8646import { webview } from '@kit.ArkWeb'; 8647import { BusinessError } from '@kit.BasicServicesKit'; 8648 8649@Entry 8650@Component 8651struct WebComponent { 8652 controller: WebviewController = new webview.WebviewController(); 8653 8654 build() { 8655 Row() { 8656 Web({ src: "", controller: this.controller }) 8657 .onControllerAttached(() => { 8658 try { 8659 // 设置允许可以跨域访问的路径列表 8660 this.controller.setPathAllowingUniversalAccess([ 8661 getContext().resourceDir, 8662 getContext().filesDir + "/example" 8663 ]) 8664 this.controller.loadUrl("file://" + getContext().resourceDir + "/index.html") 8665 } catch (error) { 8666 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8667 } 8668 }) 8669 .javaScriptAccess(true) 8670 .fileAccess(true) 8671 .domStorageAccess(true) 8672 } 8673 } 8674} 8675 8676``` 8677 8678加载的html文件,位于应用资源目录resource/rawfile/index.html。 8679```html 8680<!-- index.html --> 8681<!DOCTYPE html> 8682<html lang="en"> 8683 8684<head> 8685 <meta charset="utf-8"> 8686 <title>Demo</title> 8687 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover"> 8688 <script> 8689 function getFile() { 8690 var file = "file:///data/storage/el1/bundle/entry/resources/resfile/js/script.js"; 8691 var xmlHttpReq = new XMLHttpRequest(); 8692 xmlHttpReq.onreadystatechange = function(){ 8693 console.log("readyState:" + xmlHttpReq.readyState); 8694 console.log("status:" + xmlHttpReq.status); 8695 if(xmlHttpReq.readyState == 4){ 8696 if (xmlHttpReq.status == 200) { 8697 // 如果ets侧正确设置路径列表,则此处能正常获取资源 8698 const element = document.getElementById('text'); 8699 element.textContent = "load " + file + " success"; 8700 } else { 8701 // 如果ets侧不设置路径列表,则此处会触发CORS跨域检查错误 8702 const element = document.getElementById('text'); 8703 element.textContent = "load " + file + " failed"; 8704 } 8705 } 8706 } 8707 xmlHttpReq.open("GET", file); 8708 xmlHttpReq.send(null); 8709 } 8710 8711 </script> 8712</head> 8713 8714<body> 8715<div class="page"> 8716 <button id="example" onclick="getFile()">stealFile</button> 8717</div> 8718<div id="text"></div> 8719</body> 8720 8721</html> 8722``` 8723 8724html中使用file协议通过XMLHttpRequest跨域访问本地js文件,js文件位于resource/rawfile/js/script.js。 8725<!--code_no_check--> 8726```javascript 8727const body = document.body; 8728const element = document.createElement('div'); 8729element.textContent = 'success'; 8730body.appendChild(element); 8731``` 8732 8733### enableBackForwardCache<sup>12+</sup> 8734 8735static enableBackForwardCache(features: BackForwardCacheSupportedFeatures): void 8736 8737开启Web组件前进后退缓存功能,通过参数指定是否允许使用特定的页面进入前进后退缓存。 8738 8739需要在[initializeWebEngine()](#initializewebengine)初始化内核之前调用。 8740 8741**系统能力:** SystemCapability.Web.Webview.Core 8742 8743**参数:** 8744 8745| 参数名 | 类型 | 必填 | 说明 | 8746| ---------------| ------- | ---- | ------------- | 8747| features | [BackForwardCacheSupportedFeatures](#backforwardcachesupportedfeatures12) | 是 | 允许使用特定的页面进入前进后退缓存中。| 8748 8749**示例:** 8750 8751```ts 8752// EntryAbility.ets 8753import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 8754import { hilog } from '@kit.PerformanceAnalysisKit'; 8755import { window } from '@kit.ArkUI'; 8756import { webview } from '@kit.ArkWeb'; 8757 8758export default class EntryAbility extends UIAbility { 8759 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 8760 let features = new webview.BackForwardCacheSupportedFeatures(); 8761 features.nativeEmbed = true; 8762 features.mediaTakeOver = true; 8763 // 如果一个页面同时使用了同层渲染和视频托管的能力,需要 nativeEmbed 和 8764 // mediaTakeOver 同时设置为 true,该页面才可以进入前进后退缓存中。 8765 webview.WebviewController.enableBackForwardCache(features); 8766 webview.WebviewController.initializeWebEngine(); 8767 AppStorage.setOrCreate("abilityWant", want); 8768 } 8769} 8770``` 8771 8772### setBackForwardCacheOptions<sup>12+</sup> 8773 8774setBackForwardCacheOptions(options: BackForwardCacheOptions): void 8775 8776可以设置Web组件中前进后退缓存的相关选项。 8777 8778**系统能力:** SystemCapability.Web.Webview.Core 8779 8780**参数:** 8781 8782| 参数名 | 类型 | 必填 | 说明 | 8783| ---------------| ------- | ---- | ------------- | 8784| options | [BackForwardCacheOptions](#backforwardcacheoptions12) | 是 | 用来控制Web组件前进后退缓存相关选项。| 8785 8786**错误码:** 8787 8788以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8789 8790| 错误码ID | 错误信息 | 8791| -------- | ------------------------------------------------------------ | 8792| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8793 8794**示例:** 8795 8796```ts 8797// xxx.ts 8798import { webview } from '@kit.ArkWeb'; 8799 8800@Entry 8801@Component 8802struct Index { 8803 controller: webview.WebviewController = new webview.WebviewController(); 8804 8805 build() { 8806 Column() { 8807 Row() { 8808 Button("Add options").onClick((event: ClickEvent) => { 8809 let options = new webview.BackForwardCacheOptions(); 8810 options.size = 3; 8811 options.timeToLive = 10; 8812 this.controller.setBackForwardCacheOptions(options); 8813 }) 8814 Button("Backward").onClick((event: ClickEvent) => { 8815 this.controller.backward(); 8816 }) 8817 Button("Forward").onClick((event: ClickEvent) => { 8818 this.controller.forward(); 8819 }) 8820 } 8821 Web({ src: "https://www.example.com", controller: this.controller }) 8822 } 8823 .height('100%') 8824 .width('100%') 8825 } 8826} 8827``` 8828 8829### trimMemoryByPressureLevel<sup>14+</sup> 8830 8831trimMemoryByPressureLevel(level: PressureLevel): void 8832 8833根据指定的内存压力等级,主动清理Web组件占用的缓存。 8834 8835**系统能力:** SystemCapability.Web.Webview.Core 8836 8837**参数:** 8838 8839| 参数名 | 类型 | 必填 | 说明 | 8840| ------- | ------ | ---- | :-------------------- | 8841| level | [PressureLevel](#pressurelevel14) | 是 | 需要清理内存的内存等级。| 8842 8843**错误码:** 8844 8845以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8846 8847| 错误码ID | 错误信息 | 8848| -------- | ------------------------------------------------------------ | 8849| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Parameter string is too long. 3.Parameter verification failed. | 8850 8851**示例:** 8852```ts 8853// xxx.ets 8854import { webview } from '@kit.ArkWeb'; 8855import { BusinessError } from '@kit.BasicServicesKit'; 8856 8857@Entry 8858@Component 8859struct WebComponent { 8860 controller: WebviewController = new webview.WebviewController(); 8861 build() { 8862 Column() { 8863 Row() { 8864 Button('trim_Memory') 8865 .onClick(() => { 8866 try { 8867 // 设置当前内存压力等级为适中,释放少量内存 8868 webview.WebviewController.trimMemoryByPressureLevel( 8869 webview.PressureLevel.MEMORY_PRESSURE_LEVEL_MODERATE); 8870 } catch (error) { 8871 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8872 } 8873 }) 8874 }.height('10%') 8875 Web({ src: 'www.example.com', controller: this.controller }) 8876 } 8877 } 8878} 8879``` 8880 8881### createPdf<sup>14+</sup> 8882 8883createPdf(configuration: PdfConfiguration, callback: AsyncCallback\<PdfData\>): void 8884 8885异步callback方式获取指定网页的数据流。 8886 8887**系统能力:** SystemCapability.Web.Webview.Core 8888 8889**参数:** 8890 8891| 参数名 | 类型 | 必填 | 说明 | 8892| ------------- | --------------------------------------- | ---- | ----------------------- | 8893| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 8894| callback | AsyncCallback<[PdfData](#pdfdata14)> | 是 | 回调返回网页PDF数据流。 | 8895 8896**错误码:** 8897 8898以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8899 8900| 错误码ID | 错误信息 | 8901| -------- | ------------------------------------------------------------ | 8902| 401 | Invalid input parameter. | 8903| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8904 8905**示例**: 8906 8907```ts 8908import { fileIo as fs } from '@kit.CoreFileKit'; 8909import { webview } from '@kit.ArkWeb'; 8910import { BusinessError } from '@kit.BasicServicesKit'; 8911import { common } from '@kit.AbilityKit'; 8912 8913@Entry 8914@Component 8915struct Index { 8916 controller: webview.WebviewController = new webview.WebviewController(); 8917 pdfConfig: webview.PdfConfiguration = { 8918 width: 8.27, 8919 height: 11.69, 8920 marginTop: 0, 8921 marginBottom: 0, 8922 marginRight: 0, 8923 marginLeft: 0, 8924 shouldPrintBackground: true 8925 } 8926 8927 build() { 8928 Column() { 8929 Button('SavePDF') 8930 .onClick(() => { 8931 this.controller.createPdf( 8932 this.pdfConfig, 8933 (error, result: webview.PdfData) => { 8934 try { 8935 // 获取组件上下文 8936 let context = getContext(this) as common.UIAbilityContext; 8937 // 获取沙箱路径,设置pdf文件名 8938 let filePath = context.filesDir + "/test.pdf"; 8939 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 8940 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 8941 console.info("createPDF write data to file succeed and size is:" + writeLen); 8942 }).catch((err: BusinessError) => { 8943 console.error("createPDF write data to file failed with error message: " + err.message + 8944 ", error code: " + err.code); 8945 }).finally(() => { 8946 fs.closeSync(file); 8947 }); 8948 } catch (resError) { 8949 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 8950 } 8951 }); 8952 }) 8953 Web({ src: "www.example.com", controller: this.controller }) 8954 } 8955 } 8956} 8957``` 8958 8959### createPdf<sup>14+</sup> 8960 8961createPdf(configuration: PdfConfiguration): Promise\<PdfData\> 8962 8963以Promise方式异步获取指定网页的数据流。 8964 8965**系统能力:** SystemCapability.Web.Webview.Core 8966 8967**参数:** 8968 8969| 参数名 | 类型 | 必填 | 说明 | 8970| ------------- | --------------------------------------- | ---- | ----------------- | 8971| configuration | [PdfConfiguration](#pdfconfiguration14) | 是 | 生成PDF所需参数。 | 8972 8973**返回值:** 8974 8975| 类型 | 说明 | 8976| ------------------------------ | ----------------------------- | 8977| Promise<[PdfData](#pdfdata14)> | Promise实例,返回网页数据流。 | 8978 8979**错误码:** 8980 8981以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 8982 8983| 错误码ID | 错误信息 | 8984| -------- | ------------------------------------------------------------ | 8985| 401 | Invalid input parameter. | 8986| 17100001 | Init error. The WebviewController must be associated with a Web component. | 8987 8988**示例**: 8989 8990```ts 8991import { fileIo as fs } from '@kit.CoreFileKit'; 8992import { webview } from '@kit.ArkWeb'; 8993import { BusinessError } from '@kit.BasicServicesKit'; 8994import { common } from '@kit.AbilityKit'; 8995 8996@Entry 8997@Component 8998struct Index { 8999 controller: webview.WebviewController = new webview.WebviewController(); 9000 pdfConfig: webview.PdfConfiguration = { 9001 width: 8.27, 9002 height: 11.69, 9003 marginTop: 0, 9004 marginBottom: 0, 9005 marginRight: 0, 9006 marginLeft: 0, 9007 shouldPrintBackground: true 9008 } 9009 9010 build() { 9011 Column() { 9012 Button('SavePDF') 9013 .onClick(() => { 9014 this.controller.createPdf(this.pdfConfig) 9015 .then((result: webview.PdfData) => { 9016 try { 9017 // 获取组件上下文 9018 let context = getContext(this) as common.UIAbilityContext; 9019 // 获取沙箱路径,设置pdf文件名 9020 let filePath = context.filesDir + "/test.pdf"; 9021 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 9022 fs.write(file.fd, result.pdfArrayBuffer().buffer).then((writeLen: number) => { 9023 console.info("createPDF write data to file succeed and size is:" + writeLen); 9024 }).catch((err: BusinessError) => { 9025 console.error("createPDF write data to file failed with error message: " + err.message + 9026 ", error code: " + err.code); 9027 }).finally(() => { 9028 fs.closeSync(file); 9029 }); 9030 } catch (resError) { 9031 console.error(`ErrorCode: ${(resError as BusinessError).code}, Message: ${(resError as BusinessError).message}`); 9032 } 9033 }) 9034 }) 9035 Web({ src: "www.example.com", controller: this.controller }) 9036 } 9037 } 9038} 9039``` 9040 9041### getScrollOffset<sup>13+</sup> 9042 9043getScrollOffset(): ScrollOffset 9044 9045获取网页当前的滚动偏移量。 9046 9047**系统能力:** SystemCapability.Web.Webview.Core 9048 9049**返回值** 9050 9051| 类型 | 说明 | 9052| :------------------------------ | ---------------------- | 9053| [ScrollOffset](#scrolloffset13) | 网页当前的滚动偏移量。 | 9054 9055**示例:** 9056 9057```ts 9058import { webview } from '@kit.ArkWeb'; 9059import { componentUtils } from '@kit.ArkUI'; 9060 9061@Entry 9062@Component 9063struct WebComponent { 9064 @State testTitle: string = 'webScroll' 9065 controller: webview.WebviewController = new webview.WebviewController(); 9066 @State controllerX: number =-100; 9067 @State controllerY: number =-100; 9068 @State mode: OverScrollMode = OverScrollMode.ALWAYS; 9069 9070 build() { 9071 Column() { 9072 Row() { 9073 Text(this.testTitle) 9074 .fontSize(30) 9075 .fontWeight(FontWeight.Bold) 9076 .margin(5) 9077 } 9078 Column() { 9079 Text(`controllerX: ${this.controllerX}, controllerY: ${this.controllerY}`) 9080 } 9081 .margin({ top: 10, bottom: 10 }) 9082 Web({ src: $rawfile("scrollByTo.html"), controller: this.controller }) 9083 .key("web_01") 9084 .overScrollMode(this.mode) 9085 .onTouch((event) => { 9086 this.controllerX = this.controller.getScrollOffset().x; 9087 this.controllerY = this.controller.getScrollOffset().y; 9088 let componentInfo = componentUtils.getRectangleById("web_01"); 9089 let webHeight = px2vp(componentInfo.size.height); 9090 let pageHeight = this.controller.getPageHeight(); 9091 if (this.controllerY < 0) { 9092 // case1:网页向下过滚动时,可直接使用ScrollOffset.y 9093 console.log(`get downwards overscroll offsetY = ${this.controllerY}`); 9094 } else if ((this.controllerY != 0) && (this.controllerY > (pageHeight - webHeight))) { 9095 // case2:网页向上过滚动时,需计算出网页下边界与Web组件下边界的偏移量 9096 console.log(`get upwards overscroll offsetY = ${this.controllerY - (pageHeight >= webHeight ? (pageHeight - webHeight) : 0)}`); 9097 } else { 9098 // case3:网页未发生过滚动时,可直接使用ScrollOffset.y 9099 console.log(`get scroll offsetY = ${this.controllerY}`); 9100 } 9101 }) 9102 .height(600) 9103 } 9104 .width('100%') 9105 .height('100%') 9106 } 9107} 9108``` 9109 9110## WebCookieManager 9111 9112通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有Web组件共享一个WebCookieManager实例。 9113 9114### getCookie<sup>(deprecated)</sup> 9115 9116static getCookie(url: string): string 9117 9118获取指定url对应cookie的值。 9119 9120> **说明:** 9121> 9122> 从API version9开始支持,从API version 11开始废弃。建议使用[fetchCookieSync](#fetchcookiesync11)替代 9123 9124**系统能力:** SystemCapability.Web.Webview.Core 9125 9126**参数:** 9127 9128| 参数名 | 类型 | 必填 | 说明 | 9129| ------ | ------ | ---- | :------------------------ | 9130| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9131 9132**返回值:** 9133 9134| 类型 | 说明 | 9135| ------ | ------------------------- | 9136| string | 指定url对应的cookie的值。 | 9137 9138**错误码:** 9139 9140以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9141 9142| 错误码ID | 错误信息 | 9143| -------- | ------------------------------------------------------ | 9144| 17100002 | Invalid url. | 9145| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9146 9147**示例:** 9148 9149```ts 9150// xxx.ets 9151import { webview } from '@kit.ArkWeb'; 9152import { BusinessError } from '@kit.BasicServicesKit'; 9153 9154@Entry 9155@Component 9156struct WebComponent { 9157 controller: webview.WebviewController = new webview.WebviewController(); 9158 9159 build() { 9160 Column() { 9161 Button('getCookie') 9162 .onClick(() => { 9163 try { 9164 let value = webview.WebCookieManager.getCookie('https://www.example.com'); 9165 console.log("value: " + value); 9166 } catch (error) { 9167 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9168 } 9169 }) 9170 Web({ src: 'www.example.com', controller: this.controller }) 9171 } 9172 } 9173} 9174``` 9175 9176### fetchCookieSync<sup>11+</sup> 9177 9178static fetchCookieSync(url: string, incognito?: boolean): string 9179 9180获取指定url对应cookie的值。 9181 9182> **说明:** 9183> 9184> 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。 9185> 9186> 为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。 9187> 9188> fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。 9189 9190**系统能力:** SystemCapability.Web.Webview.Core 9191 9192**参数:** 9193 9194| 参数名 | 类型 | 必填 | 说明 | 9195| ------ | ------ | ---- | :------------------------ | 9196| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9197| incognito | boolean | 否 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9198 9199**返回值:** 9200 9201| 类型 | 说明 | 9202| ------ | ------------------------- | 9203| string | 指定url对应的cookie的值。 | 9204 9205**错误码:** 9206 9207以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9208 9209| 错误码ID | 错误信息 | 9210| -------- | ------------------------------------------------------ | 9211| 17100002 | Invalid url. | 9212| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9213 9214**示例:** 9215 9216```ts 9217// xxx.ets 9218import { webview } from '@kit.ArkWeb'; 9219import { BusinessError } from '@kit.BasicServicesKit'; 9220 9221@Entry 9222@Component 9223struct WebComponent { 9224 controller: webview.WebviewController = new webview.WebviewController(); 9225 9226 build() { 9227 Column() { 9228 Button('fetchCookieSync') 9229 .onClick(() => { 9230 try { 9231 let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com'); 9232 console.log("fetchCookieSync cookie = " + value); 9233 } catch (error) { 9234 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9235 } 9236 }) 9237 Web({ src: 'www.example.com', controller: this.controller }) 9238 } 9239 } 9240} 9241``` 9242 9243### fetchCookie<sup>11+</sup> 9244 9245static fetchCookie(url: string, callback: AsyncCallback\<string>): void 9246 9247异步callback方式获取指定url对应cookie的值。 9248 9249**系统能力:** SystemCapability.Web.Webview.Core 9250 9251**参数:** 9252 9253| 参数名 | 类型 | 必填 | 说明 | 9254| ------ | ------ | ---- | :------------------------ | 9255| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9256| callback | AsyncCallback\<string> | 是 | callback回调,用于获取cookie | 9257 9258**错误码:** 9259 9260以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9261 9262| 错误码ID | 错误信息 | 9263| -------- | ------------------------------------------------------ | 9264| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9265| 17100002 | Invalid url. | 9266 9267**示例:** 9268 9269```ts 9270// xxx.ets 9271import { webview } from '@kit.ArkWeb'; 9272import { BusinessError } from '@kit.BasicServicesKit'; 9273 9274@Entry 9275@Component 9276struct WebComponent { 9277 controller: webview.WebviewController = new webview.WebviewController(); 9278 9279 build() { 9280 Column() { 9281 Button('fetchCookie') 9282 .onClick(() => { 9283 try { 9284 webview.WebCookieManager.fetchCookie('https://www.example.com', (error, cookie) => { 9285 if (error) { 9286 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9287 return; 9288 } 9289 if (cookie) { 9290 console.log('fetchCookie cookie = ' + cookie); 9291 } 9292 }) 9293 } catch (error) { 9294 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9295 } 9296 }) 9297 Web({ src: 'www.example.com', controller: this.controller }) 9298 } 9299 } 9300} 9301``` 9302 9303### fetchCookie<sup>11+</sup> 9304 9305static fetchCookie(url: string): Promise\<string> 9306 9307以Promise方式异步获取指定url对应cookie的值。 9308 9309**系统能力:** SystemCapability.Web.Webview.Core 9310 9311**参数:** 9312 9313| 参数名 | 类型 | 必填 | 说明 | 9314| ------ | ------ | ---- | :------------------------ | 9315| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9316 9317**返回值:** 9318 9319| 类型 | 说明 | 9320| ------ | ------------------------- | 9321| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9322 9323**错误码:** 9324 9325以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9326 9327| 错误码ID | 错误信息 | 9328| -------- | ------------------------------------------------------ | 9329| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9330| 17100002 | Invalid url. | 9331 9332**示例:** 9333 9334```ts 9335// xxx.ets 9336import { webview } from '@kit.ArkWeb'; 9337import { BusinessError } from '@kit.BasicServicesKit'; 9338 9339@Entry 9340@Component 9341struct WebComponent { 9342 controller: webview.WebviewController = new webview.WebviewController(); 9343 9344 build() { 9345 Column() { 9346 Button('fetchCookie') 9347 .onClick(() => { 9348 try { 9349 webview.WebCookieManager.fetchCookie('https://www.example.com') 9350 .then(cookie => { 9351 console.log("fetchCookie cookie = " + cookie); 9352 }) 9353 .catch((error: BusinessError) => { 9354 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9355 }) 9356 } catch (error) { 9357 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9358 } 9359 }) 9360 Web({ src: 'www.example.com', controller: this.controller }) 9361 } 9362 } 9363} 9364``` 9365 9366### fetchCookie<sup>14+</sup> 9367 9368static fetchCookie(url: string, incognito: boolean): Promise\<string> 9369 9370以Promise方式异步获取指定url对应cookie的值。 9371 9372**系统能力:** SystemCapability.Web.Webview.Core 9373 9374**参数:** 9375 9376| 参数名 | 类型 | 必填 | 说明 | 9377| ------ | ------ | ---- | :------------------------ | 9378| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9379| incognito | boolean | 是 | true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。 | 9380 9381**返回值:** 9382 9383| 类型 | 说明 | 9384| ------ | ------------------------- | 9385| Promise\<string> | Promise实例,用于获取指定url对应的cookie值。 | 9386 9387**错误码:** 9388 9389以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9390 9391| 错误码ID | 错误信息 | 9392| -------- | ------------------------------------------------------ | 9393| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9394| 17100002 | Invalid url. | 9395 9396**示例:** 9397 9398```ts 9399// xxx.ets 9400import { webview } from '@kit.ArkWeb'; 9401import { BusinessError } from '@kit.BasicServicesKit'; 9402 9403@Entry 9404@Component 9405struct WebComponent { 9406 controller: webview.WebviewController = new webview.WebviewController(); 9407 9408 build() { 9409 Column() { 9410 Button('fetchCookie') 9411 .onClick(() => { 9412 try { 9413 webview.WebCookieManager.fetchCookie('https://www.example.com', false) 9414 .then(cookie => { 9415 console.log("fetchCookie cookie = " + cookie); 9416 }) 9417 .catch((error: BusinessError) => { 9418 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 9419 }) 9420 } catch (error) { 9421 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9422 } 9423 }) 9424 Web({ src: 'www.example.com', controller: this.controller }) 9425 } 9426 } 9427} 9428``` 9429 9430### setCookie<sup>(deprecated)</sup> 9431 9432static setCookie(url: string, value: string): void 9433 9434为指定url设置单个cookie的值。 9435 9436> **说明:** 9437> 9438> 从API version9开始支持,从API version 11开始废弃。建议使用[configCookieSync<sup>11+</sup>](#configcookiesync11)替代 9439 9440**系统能力:** SystemCapability.Web.Webview.Core 9441 9442**参数:** 9443 9444| 参数名 | 类型 | 必填 | 说明 | 9445| ------ | ------ | ---- | :------------------------ | 9446| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9447| value | string | 是 | 要设置的cookie的值。 | 9448 9449**错误码:** 9450 9451以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9452 9453| 错误码ID | 错误信息 | 9454| -------- | ------------------------------------------------------ | 9455| 17100002 | Invalid url. | 9456| 17100005 | Invalid cookie value. | 9457| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9458 9459**示例:** 9460 9461```ts 9462// xxx.ets 9463import { webview } from '@kit.ArkWeb'; 9464import { BusinessError } from '@kit.BasicServicesKit'; 9465 9466@Entry 9467@Component 9468struct WebComponent { 9469 controller: webview.WebviewController = new webview.WebviewController(); 9470 9471 build() { 9472 Column() { 9473 Button('setCookie') 9474 .onClick(() => { 9475 try { 9476 webview.WebCookieManager.setCookie('https://www.example.com', 'a=b'); 9477 } catch (error) { 9478 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9479 } 9480 }) 9481 Web({ src: 'www.example.com', controller: this.controller }) 9482 } 9483 } 9484} 9485``` 9486 9487### configCookieSync<sup>11+</sup> 9488 9489static configCookieSync(url: string, value: string, incognito?: boolean): void 9490 9491为指定url设置单个cookie的值。 9492 9493> **说明:** 9494> 9495> configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。 9496> 9497> 同步cookie的时机建议在Web组件加载之前完成。 9498> 9499> 若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。 9500 9501**系统能力:** SystemCapability.Web.Webview.Core 9502 9503**参数:** 9504 9505| 参数名 | 类型 | 必填 | 说明 | 9506| ------ | ------ | ---- | :------------------------ | 9507| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9508| value | string | 是 | 要设置的cookie的值。 | 9509| incognito | boolean | 否 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9510 9511**错误码:** 9512 9513以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9514 9515| 错误码ID | 错误信息 | 9516| -------- | ------------------------------------------------------ | 9517| 17100002 | Invalid url. | 9518| 17100005 | Invalid cookie value. | 9519| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9520 9521**示例:** 9522 9523```ts 9524// xxx.ets 9525import { webview } from '@kit.ArkWeb'; 9526import { BusinessError } from '@kit.BasicServicesKit'; 9527 9528@Entry 9529@Component 9530struct WebComponent { 9531 controller: webview.WebviewController = new webview.WebviewController(); 9532 9533 build() { 9534 Column() { 9535 Button('configCookieSync') 9536 .onClick(() => { 9537 try { 9538 // configCookieSync每次仅支持设置单个cookie值。 9539 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b'); 9540 } catch (error) { 9541 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9542 } 9543 }) 9544 Web({ src: 'www.example.com', controller: this.controller }) 9545 } 9546 } 9547} 9548``` 9549 9550### configCookieSync<sup>14+</sup> 9551 9552static configCookieSync(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): void 9553 9554为指定url设置cookie的值。 9555 9556**系统能力:** SystemCapability.Web.Webview.Core 9557 9558**参数:** 9559 9560| 参数名 | 类型 | 必填 | 说明 | 9561| ------ | ------ | ---- | :------------------------ | 9562| url | string | 是 | 要设置的cookie所属的url,建议使用完整的url。 | 9563| value | string | 是 | 要设置的cookie的值。 | 9564| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9565| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9566 9567**错误码:** 9568 9569以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9570 9571| 错误码ID | 错误信息 | 9572| -------- | ------------------------------------------------------ | 9573| 17100002 | Invalid url. | 9574| 17100005 | Invalid cookie value. | 9575| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9576 9577**示例:** 9578 9579```ts 9580// xxx.ets 9581import { webview } from '@kit.ArkWeb'; 9582import { BusinessError } from '@kit.BasicServicesKit'; 9583 9584@Entry 9585@Component 9586struct WebComponent { 9587 controller: webview.WebviewController = new webview.WebviewController(); 9588 9589 build() { 9590 Column() { 9591 Button('configCookieSync') 9592 .onClick(() => { 9593 try { 9594 // 仅支持设置单个cookie值。 9595 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', false, false); 9596 } catch (error) { 9597 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9598 } 9599 }) 9600 Web({ src: 'www.example.com', controller: this.controller }) 9601 } 9602 } 9603} 9604``` 9605 9606### configCookie<sup>11+</sup> 9607 9608static configCookie(url: string, value: string, callback: AsyncCallback\<void>): void 9609 9610异步callback方式为指定url设置单个cookie的值。 9611 9612**系统能力:** SystemCapability.Web.Webview.Core 9613 9614**参数:** 9615 9616| 参数名 | 类型 | 必填 | 说明 | 9617| ------ | ------ | ---- | :------------------------ | 9618| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9619| value | string | 是 | 要设置的cookie的值。 | 9620| callback | AsyncCallback\<void> | 是 | callback回调,用于获取设置cookie的结果 | 9621 9622**错误码:** 9623 9624以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9625 9626| 错误码ID | 错误信息 | 9627| -------- | ------------------------------------------------------ | 9628| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9629| 17100002 | Invalid url. | 9630| 17100005 | Invalid cookie value. | 9631 9632**示例:** 9633 9634```ts 9635// xxx.ets 9636import { webview } from '@kit.ArkWeb'; 9637import { BusinessError } from '@kit.BasicServicesKit'; 9638 9639@Entry 9640@Component 9641struct WebComponent { 9642 controller: webview.WebviewController = new webview.WebviewController(); 9643 9644 build() { 9645 Column() { 9646 Button('configCookie') 9647 .onClick(() => { 9648 try { 9649 webview.WebCookieManager.configCookie('https://www.example.com', "a=b", (error) => { 9650 if (error) { 9651 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9652 } 9653 }) 9654 } catch (error) { 9655 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9656 } 9657 }) 9658 Web({ src: 'www.example.com', controller: this.controller }) 9659 } 9660 } 9661} 9662``` 9663 9664### configCookie<sup>11+</sup> 9665 9666static configCookie(url: string, value: string): Promise\<void> 9667 9668以异步Promise方式为指定url设置单个cookie的值。 9669 9670**系统能力:** SystemCapability.Web.Webview.Core 9671 9672**参数:** 9673 9674| 参数名 | 类型 | 必填 | 说明 | 9675| ------ | ------ | ---- | :------------------------ | 9676| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9677| value | string | 是 | 要设置的cookie的值。 | 9678 9679**返回值:** 9680 9681| 类型 | 说明 | 9682| ------ | ------------------------- | 9683| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9684 9685**错误码:** 9686 9687以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9688 9689| 错误码ID | 错误信息 | 9690| -------- | ------------------------------------------------------ | 9691| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9692| 17100002 | Invalid url. | 9693| 17100005 | Invalid cookie value. | 9694 9695**示例:** 9696 9697```ts 9698// xxx.ets 9699import { webview } from '@kit.ArkWeb'; 9700import { BusinessError } from '@kit.BasicServicesKit'; 9701 9702@Entry 9703@Component 9704struct WebComponent { 9705 controller: webview.WebviewController = new webview.WebviewController(); 9706 9707 build() { 9708 Column() { 9709 Button('configCookie') 9710 .onClick(() => { 9711 try { 9712 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b') 9713 .then(() => { 9714 console.log('configCookie success!'); 9715 }) 9716 .catch((error: BusinessError) => { 9717 console.log('error: ' + JSON.stringify(error)); 9718 }) 9719 } catch (error) { 9720 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9721 } 9722 }) 9723 Web({ src: 'www.example.com', controller: this.controller }) 9724 } 9725 } 9726} 9727``` 9728 9729### configCookie<sup>14+</sup> 9730 9731static configCookie(url: string, value: string, incognito: boolean, includeHttpOnly: boolean): Promise\<void> 9732 9733以异步Promise方式为指定url设置单个cookie的值。 9734 9735**系统能力:** SystemCapability.Web.Webview.Core 9736 9737**参数:** 9738 9739| 参数名 | 类型 | 必填 | 说明 | 9740| ------ | ------ | ---- | :------------------------ | 9741| url | string | 是 | 要获取的cookie所属的url,建议使用完整的url。 | 9742| value | string | 是 | 要设置的cookie的值。 | 9743| incognito | boolean | 是 | true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。 | 9744| includeHttpOnly | boolean | 是 | true表示允许覆盖含有http-only的cookies,false表示不允许覆盖含有http-only的cookies。 | 9745 9746**返回值:** 9747 9748| 类型 | 说明 | 9749| ------ | ------------------------- | 9750| Promise\<void> | Promise实例,用于获取指定url设置单个cookie值是否成功。 | 9751 9752**错误码:** 9753 9754以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9755 9756| 错误码ID | 错误信息 | 9757| -------- | ------------------------------------------------------ | 9758| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 9759| 17100002 | Invalid url. | 9760| 17100005 | Invalid cookie value. | 9761 9762**示例:** 9763 9764```ts 9765// xxx.ets 9766import { webview } from '@kit.ArkWeb'; 9767import { BusinessError } from '@kit.BasicServicesKit'; 9768 9769@Entry 9770@Component 9771struct WebComponent { 9772 controller: webview.WebviewController = new webview.WebviewController(); 9773 9774 build() { 9775 Column() { 9776 Button('configCookie') 9777 .onClick(() => { 9778 try { 9779 webview.WebCookieManager.configCookie('https://www.example.com', 'a=b', false, false) 9780 .then(() => { 9781 console.log('configCookie success!'); 9782 }) 9783 .catch((error: BusinessError) => { 9784 console.log('error: ' + JSON.stringify(error)); 9785 }) 9786 } catch (error) { 9787 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9788 } 9789 }) 9790 Web({ src: 'www.example.com', controller: this.controller }) 9791 } 9792 } 9793} 9794``` 9795 9796### saveCookieAsync 9797 9798static saveCookieAsync(callback: AsyncCallback\<void>): void 9799 9800将当前存在内存中的cookie异步保存到磁盘中。 9801 9802**系统能力:** SystemCapability.Web.Webview.Core 9803 9804**参数:** 9805 9806| 参数名 | 类型 | 必填 | 说明 | 9807| -------- | ---------------------- | ---- | :------------------------------------------------- | 9808| callback | AsyncCallback\<void> | 是 | callback回调,用于获取cookie是否成功保存。 | 9809 9810**错误码:** 9811 9812以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9813 9814| 错误码ID | 错误信息 | 9815| -------- | ------------------------------------------------------ | 9816| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9817 9818**示例:** 9819 9820```ts 9821// xxx.ets 9822import { webview } from '@kit.ArkWeb'; 9823import { BusinessError } from '@kit.BasicServicesKit'; 9824 9825@Entry 9826@Component 9827struct WebComponent { 9828 controller: webview.WebviewController = new webview.WebviewController(); 9829 9830 build() { 9831 Column() { 9832 Button('saveCookieAsync') 9833 .onClick(() => { 9834 try { 9835 webview.WebCookieManager.saveCookieAsync((error) => { 9836 if (error) { 9837 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9838 } 9839 }) 9840 } catch (error) { 9841 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9842 } 9843 }) 9844 Web({ src: 'www.example.com', controller: this.controller }) 9845 } 9846 } 9847} 9848``` 9849 9850### saveCookieAsync 9851 9852static saveCookieAsync(): Promise\<void> 9853 9854将当前存在内存中的cookie以Promise方法异步保存到磁盘中。 9855 9856**系统能力:** SystemCapability.Web.Webview.Core 9857 9858**返回值:** 9859 9860| 类型 | 说明 | 9861| ---------------- | ----------------------------------------- | 9862| Promise\<void> | Promise实例,用于获取cookie是否成功保存。 | 9863 9864**错误码:** 9865 9866以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9867 9868| 错误码ID | 错误信息 | 9869| -------- | ------------------------------------------------------ | 9870| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9871 9872**示例:** 9873 9874```ts 9875// xxx.ets 9876import { webview } from '@kit.ArkWeb'; 9877import { BusinessError } from '@kit.BasicServicesKit'; 9878 9879@Entry 9880@Component 9881struct WebComponent { 9882 controller: webview.WebviewController = new webview.WebviewController(); 9883 9884 build() { 9885 Column() { 9886 Button('saveCookieAsync') 9887 .onClick(() => { 9888 try { 9889 webview.WebCookieManager.saveCookieAsync() 9890 .then(() => { 9891 console.log("saveCookieAsyncCallback success!"); 9892 }) 9893 .catch((error: BusinessError) => { 9894 console.error("error: " + error); 9895 }); 9896 } catch (error) { 9897 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9898 } 9899 }) 9900 Web({ src: 'www.example.com', controller: this.controller }) 9901 } 9902 } 9903} 9904``` 9905 9906### putAcceptCookieEnabled 9907 9908static putAcceptCookieEnabled(accept: boolean): void 9909 9910设置WebCookieManager实例是否拥有发送和接收cookie的权限。 9911 9912**系统能力:** SystemCapability.Web.Webview.Core 9913 9914**参数:** 9915 9916| 参数名 | 类型 | 必填 | 说明 | 9917| ------ | ------- | ---- | :----------------------------------- | 9918| accept | boolean | 是 | 设置是否拥有发送和接收cookie的权限,默认为true。 | 9919 9920**错误码:** 9921 9922以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 9923 9924| 错误码ID | 错误信息 | 9925| -------- | ------------------------------------------------------ | 9926| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 9927 9928**示例:** 9929 9930```ts 9931// xxx.ets 9932import { webview } from '@kit.ArkWeb'; 9933import { BusinessError } from '@kit.BasicServicesKit'; 9934 9935@Entry 9936@Component 9937struct WebComponent { 9938 controller: webview.WebviewController = new webview.WebviewController(); 9939 9940 build() { 9941 Column() { 9942 Button('putAcceptCookieEnabled') 9943 .onClick(() => { 9944 try { 9945 webview.WebCookieManager.putAcceptCookieEnabled(false); 9946 } catch (error) { 9947 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 9948 } 9949 }) 9950 Web({ src: 'www.example.com', controller: this.controller }) 9951 } 9952 } 9953} 9954``` 9955 9956### isCookieAllowed 9957 9958static isCookieAllowed(): boolean 9959 9960获取WebCookieManager实例是否拥有发送和接收cookie的权限。 9961 9962**系统能力:** SystemCapability.Web.Webview.Core 9963 9964**返回值:** 9965 9966| 类型 | 说明 | 9967| ------- | -------------------------------- | 9968| boolean | 是否拥有发送和接收cookie的权限,默认为true。 | 9969 9970**示例:** 9971 9972```ts 9973// xxx.ets 9974import { webview } from '@kit.ArkWeb'; 9975 9976@Entry 9977@Component 9978struct WebComponent { 9979 controller: webview.WebviewController = new webview.WebviewController(); 9980 9981 build() { 9982 Column() { 9983 Button('isCookieAllowed') 9984 .onClick(() => { 9985 let result = webview.WebCookieManager.isCookieAllowed(); 9986 console.log("result: " + result); 9987 }) 9988 Web({ src: 'www.example.com', controller: this.controller }) 9989 } 9990 } 9991} 9992``` 9993 9994### putAcceptThirdPartyCookieEnabled 9995 9996static putAcceptThirdPartyCookieEnabled(accept: boolean): void 9997 9998设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 9999 10000**系统能力:** SystemCapability.Web.Webview.Core 10001 10002**参数:** 10003 10004| 参数名 | 类型 | 必填 | 说明 | 10005| ------ | ------- | ---- | :----------------------------------------- | 10006| accept | boolean | 是 | 设置是否拥有发送和接收第三方cookie的权限,默认为false。 | 10007 10008**错误码:** 10009 10010以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10011 10012| 错误码ID | 错误信息 | 10013| -------- | ------------------------------------------------------ | 10014| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10015 10016**示例:** 10017 10018```ts 10019// xxx.ets 10020import { webview } from '@kit.ArkWeb'; 10021import { BusinessError } from '@kit.BasicServicesKit'; 10022 10023@Entry 10024@Component 10025struct WebComponent { 10026 controller: webview.WebviewController = new webview.WebviewController(); 10027 10028 build() { 10029 Column() { 10030 Button('putAcceptThirdPartyCookieEnabled') 10031 .onClick(() => { 10032 try { 10033 webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false); 10034 } catch (error) { 10035 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10036 } 10037 }) 10038 Web({ src: 'www.example.com', controller: this.controller }) 10039 } 10040 } 10041} 10042``` 10043 10044### isThirdPartyCookieAllowed 10045 10046static isThirdPartyCookieAllowed(): boolean 10047 10048获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。 10049 10050**系统能力:** SystemCapability.Web.Webview.Core 10051 10052**返回值:** 10053 10054| 类型 | 说明 | 10055| ------- | -------------------------------------- | 10056| boolean | 是否拥有发送和接收第三方cookie的权限,默认为false。 | 10057 10058**示例:** 10059 10060```ts 10061// xxx.ets 10062import { webview } from '@kit.ArkWeb'; 10063 10064@Entry 10065@Component 10066struct WebComponent { 10067 controller: webview.WebviewController = new webview.WebviewController(); 10068 10069 build() { 10070 Column() { 10071 Button('isThirdPartyCookieAllowed') 10072 .onClick(() => { 10073 let result = webview.WebCookieManager.isThirdPartyCookieAllowed(); 10074 console.log("result: " + result); 10075 }) 10076 Web({ src: 'www.example.com', controller: this.controller }) 10077 } 10078 } 10079} 10080``` 10081 10082### existCookie 10083 10084static existCookie(incognito?: boolean): boolean 10085 10086获取是否存在cookie。 10087 10088**系统能力:** SystemCapability.Web.Webview.Core 10089 10090**参数:** 10091 10092| 参数名 | 类型 | 必填 | 说明 | 10093| ------ | ------- | ---- | :----------------------------------------- | 10094| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。 | 10095 10096**返回值:** 10097 10098| 类型 | 说明 | 10099| ------- | -------------------------------------- | 10100| boolean | true表示存在cookie,false表示不存在cookie。 | 10101 10102**示例:** 10103 10104```ts 10105// xxx.ets 10106import { webview } from '@kit.ArkWeb'; 10107 10108@Entry 10109@Component 10110struct WebComponent { 10111 controller: webview.WebviewController = new webview.WebviewController(); 10112 10113 build() { 10114 Column() { 10115 Button('existCookie') 10116 .onClick(() => { 10117 let result = webview.WebCookieManager.existCookie(); 10118 console.log("result: " + result); 10119 }) 10120 Web({ src: 'www.example.com', controller: this.controller }) 10121 } 10122 } 10123} 10124``` 10125 10126### deleteEntireCookie<sup>(deprecated)</sup> 10127 10128static deleteEntireCookie(): void 10129 10130清除所有cookie。 10131 10132> **说明:** 10133> 10134> 从API version9开始支持,从API version 11开始废弃。建议使用[clearAllCookiesSync](#clearallcookiessync11)替代 10135 10136**系统能力:** SystemCapability.Web.Webview.Core 10137 10138**示例:** 10139 10140```ts 10141// xxx.ets 10142import { webview } from '@kit.ArkWeb'; 10143 10144@Entry 10145@Component 10146struct WebComponent { 10147 controller: webview.WebviewController = new webview.WebviewController(); 10148 10149 build() { 10150 Column() { 10151 Button('deleteEntireCookie') 10152 .onClick(() => { 10153 webview.WebCookieManager.deleteEntireCookie(); 10154 }) 10155 Web({ src: 'www.example.com', controller: this.controller }) 10156 } 10157 } 10158} 10159``` 10160 10161### clearAllCookiesSync<sup>11+</sup> 10162 10163static clearAllCookiesSync(incognito?: boolean): void 10164 10165清除所有cookie。 10166 10167**系统能力:** SystemCapability.Web.Webview.Core 10168 10169**参数:** 10170 10171| 参数名 | 类型 | 必填 | 说明 | 10172| ------ | ------- | ---- | :----------------------------------------- | 10173| incognito | boolean | 否 | true表示清除隐私模式下webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。 | 10174 10175**示例:** 10176 10177```ts 10178// xxx.ets 10179import { webview } from '@kit.ArkWeb'; 10180 10181@Entry 10182@Component 10183struct WebComponent { 10184 controller: webview.WebviewController = new webview.WebviewController(); 10185 10186 build() { 10187 Column() { 10188 Button('clearAllCookiesSync') 10189 .onClick(() => { 10190 webview.WebCookieManager.clearAllCookiesSync(); 10191 }) 10192 Web({ src: 'www.example.com', controller: this.controller }) 10193 } 10194 } 10195} 10196``` 10197 10198### clearAllCookies<sup>11+</sup> 10199 10200static clearAllCookies(callback: AsyncCallback\<void>): void 10201 10202异步callback方式清除所有cookie。 10203 10204**系统能力:** SystemCapability.Web.Webview.Core 10205 10206**参数:** 10207 10208| 参数名 | 类型 | 必填 | 说明 | 10209| -------- | ---------------------- | ---- | :------------------------------------------------- | 10210| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有cookie是否成功。 | 10211 10212**错误码:** 10213 10214以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10215 10216| 错误码ID | 错误信息 | 10217| -------- | ------------------------------------------------------ | 10218| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10219 10220**示例:** 10221 10222```ts 10223// xxx.ets 10224import { webview } from '@kit.ArkWeb'; 10225import { BusinessError } from '@kit.BasicServicesKit'; 10226 10227@Entry 10228@Component 10229struct WebComponent { 10230 controller: webview.WebviewController = new webview.WebviewController(); 10231 10232 build() { 10233 Column() { 10234 Button('clearAllCookies') 10235 .onClick(() => { 10236 try { 10237 webview.WebCookieManager.clearAllCookies((error) => { 10238 if (error) { 10239 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10240 } 10241 }) 10242 } catch (error) { 10243 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10244 } 10245 }) 10246 Web({ src: 'www.example.com', controller: this.controller }) 10247 } 10248 } 10249} 10250``` 10251 10252### clearAllCookies<sup>11+</sup> 10253 10254static clearAllCookies(): Promise\<void> 10255 10256异步promise方式清除所有cookie。 10257 10258**系统能力:** SystemCapability.Web.Webview.Core 10259 10260**返回值:** 10261 10262| 类型 | 说明 | 10263| ---------------- | ----------------------------------------- | 10264| Promise\<void> | Promise实例,用于获取清除所有cookie是否成功。 | 10265 10266**错误码:** 10267 10268以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10269 10270| 错误码ID | 错误信息 | 10271| -------- | ------------------------------------------------------ | 10272| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10273 10274**示例:** 10275 10276```ts 10277// xxx.ets 10278import { webview } from '@kit.ArkWeb'; 10279import { BusinessError } from '@kit.BasicServicesKit'; 10280 10281@Entry 10282@Component 10283struct WebComponent { 10284 controller: webview.WebviewController = new webview.WebviewController(); 10285 10286 build() { 10287 Column() { 10288 Button('clearAllCookies') 10289 .onClick(() => { 10290 try { 10291 webview.WebCookieManager.clearAllCookies() 10292 .then(() => { 10293 console.log("clearAllCookies success!"); 10294 }) 10295 .catch((error: BusinessError) => { 10296 console.error("error: " + error); 10297 }); 10298 } catch (error) { 10299 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10300 } 10301 }) 10302 Web({ src: 'www.example.com', controller: this.controller }) 10303 } 10304 } 10305} 10306``` 10307 10308### deleteSessionCookie<sup>(deprecated)</sup> 10309 10310static deleteSessionCookie(): void 10311 10312清除所有会话cookie。 10313 10314> **说明:** 10315> 10316> 从API version9开始支持,从API version 11开始废弃。建议使用[clearSessionCookiesync](#clearsessioncookiesync11)替代 10317 10318**系统能力:** SystemCapability.Web.Webview.Core 10319 10320**示例:** 10321 10322```ts 10323// xxx.ets 10324import { webview } from '@kit.ArkWeb'; 10325 10326@Entry 10327@Component 10328struct WebComponent { 10329 controller: webview.WebviewController = new webview.WebviewController(); 10330 10331 build() { 10332 Column() { 10333 Button('deleteSessionCookie') 10334 .onClick(() => { 10335 webview.WebCookieManager.deleteSessionCookie(); 10336 }) 10337 Web({ src: 'www.example.com', controller: this.controller }) 10338 } 10339 } 10340} 10341``` 10342 10343### clearSessionCookieSync<sup>11+</sup> 10344 10345static clearSessionCookieSync(): void 10346 10347清除所有会话cookie。 10348 10349**系统能力:** SystemCapability.Web.Webview.Core 10350 10351**示例:** 10352 10353```ts 10354// xxx.ets 10355import { webview } from '@kit.ArkWeb'; 10356 10357@Entry 10358@Component 10359struct WebComponent { 10360 controller: webview.WebviewController = new webview.WebviewController(); 10361 10362 build() { 10363 Column() { 10364 Button('clearSessionCookieSync') 10365 .onClick(() => { 10366 webview.WebCookieManager.clearSessionCookieSync(); 10367 }) 10368 Web({ src: 'www.example.com', controller: this.controller }) 10369 } 10370 } 10371} 10372``` 10373 10374### clearSessionCookie<sup>11+</sup> 10375 10376static clearSessionCookie(callback: AsyncCallback\<void>): void 10377 10378异步callback方式清除所有会话cookie。 10379 10380**系统能力:** SystemCapability.Web.Webview.Core 10381 10382**参数:** 10383 10384| 参数名 | 类型 | 必填 | 说明 | 10385| -------- | ---------------------- | ---- | :------------------------------------------------- | 10386| callback | AsyncCallback\<void> | 是 | callback回调,用于获取清除所有会话cookie是否成功。 | 10387 10388**错误码:** 10389 10390以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10391 10392| 错误码ID | 错误信息 | 10393| -------- | ------------------------------------------------------ | 10394| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 10395 10396**示例:** 10397 10398```ts 10399// xxx.ets 10400import { webview } from '@kit.ArkWeb'; 10401import { BusinessError } from '@kit.BasicServicesKit'; 10402 10403@Entry 10404@Component 10405struct WebComponent { 10406 controller: webview.WebviewController = new webview.WebviewController(); 10407 10408 build() { 10409 Column() { 10410 Button('clearSessionCookie') 10411 .onClick(() => { 10412 try { 10413 webview.WebCookieManager.clearSessionCookie((error) => { 10414 if (error) { 10415 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10416 } 10417 }) 10418 } catch (error) { 10419 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10420 } 10421 }) 10422 Web({ src: 'www.example.com', controller: this.controller }) 10423 } 10424 } 10425} 10426``` 10427 10428### clearSessionCookie<sup>11+</sup> 10429 10430static clearSessionCookie(): Promise\<void> 10431 10432异步promise方式清除所有会话cookie。 10433 10434**系统能力:** SystemCapability.Web.Webview.Core 10435 10436**返回值:** 10437 10438| 类型 | 说明 | 10439| ---------------- | ----------------------------------------- | 10440| Promise\<void> | Promise实例,用于获取清除所有会话cookie是否成功。 | 10441 10442**错误码:** 10443 10444以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10445 10446| 错误码ID | 错误信息 | 10447| -------- | ------------------------------------------------------ | 10448| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 10449 10450**示例:** 10451 10452```ts 10453// xxx.ets 10454import { webview } from '@kit.ArkWeb'; 10455import { BusinessError } from '@kit.BasicServicesKit'; 10456 10457@Entry 10458@Component 10459struct WebComponent { 10460 controller: webview.WebviewController = new webview.WebviewController(); 10461 10462 build() { 10463 Column() { 10464 Button('clearSessionCookie') 10465 .onClick(() => { 10466 try { 10467 webview.WebCookieManager.clearSessionCookie() 10468 .then(() => { 10469 console.log("clearSessionCookie success!"); 10470 }) 10471 .catch((error: BusinessError) => { 10472 console.error("error: " + error); 10473 }); 10474 } catch (error) { 10475 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10476 } 10477 }) 10478 Web({ src: 'www.example.com', controller: this.controller }) 10479 } 10480 } 10481} 10482``` 10483 10484## WebStorage 10485 10486通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 10487 10488> **说明:** 10489> 10490> 目前调用WebStorage下的方法,都需要先加载Web组件。 10491 10492### deleteOrigin 10493 10494static deleteOrigin(origin: string): void 10495 10496清除指定源所使用的存储。 10497 10498**系统能力:** SystemCapability.Web.Webview.Core 10499 10500**参数:** 10501 10502| 参数名 | 类型 | 必填 | 说明 | 10503| ------ | ------ | ---- | ------------------------ | 10504| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 10505 10506**错误码:** 10507 10508以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10509 10510| 错误码ID | 错误信息 | 10511| -------- | ------------------------------------------------------ | 10512| 17100011 | Invalid origin. | 10513| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10514 10515**示例:** 10516 10517```ts 10518// xxx.ets 10519import { webview } from '@kit.ArkWeb'; 10520import { BusinessError } from '@kit.BasicServicesKit'; 10521 10522@Entry 10523@Component 10524struct WebComponent { 10525 controller: webview.WebviewController = new webview.WebviewController(); 10526 origin: string = "resource://rawfile/"; 10527 10528 build() { 10529 Column() { 10530 Button('deleteOrigin') 10531 .onClick(() => { 10532 try { 10533 webview.WebStorage.deleteOrigin(this.origin); 10534 } catch (error) { 10535 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10536 } 10537 10538 }) 10539 Web({ src: $rawfile('index.html'), controller: this.controller }) 10540 .databaseAccess(true) 10541 } 10542 } 10543} 10544``` 10545 10546加载的html文件。 10547 ```html 10548 <!-- index.html --> 10549 <!DOCTYPE html> 10550 <html> 10551 <head> 10552 <meta charset="UTF-8"> 10553 <title>test</title> 10554 <script type="text/javascript"> 10555 10556 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 10557 var msg; 10558 10559 db.transaction(function(tx){ 10560 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 10561 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 10562 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 10563 10564 document.querySelector('#status').innerHTML = msg; 10565 }); 10566 10567 db.transaction(function(tx){ 10568 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 10569 var len = results.rows.length,i; 10570 msg = "<p>查询记录条数:" + len + "</p>"; 10571 10572 document.querySelector('#status').innerHTML += msg; 10573 10574 for(i = 0; i < len; i++){ 10575 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 10576 10577 document.querySelector('#status').innerHTML += msg; 10578 } 10579 },null); 10580 }); 10581 10582 </script> 10583 </head> 10584 <body> 10585 <div id="status" name="status">状态信息</div> 10586 </body> 10587 </html> 10588 ``` 10589 10590### getOrigins 10591 10592static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void 10593 10594以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 10595 10596**系统能力:** SystemCapability.Web.Webview.Core 10597 10598**参数:** 10599 10600| 参数名 | 类型 | 必填 | 说明 | 10601| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 10602| callback | AsyncCallback\<Array\<[WebStorageOrigin](#webstorageorigin)>> | 是 | 以数组方式返回源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10603 10604**错误码:** 10605 10606以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10607 10608| 错误码ID | 错误信息 | 10609| -------- | ------------------------------------------------------ | 10610| 17100012 | Invalid web storage origin. | 10611| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10612 10613**示例:** 10614 10615```ts 10616// xxx.ets 10617import { webview } from '@kit.ArkWeb'; 10618import { BusinessError } from '@kit.BasicServicesKit'; 10619 10620@Entry 10621@Component 10622struct WebComponent { 10623 controller: webview.WebviewController = new webview.WebviewController(); 10624 10625 build() { 10626 Column() { 10627 Button('getOrigins') 10628 .onClick(() => { 10629 try { 10630 webview.WebStorage.getOrigins((error, origins) => { 10631 if (error) { 10632 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10633 return; 10634 } 10635 for (let i = 0; i < origins.length; i++) { 10636 console.log('origin: ' + origins[i].origin); 10637 console.log('usage: ' + origins[i].usage); 10638 console.log('quota: ' + origins[i].quota); 10639 } 10640 }) 10641 } catch (error) { 10642 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10643 } 10644 10645 }) 10646 Web({ src: $rawfile('index.html'), controller: this.controller }) 10647 .databaseAccess(true) 10648 } 10649 } 10650} 10651``` 10652 10653加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10654 10655### getOrigins 10656 10657static getOrigins(): Promise\<Array\<WebStorageOrigin>> 10658 10659以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 10660 10661**系统能力:** SystemCapability.Web.Webview.Core 10662 10663**返回值:** 10664 10665| 类型 | 说明 | 10666| -------------------------------- | ------------------------------------------------------------ | 10667| Promise\<Array\<[WebStorageOrigin](#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息,信息内容参考[WebStorageOrigin](#webstorageorigin)。 | 10668 10669**错误码:** 10670 10671以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10672 10673| 错误码ID | 错误信息 | 10674| -------- | ------------------------------------------------------ | 10675| 17100012 | Invalid web storage origin. | 10676| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10677 10678**示例:** 10679 10680```ts 10681// xxx.ets 10682import { webview } from '@kit.ArkWeb'; 10683import { BusinessError } from '@kit.BasicServicesKit'; 10684 10685@Entry 10686@Component 10687struct WebComponent { 10688 controller: webview.WebviewController = new webview.WebviewController(); 10689 10690 build() { 10691 Column() { 10692 Button('getOrigins') 10693 .onClick(() => { 10694 try { 10695 webview.WebStorage.getOrigins() 10696 .then(origins => { 10697 for (let i = 0; i < origins.length; i++) { 10698 console.log('origin: ' + origins[i].origin); 10699 console.log('usage: ' + origins[i].usage); 10700 console.log('quota: ' + origins[i].quota); 10701 } 10702 }) 10703 .catch((e: BusinessError) => { 10704 console.log('error: ' + JSON.stringify(e)); 10705 }) 10706 } catch (error) { 10707 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10708 } 10709 10710 }) 10711 Web({ src: $rawfile('index.html'), controller: this.controller }) 10712 .databaseAccess(true) 10713 } 10714 } 10715} 10716``` 10717 10718加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10719 10720### getOriginQuota 10721 10722static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void 10723 10724使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 10725 10726**系统能力:** SystemCapability.Web.Webview.Core 10727 10728**参数:** 10729 10730| 参数名 | 类型 | 必填 | 说明 | 10731| -------- | --------------------- | ---- | ------------------ | 10732| origin | string | 是 | 指定源的字符串索引 | 10733| callback | AsyncCallback\<number> | 是 | 指定源的存储配额 | 10734 10735**错误码:** 10736 10737以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10738 10739| 错误码ID | 错误信息 | 10740| -------- | ------------------------------------------------------ | 10741| 17100011 | Invalid origin. | 10742| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10743 10744**示例:** 10745 10746```ts 10747// xxx.ets 10748import { webview } from '@kit.ArkWeb'; 10749import { BusinessError } from '@kit.BasicServicesKit'; 10750 10751@Entry 10752@Component 10753struct WebComponent { 10754 controller: webview.WebviewController = new webview.WebviewController(); 10755 origin: string = "resource://rawfile/"; 10756 10757 build() { 10758 Column() { 10759 Button('getOriginQuota') 10760 .onClick(() => { 10761 try { 10762 webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 10763 if (error) { 10764 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10765 return; 10766 } 10767 console.log('quota: ' + quota); 10768 }) 10769 } catch (error) { 10770 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10771 } 10772 10773 }) 10774 Web({ src: $rawfile('index.html'), controller: this.controller }) 10775 .databaseAccess(true) 10776 } 10777 } 10778} 10779``` 10780 10781加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10782 10783### getOriginQuota 10784 10785static getOriginQuota(origin: string): Promise\<number> 10786 10787以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 10788 10789**系统能力:** SystemCapability.Web.Webview.Core 10790 10791**参数:** 10792 10793| 参数名 | 类型 | 必填 | 说明 | 10794| ------ | ------ | ---- | ------------------ | 10795| origin | string | 是 | 指定源的字符串索引 | 10796 10797**返回值:** 10798 10799| 类型 | 说明 | 10800| --------------- | --------------------------------------- | 10801| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 10802 10803**错误码:** 10804 10805以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10806 10807| 错误码ID | 错误信息 | 10808| -------- | ------------------------------------------------------ | 10809| 17100011 | Invalid origin. | 10810| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10811 10812**示例:** 10813 10814```ts 10815// xxx.ets 10816import { webview } from '@kit.ArkWeb'; 10817import { BusinessError } from '@kit.BasicServicesKit'; 10818 10819@Entry 10820@Component 10821struct WebComponent { 10822 controller: webview.WebviewController = new webview.WebviewController(); 10823 origin: string = "resource://rawfile/"; 10824 10825 build() { 10826 Column() { 10827 Button('getOriginQuota') 10828 .onClick(() => { 10829 try { 10830 webview.WebStorage.getOriginQuota(this.origin) 10831 .then(quota => { 10832 console.log('quota: ' + quota); 10833 }) 10834 .catch((e: BusinessError) => { 10835 console.log('error: ' + JSON.stringify(e)); 10836 }) 10837 } catch (error) { 10838 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10839 } 10840 10841 }) 10842 Web({ src: $rawfile('index.html'), controller: this.controller }) 10843 .databaseAccess(true) 10844 } 10845 } 10846} 10847``` 10848 10849加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10850 10851### getOriginUsage 10852 10853static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void 10854 10855以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 10856 10857**系统能力:** SystemCapability.Web.Webview.Core 10858 10859**参数:** 10860 10861| 参数名 | 类型 | 必填 | 说明 | 10862| -------- | --------------------- | ---- | ------------------ | 10863| origin | string | 是 | 指定源的字符串索引 | 10864| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 10865 10866**错误码:** 10867 10868以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10869 10870| 错误码ID | 错误信息 | 10871| -------- | ------------------------------------------------------ | 10872| 17100011 | Invalid origin. | 10873| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10874 10875**示例:** 10876 10877```ts 10878// xxx.ets 10879import { webview } from '@kit.ArkWeb'; 10880import { BusinessError } from '@kit.BasicServicesKit'; 10881 10882@Entry 10883@Component 10884struct WebComponent { 10885 controller: webview.WebviewController = new webview.WebviewController(); 10886 origin: string = "resource://rawfile/"; 10887 10888 build() { 10889 Column() { 10890 Button('getOriginUsage') 10891 .onClick(() => { 10892 try { 10893 webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 10894 if (error) { 10895 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10896 return; 10897 } 10898 console.log('usage: ' + usage); 10899 }) 10900 } catch (error) { 10901 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10902 } 10903 10904 }) 10905 Web({ src: $rawfile('index.html'), controller: this.controller }) 10906 .databaseAccess(true) 10907 } 10908 } 10909} 10910``` 10911 10912加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10913 10914### getOriginUsage 10915 10916static getOriginUsage(origin: string): Promise\<number> 10917 10918以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 10919 10920**系统能力:** SystemCapability.Web.Webview.Core 10921 10922**参数:** 10923 10924| 参数名 | 类型 | 必填 | 说明 | 10925| ------ | ------ | ---- | ------------------ | 10926| origin | string | 是 | 指定源的字符串索引 | 10927 10928**返回值:** 10929 10930| 类型 | 说明 | 10931| --------------- | ------------------------------------- | 10932| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 10933 10934**错误码:** 10935 10936以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 10937 10938| 错误码ID | 错误信息 | 10939| -------- | ----------------------------------------------------- | 10940| 17100011 | Invalid origin. | 10941| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 10942 10943**示例:** 10944 10945```ts 10946// xxx.ets 10947import { webview } from '@kit.ArkWeb'; 10948import { BusinessError } from '@kit.BasicServicesKit'; 10949 10950@Entry 10951@Component 10952struct WebComponent { 10953 controller: webview.WebviewController = new webview.WebviewController(); 10954 origin: string = "resource://rawfile/"; 10955 10956 build() { 10957 Column() { 10958 Button('getOriginUsage') 10959 .onClick(() => { 10960 try { 10961 webview.WebStorage.getOriginUsage(this.origin) 10962 .then(usage => { 10963 console.log('usage: ' + usage); 10964 }).catch((e: BusinessError) => { 10965 console.error('error: ' + JSON.stringify(e)); 10966 }) 10967 } catch (error) { 10968 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 10969 } 10970 }) 10971 Web({ src: $rawfile('index.html'), controller: this.controller }) 10972 .databaseAccess(true) 10973 } 10974 } 10975} 10976``` 10977 10978加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 10979 10980### deleteAllData 10981 10982static deleteAllData(incognito?: boolean): void 10983 10984清除Web SQL数据库当前使用的所有存储。 10985 10986**系统能力:** SystemCapability.Web.Webview.Core 10987 10988**参数:** 10989 10990| 参数名 | 类型 | 必填 | 说明 | 10991| ------ | ------ | ---- | ------------------ | 10992| incognito<sup>11+</sup> | boolean | 否 | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。 | 10993 10994**示例:** 10995 10996```ts 10997// xxx.ets 10998import { webview } from '@kit.ArkWeb'; 10999import { BusinessError } from '@kit.BasicServicesKit'; 11000 11001@Entry 11002@Component 11003struct WebComponent { 11004 controller: webview.WebviewController = new webview.WebviewController(); 11005 11006 build() { 11007 Column() { 11008 Button('deleteAllData') 11009 .onClick(() => { 11010 try { 11011 webview.WebStorage.deleteAllData(); 11012 } catch (error) { 11013 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11014 } 11015 }) 11016 Web({ src: $rawfile('index.html'), controller: this.controller }) 11017 .databaseAccess(true) 11018 } 11019 } 11020} 11021``` 11022 11023加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。 11024 11025## WebDataBase 11026 11027Web组件数据库管理对象。 11028 11029> **说明:** 11030> 11031> 目前调用WebDataBase下的方法,都需要先加载Web组件。 11032 11033### getHttpAuthCredentials 11034 11035static getHttpAuthCredentials(host: string, realm: string): Array\<string> 11036 11037检索给定主机和域的HTTP身份验证凭据,该方法为同步方法。 11038 11039**系统能力:** SystemCapability.Web.Webview.Core 11040 11041**参数:** 11042 11043| 参数名 | 类型 | 必填 | 说明 | 11044| ------ | ------ | ---- | ---------------------------- | 11045| host | string | 是 | HTTP身份验证凭据应用的主机。 | 11046| realm | string | 是 | HTTP身份验证凭据应用的域。 | 11047 11048**返回值:** 11049 11050| 类型 | 说明 | 11051| ----- | -------------------------------------------- | 11052| Array\<string> | 包含用户名和密码的组数,检索失败返回空数组。 | 11053 11054**错误码:** 11055 11056以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11057 11058| 错误码ID | 错误信息 | 11059| -------- | ------------------------------------------------------ | 11060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11061 11062**示例:** 11063 11064```ts 11065// xxx.ets 11066import { webview } from '@kit.ArkWeb'; 11067import { BusinessError } from '@kit.BasicServicesKit'; 11068 11069@Entry 11070@Component 11071struct WebComponent { 11072 controller: webview.WebviewController = new webview.WebviewController(); 11073 host: string = "www.spincast.org"; 11074 realm: string = "protected example"; 11075 username_password: string[] = []; 11076 11077 build() { 11078 Column() { 11079 Button('getHttpAuthCredentials') 11080 .onClick(() => { 11081 try { 11082 this.username_password = webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm); 11083 console.log('num: ' + this.username_password.length); 11084 } catch (error) { 11085 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11086 } 11087 }) 11088 Web({ src: 'www.example.com', controller: this.controller }) 11089 } 11090 } 11091} 11092``` 11093 11094### saveHttpAuthCredentials 11095 11096static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void 11097 11098保存给定主机和域的HTTP身份验证凭据,该方法为同步方法。 11099 11100**系统能力:** SystemCapability.Web.Webview.Core 11101 11102**参数:** 11103 11104| 参数名 | 类型 | 必填 | 说明 | 11105| -------- | ------ | ---- | ---------------------------- | 11106| host | string | 是 | HTTP身份验证凭据应用的主机。 | 11107| realm | string | 是 | HTTP身份验证凭据应用的域。 | 11108| username | string | 是 | 用户名。 | 11109| password | string | 是 | 密码。 | 11110 11111**错误码:** 11112 11113以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11114 11115| 错误码ID | 错误信息 | 11116| -------- | ------------------------------------------------------ | 11117| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11118 11119**示例:** 11120 11121```ts 11122// xxx.ets 11123import { webview } from '@kit.ArkWeb'; 11124import { BusinessError } from '@kit.BasicServicesKit'; 11125 11126@Entry 11127@Component 11128struct WebComponent { 11129 controller: webview.WebviewController = new webview.WebviewController(); 11130 host: string = "www.spincast.org"; 11131 realm: string = "protected example"; 11132 11133 build() { 11134 Column() { 11135 Button('saveHttpAuthCredentials') 11136 .onClick(() => { 11137 try { 11138 webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche"); 11139 } catch (error) { 11140 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11141 } 11142 }) 11143 Web({ src: 'www.example.com', controller: this.controller }) 11144 } 11145 } 11146} 11147``` 11148 11149### existHttpAuthCredentials 11150 11151static existHttpAuthCredentials(): boolean 11152 11153判断是否存在任何已保存的HTTP身份验证凭据,该方法为同步方法。存在返回true,不存在返回false。 11154 11155**系统能力:** SystemCapability.Web.Webview.Core 11156 11157**返回值:** 11158 11159| 类型 | 说明 | 11160| ------- | ------------------------------------------------------------ | 11161| boolean | 是否存在任何已保存的HTTP身份验证凭据。存在返回true,不存在返回false | 11162 11163**示例:** 11164 11165```ts 11166// xxx.ets 11167import { webview } from '@kit.ArkWeb'; 11168import { BusinessError } from '@kit.BasicServicesKit'; 11169 11170@Entry 11171@Component 11172struct WebComponent { 11173 controller: webview.WebviewController = new webview.WebviewController(); 11174 11175 build() { 11176 Column() { 11177 Button('existHttpAuthCredentials') 11178 .onClick(() => { 11179 try { 11180 let result = webview.WebDataBase.existHttpAuthCredentials(); 11181 } catch (error) { 11182 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11183 } 11184 }) 11185 Web({ src: 'www.example.com', controller: this.controller }) 11186 } 11187 } 11188} 11189``` 11190 11191### deleteHttpAuthCredentials 11192 11193static deleteHttpAuthCredentials(): void 11194 11195清除所有已保存的HTTP身份验证凭据,该方法为同步方法。 11196 11197**系统能力:** SystemCapability.Web.Webview.Core 11198 11199**示例:** 11200 11201```ts 11202// xxx.ets 11203import { webview } from '@kit.ArkWeb'; 11204import { BusinessError } from '@kit.BasicServicesKit'; 11205 11206@Entry 11207@Component 11208struct WebComponent { 11209 controller: webview.WebviewController = new webview.WebviewController(); 11210 11211 build() { 11212 Column() { 11213 Button('deleteHttpAuthCredentials') 11214 .onClick(() => { 11215 try { 11216 webview.WebDataBase.deleteHttpAuthCredentials(); 11217 } catch (error) { 11218 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11219 } 11220 }) 11221 Web({ src: 'www.example.com', controller: this.controller }) 11222 } 11223 } 11224} 11225``` 11226 11227## GeolocationPermissions 11228 11229Web组件地理位置权限管理对象。 11230 11231> **说明:** 11232> 11233> 目前调用GeolocationPermissions下的方法,都需要先加载Web组件。 11234 11235### 需要权限 11236 11237访问地理位置时需添加权限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具体权限说明请参考[位置服务](../apis-location-kit/js-apis-geolocation.md)。 11238 11239### allowGeolocation 11240 11241static allowGeolocation(origin: string, incognito?: boolean): void 11242 11243允许指定来源使用地理位置接口。 11244 11245**系统能力:** SystemCapability.Web.Webview.Core 11246 11247**参数:** 11248 11249| 参数名 | 类型 | 必填 | 说明 | 11250| ------ | ------ | ---- | ------------------ | 11251| origin | string | 是 |指定源的字符串索引 | 11252| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下允许指定来源使用地理位置,false表示正常非隐私模式下允许指定来源使用地理位置。 | 11253 11254**错误码:** 11255 11256以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11257 11258| 错误码ID | 错误信息 | 11259| -------- | ------------------------------------------------------ | 11260| 17100011 | Invalid origin. | 11261| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11262 11263**示例:** 11264 11265```ts 11266// xxx.ets 11267import { webview } from '@kit.ArkWeb'; 11268import { BusinessError } from '@kit.BasicServicesKit'; 11269 11270@Entry 11271@Component 11272struct WebComponent { 11273 controller: webview.WebviewController = new webview.WebviewController(); 11274 origin: string = "file:///"; 11275 11276 build() { 11277 Column() { 11278 Button('allowGeolocation') 11279 .onClick(() => { 11280 try { 11281 webview.GeolocationPermissions.allowGeolocation(this.origin); 11282 } catch (error) { 11283 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11284 } 11285 }) 11286 Web({ src: 'www.example.com', controller: this.controller }) 11287 } 11288 } 11289} 11290``` 11291 11292### deleteGeolocation 11293 11294static deleteGeolocation(origin: string, incognito?: boolean): void 11295 11296清除指定来源的地理位置权限状态。 11297 11298**系统能力:** SystemCapability.Web.Webview.Core 11299 11300**参数:** 11301 11302| 参数名 | 类型 | 必填 | 说明 | 11303| ------ | ------ | ---- | ------------------ | 11304| origin | string | 是 | 指定源的字符串索引 | 11305| incognito<sup>11+</sup> | boolean | 否 | true表示隐私模式下清除指定来源的地理位置权限状态,false表示正常非隐私模式下清除指定来源的地理位置权限状态。 | 11306 11307**错误码:** 11308 11309以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11310 11311| 错误码ID | 错误信息 | 11312| -------- | ------------------------------------------------------ | 11313| 17100011 | Invalid origin. | 11314| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11315 11316**示例:** 11317 11318```ts 11319// xxx.ets 11320import { webview } from '@kit.ArkWeb'; 11321import { BusinessError } from '@kit.BasicServicesKit'; 11322 11323@Entry 11324@Component 11325struct WebComponent { 11326 controller: webview.WebviewController = new webview.WebviewController(); 11327 origin: string = "file:///"; 11328 11329 build() { 11330 Column() { 11331 Button('deleteGeolocation') 11332 .onClick(() => { 11333 try { 11334 webview.GeolocationPermissions.deleteGeolocation(this.origin); 11335 } catch (error) { 11336 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11337 } 11338 }) 11339 Web({ src: 'www.example.com', controller: this.controller }) 11340 } 11341 } 11342} 11343``` 11344 11345### getAccessibleGeolocation 11346 11347static getAccessibleGeolocation(origin: string, callback: AsyncCallback\<boolean>, incognito?: boolean): void 11348 11349以回调方式异步获取指定源的地理位置权限状态。 11350 11351**系统能力:** SystemCapability.Web.Webview.Core 11352 11353**参数:** 11354 11355| 参数名 | 类型 | 必填 | 说明 | 11356| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 11357| origin | string | 是 | 指定源的字符串索引 | 11358| callback | AsyncCallback\<boolean> | 是 | 返回指定源的地理位置权限状态。获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11359| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以回调方式异步获取指定源的地理位置权限状态。 | 11360 11361**错误码:** 11362 11363以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11364 11365| 错误码ID | 错误信息 | 11366| -------- | ------------------------------------------------------ | 11367| 17100011 | Invalid origin. | 11368| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11369 11370**示例:** 11371 11372```ts 11373// xxx.ets 11374import { webview } from '@kit.ArkWeb'; 11375import { BusinessError } from '@kit.BasicServicesKit'; 11376 11377@Entry 11378@Component 11379struct WebComponent { 11380 controller: webview.WebviewController = new webview.WebviewController(); 11381 origin: string = "file:///"; 11382 11383 build() { 11384 Column() { 11385 Button('getAccessibleGeolocation') 11386 .onClick(() => { 11387 try { 11388 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 11389 if (error) { 11390 console.error(`getAccessibleGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11391 return; 11392 } 11393 console.log('getAccessibleGeolocationAsync result: ' + result); 11394 }); 11395 } catch (error) { 11396 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11397 } 11398 }) 11399 Web({ src: 'www.example.com', controller: this.controller }) 11400 } 11401 } 11402} 11403``` 11404 11405### getAccessibleGeolocation 11406 11407static getAccessibleGeolocation(origin: string, incognito?: boolean): Promise\<boolean> 11408 11409以Promise方式异步获取指定源的地理位置权限状态。 11410 11411**系统能力:** SystemCapability.Web.Webview.Core 11412 11413**参数:** 11414 11415| 参数名 | 类型 | 必填 | 说明 | 11416| ------ | -------- | ---- | -------------------- | 11417| origin | string | 是 | 指定源的字符串索引。 | 11418| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取指定源的地理位置权限状态,false表示正常非隐私模式下以Promise方式异步获取指定源的地理位置权限状态。 | 11419 11420**返回值:** 11421 11422| 类型 | 说明 | 11423| ---------------- | ------------------------------------------------------------ | 11424| Promise\<boolean> | Promise实例,用于获取指定源的权限状态,获取成功,true表示已授权,false表示拒绝访问。获取失败,表示不存在指定源的权限状态。 | 11425 11426**错误码:** 11427 11428以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11429 11430| 错误码ID | 错误信息 | 11431| -------- | ------------------------------------------------------ | 11432| 17100011 | Invalid origin. | 11433| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11434 11435**示例:** 11436 11437```ts 11438// xxx.ets 11439import { webview } from '@kit.ArkWeb'; 11440import { BusinessError } from '@kit.BasicServicesKit'; 11441 11442@Entry 11443@Component 11444struct WebComponent { 11445 controller: webview.WebviewController = new webview.WebviewController(); 11446 origin: string = "file:///"; 11447 11448 build() { 11449 Column() { 11450 Button('getAccessibleGeolocation') 11451 .onClick(() => { 11452 try { 11453 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin) 11454 .then(result => { 11455 console.log('getAccessibleGeolocationPromise result: ' + result); 11456 }).catch((error: BusinessError) => { 11457 console.error(`getAccessibleGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11458 }); 11459 } catch (error) { 11460 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11461 } 11462 }) 11463 Web({ src: 'www.example.com', controller: this.controller }) 11464 } 11465 } 11466} 11467``` 11468 11469### getStoredGeolocation 11470 11471static getStoredGeolocation(callback: AsyncCallback\<Array\<string>>, incognito?: boolean): void 11472 11473以回调方式异步获取已存储地理位置权限状态的所有源信息。 11474 11475**系统能力:** SystemCapability.Web.Webview.Core 11476 11477**参数:** 11478 11479| 参数名 | 类型 | 必填 | 说明 | 11480| -------- | ---------------------------- | ---- | ---------------------------------------- | 11481| callback | AsyncCallback\<Array\<string>> | 是 | 返回已存储地理位置权限状态的所有源信息。 | 11482| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以回调方式异步获取已存储地理位置权限状态的所有源信息。 | 11483 11484**错误码:** 11485 11486以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11487 11488| 错误码ID | 错误信息 | 11489| -------- | ------------------------------------------------------ | 11490| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 11491 11492**示例:** 11493 11494```ts 11495// xxx.ets 11496import { webview } from '@kit.ArkWeb'; 11497import { BusinessError } from '@kit.BasicServicesKit'; 11498 11499@Entry 11500@Component 11501struct WebComponent { 11502 controller: webview.WebviewController = new webview.WebviewController(); 11503 11504 build() { 11505 Column() { 11506 Button('getStoredGeolocation') 11507 .onClick(() => { 11508 try { 11509 webview.GeolocationPermissions.getStoredGeolocation((error, origins) => { 11510 if (error) { 11511 console.error(`getStoredGeolocationAsync error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11512 return; 11513 } 11514 let origins_str: string = origins.join(); 11515 console.log('getStoredGeolocationAsync origins: ' + origins_str); 11516 }); 11517 } catch (error) { 11518 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11519 } 11520 }) 11521 Web({ src: 'www.example.com', controller: this.controller }) 11522 } 11523 } 11524} 11525``` 11526 11527### getStoredGeolocation 11528 11529static getStoredGeolocation(incognito?: boolean): Promise\<Array\<string>> 11530 11531以Promise方式异步获取已存储地理位置权限状态的所有源信息。 11532 11533**系统能力:** SystemCapability.Web.Webview.Core 11534 11535**参数:** 11536 11537| 参数名 | 类型 | 必填 | 说明 | 11538| -------- | ---------------------------- | ---- | ---------------------------------------- | 11539| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息,false表示正常非隐私模式下以Promise方式异步获取已存储地理位置权限状态的所有源信息。 | 11540 11541**返回值:** 11542 11543| 类型 | 说明 | 11544| ---------------------- | --------------------------------------------------------- | 11545| Promise\<Array\<string>> | Promise实例,用于获取已存储地理位置权限状态的所有源信息。 | 11546 11547**错误码:** 11548 11549以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11550 11551| 错误码ID | 错误信息 | 11552| -------- | ------------------------------------------------------ | 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 11567 build() { 11568 Column() { 11569 Button('getStoredGeolocation') 11570 .onClick(() => { 11571 try { 11572 webview.GeolocationPermissions.getStoredGeolocation() 11573 .then(origins => { 11574 let origins_str: string = origins.join(); 11575 console.log('getStoredGeolocationPromise origins: ' + origins_str); 11576 }).catch((error: BusinessError) => { 11577 console.error(`getStoredGeolocationPromise error, ErrorCode: ${error.code}, Message: ${error.message}`); 11578 }); 11579 } catch (error) { 11580 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11581 } 11582 }) 11583 Web({ src: 'www.example.com', controller: this.controller }) 11584 } 11585 } 11586} 11587``` 11588 11589### deleteAllGeolocation 11590 11591static deleteAllGeolocation(incognito?: boolean): void 11592 11593清除所有来源的地理位置权限状态。 11594 11595**系统能力:** SystemCapability.Web.Webview.Core 11596 11597**参数:** 11598 11599| 参数名 | 类型 | 必填 | 说明 | 11600| -------- | ---------------------------- | ---- | ---------------------------------------- | 11601| incognito<sup>11+</sup> | boolean | 否 | true表示获取隐私模式下清除所有来源的地理位置权限状态,false表示正常非隐私模式下清除所有来源的地理位置权限状态。 | 11602 11603**示例:** 11604 11605```ts 11606// xxx.ets 11607import { webview } from '@kit.ArkWeb'; 11608import { BusinessError } from '@kit.BasicServicesKit'; 11609 11610@Entry 11611@Component 11612struct WebComponent { 11613 controller: webview.WebviewController = new webview.WebviewController(); 11614 11615 build() { 11616 Column() { 11617 Button('deleteAllGeolocation') 11618 .onClick(() => { 11619 try { 11620 webview.GeolocationPermissions.deleteAllGeolocation(); 11621 } catch (error) { 11622 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 11623 } 11624 }) 11625 Web({ src: 'www.example.com', controller: this.controller }) 11626 } 11627 } 11628} 11629``` 11630## WebHeader 11631 11632Web组件返回的请求/响应头对象。 11633 11634**系统能力:** SystemCapability.Web.Webview.Core 11635 11636| 名称 | 类型 | 可读 | 可写 |说明 | 11637| ----------- | ------ | -----|------|------------------- | 11638| headerKey | string | 是 | 是 | 请求/响应头的key。 | 11639| headerValue | string | 是 | 是 | 请求/响应头的value。 | 11640 11641## RequestInfo<sup>12+</sup> 11642 11643Web组件发送的资源请求信息。 11644 11645**系统能力:**: SystemCapability.Web.Webview.Core 11646 11647| 名称 | 类型 | 可读 | 可写 |说明 | 11648| ---------| ------ | -----|------|-------- | 11649| url | string | 是 | 是 | 请求的链接。 | 11650| method | string | 是 | 是 | 请求的方法。 | 11651| formData | string | 是 | 是 | 请求的表单数据。 | 11652 11653## WebHitTestType 11654 11655[getHitTest](#gethittest)接口用于指示游标节点。 11656 11657**系统能力:** SystemCapability.Web.Webview.Core 11658 11659| 名称 | 值 | 说明 | 11660| ------------- | -- |----------------------------------------- | 11661| EditText | 0 |可编辑的区域。 | 11662| Email | 1 |电子邮件地址。 | 11663| HttpAnchor | 2 |超链接,其中src为http。 | 11664| HttpAnchorImg | 3 |带有超链接的图片,其中src为http + HTML::img。 | 11665| Img | 4 |HTML::img标签。 | 11666| Map | 5 |地理地址。 | 11667| Phone | 6 |电话号码。 | 11668| Unknown | 7 |未知内容。 | 11669 11670## SecurityLevel<sup>11+</sup> 11671 11672当前网页的安全级别。 11673 11674**系统能力:** SystemCapability.Web.Webview.Core 11675 11676| 名称 | 值 | 说明 | 11677| ------------- | -- |----------------------------------------- | 11678| NONE | 0 |页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。| 11679| SECURE | 1 |页面安全,页面使用的是HTTPS协议,且使用了信任的证书。| 11680| WARNING | 2 |页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。| 11681| DANGEROUS | 3 |页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。 | 11682 11683## HitTestValue 11684 11685提供点击区域的元素信息。示例代码参考[getHitTestValue](#gethittestvalue)。 11686 11687**系统能力:** SystemCapability.Web.Webview.Core 11688 11689| 名称 | 类型 | 可读 | 可写 | 说明| 11690| ---- | ---- | ---- | ---- |---- | 11691| type | [WebHitTestType](#webhittesttype) | 是 | 是 | 当前被点击区域的元素类型。| 11692| extra | string | 是 | 是 |点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。 | 11693 11694## WebMessage 11695 11696type WebMessage = ArrayBuffer | string 11697 11698用于描述[WebMessagePort](#webmessageport)所支持的数据类型。 11699 11700**系统能力:** SystemCapability.Web.Webview.Core 11701 11702| 类型 | 说明 | 11703| -------- | -------------------------------------- | 11704| string | 字符串类型数据。 | 11705| ArrayBuffer | 二进制类型数据。 | 11706 11707## JsMessageType<sup>10+</sup> 11708 11709[runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 11710 11711**系统能力:** SystemCapability.Web.Webview.Core 11712 11713| 名称 | 值 | 说明 | 11714| ------------ | -- |--------------------------------- | 11715| NOT_SUPPORT | 0 |不支持的数据类型。| 11716| STRING | 1 |字符串类型。| 11717| NUMBER | 2 |数值类型。| 11718| BOOLEAN | 3 |布尔类型。| 11719| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11720| ARRAY | 5 |数组类型| 11721 11722## WebMessageType<sup>10+</sup> 11723 11724[webMessagePort](#webmessageport)接口所支持的数据类型。 11725 11726**系统能力:** SystemCapability.Web.Webview.Core 11727 11728| 名称 | 值 | 说明 | 11729| ------------ | -- |------------------------------- | 11730| NOT_SUPPORT | 0 |不支持的数据类型。| 11731| STRING | 1 |字符串类型。| 11732| NUMBER | 2 |数值类型。| 11733| BOOLEAN | 3 |布尔类型。| 11734| ARRAY_BUFFER | 4 |原始二进制数据缓冲区。| 11735| ARRAY | 5 |数组类型。| 11736| ERROR | 6 |错误类型。| 11737 11738## MediaPlaybackState<sup>12+</sup> 11739 11740当前网页的播控状态。 11741 11742**系统能力:** SystemCapability.Web.Webview.Core 11743 11744| 名称 | 值 | 说明 | 11745| ------- | ---- | ------------------ | 11746| NONE | 0 | 页面无音视频启播。 | 11747| PLAYING | 1 | 页面音视频播放中。 | 11748| PAUSED | 2 | 页面音视频暂停。 | 11749| STOPPED | 3 | 页面音视频停止。 | 11750 11751## RenderProcessMode<sup>12+</sup> 11752 11753ArkWeb渲染子进程模式类型。 11754 11755**系统能力:** SystemCapability.Web.Webview.Core 11756 11757| 名称 | 值 | 说明 | 11758| ------------- | -- |----------------------------------------- | 11759| SINGLE | 0 |ArkWeb单渲染子进程模式。该模式下,多个Web复用一个渲染子进程。| 11760| MULTIPLE | 1 |ArkWeb多渲染子进程模式。该模式下,每个Web一个渲染子进程。| 11761 11762 11763## JsMessageExt<sup>10+</sup> 11764 11765[runJavaScriptExt](#runjavascriptext10)接口执行脚本返回的数据对象。 11766 11767### getType<sup>10+</sup> 11768 11769getType(): JsMessageType 11770 11771获取数据对象的类型。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11772 11773**系统能力:** SystemCapability.Web.Webview.Core 11774 11775**返回值:** 11776 11777| 类型 | 说明 | 11778| --------------| --------------------------------------------------------- | 11779| [JsMessageType](#jsmessagetype10) | [runJavaScriptExt](#runjavascriptext10)接口脚本执行后返回的结果的类型。 | 11780 11781### getString<sup>10+</sup> 11782 11783getString(): string 11784 11785获取数据对象的字符串类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11786 11787**系统能力:** SystemCapability.Web.Webview.Core 11788 11789**返回值:** 11790 11791| 类型 | 说明 | 11792| --------------| ------------- | 11793| string | 返回字符串类型的数据。 | 11794 11795**错误码:** 11796 11797以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11798 11799| 错误码ID | 错误信息 | 11800| -------- | ------------------------------------- | 11801| 17100014 | The type and value of the message do not match. | 11802 11803### getNumber<sup>10+</sup> 11804 11805getNumber(): number 11806 11807获取数据对象的数值类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11808 11809**系统能力:** SystemCapability.Web.Webview.Core 11810 11811**返回值:** 11812 11813| 类型 | 说明 | 11814| --------------| ------------- | 11815| number | 返回数值类型的数据。 | 11816 11817**错误码:** 11818 11819以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11820 11821| 错误码ID | 错误信息 | 11822| -------- | ------------------------------------- | 11823| 17100014 | The type and value of the message do not match. | 11824 11825### getBoolean<sup>10+</sup> 11826 11827getBoolean(): boolean 11828 11829获取数据对象的布尔类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11830 11831**系统能力:** SystemCapability.Web.Webview.Core 11832 11833**返回值:** 11834 11835| 类型 | 说明 | 11836| --------------| ------------- | 11837| boolean | 返回布尔类型的数据。 | 11838 11839**错误码:** 11840 11841以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11842 11843| 错误码ID | 错误信息 | 11844| -------- | ------------------------------------- | 11845| 17100014 | The type and value of the message do not match. | 11846 11847### getArrayBuffer<sup>10+</sup> 11848 11849getArrayBuffer(): ArrayBuffer 11850 11851获取数据对象的原始二进制数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11852 11853**系统能力:** SystemCapability.Web.Webview.Core 11854 11855**返回值:** 11856 11857| 类型 | 说明 | 11858| --------------| ------------- | 11859| ArrayBuffer | 返回原始二进制数据。 | 11860 11861**错误码:** 11862 11863以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11864 11865| 错误码ID | 错误信息 | 11866| -------- | ------------------------------------- | 11867| 17100014 | The type and value of the message do not match. | 11868 11869### getArray<sup>10+</sup> 11870 11871getArray(): Array\<string | number | boolean\> 11872 11873获取数据对象的数组类型数据。完整示例代码参考[runJavaScriptExt](#runjavascriptext10)。 11874 11875**系统能力:** SystemCapability.Web.Webview.Core 11876 11877**返回值:** 11878 11879| 类型 | 说明 | 11880| --------------| ------------- | 11881| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 11882 11883**错误码:** 11884 11885以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11886 11887| 错误码ID | 错误信息 | 11888| -------- | ------------------------------------- | 11889| 17100014 | The type and value of the message do not match. | 11890 11891## WebMessageExt<sup>10+</sup> 11892 11893[webMessagePort](#webmessageport)接口接收、发送的数据对象。 11894 11895### getType<sup>10+</sup> 11896 11897getType(): WebMessageType 11898 11899获取数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11900 11901**系统能力:** SystemCapability.Web.Webview.Core 11902 11903**返回值:** 11904 11905| 类型 | 说明 | 11906| --------------| --------------------------------------------------------- | 11907| [WebMessageType](#webmessagetype10) | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 11908 11909### getString<sup>10+</sup> 11910 11911getString(): string 11912 11913获取数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11914 11915**系统能力:** SystemCapability.Web.Webview.Core 11916 11917**返回值:** 11918 11919| 类型 | 说明 | 11920| --------------| ------------- | 11921| string | 返回字符串类型的数据。 | 11922 11923**错误码:** 11924 11925以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11926 11927| 错误码ID | 错误信息 | 11928| -------- | ------------------------------------- | 11929| 17100014 | The type and value of the message do not match. | 11930 11931### getNumber<sup>10+</sup> 11932 11933getNumber(): number 11934 11935获取数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11936 11937**系统能力:** SystemCapability.Web.Webview.Core 11938 11939**返回值:** 11940 11941| 类型 | 说明 | 11942| --------------| ------------- | 11943| number | 返回数值类型的数据。 | 11944 11945**错误码:** 11946 11947以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11948 11949| 错误码ID | 错误信息 | 11950| -------- | ------------------------------------- | 11951| 17100014 | The type and value of the message do not match. | 11952 11953### getBoolean<sup>10+</sup> 11954 11955getBoolean(): boolean 11956 11957获取数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11958 11959**系统能力:** SystemCapability.Web.Webview.Core 11960 11961**返回值:** 11962 11963| 类型 | 说明 | 11964| --------------| ------------- | 11965| boolean | 返回布尔类型的数据。 | 11966 11967**错误码:** 11968 11969以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11970 11971| 错误码ID | 错误信息 | 11972| -------- | ------------------------------------- | 11973| 17100014 | The type and value of the message do not match. | 11974 11975### getArrayBuffer<sup>10+</sup> 11976 11977getArrayBuffer(): ArrayBuffer 11978 11979获取数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 11980 11981**系统能力:** SystemCapability.Web.Webview.Core 11982 11983**返回值:** 11984 11985| 类型 | 说明 | 11986| --------------| ------------- | 11987| ArrayBuffer | 返回原始二进制数据。 | 11988 11989**错误码:** 11990 11991以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 11992 11993| 错误码ID | 错误信息 | 11994| -------- | ------------------------------------- | 11995| 17100014 | The type and value of the message do not match. | 11996 11997### getArray<sup>10+</sup> 11998 11999getArray(): Array\<string | number | boolean\> 12000 12001获取数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12002 12003**系统能力:** SystemCapability.Web.Webview.Core 12004 12005**返回值:** 12006 12007| 类型 | 说明 | 12008| --------------| ------------- | 12009| Array\<string \| number \| boolean\> | 返回数组类型的数据。 | 12010 12011**错误码:** 12012 12013以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12014 12015| 错误码ID | 错误信息 | 12016| -------- | ------------------------------------- | 12017| 17100014 | The type and value of the message do not match. | 12018 12019### getError<sup>10+</sup> 12020 12021getError(): Error 12022 12023获取数据对象的错误类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12024 12025**系统能力:** SystemCapability.Web.Webview.Core 12026 12027**返回值:** 12028 12029| 类型 | 说明 | 12030| --------------| ------------- | 12031| Error | 返回错误对象类型的数据。 | 12032 12033**错误码:** 12034 12035以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12036 12037| 错误码ID | 错误信息 | 12038| -------- | ------------------------------------- | 12039| 17100014 | The type and value of the message do not match. | 12040 12041### setType<sup>10+</sup> 12042 12043setType(type: WebMessageType): void 12044 12045设置数据对象的类型。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12046 12047**系统能力:** SystemCapability.Web.Webview.Core 12048 12049**参数:** 12050 12051| 参数名 | 类型 | 必填 | 说明 | 12052| ------ | ------ | ---- | ---------------------- | 12053| type | [WebMessageType](#webmessagetype10) | 是 | [webMessagePort](#webmessageport)接口所支持的数据类型。 | 12054 12055**错误码:** 12056 12057| 错误码ID | 错误信息 | 12058| -------- | ------------------------------------- | 12059| 17100014 | The type and value of the message do not match. | 12060| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12061 12062### setString<sup>10+</sup> 12063 12064setString(message: string): void 12065 12066设置数据对象的字符串类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12067 12068**系统能力:** SystemCapability.Web.Webview.Core 12069 12070**参数:** 12071 12072| 参数名 | 类型 | 必填 | 说明 | 12073| ------ | ------ | ---- | -------------------- | 12074| message | string | 是 | 字符串类型数据。 | 12075 12076**错误码:** 12077 12078| 错误码ID | 错误信息 | 12079| -------- | ------------------------------------- | 12080| 17100014 | The type and value of the message do not match. | 12081| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12082 12083### setNumber<sup>10+</sup> 12084 12085setNumber(message: number): void 12086 12087设置数据对象的数值类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12088 12089**系统能力:** SystemCapability.Web.Webview.Core 12090 12091**参数:** 12092 12093| 参数名 | 类型 | 必填 | 说明 | 12094| ------ | ------ | ---- | -------------------- | 12095| message | number | 是 | 数值类型数据。 | 12096 12097**错误码:** 12098 12099| 错误码ID | 错误信息 | 12100| -------- | ------------------------------------- | 12101| 17100014 | The type and value of the message do not match. | 12102| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12103 12104### setBoolean<sup>10+</sup> 12105 12106setBoolean(message: boolean): void 12107 12108设置数据对象的布尔类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12109 12110**系统能力:** SystemCapability.Web.Webview.Core 12111 12112**参数:** 12113 12114| 参数名 | 类型 | 必填 | 说明 | 12115| ------ | ------ | ---- | -------------------- | 12116| message | boolean | 是 | 布尔类型数据。 | 12117 12118**错误码:** 12119 12120| 错误码ID | 错误信息 | 12121| -------- | ------------------------------------- | 12122| 17100014 | The type and value of the message do not match. | 12123| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12124 12125### setArrayBuffer<sup>10+</sup> 12126 12127setArrayBuffer(message: ArrayBuffer): void 12128 12129设置数据对象的原始二进制数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12130 12131**系统能力:** SystemCapability.Web.Webview.Core 12132 12133**参数:** 12134 12135| 参数名 | 类型 | 必填 | 说明 | 12136| ------ | ------ | ---- | -------------------- | 12137| message | ArrayBuffer | 是 | 原始二进制类型数据。 | 12138 12139**错误码:** 12140 12141以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12142 12143| 错误码ID | 错误信息 | 12144| -------- | ------------------------------------- | 12145| 17100014 | The type and value of the message do not match. | 12146| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12147 12148### setArray<sup>10+</sup> 12149 12150setArray(message: Array\<string | number | boolean\>): void 12151 12152设置数据对象的数组类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12153 12154**系统能力:** SystemCapability.Web.Webview.Core 12155 12156**参数:** 12157 12158| 参数名 | 类型 | 必填 | 说明 | 12159| ------ | ------ | ---- | -------------------- | 12160| message | Array\<string \| number \| boolean\> | 是 | 数组类型数据。 | 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| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12170 12171### setError<sup>10+</sup> 12172 12173setError(message: Error): void 12174 12175设置数据对象的错误对象类型数据。完整示例代码参考[onMessageEventExt](#onmessageeventext10)。 12176 12177**系统能力:** SystemCapability.Web.Webview.Core 12178 12179**参数:** 12180 12181| 参数名 | 类型 | 必填 | 说明 | 12182| ------ | ------ | ---- | -------------------- | 12183| message | Error | 是 | 错误对象类型数据。 | 12184 12185**错误码:** 12186 12187以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12188 12189| 错误码ID | 错误信息 | 12190| -------- | ------------------------------------- | 12191| 17100014 | The type and value of the message do not match. | 12192| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12193 12194## WebStorageOrigin 12195 12196提供Web SQL数据库的使用信息。 12197 12198**系统能力:** SystemCapability.Web.Webview.Core 12199 12200| 名称 | 类型 | 可读 | 可写 | 说明 | 12201| ------ | ------ | ---- | ---- | ---- | 12202| origin | string | 是 | 是 | 指定源的字符串索引。 | 12203| usage | number | 是 | 是 | 指定源的存储量。 | 12204| quota | number | 是 | 是 | 指定源的存储配额。 | 12205 12206## BackForwardList 12207 12208当前Webview的历史信息列表。 12209 12210**系统能力:** SystemCapability.Web.Webview.Core 12211 12212| 名称 | 类型 | 可读 | 可写 | 说明 | 12213| ------------ | ------ | ---- | ---- | ------------------------------------------------------------ | 12214| currentIndex | number | 是 | 是 | 当前在页面历史列表中的索引。 | 12215| size | number | 是 | 是 | 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。 | 12216 12217### getItemAtIndex 12218 12219getItemAtIndex(index: number): HistoryItem 12220 12221获取历史列表中指定索引的历史记录项信息。 12222 12223**系统能力:** SystemCapability.Web.Webview.Core 12224 12225**参数:** 12226 12227| 参数名 | 类型 | 必填 | 说明 | 12228| ------ | ------ | ---- | ---------------------- | 12229| index | number | 是 | 指定历史列表中的索引。 | 12230 12231**返回值:** 12232 12233| 类型 | 说明 | 12234| --------------------------- | ------------ | 12235| [HistoryItem](#historyitem) | 历史记录项。 | 12236 12237**错误码:** 12238 12239以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 12240 12241| 错误码ID | 错误信息 | 12242| -------- | ------------------------------------------------------ | 12243| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 12244 12245**示例:** 12246 12247```ts 12248// xxx.ets 12249import { webview } from '@kit.ArkWeb'; 12250import { BusinessError } from '@kit.BasicServicesKit'; 12251import { image } from '@kit.ImageKit'; 12252 12253@Entry 12254@Component 12255struct WebComponent { 12256 controller: webview.WebviewController = new webview.WebviewController(); 12257 @State icon: image.PixelMap | undefined = undefined; 12258 12259 build() { 12260 Column() { 12261 Button('getBackForwardEntries') 12262 .onClick(() => { 12263 try { 12264 let list = this.controller.getBackForwardEntries(); 12265 let historyItem = list.getItemAtIndex(list.currentIndex); 12266 console.log("HistoryItem: " + JSON.stringify(historyItem)); 12267 this.icon = historyItem.icon; 12268 } catch (error) { 12269 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12270 } 12271 }) 12272 Web({ src: 'www.example.com', controller: this.controller }) 12273 } 12274 } 12275} 12276``` 12277 12278## HistoryItem 12279 12280页面历史记录项。 12281 12282**系统能力:** SystemCapability.Web.Webview.Core 12283 12284| 名称 | 类型 | 可读 | 可写 | 说明 | 12285| ------------- | -------------------------------------- | ---- | ---- | ---------------------------- | 12286| icon | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 否 | 历史页面图标的PixelMap对象。 | 12287| historyUrl | string | 是 | 是 | 历史记录项的url地址。 | 12288| historyRawUrl | string | 是 | 是 | 历史记录项的原始url地址。 | 12289| title | string | 是 | 是 | 历史记录项的标题。 | 12290 12291## WebCustomScheme 12292 12293自定义协议配置。 12294 12295**系统能力:** SystemCapability.Web.Webview.Core 12296 12297| 名称 | 类型 | 可读 | 可写 | 说明 | 12298| -------------- | --------- | ---- | ---- | ---------------------------- | 12299| schemeName | string | 是 | 是 | 自定义协议名称。最大长度为32,其字符仅支持小写字母、数字、'.'、'+'、'-', 同时需要以字母开头。 | 12300| isSupportCORS | boolean | 是 | 是 | 是否支持跨域请求。 | 12301| isSupportFetch | boolean | 是 | 是 | 是否支持fetch请求。 | 12302| isStandard<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将作为标准scheme进行处理。标准scheme需要符合RFC 1738第3.1节中定义的URL规范化和解析规则。 | 12303| isLocal<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与应用于“FILE”的安全规则相同的安全规则来处理。 | 12304| isDisplayIsolated<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的内容是否只能从相同scheme的其他内容中显示或访问。 | 12305| isSecure<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme是否将使用与应用于“https”的安全规则相同的安全规则来处理。 | 12306| isCspBypassing<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme可以绕过内容安全策略(CSP)检查。在大多数情况下,当设置isStandard为true时,不应设置此值。 | 12307| isCodeCacheSupported<sup>12+</sup> | boolean | 是 | 是 | 设置了该选项的scheme的js资源,支持生成code cache。 | 12308 12309## SecureDnsMode<sup>10+</sup> 12310 12311Web组件使用HTTPDNS的模式。 12312 12313**系统能力:** SystemCapability.Web.Webview.Core 12314 12315| 名称 | 值 | 说明 | 12316| ------------- | -- |----------------------------------------- | 12317| OFF | 0 |不使用HTTPDNS, 可以用于撤销之前使用的HTTPDNS配置。| 12318| AUTO | 1 |自动模式,用于解析的设定dns服务器不可用时,可自动回落至系统DNS。| 12319| SECURE_ONLY | 2 |强制使用设定的HTTPDNS服务器进行域名解析。| 12320 12321## WebDownloadState<sup>11+</sup> 12322 12323下载任务的状态。 12324 12325**系统能力:** SystemCapability.Web.Webview.Core 12326 12327| 名称 | 值 | 说明 | 12328| ------------- | -- |----------------------------------------- | 12329| IN_PROGRESS | 0 |下载任务正在进行中。| 12330| COMPLETED | 1 |下载任务已经完成。| 12331| CANCELED | 2 |下载任务已经被取消。| 12332| INTERRUPTED | 3 |下载任务被中断。| 12333| PENDING | 4 |下载任务等待开始。| 12334| PAUSED | 5 |下载任务已经被暂停。| 12335| UNKNOWN | 6 |下载任务未知状态。| 12336 12337## WebDownloadErrorCode<sup>11+</sup> 12338 12339下载任务的错误码。 12340 12341**系统能力:** SystemCapability.Web.Webview.Core 12342 12343| 名称 | 值 | 说明 | 12344| ------------- | -- |----------------------------------------- | 12345| ERROR_UNKNOWN | 0 |未知的错误。| 12346| FILE_FAILED | 1 | 常规文件操作失败。| 12347| FILE_ACCESS_DENIED | 2 | 没有权限访问文件。| 12348| FILE_NO_SPACE | 3 | 磁盘没有足够的空间。| 12349| FILE_NAME_TOO_LONG | 5 | 文件名字过长。| 12350| FILE_TOO_LARGE | 6 | 文件太大。| 12351| FILE_TRANSIENT_ERROR | 10 | 出现了一些临时问题,例如内存不足、文件正在使用以及同时打开的文件过多。| 12352| FILE_BLOCKED | 11 | 由于某些本地策略,文件被阻止访问。| 12353| FILE_TOO_SHORT | 13 | 当尝试恢复下载时,发现文件不够长,可能该文件已不存在。| 12354| FILE_HASH_MISMATCH | 14 | 哈希不匹配。| 12355| FILE_SAME_AS_SOURCE | 15 | 文件已存在。| 12356| NETWORK_FAILED | 20 | 一般网络错误。| 12357| NETWORK_TIMEOUT | 21 | 网络超时。| 12358| NETWORK_DISCONNECTED | 22 | 网络断开连接。| 12359| NETWORK_SERVER_DOWN | 23 | 服务器关闭。| 12360| NETWORK_INVALID_REQUEST | 24 | 无效的网络请求,可能重定向到不支持的方案或无效的URL。| 12361| SERVER_FAILED | 30 | 服务器返回了一个一般性错误。| 12362| SERVER_NO_RANGE | 31 | 服务器不支持范围请求。| 12363| SERVER_BAD_CONTENT | 33 | 服务器没有请求的数据。| 12364| SERVER_UNAUTHORIZED | 34 | 服务器不允许下载该文件。| 12365| SERVER_CERT_PROBLEM | 35 | 服务器证书错误。| 12366| SERVER_FORBIDDEN | 36 | 服务器访问被禁止。| 12367| SERVER_UNREACHABLE | 37 | 无法访问服务器。| 12368| SERVER_CONTENT_LENGTH_MISMATCH | 38 | 接收到的数据与内容长度不匹配。| 12369| SERVER_CROSS_ORIGIN_REDIRECT | 39 | 发生意外的跨站重定向。| 12370| USER_CANCELED | 40 | 用户取消了下载。| 12371| USER_SHUTDOWN | 41 | 用户关闭了应用。| 12372| CRASH | 50 | 应用发生了崩溃。| 12373 12374## WebDownloadItem<sup>11+</sup> 12375 12376 表示下载任务,您可以使用此对象来操作相应的下载任务。 12377 12378> **说明:** 12379> 12380> 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。 12381 12382### getGuid<sup>11+</sup> 12383 12384getGuid(): string 12385 12386获取下载任务的唯一ID。 12387 12388**系统能力:** SystemCapability.Web.Webview.Core 12389 12390**返回值:** 12391 12392| 类型 | 说明 | 12393| ------ | ------------------------- | 12394| string | 下载任务的唯一ID。 | 12395 12396**示例:** 12397 12398```ts 12399// xxx.ets 12400import { webview } from '@kit.ArkWeb'; 12401import { BusinessError } from '@kit.BasicServicesKit'; 12402 12403@Entry 12404@Component 12405struct WebComponent { 12406 controller: webview.WebviewController = new webview.WebviewController(); 12407 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12408 12409 build() { 12410 Column() { 12411 Button('setDownloadDelegate') 12412 .onClick(() => { 12413 try { 12414 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12415 console.log("will start a download."); 12416 // 传入一个下载路径,并开始下载。 12417 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12418 }) 12419 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12420 console.log("download update guid: " + webDownloadItem.getGuid()); 12421 }) 12422 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12423 console.log("download failed guid: " + webDownloadItem.getGuid()); 12424 }) 12425 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12426 console.log("download finish guid: " + webDownloadItem.getGuid()); 12427 }) 12428 this.controller.setDownloadDelegate(this.delegate); 12429 } catch (error) { 12430 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12431 } 12432 }) 12433 Button('startDownload') 12434 .onClick(() => { 12435 try { 12436 this.controller.startDownload('https://www.example.com'); 12437 } catch (error) { 12438 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12439 } 12440 }) 12441 Web({ src: 'www.example.com', controller: this.controller }) 12442 } 12443 } 12444} 12445``` 12446 12447### getCurrentSpeed<sup>11+</sup> 12448 12449getCurrentSpeed(): number 12450 12451获取下载的速度,单位:字节每秒。 12452 12453**系统能力:** SystemCapability.Web.Webview.Core 12454 12455**返回值:** 12456 12457| 类型 | 说明 | 12458| ------ | ------------------------- | 12459| number | 下载的速度(字节每秒)。 | 12460 12461**示例:** 12462 12463```ts 12464// xxx.ets 12465import { webview } from '@kit.ArkWeb'; 12466import { BusinessError } from '@kit.BasicServicesKit'; 12467 12468@Entry 12469@Component 12470struct WebComponent { 12471 controller: webview.WebviewController = new webview.WebviewController(); 12472 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12473 12474 build() { 12475 Column() { 12476 Button('setDownloadDelegate') 12477 .onClick(() => { 12478 try { 12479 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12480 console.log("will start a download."); 12481 // 传入一个下载路径,并开始下载。 12482 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12483 }) 12484 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12485 console.log("download update current speed: " + webDownloadItem.getCurrentSpeed()); 12486 }) 12487 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12488 console.log("download failed guid: " + webDownloadItem.getGuid()); 12489 }) 12490 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12491 console.log("download finish guid: " + webDownloadItem.getGuid()); 12492 }) 12493 this.controller.setDownloadDelegate(this.delegate); 12494 } catch (error) { 12495 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12496 } 12497 }) 12498 Button('startDownload') 12499 .onClick(() => { 12500 try { 12501 this.controller.startDownload('https://www.example.com'); 12502 } catch (error) { 12503 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12504 } 12505 }) 12506 Web({ src: 'www.example.com', controller: this.controller }) 12507 } 12508 } 12509} 12510``` 12511 12512### getPercentComplete<sup>11+</sup> 12513 12514getPercentComplete(): number 12515 12516获取下载的进度,100代表下载完成。 12517 12518**系统能力:** SystemCapability.Web.Webview.Core 12519 12520**返回值:** 12521 12522| 类型 | 说明 | 12523| ------ | ------------------------- | 12524| number | 下载完成的进度,100代表下载完成。 | 12525 12526**示例:** 12527 12528```ts 12529// xxx.ets 12530import { webview } from '@kit.ArkWeb'; 12531import { BusinessError } from '@kit.BasicServicesKit'; 12532 12533@Entry 12534@Component 12535struct WebComponent { 12536 controller: webview.WebviewController = new webview.WebviewController(); 12537 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12538 12539 build() { 12540 Column() { 12541 Button('setDownloadDelegate') 12542 .onClick(() => { 12543 try { 12544 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12545 console.log("will start a download."); 12546 // 传入一个下载路径,并开始下载。 12547 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12548 }) 12549 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12550 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12551 }) 12552 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12553 console.log("download failed guid: " + webDownloadItem.getGuid()); 12554 }) 12555 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12556 console.log("download finish guid: " + webDownloadItem.getGuid()); 12557 }) 12558 this.controller.setDownloadDelegate(this.delegate); 12559 } catch (error) { 12560 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12561 } 12562 }) 12563 Button('startDownload') 12564 .onClick(() => { 12565 try { 12566 this.controller.startDownload('https://www.example.com'); 12567 } catch (error) { 12568 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12569 } 12570 }) 12571 Web({ src: 'www.example.com', controller: this.controller }) 12572 } 12573 } 12574} 12575``` 12576 12577### getTotalBytes<sup>11+</sup> 12578 12579getTotalBytes(): number 12580 12581获取待下载文件的总长度。 12582 12583**系统能力:** SystemCapability.Web.Webview.Core 12584 12585**返回值:** 12586 12587| 类型 | 说明 | 12588| ------ | ------------------------- | 12589| number | 待下载文件的总长度。 | 12590 12591**示例:** 12592 12593```ts 12594// xxx.ets 12595import { webview } from '@kit.ArkWeb'; 12596import { BusinessError } from '@kit.BasicServicesKit'; 12597 12598@Entry 12599@Component 12600struct WebComponent { 12601 controller: webview.WebviewController = new webview.WebviewController(); 12602 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12603 12604 build() { 12605 Column() { 12606 Button('setDownloadDelegate') 12607 .onClick(() => { 12608 try { 12609 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12610 console.log("will start a download."); 12611 // 传入一个下载路径,并开始下载。 12612 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12613 }) 12614 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12615 console.log("download update total bytes: " + webDownloadItem.getTotalBytes()); 12616 }) 12617 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12618 console.log("download failed guid: " + webDownloadItem.getGuid()); 12619 }) 12620 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12621 console.log("download finish guid: " + webDownloadItem.getGuid()); 12622 }) 12623 this.controller.setDownloadDelegate(this.delegate); 12624 } catch (error) { 12625 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12626 } 12627 }) 12628 Button('startDownload') 12629 .onClick(() => { 12630 try { 12631 this.controller.startDownload('https://www.example.com'); 12632 } catch (error) { 12633 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12634 } 12635 }) 12636 Web({ src: 'www.example.com', controller: this.controller }) 12637 } 12638 } 12639} 12640``` 12641 12642### getState<sup>11+</sup> 12643 12644getState(): WebDownloadState 12645 12646获取下载的状态。 12647 12648**系统能力:** SystemCapability.Web.Webview.Core 12649 12650**返回值:** 12651 12652| 类型 | 说明 | 12653| ------ | ------------------------- | 12654| [WebDownloadState](#webdownloadstate11) | 下载的状态。 | 12655 12656**示例:** 12657 12658```ts 12659// xxx.ets 12660import { webview } from '@kit.ArkWeb'; 12661import { BusinessError } from '@kit.BasicServicesKit'; 12662 12663@Entry 12664@Component 12665struct WebComponent { 12666 controller: webview.WebviewController = new webview.WebviewController(); 12667 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12668 12669 build() { 12670 Column() { 12671 Button('setDownloadDelegate') 12672 .onClick(() => { 12673 try { 12674 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12675 console.log("will start a download."); 12676 // 传入一个下载路径,并开始下载。 12677 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12678 }) 12679 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12680 console.log("download update download state: " + webDownloadItem.getState()); 12681 }) 12682 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12683 console.log("download failed guid: " + webDownloadItem.getGuid()); 12684 }) 12685 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12686 console.log("download finish guid: " + webDownloadItem.getGuid()); 12687 }) 12688 this.controller.setDownloadDelegate(this.delegate); 12689 } catch (error) { 12690 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12691 } 12692 }) 12693 Button('startDownload') 12694 .onClick(() => { 12695 try { 12696 this.controller.startDownload('https://www.example.com'); 12697 } catch (error) { 12698 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12699 } 12700 }) 12701 Web({ src: 'www.example.com', controller: this.controller }) 12702 } 12703 } 12704} 12705``` 12706 12707### getLastErrorCode<sup>11+</sup> 12708 12709getLastErrorCode(): WebDownloadErrorCode 12710 12711获取下载的错误码。 12712 12713**系统能力:** SystemCapability.Web.Webview.Core 12714 12715**返回值:** 12716 12717| 类型 | 说明 | 12718| ------ | ------------------------- | 12719| [WebDownloadErrorCode](#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 | 12720 12721**示例:** 12722 12723```ts 12724// xxx.ets 12725import { webview } from '@kit.ArkWeb'; 12726import { BusinessError } from '@kit.BasicServicesKit'; 12727 12728@Entry 12729@Component 12730struct WebComponent { 12731 controller: webview.WebviewController = new webview.WebviewController(); 12732 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12733 12734 build() { 12735 Column() { 12736 Button('setDownloadDelegate') 12737 .onClick(() => { 12738 try { 12739 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12740 console.log("will start a download."); 12741 // 传入一个下载路径,并开始下载。 12742 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12743 }) 12744 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12745 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12746 }) 12747 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12748 console.log("download failed guid: " + webDownloadItem.getGuid()); 12749 console.log("download error code: " + webDownloadItem.getLastErrorCode()); 12750 }) 12751 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12752 console.log("download finish guid: " + webDownloadItem.getGuid()); 12753 }) 12754 this.controller.setDownloadDelegate(this.delegate); 12755 } catch (error) { 12756 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12757 } 12758 }) 12759 Button('startDownload') 12760 .onClick(() => { 12761 try { 12762 this.controller.startDownload('https://www.example.com'); 12763 } catch (error) { 12764 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12765 } 12766 }) 12767 Web({ src: 'www.example.com', controller: this.controller }) 12768 } 12769 } 12770} 12771``` 12772 12773### getMethod<sup>11+</sup> 12774 12775getMethod(): string 12776 12777获取下载任务的请求方式。 12778 12779**系统能力:** SystemCapability.Web.Webview.Core 12780 12781**返回值:** 12782 12783| 类型 | 说明 | 12784| ------ | ------------------------- | 12785| string | 下载的请求方式。 | 12786 12787**示例:** 12788 12789```ts 12790// xxx.ets 12791import { webview } from '@kit.ArkWeb'; 12792import { BusinessError } from '@kit.BasicServicesKit'; 12793 12794@Entry 12795@Component 12796struct WebComponent { 12797 controller: webview.WebviewController = new webview.WebviewController(); 12798 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12799 12800 build() { 12801 Column() { 12802 Button('setDownloadDelegate') 12803 .onClick(() => { 12804 try { 12805 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12806 console.log("will start a download, method:" + webDownloadItem.getMethod()); 12807 // 传入一个下载路径,并开始下载。 12808 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12809 }) 12810 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12811 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12812 }) 12813 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12814 console.log("download failed guid: " + webDownloadItem.getGuid()); 12815 }) 12816 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12817 console.log("download finish guid: " + webDownloadItem.getGuid()); 12818 }) 12819 this.controller.setDownloadDelegate(this.delegate); 12820 } catch (error) { 12821 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12822 } 12823 }) 12824 Button('startDownload') 12825 .onClick(() => { 12826 try { 12827 this.controller.startDownload('https://www.example.com'); 12828 } catch (error) { 12829 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12830 } 12831 }) 12832 Web({ src: 'www.example.com', controller: this.controller }) 12833 } 12834 } 12835} 12836``` 12837 12838### getMimeType<sup>11+</sup> 12839 12840getMimeType(): string 12841 12842获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。 12843 12844**系统能力:** SystemCapability.Web.Webview.Core 12845 12846**返回值:** 12847 12848| 类型 | 说明 | 12849| ------ | ------------------------- | 12850| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。| 12851 12852**示例:** 12853 12854```ts 12855// xxx.ets 12856import { webview } from '@kit.ArkWeb'; 12857import { BusinessError } from '@kit.BasicServicesKit'; 12858 12859@Entry 12860@Component 12861struct WebComponent { 12862 controller: webview.WebviewController = new webview.WebviewController(); 12863 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12864 12865 build() { 12866 Column() { 12867 Button('setDownloadDelegate') 12868 .onClick(() => { 12869 try { 12870 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12871 console.log("will start a download, mime type:" + webDownloadItem.getMimeType()); 12872 // 传入一个下载路径,并开始下载。 12873 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12874 }) 12875 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12876 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12877 }) 12878 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12879 console.log("download failed guid: " + webDownloadItem.getGuid()); 12880 }) 12881 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12882 console.log("download finish guid: " + webDownloadItem.getGuid()); 12883 }) 12884 this.controller.setDownloadDelegate(this.delegate); 12885 } catch (error) { 12886 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12887 } 12888 }) 12889 Button('startDownload') 12890 .onClick(() => { 12891 try { 12892 this.controller.startDownload('https://www.example.com'); 12893 } catch (error) { 12894 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12895 } 12896 }) 12897 Web({ src: 'www.example.com', controller: this.controller }) 12898 } 12899 } 12900} 12901``` 12902 12903### getUrl<sup>11+</sup> 12904 12905getUrl(): string 12906 12907获取下载的请求地址。 12908 12909**系统能力:** SystemCapability.Web.Webview.Core 12910 12911**返回值:** 12912 12913| 类型 | 说明 | 12914| ------ | ------------------------- | 12915| string | 下载的请求地址。 | 12916 12917**示例:** 12918 12919```ts 12920// xxx.ets 12921import { webview } from '@kit.ArkWeb'; 12922import { BusinessError } from '@kit.BasicServicesKit'; 12923 12924@Entry 12925@Component 12926struct WebComponent { 12927 controller: webview.WebviewController = new webview.WebviewController(); 12928 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12929 12930 build() { 12931 Column() { 12932 Button('setDownloadDelegate') 12933 .onClick(() => { 12934 try { 12935 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 12936 console.log("will start a download, url:" + webDownloadItem.getUrl()); 12937 // 传入一个下载路径,并开始下载。 12938 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 12939 }) 12940 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 12941 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 12942 }) 12943 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 12944 console.log("download failed guid: " + webDownloadItem.getGuid()); 12945 }) 12946 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 12947 console.log("download finish guid: " + webDownloadItem.getGuid()); 12948 }) 12949 this.controller.setDownloadDelegate(this.delegate); 12950 } catch (error) { 12951 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12952 } 12953 }) 12954 Button('startDownload') 12955 .onClick(() => { 12956 try { 12957 this.controller.startDownload('https://www.example.com'); 12958 } catch (error) { 12959 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 12960 } 12961 }) 12962 Web({ src: 'www.example.com', controller: this.controller }) 12963 } 12964 } 12965} 12966``` 12967 12968### getSuggestedFileName<sup>11+</sup> 12969 12970getSuggestedFileName(): string 12971 12972获取下载的建议文件名。 12973 12974**系统能力:** SystemCapability.Web.Webview.Core 12975 12976**返回值:** 12977 12978| 类型 | 说明 | 12979| ------ | ------------------------- | 12980| string | 下载的建议文件名。 | 12981 12982**示例:** 12983 12984```ts 12985// xxx.ets 12986import { webview } from '@kit.ArkWeb'; 12987import { BusinessError } from '@kit.BasicServicesKit'; 12988 12989@Entry 12990@Component 12991struct WebComponent { 12992 controller: webview.WebviewController = new webview.WebviewController(); 12993 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 12994 12995 build() { 12996 Column() { 12997 Button('setDownloadDelegate') 12998 .onClick(() => { 12999 try { 13000 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13001 console.log("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName()); 13002 // 传入一个下载路径,并开始下载。 13003 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13004 }) 13005 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13006 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13007 }) 13008 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13009 console.log("download failed guid: " + webDownloadItem.getGuid()); 13010 }) 13011 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13012 console.log("download finish guid: " + webDownloadItem.getGuid()); 13013 }) 13014 this.controller.setDownloadDelegate(this.delegate); 13015 } catch (error) { 13016 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13017 } 13018 }) 13019 Button('startDownload') 13020 .onClick(() => { 13021 try { 13022 this.controller.startDownload('https://www.example.com'); 13023 } catch (error) { 13024 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13025 } 13026 }) 13027 Web({ src: 'www.example.com', controller: this.controller }) 13028 } 13029 } 13030} 13031``` 13032 13033### getReceivedBytes<sup>11+</sup> 13034 13035getReceivedBytes(): number 13036 13037获取已经接收的字节数。 13038 13039**系统能力:** SystemCapability.Web.Webview.Core 13040 13041**返回值:** 13042 13043| 类型 | 说明 | 13044| ------ | ------------------------- | 13045| number | 已经接收的字节数。 | 13046 13047**示例:** 13048 13049```ts 13050// xxx.ets 13051import { webview } from '@kit.ArkWeb'; 13052import { BusinessError } from '@kit.BasicServicesKit'; 13053 13054@Entry 13055@Component 13056struct WebComponent { 13057 controller: webview.WebviewController = new webview.WebviewController(); 13058 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13059 13060 build() { 13061 Column() { 13062 Button('setDownloadDelegate') 13063 .onClick(() => { 13064 try { 13065 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13066 console.log("will start a download."); 13067 // 传入一个下载路径,并开始下载。 13068 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13069 }) 13070 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13071 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13072 console.log("download update received bytes: " + webDownloadItem.getReceivedBytes()); 13073 }) 13074 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13075 console.log("download failed guid: " + webDownloadItem.getGuid()); 13076 }) 13077 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13078 console.log("download finish guid: " + webDownloadItem.getGuid()); 13079 }) 13080 this.controller.setDownloadDelegate(this.delegate); 13081 } catch (error) { 13082 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13083 } 13084 }) 13085 Button('startDownload') 13086 .onClick(() => { 13087 try { 13088 this.controller.startDownload('https://www.example.com'); 13089 } catch (error) { 13090 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13091 } 13092 }) 13093 Web({ src: 'www.example.com', controller: this.controller }) 13094 } 13095 } 13096} 13097``` 13098 13099### getFullPath<sup>11+</sup> 13100 13101getFullPath(): string 13102 13103获取下载文件在磁盘上的全路径。 13104 13105**系统能力:** SystemCapability.Web.Webview.Core 13106 13107**返回值:** 13108 13109| 类型 | 说明 | 13110| ------ | ------------------------- | 13111| string | 下载文件在磁盘上的全路径。 | 13112 13113**示例:** 13114 13115```ts 13116// xxx.ets 13117import { webview } from '@kit.ArkWeb'; 13118import { BusinessError } from '@kit.BasicServicesKit'; 13119 13120@Entry 13121@Component 13122struct WebComponent { 13123 controller: webview.WebviewController = new webview.WebviewController(); 13124 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13125 13126 build() { 13127 Column() { 13128 Button('setDownloadDelegate') 13129 .onClick(() => { 13130 try { 13131 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13132 console.log("will start a download."); 13133 // 传入一个下载路径,并开始下载。 13134 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13135 }) 13136 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13137 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13138 }) 13139 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13140 console.log("download failed guid: " + webDownloadItem.getGuid()); 13141 }) 13142 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13143 console.log("download finish guid: " + webDownloadItem.getGuid()); 13144 console.log("download finish full path: " + webDownloadItem.getFullPath()); 13145 }) 13146 this.controller.setDownloadDelegate(this.delegate); 13147 } catch (error) { 13148 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13149 } 13150 }) 13151 Button('startDownload') 13152 .onClick(() => { 13153 try { 13154 this.controller.startDownload('https://www.example.com'); 13155 } catch (error) { 13156 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13157 } 13158 }) 13159 Web({ src: 'www.example.com', controller: this.controller }) 13160 } 13161 } 13162} 13163``` 13164 13165### serialize<sup>11+</sup> 13166 13167serialize(): Uint8Array 13168 13169将失败的下载序列化到一个字节数组。 13170 13171**系统能力:** SystemCapability.Web.Webview.Core 13172 13173**返回值:** 13174 13175| 类型 | 说明 | 13176| ------ | ------------------------- | 13177| Uint8Array | 失败的下载序列化后的字节数组。 | 13178 13179**示例:** 13180 13181```ts 13182// xxx.ets 13183import { webview } from '@kit.ArkWeb'; 13184import { BusinessError } from '@kit.BasicServicesKit'; 13185 13186@Entry 13187@Component 13188struct WebComponent { 13189 controller: webview.WebviewController = new webview.WebviewController(); 13190 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13191 failedData: Uint8Array = new Uint8Array(); 13192 13193 build() { 13194 Column() { 13195 Button('setDownloadDelegate') 13196 .onClick(() => { 13197 try { 13198 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13199 console.log("will start a download."); 13200 // 传入一个下载路径,并开始下载。 13201 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13202 }) 13203 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13204 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13205 }) 13206 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13207 console.log("download failed guid: " + webDownloadItem.getGuid()); 13208 // 序列化失败的下载到一个字节数组。 13209 this.failedData = webDownloadItem.serialize(); 13210 }) 13211 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13212 console.log("download finish guid: " + webDownloadItem.getGuid()); 13213 }) 13214 this.controller.setDownloadDelegate(this.delegate); 13215 } catch (error) { 13216 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13217 } 13218 }) 13219 Button('startDownload') 13220 .onClick(() => { 13221 try { 13222 this.controller.startDownload('https://www.example.com'); 13223 } catch (error) { 13224 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13225 } 13226 }) 13227 Web({ src: 'www.example.com', controller: this.controller }) 13228 } 13229 } 13230} 13231``` 13232 13233### deserialize<sup>11+</sup> 13234 13235static deserialize(serializedData: Uint8Array): WebDownloadItem 13236 13237将序列化后的字节数组反序列化为一个WebDownloadItem对象。 13238 13239**系统能力:** SystemCapability.Web.Webview.Core 13240 13241**参数:** 13242 13243| 参数名 | 类型 | 必填 | 说明 | 13244| ------------------ | ------- | ---- | ------------- | 13245| serializedData | Uint8Array | 是 | 序列化后的下载。| 13246 13247**返回值:** 13248 13249| 类型 | 说明 | 13250| ------ | ------------------------- | 13251| [WebDownloadItem](#webdownloaditem11) | 从字节数组反序列化为一个WebDownloadItem对象。 | 13252 13253**错误码:** 13254 13255以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13256 13257| 错误码ID | 错误信息 | 13258| -------- | ------------------------------------------------------------ | 13259| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13260 13261**示例:** 13262 13263```ts 13264// xxx.ets 13265import { webview } from '@kit.ArkWeb'; 13266import { BusinessError } from '@kit.BasicServicesKit'; 13267 13268@Entry 13269@Component 13270struct WebComponent { 13271 controller: webview.WebviewController = new webview.WebviewController(); 13272 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13273 failedData: Uint8Array = new Uint8Array(); 13274 13275 build() { 13276 Column() { 13277 Button('setDownloadDelegate') 13278 .onClick(() => { 13279 try { 13280 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13281 console.log("will start a download."); 13282 // 传入一个下载路径,并开始下载。 13283 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13284 }) 13285 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13286 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13287 }) 13288 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13289 console.log("download failed guid: " + webDownloadItem.getGuid()); 13290 // 序列化失败的下载到一个字节数组。 13291 this.failedData = webDownloadItem.serialize(); 13292 }) 13293 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13294 console.log("download finish guid: " + webDownloadItem.getGuid()); 13295 }) 13296 this.controller.setDownloadDelegate(this.delegate); 13297 } catch (error) { 13298 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13299 } 13300 }) 13301 Button('startDownload') 13302 .onClick(() => { 13303 try { 13304 this.controller.startDownload('https://www.example.com'); 13305 } catch (error) { 13306 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13307 } 13308 }) 13309 Button('resumeDownload') 13310 .onClick(() => { 13311 try { 13312 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13313 } catch (error) { 13314 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13315 } 13316 }) 13317 Web({ src: 'www.example.com', controller: this.controller }) 13318 } 13319 } 13320} 13321``` 13322 13323### start<sup>11+</sup> 13324 13325start(downloadPath: string): void 13326 13327开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。 13328 13329> **说明:** 13330> 13331>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。 13332 13333**系统能力:** SystemCapability.Web.Webview.Core 13334 13335**参数:** 13336 13337| 参数名 | 类型 | 必填 | 说明 | 13338| ------ | ---------------------- | ---- | ------------------------------| 13339| downloadPath | string | 是 | 下载文件的路径(包含文件名)。| 13340 13341**错误码:** 13342 13343以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13344 13345| 错误码ID | 错误信息 | 13346| -------- | ------------------------------------------------------------ | 13347| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 13348 13349**示例:** 13350 13351```ts 13352// xxx.ets 13353import { webview } from '@kit.ArkWeb'; 13354import { BusinessError } from '@kit.BasicServicesKit'; 13355 13356@Entry 13357@Component 13358struct WebComponent { 13359 controller: webview.WebviewController = new webview.WebviewController(); 13360 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13361 failedData: Uint8Array = new Uint8Array(); 13362 13363 build() { 13364 Column() { 13365 Button('setDownloadDelegate') 13366 .onClick(() => { 13367 try { 13368 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13369 console.log("will start a download."); 13370 // 传入一个下载路径,并开始下载。 13371 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13372 }) 13373 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13374 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13375 }) 13376 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13377 console.log("download failed guid: " + webDownloadItem.getGuid()); 13378 // 序列化失败的下载到一个字节数组。 13379 this.failedData = webDownloadItem.serialize(); 13380 }) 13381 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13382 console.log("download finish guid: " + webDownloadItem.getGuid()); 13383 }) 13384 this.controller.setDownloadDelegate(this.delegate); 13385 } catch (error) { 13386 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13387 } 13388 }) 13389 Button('startDownload') 13390 .onClick(() => { 13391 try { 13392 this.controller.startDownload('https://www.example.com'); 13393 } catch (error) { 13394 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13395 } 13396 }) 13397 Button('resumeDownload') 13398 .onClick(() => { 13399 try { 13400 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13401 } catch (error) { 13402 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13403 } 13404 }) 13405 Web({ src: 'www.example.com', controller: this.controller }) 13406 } 13407 } 13408} 13409``` 13410 13411### cancel<sup>11+</sup> 13412 13413cancel(): void 13414 13415取消一个正在下载的下载任务。 13416 13417**系统能力:** SystemCapability.Web.Webview.Core 13418 13419**示例:** 13420 13421```ts 13422// xxx.ets 13423import { webview } from '@kit.ArkWeb'; 13424import { BusinessError } from '@kit.BasicServicesKit'; 13425 13426@Entry 13427@Component 13428struct WebComponent { 13429 controller: webview.WebviewController = new webview.WebviewController(); 13430 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13431 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13432 failedData: Uint8Array = new Uint8Array(); 13433 13434 build() { 13435 Column() { 13436 Button('setDownloadDelegate') 13437 .onClick(() => { 13438 try { 13439 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13440 console.log("will start a download."); 13441 // 传入一个下载路径,并开始下载。 13442 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13443 }) 13444 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13445 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13446 this.download = webDownloadItem; 13447 }) 13448 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13449 console.log("download failed guid: " + webDownloadItem.getGuid()); 13450 // 序列化失败的下载到一个字节数组。 13451 this.failedData = webDownloadItem.serialize(); 13452 }) 13453 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13454 console.log("download finish guid: " + webDownloadItem.getGuid()); 13455 }) 13456 this.controller.setDownloadDelegate(this.delegate); 13457 } catch (error) { 13458 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13459 } 13460 }) 13461 Button('startDownload') 13462 .onClick(() => { 13463 try { 13464 this.controller.startDownload('https://www.example.com'); 13465 } catch (error) { 13466 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13467 } 13468 }) 13469 Button('resumeDownload') 13470 .onClick(() => { 13471 try { 13472 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13473 } catch (error) { 13474 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13475 } 13476 }) 13477 Button('cancel') 13478 .onClick(() => { 13479 try { 13480 this.download.cancel(); 13481 } catch (error) { 13482 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13483 } 13484 }) 13485 Web({ src: 'www.example.com', controller: this.controller }) 13486 } 13487 } 13488} 13489``` 13490 13491### pause<sup>11+</sup> 13492 13493pause(): void 13494 13495暂停一个正在下载的下载任务。 13496 13497**系统能力:** SystemCapability.Web.Webview.Core 13498 13499**错误码:** 13500 13501以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13502 13503| 错误码ID | 错误信息 | 13504| -------- | ------------------------------------------------------------ | 13505| 17100019 | The download task is not started yet. | 13506 13507**示例:** 13508 13509```ts 13510// xxx.ets 13511import { webview } from '@kit.ArkWeb'; 13512import { BusinessError } from '@kit.BasicServicesKit'; 13513 13514@Entry 13515@Component 13516struct WebComponent { 13517 controller: webview.WebviewController = new webview.WebviewController(); 13518 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13519 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13520 failedData: Uint8Array = new Uint8Array(); 13521 13522 build() { 13523 Column() { 13524 Button('setDownloadDelegate') 13525 .onClick(() => { 13526 try { 13527 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13528 console.log("will start a download."); 13529 // 传入一个下载路径,并开始下载。 13530 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13531 }) 13532 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13533 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13534 this.download = webDownloadItem; 13535 }) 13536 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13537 console.log("download failed guid: " + webDownloadItem.getGuid()); 13538 // 序列化失败的下载到一个字节数组。 13539 this.failedData = webDownloadItem.serialize(); 13540 }) 13541 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13542 console.log("download finish guid: " + webDownloadItem.getGuid()); 13543 }) 13544 this.controller.setDownloadDelegate(this.delegate); 13545 } catch (error) { 13546 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13547 } 13548 }) 13549 Button('startDownload') 13550 .onClick(() => { 13551 try { 13552 this.controller.startDownload('https://www.example.com'); 13553 } catch (error) { 13554 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13555 } 13556 }) 13557 Button('resumeDownload') 13558 .onClick(() => { 13559 try { 13560 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13561 } catch (error) { 13562 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13563 } 13564 }) 13565 Button('cancel') 13566 .onClick(() => { 13567 try { 13568 this.download.cancel(); 13569 } catch (error) { 13570 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13571 } 13572 }) 13573 Button('pause') 13574 .onClick(() => { 13575 try { 13576 this.download.pause(); 13577 } catch (error) { 13578 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13579 } 13580 }) 13581 Web({ src: 'www.example.com', controller: this.controller }) 13582 } 13583 } 13584} 13585``` 13586 13587### resume<sup>11+</sup> 13588 13589resume(): void 13590 13591恢复一个暂停的下载任务。 13592 13593**系统能力:** SystemCapability.Web.Webview.Core 13594 13595**错误码:** 13596 13597以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 13598 13599| 错误码ID | 错误信息 | 13600| -------- | ------------------------------------------------------------ | 13601| 17100016 | The download task is not paused. | 13602 13603**示例:** 13604 13605```ts 13606// xxx.ets 13607import { webview } from '@kit.ArkWeb'; 13608import { BusinessError } from '@kit.BasicServicesKit'; 13609 13610@Entry 13611@Component 13612struct WebComponent { 13613 controller: webview.WebviewController = new webview.WebviewController(); 13614 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13615 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13616 failedData: Uint8Array = new Uint8Array(); 13617 13618 build() { 13619 Column() { 13620 Button('setDownloadDelegate') 13621 .onClick(() => { 13622 try { 13623 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13624 console.log("will start a download."); 13625 // 传入一个下载路径,并开始下载。 13626 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13627 }) 13628 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13629 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13630 this.download = webDownloadItem; 13631 }) 13632 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13633 console.log("download failed guid: " + webDownloadItem.getGuid()); 13634 // 序列化失败的下载到一个字节数组。 13635 this.failedData = webDownloadItem.serialize(); 13636 }) 13637 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13638 console.log("download finish guid: " + webDownloadItem.getGuid()); 13639 }) 13640 this.controller.setDownloadDelegate(this.delegate); 13641 } catch (error) { 13642 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13643 } 13644 }) 13645 Button('startDownload') 13646 .onClick(() => { 13647 try { 13648 this.controller.startDownload('https://www.example.com'); 13649 } catch (error) { 13650 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13651 } 13652 }) 13653 Button('resumeDownload') 13654 .onClick(() => { 13655 try { 13656 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13657 } catch (error) { 13658 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13659 } 13660 }) 13661 Button('cancel') 13662 .onClick(() => { 13663 try { 13664 this.download.cancel(); 13665 } catch (error) { 13666 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13667 } 13668 }) 13669 Button('pause') 13670 .onClick(() => { 13671 try { 13672 this.download.pause(); 13673 } catch (error) { 13674 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13675 } 13676 }) 13677 Button('resume') 13678 .onClick(() => { 13679 try { 13680 this.download.resume(); 13681 } catch (error) { 13682 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13683 } 13684 }) 13685 Web({ src: 'www.example.com', controller: this.controller }) 13686 } 13687 } 13688} 13689``` 13690 13691## WebDownloadDelegate<sup>11+</sup> 13692 13693 下载任务的状态会通过该类的回调接口通知给用户。 13694 13695### onBeforeDownload<sup>11+</sup> 13696 13697onBeforeDownload(callback: Callback\<WebDownloadItem>): void 13698 13699下载开始前通知给用户,用户需要在此接口中调用WebDownloadItem.start("xxx")并提供下载路径,否则下载会一直处于PENDING状态。 13700 13701> **说明:** 13702> 13703>处于PENDING状态的下载任务会首先将文件保存至临时目录。在调用WebDownloadItem.start并指定目标路径后,临时文件将被重命名为目标文件名,未完成下载的部分会在调用WebDownloadItem.start并指定目标路径后直接下载到目标路径。若希望避免在调用WebDownloadItem.start前生成临时文件,可先通过WebDownloadItem.cancel来取消当前的下载任务,之后再使用WebDownloadManager.resumeDownload来恢复被取消的下载任务。 13704 13705**系统能力:** SystemCapability.Web.Webview.Core 13706 13707**参数:** 13708 13709| 参数名 | 类型 | 必填 | 说明 | 13710| ------- | ------ | ---- | :------------- | 13711| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 触发下载的回调。 | 13712 13713**示例:** 13714 13715```ts 13716// xxx.ets 13717import { webview } from '@kit.ArkWeb'; 13718import { BusinessError } from '@kit.BasicServicesKit'; 13719 13720@Entry 13721@Component 13722struct WebComponent { 13723 controller: webview.WebviewController = new webview.WebviewController(); 13724 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13725 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13726 failedData: Uint8Array = new Uint8Array(); 13727 13728 build() { 13729 Column() { 13730 Button('setDownloadDelegate') 13731 .onClick(() => { 13732 try { 13733 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13734 console.log("will start a download."); 13735 // 传入一个下载路径,并开始下载。 13736 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13737 }) 13738 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13739 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13740 this.download = webDownloadItem; 13741 }) 13742 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13743 console.log("download failed guid: " + webDownloadItem.getGuid()); 13744 // 序列化失败的下载到一个字节数组。 13745 this.failedData = webDownloadItem.serialize(); 13746 }) 13747 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13748 console.log("download finish guid: " + webDownloadItem.getGuid()); 13749 }) 13750 this.controller.setDownloadDelegate(this.delegate); 13751 } catch (error) { 13752 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13753 } 13754 }) 13755 Button('startDownload') 13756 .onClick(() => { 13757 try { 13758 this.controller.startDownload('https://www.example.com'); 13759 } catch (error) { 13760 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13761 } 13762 }) 13763 Button('resumeDownload') 13764 .onClick(() => { 13765 try { 13766 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13767 } catch (error) { 13768 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13769 } 13770 }) 13771 Button('cancel') 13772 .onClick(() => { 13773 try { 13774 this.download.cancel(); 13775 } catch (error) { 13776 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13777 } 13778 }) 13779 Button('pause') 13780 .onClick(() => { 13781 try { 13782 this.download.pause(); 13783 } catch (error) { 13784 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13785 } 13786 }) 13787 Button('resume') 13788 .onClick(() => { 13789 try { 13790 this.download.resume(); 13791 } catch (error) { 13792 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13793 } 13794 }) 13795 Web({ src: 'www.example.com', controller: this.controller }) 13796 } 13797 } 13798} 13799``` 13800 13801### onDownloadUpdated<sup>11+</sup> 13802 13803onDownloadUpdated(callback: Callback\<WebDownloadItem>): void 13804 13805下载过程中的回调,通过该回调的参数可以了解下载进度等信息。 13806 13807**系统能力:** SystemCapability.Web.Webview.Core 13808 13809**参数:** 13810 13811| 参数名 | 类型 | 必填 | 说明 | 13812| ------- | ------ | ---- | :------------- | 13813| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已更新。 | 13814 13815**示例:** 13816 13817```ts 13818// xxx.ets 13819import { webview } from '@kit.ArkWeb'; 13820import { BusinessError } from '@kit.BasicServicesKit'; 13821 13822@Entry 13823@Component 13824struct WebComponent { 13825 controller: webview.WebviewController = new webview.WebviewController(); 13826 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13827 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13828 failedData: Uint8Array = new Uint8Array(); 13829 13830 build() { 13831 Column() { 13832 Button('setDownloadDelegate') 13833 .onClick(() => { 13834 try { 13835 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13836 console.log("will start a download."); 13837 // 传入一个下载路径,并开始下载。 13838 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13839 }) 13840 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13841 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13842 this.download = webDownloadItem; 13843 }) 13844 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13845 console.log("download failed guid: " + webDownloadItem.getGuid()); 13846 // 序列化失败的下载到一个字节数组。 13847 this.failedData = webDownloadItem.serialize(); 13848 }) 13849 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13850 console.log("download finish guid: " + webDownloadItem.getGuid()); 13851 }) 13852 this.controller.setDownloadDelegate(this.delegate); 13853 } catch (error) { 13854 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13855 } 13856 }) 13857 Button('startDownload') 13858 .onClick(() => { 13859 try { 13860 this.controller.startDownload('https://www.example.com'); 13861 } catch (error) { 13862 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13863 } 13864 }) 13865 Button('resumeDownload') 13866 .onClick(() => { 13867 try { 13868 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13869 } catch (error) { 13870 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13871 } 13872 }) 13873 Button('cancel') 13874 .onClick(() => { 13875 try { 13876 this.download.cancel(); 13877 } catch (error) { 13878 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13879 } 13880 }) 13881 Button('pause') 13882 .onClick(() => { 13883 try { 13884 this.download.pause(); 13885 } catch (error) { 13886 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13887 } 13888 }) 13889 Button('resume') 13890 .onClick(() => { 13891 try { 13892 this.download.resume(); 13893 } catch (error) { 13894 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13895 } 13896 }) 13897 Web({ src: 'www.example.com', controller: this.controller }) 13898 } 13899 } 13900} 13901``` 13902 13903### onDownloadFinish<sup>11+</sup> 13904 13905onDownloadFinish(callback: Callback\<WebDownloadItem>): void 13906 13907下载完成的通知。 13908 13909**系统能力:** SystemCapability.Web.Webview.Core 13910 13911**参数:** 13912 13913| 参数名 | 类型 | 必填 | 说明 | 13914| ------- | ------ | ---- | :------------- | 13915| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载的回调已完成。 | 13916 13917**示例:** 13918 13919```ts 13920// xxx.ets 13921import { webview } from '@kit.ArkWeb'; 13922import { BusinessError } from '@kit.BasicServicesKit'; 13923 13924@Entry 13925@Component 13926struct WebComponent { 13927 controller: webview.WebviewController = new webview.WebviewController(); 13928 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 13929 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 13930 failedData: Uint8Array = new Uint8Array(); 13931 13932 build() { 13933 Column() { 13934 Button('setDownloadDelegate') 13935 .onClick(() => { 13936 try { 13937 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 13938 console.log("will start a download."); 13939 // 传入一个下载路径,并开始下载。 13940 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 13941 }) 13942 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 13943 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 13944 this.download = webDownloadItem; 13945 }) 13946 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 13947 console.log("download failed guid: " + webDownloadItem.getGuid()); 13948 // 序列化失败的下载到一个字节数组。 13949 this.failedData = webDownloadItem.serialize(); 13950 }) 13951 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 13952 console.log("download finish guid: " + webDownloadItem.getGuid()); 13953 }) 13954 this.controller.setDownloadDelegate(this.delegate); 13955 } catch (error) { 13956 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13957 } 13958 }) 13959 Button('startDownload') 13960 .onClick(() => { 13961 try { 13962 this.controller.startDownload('https://www.example.com'); 13963 } catch (error) { 13964 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13965 } 13966 }) 13967 Button('resumeDownload') 13968 .onClick(() => { 13969 try { 13970 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 13971 } catch (error) { 13972 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13973 } 13974 }) 13975 Button('cancel') 13976 .onClick(() => { 13977 try { 13978 this.download.cancel(); 13979 } catch (error) { 13980 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13981 } 13982 }) 13983 Button('pause') 13984 .onClick(() => { 13985 try { 13986 this.download.pause(); 13987 } catch (error) { 13988 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13989 } 13990 }) 13991 Button('resume') 13992 .onClick(() => { 13993 try { 13994 this.download.resume(); 13995 } catch (error) { 13996 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 13997 } 13998 }) 13999 Web({ src: 'www.example.com', controller: this.controller }) 14000 } 14001 } 14002} 14003``` 14004 14005### onDownloadFailed<sup>11+</sup> 14006 14007onDownloadFailed(callback: Callback\<WebDownloadItem>): void 14008 14009下载失败的通知。 14010 14011**系统能力:** SystemCapability.Web.Webview.Core 14012 14013**参数:** 14014 14015| 参数名 | 类型 | 必填 | 说明 | 14016| ------- | ------ | ---- | :------------- | 14017| callback | Callback\<[WebDownloadItem](#webdownloaditem11)> | 是 | 下载回调失败。 | 14018 14019**示例:** 14020 14021```ts 14022// xxx.ets 14023import { webview } from '@kit.ArkWeb'; 14024import { BusinessError } from '@kit.BasicServicesKit'; 14025 14026@Entry 14027@Component 14028struct WebComponent { 14029 controller: webview.WebviewController = new webview.WebviewController(); 14030 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14031 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14032 failedData: Uint8Array = new Uint8Array(); 14033 14034 build() { 14035 Column() { 14036 Button('setDownloadDelegate') 14037 .onClick(() => { 14038 try { 14039 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14040 console.log("will start a download."); 14041 // 传入一个下载路径,并开始下载。 14042 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14043 }) 14044 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14045 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14046 this.download = webDownloadItem; 14047 }) 14048 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14049 console.log("download failed guid: " + webDownloadItem.getGuid()); 14050 // 序列化失败的下载到一个字节数组。 14051 this.failedData = webDownloadItem.serialize(); 14052 }) 14053 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14054 console.log("download finish guid: " + webDownloadItem.getGuid()); 14055 }) 14056 this.controller.setDownloadDelegate(this.delegate); 14057 } catch (error) { 14058 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14059 } 14060 }) 14061 Button('startDownload') 14062 .onClick(() => { 14063 try { 14064 this.controller.startDownload('https://www.example.com'); 14065 } catch (error) { 14066 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14067 } 14068 }) 14069 Button('resumeDownload') 14070 .onClick(() => { 14071 try { 14072 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14073 } catch (error) { 14074 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14075 } 14076 }) 14077 Button('cancel') 14078 .onClick(() => { 14079 try { 14080 this.download.cancel(); 14081 } catch (error) { 14082 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14083 } 14084 }) 14085 Button('pause') 14086 .onClick(() => { 14087 try { 14088 this.download.pause(); 14089 } catch (error) { 14090 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14091 } 14092 }) 14093 Button('resume') 14094 .onClick(() => { 14095 try { 14096 this.download.resume(); 14097 } catch (error) { 14098 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14099 } 14100 }) 14101 Web({ src: 'www.example.com', controller: this.controller }) 14102 } 14103 } 14104} 14105``` 14106 14107## WebDownloadManager<sup>11+</sup> 14108 14109可以通过该类提供的接口来恢复失败的下载任务。 14110 14111### setDownloadDelegate<sup>11+</sup> 14112 14113static setDownloadDelegate(delegate: WebDownloadDelegate): void 14114 14115设置用于接收从WebDownloadManager触发的下载进度的委托。 14116 14117**系统能力:** SystemCapability.Web.Webview.Core 14118 14119**参数:** 14120 14121| 参数名 | 类型 | 必填 | 说明 | 14122| ---------------| ------- | ---- | ------------- | 14123| delegate | [WebDownloadDelegate](#webdownloaddelegate11) | 是 | 用来接收下载进回调的委托。 | 14124 14125**示例:** 14126 14127```ts 14128// xxx.ets 14129import { webview } from '@kit.ArkWeb'; 14130import { BusinessError } from '@kit.BasicServicesKit'; 14131 14132@Entry 14133@Component 14134struct WebComponent { 14135 controller: webview.WebviewController = new webview.WebviewController(); 14136 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14137 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14138 failedData: Uint8Array = new Uint8Array(); 14139 14140 build() { 14141 Column() { 14142 Button('setDownloadDelegate') 14143 .onClick(() => { 14144 try { 14145 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14146 console.log("will start a download."); 14147 // 传入一个下载路径,并开始下载。 14148 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14149 }) 14150 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14151 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14152 this.download = webDownloadItem; 14153 }) 14154 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14155 console.log("download failed guid: " + webDownloadItem.getGuid()); 14156 // 序列化失败的下载到一个字节数组。 14157 this.failedData = webDownloadItem.serialize(); 14158 }) 14159 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14160 console.log("download finish guid: " + webDownloadItem.getGuid()); 14161 }) 14162 this.controller.setDownloadDelegate(this.delegate); 14163 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14164 } catch (error) { 14165 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14166 } 14167 }) 14168 Button('startDownload') 14169 .onClick(() => { 14170 try { 14171 this.controller.startDownload('https://www.example.com'); 14172 } catch (error) { 14173 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14174 } 14175 }) 14176 Button('resumeDownload') 14177 .onClick(() => { 14178 try { 14179 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14180 } catch (error) { 14181 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14182 } 14183 }) 14184 Button('cancel') 14185 .onClick(() => { 14186 try { 14187 this.download.cancel(); 14188 } catch (error) { 14189 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14190 } 14191 }) 14192 Button('pause') 14193 .onClick(() => { 14194 try { 14195 this.download.pause(); 14196 } catch (error) { 14197 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14198 } 14199 }) 14200 Button('resume') 14201 .onClick(() => { 14202 try { 14203 this.download.resume(); 14204 } catch (error) { 14205 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14206 } 14207 }) 14208 Web({ src: 'www.example.com', controller: this.controller }) 14209 } 14210 } 14211} 14212``` 14213 14214### resumeDownload<sup>11+</sup> 14215 14216static resumeDownload(webDownloadItem: WebDownloadItem): void 14217 14218恢复一个失败的下载任务。 14219 14220**系统能力:** SystemCapability.Web.Webview.Core 14221 14222**参数:** 14223 14224| 参数名 | 类型 | 必填 | 说明 | 14225| ---------------| ------- | ---- | ------------- | 14226| webDownloadItem | [WebDownloadItem](#webdownloaditem11) | 是 | 待恢复的下载任务。 | 14227 14228**错误码:** 14229 14230以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14231 14232| 错误码ID | 错误信息 | 14233| -------- | ------------------------------------- | 14234| 17100018 | No WebDownloadDelegate has been set yet. | 14235 14236**示例:** 14237 14238```ts 14239// xxx.ets 14240import { webview } from '@kit.ArkWeb'; 14241import { BusinessError } from '@kit.BasicServicesKit'; 14242 14243@Entry 14244@Component 14245struct WebComponent { 14246 controller: webview.WebviewController = new webview.WebviewController(); 14247 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 14248 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 14249 failedData: Uint8Array = new Uint8Array(); 14250 14251 build() { 14252 Column() { 14253 Button('setDownloadDelegate') 14254 .onClick(() => { 14255 try { 14256 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 14257 console.log("will start a download."); 14258 // 传入一个下载路径,并开始下载。 14259 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 14260 }) 14261 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 14262 console.log("download update percent complete: " + webDownloadItem.getPercentComplete()); 14263 this.download = webDownloadItem; 14264 }) 14265 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 14266 console.log("download failed guid: " + webDownloadItem.getGuid()); 14267 // 序列化失败的下载到一个字节数组。 14268 this.failedData = webDownloadItem.serialize(); 14269 }) 14270 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 14271 console.log("download finish guid: " + webDownloadItem.getGuid()); 14272 }) 14273 this.controller.setDownloadDelegate(this.delegate); 14274 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 14275 } catch (error) { 14276 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14277 } 14278 }) 14279 Button('startDownload') 14280 .onClick(() => { 14281 try { 14282 this.controller.startDownload('https://www.example.com'); 14283 } catch (error) { 14284 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14285 } 14286 }) 14287 Button('resumeDownload') 14288 .onClick(() => { 14289 try { 14290 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 14291 } catch (error) { 14292 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14293 } 14294 }) 14295 Button('cancel') 14296 .onClick(() => { 14297 try { 14298 this.download.cancel(); 14299 } catch (error) { 14300 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14301 } 14302 }) 14303 Button('pause') 14304 .onClick(() => { 14305 try { 14306 this.download.pause(); 14307 } catch (error) { 14308 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14309 } 14310 }) 14311 Button('resume') 14312 .onClick(() => { 14313 try { 14314 this.download.resume(); 14315 } catch (error) { 14316 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14317 } 14318 }) 14319 Web({ src: 'www.example.com', controller: this.controller }) 14320 } 14321 } 14322} 14323``` 14324 14325## WebHttpBodyStream<sup>12+</sup> 14326 14327POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。 14328 14329### initialize<sup>12+</sup> 14330 14331initialize(): Promise\<void\> 14332 14333初始化WebHttpBodyStream。 14334 14335**系统能力:** SystemCapability.Web.Webview.Core 14336 14337**返回值:** 14338 14339| 类型 | 说明 | 14340| ------ | ------------------------- | 14341| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 | 14342 14343**错误码:** 14344 14345以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14346 14347| 错误码ID | 错误信息 | 14348| -------- | ------------------------------------- | 14349| 17100022 | Failed to initialize the HTTP body stream. | 14350 14351**示例:** 14352 14353```ts 14354// xxx.ets 14355import { webview } from '@kit.ArkWeb'; 14356import { BusinessError } from '@kit.BasicServicesKit'; 14357import { buffer } from '@kit.ArkTS'; 14358import { WebNetErrorList } from '@ohos.web.netErrorList' 14359 14360@Entry 14361@Component 14362struct WebComponent { 14363 controller: webview.WebviewController = new webview.WebviewController(); 14364 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 14365 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 14366 14367 build() { 14368 Column() { 14369 Button('postUrl') 14370 .onClick(() => { 14371 try { 14372 let postData = buffer.from(this.htmlData); 14373 this.controller.postUrl('https://www.example.com', postData.buffer); 14374 } catch (error) { 14375 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14376 } 14377 }) 14378 Web({ src: 'https://www.example.com', controller: this.controller }) 14379 .onControllerAttached(() => { 14380 try { 14381 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 14382 console.log("[schemeHandler] onRequestStart"); 14383 try { 14384 let stream = request.getHttpBodyStream(); 14385 if (stream) { 14386 stream.initialize().then(() => { 14387 if (!stream) { 14388 return; 14389 } 14390 console.log("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize()); 14391 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 14392 console.log("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked()); 14393 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 14394 console.log("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory()); 14395 stream.read(stream.getSize()).then((buffer) => { 14396 if (!stream) { 14397 return; 14398 } 14399 console.log("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength); 14400 console.log("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof()); 14401 console.log("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition()); 14402 }).catch((error: BusinessError) => { 14403 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 14404 }) 14405 }).catch((error: BusinessError) => { 14406 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 14407 }) 14408 } else { 14409 console.log("[schemeHandler] onRequestStart has no http body stream"); 14410 } 14411 } catch (error) { 14412 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14413 } 14414 14415 return false; 14416 }) 14417 14418 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 14419 console.log("[schemeHandler] onRequestStop"); 14420 }); 14421 14422 this.controller.setWebSchemeHandler('https', this.schemeHandler); 14423 } catch (error) { 14424 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14425 } 14426 }) 14427 .javaScriptAccess(true) 14428 .domStorageAccess(true) 14429 } 14430 } 14431} 14432 14433``` 14434 14435### read<sup>12+</sup> 14436 14437read(size: number): Promise\<ArrayBuffer\> 14438 14439读取WebHttpBodyStream中的数据。 14440 14441**系统能力:** SystemCapability.Web.Webview.Core 14442 14443**参数:** 14444 14445| 参数名 | 类型 | 必填 | 说明 | 14446| --------| ------- | ---- | ---------------------------| 14447| size | number | 是 | 读取WebHttpBodyStream中的字节数。 | 14448 14449**返回值:** 14450 14451| 类型 | 说明 | 14452| ------ | ------------------------- | 14453| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 | 14454 14455**错误码:** 14456 14457以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14458 14459| 错误码ID | 错误信息 | 14460| -------- | ------------------------------------- | 14461| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 14462 14463**示例:** 14464 14465完整示例代码参考[initialize](#initialize12)。 14466 14467### getSize<sup>12+</sup> 14468 14469getSize(): number 14470 14471获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。 14472 14473**系统能力:** SystemCapability.Web.Webview.Core 14474 14475**返回值:** 14476 14477| 类型 | 说明 | 14478| ------ | ------------------------- | 14479| number | 获取WebHttpBodyStream中的数据大小。 | 14480 14481**示例:** 14482 14483完整示例代码参考[initialize](#initialize12)。 14484 14485### getPosition<sup>12+</sup> 14486 14487getPosition(): number 14488 14489读取WebHttpBodyStream中当前的读取位置。 14490 14491**系统能力:** SystemCapability.Web.Webview.Core 14492 14493**返回值:** 14494 14495| 类型 | 说明 | 14496| ------ | ------------------------- | 14497| number | WebHttpBodyStream中当前的读取位置。 | 14498 14499**示例:** 14500 14501完整示例代码参考[initialize](#initialize12)。 14502 14503### isChunked<sup>12+</sup> 14504 14505isChunked(): boolean 14506 14507WebHttpBodyStream是否采用分块传输。 14508 14509**系统能力:** SystemCapability.Web.Webview.Core 14510 14511**返回值:** 14512 14513| 类型 | 说明 | 14514| ------ | ------------------------- | 14515| boolean | WebHttpBodyStream是否采用分块传输。 | 14516 14517**示例:** 14518 14519完整示例代码参考[initialize](#initialize12)。 14520 14521### isEof<sup>12+</sup> 14522 14523isEof(): boolean 14524 14525判断WebHttpBodyStream中的所有数据是否都已被读取。如果所有数据都已被读取,则返回true。对于分块传输类型的 WebHttpBodyStream,在第一次读取尝试之前返回false。 14526 14527**系统能力:** SystemCapability.Web.Webview.Core 14528 14529**返回值:** 14530 14531| 类型 | 说明 | 14532| ------ | ------------------------- | 14533| boolean | WebHttpBodyStream中的所有数据是否都已被读取。 | 14534 14535**示例:** 14536 14537完整示例代码参考[initialize](#initialize12)。 14538 14539### isInMemory<sup>12+</sup> 14540 14541isInMemory(): boolean 14542 14543判断WebHttpBodyStream中的上传数据是否在内存中。如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。 14544 14545**系统能力:** SystemCapability.Web.Webview.Core 14546 14547**返回值:** 14548 14549| 类型 | 说明 | 14550| ------ | ------------------------- | 14551| boolean | WebHttpBodyStream中的上传数据是否在内存中。 | 14552 14553**示例:** 14554 14555完整示例代码参考[initialize](#initialize12)。 14556 14557## WebSchemeHandlerRequest<sup>12+</sup> 14558 14559通过WebSchemeHandler拦截到的请求。 14560 14561### getHeader<sup>12+</sup> 14562 14563getHeader(): Array\<WebHeader\> 14564 14565获取资源请求头信息。 14566 14567**系统能力:** SystemCapability.Web.Webview.Core 14568 14569**返回值:** 14570 14571| 类型 | 说明 | 14572| -------------------------- | ---------- | 14573| Array\<[WebHeader](#webheader)\> | 返回资源请求头信息。 | 14574 14575**示例:** 14576 14577完整示例代码参考[onRequestStart](#onrequeststart12)。 14578 14579### getRequestUrl<sup>12+</sup> 14580 14581getRequestUrl(): string 14582 14583获取资源请求的URL信息。 14584 14585**系统能力:** SystemCapability.Web.Webview.Core 14586 14587**返回值:** 14588 14589| 类型 | 说明 | 14590| ------ | ------------- | 14591| string | 返回资源请求的URL信息。 | 14592 14593**示例:** 14594 14595完整示例代码参考[onRequestStart](#onrequeststart12)。 14596 14597### getRequestMethod<sup>12+</sup> 14598 14599getRequestMethod(): string 14600 14601获取请求方法。 14602 14603**系统能力:** SystemCapability.Web.Webview.Core 14604 14605**返回值:** 14606 14607| 类型 | 说明 | 14608| ------ | ------------- | 14609| string | 返回请求方法。 | 14610 14611**示例:** 14612 14613完整示例代码参考[onRequestStart](#onrequeststart12)。 14614 14615### getReferrer<sup>12+</sup> 14616 14617getReferrer(): string 14618 14619获取referrer。 14620 14621**系统能力:** SystemCapability.Web.Webview.Core 14622 14623**返回值:** 14624 14625| 类型 | 说明 | 14626| ------ | ------------- | 14627| string | 获取到的referrer。 | 14628 14629**示例:** 14630 14631完整示例代码参考[onRequestStart](#onrequeststart12)。 14632 14633### isMainFrame<sup>12+</sup> 14634 14635isMainFrame(): boolean 14636 14637判断资源请求是否为主frame。 14638 14639**系统能力:** SystemCapability.Web.Webview.Core 14640 14641**返回值:** 14642 14643| 类型 | 说明 | 14644| ------ | ------------- | 14645| boolean | 判断资源请求是否为主frame。 | 14646 14647**示例:** 14648 14649完整示例代码参考[onRequestStart](#onrequeststart12)。 14650 14651### hasGesture<sup>12+</sup> 14652 14653hasGesture(): boolean 14654 14655获取资源请求是否与手势(如点击)相关联。 14656 14657**系统能力:** SystemCapability.Web.Webview.Core 14658 14659**返回值:** 14660 14661| 类型 | 说明 | 14662| ------ | ------------- | 14663| boolean | 返回资源请求是否与手势(如点击)相关联。 | 14664 14665**示例:** 14666 14667完整示例代码参考[onRequestStart](#onrequeststart12)。 14668 14669### getHttpBodyStream<sup>12+</sup> 14670 14671getHttpBodyStream(): WebHttpBodyStream | null 14672 14673获取资源请求中的WebHttpBodyStream。 14674 14675**系统能力:** SystemCapability.Web.Webview.Core 14676 14677**返回值:** 14678 14679| 类型 | 说明 | 14680| ------ | ------------- | 14681| [WebHttpBodyStream](#webhttpbodystream12) \| null | 返回资源请求中的WebHttpBodyStream,如果没有则返回null。 | 14682 14683**示例:** 14684 14685完整示例代码参考[onRequestStart](#onrequeststart12)。 14686 14687### getRequestResourceType<sup>12+</sup> 14688 14689getRequestResourceType(): WebResourceType 14690 14691获取资源请求的资源类型。 14692 14693**系统能力:** SystemCapability.Web.Webview.Core 14694 14695**返回值:** 14696 14697| 类型 | 说明 | 14698| ------ | ------------- | 14699| [WebResourceType](#webresourcetype12) | 返回资源请求的资源类型。 | 14700 14701**示例:** 14702 14703完整示例代码参考[onRequestStart](#onrequeststart12)。 14704 14705### getFrameUrl<sup>12+</sup> 14706 14707getFrameUrl(): string 14708 14709获取触发此请求的Frame的URL。 14710 14711**系统能力:** SystemCapability.Web.Webview.Core 14712 14713**返回值:** 14714 14715| 类型 | 说明 | 14716| ------ | ------------- | 14717| string | 返回触发此请求的Frame的URL。 | 14718 14719**示例:** 14720 14721完整示例代码参考[onRequestStart](#onrequeststart12)。 14722 14723## WebSchemeHandlerResponse<sup>12+</sup> 14724 14725请求的响应,可以为被拦截的请求创建一个Response并填充自定义的内容返回给Web组件。 14726 14727### constructor<sup>12+</sup> 14728 14729constructor() 14730 14731Response的构造函数。 14732 14733**系统能力:** SystemCapability.Web.Webview.Core 14734 14735**示例:** 14736 14737```ts 14738// xxx.ets 14739import { webview } from '@kit.ArkWeb'; 14740import { BusinessError } from '@kit.BasicServicesKit'; 14741import { WebNetErrorList } from '@ohos.web.netErrorList'; 14742 14743@Entry 14744@Component 14745struct WebComponent { 14746 controller: webview.WebviewController = new webview.WebviewController(); 14747 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 14748 14749 build() { 14750 Column() { 14751 Button('response').onClick(() => { 14752 let response = new webview.WebSchemeHandlerResponse(); 14753 try { 14754 response.setUrl("http://www.example.com") 14755 response.setStatus(200) 14756 response.setStatusText("OK") 14757 response.setMimeType("text/html") 14758 response.setEncoding("utf-8") 14759 response.setHeaderByName("header1", "value1", false) 14760 response.setNetErrorCode(WebNetErrorList.NET_OK) 14761 console.log("[schemeHandler] getUrl:" + response.getUrl()) 14762 console.log("[schemeHandler] getStatus:" + response.getStatus()) 14763 console.log("[schemeHandler] getStatusText:" + response.getStatusText()) 14764 console.log("[schemeHandler] getMimeType:" + response.getMimeType()) 14765 console.log("[schemeHandler] getEncoding:" + response.getEncoding()) 14766 console.log("[schemeHandler] getHeaderByValue:" + response.getHeaderByName("header1")) 14767 console.log("[schemeHandler] getNetErrorCode:" + response.getNetErrorCode()) 14768 14769 } catch (error) { 14770 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 14771 } 14772 }) 14773 Web({ src: 'https://www.example.com', controller: this.controller }) 14774 } 14775 } 14776} 14777 14778``` 14779 14780### setUrl<sup>12+</sup> 14781 14782setUrl(url: string): void 14783 14784给当前的Response设置重定向或因HSTS而更改后的URL,设置了url后会触发请求的跳转。 14785 14786**系统能力:** SystemCapability.Web.Webview.Core 14787 14788**参数:** 14789 14790| 参数名 | 类型 | 必填 | 说明 | 14791| --------| ------- | ---- | ---------------------------| 14792| url | string | 是 | 即将要跳转的URL。 | 14793 14794**示例:** 14795 14796示例完整示例代码参考[constructor](#constructor12)。 14797 14798**错误码:** 14799 14800以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14801 14802| 错误码ID | 错误信息 | 14803| -------- | ----------------------- | 14804| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14805 14806### setNetErrorCode<sup>12+</sup> 14807 14808setNetErrorCode(code: WebNetErrorList): void 14809 14810给当前的Response设置网络错误码。 14811 14812**系统能力:** SystemCapability.Web.Webview.Core 14813 14814**参数:** 14815 14816| 参数名 | 类型 | 必填 | 说明 | 14817| --------| ------- | ---- | ---------------------------| 14818| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 14819 14820**错误码:** 14821 14822以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14823 14824| 错误码ID | 错误信息 | 14825| -------- | ----------------------- | 14826| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14827 14828**示例:** 14829 14830示例完整示例代码参考[constructor](#constructor12)。 14831 14832### setStatus<sup>12+</sup> 14833 14834setStatus(code: number): void 14835 14836给当前的Response设置HTTP状态码。 14837 14838**系统能力:** SystemCapability.Web.Webview.Core 14839 14840**参数:** 14841 14842| 参数名 | 类型 | 必填 | 说明 | 14843| --------| ------- | ---- | ---------------------------| 14844| code | number | 是 | Http状态码。 | 14845 14846**错误码:** 14847 14848以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14849 14850| 错误码ID | 错误信息 | 14851| -------- | ----------------------- | 14852| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14853 14854**示例:** 14855 14856示例完整示例代码参考[constructor](#constructor12)。 14857 14858### setStatusText<sup>12+</sup> 14859 14860setStatusText(text: string): void 14861 14862给当前的Response设置状态文本。 14863 14864**系统能力:** SystemCapability.Web.Webview.Core 14865 14866**参数:** 14867 14868| 参数名 | 类型 | 必填 | 说明 | 14869| --------| ------- | ---- | ---------------------------| 14870| text | string | 是 | 状态文本。 | 14871 14872**错误码:** 14873 14874以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14875 14876| 错误码ID | 错误信息 | 14877| -------- | ----------------------- | 14878| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14879 14880**示例:** 14881 14882示例完整示例代码参考[constructor](#constructor12)。 14883 14884### setMimeType<sup>12+</sup> 14885 14886setMimeType(type: string): void 14887 14888给当前的Response设置媒体类型。 14889 14890**系统能力:** SystemCapability.Web.Webview.Core 14891 14892**参数:** 14893 14894| 参数名 | 类型 | 必填 | 说明 | 14895| --------| ------- | ---- | ---------------------------| 14896| type | string | 是 | 媒体类型。 | 14897 14898**错误码:** 14899 14900以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14901 14902| 错误码ID | 错误信息 | 14903| -------- | ----------------------- | 14904| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14905 14906**示例:** 14907 14908示例完整示例代码参考[constructor](#constructor12)。 14909 14910### setEncoding<sup>12+</sup> 14911 14912setEncoding(encoding: string): void 14913 14914给当前的Response设置字符集。 14915 14916**系统能力:** SystemCapability.Web.Webview.Core 14917 14918**参数:** 14919 14920| 参数名 | 类型 | 必填 | 说明 | 14921| --------| ------- | ---- | ---------------------------| 14922| encoding | string | 是 | 字符集。 | 14923 14924**错误码:** 14925 14926以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14927 14928| 错误码ID | 错误信息 | 14929| -------- | ----------------------- | 14930| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 14931 14932**示例:** 14933 14934示例完整示例代码参考[constructor](#constructor12)。 14935 14936### setHeaderByName<sup>12+</sup> 14937 14938setHeaderByName(name: string, value: string, overwrite: boolean): void 14939 14940给当前的Response设置头信息。 14941 14942**系统能力:** SystemCapability.Web.Webview.Core 14943 14944**参数:** 14945 14946| 参数名 | 类型 | 必填 | 说明 | 14947| --------| ------- | ---- | ---------------------------| 14948| name | string | 是 | 头部(header)的名称。 | 14949| value | string | 是 | 头部(header)的值。 | 14950| overwrite | boolean | 是 | 如果为true,将覆盖现有的头部,否则不覆盖。 | 14951 14952**错误码:** 14953 14954以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 14955 14956| 错误码ID | 错误信息 | 14957| -------- | ----------------------- | 14958| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 14959 14960**示例:** 14961 14962示例完整示例代码参考[constructor](#constructor12)。 14963 14964### getUrl<sup>12+</sup> 14965 14966getUrl(): string 14967 14968获取重定向或由于HSTS而更改后的URL。 14969风险提示:如果想获取url来做JavascriptProxy通信接口认证,请使用[getLastJavascriptProxyCallingFrameUrl<sup>12+</sup>](#getlastjavascriptproxycallingframeurl12) 14970 14971**系统能力:** SystemCapability.Web.Webview.Core 14972 14973**返回值:** 14974 14975| 类型 | 说明 | 14976| ------- | --------------------------------------- | 14977| string | 获取经过重定向或由于HSTS而更改后的URL。| 14978 14979**示例:** 14980 14981示例完整示例代码参考[constructor](#constructor12)。 14982 14983### getNetErrorCode<sup>12+</sup> 14984 14985getNetErrorCode(): WebNetErrorList 14986 14987获取Response的网络错误码。 14988 14989**系统能力:** SystemCapability.Web.Webview.Core 14990 14991**返回值:** 14992 14993| 类型 | 说明 | 14994| ------- | --------------------------------------- | 14995| [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 获取Response的网络错误码。| 14996 14997**示例:** 14998 14999示例完整示例代码参考[constructor](#constructor12)。 15000 15001### getStatus<sup>12+</sup> 15002 15003getStatus(): number 15004 15005获取Response的Http状态码。 15006 15007**系统能力:** SystemCapability.Web.Webview.Core 15008 15009**返回值:** 15010 15011| 类型 | 说明 | 15012| ------- | --------------------------------------- | 15013| number | 获取Response的Http状态码。| 15014 15015**示例:** 15016 15017示例完整示例代码参考[constructor](#constructor12)。 15018 15019### getStatusText<sup>12+</sup> 15020 15021getStatusText(): string 15022 15023获取Response的状态文本。 15024 15025**系统能力:** SystemCapability.Web.Webview.Core 15026 15027**返回值:** 15028 15029| 类型 | 说明 | 15030| ------- | --------------------------------------- | 15031| string | 状态文本。| 15032 15033**示例:** 15034 15035示例完整示例代码参考[constructor](#constructor12)。 15036 15037### getMimeType<sup>12+</sup> 15038 15039getMimeType(): string 15040 15041获取Response的媒体类型。 15042 15043**系统能力:** SystemCapability.Web.Webview.Core 15044 15045**返回值:** 15046 15047| 类型 | 说明 | 15048| ------- | --------------------------------------- | 15049| string | 媒体类型。| 15050 15051**示例:** 15052 15053示例完整示例代码参考[constructor](#constructor12)。 15054 15055### getEncoding<sup>12+</sup> 15056 15057getEncoding(): string 15058 15059获取Response的字符集。 15060 15061**系统能力:** SystemCapability.Web.Webview.Core 15062 15063**返回值:** 15064 15065| 类型 | 说明 | 15066| ------- | --------------------------------------- | 15067| string | 字符集。| 15068 15069**示例:** 15070 15071示例完整示例代码参考[constructor](#constructor12)。 15072 15073### getHeaderByName<sup>12+</sup> 15074 15075getHeaderByName(name: string): string 15076 15077获取Response的字符集。 15078 15079**系统能力:** SystemCapability.Web.Webview.Core 15080 15081**参数:** 15082 15083| 参数名 | 类型 | 必填 | 说明 | 15084| ------- | ---------------- | ---- | -------------------- | 15085| name | string | 是 | 头部(header)的名称。 | 15086 15087 15088**返回值:** 15089 15090| 类型 | 说明 | 15091| ------- | --------------------------------------- | 15092| string | 头部(header)的值。| 15093 15094**示例:** 15095 15096示例完整示例代码参考[constructor](#constructor12)。 15097 15098## WebResourceHandler<sup>12+</sup> 15099 15100通过WebResourceHandler,可以提供自定义的返回头以及返回体给Web组件。 15101 15102### didReceiveResponse<sup>12+</sup> 15103 15104didReceiveResponse(response: WebSchemeHandlerResponse): void 15105 15106将构造的响应头传递给被拦截的请求。 15107 15108**系统能力:** SystemCapability.Web.Webview.Core 15109 15110**参数:** 15111 15112| 参数名 | 类型 | 必填 | 说明 | 15113| ---------------| ------- | ---- | ------------- | 15114| response | [WebSchemeHandlerResponse](#webschemehandlerresponse12) | 是 | 该拦截请求的响应。 | 15115 15116**错误码:** 15117 15118以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15119 15120| 错误码ID | 错误信息 | 15121| -------- | ------------------------------------- | 15122| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15123| 17100021 | The resource handler is invalid. | 15124 15125**示例:** 15126 15127示例请参考[OnRequestStart](#onrequeststart12)。 15128 15129### didReceiveResponseBody<sup>12+</sup> 15130 15131didReceiveResponseBody(data: ArrayBuffer): void 15132 15133将构造的响应体传递给被拦截的请求。 15134 15135**系统能力:** SystemCapability.Web.Webview.Core 15136 15137**参数:** 15138 15139| 参数名 | 类型 | 必填 | 说明 | 15140| ---------------| ------- | ---- | ------------- | 15141| data | ArrayBuffer | 是 | 响应体数据。 | 15142 15143**错误码:** 15144 15145以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15146 15147| 错误码ID | 错误信息 | 15148| -------- | ------------------------------------- | 15149| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 15150| 17100021 | The resource handler is invalid. | 15151 15152**示例:** 15153 15154示例请参考[OnRequestStart](#onrequeststart12)。 15155 15156### didFinish<sup>12+</sup> 15157 15158didFinish(): void 15159 15160通知Web组件被拦截的请求已经完成,并且没有更多的数据可用,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15161 15162**系统能力:** SystemCapability.Web.Webview.Core 15163 15164**错误码:** 15165 15166以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15167 15168| 错误码ID | 错误信息 | 15169| -------- | ------------------------------------- | 15170| 17100021 | The resource handler is invalid. | 15171 15172**示例:** 15173 15174示例请参考[OnRequestStart](#onrequeststart12)。 15175 15176### didFail<sup>12+</sup> 15177 15178didFail(code: WebNetErrorList): void 15179 15180通知ArkWeb内核被拦截请求应该返回失败,调用前需要优先调用[didReceiveResponse](#didreceiveresponse12)将构造的响应头传递给被拦截的请求。 15181 15182**系统能力:** SystemCapability.Web.Webview.Core 15183 15184**参数:** 15185 15186| 参数名 | 类型 | 必填 | 说明 | 15187| --------| ------- | ---- | ---------------------------| 15188| code | [WebNetErrorList](js-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | 15189 15190**错误码:** 15191 15192以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15193 15194| 错误码ID | 错误信息 | 15195| -------- | ------------------------------------- | 15196| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 15197| 17100021 | The resource handler is invalid. | 15198 15199**系统能力:** SystemCapability.Web.Webview.Core 15200 15201**示例:** 15202 15203示例请参考[OnRequestStart](#onrequeststart12)。 15204 15205## WebSchemeHandler<sup>12+</sup> 15206 15207用于拦截指定scheme的请求的拦截器。 15208 15209### onRequestStart<sup>12+</sup> 15210 15211onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void 15212 15213当请求开始时的回调,在该回调函数中可以决定是否拦截该请求。当回调返回false是表示不拦截此请求,此时handler失效;当回调返回true,表示拦截此请求。 15214 15215**系统能力:** SystemCapability.Web.Webview.Core 15216 15217**参数**: 15218 15219| 参数名 | 类型 | 必填 | 说明 | 15220| -------- | -------------------- | ---- | ---------- | 15221| callback | (request: [WebSchemeHandlerRequest](#webschemehandlerrequest12), handler: [WebResourceHandler](#webresourcehandler12)) => boolean | 是 | 拦截对应scheme请求开始时触发的回调。request为请求,handler用于提供自定义的返回头以及返回体给Web组件,返回值表示该请求是否拦截。 | 15222 15223**错误码:** 15224 15225以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15226 15227| 错误码ID | 错误信息 | 15228| -------- | ------------------------------------- | 15229| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 15230 15231**示例:** 15232 15233```ts 15234// xxx.ets 15235import { webview } from '@kit.ArkWeb'; 15236import { BusinessError } from '@kit.BasicServicesKit'; 15237import { buffer } from '@kit.ArkTS'; 15238import { WebNetErrorList } from '@ohos.web.netErrorList'; 15239 15240@Entry 15241@Component 15242struct WebComponent { 15243 controller: webview.WebviewController = new webview.WebviewController(); 15244 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 15245 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 15246 15247 build() { 15248 Column() { 15249 Web({ src: 'https://www.example.com', controller: this.controller }) 15250 .onControllerAttached(() => { 15251 try { 15252 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 15253 console.log("[schemeHandler] onRequestStart"); 15254 try { 15255 console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl()); 15256 console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod()); 15257 console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer()); 15258 console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame()); 15259 console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture()); 15260 console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length); 15261 console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType()); 15262 console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl()); 15263 let header = request.getHeader(); 15264 for (let i = 0; i < header.length; i++) { 15265 console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue); 15266 } 15267 let stream = request.getHttpBodyStream(); 15268 if (stream) { 15269 console.log("[schemeHandler] onRequestStart has http body stream"); 15270 } else { 15271 console.log("[schemeHandler] onRequestStart has no http body stream"); 15272 } 15273 } catch (error) { 15274 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15275 } 15276 15277 if (request.getRequestUrl().endsWith("example.com")) { 15278 return false; 15279 } 15280 15281 let response = new webview.WebSchemeHandlerResponse(); 15282 try { 15283 response.setNetErrorCode(WebNetErrorList.NET_OK); 15284 response.setStatus(200); 15285 response.setStatusText("OK"); 15286 response.setMimeType("text/html"); 15287 response.setEncoding("utf-8"); 15288 response.setHeaderByName("header1", "value1", false); 15289 } catch (error) { 15290 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15291 } 15292 15293 // 调用 didFinish/didFail 前需要优先调用 didReceiveResponse 将构造的响应头传递给被拦截的请求。 15294 let buf = buffer.from(this.htmlData) 15295 try { 15296 if (buf.length == 0) { 15297 console.log("[schemeHandler] length 0"); 15298 resourceHandler.didReceiveResponse(response); 15299 // 如果认为buf.length为0是正常情况,则调用resourceHandler.didFinish,否则调用resourceHandler.didFail 15300 resourceHandler.didFail(WebNetErrorList.ERR_FAILED); 15301 } else { 15302 console.log("[schemeHandler] length 1"); 15303 resourceHandler.didReceiveResponse(response); 15304 resourceHandler.didReceiveResponseBody(buf.buffer); 15305 resourceHandler.didFinish(); 15306 } 15307 } catch (error) { 15308 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15309 } 15310 return true; 15311 }) 15312 15313 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 15314 console.log("[schemeHandler] onRequestStop"); 15315 }); 15316 15317 this.controller.setWebSchemeHandler('https', this.schemeHandler); 15318 } catch (error) { 15319 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 15320 } 15321 }) 15322 .javaScriptAccess(true) 15323 .domStorageAccess(true) 15324 } 15325 } 15326} 15327``` 15328### onRequestStop<sup>12+</sup> 15329 15330onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void 15331 15332当请求完成时的回调,仅当前面onRequestStart中回调决定拦截此请求中触发。触发的时机有以下两点: 15333 153341.WebResourceHandler调用didFail或者didFinish。 15335 153362.此请求因为其他原因中断。 15337 15338**系统能力:** SystemCapability.Web.Webview.Core 15339 15340**参数**: 15341 15342| 参数名 | 类型 | 必填 | 说明 | 15343| -------- | -------------------- | ---- | ---------- | 15344| callback | Callback\<[WebSchemeHandlerRequest](#webschemehandlerrequest12)\> | 是 | 对应请求结束的回调函数。 | 15345 15346**错误码:** 15347 15348以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 15349 15350| 错误码ID | 错误信息 | 15351| -------- | ------------------------------------- | 15352| 401 | Invalid input parameter. | 15353 15354**示例:** 15355 15356完整示例代码参考[onRequestStart](#onrequeststart12)。 15357 15358## CacheOptions<sup>12+</sup> 15359 15360Web组件预编译JavaScript生成字节码缓存的配置对象,用于控制字节码缓存更新。 15361 15362**系统能力:** SystemCapability.Web.Webview.Core 15363 15364| 名称 | 类型 | 可读 | 可写 |说明 | 15365| ----------- | ------ | -----|------|------------------- | 15366| responseHeaders | Array<[WebHeader](#webheader)> | 是 | 是 | 请求此JavaScript文件时服务器返回的响应头,使用E-Tag或Last-Modified标识文件版本,判断是否需要更新。 | 15367 15368## PlaybackStatus<sup>12+</sup> 15369 15370[handleStatusChanged](#handlestatuschanged12) 接口参数, 用于表示播放器的播放状态。 15371 15372**系统能力:** SystemCapability.Web.Webview.Core 15373 15374| 名称 | 值 | 说明 | 15375|------|----|------| 15376| PAUSED | 0 | 播放状态为播放状态。 | 15377| PLAYING | 1 | 播放状态为暂停状态。 | 15378 15379## NetworkState<sup>12+<sup> 15380 15381播放器的网络状态。 15382 15383**系统能力:** SystemCapability.Web.Webview.Core 15384 15385| 名称 | 值 | 说明 | 15386|------|----|------| 15387| EMPTY | 0 | 播放器还没有开始下载数据。 | 15388| IDLE | 1 | 播放器网络状态空闲,比如媒体分片下载完成,下一个分片还没有开始下载。 | 15389| LOADING | 2 | 播放器正在下载媒体数据。 | 15390| NETWORK_ERROR | 3 | 发生了网络错误。 | 15391 15392## ReadyState<sup>12+<sup> 15393 15394播放器的缓存状态。 15395 15396**系统能力:** SystemCapability.Web.Webview.Core 15397 15398| 名称 | 值 | 说明 | 15399|------|----|------| 15400| HAVE_NOTHING | 0 | 没有缓存。 | 15401| HAVE_METADATA | 1 | 只缓存了媒体元数据。 | 15402| HAVE_CURRENT_DATA | 2 | 只缓存到当前的播放进度。 | 15403| HAVE_FUTURE_DATA | 3 | 缓存时长超过了当前的播放进度, 但是仍有可能导致卡顿。 | 15404| HAVE_ENOUGH_DATA | 4 | 缓存了足够的数据,保证播放流畅。 | 15405 15406## MediaError<sup>12+<sup> 15407 15408播放器的错误类型。 15409 15410**系统能力:** SystemCapability.Web.Webview.Core 15411 15412| 名称 | 值 | 说明 | 15413|------|----|------| 15414| NETWORK_ERROR | 1 | 网络错误。 | 15415| FORMAT_ERROR | 2 | 媒体格式错误。 | 15416| DECODE_ERROR | 3 | 解码错误。 | 15417 15418## NativeMediaPlayerHandler<sup>12+<sup> 15419 15420[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的参数。 15421应用通过该对象,将播放器的状态报告给ArkWeb内核。 15422 15423### handleStatusChanged<sup>12+<sup> 15424 15425handleStatusChanged(status: PlaybackStatus): void 15426 15427当播放器的播放状态发生变化时,调用该方法将播放状态通知给 ArkWeb 内核。 15428 15429**系统能力:** SystemCapability.Web.Webview.Core 15430 15431**参数:** 15432 15433| 参数名 | 类型 | 必填 | 说明 | 15434|--------|------|------|------| 15435| status | [PlaybackStatus](#playbackstatus12) | 是 | 播放器的播放状态。 | 15436 15437**示例:** 15438 15439完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15440 15441### handleVolumeChanged<sup>12+<sup> 15442 15443handleVolumeChanged(volume: number): void 15444 15445当播放器的音量发生变化时,调用该方法将音量通知给 ArkWeb 内核。 15446 15447**系统能力:** SystemCapability.Web.Webview.Core 15448 15449**参数:** 15450 15451| 参数名 | 类型 | 必填 | 说明 | 15452|--------|------|------|------| 15453| volume | number | 是 | 播放器的音量。 | 15454 15455**示例:** 15456 15457完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15458 15459### handleMutedChanged<sup>12+<sup> 15460 15461handleMutedChanged(muted: boolean): void 15462 15463当播放器的静音状态发生变化时,调用该方法将静音状态通知给 ArkWeb 内核。 15464 15465**系统能力:** SystemCapability.Web.Webview.Core 15466 15467**参数:** 15468 15469| 参数名 | 类型 | 必填 | 说明 | 15470|--------|------|------|------| 15471| muted | boolean | 是 | 当前播放器是否静音。 | 15472 15473**示例:** 15474 15475完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15476 15477### handlePlaybackRateChanged<sup>12+<sup> 15478 15479handlePlaybackRateChanged(playbackRate: number): void 15480 15481当播放器的播放速度发生变化时,调用该方法将播放速度通知给 ArkWeb 内核。 15482 15483**系统能力:** SystemCapability.Web.Webview.Core 15484 15485**参数:** 15486 15487| 参数名 | 类型 | 必填 | 说明 | 15488|--------|------|------|------| 15489| playbackRate | number | 是 | 播放速率。 | 15490 15491**示例:** 15492 15493完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15494 15495### handleDurationChanged<sup>12+<sup> 15496 15497handleDurationChanged(duration: number): void 15498 15499当播放器解析出媒体的总时长时,调用该方法将媒体的总时长通知给 ArkWeb 内核。 15500 15501**系统能力:** SystemCapability.Web.Webview.Core 15502 15503**参数:** 15504 15505| 参数名 | 类型 | 必填 | 说明 | 15506|--------|------|------|------| 15507| duration | number | 是 | 媒体的总时长。单位: 秒 。 | 15508 15509**示例:** 15510 15511完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15512 15513### handleTimeUpdate<sup>12+<sup> 15514 15515handleTimeUpdate(currentPlayTime: number): void 15516 15517当媒体的播放进度发生变化时,调用该方法将媒体的播放进度通知给 ArkWeb 内核。 15518 15519**系统能力:** SystemCapability.Web.Webview.Core 15520 15521**参数:** 15522 15523| 参数名 | 类型 | 必填 | 说明 | 15524|--------|------|------|------| 15525| currentPlayTime | number | 是 | 当前播放时间。单位: 秒。 | 15526 15527**示例:** 15528 15529完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15530 15531### handleBufferedEndTimeChanged<sup>12+<sup> 15532 15533handleBufferedEndTimeChanged(bufferedEndTime: number): void 15534 15535当媒体的缓冲时长发生变化时,调用该方法将媒体的缓冲时长通知给 ArkWeb 内核。 15536 15537**系统能力:** SystemCapability.Web.Webview.Core 15538 15539**参数:** 15540 15541| 参数名 | 类型 | 必填 | 说明 | 15542|--------|------|------|------| 15543| bufferedEndTime | number | 是 | 媒体缓冲的时长。 | 15544 15545**示例:** 15546 15547完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15548 15549### handleEnded<sup>12+<sup> 15550 15551handleEnded(): void 15552 15553当媒体播放结束时,调用该方法通知给 ArkWeb 内核。 15554 15555**系统能力:** SystemCapability.Web.Webview.Core 15556 15557**示例:** 15558 15559完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15560 15561### handleNetworkStateChanged<sup>12+<sup> 15562 15563handleNetworkStateChanged(state: NetworkState): void 15564 15565当播放器的网络状态发生变化时,调用该方法将播放器的网络状态通知给 ArkWeb 内核。 15566 15567**系统能力:** SystemCapability.Web.Webview.Core 15568 15569**参数:** 15570 15571| 参数名 | 类型 | 必填 | 说明 | 15572|--------|------|------|------| 15573| state | [NetworkState](#networkstate12) | 是 | 播放器的网络状态。 | 15574 15575**示例:** 15576 15577完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15578 15579### handleReadyStateChanged<sup>12+<sup> 15580 15581handleReadyStateChanged(state: ReadyState): void 15582 15583当播放器的缓存状态发生变化时,调用该方法将播放器的缓存状态通知给 ArkWeb 内核。 15584 15585**系统能力:** SystemCapability.Web.Webview.Core 15586 15587**参数:** 15588 15589| 参数名 | 类型 | 必填 | 说明 | 15590|--------|------|------|------| 15591| state | [ReadyState](#readystate12) | 是 | 播放器的缓存状态。 | 15592 15593**示例:** 15594 15595完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15596 15597### handleFullscreenChanged<sup>12+<sup> 15598 15599handleFullscreenChanged(fullscreen: boolean): void 15600 15601当播放器的全屏状态发生变化时,调用该方法将播放器的全屏状态通知给 ArkWeb 内核。 15602 15603**系统能力:** SystemCapability.Web.Webview.Core 15604 15605**参数:** 15606 15607| 参数名 | 类型 | 必填 | 说明 | 15608|--------|------|------|------| 15609| fullscreen | boolean | 是 | 是否全屏。 | 15610 15611**示例:** 15612 15613完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15614 15615### handleSeeking<sup>12+<sup> 15616 15617handleSeeking(): void 15618 15619当播放器进入seek 状态时,调用该方法通知 ArkWeb 内核。 15620 15621**系统能力:** SystemCapability.Web.Webview.Core 15622 15623**示例:** 15624 15625完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15626 15627### handleSeekFinished<sup>12+<sup> 15628 15629handleSeekFinished(): void 15630 15631当播放器 seek 完成后,调用该方法通知 ArkWeb 内核。 15632 15633**系统能力:** SystemCapability.Web.Webview.Core 15634 15635**示例:** 15636 15637完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15638 15639### handleError<sup>12+<sup> 15640 15641handleError(error: MediaError, errorMessage: string): void 15642 15643当播放器发生错误时, 调用该方法通知 ArkWeb 内核。 15644 15645**系统能力:** SystemCapability.Web.Webview.Core 15646 15647**参数:** 15648 15649| 参数名 | 类型 | 必填 | 说明 | 15650|--------|------|------|------| 15651| error | [MediaError](#mediaerror12) | 是 | 错误类型。 | 15652| errorMessage | string | 是 | 错误的详细描述。 | 15653 15654**示例:** 15655 15656完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15657 15658### handleVideoSizeChanged<sup>12+<sup> 15659 15660handleVideoSizeChanged(width: number, height: number): void 15661 15662当播放器解析出视频的尺寸时, 调用该方法通知 ArkWeb 内核。 15663 15664**系统能力:** SystemCapability.Web.Webview.Core 15665 15666**参数:** 15667 15668| 参数名 | 类型 | 必填 | 说明 | 15669|--------|------|------|------| 15670| width | number | 是 | 视频的宽。 | 15671| height | number | 是 | 视频的高。 | 15672 15673**示例:** 15674 15675完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15676 15677## SuspendType<sup>12+<sup> 15678 15679表示播放器的挂起类型。 15680 15681**系统能力:** SystemCapability.Web.Webview.Core 15682 15683| 名称 | 值 | 说明 | 15684|------|----|------| 15685| ENTER_BACK_FORWARD_CACHE | 0 | 页面进BFCache。 | 15686| ENTER_BACKGROUND | 1 | 页面进后台。 | 15687| AUTO_CLEANUP | 2 | 系统自动清理。 | 15688 15689## NativeMediaPlayerBridge<sup>12+<sup> 15690 15691[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12) 回调函数的返回值类型。 15692接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。 15693ArkWeb 内核通过该接口类的实例对象来控制应用创建的用来接管网页媒体的播放器。 15694 15695### updateRect<sup>12+<sup> 15696 15697updateRect(x: number, y: number, width: number, height: number): void 15698 15699更新 surface 位置信息。 15700 15701**系统能力:** SystemCapability.Web.Webview.Core 15702 15703**参数:** 15704 15705| 参数名 | 类型 | 必填 | 说明 | 15706|--------|------|------|------| 15707| x | number | 是 | surface 相对于 Web 组件的 x 坐标信息。 | 15708| y | number | 是 | surface 相对于 Web 组件的 y 坐标信息。 | 15709| width | number | 是 | surface 的宽度。 | 15710| height | number | 是 | surface 的高度。 | 15711 15712**示例:** 15713 15714完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15715 15716### play<sup>12+<sup> 15717 15718play(): void 15719 15720播放视频。 15721 15722**系统能力:** SystemCapability.Web.Webview.Core 15723 15724**示例:** 15725 15726完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15727 15728### pause<sup>12+<sup> 15729 15730pause(): void 15731 15732暂停播放。 15733 15734**系统能力:** SystemCapability.Web.Webview.Core 15735 15736**示例:** 15737 15738完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15739 15740### seek<sup>12+<sup> 15741 15742seek(targetTime: number): void 15743 15744播放跳转到某个时间点。 15745 15746**系统能力:** SystemCapability.Web.Webview.Core 15747 15748**参数:** 15749 15750| 参数名 | 类型 | 必填 | 说明 | 15751|--------|------|------|------| 15752| targetTime | number | 是 | 单位: 秒。 | 15753 15754**示例:** 15755 15756完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15757 15758### setVolume<sup>12+<sup> 15759 15760setVolume(volume: number): void 15761 15762设置播放器音量值。 15763取值范围: [0, 1.0] 15764 15765**参数:** 15766 15767| 参数名 | 类型 | 必填 | 说明 | 15768|--------|------|------|------| 15769| volume | number | 是 | 播放器的音量。取值范围是从 0 到 1.0 。 其中 0 表示静音, 1.0 表示最大音量。 | 15770 15771**系统能力:** SystemCapability.Web.Webview.Core 15772 15773**示例:** 15774 15775完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15776 15777### setMuted<sup>12+<sup> 15778 15779setMuted(muted: boolean): void 15780 15781设置静音状态。 15782 15783**系统能力:** SystemCapability.Web.Webview.Core 15784 15785**参数:** 15786 15787| 参数名 | 类型 | 必填 | 说明 | 15788|--------|------|------|------| 15789| muted | boolean | 是 | 是否静音。 | 15790 15791**示例:** 15792 15793完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15794 15795### setPlaybackRate<sup>12+<sup> 15796 15797setPlaybackRate(playbackRate: number): void 15798 15799设置播放速度。 15800取值范围: [0, 10.0] 15801 15802**系统能力:** SystemCapability.Web.Webview.Core 15803 15804**参数:** 15805 15806| 参数名 | 类型 | 必填 | 说明 | 15807|--------|------|------|------| 15808| playbackRate | number | 是 | 播放倍率。取值范围是从 0 到 10.0 。其中 1 表示原速播放。 | 15809 15810**示例:** 15811 15812完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15813 15814### release<sup>12+<sup> 15815 15816release(): void 15817 15818销毁播放器。 15819 15820**系统能力:** SystemCapability.Web.Webview.Core 15821 15822**示例:** 15823 15824完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15825 15826### enterFullscreen<sup>12+<sup> 15827 15828enterFullscreen(): void 15829 15830播放器进入全屏。 15831 15832**系统能力:** SystemCapability.Web.Webview.Core 15833 15834**示例:** 15835 15836完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15837 15838### exitFullscreen<sup>12+<sup> 15839 15840exitFullscreen(): void 15841 15842播放器退出全屏。 15843 15844**系统能力:** SystemCapability.Web.Webview.Core 15845 15846**示例:** 15847 15848完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15849 15850### resumePlayer<sup>12+<sup> 15851 15852resumePlayer?(): void 15853 15854通知应用重建应用内播放器,并恢复应用内播放器的状态信息。 15855 15856**系统能力:** SystemCapability.Web.Webview.Core 15857 15858**示例:** 15859 15860完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15861 15862### suspendPlayer<sup>12+<sup> 15863 15864suspendPlayer?(type: SuspendType): void 15865 15866通知应用销毁应用内播放器,并保存应用内播放器的状态信息。 15867 15868**系统能力:** SystemCapability.Web.Webview.Core 15869 15870**参数:** 15871 15872| 参数名 | 类型 | 必填 | 说明 | 15873|--------|------|------|------| 15874| type | [SuspendType](#suspendtype12) | 是 | 播放器挂起类型。| 15875 15876**示例:** 15877 15878完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15879 15880## MediaType<sup>12+<sup> 15881 15882表示媒体类型。 15883 15884**系统能力:** SystemCapability.Web.Webview.Core 15885 15886| 名称 | 值 | 说明 | 15887|------|----|------| 15888| VIDEO | 0 | 视频。 | 15889| AUDIO | 1 | 音频。 | 15890 15891## SourceType<sup>12+<sup> 15892 15893表示媒体源的类型。 15894 15895**系统能力:** SystemCapability.Web.Webview.Core 15896 15897| 名称 | 值 | 说明 | 15898|------|----|------| 15899| URL | 0 | 媒体源的类型是 URL 。 | 15900| MSE | 1 | 媒体源的类型是 blob 。 | 15901 15902## MediaSourceInfo<sup>12+<sup> 15903 15904表示媒体源的信息。 15905 15906**系统能力:** SystemCapability.Web.Webview.Core 15907 15908| 名称 | 类型 | 必填 | 说明 | 15909|------|------|------|------| 15910| type | [SourceType](#sourcetype12) | 是 | 媒体源的类型。 | 15911| source | string | 是 | 媒体源地址。 | 15912| format | string | 是 | 媒体源格式, 可能为空, 需要使用者自己去判断格式。 | 15913 15914## NativeMediaPlayerSurfaceInfo<sup>12+<sup> 15915 15916[应用接管网页媒体播放功能](ts-basic-components-web.md#enablenativemediaplayer12)中用于同层渲染的 surface 信息。 15917 15918**系统能力:** SystemCapability.Web.Webview.Core 15919 15920| 名称 | 类型 | 必填 | 说明 | 15921|------|------|------|------| 15922| id | string | 是 | surface 的id , 用于同层渲染的NativeImage的 psurfaceid。<br/>详见[NativeEmbedDataInfo](ts-basic-components-web.md#nativeembeddatainfo11)。 | 15923| rect | [RectEvent](#rectevent12) | 是 | surface 的位置信息。 | 15924 15925## Preload<sup>12+<sup> 15926 15927播放器预加载媒体数据。 15928 15929**系统能力:** SystemCapability.Web.Webview.Core 15930 15931| 名称 | 值 | 说明 | 15932|------|----|------| 15933| NONE | 0 | 不预加载。 | 15934| METADATA | 1 | 只预加载媒体的元数据。 | 15935| AUTO | 2 | 预加载足够多的媒体数据,以保证能流畅地播放。 | 15936 15937## MediaInfo<sup>12+<sup> 15938 15939[CreateNativeMediaPlayerCallback](#createnativemediaplayercallback12)回调函数的一个参数。 15940包含了网页中媒体的信息。应用可以根据这些信息来创建接管网页媒体播放的播放器。 15941 15942**系统能力:** SystemCapability.Web.Webview.Core 15943 15944| 名称 | 类型 | 必填 | 说明 | 15945|------|------|------|------| 15946| embedID | string | 是 | 网页中的 `<video>` 或 `<audio>` 的 ID 。| 15947| mediaType | [MediaType](#mediatype12) | 是 | 媒体的类型。 | 15948| mediaSrcList | [MediaSourceInfo](#mediasourceinfo12)[] | 是 | 媒体的源。可能有多个源,应用需要选择一个支持的源来播放。 | 15949| surfaceInfo | [NativeMediaPlayerSurfaceInfo](#nativemediaplayersurfaceinfo12) | 是 | 用于同层渲染的 surface 信息。 | 15950| controlsShown | boolean | 是 | `<video>` 或 `<audio>` 中是否有 `controls`属性。 | 15951| controlList | string[] | 是 | `<video>` 或 `<audio>` 中的 `controlslist` 属性的值。 | 15952| muted | boolean | 是 | 是否要求静音播放。 | 15953| posterUrl | string | 是 | 海报的地址。 | 15954| preload | [Preload](#preload12) | 是 | 是否需要预加载。 | 15955| headers | Record\<string, string\> | 是 | 播放器请求媒体资源时,需要携带的 HTTP 头。 | 15956| attributes | Record\<string, string\> | 是 | `<video>` 或 `<audio>` 标签中的属性。 | 15957 15958 15959## CreateNativeMediaPlayerCallback<sup>12+<sup> 15960 15961type CreateNativeMediaPlayerCallback = (handler: NativeMediaPlayerHandler, mediaInfo: MediaInfo) => NativeMediaPlayerBridge 15962 15963[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)方法的参数。 15964一个回调函数, 创建一个播放器, 用于接管网页中的媒体播放。 15965 15966**系统能力:** SystemCapability.Web.Webview.Core 15967 15968**参数:** 15969 15970| 参数名 | 类型 | 必填 | 说明 | 15971|--------|------|------|------| 15972| handler | [NativeMediaPlayerHandler](#nativemediaplayerhandler12) | 是 | 通过该对象,将播放器的状态报告给 ArkWeb 内核。 | 15973| mediaInfo | [MediaInfo](#mediainfo12) | 是 | 网页媒体的信息。 | 15974 15975**返回值:** 15976 15977| 类型 | 说明 | 15978|------|------| 15979| [NativeMediaPlayerBridge](#nativemediaplayerbridge12) | 接管网页媒体的播放器和 ArkWeb 内核之间的一个接口类。<br/>应用需要实现该接口类。<br/> ArkWeb 内核通过该接口类的对象来控制应用创建的用来接管网页媒体的播放器。<br/>如果应用返回了 null , 则表示应用不接管这个媒体,由 ArkWeb 内核来播放该媒体。 | 15980 15981**示例:** 15982 15983完整示例代码参考[onCreateNativeMediaPlayer](#oncreatenativemediaplayer12)。 15984 15985## OfflineResourceMap<sup>12+</sup> 15986 15987本地离线资源配置对象,用于配置将被[injectOfflineResources](#injectofflineresources12)接口注入到内存缓存的本地离线资源的相关信息, 内核会根据此信息生成资源缓存,并据此控制缓存的有效期。 15988 15989**系统能力:** SystemCapability.Web.Webview.Core 15990 15991| 名称 | 类型 | 可读 | 可写 |说明 | 15992| ----------- | ------ | -----|------|------------------- | 15993| urlList | Array\<string\> | 是 | 是 | 本地离线资源对应的网络地址列表,列表的第一项将作为资源的源(Origin), 如果仅提供一个网络地址,则使用该地址作为这个资源的源。url仅支持http或https协议,长度不超过2048。 | 15994| resource | Uint8Array | 是 | 是 | 本地离线资源的内容。 | 15995| 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。 | 15996| type | [OfflineResourceType](#offlineresourcetype12) | 是 | 是 | 资源的类型,目前仅支持Javascript、图片和CSS类型的资源。 | 15997 15998## OfflineResourceType<sup>12+</sup> 15999 16000[OfflineResourceMap](#offlineresourcemap12)对象对应的本地离线资源的接口类型。 16001 16002**系统能力:** SystemCapability.Web.Webview.Core 16003 16004| 名称 | 值 | 说明 | 16005| ------------ | -- |--------------------------------- | 16006| IMAGE | 0 | 图片类型的资源。 | 16007| CSS | 1 | CSS类型的资源。| 16008| CLASSIC_JS | 2 | 通过<script src="" /\>标签加载的Javascript资源。| 16009| MODULE_JS | 3 |通过<script src="" type="module" /\>标签加载的Javascript资源。| 16010 16011## WebResourceType<sup>12+</sup> 16012 16013资源请求的资源类型。 16014 16015**系统能力:** SystemCapability.Web.Webview.Core 16016 16017| 名称 | 值 | 说明 | 16018| ------------ | -- |--------------------------------- | 16019| MAIN_FRAME | 0 | 顶层页面。 | 16020| SUB_FRAME | 1 | Frame或Iframe。 | 16021| STYLE_SHEET | 2 | CSS样式表。 | 16022| SCRIPT | 3 | 外部脚本。 | 16023| IMAGE | 4 | 图片(jpg/gif/png/以及其他)。 | 16024| FONT_RESOURCE | 5 | 字体。 | 16025| SUB_RESOURCE | 6 | 其他子资源。如果实际类型未知,则是默认类型。 | 16026| OBJECT | 7 | 插件的Object(或embed)标签,或者插件请求的资源。 | 16027| MEDIA | 8 | 媒体资源。 | 16028| WORKER | 9 | 专用工作线程的主资源。 | 16029| SHARED_WORKER | 10 | 共享工作线程的主资源。 | 16030| PREFETCH | 11 | 明确的预取请求。 | 16031| FAVICON | 12 | 网站图标。 | 16032| XHR | 13 | XMLHttpRequest。 | 16033| PING | 14 | <a ping\>/sendBeacon的Ping请求。 | 16034| SERVICE_WORKER | 15 | service worker的主资源。 | 16035| CSP_REPORT | 16 | 内容安全策略违规报告。 | 16036| PLUGIN_RESOURCE | 17 | 插件请求的资源。 | 16037| NAVIGATION_PRELOAD_MAIN_FRAME | 19 | 触发service worker预热的主frame跳转请求。 | 16038| NAVIGATION_PRELOAD_SUB_FRAME | 20 | 触发service worker预热的子frame跳转请求。 | 16039 16040## RectEvent<sup>12+<sup> 16041 16042矩形定义。 16043 16044**系统能力:** SystemCapability.Web.Webview.Core 16045 16046| 名称 | 类型 | 可读 | 可写 | 说明 | 16047| -------------- | --------- | ---- | ---- | ---------------------------- | 16048| x | number | 是 | 是 | 矩形区域左上角x坐标。 | 16049| y | number | 是 | 是 | 矩形区域左上角y坐标。 | 16050| width | number | 是 | 是 | 矩形的宽度。 | 16051| height | number | 是 | 是 | 矩形的高度。 | 16052 16053## BackForwardCacheSupportedFeatures<sup>12+<sup> 16054 16055选择性允许使用以下特性的页面进入前进后退缓存。完整示例代码参考[enableBackForwardCache](#enablebackforwardcache12)。 16056 16057**系统能力:** SystemCapability.Web.Webview.Core 16058 16059| 名称 | 类型 | 必填 | 说明 | 16060|------|------|------|------| 16061| nativeEmbed | boolean | 是 | 是否允许使用同层渲染的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为同层渲染元素创建的原生控件的生命周期,避免造成泄漏。 | 16062| mediaTakeOver | boolean | 是 | 是否允许使用视频托管的页面进入前进后退缓存,默认不允许。如果设置为允许,需要维护为视频元素创建的原生控件的生命周期,避免造成泄漏。| 16063 16064### constructor<sup>12+</sup> 16065 16066constructor() 16067 16068BackForwardCacheSupportedFeatures的构造函数。 16069 16070**系统能力:** SystemCapability.Web.Webview.Core 16071 16072## BackForwardCacheOptions<sup>12+<sup> 16073 16074前进后退缓存相关设置对象,用来控制Web组件前进后退缓存相关选项。完整示例代码参考[BackForwardCacheOptions](#backforwardcacheoptions12)。 16075 16076**系统能力:** SystemCapability.Web.Webview.Core 16077 16078| 名称 | 类型 | 必填 | 说明 | 16079|------|------|------|------| 16080| size | number | 是 | 设置每个Web组件允许缓存的最大页面个数。默认为1,最大可设置为50。设置为0或负数时,前进后退缓存功能不生效。Web会根据内存压力对缓存进行回收。 | 16081| timeToLive | number | 是 | 设置每个Web组件允许页面在前进后退缓存中停留的时间,默认为600秒。设置为0或负数时,前进后退缓存功能不生效。| 16082 16083### constructor<sup>12+</sup> 16084 16085constructor() 16086 16087BackForwardCacheOptions的构造函数。 16088 16089**系统能力:** SystemCapability.Web.Webview.Core 16090 16091## AdsBlockManager<sup>12+</sup> 16092 16093通过AdsBlockManager可以向Web组件中设置自定义的广告过滤配置、关闭特定网站的广告过滤功能,其中每个应用中的所有Web组件都共享一个AdsBlockManager实例。 16094 16095### setAdsBlockRules<sup>12+</sup> 16096 16097static setAdsBlockRules(rulesFile: string, replace: boolean): void 16098 16099向Web组件中设置自定义的符合通用easylist语法规则的广告过滤配置文件。 16100 16101> **说明:** 16102> 16103> 此接口设置的广告过滤规则,内部解析成功后会持久化存储,应用重启后不需要重复设置。 16104 16105**系统能力:** SystemCapability.Web.Webview.Core 16106 16107**参数:** 16108 16109| 参数名 | 类型 | 必填 | 说明 | 16110| ---------- | ------ | ---- | -------------------------------- | 16111| rulesFile | string | 是 | 指定了符合 easylist 通用语法的规则文件路径,应用需要有此文件的读权限。 | 16112| replace | boolean | 是 | true表示强制替换掉内置的默认规则,false表示设置的自定义规则将与内置规则共同工作。 | 16113 16114**错误码:** 16115 16116以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16117 16118| 错误码ID | 错误信息 | 16119| -------- | ----------------------- | 16120| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16121 16122**示例:** 16123 16124```ts 16125// xxx.ets 16126import { webview } from '@kit.ArkWeb'; 16127import { picker, fileUri } from '@kit.CoreFileKit'; 16128 16129// 演示点击按钮,通过filepicker打开一个easylist规则文件并设置到Web组件中 16130@Entry 16131@Component 16132struct WebComponent { 16133 controller: webview.WebviewController = new webview.WebviewController(); 16134 16135 build() { 16136 Row() { 16137 Flex() { 16138 Button({ type: ButtonType.Capsule }) { 16139 Text("setAdsBlockRules") 16140 } 16141 .onClick(() => { 16142 try { 16143 let documentSelectionOptions: ESObject = new picker.DocumentSelectOptions(); 16144 let documentPicker: ESObject = new picker.DocumentViewPicker(); 16145 documentPicker.select(documentSelectionOptions).then((documentSelectResult: ESObject) => { 16146 if (documentSelectResult && documentSelectResult.length > 0) { 16147 let fileRealPath = new fileUri.FileUri(documentSelectResult[0]); 16148 console.info('DocumentViewPicker.select successfully, uri: ' + fileRealPath); 16149 webview.AdsBlockManager.setAdsBlockRules(fileRealPath.path, true); 16150 } 16151 }) 16152 } catch (err) { 16153 console.error('DocumentViewPicker.select failed with err:' + err); 16154 } 16155 }) 16156 } 16157 } 16158 } 16159} 16160``` 16161 16162### addAdsBlockDisallowedList<sup>12+</sup> 16163 16164static addAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16165 16166向AdsBlockManager的DisallowedList中添加一组域名。广告过滤功能开启时,将禁用这些网站的广告过滤功能。 16167 16168> **说明:** 16169> 16170> 此接口设置的域名不会持久化,应用重启需要重新设置。 16171> 16172> 广告过滤特性会使用后缀匹配的方式判断domainSuffix和当前站点的url是否能匹配,例如,当前Web组件打开的网站是https://www.example.com,设置的DisallowList中有'example.com'或者'www.example.com',后缀匹配成功,此网站将禁用广告过滤,访问'https://m.example.com'也将禁用广告过滤。 16173 16174**系统能力:** SystemCapability.Web.Webview.Core 16175 16176**参数:** 16177 16178| 参数名 | 类型 | 必填 | 说明 | 16179| ---------- | ------ | ---- | -------------------------------- | 16180| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16181 16182**错误码:** 16183 16184以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16185 16186| 错误码ID | 错误信息 | 16187| -------- | ----------------------- | 16188| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16189 16190**示例:** 16191 16192```ts 16193// xxx.ets 16194import { webview } from '@kit.ArkWeb'; 16195 16196// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 16197@Entry 16198@Component 16199struct WebComponent { 16200 main_url: string = 'https://www.example.com'; 16201 text_input_controller: TextInputController = new TextInputController(); 16202 controller: webview.WebviewController = new webview.WebviewController(); 16203 @State input_text: string = 'https://www.example.com'; 16204 16205 build() { 16206 Column() { 16207 Row() { 16208 Flex() { 16209 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16210 .id("input_url") 16211 .height(40) 16212 .margin(5) 16213 .borderColor(Color.Blue) 16214 .onChange((value: string) => { 16215 this.input_text = value; 16216 }) 16217 16218 Button({type: ButtonType.Capsule}) { Text("Go") } 16219 .onClick(() => { 16220 this.controller.loadUrl(this.input_text); 16221 }) 16222 16223 Button({type: ButtonType.Capsule}) { Text("addAdsBlockDisallowedList") } 16224 .onClick(() => { 16225 let arrDomainSuffixes = new Array<string>(); 16226 arrDomainSuffixes.push('example.com'); 16227 arrDomainSuffixes.push('abcdefg.cn'); 16228 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDomainSuffixes); 16229 }) 16230 } 16231 } 16232 Web({ src: this.main_url, controller: this.controller }) 16233 .onControllerAttached(()=>{ 16234 this.controller.enableAdsBlock(true); 16235 }) 16236 } 16237 } 16238} 16239``` 16240 16241### removeAdsBlockDisallowedList<sup>12+</sup> 16242 16243static removeAdsBlockDisallowedList(domainSuffixes: Array\<string\>): void 16244 16245从AdsBlockManager的DisallowedList中删除一组域名。 16246 16247> **说明:** 16248> 16249> AdsBlockManager的DisallowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 16250 16251**系统能力:** SystemCapability.Web.Webview.Core 16252 16253**参数:** 16254 16255| 参数名 | 类型 | 必填 | 说明 | 16256| ---------- | ------ | ---- | -------------------------------- | 16257| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16258 16259**错误码:** 16260 16261以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16262 16263| 错误码ID | 错误信息 | 16264| -------- | ----------------------- | 16265| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16266 16267**示例:** 16268 16269```ts 16270// xxx.ets 16271import { webview } from '@kit.ArkWeb'; 16272 16273// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 16274@Entry 16275@Component 16276struct WebComponent { 16277 main_url: string = 'https://www.example.com'; 16278 text_input_controller: TextInputController = new TextInputController(); 16279 controller: webview.WebviewController = new webview.WebviewController(); 16280 @State input_text: string = 'https://www.example.com'; 16281 16282 build() { 16283 Column() { 16284 Row() { 16285 Flex() { 16286 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16287 .id("input_url") 16288 .height(40) 16289 .margin(5) 16290 .borderColor(Color.Blue) 16291 .onChange((value: string) => { 16292 this.input_text = value; 16293 }) 16294 16295 Button({type: ButtonType.Capsule}) { Text("Go") } 16296 .onClick(() => { 16297 this.controller.loadUrl(this.input_text); 16298 }) 16299 16300 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockDisallowedList") } 16301 .onClick(() => { 16302 let arrDomainSuffixes = new Array<string>(); 16303 arrDomainSuffixes.push('example.com'); 16304 arrDomainSuffixes.push('abcdefg.cn'); 16305 webview.AdsBlockManager.removeAdsBlockDisallowedList(arrDomainSuffixes); 16306 }) 16307 } 16308 } 16309 Web({ src: this.main_url, controller: this.controller }) 16310 .onControllerAttached(()=>{ 16311 this.controller.enableAdsBlock(true); 16312 }) 16313 } 16314 } 16315} 16316``` 16317 16318### clearAdsBlockDisallowedList<sup>12+</sup> 16319 16320static clearAdsBlockDisallowedList(): void 16321 16322清空AdsBlockManager的DisallowedList。 16323 16324**系统能力:** SystemCapability.Web.Webview.Core 16325 16326**示例:** 16327 16328```ts 16329// xxx.ets 16330import { webview } from '@kit.ArkWeb'; 16331 16332@Entry 16333@Component 16334struct WebComponent { 16335 main_url: string = 'https://www.example.com'; 16336 text_input_controller: TextInputController = new TextInputController(); 16337 controller: webview.WebviewController = new webview.WebviewController(); 16338 @State input_text: string = 'https://www.example.com'; 16339 16340 build() { 16341 Column() { 16342 Row() { 16343 Flex() { 16344 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16345 .id("input_url") 16346 .height(40) 16347 .margin(5) 16348 .borderColor(Color.Blue) 16349 .onChange((value: string) => { 16350 this.input_text = value; 16351 }) 16352 16353 Button({type: ButtonType.Capsule}) { Text("Go") } 16354 .onClick(() => { 16355 this.controller.loadUrl(this.input_text); 16356 }) 16357 16358 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockDisallowedList") } 16359 .onClick(() => { 16360 webview.AdsBlockManager.clearAdsBlockDisallowedList(); 16361 }) 16362 } 16363 } 16364 Web({ src: this.main_url, controller: this.controller }) 16365 .onControllerAttached(()=>{ 16366 this.controller.enableAdsBlock(true); 16367 }) 16368 } 16369 } 16370} 16371``` 16372 16373### addAdsBlockAllowedList<sup>12+</sup> 16374 16375static addAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 16376 16377向AdsBlockManager的AllowedList中添加一组域名,主要用于重新开启DisallowList中的部分网站的广告过滤。 16378 16379> **说明:** 16380> 16381> 此接口设置的域名不会持久化,应用重启需要重新设置。 16382> 16383> AllowedList的优先级比DisAllowList高,例如,DisallowList中配置了['example.com'],禁用了所有example.com域名下的网页,此时如果需要开启'news.example.com'下的广告过滤,可以使用addAdsBlockAllowedList(['news.example.com'])。 16384 16385**系统能力:** SystemCapability.Web.Webview.Core 16386 16387**参数:** 16388 16389| 参数名 | 类型 | 必填 | 说明 | 16390| ---------- | ------ | ---- | -------------------------------- | 16391| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16392 16393**错误码:** 16394 16395以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16396 16397| 错误码ID | 错误信息 | 16398| -------- | ----------------------- | 16399| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16400 16401**示例:** 16402 16403```ts 16404// xxx.ets 16405import { webview } from '@kit.ArkWeb'; 16406 16407// 演示通过一个按钮的点击向Web组件设置广告过滤的域名策略 16408@Entry 16409@Component 16410struct WebComponent { 16411 main_url: string = 'https://www.example.com'; 16412 text_input_controller: TextInputController = new TextInputController(); 16413 controller: webview.WebviewController = new webview.WebviewController(); 16414 @State input_text: string = 'https://www.example.com'; 16415 16416 build() { 16417 Column() { 16418 Row() { 16419 Flex() { 16420 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16421 .id("input_url") 16422 .height(40) 16423 .margin(5) 16424 .borderColor(Color.Blue) 16425 .onChange((value: string) => { 16426 this.input_text = value; 16427 }) 16428 16429 Button({type: ButtonType.Capsule}) { Text("Go") } 16430 .onClick(() => { 16431 this.controller.loadUrl(this.input_text); 16432 }) 16433 16434 Button({type: ButtonType.Capsule}) { Text("addAdsBlockAllowedList") } 16435 .onClick(() => { 16436 let arrDisallowDomainSuffixes = new Array<string>(); 16437 arrDisallowDomainSuffixes.push('example.com'); 16438 webview.AdsBlockManager.addAdsBlockDisallowedList(arrDisallowDomainSuffixes); 16439 16440 let arrAllowedDomainSuffixes = new Array<string>(); 16441 arrAllowedDomainSuffixes.push('news.example.com'); 16442 webview.AdsBlockManager.addAdsBlockAllowedList(arrAllowedDomainSuffixes); 16443 }) 16444 } 16445 } 16446 Web({ src: this.main_url, controller: this.controller }) 16447 .onControllerAttached(()=>{ 16448 this.controller.enableAdsBlock(true) 16449 }) 16450 } 16451 } 16452} 16453``` 16454 16455### removeAdsBlockAllowedList<sup>12+</sup> 16456 16457static removeAdsBlockAllowedList(domainSuffixes: Array\<string\>): void 16458 16459从AdsBlockManager的AllowedList中删除一组域名。 16460 16461> **说明:** 16462> 16463> AdsBlockManager的AllowedList不会持久化,应用重启需要重新设置。删除不存在的条目不会触发异常。 16464 16465**系统能力:** SystemCapability.Web.Webview.Core 16466 16467**参数:** 16468 16469| 参数名 | 类型 | 必填 | 说明 | 16470| ---------- | ------ | ---- | -------------------------------- | 16471| domainSuffixes | Array\<string\> | 是 | 一组域名列表,例如['example.com', 'abcd.efg.com'] | 16472 16473**错误码:** 16474 16475以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 16476 16477| 错误码ID | 错误信息 | 16478| -------- | ----------------------- | 16479| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 16480 16481**示例:** 16482 16483```ts 16484// xxx.ets 16485import { webview } from '@kit.ArkWeb'; 16486 16487// 演示通过一个按钮的点击从AdsBlockManager的DisallowedList中删除域名元素 16488@Entry 16489@Component 16490struct WebComponent { 16491 main_url: string = 'https://www.example.com'; 16492 text_input_controller: TextInputController = new TextInputController(); 16493 controller: webview.WebviewController = new webview.WebviewController(); 16494 @State input_text: string = 'https://www.example.com'; 16495 16496 build() { 16497 Column() { 16498 Row() { 16499 Flex() { 16500 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16501 .id("input_url") 16502 .height(40) 16503 .margin(5) 16504 .borderColor(Color.Blue) 16505 .onChange((value: string) => { 16506 this.input_text = value; 16507 }) 16508 16509 Button({type: ButtonType.Capsule}) { Text("Go") } 16510 .onClick(() => { 16511 this.controller.loadUrl(this.input_text); 16512 }) 16513 16514 Button({type: ButtonType.Capsule}) { Text("removeAdsBlockAllowedList") } 16515 .onClick(() => { 16516 let arrDomainSuffixes = new Array<string>(); 16517 arrDomainSuffixes.push('example.com'); 16518 arrDomainSuffixes.push('abcdefg.cn'); 16519 webview.AdsBlockManager.removeAdsBlockAllowedList(arrDomainSuffixes); 16520 }) 16521 } 16522 } 16523 Web({ src: this.main_url, controller: this.controller }) 16524 .onControllerAttached(()=>{ 16525 this.controller.enableAdsBlock(true); 16526 }) 16527 } 16528 } 16529} 16530``` 16531 16532### clearAdsBlockAllowedList<sup>12+</sup> 16533 16534static clearAdsBlockAllowedList(): void 16535 16536清空AdsBlockManager的AllowedList。 16537 16538**系统能力:** SystemCapability.Web.Webview.Core 16539 16540**示例:** 16541 16542```ts 16543// xxx.ets 16544import { webview } from '@kit.ArkWeb'; 16545 16546@Entry 16547@Component 16548struct WebComponent { 16549 main_url: string = 'https://www.example.com'; 16550 text_input_controller: TextInputController = new TextInputController(); 16551 controller: webview.WebviewController = new webview.WebviewController(); 16552 @State input_text: string = 'https://www.example.com'; 16553 16554 16555 build() { 16556 Column() { 16557 Row() { 16558 Flex() { 16559 TextInput({ text: this.input_text, placeholder: this.main_url, controller: this.text_input_controller}) 16560 .id("input_url") 16561 .height(40) 16562 .margin(5) 16563 .borderColor(Color.Blue) 16564 .onChange((value: string) => { 16565 this.input_text = value; 16566 }) 16567 16568 Button({type: ButtonType.Capsule}) { Text("Go") } 16569 .onClick(() => { 16570 this.controller.loadUrl(this.input_text); 16571 }) 16572 16573 Button({type: ButtonType.Capsule}) { Text("clearAdsBlockAllowedList") } 16574 .onClick(() => { 16575 webview.AdsBlockManager.clearAdsBlockAllowedList(); 16576 }) 16577 } 16578 } 16579 Web({ src: this.main_url, controller: this.controller }) 16580 .onControllerAttached(()=>{ 16581 this.controller.enableAdsBlock(true); 16582 }) 16583 } 16584 } 16585} 16586``` 16587 16588## SnapshotInfo<sup>12+</sup> 16589 16590获取全量绘制结果入参。 16591 16592**系统能力:** SystemCapability.Web.Webview.Core 16593 16594| 名称 | 类型 | 必填 | 说明 | 16595|------|------|------|------| 16596| id | string | 否 | snapshot的id。| 16597| 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。)| 16598 16599## SnapshotResult<sup>12+</sup> 16600 16601全量绘制回调结果。 16602 16603**系统能力:** SystemCapability.Web.Webview.Core 16604 16605| 名称 | 类型 | 必填 | 说明 | 16606|------|------|--|---------| 16607| id | string | 否 | snapshot的id。| 16608| status | boolean | 否 | snapshot的状态,正常为true,失败为false,获取全量绘制结果失败,返回size的长宽都为0,map为空。| 16609| size | [SizeOptions](../apis-arkui/arkui-ts/ts-types.md#sizeoptions) | 否 | web绘制的真实尺寸,number类型,单位vp。| 16610| imagePixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 全量绘制结果image.pixelMap格式。| 16611 16612> **说明:** 16613> 16614> 仅支持对渲染进程上的资源进行截图:静态图片和文本。 16615> 不支持动态视频,如果页面有视频则截图时会显示该视频的占位图片。 16616 16617## ScrollType<sup>12+</sup> 16618 16619Scroll滚动类型,用于[setScrollable](#setscrollable12)。 16620 16621**系统能力:** SystemCapability.Web.Webview.Core 16622 16623| 名称 | 值 | 说明 | 16624| ------------ | -- |--------------------------------- | 16625| EVENT | 0 | 滚动事件,表示通过触摸屏,触摸板,鼠标滚轮生成的网页滚动。| 16626 16627## PressureLevel<sup>14+</sup> 16628 16629内存压力等级。在应用主动清理Web组件占用的缓存时,Web内核会根据内存压力等级,进行缓存释放。 16630 16631**系统能力:** SystemCapability.Web.Webview.Core 16632 16633| 名称 | 值 | 说明 | 16634| ------------------------------- | - | ---------- | 16635| MEMORY_PRESSURE_LEVEL_MODERATE | 1 | 中等内存压力等级。这个等级下,Web内核会尝试释放重新分配开销较小且不需要立即使用的缓存。 | 16636| MEMORY_PRESSURE_LEVEL_CRITICAL | 2 | 严重内存压力等级。这个等级下,Web内核会尝试释放所有可能的内存缓存。 | 16637 16638## PdfConfiguration<sup>14+</sup> 16639 16640createPdf函数输入参数。 16641 16642> **说明:** 16643> 16644> 英寸与像素之间转换公式:像素 = 96 * 英寸。 16645 16646**系统能力:** SystemCapability.Web.Webview.Core 16647 16648| 名称 | 类型 | 必填 | 说明 | 16649| --------------------- | ------- | ---- | ------------------------------------------------------------ | 16650| width | number | 是 | 页面宽度。单位:英寸。<br />推荐值:A4纸页面宽度8.27英寸。 | 16651| height | number | 是 | 页面高度。单位:英寸。<br />推荐值:A4纸页面高度11.69英寸。 | 16652| scale | number | 否 | 放大倍数。取值范围:[0.0, 2.0]。如果不在取值范围内,小于0.0设置为0.0,大于2.0设置为2.0。默认值:1.0。 | 16653| marginTop | number | 是 | 上边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16654| marginBottom | number | 是 | 下边距。取值范围:[0.0, 页面高度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16655| marginRight | number | 是 | 右边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16656| marginLeft | number | 是 | 左边距。取值范围:[0.0, 页面宽度的一半)。如果不在取值范围内,则设置为0.0。单位:英寸。 | 16657| shouldPrintBackground | boolean | 否 | 是否打印背景颜色。默认值:false。 | 16658 16659## PdfData<sup>14+</sup> 16660 16661createPdf函数输出数据流类。 16662 16663> **说明:** 16664> 16665> 在网页生成PDF过程中,返回的是数据流,由PdfData类封装。 16666 16667### pdfArrayBuffer<sup>14+</sup> 16668 16669pdfArrayBuffer(): Uint8Array 16670 16671获取网页生成的数据流。完整示例代码参考[createPdf](#createpdf14)。 16672 16673**系统能力:** SystemCapability.Web.Webview.Core 16674 16675**返回值:** 16676 16677| 类型 | 说明 | 16678| ---------- | -------- | 16679| Uint8Array | 数据流。 | 16680 16681## ScrollOffset<sup>13+</sup> 16682 16683网页当前的滚动偏移量。 16684 16685**系统能力:** SystemCapability.Web.Webview.Core 16686 16687| 名称 | 类型 | 可读 | 可写 | 说明 | 16688| ---- | ------ | ---- | ---- | ------------------------------------------------------------ | 16689| x | number | 是 | 是 | 网页在水平方向的滚动偏移量。取值为网页左边界x坐标与Web组件左边界x坐标的差值。单位为vp。<br/>当网页向右过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向左过滚动时,取值为0或正值。 | 16690| y | number | 是 | 是 | 网页在垂直方向的滚动偏移量。取值为网页上边界y坐标与Web组件上边界y坐标的差值。单位为vp。<br/>当网页向下过滚动时,取值范围为负值。<br/>当网页没有过滚动或者网页向上过滚动时,取值为0或正值。 | 16691