前提:WebView在 Android 5.1 测试机上正常显示,在 Android 7.0 上无法显示,一直 loading 。(注:url 为 htts 协议)
考虑到验证码的 Webview 和 Listener 都是自己重写,可能漏掉了什么,果然在细细翻看官方源码的时候,发现了 WebViewClient 多复写了 onReceivedSslError 监听,初步判断是遇到证书问题。
解决:
原因:
在 Android 中,WebView 可以用来加载 http 和 https 网页到本地应用的控件。在默认情况下,通过 loadUrl(String url)
方法,可以顺利 loadUrl("http://www.baidu.com")
之类的页面。但是,当 load 通过 ssl 加密的 https 页面,且这个网站的安全证书在 Android 无法得到认证时,WebView就会变成一个空白页,而并不会像自带的浏览器一样弹出提示。因此,我们必须针对这种情况进行处理。
拓展:
不过如果在 onReceivedSslError
方法中实现调用了 handler.proceed()
来忽略该证书错误,则会受到中间人攻击的威胁,可能导致隐私泄露。可以采用默认的处理方法handler.cancel()
,停止加载问题页面。
(鉴于项目需求,所以仍然采用handler.proceed();
)