我使用onReceivedError
加载webview时拦截任何错误。由于我们的网页有一个Internal Server Error
和整个应用程序基于网页视图(没有本地导航),它只是看起来像这样:如何使用Android WebView处理“内部服务器错误”?
这样,我拦截错误:
@SuppressLint("NewApi")
public void onReceivedError(final WebView view, WebResourceRequest request, final WebResourceError error) {
Log.d(TAG, "HTTP error " + error.getErrorCode() + " ---> " + error.getDescription());
int err = error.getErrorCode();
if (err == -2) {
view.loadUrl("about:blank");
view.loadUrl("file:///android_asset/de_offline.html");
} else {
view.reload();
}
}
为什么该应用没有认出这Internal Server Error
?它确认是否没有互联网连接。
但是这个错误有点破坏了整个应用程序,因为这个屏幕不会消失,即使网页返回在线。这意味着我被迫setAppCacheEnabled
到false
。
我想这是因为它存储在缓存中或重新加载按钮丢失。但由于我们在共享主机上,我们无法将重新加载按钮添加到此HTML错误页面。
即使我完全关闭了应用程序并重新启动,也会显示此错误。
用户的唯一选择是卸载应用程序或手动删除缓存,但我认为任何人都不会这么做,或者在大多数情况下不知道这一点。
所以我的问题是为什么onReceivedError
甚至没有加载本地de_offline.html
资产html页面呢?我是否必须早一些拦截,以及哪种方法或哪些方法?
我明白了。所以它可能是500错误页面本身被解释为Android有效的无错页面,因为它只是有效的HTML? – Alexio
这不是我的意思,错误页面可以作为一个常规服务。浏览器通过状态代码区分常规错误。状态码本身由服务器设置,由服务器决定返回的HTML是常规还是错误页面。无论如何,两者都应该是有效的HTML。 – sschrass