之前项目中遇到一个问题,项目中webView加载h5广告,在h5中提交数据时,竟然一直显示loading而不加载提交成功界面,在此记录一下解决之法,分享给遇到同样问题的伙伴们。
运维人员提交这个问题后,第一时间考虑的是,测试原始链接在手机浏览器加载中是否正常?ios是否可以?
然而,经过简单的运行测试,只有android端会出现此类问题(现象),怎么办呢?Debug看!
首先检查一下代码,有没有设置支持js 等等设置。。。
webView.getSettings().setJavaScriptEnabled(true);
在看不出代码有什么纰漏的情况下,使用 Android studio自带的工具logcat打印日志看看信息,捕获到一条log:
chromium: [INFO:CONSOLE(1)] "[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'getItem' of null" (found in)", source: 要加载的h5链接 (1)
然后打开上面报的source:后面的url 搜索一下getItem看看是什么鬼?没搜到,那就带着问题上网搜,记录下我看到解答。
google搜索:h5中"getItem() of null" 然后回车键搜索。。。
找到问题:h5本地数据持久化存储的问题。
解释原因:
DOM storage 是HTML5提供的一种标准接口,主要将键值对存储在本地,在页面加载完毕后可以通过JavaScript来操作这些数据,但是Android 默认是关闭这个功能的,则导致H5页面加载失败。
解决方法:通过WebSetting设置开启(DOM Storage功能)
webView.getSettings().setDomStorageEnabled(true);
还有一种情况加载也是空白页面顺便也记录一下:
如商品详情页,h5链接https而内容图片为http时,5.0以上系统也会遇到加载不出来的情况,解决之法:
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
设置好了运行,测试OK 觉得有帮助到你,随手点个赞~