webview加载完成监听

最近由于产品需要,一个页面上部分是一个WebView, 下面是一些文字介绍,但是在赋值时,HTML网页加载会消耗一定时间,在其加载过程中,文字已经展示出来,给用户的体验很不好,所以我就想在webview加载成功结束后再给文字赋值,于是在网上搜到:当加载成功的时候会回调WebViewClient的onPageFinished方法;当加载失败的时候会回调WebViewClient的onReceived方法。但问题是在加载失败的时候同样会回调onPageFinished方法。

知识点:  WebView在加载网页的时候,如果加载失败,显示系统默认的错误页面很丑,而且很恶心,会暴露url。一般操作处  理:自定义一个错误页面。这个页面可以是一个本地网页,也可以是Android页面。

  技术点:重写WebViewClient里面的onReceivedError();
  onReceivedError调用情况:onReceivedError只有在遇到不可用的(unrecoverable)错误时,才会被调用)。 
  比如,当WebView加载链接www.baidu.com时,”不可用”的情况有可以包括有:
  1、没有网络连接
  2、连接超时
  3、找不到页面www.baidu.com
  而下面的情况则不会被报告:
  1、网页内引用其他资源加载错误,比如图片、css不可用
  2、js执行错误

具体代码如下:

mWebView.setWebViewClient(webViewClient);

boolean isSuccess = false;
boolean isError = false;
WebViewClient webViewClient = new WebViewClient(){

    @Override
    public void onPageFinished(WebView view, String url) {
        mHeaderView.webContent.setVisibility(View.VISIBLE);
        if (!isError) {
            isSuccess = true;
            mErrorView.setVisibility(View.GONE); 
            mWebView.setVisibility(View.VISIBLE);
            //回调成功后的相关操作,根据实际情况处理自己的业务
        }
        isError = false;

    }

    // 新版本,只会在Android6及以上调用
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        isError = true;
        isSuccess = false;
        //回调失败的相关操作,可以Toast,
       // 在这里显示自定义错误页 
       mErrorView.setVisibility(View.VISIBLE);
       mWebView.setVisibility(View.GONE);
    }

   /** 
    * 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,做跟详细的处理。 
    * 
    * @param view 
    */
    // 旧版本,会在新版本中也可能被调用,所以加上一个判断,防止重复显示
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        isError = true;
        isSuccess = false;
        //回调失败的相关操作
       // 在这里显示自定义错误页
        mErrorView.setVisibility(View.VISIBLE);
        mWebView.setVisibility(View.GONE);
    }
};

 

 

 

 

你可能感兴趣的:(android)