天天看点

Android webview加载H5空白页问题

   我们在编写代码,经常会不可避免的加载一些H5页面,但是有时候会出现一些加载错误,如空白页的问题,今天我们就探讨一下加载出现空白页的问题:

首先我先说一下我在项目中遇到的问题:这就姑且当做造成空白页的原因一:

  在Android中,WebView可以用来加载http和https网页到本地应用的控件。但是在默认情况下,通过loadUrl(String url)方法,可以顺利loadUrl(“http://www.baidu.com”)之类的页面。但是,当load通过ssl加密的https页面,但是如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像自带的浏览器一样弹出提示。因此,我们必须针对这种情况进行处理。

我们看一下出现问题的页面:

Android webview加载H5空白页问题

大家看到“选部门”,“选同事”是两个fragment页面用来展示加载的H5,但是展示的是空白页,这里是由于WebView访问https SSL证书网页错误造成的,也就是上面所说的原因一,那我们来看下解决方法:

webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
 
        // 不要使用super,否则有些手机访问不了,因为包含了一条 handler.cancel()
        // super.onReceivedSslError(view, handler, error);
 
        // 接受所有网站的证书,忽略SSL错误,执行访问网页
        handler.proceed();
    }
}
           

然后问题就解决了,看下效果图:

Android webview加载H5空白页问题

之后查了些资料,也有不少原因会引起空白页,这里姑且就当做:造成空白页的原意二

项目中要用到Fragment 切换,然后webview加载本地的H5,所以遇到activity 跳转后返回有webview的activity会出现空白,明明执行了oncreate view,却不显示H5界面

经过一番。。。得到一下解决办法

1:首先为了H5网页能够正常加载,就不能采用硬件加速,但是为了体验又必须要使用硬件加速消除卡顿感

所以想到了加载的时候用软件渲染,

<com.madun.yeehaw.biz.module.createModel.ui.WebView
        Android:id="@+id/web_view"
        android:layerType="software"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
           

#或者

这样确保了网页能够在切换过程也能被正常加载

2:通过加载完成后启动硬件渲染加速

这句代码放在什么地方呢?

mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.setLayerType(View.LAYER_TYPE_HARDWARE,null);
}
}
           

放在webviewclient的OnpageFinished()函数中执行

3:在onPause()中加上这句

这样就能完美的解决白屏问题了