localStorage兼容方案

摘要:
LocalStorage是H5的存储解决方案,所有主要浏览器都非常支持它。唯一可悲的是Internet Explorer,它在浏览器世界中总是格格不入。在IE“Internet选项”-˃“安全”中,有一个“启动保护模式”单选选项。选择该选项后,无法使用localStorage。系统将直接提示您“拒绝访问”。即使未选中,下次打开IE时也可能会弹出“启用保护模式”提示。此时,没有比兼容性更好的方法来实现兼容性。方案1:userDatauserData是IE专用的浏览器存储机制,注意不支持IE8+。

localStorage是H5的存储方案,各大浏览器支持都相当不错,唯一悲催的就是IE,这个浏览器界的另类总是显得格格不入。

IE “Internet选项”->“安全”中有一个“启动保护模式”的单选项,在选中的情况下localStorage是无法使用的,直接提示“拒绝访问”,就算不勾选,下次打开IE时也很有可能弹出“是否启用保护模式”的提示,此时除了做兼容没有更好的办法

兼容方案一:userData

userData是IE专属的浏览器存储机制,注意IE8+不支持(你说悲催不悲催)。userData的原理网上很多,就不再赘述,您可以点击下方有参考资料查看,这里直接贴出代码

var box = document.body || document.documentElement || document.getElementsByTagName('head')[0];
var o = document.createElement("input");
o.type = "hidden";
o.style.display = "none";
o.addBehavior("#default#userData");
box.appendChild( o );
var exDate = new Date();
exDate.setDate(exDate.getDate()+365);
o.expires = exDate.toUTCString();//设定过期时间
var FileName = "localStorageKeyCache";
var cacheName = "kv";

o.setAttribute( cacheName , data.join(",") );
o.save( FileName );

o.load( FileName );
var getData = o.getAttribute( cacheName );
if( getData ){
   console.log( getData );
}

userData本质上是一个文件,因此存储的时候需要提供文件名,然后就可以通过setAttribute设置key/value,删除可以通过removeAttribute方法,不管对userData做什么修改最后都需要通过save()方法进行保存

读取userData必须先用load()方法加载文件,然后用getAttribute获取

由于userData仅支持IE8以下的浏览器,IE9,10,11就的另想办法

兼容方案二:cookie

cookie一直都是localStorage兜底的办法,不管哪个版本的IE都支持,只可惜存储的数据少了点。cookie存储数据网上很多教程,这里不再赘述

总结:

localStorage兼容,简单的就直接判断能用就用,不行就用cookie,个人感觉userData实在鸡肋,直接用cookie更方便

参考资料:

http://www.cnblogs.com/xiaohuochai/p/6595959.html

http://www.cnblogs.com/QLeelulu/archive/2008/03/29/1129322.html

http://blog.csdn.net/csyuyaoxiadn/article/details/12836955

免责声明:文章转载自《localStorage兼容方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cocos2d-x Lua 阅读Csv文件,使用数据更方便Unity Tiny & ECS 学习笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

H5的本地保存localStorage、sessionStorage用法总结

来源:https://www.cnblogs.com/wlzdf999/p/9359142.html localStorage:方法存储的数据没有时间限制。 sessionStorage:方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。 localStorage、和sessionStorage的用法:(localStora...

使用EditThisCookie浏览器插件导出cookie

  1、下载浏览器插件EditThisCookie,下载后为比如:EditThisCookie_v1.6.3.crx      下载路径:https://chrome.zzzmh.cn/info?token=fngmhnnpilhplaeedifhccceomclgfbg   2、无法直接在google浏览器上安装EditThisCookie_v1.6.3...

上传大文件的解决方案

需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制。 PC端全平台支持,要求支持Windows,Mac,Linux 支持所有浏览器。 支持文件批量上传 支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W。 支持大文件断点续传,要求...

使用COOKIE实现登录 VS 使用SESSION实现登录

注:本文使用的代码基于PHP,其他语言逻辑同理。 一:使用COOKIE实现登录验证 使用cookie实现登录的方式,主要通过一些单向的加密信息进行验证。比如admin用户登录了之后,服务端生成一个cookie值:admin_1533006028_ bbf2c2b1ec5cfb62d0a30438d8d0305c ,这个cookie值包含用户名,cookie...

json格式cookie转成可用的形式

使用edit this cookie导出的cookie是无法直接使用的所以需要转一下以下是edit this cookie导出的cookiecookies= [{"domain": ".jianshu.com","expirationDate": 1551985676.351818,"hostOnly": false,"httpOnly": true,"n...

远程调用丢失请求头与定义RequestInterceptor

feign远程调用的请求头中没有含有JSESSIONID的cookie,所以也就不能得到服务端的session数据,cart认为没登录,获取不了用户信息  我们追踪远程调用的源码,可以在SynchronousMethodHandler.targetRequest()方法中看到他会遍历容器中的RequestInterceptor进行封装 Request t...