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下的兼容性写法的更多相关文章

  1. css在 IE8下的兼容性

    常用伪类选择器   IE7 IE8 IE9 :hover √ √ √ :focus × √ √ :first-child √ √ √ :last-child × × √ :first-of-type ...

  2. css各浏览器的兼容性写法

    各浏览器下的兼容性写法 老版Chrome     -webkit-xxx FF                  -moz-xxx IE9                 -ms-xxx opera ...

  3. CSS- ie6,ie7,ie8 兼容性写法,CSS hack写法

    css ie6,ie7,ie8 兼容性写法,CSS hack写法 margin-bottom:40px;       /*ff的属性*/margin-bottom:140px\9;    /* IE6 ...

  4. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  5. 常用原生JS兼容性写法汇总

    1.添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListener){//检测是否为DOM2级方法 elem ...

  6. 解决IE8下opacity属性失效问题

    由于opacity属性存在兼容性问题,所以在IE8下,用opacity来设置元素的透明度,会失效,从而导致页面的样式问题. 在IE8及其更早的浏览器下,我们可以使用filter属性,来代替opacit ...

  7. 解决IE8下opacity属性失效问题,无法隐藏元素

    解决IE8下opacity属性失效问题   由于opacity属性存在兼容性问题,所以在IE8下,用opacity来设置元素的透明度,会失效,从而导致页面的样式问题.在IE8及其更早的浏览器下,我们可 ...

  8. js 的一些兼容性写法

    ①添加事件方法 addHandler:function(element,type,handler){     if(element.addEventListener){//检测是否为DOM2级方法   ...

  9. IE8下Extjs报缺少':'符号错误

    先介绍下这个问题的由来: 上午其他项目组人员在rtx上问,求帮忙解决ie8兼容性问题. 然后快到饭点,知道这个bug肯定不是那么好解决,肯定不能耽误吃饭时间. 果断说,下午来弄. 下午3点开始去看这个 ...

随机推荐

  1. 通过git提交代码到仓库

    昨天有一个妹子问我如何在还没有commit之前push本地的代码到仓库,现在写写,希望能够帮到大家. 当我们pull的时候会出现没有代码commit的错误提示,在这种情况下,我们需要再commit之前 ...

  2. Eclipse添加tomcat出现 The Apache Tomcat installation at this directory is version 8.5.6. A Tomcat 8.0 installation is expected.

    打开tomcat安装目录:apache-tomcat-8.5.6\lib 找到catalina.jar 用解压缩工具打开 org/apache/catalina/util/ServerInfo.pro ...

  3. Action的创建和配置

    计应134(实验班) 李佳鸿 Action类—Struts组件 在RequestProcessor类预处理请求时,在创建了Action的实例后,就调用自身的processActionPerform() ...

  4. windows phone 8.1开发SQlite数据库引用安装

    原文出自:http://www.bcmeng.com/windows-phone-sqlite/ windows phone 8.1开发SQlite数据库引用安装 第一步: 安装SQlite forw ...

  5. Windows Phone下页面跳转动画的实现

    写在前面的一些废话: 前段时间一直忙于其他的事情,好长时间没有更新博客,很多东西虽然看过.学过,但是没有仔细去思考,去总结,长时间不用或者用的少难免会遗忘.最近由于家里以及感情方面的事,人也变得有点怨 ...

  6. [原创]HBase学习笔记(3)- Java程序访问HBase

    这里介绍使用java api来访问和操作HBase,例如create.delete.select.update等操作. 1.HBase配置 配置HBase使用的zookeeper集群地址和端口. pr ...

  7. React-Native 开发(二) 在react-native 中 运用 redux

    前提: 一个小web前端,完全不会android 跟iOS 的开发,首次接触,有很多不懂的问题.请见谅. 环境: win7 上一篇 : React-Native 开发(一) Android环境部署,H ...

  8. iOS开发之Run Loop

    1.概述 (1) Run Loop提供了一种异步执行代码的机制,不能并行执行任务. (2) 在主队列中,Main Run Loop直接配合任务的执行,负责处理UI事件.计时器,以及其它内核相关事件. ...

  9. python之smtplib发邮件

    第一版: 认证发信,不支持附件 #!/usr/bin/env python # --------------------------------------- # author : Geng Jie ...

  10. JAVA优化建议

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...