問題
在項目中遇到webview加載http網(wǎng)頁嫂易,網(wǎng)頁中嵌套有視頻匠抗,視頻的地址是https的旦袋,如https://v.qq.com/iframe/player.html?vid=s019849i6kt&tiny=0&auto=0
點擊播放視頻時瓷患,進度條一直轉(zhuǎn)相种,但就是不加載視頻酗宋,提示信息
"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)
解決辦法
關(guān)于webview的http和https的混合請求的积仗,從Android5.0開始,WebView默認不支持同時加載Https和Http混合模式蜕猫。在API>=21的版本上面默認是關(guān)閉的寂曹,在21以下就是默認開啟的,直接導(dǎo)致了在高版本上面http請求不能正確跳轉(zhuǎn)回右。
在WebView設(shè)置處配置Webview加載內(nèi)容的混合模式
if (Build.VERSION.SDK_INT >= 21) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW ); }
混合模式屬性介紹
- MIXED_CONTENT_NEVER_ALLOW:Webview不允許一個安全的站點(https)去加載非安全的站點內(nèi)容(http),比如隆圆,https網(wǎng)頁內(nèi)容的圖片是http鏈接。強烈建議App使用這種模式翔烁,因為這樣更安全渺氧。
- MIXED_CONTENT_ALWAYS_ALLOW:在這種模式下,WebView是可以在一個安全的站點(Https)里加載非安全的站點內(nèi)容(Http),這是WebView最不安全的操作模式蹬屹,盡可能地不要使用這種模式侣背。
- MIXED_CONTENT_COMPATIBILITY_MODE:在這種模式下,當(dāng)涉及到混合式內(nèi)容時哩治,WebView會嘗試去兼容最新Web瀏覽器的風(fēng)格秃踩。一些不安全的內(nèi)容(Http)能被加載到一個安全的站點上(Https),而其他類型的內(nèi)容將會被阻塞业筏。這些內(nèi)容的類型是被允許加載還是被阻塞可能會隨著版本的不同而改變憔杨,并沒有明確的定義。這種模式主要用于在App里面不能控制內(nèi)容的渲染蒜胖,但是又希望在一個安全的環(huán)境下運行消别。