webview在android4.4版本以后需要知道的事情
2017-07-26 17:33
260 查看
最近遇到一些webview的问题,为了让以后少走弯路,今天做个记录。问题主要的原因是由于android系统版本问题导致的,webview在android4.4以后做了许多修改,这样会随着android版本的升级会导致webview在版本兼容方面出现一些问题,比如android4.4以前(包含)webview对http跟https协议的安全认证方式是不区分的,但是在4.4版本以后google就对安全认证方式进行了严格的区分,但并不是说完全摒弃不安全的https认证方式,版本是向下兼容的。
一、android4.4以后google对http与https的安全认证方式进行了严格的区分,WebView默认不支持同时加载Https和Http混合模式。
在android4.4以前比如在webview里面播放视频是没有问题,比如优酷,腾讯视频都是正常播放,但是某天测试跟你反应腾讯视频不能播放了,然后你就懵逼了,明明之前是一直正常的为什么现在不行了,而且还是某些视频不能播放,这才是最骚的。作为一个有经验的程序猿应该第一反应到是android版本的兼容问题,没错这是google在4.4版本以后对http与https进行了安全认证的区分,4.4以后默认不支持https这种方式,但是google是提供向下兼容的所以提供了三种模式来适应不同的场景:1、MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。2、MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。3、MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。所以我们只需要在代码里面添加一行代码就好,记得要判断版本:if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }
备注:使用MIXED_CONTENT_COMPATIBILITY_MODE也是可以的,但是官方所说的这种场景没有测试过,定义不明确所以保险起见用
MIXED_CONTENT_ALWAYS_ALLOW二、android4.4以后webview默认不保存cookie状态很多时候我们会在webview上进行第三方登录之类的需求,比如qq,微博之类的,但是在4.4以后你会发现qq或者微博登录会在qq上显示授权登录成功但是webview上面却显示未登录状态,会存在一直登录不上的现象,但是在4.4以前是正常的,这个也是因为android4.4以后google为了安全性的要求默认不保存cookie状态,google也提供了API可以设置在4.4以后进行cookie保存,代码设置如下:记得判断版本if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){//android5.0以后webview默认不在保存cookie所以会导致第三方登录状态无法保存CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptThirdPartyCookies(webView,true);}
以上就是我最近遇到关于webview版本上兼容的问,如果有误请纠正,日常问题记录。
相关文章推荐
- Webview 兼容android4.4版本上传本地图片
- 【脚本语言系列】关于PythonWeb客户端-服务器模块http-urllib,你需要知道的事情
- 关于Android4.4以下版本Webview执行LoadUrl加载js导致键盘隐藏的问题(富文本编辑器)
- 【脚本语言系列】关于PythonWeb客户端标准库requests,你需要知道的事情
- android4.4之后版本webview全屏播放视频无效果onShowCustomView事件不触发(低版本可以的)
- 在android4.4中webview的使用相对于之前版本的一些区别
- [WebView学习之四]:迁移到Android4.4版本的WebView
- 【android】 在高版本中进行WebView与js交互需要注意的问题
- 关于webview需要知道的东西
- 关于web切图你需要知道的几件事情
- Android4.4以下版本webview 不支持css3 flex布局
- 3.1.2 WebView和JavaScrip交互大全及Android4.4以后的新特性
- iOS webview 加载html 乱码 需要UTF8转码
- 解决Android4.4 webview 图片如何自适应 之前的方法失效问题
- WebView与js交互过程中需要注意的问题
- 托福考试前你需要知道哪些事情
- [译] 关于 Git 你需要知道的一些事情
- UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout
- webview在Andriod4.42版本调
- UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout