一般來說,webView加載自定義error頁面是這樣做:例如,我下面的代碼在error之後加載了緩存頁面.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
mSpinnerDlg.dismiss();
// MIUI DEL:
// if (SettingsLicenseActivity.this.isResumed()) {
// mTextDlg.show();
// }
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
try {
view.stopLoading();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
try {
view.clearView();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
if (!TextUtils.isEmpty(mCache) && !TextUtils.isEmpty(failingUrl) && !failingUrl.equals(mCache)) {
loadCache();
} else {
showErrorAndFinish();
}
}
});
但是,這樣做之後,頁面error確實加載了緩存頁面,卻偶爾能夠看到原始的error頁面一閃而過.最終我找到的比較有效的辦法是添加一句:
view.loadUrl("about:blank");
最終的代碼是這樣的.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
mSpinnerDlg.dismiss();
// MIUI DEL:
// if (SettingsLicenseActivity.this.isResumed()) {
// mTextDlg.show();
// }
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
try {
view.stopLoading();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
try {
view.clearView();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
view.loadUrl("about:blank");
if (!TextUtils.isEmpty(mCache) && !TextUtils.isEmpty(failingUrl) && !failingUrl.equals(mCache)) {
loadCache();
} else {
showErrorAndFinish();
}
}
});
本文參考了StackOverFlow上一個問題的回答:http://stackoverflow.com/questions/36284186/android-webview-custom-error-page