前言
Android系統(tǒng)Webview無法加載顯示對應的資源等,那么,我們就要針對這一狀況作出對應的處理。
解決步驟
1. 啟用mixed content
在Android5.0中,WebView方面做了些修改,如果你的系統(tǒng)target api為21以上:
- 系統(tǒng)默認禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。
- 系統(tǒng)現(xiàn)在可以智能選擇HTML文檔的portion來繪制。這種新特性可以減少內(nèi)存footprint并改進性能。若要一次性渲染整個HTML文檔,可以調(diào)用這個方法enableSlowWholeDocumentDraw()
- 如果你的app的target api低于21:系統(tǒng)允許mixed content和第三方cookie,并且總是一次性渲染整個HTML文檔。
在使用WebView的類中添加如下代碼:
// android 5.0及以上默認不支持Mixed Content
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
//或者
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
2. 設置WebView接受所有網(wǎng)站的證書
<font color=green>在認證證書不被Android所接受的情況下,我們可以通過設置重寫WebViewClient的onReceivedSslError方法在其中設置接受所有網(wǎng)站的證書來解決,具體代碼如下</font>
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// TODO Auto-generated method stub
// handler.cancel();// Android默認的處理方式
handler.proceed();// 接受所有網(wǎng)站的證書
// handleMessage(Message msg);// 進行其他處理
}
});
注:在重寫WebViewClient的onReceivedSslError方法時,注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否則設置無效。