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