android中WebView不加载Mixed-Content的解决

问题背景

在有些业务场景中,需要再android原生APP中嵌入WebView来做,在使用HTTPS时,会发现部分android手机中Mixed Content无法加载。

什么是Mixed Content呢

HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容)

混合内容在以下情况下出现:初始 HTML 内容通过安全的 HTTPS 连接加载,但其他资源(例如,图像、视频、样式表、脚本)则通过不安全的 HTTP 连接加载。之所以称为混合内容,是因为同时加载了 HTTP 和 HTTPS 内容以显示同一个页面,且通过 HTTPS 加载的初始请求是安全的。现代浏览器会针对此类型的内容显示警告,以向用户表明此页面包含不安全的资源。

在 Android 5.0 之后的WebView中是默认不加载任何类型的Mixed Content的资源。由于把所有HTTP资源都替换成HTTPS可能工作量很大,且很可能产生遗漏,所以可以修改WebView的行为。

在android developer中是这样介绍的:

要修改这种行为,可以给WebView做出以下设置:

WebSettings settings = mWebView.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}

要注意以上api是android API 21以后提供的,执行前要加SDK版本的判断,在之前的版本都是默认加载不安全内容的,所以不需要设置。

参考链接

https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?hl=zh-cn

https://developer.android.com/reference/android/webkit/WebSettings.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注