今天做一個(gè)WebView加載一條https的url的時(shí)候出現(xiàn)了這個(gè)錯(cuò)誤,顯示不了h5,百度了一下,包括去stackoverflow也查不到解決方案。
百度基本都是說(shuō)要 setJavaScriptEnabled(true) 或者 是Internet權(quán)限沒(méi)有設(shè)置導(dǎo)致的,但是我這2個(gè)都設(shè)置好了,還是報(bào)以上的錯(cuò)誤。
然后我無(wú)意中設(shè)置了webSettings.setDomStorageEnabled(true);
發(fā)現(xiàn) 發(fā)現(xiàn) 發(fā)現(xiàn)
錯(cuò)誤還是出現(xiàn),但是網(wǎng)頁(yè)竟然可以顯示了,具體原因不明,反正可以顯示了我就沒(méi)管了。
--------------------------------------------------------------------------------------------
Webview 加載一些鏈接出現(xiàn)白板現(xiàn)象,經(jīng)過(guò)調(diào)試onLoadResource 已經(jīng)正常執(zhí)行,也就是資源文件都已經(jīng)成功加載,onReceivedSslError也沒(méi)有回調(diào)到,用自帶瀏覽器和UC都是正常,證明鏈接本身沒(méi)有問(wèn)題,Webview也正常運(yùn)行,沒(méi)有出現(xiàn)錯(cuò)誤,那就是Webview的配置問(wèn)題了。
經(jīng)過(guò)N個(gè)測(cè)試,把
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
都打開(kāi),還是未解決。
最終設(shè)置 webView.getSettings().setDomStorageEnabled(true);后成功。
按照API的說(shuō)明 Sets whether the DOM storage API is enabled. The default value is false.
也就是是否開(kāi)啟本地DOM存儲(chǔ)。應(yīng)該是Html 5中的localStorage(可以使用Android4.4手機(jī)和Chrome Inspcet Device聯(lián)調(diào)),用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過(guò)期的,絕大多數(shù)的瀏覽器都是支持 localStorage 的,但是鑒于它的安全特性(任何人都能讀取到它,盡管有相應(yīng)的限制,將敏感數(shù)據(jù)存儲(chǔ)在這里依然不是明智之舉),Android 默認(rèn)是關(guān)閉該功能的。
還有一種是加載https的URL時(shí)在5.0以上加載不了,5.0以下可以加載,這種情況可能是網(wǎng)頁(yè)中存在非https得資源,在5.0以上是默認(rèn)關(guān)閉,需要設(shè)置,
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
WebView的問(wèn)題一般查看log就能找到問(wèn)題的原因。