问题描述
WebView大家都熟悉了,是用来加载H5页面的常用控件。我遇到问题具体情况如下:
h5页面在WebView上加载时总是加载图片失败,但是在浏览器却十分正常。
系统:Android 7.0
问题分析
发现这个问题后,我的第一反应就是WebSetting设置不对或者缺少了什么项才会出现这个问题,于是反复检查了WebSetting配置,当时的设置项具体如下:
val webSettings = webView?.settings
webSettings?.javaScriptEnabled = true //支持js
webSettings?.domStorageEnabled = true
webSettings?.useWideViewPort = true
webSettings?.loadWithOverviewMode = true
webSettings?.allowFileAccess = true //设置可以访问文件
webSettings?.setNeedInitialFocus(true) //当webview调用requestFocus时为webview设置节点
webSettings?.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
webSettings?.loadsImagesAutomatically = true //支持自动加载图片
webSettings?.defaultTextEncodingName = "utf-8"//设置编码格式
反复检查后感觉没什么大问题,后来QA同事反映此页面在测试环境下正常,因此想到了是不是http和https配置影响了这个问题,查找文档找到了如下说明:
Android 5.0 更改了应用的默认行为。
如果您的应用是面向 API 级别 21 或更高级别:
默认情况下,系统会阻止混合内容和第三方 Cookie。要允许混合内容和第三方 Cookie,请分别使用 setMixedContentMode() 和 setAcceptThirdPartyCookies() 方法。
查看图片网址,发现图片地址URL发现是http的,而网址是https的。
问题解决
在Android 5.0以上需要添加如下代码支持HTTP和HTTPS混合调用:
webSettings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW //支持HTTP和HTTPS
添加如上代码之后,问题已解决。
网友评论