WebView监听网页加载成功与失败

问题说明:

现在好多APP在应用中会内嵌webview,好多时候需要监听webview是否加载成功与失败。当加载成功的时候会回调WebViewClient的onPageFinished方法;当加载失败的时候会回调WebViewClient的onReceived方法。但问题是在加载失败的时候同样会回调onPageFinished方法。

看过一些StackOverFlow上面的文章,说可以通过WebChromeClient的onProgressChanged方法,当判断进度到100的时候表示加载成功,但其实加载失败的时候同样进度会到100,所以也是不行的。

在公司项目开发过程中也遇到了这样的问题,当时找到2种解决这个问题的方法。

解决思路:

方法一:利用原生回调方法

private boolean isSuccess = false;
private boolean isError = false;

public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    if (!isError) {
        isSuccess = true;
        //回调成功后的相关操作
    }
    isError = false;
}

public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
    isError = true;
    isSuccess = false;
    //回调失败的相关操作
}

原理总结:在访问失败的时候会首先回调onReceivedError,然后再回调onPageFinished。

方法二:给url打tag

这个方法不是适用所有人的,我当时可以用到这样的思路,主要是业务中只需要判断第一次的网页是否加载成功,只要第一次加载成功后后面的都可以交给html页面来解决加载状态。而加载成功前后的url是不一样的,举个例子:
首先启动webview时用到的url是http://www.abcd.com/shop, 这个在第一次打开app之前肯定是保存在本地的,或者是从登陆页面获取的,而加载成功以后的首页面就会变成http://www.abcd.com/shop#home ,这样我们就可以通过onPageFinished方法中转入的url来判断是否是第一次加载成功后的页面了。

url.contains("#");
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值