chrome.storage
描述: |
使用 chrome.storage API 存储、获取用户数据,追踪用户数据的更改。
|
可用版本: |
从 Chrome 20 开始支持。
|
权限: |
"storage"
|
内容脚本: |
完全支持。了解更多
|
了解更多: |
Chrome 应用办公时间:Chrome 存储 API
Chrome 应用办公时间:存储 API 深入探索 |
概述
这一 API 为扩展程序的存储需要而特别优化,它提供了与 localStorage API 相同的能力,但是具有如下几个重要的区别:
-
用户数据可以通过 Chrome
浏览器的同步功能自动同步(使用
storage.sync
)。 - 您的应用的内容脚本可以直接访问用户数据,而不需要后台页面。
- 即使使用分离式隐身行为,用户的扩展程序设置也会保留。
-
它是异步的,并且能够进行大量的读写操作,因此比阻塞和串行化的
localStorage
API 更快。 -
用户数据可以存储为对象(
localStorage
API 以字符串方式存储数据)。 -
可以读取管理员为扩展程序配置的企业策略(使用
storage.managed
和架构)。
清单文件
您必须在扩展程序的清单文件中声明 "storage" 权限才能使用存储 API。例如:
{ "name": "我的扩展程序", ... "permissions": [ "storage" ], ... }
用法
如果要为您的应用储存用户数据,您可以使用
storage.sync
或 storage.local
。使用
storage.sync
时,储存的数据将会自动在用户启用同步功能并已经登录的所有
Chrome 浏览器间同步。
当 Chrome 浏览器处于离线状态时,Chrome
浏览器将数据储存在本地。下一次浏览器在线时,Chrome
浏览器将会同步数据。即使用户关闭了同步,storage.sync
仍然有效,只是此时它与 storage.local
的行为相同。
不应该储存机密的用户信息!存储区没有加密。
storage.managed
存储区是只读的。
存储空间与调用频率限制
chrome.storage
并不像一辆大卡车那样,而是像一系列的管道,如果您不理解这一点的话,这样的管道很容易被填满。如果当您存入消息时它们填满了,它将会变成细线,任何人向其中存入大量数据都有可能使操作产生延迟。
有关目前对存储 API 的限制以及超出限制的结果,请参见 sync 和 local 的配额信息。
例子
以下例子检查用户在表单中保存的 CSS 代码,如果找到的话则存储下来。
function saveChanges() { // 获取表单中保存的值。 var theValue = textarea.value; // 确保包含代码。 if (!theValue) { message('错误:没有指定值'); return; } // 使用 Chrome 扩展程序的存储 API 保存它。 chrome.storage.sync.set({'value': theValue}, function() { // 通知保存完成。 message('设置已保存'); }); }
如果您希望追踪数据对象的更改,您可以向
onChanged
事件添加监听器,每当存储有任何更改时将会产生该事件。如下是监听对已保存内容的更改的示例代码:
chrome.storage.onChanged.addListener(function(changes, namespace) { for (key in changes) { var storageChange = changes[key]; console.log('存储键“%s”(位于“%s”命名空间中)已更改。' + '原来的值为“%s”,新的值为“%s”。', key, namespace, storageChange.oldValue, storageChange.newValue); } });
摘要
类型 | |
---|---|
StorageChange | |
StorageArea | |
属性 | |
sync | |
local | |
managed | |
事件 | |
onChanged |
类型
StorageChange
属性 | ||
---|---|---|
any | (可选) oldValue |
如果有旧值,则为项目的旧值。 |
any | (可选) newValue |
如果有新值,则为项目的新值。 |
StorageArea
方法 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
get
StorageArea.get(string or array of string or object keys, function callback)
从存储中获得一个或多个值。
| ||||||||||||
getBytesInUse
StorageArea.getBytesInUse(string or array of string keys, function callback)
获得一个或多个项目正在使用的空间大小(以字节为单位)。
| ||||||||||||
set
StorageArea.set(object items, function callback)
设置多个项目。
| ||||||||||||
remove
StorageArea.remove(string or array of string keys, function callback)
从存储中移除一个或多个项目。
| ||||||||||||
clear
StorageArea.clear(function callback)
从存储中删除所有值。
|
属性
StorageArea | chrome.storage.sync |
位于 sync (同步)存储区下的项目将通过 Chrome 浏览器的同步功能同步。
|
||||||||||||||||||
StorageArea | chrome.storage.local |
位于 local (本机)存储区下的项目仅对每一台计算机有效。
|
||||||||||||||||||
StorageArea | chrome.storage.managed |
从 Chrome 33 开始支持。 managed 存储区中的项目由域管理员设置,对扩展程序来说只读,尝试修改这一命名空间会导致错误。
|
事件
onChanged
当一个或多个项目更改时产生。
addListener
chrome.storage.onChanged.addListener(function callback)
参数 | ||||||||
---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(object changes, string areaName) {...};
|