先來介紹一下localStorage和cookie的區別:
(1)localStorage的存儲容量比cookie更大;
(2)cookie作為http規范的一部分,它的主要作用是與服務器進行交互,使http保持連接狀態。也就是你每次請求一個新的頁面的時候,cookie都會被發送過去,這樣無形中就浪費了寬帶。
(3)cookie保存是能指定可以訪問該cookie的范圍;localStorage的訪問范圍就是當前整個網站,不存在訪問范圍這個概念。且,兩者都不支持跨域調用。
html5中的Web Storage包括了兩種存儲方式: sessionStorage和localStorage;
sessionStorage用於本地存儲一個會話的數據,當會話結束時,存儲的數據也會自動銷毀(即當頁面關閉的同時也銷毀數據),因此,sessionStorage不是一個持久化的本地存儲,僅僅是會話級別的存儲。
localStorage用於持久化的本地存儲,除非手動刪除數據,否則會一直保存。
下面是一個h5中localStorage的一個小應用:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p>you have viewed this page <span id="count"></span> thimes(s).</p>
<p><input type="button" value="changeStorage" onClick="changeS()"></input></p>
<script type="text/javascript">
var storage = window.localStorage;
if(!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) +1;
document.getElementById("count").innerHTML = storage.pageLoadCount;
showStorage();
// storage事件,在存儲事件的處理函數中是不能取消這個存儲動作的,存儲事件只是瀏覽器在localStorage數據變化發
//生后給你的一個通知
if(window.addEventListener) { // 為了兼容瀏覽器或者自己寫兼容處理函數,或者干脆不用storage事件
window.addEventListener("storage", handle_storage, false); // 而是調用一個handle_storage()函數來
}else if(window.attachEvent) { // 遞歸顯示object
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>
</html>
接合網上的一篇文章對這個有我自己的一些很粗淺的看法;
localStorage本身帶有的一些本地方法:
添加鍵值對: localStorage.setItem(key,value);
獲取鍵值對: localStorage.getItem(key);
刪除鍵值對: localStorage.removeItem(key);
清除所有鍵值對: localStorage.clear();
獲取localStorage的屬性名稱(鍵名稱): localStorage.key(index);
獲取localStorage中保存的鍵值對的數量: localStorage.length;
獲取localStorage完整鍵值對的列子:
localStorage事件
localStorage的storage事件,在存儲事件的處理函數中是不能取消這個存儲動作的。
存儲事件只是瀏覽器在localStorage數據變化發生之后給你的一個通知。注意這里的的條件是數據真的發生了變化。也就是說,如果當前的存儲區域是 空的,你再去調用clear()是不會觸發事件的。或者你通過setItem()來設置一個與現有值相同的值,事件也是不會觸發的。當存儲區域發生改變時 就會被觸發。
PS:在firefox和chrome中存儲和讀取都是正常的, 但是對storage事件的觸發似乎有點問題,chrome修改localStorage能觸發本頁面的storage事件,Firefox 自身頁面修改storage后沒有觸發window的storage事件, 但是同時訪問A.html和B.html, 在A頁面中進行 setItem能觸發B頁面中window的storage事件, 同樣的在B頁面中進行setItem能觸發A頁面中window的storage事件. 在IE9中, 頁面自身的設值能觸發當前頁面的storage事件,同樣當前頁面的設值能觸發同一”起源”下其他頁面window的storage事件,這看起來似乎更 讓人想的通些.實例推薦PrimeTechBlog的初試WebStorage之localstorage
所以建議,為兼容瀏覽器或者自己寫兼容處理函數,或者干脆不用storage事件。
也正如下面的這一個代碼段:

這里引入showObject()函數
至於這個遞歸顯示object有什么作用還是沒有弄懂,待以后看到相關方面的知識再來補充——————!
