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对象变化的缘由 |