在setWebViewClient中重写这几个方法
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
view.loadUrl("about:blank");
tvError.setVisibility(View.VISIBLE);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
super.onReceivedError(webView, webResourceRequest, webResourceError);
//是否是为 main frame创建
if (webResourceRequest.isForMainFrame()) {
webView.loadUrl("about:blank");
// 加载自定义错误页面
tvError.setVisibility(View.VISIBLE);
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
//6.0以下执行
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return;
}
view.loadUrl("about:blank");
tvError.setVisibility(View.VISIBLE);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
view.loadUrl("about:blank");
view.removeAllViews();
tvError.setVisibility(View.VISIBLE);
super.onReceivedHttpError(view, request, errorResponse);
}
因为 第三个方法 onReceivedError 已经过时,在这里写是为了兼容6.0以下的版本
view.loadUrl("about:blank"); 方法必须添加,不然的还是会显示404等那些错误信息