This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:36.
Address: https://crxdoc-zh.appspot.com/extensions/storage.html
Title: chrome.storage - Google Chrome 扩展程序开发文档(非官方中文版)  •  Size: 53575

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.syncstorage.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);
  }
});

chrome.storage 参考

类型

StorageChange

StorageChange 的属性

oldValue ( optional any )

如果有旧值,则为项目的旧值。

newValue ( optional any )

如果有新值,则为项目的新值。

StorageArea

StorageArea 的方法

get

StorageArea.get(string or array of string or object keys, function callback)

从存储中获得一个或多个值。

参数

keys ( optional string or array of string or object )

要获得的单个键、多个键的列表或者指定默认值的词典(参见对象的描述),空的列表或对象将会返回空的结果对象。要获得存储的所有内容,请传递 null

callback ( function )

包含存储项目或者表示失败(这种情况下会设置 runtime.lastError)的回调函数。

callback 参数应该指定一个如下形式的函数:

function(object items) {...};

items ( object )

包含按键-值映射的项目对象。

getBytesInUse

StorageArea.getBytesInUse(string or array of string keys, function callback)

获得一个或多个项目正在使用的空间大小(以字节为单位)。

参数

keys ( optional string or array of string )

要获得总计使用空间的单个键或多个键的列表,空的列表或对象将会返回 0。要获得所有存储占用的总空间,请传递 null

callback ( function )

回调函数,将传递存储占用的空间大小,或者指示失败(这种情况下将会设置 runtime.lastError

callback 参数应该指定一个如下形式的函数:

function(integer bytesInUse) {...};

bytesInUse ( integer )

正在使用的存储空间大小,以字节为单位。

set

StorageArea.set(object items, function callback)

设置多个项目。

参数

items ( object )

包含要更新的键/值对的对象,存储中的其他键/值对不会受到影响。

像数值之类的原生值会以预期的方式序列化,除了Array(按照预期的方式序列化)、DateRegExp(以字符串表示形式序列化)以外,typeof"object""function" 的值通常序列化为 {}

callback ( optional function )

在成功或失败(这种情况下会设置 runtime.lastError)时调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function() {...};

remove

StorageArea.remove(string or array of string keys, function callback)

从存储中移除一个或多个项目。

参数

keys ( string or array of string )

单个键或多个键的列表,表示要移除的内容。

callback ( optional function )

在成功或失败(这种情况下会设置 runtime.lastError)时调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function() {...};

clear

StorageArea.clear(function callback)

从存储中删除所有值。

参数

callback ( optional function )

在成功或失败(这种情况下会设置 runtime.lastError)时调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function() {...};

属性

sync

chrome.storage.sync
sync ( StorageArea )
位于 sync(同步)存储区下的项目将通过 Chrome 浏览器的同步功能同步。

sync 的属性

QUOTA_BYTES ( 102,400 )

可以在同步存储区储存的数据量大小(以字节为单位),计算方式为每一个值 JSON 字符串化的结果加上每一个键的长度。超出该限制的更新将失败,并设置 runtime.lastError

QUOTA_BYTES_PER_ITEM ( 4,096 )

同步存储区中每个项目的最大大小(以字节为单位),计算方式为值 JSON 字符串化的结果加上键的长度。包含的项目比该限制大的更新将失败,并设置 runtime.lastError

MAX_ITEMS ( 512 )

可以储存在同步存储区中的最大项目数目。超出该限制的更新将失败,并设置 runtime.lastError

MAX_WRITE_OPERATIONS_PER_HOUR ( 1,000 )

一小时内可以进行的 se(设置)、remove(移除)或clear(清除)操作的最大次数。超出该限制的更新将失败,并设置 runtime.lastError

MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE ( 10 )

在连续的 10 分钟内每分钟可以进行的 se(设置)、remove(移除)或clear(清除)操作的最大次数。超出该限制的更新将失败,并设置 runtime.lastError

local

chrome.storage.local
local ( StorageArea )
位于 local(本机)存储区下的项目仅对每一台计算机有效。

local 的属性

QUOTA_BYTES ( 5,242,880 )

可以在本地存储区储存的数据量大小(以字节为单位),计算方式为每一个值 JSON 字符串化的结果加上每一个键的长度。如果扩展程序拥有 unlimitedStorage 权限则会忽略这一值。

managed

chrome.storage.managed
managed ( StorageArea )
managed 存储区中的项目由域管理员设置,对扩展程序来说只读,尝试修改这一命名空间会导致错误。

事件

onChanged

当一个或多个项目更改时产生。

addListener

chrome.storage.onChanged.addListener(function callback)

参数

callback ( function )

callback 参数应该指定一个如下形式的函数:

function(object changes, string areaName) {...};

changes ( object )

一个对象,将更改的每一个键映射到该项目对应的 StorageChange 对象。

areaName ( string )

这一更改对应的存储区("sync"(同步)、"local"(本机)或 "managed"))。