HarmonyOS 鸿蒙Next 用Web加载网页onErrorReceive报错

我们用Web组件加载网址:https://xxxxxx 的时候,onErrorReceive一直回调错误,ERR_FAILED, -2。chromium日志有类似的输出[network_service_network_delegate.cc:198] final url: *** , error_code -2(net::ERR_FAILED, downstream throughput kbps: 1600, duration_time(ms) 119 但是网页可以加载出来,我们要确定两个问题:

  1. onErrorReceive回调的错误,我们是否要响应,是否需要显示错误页面,阻断用户操作。
  2. onErrorReceive的错误,如果需要处理,都哪些错误要响应,哪些错误不需要响应

代码:

Web({ controller: this.webViewController, src: this.writeUrl })
  .darkMode(WebDarkMode.Auto)
  .domStorageAccess(true)
  .zoomAccess(true)
  .fileAccess(true)
  .mixedMode(MixedMode.All)
  .verticalScrollBarAccess(false)
  .cacheMode(CacheMode.None)
  .javaScriptAccess(true)
  .javaScriptProxy(this.jsBridgeMethod.javaScriptProxy)
  .height(this.getScreenHeight() - this.getNavBarHeight())
  .width("100%")
  .position({ y: this.getNavBarHeight() })
  .backgroundColor($r("app.color.rb_color_bg_whiteboard"))
  .expandSafeArea([SafeAreaType.KEYBOARD])
  .mediaPlayGestureAccess(false)
  .onTitleReceive((event) => {
    if (event) {
      if (this.outSideTitle.length === 0) {
        this.webTitle = event.title;
      }
    }
  })
  .javaScriptOnDocumentStart([BonreeTrace.Web.getScriptItem()])
  .onControllerAttached(() => {
    this.resetUserAgent();
    BonreeTrace.Web.onControllerAttachedHilt(this.webViewController);
  })
  .onErrorReceive((event) => {
    if (!event) {
      return;
    }
    console.error(`SSXXSS onErrorReceive is ${json.stringify(event.error)}, ${event.error.getErrorInfo()}, ${event.error.getErrorCode()}`)
    this.loadingViewState = RBAppWebLoadingState.fail
    BonreeTrace.Web.onErrorReceive(event.request, event.error, this.webViewController.getWebId());
  })
  .onHttpErrorReceive((event) => {
    if (!event) {
      return;
    }
    BonreeTrace.Web.onHttpErrorReceive(event.request, event.response, this.webViewController.getWebId());
  })
  .onSslErrorEventReceive((event) => {
    this.loadingViewState = RBAppWebLoadingState.fail
    BonreeTrace.Web.onSslErrorEventReceive(event.error, this.webViewController.getWebId());
  })
  .onLoadIntercept((event) => {
    if (event) {
      let url = event.data.getRequestUrl();
      console.info('URL:' + url);
      // 拦截页面请求
      if (url.startsWith('tel:')) {
        let parts = url.split(':');
        let phoneNumber: string = parts.length > 1 ? parts[1] : '';
        if (phoneNumber.length > 0) {
          this.callPhone(phoneNumber);
        }
        return true;
      }
    }
    return this.onLoadIntercept?.(event) ?? false;
  })

更多关于HarmonyOS 鸿蒙Next 用Web加载网页onErrorReceive报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
这个错误,应该是证书验证不过导致的,代码中也使用了.onSslErrorEventReceive对此进行处理,所以页面可以加载出来,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onsslerroreventreceive9
2.onErrorReceive 返回的错误码可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-neterrorlist-V5
是否需要响应及如何处理可以根据实际业务需求决定

更多关于HarmonyOS 鸿蒙Next 用Web加载网页onErrorReceive报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next环境中,使用Web组件加载网页时遇到onErrorReceive报错,通常表示网页加载过程中出现了错误。这种错误可能由多种原因引起,包括但不限于网络问题、网页内容错误、权限设置不当或Web组件配置有误。

  1. 检查网络连接:确保设备已连接到有效的网络,并且网络状态稳定。

  2. 验证URL地址:确认加载的网页URL正确无误,且该网页可以在其他浏览器中正常访问。

  3. 检查权限配置:确保应用已申请并获得了访问网络的权限。在HarmonyOS中,需要在config.json文件中正确配置相关权限。

  4. Web组件配置:检查Web组件的初始化及配置代码,确保没有遗漏或错误的配置。

  5. 错误日志分析:查看详细的错误日志,了解具体的错误原因。这有助于定位问题,是内容解析错误、加载超时还是其他类型的错误。

  6. 更新鸿蒙系统:确保鸿蒙系统为最新版本,因为系统更新可能修复了旧版本中的bug。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部