如何处理"内部服务器错误"使用Android WebView?

时间:2017-04-01 11:18:41

标签: android webview internal-server-error

我在加载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(没有原生导航),所以它看起来像这样:

Example Screenshot

这样我就可以拦截错误:

Internal Server Error

为什么该应用无法识别此setAppCacheEnabled?它识别是否没有互联网连接。

但是这个错误有点会破坏整个应用程序,因为这个屏幕不会消失,即使网页重新上线。这意味着我被迫false转为onReceivedError

我想这是因为它存储在缓存中或者重新加载按钮丢失了。但由于我们是在共享主机上,我们无法在此html错误页面添加重新加载按钮。

即使我完全关闭应用程序并再次启动它,也会显示此错误。

用户的唯一选择是卸载应用或手动删除缓存,但我认为没有人会这样做,或者在大多数情况下都不知道。

所以我的问题是为什么de_offline.html甚至没有加载本地/var/www/html/PHP/Randoms/src/libs/Controller.php资产html页面?我是否必须在某个时刻进行拦截以及采用何种方法或地点?

1 个答案:

答案 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的方法)