1# AtomicServiceWeb 2 3为开发者提供满足定制化诉求的Web高阶组件,屏蔽原生Web组件中无需关注的接口,并提供JS扩展能力。 4 5> **说明:** 6> 7> - 该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> - 示例效果请以真机运行为准,当前IDE预览器不支持。 9 10## 需要权限 11 12访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考[声明权限](../../../security/AccessToken/declare-permissions.md)。 13 14## 导入模块 15 16``` 17import { AtomicServiceWeb } from '@kit.ArkUI'; 18``` 19 20## 子组件 21 22无 23 24## 属性 25 26不支持[通用属性](ts-universal-attributes-size.md) 27 28## AtomicServiceWeb 29 30``` 31AtomicServiceWeb({ 32 src: ResourceStr, 33 controller: AtomicServiceWebController, 34 navPathStack?: NavPathStack, 35 mixedMode?: MixedMode, 36 darkMode?: WebDarkMode, 37 forceDarkAccess?: boolean, 38 onMessage?: Callback<OnMessageEvent>, 39 onErrorReceive?: Callback<OnErrorReceiveEvent>, 40 onHttpErrorReceive?: Callback<OnHttpErrorReceiveEvent>, 41 onPageBegin?: Callback<OnPageBeginEvent>, 42 onPageEnd?: Callback<OnPageEndEvent>, 43 onControllerAttached?: Callback<void>, 44 onLoadIntercept?: Callback<OnLoadInterceptEvent, boolean>, 45 onProgressChange?: Callback<OnProgressChangeEvent> 46}) 47``` 48 49**装饰器类型:**@Component 50 51**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 52 53**系统能力:** SystemCapability.ArkUI.ArkUI.Full 54 55**参数**: 56 57| 名称 | 类型 | 必填 | 装饰器类型 | 描述 | 58|----------------------|------------------------------------------------------------------------------------------------------------------|----|-------------|----------------------------------------------------------------------------------------------------------------------| 59| src | [ResourceStr](ts-types.md#resourcestr) | 是 | - | 网页资源地址,访问网络资源需要在AGC配置业务域名,访问本地资源仅支持包内文件($rawfile)。不支持通过状态变量(例如@State)动态更新地址。加载的网页中支持通过JS SDK提供的接口调用系统能力,具体以JS SDK为准。 | 60| controller | [AtomicServiceWebController](#atomicservicewebcontroller) | 是 | @ObjectLink | 通过AtomicServiceWebController可以控制AtomicServiceWeb组件各种行为。 | 61| navPathStack | [NavPathStack](ts-basic-components-navigation.md#navpathstack10) | 否 | - | 路由栈信息。当使用NavDestination作为页面的根容器时,需传入NavDestination容器对应的NavPathStack处理页面路由。 | 62| mixedMode | [MixedMode](../../apis-arkweb/ts-basic-components-web.md#mixedmode枚举说明) | 否 | @Prop | 设置是否允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容,默认不允许加载HTTP和HTTPS混合内容。 | 63| darkMode | [WebDarkMode](../../apis-arkweb/ts-basic-components-web.md#webdarkmode9枚举说明) | 否 | @Prop | 设置Web深色模式,默认关闭。 | 64| forceDarkAccess | boolean | 否 | @Prop | 设置网页是否开启强制深色模式。默认关闭。该属性仅在darkMode开启深色模式时生效。 | 65| onMessage | Callback\<[OnMessageEvent](#onmessageevent)\> | 否 | - | H5页面通过JS SDK的postMessage()发送消息后,Web组件对应的页面返回或销毁时,触发该回调。 | 66| onErrorReceive | Callback\<[OnErrorReceiveEvent](#onerrorreceiveevent)\> | 否 | - | 网页加载遇到错误时触发该回调。出于性能考虑,建议此回调中尽量执行简单逻辑。在无网络的情况下,触发此回调。 | 67| onHttpErrorReceive | Callback\<[OnHttpErrorReceiveEvent](#onhttperrorreceiveevent)\> | 否 | - | 网页加载资源遇到的HTTP错误(响应码>=400)时触发该回调。 | 68| onPageBegin | Callback\<[OnPageBeginEvent](#onpagebeginevent)\> | 否 | - | 网页开始加载时触发该回调,且只在主frame触发,iframe或者frameset的内容加载时不会触发此回调。 | 69| onPageEnd | Callback\<[OnPageEndEvent](#onpageendevent)\> | 否 | - | 网页加载完成时触发该回调,且只在主frame触发。 | 70| onControllerAttached | Callback\<void\> | 否 | - | 当Controller成功绑定到Web组件时触发该回调。 | 71| onLoadIntercept | Callback\<[OnLoadInterceptEvent](../../apis-arkweb/ts-basic-components-web.md#onloadinterceptevent12), boolean\> | 否 | - | 当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。 | 72| onProgressChange | Callback\<[OnProgressChangeEvent](../../apis-arkweb/ts-basic-components-web.md#onprogresschangeevent12)\> | 否 | - | 网页加载进度变化时触发该回调。 | 73 74## AtomicServiceWebController 75 76通过AtomicServiceWebController可以控制AtomicServiceWeb组件各种行为。一个AtomicServiceWebController对象只能控制一个AtomicServiceWeb组件,且必须在AtomicServiceWeb组件和AtomicServiceWebController绑定后,才能调用AtomicServiceWebController上的方法。 77 78**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 79 80**系统能力:** SystemCapability.ArkUI.ArkUI.Full 81 82### constructor 83 84constructor() 85 86用于创建 AtomicServiceWebController 对象的构造函数。 87 88**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 89 90**系统能力:** SystemCapability.ArkUI.ArkUI.Full 91 92### getUserAgent 93 94getUserAgent(): string 95 96获取当前默认用户代理。 97 98**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 99 100**系统能力:** SystemCapability.ArkUI.ArkUI.Full 101 102**返回值:** 103 104| 类型 | 说明 | 105|--------|---------| 106| string | 默认用户代理。 | 107 108**错误码:** 109 110以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md)。 111 112| 错误码ID | 错误信息 | 113|----------|--------------------------------------------------------------------------------------------------| 114| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 115 116### getCustomUserAgent 117 118getCustomUserAgent(): string 119 120获取自定义用户代理。 121 122**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 123 124**系统能力:** SystemCapability.ArkUI.ArkUI.Full 125 126**返回值:** 127 128| 类型 | 说明 | 129|--------|------------| 130| string | 用户自定义代理信息。 | 131 132**错误码:** 133 134以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 135 136| 错误码ID | 错误信息 | 137|----------|--------------------------------------------------------------------------------------------------| 138| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 139 140### setCustomUserAgent 141 142setCustomUserAgent(userAgent: string): void 143 144设置自定义用户代理,会覆盖系统的用户代理。 145 146建议在onControllerAttached回调事件中设置UserAgent,设置方式请参考示例。不建议将UserAgent设置在onLoadIntercept回调事件中,会概率性出现设置失败。 147 148> **说明:** 149> 150>当Web组件src设置了url,且未在onControllerAttached回调事件中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的异常现象。 151 152**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 153 154**系统能力:** SystemCapability.ArkUI.ArkUI.Full 155 156**参数:** 157 158| 参数名 | 类型 | 必填 | 说明 | 159|-----------|--------|----|--------------------------------------------------------------------------| 160| userAgent | string | 是 | 用户自定义代理信息。建议先使用[getUserAgent](#getuseragent)获取当前默认用户代理,在此基础上追加自定义用户代理信息。 | 161 162**错误码:** 163 164以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 165 166| 错误码ID | 错误信息 | 167|----------|--------------------------------------------------------------------------------------------------| 168| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 169 170### refresh 171 172refresh(): void 173 174调用此接口通知AtomicServiceWeb组件刷新网页。 175 176**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 177 178**系统能力:** SystemCapability.ArkUI.ArkUI.Full 179 180**错误码:** 181 182以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 183 184| 错误码ID | 错误信息 | 185|----------|--------------------------------------------------------------------------------------------------| 186| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 187 188### forward 189 190forward(): void 191 192按照历史栈,前进一个页面。一般结合[accessForward](#accessforward)一起使用。 193 194**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 195 196**系统能力:** SystemCapability.ArkUI.ArkUI.Full 197 198**错误码:** 199 200以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 201 202| 错误码ID | 错误信息 | 203|----------|--------------------------------------------------------------------------------------------------| 204| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 205 206### backward 207 208backward(): void 209 210按照历史栈,后退一个页面。一般结合[accessBackward](#accessbackward)一起使用。 211 212**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 213 214**系统能力:** SystemCapability.ArkUI.ArkUI.Full 215 216**错误码:** 217 218以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 219 220| 错误码ID | 错误信息 | 221|----------|--------------------------------------------------------------------------------------------------| 222| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 223 224### accessForward 225 226accessForward(): boolean 227 228当前页面是否可前进,即当前页面是否有前进历史记录。 229 230**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 231 232**系统能力:** SystemCapability.ArkUI.ArkUI.Full 233 234**返回值:** 235 236| 类型 | 说明 | 237|---------|-----------------------| 238| boolean | 可以前进返回true,否则返回false。 | 239 240**错误码:** 241 242以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 243 244| 错误码ID | 错误信息 | 245|----------|--------------------------------------------------------------------------------------------------| 246| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 247 248### accessBackward 249 250accessBackward(): boolean 251 252当前页面是否可后退,即当前页面是否有返回历史记录。 253 254**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 255 256**系统能力:** SystemCapability.ArkUI.ArkUI.Full 257 258**返回值:** 259 260| 类型 | 说明 | 261|---------|-----------------------| 262| boolean | 可以后退返回true,否则返回false。 | 263 264**错误码:** 265 266以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 267 268| 错误码ID | 错误信息 | 269|----------|--------------------------------------------------------------------------------------------------| 270| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 271 272### accessStep 273 274accessStep(step: number): boolean 275 276当前页面是否可前进或者后退给定的step步。 277 278**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 279 280**系统能力:** SystemCapability.ArkUI.ArkUI.Full 281 282**参数:** 283 284| 参数名 | 类型 | 必填 | 说明 | 285|------|--------|----|-----------------------| 286| step | number | 是 | 要跳转的步数,正数代表前进,负数代表后退。 | 287 288**返回值:** 289 290| 类型 | 说明 | 291|---------|-----------| 292| boolean | 页面是否可前进或者后退给定的step步 | 293 294**错误码:** 295 296以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 297 298| 错误码ID | 错误信息 | 299|----------|--------------------------------------------------------------------------------------------------| 300| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 301 302### loadUrl 303 304loadUrl(url: string | Resource, headers?: Array\<WebHeader>): void 305 306加载指定的URL。 307 308**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 309 310**系统能力:** SystemCapability.ArkUI.ArkUI.Full 311 312**参数:** 313 314| 参数名 | 类型 | 必填 | 说明 | 315|---------|---------------------------------|----|:---------------| 316| url | string \| [Resource](../../apis-arkui/arkui-ts/ts-types.md#resource) | 是 | 需要加载的 URL。 | 317| headers | Array\<[WebHeader](#webheader)> | 否 | URL的附加HTTP请求头。 | 318 319**错误码:** 320 321以下错误码的详细介绍请参见[错误码](../../apis-arkweb/errorcode-webview.md). 322 323| 错误码ID | 错误信息 | 324|----------|--------------------------------------------------------------------------------------------------| 325| 17100001 | Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component. | 326| 17100002 | Invalid url. | 327| 17100003 | Invalid resource path or file type. | 328 329## WebHeader 330 331Web组件返回的请求/响应头对象。 332 333| 名称 | 类型 | 可读 | 可写 | 说明 | 334|-------------|--------|----|----|---------------| 335| headerKey | string | 是 | 是 | 请求/响应头的key。 | 336| headerValue | string | 是 | 是 | 请求/响应头的value。 | 337 338## OnMessageEvent 339 340定义页面回退或销毁时触发该回调。 341 342**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 343 344**系统能力:** SystemCapability.ArkUI.ArkUI.Full 345 346| 名称 | 类型 | 必填 | 说明 | 347|------|----------|----|-------| 348| data | Object[] | 是 | 消息列表。 | 349 350## OnErrorReceiveEvent 351 352定义网页加载遇到错误时触发该回调。 353 354**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 355 356**系统能力:** SystemCapability.ArkUI.ArkUI.Full 357 358| 名称 | 类型 | 必填 | 说明 | 359|---------|---------------------------------------------------------------------------------------|----|-----------------| 360| request | [WebResourceRequest](../../apis-arkweb/ts-basic-components-web.md#webresourcerequest) | 是 | 网页请求的封装信息。 | 361| error | [WebResourceError](../../apis-arkweb/ts-basic-components-web.md#webresourceerror) | 是 | 网页加载资源错误的封装信息 。 | 362 363## OnHttpErrorReceiveEvent 364 365定义网页收到加载资源加载HTTP错误时触发。 366 367**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 368 369**系统能力:** SystemCapability.ArkUI.ArkUI.Full 370 371| 名称 | 类型 | 必填 | 说明 | 372|----------|-----------------------------------------------------------------------------------------|----|------------| 373| request | [WebResourceRequest](../../apis-arkweb/ts-basic-components-web.md#webresourcerequest) | 是 | 网页请求的封装信息。 | 374| response | [WebResourceResponse](../../apis-arkweb/ts-basic-components-web.md#webresourceresponse) | 是 | 资源响应的封装信息。 | 375 376## OnPageBeginEvent 377 378定义网页加载开始时触发的函数。 379 380**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 381 382**系统能力:** SystemCapability.ArkUI.ArkUI.Full 383 384| 名称 | 类型 | 必填 | 说明 | 385|-----|--------|----|-----------| 386| url | string | 是 | 页面的URL地址。 | 387 388## OnPageEndEvent 389 390定义网页加载结束时触发的函数。 391 392**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 393 394**系统能力:** SystemCapability.ArkUI.ArkUI.Full 395 396| 名称 | 类型 | 必填 | 说明 | 397|-----|--------|----|-----------| 398| url | string | 是 | 页面的URL地址。 | 399 400## 事件 401 402不支持[通用事件](ts-universal-events-click.md) 403 404## 示例 405 406### 示例1 407 408加载本地网页。 409 410```ts 411// xxx.ets 412import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI'; 413 414@Entry 415@Component 416struct WebComponent { 417 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 418 419 build() { 420 Column() { 421 AtomicServiceWeb({ src: $rawfile("index.html"), controller: this.controller }) 422 } 423 } 424} 425``` 426 427### 示例2 428 429加载在线网页。 430 431```ts 432// xxx.ets 433import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI'; 434 435@Entry 436@Component 437struct WebComponent { 438 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 439 440 build() { 441 Column() { 442 AtomicServiceWeb({ src: 'https://www.example.com', controller: this.controller }) 443 } 444 } 445} 446``` 447 448### 示例3 449 450NavDestination容器中加载网页。 451 452```ts 453// xxx.ets 454import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI'; 455 456@Builder 457export function WebComponentBuilder(name: string, param: Object) { 458 WebComponent() 459} 460 461@Component 462struct WebComponent { 463 navPathStack: NavPathStack = new NavPathStack(); 464 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 465 466 build() { 467 NavDestination() { 468 AtomicServiceWeb({ src: $rawfile("index.html"), controller: this.controller, navPathStack: this.navPathStack }) 469 } 470 .onReady((context: NavDestinationContext) => { 471 this.navPathStack = context.pathStack; 472 }) 473 } 474} 475``` 476 477### 示例4 478 479设置onMessage()事件回调。 480 481```ts 482// xxx.ets 483import { AtomicServiceWeb, AtomicServiceWebController, OnMessageEvent } from '@kit.ArkUI'; 484 485@Entry 486@Component 487struct WebComponent { 488 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 489 490 build() { 491 Column() { 492 AtomicServiceWeb({ 493 src: $rawfile("index.html"), 494 controller: this.controller, 495 // H5页面点击“发送消息”后,再点击“返回上一页”,触发该回调 496 onMessage: (event: OnMessageEvent) => { 497 console.log(`[AtomicServiceWebLog] onMessage data=${JSON.stringify(event.data)}`); 498 } 499 }) 500 } 501 } 502} 503``` 504 505```html 506// index.html 507<!DOCTYPE html> 508<html> 509<meta charset="utf-8"> 510<!-- 引入JS SDK文件 --> 511<script src="../js/atomicservice-sdk.js" type="text/javascript"></script> 512<body> 513<h1>JS SDK - postMessage()</h1> 514<br/> 515<button type="button" onclick="postMessage({ name: 'Jerry', age: 18 });">发送消息</button> 516<br/> 517<button type="button" onclick="back();">返回上一页</button> 518</body> 519<script type="text/javascript"> 520 function postMessage(data) { 521 // JS SDK提供的发送消息接口 522 has.asWeb.postMessage({ 523 data: data, 524 callback: (err, res) => { 525 if (err) { 526 console.error('[AtomicServiceWebLog H5] postMessage error err=' + JSON.stringify(err)); 527 } else { 528 console.log('[AtomicServiceWebLog H5] postMessage success res=' + JSON.stringify(res)); 529 } 530 } 531 }); 532 } 533 534 function back() { 535 // JS SDK提供的Router路由回退接口 536 has.router.back({ 537 delta: 1 538 }); 539 } 540</script> 541</html> 542``` 543 544### 示例5 545 546设置网页加载事件回调。 547 548```ts 549// xxx.ets 550import { 551 AtomicServiceWeb, 552 AtomicServiceWebController, 553 OnErrorReceiveEvent, 554 OnHttpErrorReceiveEvent, 555 OnPageBeginEvent, 556 OnPageEndEvent 557} from '@kit.ArkUI'; 558 559@Entry 560@Component 561struct WebComponent { 562 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 563 564 build() { 565 Column() { 566 AtomicServiceWeb({ 567 src: $rawfile('index.html'), 568 controller: this.controller, 569 // 网页加载遇到错误时触发该回调 570 onErrorReceive: (event: OnErrorReceiveEvent) => { 571 console.log(`AtomicServiceWebLog onErrorReceive event=${JSON.stringify({ 572 requestUrl: event.request?.getRequestUrl(), 573 requestMethod: event.request?.getRequestMethod(), 574 errorCode: event.error?.getErrorCode(), 575 errorInfo: event.error?.getErrorInfo() 576 })}`); 577 }, 578 // 网页加载遇到HTTP资源加载错误时触发该回调 579 onHttpErrorReceive: (event: OnHttpErrorReceiveEvent) => { 580 console.log(`AtomicServiceWebLog onHttpErrorReceive event=${JSON.stringify({ 581 requestUrl: event.request?.getRequestUrl(), 582 requestMethod: event.request?.getRequestMethod(), 583 responseCode: event.response?.getResponseCode(), 584 responseData: event.response?.getResponseData(), 585 })}`); 586 }, 587 // 页面开始加载,触发该回调 588 onPageBegin: (event: OnPageBeginEvent) => { 589 console.log(`AtomicServiceWebLog onPageBegin event=${JSON.stringify({ 590 url: event.url 591 })}`); 592 }, 593 // 页面加载完成,触发该回调 594 onPageEnd: (event: OnPageEndEvent) => { 595 console.log(`AtomicServiceWebLog onPageEnd event=${JSON.stringify({ 596 url: event.url 597 })}`); 598 } 599 }) 600 } 601 } 602} 603``` 604 605### 示例6 606 607AtomicServiceWeb跟AtomicServiceWebController的使用示例。 608 609```ts 610// xxx.ets 611import { 612 AtomicServiceWeb, 613 AtomicServiceWebController, 614 OnErrorReceiveEvent, 615 OnHttpErrorReceiveEvent, 616 OnPageBeginEvent, 617 OnPageEndEvent, 618 OnMessageEvent, 619 OnLoadInterceptEvent, 620 OnProgressChangeEvent 621} from '@kit.ArkUI'; 622 623@Entry 624@Component 625struct WebComponent { 626 @State darkMode: WebDarkMode = WebDarkMode.On; 627 @State forceDarkAccess: boolean = true; 628 @State mixedMode: MixedMode = MixedMode.None; 629 @State controller: AtomicServiceWebController = new AtomicServiceWebController(); 630 @State num: number = 1; 631 632 build() { 633 Column() { 634 Button('accessForward').onClick(() => { 635 console.log(`AtomicServiceWebLog accessForward = ${this.controller.accessForward()}`); 636 }) 637 Button('accessBackward').onClick(() => { 638 console.log(`AtomicServiceWebLog accessBackward = ${this.controller.accessBackward()}`); 639 }) 640 Button('accessStep').onClick(() => { 641 console.log(`AtomicServiceWebLog accessStep = ${this.controller.accessStep(1)}`); 642 }) 643 Button('forward').onClick(() => { 644 console.log(`AtomicServiceWebLog forward = ${this.controller.forward()}`); 645 }) 646 Button('backward').onClick(() => { 647 console.log(`AtomicServiceWebLog backward = ${this.controller.backward()}`); 648 }) 649 Button('refresh').onClick(() => { 650 console.log(`AtomicServiceWebLog refresh = ${this.controller.refresh()}`); 651 }) 652 Button('loadUrl').onClick(() => { 653 console.log(`AtomicServiceWebLog loadUrl = ${this.controller.loadUrl('https://www.baidu.com/')}`); 654 }) 655 Button('深色模式').onClick(() => { 656 this.forceDarkAccess = !this.forceDarkAccess; 657 }) 658 Button('mixedMode').onClick(() => { 659 this.mixedMode = this.mixedMode == MixedMode.None ? MixedMode.All : MixedMode.None; 660 }) 661 Button('点击').onClick(() => { 662 console.log(`AtomicServiceWebLog getUserAgent = ${this.controller.getUserAgent()}`); 663 console.log(`AtomicServiceWebLog getCustomUserAgent = ${this.controller.getCustomUserAgent()}`); 664 this.controller.setCustomUserAgent('test' + this.num++); 665 666 console.log(`AtomicServiceWebLog getUserAgent after set = ${this.controller.getUserAgent()}`); 667 console.log(`AtomicServiceWebLog getCustomUserAgent after set = ${this.controller.getCustomUserAgent()}`); 668 }) 669 AtomicServiceWeb({ 670 src: 'https://www.example.com', 671 mixedMode: this.mixedMode, 672 darkMode: this.darkMode, 673 forceDarkAccess: this.forceDarkAccess, 674 controller: this.controller, 675 onControllerAttached: () => { 676 console.log("AtomicServiceWebLog onControllerAttached call back success"); 677 }, 678 onLoadIntercept: (event: OnLoadInterceptEvent) => { 679 console.log("AtomicServiceWebLog onLoadIntercept call back success " + JSON.stringify({ 680 getRequestUrl: event.data.getRequestUrl(), 681 getRequestMethod: event.data.getRequestMethod(), 682 getRequestHeader: event.data.getRequestHeader(), 683 isRequestGesture: event.data.isRequestGesture(), 684 isMainFrame: event.data.isMainFrame(), 685 isRedirect: event.data.isRedirect(), 686 })) 687 return false; 688 }, 689 onProgressChange: (event: OnProgressChangeEvent) => { 690 console.log("AtomicServiceWebLog onProgressChange call back success " + JSON.stringify(event)); 691 }, 692 onMessage: (event: OnMessageEvent) => { 693 console.log("onMessage call back success " + JSON.stringify(event)); 694 }, 695 onPageBegin: (event: OnPageBeginEvent) => { 696 console.log("onPageBegin call back success " + JSON.stringify(event)); 697 }, 698 onPageEnd: (event: OnPageEndEvent) => { 699 console.log("onPageEnd call back success " + JSON.stringify(event)); 700 }, 701 onHttpErrorReceive: (event: OnHttpErrorReceiveEvent) => { 702 console.log("onHttpErrorReceive call back success " + JSON.stringify(event)); 703 }, 704 onErrorReceive: (event: OnErrorReceiveEvent) => { 705 console.log("onErrorReceive call back success " + JSON.stringify(event)); 706 } 707 }) 708 } 709 } 710} 711```