如何解決WebView在https網站內無法顯示http連結的圖片

如果你網站是使用https的網址,但是你的圖片連結是http的網址
或是反過來,網站是使用http的網址,但是圖片連結是https的網址
那麼這就是混合式的內容

最近發現有些手機的WebView讀取圖片的時候無法正確顯示,後來才發現原來是因為圖片使用了https的連結,在Android 5.0以上的WebView預設都會無法正常顯示混合式的網頁內容。

解決的方法就是WebView加入setMixedContentMode的設定即可:
mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

但這個時候,如果你開發的app有支援到5.0以下的版本(假設是4.2),此時你的Android Studio會提示你:
Call requires API level 21 (current min is 17): android.webkit.WebSettings#setMixedContentMode

意思是說你用了一個必須在API 21以上才有的WebView setting函式,但你目前的app最低支援到API 17。所以這個時候建議你再加上一個判斷Android版本的防禦寫法就可以解決警告訊息了,同時也可以避免Android 5.0以下的手機閃退。
if(Build.VERSION.SDK_INT >= 21){
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}



reference:
http://stackoverflow.com/questions/31509277/webview-images-are-not-showing-with-https

留言

這個網誌中的熱門文章

Mac安裝JDK後仍出現沒有runtime的錯誤 No Java runtime present, requesting install

Android使用Callback做為傳遞資料/通知的方法

如何實作從API抓取資料顯示在列表頁(ListView)上