localStorage與cookie相似,它是存儲在客戶端瀏覽器中的數據,它與cookie不一樣的一點是它沒有時間限制。localStorage屬於html5中的新特性,在瀏覽器支持localStorage統計中,Chrome4+、Firefox3.5+、IE8+、IE7兼容模式、Safari4+、Opera10.5+都是支持localStorage的。如下代碼能夠用於檢測你的瀏覽器是否支持localStorage: html
if(window.localStorage){
alert('你的瀏覽器支持localStorage!');
}else{
alert('瀏覽器不支持localStorage!');
}
|
localStorage是以key/value方式來進行存儲的,而且value只能是字符串形式,若是你要使用其餘數據類型,須要進行相應的轉換。設置和獲取localStorage方法是使用localStorage.key,或localStorage[key]的形式,如: html5
localStorage.myName='walkingp';
localStorage['mySite']='
http://www.cnblogs.com/walkingp';
alert('name:' + localStorage.myName +'\rsite:' + localStorage['mySite']);
|
修改其值就是從新設置相應的localStorage項取值。移除其值能夠將其值設爲null。 chrome
localStorage['mySite']=null;
|
也可使用localStorage自帶方法getItem()、setItem()和removeItem()來進行相應的獲取、設置和移除localStorage項。 json
localStorage.setItem('age','24');
var age=localStorage.getItem('age');
alert('age:' + age);//age:24
localStorage.removeItem('age');
age=localStorage.getItem('age');
alert('age? ' + age);//age? null
|
可使用clear()方法來清空全部localStorage。 瀏覽器
對於不一樣域的localStorage,如本地和a.com,二者不影響對方。 cookie
關於localStorage本地存儲大小,有人測試結果是其餘瀏覽器爲5M,Firefox沒有做限制。而cookie通常只有幾K,可見localStorage很是適合作稍大一些的數據存儲,固然對於Chrome等擴展開發是很是合適的。 網絡
Chrome和Safari均有本身的本地localStorage查看和管理工具,Firefox擁有第三方插件能夠管理localStorage,Chrome中位於開發人員工具中的Resources左側的Databases(可能稍早一點的版本位於單獨出來的工具欄)。咱們上面的localStorage在Chrome查看以下,利用這個工具能夠修改或者刪除相應項。 數據結構
Safari中須要先在「偏好設置」、「高級」中將「在菜單中顯示開發選項」勾選。 工具
以上是咱們須要瞭解的關於localStorage的知識,接下來就是把這個知識應用到咱們Chrome擴展中。咱們的數據存儲分爲兩個部分,一是每項task須要存儲的內容,它是以JSON的形式來存儲的,形式以下: 測試
task1:{"id":1,"task_item":"新任務","add_time":"2011-04-04T03:20:34.879Z","is_finished":false}
|
task1表示key項,後臺的JSON表示value項。意義很簡單明瞭,其中is_finished表示當前任務是否已完成。當更新任務狀態時就是將此項取值進行相應的更改。
還要放一個指向當前任務的數據,讓它充當指針的做用,這樣在添加新項時就不須要查詢已有task項的id了。
'Tasks:index':1
|
下面是咱們代碼的具體實現,首先開始初始化數據:
var Tasks = {
//指針
index:window.localStorage.getItem('Tasks:index'),
//初始化
init:function(){
if(!Tasks.index){
window.localStorage.setItem('Tasks:index',Tasks.index=0);
}
//初始化數據
if(window.localStorage.length-1){
var task_list=[];
var key;
for(var i=0,len=window.localStorage.length;i<len;i++){
key=window.localStorage.key(i);
if(/task:\d+/.test(key)){
task_list.push(JSON.parse(window.localStorage.getItem(key)));
}
}
for(var i=0,len=task_list.length;i<len;i++){
Tasks.AppendHtml(task_list[i]);
}
}
},
//***
}
|
而後是分別是增長項Add()、修改項Edit()和刪除項Del()的方法:
//增長
Add:function(task){
//更新指針
window.localStorage.setItem('Tasks:index', ++Tasks.index);
task.id=Tasks.index;
window.localStorage.setItem("task:"+ Tasks.index, JSON.stringify(task));
},
//修改
Edit:function(task){
window.localStorage.setItem("task:"+ task.id, JSON.stringify(task));
},
//刪除
Del:function(task){
window.localStorage.removeItem("task:"+ task.id);
},
//***
|
其中的JSON.stringify是JSON將Javascript數據結構轉換爲JSON文本的方法,它與eval()爲互操做。詳情可見http://json.org/js.html 。
這樣咱們就將一個簡單的Chrome擴展完成了,演示效果圖以下:
固然它如今的功能還不夠強大,咱們還能夠對它進行繼續擴展,好比任務排序、任務分組、網絡存儲、定時提醒等。
系列文章至此暫時結束,所有代碼包括生成後.crx文件已經打包,下載請點擊此處。可能已有代碼有一些處理不完善的地方,歡迎你們一一指出,共同進步!