關於 Webview 的混合模式(華爲 P30 出現問題)

前言:

從 Android 5.0 開始,Webview 默認不支持同時加載 Https 和 Http 混合模式,加上這段代碼主動開啓混合模式(但並非萬能的):web

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
複製代碼

Webview 的 3 種模式:

  1. MIXED_CONTENT_NEVER_ALLOW:Webview 不容許一個安全的站點(Https)去加載非安全的站點內容(Http), 好比 Https 網頁內容的圖片是 Http 連接。強烈建議 App 使用這種模式,由於這樣更安全。
  1. MIXED_CONTENT_ALWAYS_ALLOW:在這種模式下,Webview 是能夠在一個安全的站點(Https)里加載非安全的站點內容(Http), 這是 Webview 最不安全的操做模式,儘量地不要使用這種模式。
  1. MIXED_CONTENT_COMPATIBILITY_MODE:在這種模式下,當涉及到混合式內容時,Webview 會嘗試去兼容最新 Web 瀏覽器的風格。 一些不安全的內容(Http)能被加載到一個安全的站點上(Https),而其餘類型的內容將會被阻塞。 這些內容的類型是被容許加載仍是被阻塞可能會隨着版本的不一樣而改變,並無明確的定義。 這種模式主要用於在 App 裏面不能控制內容的渲染,可是又但願在一個安全的環境下運行。

後記:

  1. 第三種模式極少會用到,由於它是真的不安全了,而第二種方式,在某種意義上來講,它其實仍是安全的。 後來貌似是遇到了 Https 的網頁,加載了 Http 的 JS 文件,致使不得不用到第三種方式。
  1. 另外:即便開啓了MIXED_CONTENT_ALWAYS_ALLOW或者MIXED_CONTENT_COMPATIBILITY_MODE,部分狀況下仍是會出問題, 目前最新狀況出如今華爲 P30(Android 9.0) 上,即便開啓了混合模式,Https 加載 Http 資源(如圖片),仍是會出現圖片加載不出來,並回調 WebviewClient 的 onReceivedError() ,因此若是有根據此方法回調而設置錯誤佔位圖的話,即便 Webview 界面加載出來了也仍是會回調 onReceivedError() ,因此這種狀況只能讓後臺去修改 Http 爲 Https 了,混合模式並非萬能的,至少在華爲 P30 的 Android 9.0 上行不通。
  2. 備註:在 X5 內核的 Webview 中,是找不到MIXED_CONTENT_ALWAYS_ALLOW這些參數的,只能手動把值設上去: MIXED_CONTENT_NEVER_ALLOW = 0; MIXED_CONTENT_ALWAYS_ALLOW = 1; MIXED_CONTENT_COMPATIBILITY_MODE = 2;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSetting.setMixedContentMode(2);
}
複製代碼
相關文章
相關標籤/搜索