在本机webview上反应删除android默认错误页面

问题描述 投票:2回答:1

我在反应原生中使用webview,并且我想在发生某些错误时显示自定义错误消息(例如,没有互联网连接)。

我的代码:

<WebView 
  renderError={() => (
    <MissingConnection />
  )}
  other params....
/>

当加载网页时出现错误,webview会在几分之一秒内显示默认的android错误,例如:enter image description here然后弹出我的MissingConnection组件,隐藏webview。

有没有办法完全删除默认的Android错误屏幕?它闪烁的时间只有几分之一秒,结果感觉非常错误。

android react-native android-webview
1个回答
1
投票

首先:你做得对。

我最近发现了同样的问题,并做了一些调查。问题不在于您的代码或React Native或react-native-webview

这只是Android的WebView的默认行为。许多Java开发人员遇到同样的问题,SO上相关线程的示例:

webview error while loading a page without internet

Prevent WebView from displaying "web page not available"

Android WebView onReceivedError()

通常的解决方案是:

  • 在尝试加载任何东西之前检查互联网连接(防止失败)
  • 快速删除错误内容并在onReceivedError中显示您自己的内容(基本上映射到renderError中的react-native-webview方法)。有时加载一个像Java here中所做的本地URL。
  • 如果根本没有错误,请注意删除叠加层。 react-native-webview反过来做,当出现错误时显示叠加。但是活动指示符叠加是一个很好的例子,它表示在加载完成或遇到错误之前。

据我所知,除了这些令人失望的方式外,我们无能为力,因为我宁愿不与该系统作斗争。

编辑:Firefox Focus for Android也可以快速替换错误处理程序中的内容。

这是在他们的源代码中用Java完成的:

https://github.com/mozilla-mobile/focus-android/blob/c789362b9c331b2036755a8398e3770be43b50b8/app/src/main/java/org/mozilla/focus/webview/FocusWebViewClient.java#L330

https://github.com/mozilla-mobile/focus-android/blob/63339d2d9a5d132bf4a1fffc4c46c0ce393abe87/app/src/main/java/org/mozilla/focus/webview/ErrorPage.java#L126

所以我认为我们的团队很好!

编辑2:我很好奇,如果在真正的Android设备上没有处于调试模式时这是真的可见。我有根据的猜测是,代码执行速度更快,根本不可见。顺便说一下,这个页面可能只显示404(未找到)错误,如果您使用硬编码的网址和自己的服务器,这些错误是不太可能的。

编辑3:在发布模式下,在真实设备上运行可见的本机错误页面。防止这种闪烁的唯一方法是创建叠加层。我打开了一个与另一个错误相关的问题,这个错误也在react-native-webview这里用https://github.com/react-native-community/react-native-webview/issues/474#issuecomment-487022106来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.