• LocalStorage 本地存储


    首先自然是检测浏览器是否支持本地存储。在HTML5中,本地存储是一个window的属性,包括localStoragesessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了。二者用法完全相同,这里以localStorage为例。

    if(window.localStorage){
     alert('This browser supports localStorage');
    }else{
     alert('This browser does NOT support localStorage');
    }

     

    存储数据的方法就是直接给window.localStorage添加一个属性,例如:window.localStorage.a 或者 window.localStorage["a"]。它的读取、写、删除操作方法很简单,是以键值对的方式存在的,如下:

    localStorage.a = 3;//设置a"3"
    localStorage["a"] = "sfsf";//设置a"sfsf",覆盖上面的值
    localStorage.setItem("b","isaac");//设置b"isaac"
    var a1 = localStorage["a"];//获取a的值
    var a2 = localStorage.a;//获取a的值
    var b = localStorage.getItem("b");//获取b的值
    localStorage.removeItem("c");//清除c的值

     

    这里最推荐使用的自然是getItem()setItem(),清除键值对使用removeItem()。如果希望一次性清除所有的键值对,可以使用clear()。另外,HTML5还提供了一个key()方法,可以在不知道有哪些键值的时候使用,如下:

    var storage = window.localStorage;
    function showStorage(){
     for(var i=0;i<storage.length;i++){
      //key(i)获得相应的键,再用getItem()方法获得对应的值
      document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
     }
    }

     

    写一个最简单的,利用本地存储的计数器:

    var storage = window.localStorage;
    if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
    storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换
    document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount;
    showStorage();

     

    需要注意的是,HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换。这也就是上一段代码中parseInt必须要使用的原因。

     

    另外,在iPhone/iPad上有时设置setItem()时会出现诡异的QUOTA_EXCEEDED_ERR错误,这时一般在setItem之前,先removeItem()ok了。

     

    HTML5的本地存储,还提供了一个storage事件,可以对键值对的改变进行监听,使用方法如下:

    if(window.addEventListener){
     window.addEventListener("storage",handle_storage,false);
    }else if(window.attachEvent){
     window.attachEvent("onstorage",handle_storage);
    }
    function handle_storage(e){
     if(!e){e=window.event;}
     //showStorage();
    }

     

    这里添加两个键值对ab,并增加一个按钮。给a设置固定的值,当点击按钮时,修改b的值:

    <body>
    <p>You have viewed this page <span id="count">0</span>  time(s).</p>
    <p><input type="button" value="changeStorage" onClick="changeS()"/></p>
    <script>
    var storage = window.localStorage;
    if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
    storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换
    document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount;
    showStorage();
    if(window.addEventListener){
     window.addEventListener("storage",handle_storage,false);
    }else if(window.attachEvent){
     window.attachEvent("onstorage",handle_storage);
    }
    function handle_storage(e){
     if(!e){e=window.event;}
     showObject(e);
    }
    function showObject(obj){
     //递归显示object
     if(!obj){return;}
     for(var i in obj){
      if(typeof(obj[i])!="object" || obj[i]==null){
       document.write(i + " : " + obj[i] + "<br/>");
      }else{
       document.write(i + " : object" + "<br/>");
      }
     }
    }
    storage.setItem("a",5);
    function changeS(){
     //修改一个键值,测试storage事件
     if(!storage.getItem("b")){storage.setItem("b",0);}
     storage.setItem('b',parseInt(storage.getItem('b'))+1);
    }
    function showStorage(){
     //循环显示localStorage里的键值对
     for(var i=0;i<storage.length;i++){
      //key(i)获得相应的键,再用getItem()方法获得对应的值
      document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
     }
    }
    </script>
    </body>

     

    测试发现,目前浏览器对这个支持不太好,仅iPadFirefox支持,而且Firefox支持得乱糟糟,e对象根本没有那些属性。iPad支持非常好,用的是e.uri(不是e.url),台式机上的Safari不行,诡异。

  • 相关阅读:
    692. 前K个高频单词
    准备工作:更新代码和运行环境
    1319. 连通网络的操作次数——并查集
    <leetcode c++>25. K 个一组翻转链表
    织梦dedecms手机站关闭自动生成首页index.html
    IIS7 IIS7.5 伪静态 web.config 配置方法不带WWW的301跳转到带WWW
    win7和xp一样有左下角显示桌面快捷方式
    Win7系统传真与扫描功能无法使用的处理方法
    织梦dedecms将列表页重复的第一页去除的方法
    秦岭土蜂蜜价格 秦岭土蜂蜜多少钱一斤
  • 原文地址:https://www.cnblogs.com/xupeiyu/p/4806484.html
Copyright © 2020-2023  润新知