BOM新成就(1)--客户端存储数据(Storage实现)

数据构成了web站点的实际内容,这些数据多种多样,可以是独立的文件,也可以是位于某个数据库文件或者数据库服务器之中。现在,HTML 5 BOM允许在客户端实现较大规模的数据存储:一是web存储,二是Web SQL数据库存储。


一、Web存储概述

    Web存储机制是一种通过字符串形式的key/value对来安全的存储和使用数据的方法。Web存储和HTTP Cookie的区别在于:

    1、容量不同:Web存储容量大、更安全、更易于使用;Cookie存储容量有很大的限制

    2、存储的持久性也不同:Web存储是通过浏览器永久存储合理大小数据的数据方法,Cookie并没有为存储永久性的数据提供支持。


二、Web存储的类型

        1、在客户端存储数据的类型有以下两种:

              1.1   localStorage:本地存储,没有时间限制的数据存储。

              1.2   sessionStorage:会话存储,针对一个会话期的数据存储。

         

        2、在客户端永久存储数据--创建Storage存储

              localStorage存储的数据没有时间限制,可以永久使用。

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. var oStorage = window.localStorage;//返回一个Storage对象,可以调用对应的方法和属性  
  2. oStorage.book = "<b>javascript权威指南</b>"//添加键值  
  3. //window.localStorage.book = "<b>javascript权威指南</b>";  
  4. //查看键值  
  5. if(oStorage.book)  
  6. {  
  7.     alert(oStorage.book);  
  8. }  
  9. else  
  10. {  
  11.     alert("键值不存在");  
  12. }  

上图是google中的运行结果,中间图是google local storage存储的数据(ctrl+shift+i查看),下图是FF中的local storage存储的数据(ctrl+shift+k查看)



    由于早期的FF没有显示localStorage,但是提供了globalstorage属性为指定域创建本地存储。可以用如下代码实现兼容:

    var strDomain = "127.0.0.1";

     var oStorage = window.localStorage?window.localStorage:window.globalStorage[strDomain];

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. var strDomain = "127.0.0.1";  
  2. try  
  3. {  
  4.     var oStorage = window.localStorage?window.localStorage:window.globalStorage[strDomain];  
  5.     if(oStorage.visitorCount)  
  6.     {  
  7.         oStorage.visitorCount = parseInt(oStorage.visitorCount,10)+1;  
  8.     }  
  9.     else  
  10.     {  
  11.         oStorage.visitorCount = 1;  
  12.     }  
  13.     document.write("欢迎你第<span style='font-weight:bold'>"+oStorage.visitorCount+"<\/span>次访问");  
  14. }  
  15. catch(err)  
  16. {  
  17.     alert(err.message?err.message:err.toString());  
  18. }  

在Google中的运行结果

关闭浏览器后,localStorage存储仍然存在,但是sessionStorage存储仅在会话期存在。


    3、在会话期存储数据---创建sessionStorage

           sessionStorage针对一个Session进行的数据存储,当用户关闭浏览器后,数据就被删除。window.sessionStorage返回当前页面会话期有效内创建的会话存储区域,只要浏览器没有关闭,或者页面重新载入或恢复,或从当前网页跳转到另外一个页面,会话一直存在。

           可以利用window.sessionStorage属性返回的Storage对象调用对象方法和属性。

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <form action="?" method="?">  
  2.     <input name="myName" id="myName" type="text" οnblur="javascript:oStorage.myNameValue = this.value;"/>  
  3.     <input name="mySubmit" type="submit"/>  
  4. </form>  
  5. <script type="text/javascript">  
  6. var oField = document.getElementById("myName");  
  7. var oStorage = window.sessionStorage;  
  8. if(oStorage.myNameValue)  
  9. {  
  10.     oField.value = oStorage.myNameValue;  
  11. }  
  12. </script>  
结果:

当用户输入有误,返回此页面重新输入时,数据就被恢复。


三、Storage接口

        HTML5规范了WindowSessionStorage和WindowLocalStorage接口,分别对应于SessionStorage和Localstorage的sessionStorage与localStorage属性,二者均返回Storage对象。

        1、oStorage.length属性:获取key/value对的数量。

        2、oStorage.key(index):根据索引获取键名,返回键名的字符串形式或者空字符串。PS:添加新键值对后,索引发生变化。

        3、oStorage.getItem(skey):根据键名skey获取对应的键值。键不存在,返回null。

PS:不能从不安全URL环境(HTTP)中读取和写入安全环境(HTTPS)内定义的键。


        4、oStorage.clear():清除所有的key/value对,包括存储空间。

        5、oStorage.removeItem(skey):删除指定的键值对,skey是指定的键名,可以为空

        6、oStorage.setItem(skey,svalue):添加或者更新键值对。

PS:不能从不安全URL环境(HTTP)中读取和写入安全环境(HTTPS)内定义的键。


        7、storage事件:当存储区域发生变化时触发,可以用window.onstorage捕捉。若目标文档不处于活动状态则不会触发storage事件。上述方法中的4~6均会触发该事件。

             storage事件对象的属性:

             key:表示被更改的键;oldValue:表示被更改的键的旧值;newValue:表示被更改的键的新值;url:表示发生更改所在的网址;storageArea:表示发生更改坐在的Storage对象。(onstorage仅在IE9和Opera中实现

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="content-type" content="text/html;charset=utf-8" />  
  4.     <title>Storage</title>  
  5. </head>  
  6. <body style="font-family:'Microsoft YaHei','微软雅黑','SimSun','宋体'">  
  7.     <button οnclick="javascript:setItem('user','yk');">设置user键</button>  
  8.     <button οnclick="javascript:getItem('user');">显示user键</button>  
  9.     <button οnclick="javascript:removeItem('user');">删除user键</button>  
  10.     <div id="myDiv" style="background:#EEE;width:315px;min-height:50px;padding:10px;border:2px dashed #ccc"></div>  
  11.     <script type="text/javascript">  
  12.         function storageHander(event)  
  13.         {  
  14.             var myDiv = document.getElementById("myDiv");  
  15.             myDiv.innerHTML = "存储发生了变化:<br/><b>"+event.key+"</b>键改变了<br/>旧值<b>"+event.oldValue+"</b>被改变为新值<b>"+event.newValue+"</b><br/>发生改变的网址:<b>"+event.url+"</b>";  
  16.         }  
  17.         window.onstorage = storageHander();  
  18.   
  19.         var strDomain = "127.0.0.1";  
  20.         var oStorage;  
  21.         try  
  22.         {  
  23.             oStorage = window.localStorage?window.localStorage:window.globalStorage[strDomain];  
  24.         }  
  25.         catch(err)  
  26.         {  
  27.             alert(err.message?err.message:err.toString());  
  28.         }  
  29.   
  30.         function setItem(key,value)  
  31.         {  
  32.             oStorage.setItem(key,value);  
  33.             alert("DOM Storage:"+key+"="+value);  
  34.         }  
  35.         function getItem(key)  
  36.         {  
  37.             var myDiv = document.getElementById("myDiv");  
  38.             myDiv.innerHTML = oStorage.getItem(key);  
  39.         }  
  40.         function removeItem(key)  
  41.         {  
  42.             oStorage.removeItem(key);  
  43.             alert("键"+key+"被删除了");  
  44.         }  
  45.     </script>  
  46. </body>  
  47. </html>  

在IE中的运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值