原文地址: ​​Using HTML5 Web Storage ​

原文日期: 2010年06月28日

翻译日期: 2013年08月12日

当下Web开发领域最火爆的词语当属 HTML5。HTML5标准的新特性将得到那些不想通过东拼西凑一些功能来使得网站更快,更好,更灵活的WEB开发者热烈的欢迎。其中一个耀眼的特性是Web Storage(Web 存储)。Web存储提供一个客户端方法来保存会话信息,让我们来看看如何使用Web Storage:

Web Storage的特点

 - 值可以是任意的数据类型,只要是key-value形式可以保存的。

 - 数据将永不过期,除非用户明确调用了delete方法,或者浏览器限制了空间大小,或者其他原因(比如用户清空历史数据)

 - 数据项在整个domain(域名)内都可见。

HTML5 Web 存储方法列表

setItem(key,value): 添加一个键值对,存储到sessionStorage(会话存储)对象

getItem(key): 根据key获取值

clear(): 清空sessionStorage(会话存储)的所有键/值对

removeItem(key): 从sessionStorage 移除某个项(键值对)

key(n): 获取第n个key。


设置key/value

有两种方式可以把值存储到sessionStorage:

// 第一种方式,标准方法
sessionStorage.setItem('email','renfufei@qq.com');
// 第二种方式,直接当成普通对象属性赋值。
sessionStorage.blog = 'http://blog.csdn.net/renfufei';

获取值

同样有两种方式:


// 1. 标准方法
var email = sessionStorage.getItem('email');
// 2. 直接取属性值
var blog = sessionStorage.blog;


移除key/value

// 移除之后,再获取值,将会得到 undefined
// 根据key,移除键值对
sessionStorage.removeItem('email');


清空sessionStorage

// 全部清除
sessionStorage.clear();


非常简单的一个示例

当用户点击退出按钮时,提示"欢迎下次再来!"


<a href="javascript:;" onClick="if(sessionStorage && sessionStorage.getItem('name')) { alert('欢迎下次再来, ' + sessionStorage.getItem('name')); }">退出</a>

浏览器兼容性

就像其他酷炫的特性一样,浏览器兼容性总是焦点。 IE8以前的浏览器都不支持sessionStorage,如果想要支持更早的浏览器,你需要自己构建sessionStorage类(对象).

HTML5 web存储简单而有趣,但是 HTML5 Web Storage需要JavaScript的支持,所以在某些关键领域(场合),你可能需要审慎地使用。

你如何看待HTML5 的 Web Storage,你在开发中用到过么?

完整的代码示例如下:


<!DOCTYPE html>
<html>
<head>
<title>HTML5 Web Storage 示例</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="renfufei@qq.com">
<meta name="Keywords" content="HTML5 sessionStorage">
<meta name="Description" content="from:http://davidwalsh.name/html5-storage">
<!-- HTML5 建议,script 标签,不加type属性域 -->
<script>
// 封装为自己的方法,有一个好处,就是如果想支持更古老的浏览器,
// 那么,可以判断是否支持HTML5,也采用自己的实现,比如cookie
// 根据key获取值,可以指定默认值
function get(key,defValue){
return sessionStorage.getItem(key) || defValue;
//return sessionStorage[key] || defValue;
};
// 设置key/value
function set(key,value){
return sessionStorage.setItem(key,value);
//return sessionStorage[key] = value;
};
// 设置key/value
function clearStorage(){
return sessionStorage.clear();
};
// 退出
function signout(){
var name = get("name",'游客');
if(name) {
alert('再见, ' +name );
}
};
// 设置值
function setName(){
var nameInput = document.getElementById("name");
if(nameInput){
var name = nameInput.value;
if(!name){
alert("姓名不能为空");
} else {
set('name',name);
}
}
};
// 绑定事件
window.addEventListener("DOMContentLoaded", function() {
var btnsetname = document.getElementById("btnsetname");
var btnclear = document.getElementById("btnclear");
var btnsignout = document.getElementById("btnsignout");
btnsetname.addEventListener("click",function(){
//
setName();
});
btnclear.addEventListener("click",function(){
//
clearStorage();
});
btnsignout.addEventListener("click",function(){
//
signout();
});
}, false);
</script>
</head>

<body>
<div>
姓名: <input id="name" value="" /> <button id="btnsetname">确定</button>
</div>
<div>
<button id="btnclear">清除数据</button>
</div>
<div>
<button id="btnsignout">退出</button>
</div>
</body>
</html>