HTML5之本地存储
Web Storage
在H5出来之前,如果我们需要把数据存在用户端,我们想到的就是Cookie。但是Cookie本来就有很多不好的地方,比如:
正是因为诸多的缺陷,H5给我们提供了新的解决方案,sessionStorage和localStorage。
两个的使用区别:
- sessionStorage:数据的存储只在特定的会话中,数据只会保留到浏览器关闭之前,适合保存临时数据;
- localStorage: 存储在本地硬盘上面,持久化存在,适合保存长时间数据。
sessionStorage、localStorage提供的方法包括:1
2
3
4setItem(key,value); //保存数据
getItem(key); //获取数据
removeItem(key); //提出健值
clear(); //清除数据
使用方法:1
2
3
4
5
6
7window.onload = function() {
sessionStorage.setItem('key1', "test");
console.log(sessionStorage.getItem('int1'));
localStorage.setItem('key2', "test");
console.log(localStorage.getItem('key2'));
}
注意事项:
1、不同浏览器对 H5 的本地存储大小基本均有限制(仅供参考,具体数值以实际测试为准):
IE 9 > 4999995 + 5 = 5000000
firefox 22.0 > 5242875 + 5 = 5242880
chrome 28.0 > 2621435 + 5 = 2621440
safari 5.1 > 2621435 + 5 = 2621440
opera 12.15 > 5M (超出则会弹出允许请求更多空间的对话框)1
2
3
4
5
6
7
8
9try{
localStorage.setItem(key,value);
}catch(ex){
if(ex.name == 'QuotaExceededError'){
console.log('超出本地存储限额!');
localStorage.clear();
localStorage.setItem(key,value);
}
}
2、H5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换:1
2localStorage.setItem('int2', 1);
console.log(typeof localStorage.getItem('int2'));//string
3、iOS的Safari在无痕模式(隐身模式)下,setItem操作产生异常,报错QUOTA_EXCEEDED_ERR: DOM Exception 22,这时需要防止抛出异常导致js无法正常执行,最终页面无法正常加载:1
2
3
4
5try {
window.localStorage.setItem('int2', 1);
} catch(ex) {
console.error(ex);
}
最后,让我们看一下jd的localStorage.js代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35/* jdf-1.0.0/ localStorage.js Date:2015-07-02 10:57:02 */
define("http://misc.360buyimg.com/jdf/1.0.0/unit/localStorage/1.0.0/localStorage.js", [], function(){
var c = {
check: function(){
return "object" == typeof window.localStorage
},
has: function(a){
return localStorage.getItem(a)?!0:!1
},
set: function(a, b){
try{
localStorage.setItem(a, JSON.stringify(b))
}
catch(c){}
},
get: function(a){
try{
return JSON.parse(localStorage.getItem(a))
}
catch(b){}
},
remove: function(a){
localStorage.removeItem(a)
},
clearByReg: function(a){
var b = new RegExp(a);
var c = window.localStorage;
for(var d in c)b.test(d)&&this.remove(d)
},
clear:function(){
localStorage.clear()
}
};
return c
});
jd使用的seajs加载模块,从定义的方式上也可以看出使用的CMD规范,AMD & CMD请参考 http://www.zhihu.com/question/20351507/answer/14859415 。
感谢您的阅读,有不足之处请在评论为我指出!
参考资料
[1]:HTML5 LocalStorage 本地存储
[2]:Html5 Step by Step(二) 本地存储
版权声明:本文为博主原创文章,未经博主允许不得转载。本文地址 http://yangyuji.github.io/2015/07/09/html5-webstorage/