我使用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