WebView无网请求空web页面不显示错误信息

来源:互联网 发布:电气硬件 软件是什么 编辑:程序博客网 时间:2024/05/16 13:53

今天测试提了个bug。说我的一个WebView在无网状态下加载一个H5页面,没有给出应有的错误页面。

我的WebView的逻辑:

1.load的时候显示一个加载进度条

2.onReceiverdError的时候关闭加载进度条,显示错误页面

3.onPageFinished的时候检测一下是否发生错误,没有发生错误的话关闭进度条和错误页面(如果之前没关闭)

  @Override            public void onPageFinished(WebView view, String url) {                FloatLogUtil.d("thm subjH5 onPageFinished");                mLoadingBarParent.setVisibility(View.GONE);                if (!isError) {                    mEmptyParent.setVisibility(View.GONE);                    super.onPageFinished(view, url);                }                isError = false;            }            @Override            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {                FloatLogUtil.d("thm subjH5 onReceivedSslError");                handler.proceed(); //接受证书            }            @Override   //转向错误时的处理            public void onReceivedError(final WebView view, int errorCode,                                        String description, String failingUrl) {                FloatLogUtil.d("thm subjH5 onReceivedError");                isError = true;                mLoadingBarParent.setVisibility(View.GONE);                mEmptyParent.setVisibility(View.VISIBLE);            }
排查的时候竟然发现,无网加载时没有执行onReceivedError,直接到了onPageFinished。

后来发现跳转的那个h5页面没有任何内容,只是用来做一些权限的检查,然后再跳转到真正的h5页面。

在这种情况下,收到304后WebView会加载本地缓存,而h5本没有任何内容,就不会执行onReceivedError。

我的解决办法是设置WebView不加载本地缓存。  

mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);



0 0