从 Android 5.0 开始Webview 默认不支持同时加载 Https 和 Http 混合模式,加上这段代码主动开启混合模式(但并不是万能的):
MIXED_CONTENT_ALWAYS_ALLOW
:在这种模式下Webview 是可以在一个安全的站点(Https)里加载非安全的站点内嫆(Http), 这是 Webview 最不安全的操作模式,尽可能地不要使用这种模式
MIXED_CONTENT_COMPATIBILITY_MODE
:在这种模式下,当涉及到混合式内容时Webview 会尝试去兼容最新 Web 浏览器的风格。 一些不安全的内容(Http)能被加载到一个安全的站点上(Https)而其他类型的内容将会被阻塞。 这些内容的类型是被允许加载还是被阻塞鈳能会随着版本的不同而改变并没有明确的定义。 这种模式主要用于在 App 里面不能控制内容的渲染但是又希望在一个安全的环境下运行。
- 第三种模式极少会用到因为它是真的不安全了,而第二种方式在某种意义上来说,它其实还是安全的 后来貌似是遇到了 Https 的网页,加载了 Http 的 JS 文件导致不得不用到第三种方式。
资源(如图片)还是会出现图片加载不出来,并回调 WebviewClient 的 onReceivedError() 所以如果有根据此方法回调而设置错误占位图的话,即使 Webview 界面加载出来了也还是会回调 onReceivedError() 所以这种情况只能让后台去修改 Http 为 Https 了,混合模式并不是万能的至少在华为 P30 的 Android