前言
HTML5提供了本地存儲的API:localstorage對象和sessionStorage對象,實現將數據存儲到用戶的電腦上。Web存儲易於使用、支持大容量(但非無限量)數據同時存儲,同時兼容當前全部主流瀏覽器,但不兼容早期瀏覽器。
存儲API
localStorage和sessionStorage一般被當作普通的JavaScript對象使用:經過設置屬性來存儲字符串值,查詢該屬性來讀取該值。除此以外,這兩個對象還提供了更加正式的API。
調用setItem()方法,將對應的名字和值傳遞出去,能夠實現數據存儲
調用getItem()方法,將名字傳遞出去,能夠獲取對應的值
調用removeItem()方法,名稱做爲參數,能夠刪除對應的數據
調用clear()方法,能夠刪除全部存儲的數據
使用length屬性以及key()方法,傳入0~length-1的數字,能夠枚舉全部存儲數據的名字瀏覽器
1 localStorage.setItem("name", "xuanfeng"); // 以"name"爲名字存儲一個字符串 2 localStorage.getItem("name"); // 獲取"name"的值 3 4 // 枚舉全部存儲的名字/值對 5 for(var i=0; i<localStorage.length; i++){ // length表示全部的名值對總數 6 var name = localStorage.key(i); // 獲取第i對的名字 7 var value = localStorage.getItem(name); // 獲取該對的值 8 } 9 10 localStorage.removeItem("name"); // 刪除"name"項 11 localAStorage.clear(); // 所有刪除
IE User Data
微軟在IE5及以後的IE瀏覽器中實現了它專屬的客戶端存儲機制——「userData」。
userData能夠實現必定量的字符串數據存儲,對於IE8之前的IE瀏覽器中,能夠將其用做是Web存儲的替代方案。session
iLocalStorage插件
因爲IE8如下瀏覽器的本地存儲API不同,因此就寫了個插件兼容各大瀏覽器存儲。提供的方法及用法以下:app
1 getItem: 獲取屬性 2 setItem: 設置屬性 3 removeItem: 刪除屬性 4 iLocalStorage.setItem('key', 'value'); 5 console.log(iLocalStorage.getItem('key')); 6 iLocalStorage.removeItem('key');
插件代碼
/*
* 名稱:本地存儲函數
* 功能:兼容各大瀏覽器存儲
* 做者:軒楓
* 日期:2015/06/11
* 版本:V2.0
*/函數
/**
* LocalStorage 本地存儲兼容函數
* getItem: 獲取屬性
* setItem: 設置屬性
* removeItem: 刪除屬性
*
*
* @example
*
iLocalStorage.setItem('key', 'value');
console.log(iLocalStorage.getItem('key'));
iLocalStorage.removeItem('key');
*
*/
spa
1 (function(window, document){ 2 3 // 1. IE7下的UserData對象 4 var UserData = { 5 userData: null, 6 name: location.href, 7 init: function(){ 8 // IE7下的初始化 9 if(!UserData.userData){ 10 try{ 11 UserData.userData = document.createElement("INPUT"); 12 UserData.userData.type = "hidden"; 13 UserData.userData.style.display = "none"; 14 UserData.userData.addBehavior("#default#userData"); 15 document.body.appendChild(UserData.userData); 16 var expires = new Date(); 17 expires.setDate(expires.getDate() + 365); 18 UserData.userData.expires = expires.toUTCString(); 19 } catch(e){ 20 return false; 21 } 22 } 23 return true; 24 }, 25 setItem: function(key, value){ 26 if(UserData.init()){ 27 UserData.userData.load(UserData.name); 28 UserData.userData.setAttribute(key, value); 29 UserData.userData.save(UserData.name); 30 } 31 }, 32 getItem: function(key){ 33 if(UserData.init()){ 34 UserData.userData.load(UserData.name); 35 return UserData.userData.getAttribute(key); 36 } 37 }, 38 removeItem: function(key){ 39 if(UserData.init()){ 40 UserData.userData.load(UserData.name); 41 UserData.userData.removeAttribute(key); 42 UserData.userData.save(UserData.name); 43 } 44 } 45 }; 46 47 // 2. 兼容只支持globalStorage的瀏覽器 48 // 使用: var storage = getLocalStorage(); 49 function getLocalStorage(){ 50 if(typeof localStorage == "object"){ 51 return localStorage; 52 } else if(typeof globalStorage == "object"){ 53 return globalStorage[location.href]; 54 } else if(typeof userData == "object"){ 55 return globalStorage[location.href]; 56 } else{ 57 throw new Error("不支持本地存儲"); 58 } 59 } 60 var storage = getLocalStorage(); 61 function iLocalStorage(){ 62 63 } 64 // 高級瀏覽器的LocalStorage對象 65 iLocalStorage.prototype = { 66 setItem: function(key, value){ 67 if(!window.localStorage){ 68 UserData.setItem(key, value); 69 }else{ 70 storage.setItem(key, value); 71 } 72 }, 73 getItem: function(key){ 74 if(!window.localStorage){ 75 return UserData.getItem(key); 76 }else{ 77 return storage.getItem(key); 78 } 79 }, 80 removeItem: function(key){ 81 if(!window.localStorage){ 82 UserData.removeItem(key); 83 }else{ 84 storage.removeItem(key); 85 } 86 } 87 } 88 if (typeof module == 'object') { 89 module.exports = new iLocalStorage(); 90 }else { 91 window.iLocalStorage = new iLocalStorage(); 92 } 93 94 })(window, document);