WebView加載https和http混合,導(dǎo)致圖片不顯示問題

場景復(fù)現(xiàn):

在Android5.0 以及以上的系統(tǒng),當(dāng)WebView加載的鏈接為Https開頭,但是鏈接里面的內(nèi)容,比如圖片為Http鏈接,這時候,圖片就會加載不出來

原因:

從Android5.0開始,WebView默認(rèn)不支持同時加載Https和Http混合模式。

知識儲備:

從Android5.0以后,當(dāng)一個安全的站點(https)去加載一個非安全的站點(http)時,需要配置Webview加載內(nèi)容的混合模式,一共有如下三種模式:

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)境下運行。

分析:

在Android5.0以下,默認(rèn)是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即總是允許WebView同時加載Https和Http;而從Android5.0開始,默認(rèn)用MIXED_CONTENT_NEVER_ALLOW模式,即總是不允許WebView同時加載Https和Http。

雖然官網(wǎng)給出的建議是,為了安全考慮,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在實際引用中,當(dāng)我們的服務(wù)器已經(jīng)升級到Https,但是一些頁面的資源是第三方的,我們不能要求第三方也都升級到Https,所以我們只能根據(jù)系統(tǒng)版本,用代碼去設(shè)置加載模式為MIXED_CONTENT_ALWAYS_ALLOW。

解決方法:

在webview加載頁面之前,設(shè)置加載模式為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模式,有異議的,請不吝賜教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容