前言
Android系統(tǒng)Webview無法加載顯示對(duì)應(yīng)的資源等,那么,我們就要針對(duì)這一狀況作出對(duì)應(yīng)的處理。
解決步驟
1. 啟用mixed content
在Android5.0中,WebView方面做了些修改,如果你的系統(tǒng)target api為21以上:
- 系統(tǒng)默認(rèn)禁止了mixed content和第三方cookie??梢允褂胹etMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。
- 系統(tǒng)現(xiàn)在可以智能選擇HTML文檔的portion來繪制。這種新特性可以減少內(nèi)存footprint并改進(jìn)性能。若要一次性渲染整個(gè)HTML文檔,可以調(diào)用這個(gè)方法enableSlowWholeDocumentDraw()
- 如果你的app的target api低于21:系統(tǒng)允許mixed content和第三方cookie,并且總是一次性渲染整個(gè)HTML文檔。
在使用WebView的類中添加如下代碼:
// android 5.0及以上默認(rèn)不支持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. 設(shè)置WebView接受所有網(wǎng)站的證書
<font color=green>在認(rèn)證證書不被Android所接受的情況下,我們可以通過設(shè)置重寫WebViewClient的onReceivedSslError方法在其中設(shè)置接受所有網(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默認(rèn)的處理方式
handler.proceed();// 接受所有網(wǎng)站的證書
// handleMessage(Message msg);// 進(jìn)行其他處理
}
});
注:在重寫WebViewClient的onReceivedSslError方法時(shí),注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否則設(shè)置無效。