我在反应原生中使用webview,并且我想在发生某些错误时显示自定义错误消息(例如,没有互联网连接)。
我的代码:
<WebView
renderError={() => (
<MissingConnection />
)}
other params....
/>
当加载网页时出现错误,webview会在几分之一秒内显示默认的android错误,例如:然后弹出我的MissingConnection
组件,隐藏webview。
有没有办法完全删除默认的Android错误屏幕?它闪烁的时间只有几分之一秒,结果感觉非常错误。
首先:你做得对。
我最近发现了同样的问题,并做了一些调查。问题不在于您的代码或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完成的:
和
所以我认为我们的团队很好!
编辑2:我很好奇,如果在真正的Android设备上没有处于调试模式时这是真的可见。我有根据的猜测是,代码执行速度更快,根本不可见。顺便说一下,这个页面可能只显示404(未找到)错误,如果您使用硬编码的网址和自己的服务器,这些错误是不太可能的。
编辑3:在发布模式下,在真实设备上运行可见的本机错误页面。防止这种闪烁的唯一方法是创建叠加层。我打开了一个与另一个错误相关的问题,这个错误也在react-native-webview
这里用https://github.com/react-native-community/react-native-webview/issues/474#issuecomment-487022106来解决这个问题。