java重写webview_WebView覆盖默认错误页面

在我们使用WebViewClient时,如果不做任何处理,经常会在页面出错时显示系统自带错误页面,长的比较丑,那么我们想要覆盖这个错误页面,显示成我们自己的错误页面,该如果处理?

很简单,重写WebViewClient,通过回调交给调用者来换成我们自己的页面。

原理:覆盖Client接收到的错误,加载空页面

提供回调方法用于处理加载过程,既页面开始/页面结束/接收错误

踩过的坑:webview重加载的时候,如果使用webView.reload,依然会出现某些奇怪的现象,所以还是推荐使用webview.loadUrl的方式去重加载页面

下面看完整实现:

[代码]java代码:

public class OurWebClient extends WebViewClient {

OnPageCallback onPageCallback ;

public int ERROR_CODE = 0;

public int pageStartCount = 0;

int pageFinishCount = 0;

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

pageStartCount++;//实际页面开启过程会多次调用该方法,这里统计,后面会用到

if (ERROR_CODE == 0) {//没现错误

if (onPageCallback != null && pageStartCount==1)//保证回调只执行一次

onPageCallback .onLoadStarted();//无错,正常加载

} else {

if (onPageCallback != null)

onPageCallback .onErrorReceived();//有错误,自定义覆盖处理

}

//初始化webview与加载webview要一致

super.onPageStarted(view, url, favicon);

}

@Override

public void onPageFinished(WebView view, String url) {

pageFinishCount++;

if (ERROR_CODE == 0) {

if (onPageCallback != null && pageFinishCount==1)

onPageCallback .onLoadFinished();

} else {

if (OnPageCallback != null)

OnPageCallback .onErrorReceived();//有错误,自定义覆盖处理;某些错误出现在页面加载过程中,此时就需要覆盖错误页面

}

super.onPageFinished(view, url);

}

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

ERROR_CODE = errorCode;//  将错误码记下,用于判断页面状态

if (view != null) {

view.loadUrl("about:blank");//接收到错误时加载空页面,如果没有这个过程,在显示我们自己的错误页面之前默认错误页面会一闪而过,可自行实验

}

super.onReceivedError(view, errorCode, description, failingUrl);

}

//重加载页面状态重置

public void reset() {

if (ERROR_CODE != 0) {// 出现error后重新加载ERROR_CODE重置

ERROR_CODE = 0;

}

pageStartCount = 0;

pageFinishCount = 0;

}

//向调用者提供的回调

public interface OnPageCallback {

void onErrorReceived();

void onLoadStarted();

void onLoadFinished();

}

public void setOnPageCallback (OnPageCallback callback) {

this.onPageCallback = callback;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值