Web组件加载页面时可能会出现加载异常的情况,此时如何获取加载异常的信息?场景1:网页加载时使用什么方法可以获取到异常信息?场景2:如何获取网络请求和响应的异常信息?场景3:如何监听SSL校验出错?
.onErrorReceive((event) => { if (event) { // 部分打印,其他打印可参考onErrorReceive接口 console.info('getErrorInfo:' + event.error.getErrorInfo()); console.info('getErrorCode:' + event.error.getErrorCode()); console.info('url:' + event.request.getRequestUrl()); // 根据isMainFrame判断是主资源还是子资源报错 console.info('isMainFrame:' + event.request.isMainFrame()); } })
.onHttpErrorReceive((event) => { if (event) { // 部分打印,其他打印可参考onHttpErrorReceive接口 console.info('url:' + event.request.getRequestUrl()); // 根据isMainFrame判断是主资源还是子资源报错 console.info('isMainFrame:' + event.request.isMainFrame()); console.info('getResponseCode:' + event.response.getResponseCode()); console.info('getReasonMessage:' + event.response.getReasonMessage()); } })
示例代码如下:
// 只加载主资源时通过此方法监听SSL校验错误 .onSslErrorEventReceive((event) => { if (event) { console.error('ssl check failed,error is : ' + event.error.toString()); event.handler.handleCancel(); } }) // 加载的资源有主资源和子资源时使用此方法监听SSL校验错误 .onSslErrorEvent((event: SslErrorEvent) => { if (event) { // 根据isMainFrame判断是主资源还是子资源报错 console.info('onSslErrorEvent isMainFrame: ' + event.isMainFrame); event.handler.handleCancel(); } });
完整参考代码如下:
import { webview } from '@kit.ArkWeb'; @Entry @Component struct WebComponent { controller: webview.WebviewController = new webview.WebviewController(); build() { Column() { // src可更换为自己业务地址 Web({ src: 'www.example.com', controller: this.controller }) .fileAccess(false) .geolocationAccess(false) .onErrorReceive((event) => { if (event) { // 部分打印,其他打印可参考onErrorReceive接口 console.info('getErrorInfo:' + event.error.getErrorInfo()); console.info('getErrorCode:' + event.error.getErrorCode()); console.info('url:' + event.request.getRequestUrl()); // 根据isMainFrame判断是主资源还是子资源报错 console.info('isMainFrame:' + event.request.isMainFrame()); } }) .onHttpErrorReceive((event) => { if (event) { // 部分打印,其他打印可参考onHttpErrorReceive接口 console.info('url:' + event.request.getRequestUrl()); // 根据isMainFrame判断是主资源还是子资源报错 console.info('isMainFrame:' + event.request.isMainFrame()); console.info('getResponseCode:' + event.response.getResponseCode()); console.info('getReasonMessage:' + event.response.getReasonMessage()); } }) // 只加载主资源时通过此方法监听SSL校验错误 .onSslErrorEventReceive((event) => { if (event) { console.error('ssl check failed,error is : ' + event.error.toString()); event.handler.handleCancel(); } }) // 加载的资源有主资源和子资源时使用此方法监听SSL校验错误 .onSslErrorEvent((event: SslErrorEvent) => { if (event) { // 根据isMainFrame判断是主资源还是子资源报错 console.info('onSslErrorEvent isMainFrame: ' + event.isMainFrame); event.handler.handleCancel(); } }); }; } }
回调方法 | 使用场景说明 |
|---|---|
onErrorReceive | 可以获取到ArkWeb网络协议栈错误列表中的所有错误码,此回调中尽量执行简单逻辑。开发中建议使用此回调,及时获取到错误码,以便定位问题。 |
onHttpErrorReceive | 只可以获取到ArkWeb网络协议栈错误列表大于等于400的HTTP错误,只想获取到网络加载错误时可以使用此回调。 |
onSslErrorEventReceive | 只加载主资源时发生SSL错误会被调用,SSL校验出错时推荐使用handleCancel通知Web取消此请求。 |
onSslErrorEvent | 加载主资源和子资源时发生SSL错误会被调用,可通过isMainFrame判断是否为主资源,SSL校验出错时推荐使用handleCancel通知Web取消此请求。 |