赞
踩
开发过程中会遇到WebView加载失败的时候,会出现404、500、找不到网页等错误,页面显示系统默认的错误界面。系统默认界面难看,而且也会暴露网页地址不安全。所以我们需要对WebView加载失败或错误进行处理,自定义一个统一样式来加载失败的界面。
网页加载失败图
解决方案
我们可以自定义一个View用来展示加载失败的界面,也可以写一个错误展示的 Html让 WebView加载等。这里我们需要先重写WebViewClient
的onReceivedError()
和WebChromeClient
的onReceivedTitle()
方法。
① 判断 Html页面的标题中是否含有“Error”、“找不到网页”等信息;
- @Override
- public void onReceivedTitle(WebView view, String title) {
- super.onReceivedTitle(view, title);
- // android 6.0 以下通过title获取判断
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
- if (title.contains("404") || title.contains("500") || title.contains("Error") || title.contains("找不到网页") || title.contains("网页无法打开")) {
- view.loadUrl("about:blank");// 避免出现默认的错误界面
- view.loadUrl(mErrorUrl);// 加载自定义错误页面
- }
- }
- }
② 重写WebChromeClient
的onReceivedTitle()
方法处理(该方法已过时)
- @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");// 避免出现默认的错误界面
- view.loadUrl(mErrorUrl);// 加载自定义错误页面
- }
① 重写WebViewClient
的onReceivedHttpError()
方法,判断错误码来处理;
- @Override
- public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
- super.onReceivedHttpError(view, request, errorResponse);
- // 这个方法在 android 6.0才出现
- int statusCode = errorResponse.getStatusCode();
- if (404 == statusCode || 500 == statusCode) {
- view.loadUrl("about:blank");// 避免出现默认的错误界面
- view.loadUrl(mErrorUrl);// 加载自定义错误页面
- }
- }
② 重写WebViewClient
的onReceivedError()
方法处理
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- @Override
- public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
- super.onReceivedError(webView, webResourceRequest, webResourceError);
- if (webResourceRequest.isForMainFrame()) {//是否是为 main frame创建
- view.loadUrl("about:blank");// 避免出现默认的错误界面
- view.loadUrl(mErrorUrl);// 加载自定义错误页面
- }
- }
发送接口时提示下图错误信息:
原来:路径错误,两个http,改成一个就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。