擁有
localStorage API
相同的能力,允許你使用腳本在地端用資料庫的形式存取資料,但針對擴充功功能的開發特別優化,以下是Chrome Storage API特有的功能:
使用者的數據可以通過 Chrome 瀏覽器的同步功能自動同步(使用
storage.sync
)。
擴充功能裡的內容腳本可以直接訪儲存的數據(不需要背景頁面)。
效能上作過優化,Storage API是異步的,並且能夠進行大量的讀寫操作,因此比阻塞和串行化的 localStorage API 更快。
用戶數據可以存儲為物件的型式(localStorage API 以字串的方式儲存數據)。
其他:下面這部份電子書直接略過,以下僅作為我自己的心得筆記。
即使是隱身分離行為(split incognito behavior),使用者的擴充功能設置也能被保留(
註一
)。
可以讓擴充功能讀取設定檔,這個設定檔描述了由管理員設定的企業政策(
註二
)。(使用storage.managed與schema檔 )
註一:隱身分離行為(split incognito behavior)指是是,擴充功能的設角檔中可以使用關鍵字
"incognito"
指定隱身模式下運行的行為是什麼,詳情看
這裡
。就字面上來看:隱身分離行為,指是是將其值指定為
"split"
,代表如果開發著設置了背景頁面,則在隱身模式下也會運行另一個背景頁面,但擁有自己的cookie(在記憶體中)。兩者之前並不互通。所以我推測文件中指的,隱身模式下設定的保留應該指的是即始隱身模式的所有視窗關閉,下一次開啟時擴充功能的一些設置還是能被保留。
註二:有關企業政策(Enterprise policies),這裡我稍微爬了一下文,似乎是指單一擴充功能的相關設定,可以放在一個單獨的檔案裡(schema 檔),並且籍由讓腳本讀取這個檔案,可以對該擴充功能作預先設定,用於你有大批電腦要作相關設定的時後用。根據範例來看:可能可以用於讓擴充功能鎖定這個設定檔裡的網站,而且後面會介紹到storage.managed是唯讀的,不過這只是我的推測,並不是十分確定。有興趣看細節的人可以參考
官網的教程
。
"name": "My extension",
"permissions": [
"storage"
選擇你的儲存方案
storage.local:資料只存取在這部本機的地端
storage.sync:使用
storage.sync
所有資料會同步到使用者已登入的Chrome瀏覽器,如果使用者關閉同步,或是沒有網路狀態,他的功能與storage.local無異。
storage.managed:唯讀的,在安裝檔中可以指定讀取的來源檔案,以下為例:
"name": "My enterprise extension",
"storage": {
"managed_schema": "schema.json"
注意*
:不該儲存使用者的機密信息,因為儲存區沒有加密。
注意*
:考慮到效能問題,不同的儲存方案有其儲存大小及操作頻率的限制,當超過這個限制,你會收到
runtime.lastError
。有關於每種類型的儲存的操作限制可以參考
官網的文件
。
設定及取得數據
StorageArea.set(object items, function callback)
參數說明:
items:只需輸入要更新的 key/value Object,其他已設置舊數據不會被其影響。
失敗時回調中會設置 runtime.lastError,協助你判斷成功還是失敗。
StorageArea.get(string or array of string or object keys, function callback)
參數說明:
想取得的key,可以傳入單個鍵、多個鍵的陣列或者指定默認值的Dictionary Object。想取得整個儲存物件請傳入null
。
失敗時回調中會設置 runtime.lastError,協助你判斷成功還是失敗。
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)
參數說明:
keys::表示想刪除的內容:可以是單個鍵或是鍵的陣列。
失敗時回調中會設置 runtime.lastError,協助你判斷成功還是失敗。
刪除全部的數據
StorageArea.clear(function callback)
失敗時回調中會設置 runtime.lastError,協助你判斷成功還是失敗。
取得目前項目使用的空間大小 (in bytes)
StorageArea.getBytesInUse(string or array of string keys, function callback)
參數說明:
keys::表示想刪除的內容:可以是單個鍵或是鍵的陣列,想獲得全部儲存物件的大小請傳入null
成功時回調中會傳入integer的方式傳入bytes數,失敗時會設置 runtime.lastError。
數據改變的事件
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"
https://crxdoc-zh.appspot.com/extensions/storage#type-StorageChange
https://developer.chrome.com/extensions/storage
http://www.apress.com/us/book/9781484217740