一般来说,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