今天做一个WebView加载一条https的url的时候出现了这个错误,显示不了h5,百度了一下,包括去stackoverflow也查不到解决方案。
百度基本都是说要 setJavaScriptEnabled(true) 或者 是Internet权限没有设置导致的,但是我这2个都设置好了,还是报以上的错误。
然后我无意中设置了webSettings.setDomStorageEnabled(true);
发现 发现 发现
错误还是出现,但是网页竟然可以显示了,具体原因不明,反正可以显示了我就没管了。
--------------------------------------------------------------------------------------------
Webview 加载一些链接出现白板现象,经过调试onLoadResource 已经正常执行,也就是资源文件都已经成功加载,onReceivedSslError也没有回调到,用自带浏览器和UC都是正常,证明链接本身没有问题,Webview也正常运行,没有出现错误,那就是Webview的配置问题了。
经过N个测试,把
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);
都打开,还是未解决。
最终设置 webView.getSettings().setDomStorageEnabled(true);后成功。
按照API的说明 Sets whether the DOM storage API is enabled. The default value is false.
也就是是否开启本地DOM存储。应该是Html 5中的localStorage(可以使用Android4.4手机和Chrome Inspcet Device联调),用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的,绝大多数的浏览器都是支持 localStorage 的,但是鉴于它的安全特性(任何人都能读取到它,尽管有相应的限制,将敏感数据存储在这里依然不是明智之举),Android 默认是关闭该功能的。
还有一种是加载https的URL时在5.0以上加载不了,5.0以下可以加载,这种情况可能是网页中存在非https得资源,在5.0以上是默认关闭,需要设置,
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
WebView的问题一般查看log就能找到问题的原因。