WebView加载https和http混合,导致图片不显示问题

2017-10-31  本文已影响0人  LegendBMKill

场景复现:

在Android5.0 以及以上的系统,当WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来

原因:

从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。

知识储备:

从Android5.0以后,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式:

分析:

在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。

虽然官网给出的建议是,为了安全考虑,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在实际引用中,当我们的服务器已经升级到Https,但是一些页面的资源是第三方的,我们不能要求第三方也都升级到Https,所以我们只能根据系统版本,用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。

解决方法:

在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
     webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);  
}  

备注:

我试着改成MIXED_CONTENT_COMPATIBILITY_MODE模式,也是可以的,但是还不明确其真正含义,为了保险起见,使用了MIXED_CONTENT_ALWAYS_ALLOW模式,有异议的,请不吝赐教。

上一篇下一篇

猜你喜欢

热点阅读