storage在IE8下的兼容性写法
storage 本地缓存,这是HTML5的一个非常好用的地方,具体好用在哪,网上可以找到很多,但是我觉得总结的都不是很完整,我建议大家有空的话可以看下JavaScript权威指南这本书,里面对于这个方法有着十分详细的解释。虽然说好用,但是还有个十分麻烦的问题就是在IE浏览器下的兼容性问题,IE是不支持这个属性的。也不是说全部,我自己测试的结果是IE8、9都是不支持的,那么怎么解决这个问题呢?
那就要感谢前辈了,我也不知道是谁写的这段代码,但是我用着十分好用,最起码IE8、9下都可以正常使用这个属性了。现在把代码分享给大家:
<script language="JavaScript" type="text/javascript">
if(typeof(storage)=='undefined') {var box = document.body || document.getElementsByTagName("head")[0] || document.documentElement; userdataobj = document.createElement('input'); userdataobj.type = "hidden"; userdataobj.addBehavior ("#default#userData"); box.appendChild(userdataobj); //设定对象 var storage= { setItem:function(nam,val) {userdataobj.load(nam); userdataobj.setAttribute(nam,val); var d= new Date(); d.setDate( d.getDate()+700); userdataobj.expires=d.toUTCString(); userdataobj.save(nam); userdataobj.load("userdata_record"); var dt=userdataobj.getAttribute("userdata_record"); if(dt==null)dt=''; dt=dt+nam+","; userdataobj.setAttribute("userdata_record",dt); userdataobj.save("userdata_record");}, //模拟 setItem getItem:function(nam) {userdataobj.load(nam); return userdataobj.getAttribute(nam); }, //模拟 getItem removeItem:function(nam) {userdataobj.load(nam); clear_userdata(nam) userdataobj.load("userdata_record"); var dt=userdataobj.getAttribute("userdata_record"); var reg=new RegExp(nam+",","g"); dt=dt.replace(reg,''); var d= new Date(); d.setDate( d.getDate()+700); userdataobj.expires= d.toUTCString(); userdataobj.setAttribute("userdata_record",dt); userdataobj.save("userdata_record"); }, //模拟 removeItem clear:function(){ userdataobj.load("userdata_record"); var dt=userdataobj.getAttribute("userdata_record").split(","); for (var i in dt) {if(dt[i]!='')clear_userdata(dt[i]) } clear_userdata("userdata_record") } //模拟 clear(); } function clear_userdata(keyname)//将名字为keyname的变量消除 {var keyname; var d= new Date(); d.setDate( d.getDate()-1); userdataobj.load(keyname); userdataobj.expires=d.toUTCString(); userdataobj.save(keyname); } } </script>
凡事都有个但是,虽然都说IE浏览器是万恶的浏览器,但是却也可以严格的要求我们的代码规范。
我在我的IE浏览器上面进行测试,IE8、9都是没有问题的,而在其他人的IE浏览器中却出现了问题,使我百思不得其解,如果有哪位大大知道答案的可以说下。最后花了好长时间的研究才发现用ready()方法解决了这个问题,即:
$(document).ready(function(){}
所以说要严格要求自己的代码规范。
我在写这个项目的时候还碰到一个问题,就是我写了一个很简单的toggle()方法,让其达到点击出现二级菜单,再次点击二级菜单消失的效果。但是却出现了所有的一级和二级菜单全部都消失了的问题,检查了一个小事也没有发现问题,最后发现是jQuery引入版本的问题,我换了一个版本的就好了,这是我第一次在写代码的过程中碰见这个问题,记录下来,提醒着自己。
storage在IE8下的兼容性写法的更多相关文章
- css在 IE8下的兼容性
常用伪类选择器 IE7 IE8 IE9 :hover √ √ √ :focus × √ √ :first-child √ √ √ :last-child × × √ :first-of-type ...
- css各浏览器的兼容性写法
各浏览器下的兼容性写法 老版Chrome -webkit-xxx FF -moz-xxx IE9 -ms-xxx opera ...
- CSS- ie6,ie7,ie8 兼容性写法,CSS hack写法
css ie6,ie7,ie8 兼容性写法,CSS hack写法 margin-bottom:40px; /*ff的属性*/margin-bottom:140px\9; /* IE6 ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- 常用原生JS兼容性写法汇总
1.添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListener){//检测是否为DOM2级方法 elem ...
- 解决IE8下opacity属性失效问题
由于opacity属性存在兼容性问题,所以在IE8下,用opacity来设置元素的透明度,会失效,从而导致页面的样式问题. 在IE8及其更早的浏览器下,我们可以使用filter属性,来代替opacit ...
- 解决IE8下opacity属性失效问题,无法隐藏元素
解决IE8下opacity属性失效问题 由于opacity属性存在兼容性问题,所以在IE8下,用opacity来设置元素的透明度,会失效,从而导致页面的样式问题.在IE8及其更早的浏览器下,我们可 ...
- js 的一些兼容性写法
①添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListener){//检测是否为DOM2级方法 ...
- IE8下Extjs报缺少':'符号错误
先介绍下这个问题的由来: 上午其他项目组人员在rtx上问,求帮忙解决ie8兼容性问题. 然后快到饭点,知道这个bug肯定不是那么好解决,肯定不能耽误吃饭时间. 果断说,下午来弄. 下午3点开始去看这个 ...
随机推荐
- Java线程池ExecutorService
开篇前,我们先来看看不使用线程池的情况: new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override ...
- Atlas-手淘组件化框架的前世今生和未来的路
今天手淘技术团队宣布正式开源它们的容器框架Atlas,项目地址: https://github.com/alibaba/atlas 同时他们还推出了项目官网,上线了技术文档: http://atlas ...
- 读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型
1. 何为public继承的”is-a”关系 在C++面向对象准则中最重要的准则是:public继承意味着“is-a”.记住这个准则. 如果你实现一个类D(derived)public继承自类B(ba ...
- 浅谈jquery插件开发模式
首先根据<jQuery高级编程>的描述来看,jQuery插件开发方式主要有三种: 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget ...
- 笔记本win10关机异常解决
自从使用了win10 以后,小编已经情不自禁的爱上了她——迄今为止最NB的windows系统 但令人头疼的问题也随之而来,前几天购置了一款三星的SSD固态硬盘,马上就装了win10,某天晚上关机以后发 ...
- pom.xml配置文件配置jar(不用记,快速配置)
1:网址:http://mvnrepository.com/ 2:在搜索栏搜索要用的框架;例如spring *以下为示例
- .NET中可空值类型实现原理
为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable<T>类型,也可简写为T?.但是Nullable<T>自身是结构体,也是值类型,那么它是如何实现将nu ...
- Linux关机重启指令
关机: init 0 [使用Linux的运行级别] halt poweroff shutdown -h [系统会发出广播信息,显示即将关机时间] shutdown -c [取消关机计划] 重启: r ...
- python常见的特异点
编码问题 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错.解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或 ...
- nodeJS之eventproxy源码解读
1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD ...