Chrome瀏覽器擴展開發系列之八:Chrome擴展的數據存儲

Google Chrome瀏覽器擴展可使用以下任何一種存儲機制:chrome

  • HTML5的localStorage API實現的本地存儲(此處略)
  • Google的chrome.storage.* API實現的瀏覽器存儲
  • Google的chrome.cookies.* API實現的cookie存儲

 

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對象包含若干「鍵值對」的映射,一個鍵值對就是一個存儲的數據項。

  • 獲取指定key的數據項

chrome.storage.sync.get(string or array of string or object keys, function(object items) {...})

其中的keys若是爲null則返回所有存儲的數據項,若是爲」」或[]將返回空對象{}。

回調函數中的items對象就是獲取的數據項,其中包含「鍵值對」的映射。

  • 刪除指定key的一個或多個數據項

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中的經常使用方法:

  • 得到一個Cookie對象,若是有多個符合過濾條件則返回擁有最長path的Cookie對象

chrome.cookies.get(object details, function(Cookie cookie) {...})

details對象的屬性以下:

屬性名

類型

必選/可選

註釋

url

string

必選

訪問Cookie對象的請求的URL

name

string

必選

Cookie對象的名字

storeId

string

可選

包含該Cookie對象的CookieStore的ID,默認爲當前執行的上下文的CookieStore

  • 獲取一個CookieStore中的全部的Cookie對象

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

  • 設置Cookie對象

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

  • 根據名字刪除Cookie對象

chrome.cookies.remove(object details, function(object details) {...})

details對象的屬性以下:

屬性名

類型

註釋

url

string

要刪除的Cookie對象所關聯的URL

name

string

要刪除的Cookie對象的名字

storeId

string

要刪除的Cookie對象的CookieStore的ID

  • 獲取全部的cookie倉庫對象

chrome.cookies.getAllCookieStores(function(array of CookieStore cookieStores) {...})

  • 監聽Cookie對象的變化

chrome.cookies.onChanged.addListener(function(object changeInfo) {...})

若是Cookie對象的值被修改或刪除,則發出該事件。changeInfo對象的屬性以下:

屬性名

類型

註釋

removed

boolean

Cookie對象是否被刪除

cookie

chrome.cookies.Cookie

發生變化的Cookie對象

cause

chrome.cookies.OnChangedCause

致使Cookie對象變化的緣由

相關文章
相關標籤/搜索