问题
在项目中遇到webview加载http网页,网页中嵌套有视频,视频的地址是https的,如https://v.qq.com/iframe/player.html?vid=s019849i6kt&tiny=0&auto=0
点击播放视频时,进度条一直转,但就是不加载视频,提示信息
"Mixed Content: The page at 'https://v.qq.com/iframe/player.html?vid=s019849i6kt&tiny=0&auto=0' was loaded over HTTPS, but requested an insecure image 'http://rcgi.video.qq.com/web_report?cmd=3529&url=http%3A%2F%2Fapi.chuangyebao.3158.cn%2Fapp%2Farticle%3Fcid%3D10815%26uid%3D0%26token%3D%26ver%3D&ver=V2.0Build9239&ua=Mozilla%2F5.0%20(Linux%3B%20Android%206.0.1%3B%20MI%204LTE%20Build%2FMMB29M%3B%20wv)%20AppleWebKit%2F537.36%20(KHTML%20%20like%20Gecko)%20Version%2F4.0%20Chrome%2F46.0.2490.76%20Mobile%20Safari%2F537.36&int1=1&int2=0&int3=0&int4=40&str1=&str2=tvp.player_v2_mobile.js&val=1&str4=268c2f8c6047642aea0e866f510e3d09'. This request has been blocked; the content must be served over HTTPS.", source: https://v.qq.com/iframe/player.html?vid=s019849i6kt&tiny=0&auto=0 (0)
解决办法
关于webview的http和https的混合请求的,从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。在API>=21的版本上面默认是关闭的,在21以下就是默认开启的,直接导致了在高版本上面http请求不能正确跳转。
在WebView设置处配置Webview加载内容的混合模式
if (Build.VERSION.SDK_INT >= 21) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW ); }
混合模式属性介绍
- MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。
- MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。
- MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。
网友评论