我在加载webview时使用Internal Server Error
拦截任何错误。由于我们的网页有 @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();
}
}
,整个应用都是基于webview(没有原生导航),所以它看起来像这样:
这样我就可以拦截错误:
Internal Server Error
为什么该应用无法识别此setAppCacheEnabled
?它识别是否没有互联网连接。
但是这个错误有点会破坏整个应用程序,因为这个屏幕不会消失,即使网页重新上线。这意味着我被迫false
转为onReceivedError
。
我想这是因为它存储在缓存中或者重新加载按钮丢失了。但由于我们是在共享主机上,我们无法在此html错误页面添加重新加载按钮。
即使我完全关闭应用程序并再次启动它,也会显示此错误。
用户的唯一选择是卸载应用或手动删除缓存,但我认为没有人会这样做,或者在大多数情况下都不知道。
所以我的问题是为什么de_offline.html
甚至没有加载本地/var/www/html/PHP/Randoms/src/libs/Controller.php
资产html页面?我是否必须在某个时刻进行拦截以及采用何种方法或地点?
答案 0 :(得分:1)
检查错误页面是否未使用HTTP 200状态代码进行响应。应使用HTTP-5xx状态代码响应服务器错误。 我怀疑WebView正在接收HTTP 2xx并且“认为”响应是正常的,因此您的错误处理不会发生。
参考:List of HTTP status codes and their meaning
编辑: 我只是抬头看了看:WebViewClient - Error Code 从我看来,这描述了整套不同的错误。但为什么呢?
另一个编辑:哦,我的......到底是什么?!
据我所知,无法在WebView中获取HTTP状态代码?!这超出了我的范围。
我能得到的就是解决方法How can I check from Android WebView if a page is a "404 page not found"?。对内部服务器Erros进行调整(如果适用,请使用Android SDK API Level 23中添加了onReceivedHttpError
的方法)