Android 5.0 及以上,webview 加載https網頁中的http圖片加載不出來,踩坑!

Android5.0及以上系統,當WebView加載的鏈接爲https開頭,但是鏈接裏面的內容,比如圖片爲http鏈接,這時候,圖片就不能正常加載(加載不出來)。

由於自己在項目中踩坑遇到此問題,也是各種查閱嘗試,最終得以解決,特此記錄下:

 在Android5.0中,WebView方面做了些修改,如果你的系統target api爲21以上:

  • 系統默認禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啓用。
  • 系統現在可以智能選擇HTML文檔的portion來繪製。這種新特性可以減少內存footprint並改進性能。若要一次性渲染整個HTML文檔,可以調用這個方法enableSlowWholeDocumentDraw()
  • 如果你的app的target api低於21:系統允許mixed content和第三方cookie,並且總是一次性渲染整個HTML文檔。

一、WebView鏈接爲https,內容圖片爲http,圖片不能正常顯示,原因主要是:

       webview 從Lollipop(5.0)開始 webview默認不允許混合模式,https當中不能加載http資源,如果要加載,需單獨設置開啓,

二、解決方案:

1.在加載錢先阻塞圖片加載:

setting.setBlockNetworkImage(true);

(在webview加載頁面之前,設置加載模式爲MIXED_CONTENT_ALWAYS_ALLOW)
// 允許從任何來源加載內容,即使起源是不安全的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
2.在WebView 渲染完成後,解除阻塞,加載圖片 
webView.setWebViewClient(new WebViewClient() {
                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                    String  s = request.getUrl().toString();
                    view.loadUrl(s);
                    return true;
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    progressBar.setVisibility(View.GONE);
                    Log.i(TAG, "onPageFinished-->" + url);

                    settings.setBlockNetworkImage(false);//解除阻塞
                    //判斷webview是否加載了,圖片資源
                    if (!settings.getLoadsImagesAutomatically()) {
                        settings.setLoadsImagesAutomatically(true); //設置wenView加載圖片資源
                    }

                    super.onPageFinished(view, url);
                }

            });
        }

 更多參考鏈接:Android官網解釋鏈接 

三、相關問題拓展

WebView中加載頁面錯誤,自定義view 處理加載失敗頁面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章