擁有localStorage API 相同的能力,允許你使用腳本在地端用資料庫的形式存取資料,但針對擴充功功能的開發特別優化,以下是Chrome Storage API特有的功能:
使用者的數據可以通過 Chrome 瀏覽器的同步功能自動同步(使用 storage.sync
)。
擴充功能裡的內容腳本可以直接訪儲存的數據(不需要背景頁面)。
效能上作過優化,Storage API是異步的,並且能夠進行大量的讀寫操作,因此比阻塞和串行化的 localStorage API 更快。
用戶數據可以存儲為物件的型式(localStorage API 以字串的方式儲存數據)。
其他:下面這部份電子書直接略過,以下僅作為我自己的心得筆記。
註一
)。註二
)。(使用storage.managed與schema檔 )註一:隱身分離行為(split incognito behavior)指是是,擴充功能的設角檔中可以使用關鍵字
"incognito"
指定隱身模式下運行的行為是什麼,詳情看這裡。就字面上來看:隱身分離行為,指是是將其值指定為"split"
,代表如果開發著設置了背景頁面,則在隱身模式下也會運行另一個背景頁面,但擁有自己的cookie(在記憶體中)。兩者之前並不互通。所以我推測文件中指的,隱身模式下設定的保留應該指的是即始隱身模式的所有視窗關閉,下一次開啟時擴充功能的一些設置還是能被保留。
註二:有關企業政策(Enterprise policies),這裡我稍微爬了一下文,似乎是指單一擴充功能的相關設定,可以放在一個單獨的檔案裡(schema 檔),並且籍由讓腳本讀取這個檔案,可以對該擴充功能作預先設定,用於你有大批電腦要作相關設定的時後用。根據範例來看:可能可以用於讓擴充功能鎖定這個設定檔裡的網站,而且後面會介紹到storage.managed是唯讀的,不過這只是我的推測,並不是十分確定。有興趣看細節的人可以參考官網的教程。
{
"name": "My extension",
...
"permissions": [
"storage"
],
...
}
storage.sync
所有資料會同步到使用者已登入的Chrome瀏覽器,如果使用者關閉同步,或是沒有網路狀態,他的功能與storage.local無異。{
"name": "My enterprise extension",
"storage": {
"managed_schema": "schema.json"
},
...
}
注意*
:不該儲存使用者的機密信息,因為儲存區沒有加密。
注意*
:考慮到效能問題,不同的儲存方案有其儲存大小及操作頻率的限制,當超過這個限制,你會收到runtime.lastError。有關於每種類型的儲存的操作限制可以參考官網的文件。
StorageArea.set(object items, function callback)
參數說明:
StorageArea.get(string or array of string or object keys, function callback)
參數說明:
null
。chrome.storage.sync.set({"color":"red"},function() {
console.log("set");
//string or array of string or object keys
chrome.storage.sync.get("color",function(items) {
console.log("get");
console.log(items);
});
});
StorageArea.remove(string or array of string keys, function callback)
參數說明:
StorageArea.clear(function callback)
StorageArea.getBytesInUse(string or array of string keys, function callback)
參數說明:
null
chrome.storage.onChanged.addListener(function callback)
回調形式如下:
function(object changes, string areaName) {...};
回調傳入參數說明:
changes物件結果如以下範例所示:
chrome.storage.onChanged.addListener(function(changes,areaName) {
console.log(changes);
});
chrome.storage.sync.set({"color":"balck","color2":"yellow"},function() {});
chrome.storage.sync.set({"color":"","color2":""},function() {});
結果如下:注意change事件只有在已有的欄位變更時才會觸發,新增欄位不會觸發。
{
color: {
newValue: ""
oldValue: "balck"
},
color2: {
newValue: "",
oldValue: "yellow"
}
}
areaName代表對應的儲存區是:"sync"
、"local"
或 "managed"