`
xiaotao.2010
  • 浏览: 219136 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HTML5 本地存储 LocalStorage

 
阅读更多

 

说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示:

HTML5 <wbr>本地存储 <wbr>LocalStorage

最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了。优势就是大家都支持,而且支持得还蛮好。很早以前那些禁用cookies的用户也都慢慢的不存在了,就好像以前禁用javascript的用户不存在了一样。

 

userData是IE的东西,垃圾。现在用的最多的是Flash吧,空间是Cookie的25倍,基本够用。再之后Google推出了Gears,虽然没有限制,但不爽的地方就是要装额外的插件(没具体研究过)。到了HTML5把这些都统一了,官方建议是每个网站5MB,非常大了,就存些字符串,足够了。比较诡异的是居然所有支持的浏览器目前都采用的5MB,尽管有一些浏览器可以让用户设置,但对于网页制作者来说,目前的形势就5MB来考虑是比较妥当的。

HTML5 <wbr>本地存储 <wbr>LocalStorage

支持的情况如上图,IE在8.0的时候就支持了,非常出人意料。不过需要注意的是,IE、Firefox测试的时候需要把文件上传到服务器上(或者localhost),直接点开本地的HTML文件,是不行的。

 

首先自然是检测浏览器是否支持本地存储。在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着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 <wbr>本地存储 <wbr>LocalStorage
需要注意的是,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();
}

 

对于事件变量e,是一个StorageEvent对象,提供了一些实用的属性,可以很好的观察键值对的变化,如下表:

 Property  Type  Description
 key  String  The named key that was added, removed, or moddified
 oldValue  Any  The previous value(now overwritten), or null if a new item was added
 newValue  Any  The new value, or null if an item was added
 url/uri  String  The page that called the method that triggered this change

 

这里添加两个键值对a和b,并增加一个按钮。给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>

 

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

 

目前浏览器都带有很好的开发者调试功能,下面分别是Chrome和Firefox的调试工具查看LocalStorage:

HTML5 <wbr>本地存储 <wbr>LocalStorage

HTML5 <wbr>本地存储 <wbr>LocalStorage

另外,目前javascript使用非常多的json格式,如果希望存储在本地,可以直接调用JSON.stringify()将其转为字符串。读取出来后调用JSON.parse()将字符串转为json格式,如下所示:

var details = {author:"isaac","description":"fresheggs","rating":100};
storage.setItem("details",JSON.stringify(details));
details = JSON.parse(storage.getItem("details"));

 

转载处:http://blog.sina.com.cn/s/blog_4515673f0100mm6m.html

分享到:
评论

相关推荐

    HTML5 LocalStorage 本地存储

    HTML5 LocalStorage 本地存储 HTML5 本地存储是指在客户端存储数据的一种机制,通过使用 localStorage 对象,可以将数据存储在客户端,实现本地存储。这种机制可以代替传统的 Cookie Mechanism,提供了更大的存储...

    JS+HTML5本地存储Localstorage实现注册登录及验证功能示例

    在本文中,我们将深入探讨如何使用JavaScript(JS)与HTML5的本地存储机制Localstorage来实现用户注册和登录的功能,并进行基本的验证。Localstorage是Web应用存储数据的一种方法,它允许开发者在浏览器中持久化地...

    HTML5 本地存储 LocalStorage详解

    HTML5的本地存储机制,尤其是LocalStorage,是现代Web开发中不可或缺的一部分,它允许开发者在用户的浏览器上持久化地存储数据,而无需借助于Cookie或Flash等传统方式。LocalStorage的引入,解决了早期存储技术如...

    html 5 localStorage本地存储

    "HTML5 localStorage 本地存储" HTML5 中的 localStorage 是一种本地存储机制,可以将数据存储在客户端的浏览器中,提供了一个简单的方式来存储和检索数据。localStorage 的出现解决了以往 Cookies、UserData、...

    HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等

    HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localStorage 则会一直保存。我们这里以 localStorage 为例,简要介绍下 ...

    html5本地存储 localStorage操作使用详解

    本文主要探讨了HTML5中的两种本地存储形式——`localStorage`和`sessionStorage`,以及它们的用途、限制和API。 1. HTML5的几种存储形式: - **本地存储(localStorage 和 sessionStorage)**:两者都是Web ...

    HTML5 LocalStorage 本地存储刷新值还在

    1. localStorage是本地存储,存储期限不限; 2. sessionStorage会话存储,页面关闭数据就会丢失。 使用方法: localStorage.setItem(“key”,“value”)//存储 localStorage.getItem(key)//按key进行取值 ...

    HTML5 LocalStorage和UserData实现兼容多浏览器的本地存储

    HTML5的LocalStorage和UserData是两种不同的机制,它们都允许网页在用户本地存储数据,从而实现离线应用或者增强用户体验。这两个技术在实现浏览器兼容性方面起着关键作用,特别是对于那些需要在用户关闭浏览器后...

    本地存储localStorage用法详解

    在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的...

    HTML5实现的本地缓存localstorage登录效果实例代码.zip

    HTML5是现代网页开发的关键技术,它引入了许多增强功能,其中本地存储机制是其中之一。Local Storage是HTML5中用于在用户浏览器中持久化存储数据的一种方法,它允许开发者在不借助Cookie的情况下,存储大量数据,...

    基于html5 localStorage本地存储的一个简易改造封装使其变通用的js组件.zip

    HTML5的localStorage是Web应用程序本地存储数据的一种强大方式,它允许开发者在用户的浏览器上持久化地存储关键数据,而无需依赖传统的Cookie或者复杂的HTTP请求。这个"基于html5 localStorage本地存储的一个简易...

    store:本地存储实现,优先本地存储localStorage,如果浏览器不支持,优雅降级为cookie

    首先,`localStorage`是HTML5引入的一种本地存储机制,它允许Web应用在用户的浏览器上存储大量数据(通常高达5MB),并且这些数据不会在浏览器会话结束后消失。`localStorage`提供了一个简单的键值对存储接口,...

    原生html5,js利用localStorage写的历史输入预选(仿百度)

    原生html5,js利用localStorage写的历史输入预选(仿百度)

    基于html5的localstorage的本地存储数据库.zip

    本项目“基于html5的localstorage的本地存储数据库”着重探讨了如何利用HTML5的Local Storage特性来实现一个简单的本地存储数据库,这对于创建离线应用、提升用户体验以及在用户浏览器中保存数据具有重要意义。...

    html5中localStorage本地存储的简单使用

    HTML5的localStorage是Web应用程序用来在用户浏览器上持久存储数据的一种机制。相比于传统的Cookie,localStorage提供了更大的存储空间(通常为5MB),并且不会随着HTTP请求发送到服务器,从而减少了网络流量,提高...

Global site tag (gtag.js) - Google Analytics