Google Chrome瀏覽器擴展可使用以下任何一種存儲機制:chrome
1) chrome.storage API實現的瀏覽器存儲json
Chrome瀏覽器擴展經過chrome.storage.* API,能夠存取數據或監聽數據的變化。瀏覽器
在manifest.json文件中註冊storage以下:安全
{
"permissions": [
"storage"
],
}
chrome.storage.* API提供了chrome.storage.sync, chrome.storage.local和chrome.storage.managed三種存儲空間類型。chrome.storage.local方式只可以將數據存儲在當前登陸的設備本地。cookie
chrome.storage.sync方式實現了自動數據同步,相同的用戶不管使用什麼物理設備,只要以相同的帳戶登陸便可訪問存儲的數據。設備離線時數據存儲在本地,一旦設備上線則同步數據。若是用戶禁止了數據同步,則採用chrome.storage.local方式。session
chrome.storage.managed方式是隻讀存儲,只有域管理員可以在其中存儲數據,Chrome瀏覽器擴展只能讀取其中的數據。數據結構
chrome.storage機制採用一系列的存儲格子(tubes)存儲數據,存儲空間有限。存儲數據時只能一個一進行寫入操做,併發性能不高。併發
下面以chrome.storage.sync爲例介紹具體方法的使用:dom
chrome.storage.sync.set(object items, function() {...})函數
其中的items對象包含若干「鍵值對」的映射,一個鍵值對就是一個存儲的數據項。
chrome.storage.sync.get(string or array of string or object keys, function(object items) {...})
其中的keys若是爲null則返回所有存儲的數據項,若是爲」」或[]將返回空對象{}。
回調函數中的items對象就是獲取的數據項,其中包含「鍵值對」的映射。
chrome.storage.sync.remove(string or array of string keys, function() {...})
chrome.storage.sync.clear(function(){…})
chrome.storage.sync.getBytesInUse(string or array of string keys, function(integer bytesInUse) {...})
其中的keys屬性是數據項的key,若是爲null表示取所有數據項的使用空間,」」或[]將返回0
此外,對於某些敏感數據的變化,能夠經過onChanged事件進行監聽。存儲格子中的任何變化都將觸發該事件,示例以下:
chrome.storage.onChanged.addListener(function(changes, namespace) {
for (key in changes) {
var storageChange = changes[key];
console.log('Storage key "%s" in namespace "%s" changed. ' +
'Old value was "%s", new value is "%s".',
key, //數據的索引key
namespace, //數據的存儲空間類型,枚舉值"sync"
, "local"
, "managed"
storageChange.oldValue,//變化前的值
storageChange.newValue); //變化後的值
}
});
回調函數中的changes對象包含了全部發生變化了的數據的key(string類型)和變化先後的值(StoreageChange類型),數據結構以下:
changes:{
key1: obj
key2: obj2
…
keyn: objn
}
2) chrome.cookies.* API實現的cookie存儲
Chrome瀏覽器擴展經過chrome.cookies.* API,能夠獲取或修改cookie,還能夠監控cookie的變化。
在manifest.json文件中聲明cookie權限以及要訪問的域以下:
{
"permissions": [
"cookies",
"*://*.google.com"
],
}
chrome.cookies.Cookie對象的屬性以下:
屬性名 |
類型 |
必選/可選 |
註釋 |
name |
string |
必選 |
Cookie對象的名字 |
value |
string |
必選 |
Cookie對象的值 |
domain |
string |
必選 |
Cookie對象適用的域 |
path |
string |
必選 |
Cookie對象適用的URL路徑 |
hostOnly |
boolean |
必選 |
Cookie對象是否只響應指定主機的請求,訪問Cookie對象的請求的主機必須在指定範圍內 |
secure |
boolean |
必選 |
Cookie對象是否被標記爲Secure,這樣就只能經過安全通道(如HTTPS)訪問Cookie對象 |
httpOnly |
boolean |
必選 |
Cookie對象是否被標記爲HttpOnly,這樣客戶端腳本就沒法訪問Cookie對象 |
session |
boolean |
必選 |
是否爲Session級別的Cookie對象 |
expirationDate |
double |
可選 |
Cookie對象的過時時間,單位s Session級別的Cookie對象沒有該屬性,由於會話結束即過時 |
storeId |
string |
必選 |
包含該Cookie對象的CookieStore的ID |
其中,chrome.cookies.CookieStore對象表示瀏覽器中的cookie倉庫,常見的有正常模式的CookieStore和隱身模式的CookieStore。
chrome.cookies API中的經常使用方法:
chrome.cookies.get(object details, function(Cookie cookie) {...})
details對象的屬性以下:
屬性名 |
類型 |
必選/可選 |
註釋 |
url |
string |
必選 |
訪問Cookie對象的請求的URL |
name |
string |
必選 |
Cookie對象的名字 |
storeId |
string |
可選 |
包含該Cookie對象的CookieStore的ID,默認爲當前執行的上下文的CookieStore |
chrome.cookies.getAll(object details, function(array of Cookie cookies) {...})
details對象的屬性以下:
屬性名 |
類型 |
必選/可選 |
註釋 |
url |
string |
可選 |
訪問Cookie對象的請求的URI,影響domain和path |
name |
string |
可選 |
Cookie對象的名字 |
value |
string |
可選 |
Cookie對象的值 |
domain |
string |
可選 |
Cookie對象適用的域 |
path |
string |
可選 |
Cookie對象適用的URL路徑 |
secure |
boolean |
可選 |
Cookie對象是否被標記爲Secure,這樣就只能經過安全通道(如HTTPS)訪問Cookie對象 |
session |
boolean |
可選 |
是否爲Session級別的Cookie對象 |
storeId |
string |
可選 |
包含該Cookie對象的CookieStore的ID |
chrome.cookies.set(object details, function(Cookie cookie) {...})
details對象的屬性以下:
屬性名 |
類型 |
必選/可選 |
註釋 |
url |
string |
必選 |
訪問Cookie對象的請求的URI,影響domain和path |
name |
string |
可選 |
Cookie對象的名字 |
value |
string |
可選 |
Cookie對象的值 |
domain |
string |
可選 |
Cookie對象適用的域 |
path |
string |
可選 |
Cookie對象適用的URL路徑 |
secure |
boolean |
可選 |
Cookie對象是否被標記爲Secure,這樣就只能經過安全通道(如HTTPS)訪問Cookie對象 |
httpOnly |
boolean |
可選 |
Cookie對象是否被標記爲HttpOnly,這樣客戶端腳本就沒法訪問Cookie對象 |
expirationDate |
double |
可選 |
Cookie對象的過時時間,單位s Session級別的Cookie對象沒有該屬性,由於會話結束即過時 |
storeId |
string |
可選 |
包含該Cookie對象的CookieStore的ID |
chrome.cookies.remove(object details, function(object details) {...})
details對象的屬性以下:
屬性名 |
類型 |
註釋 |
url |
string |
要刪除的Cookie對象所關聯的URL |
name |
string |
要刪除的Cookie對象的名字 |
storeId |
string |
要刪除的Cookie對象的CookieStore的ID |
chrome.cookies.getAllCookieStores(function(array of CookieStore cookieStores) {...})
chrome.cookies.onChanged.addListener(function(object changeInfo) {...})
若是Cookie對象的值被修改或刪除,則發出該事件。changeInfo對象的屬性以下:
屬性名 |
類型 |
註釋 |
removed |
boolean |
Cookie對象是否被刪除 |
cookie |
chrome.cookies.Cookie |
發生變化的Cookie對象 |
cause |
chrome.cookies.OnChangedCause |
致使Cookie對象變化的緣由 |