chrome.storage

描述 使用chrome.storage API来存储、检索和跟踪更改用户数据
可用性 从 Chrome 20 开始
权限 “storage”
内容脚本 完全支持
更多 Chrome Apps Office Hours: Chrome Storage APIs
Chrome Apps Office Hours: Storage API Deep Dive

概述

这个 API 进行了优化,以满足特定的存储需求的扩展。它提供了与localStorage API相同的功能,它们之间的差异有以下关键几点:

  • 用户的数据可以被自动的同步,在Chrome sync机制下(使用using storage.sync)。
  • 应用程序的内容脚本可以直接访问用户数据而不需要背景页(background.js)。
  • 尽管用户使用了隐身模式,应用程序的扩展设置仍然可以使用。
  • 它用于大部分的异步读写操作,因此,他会比阻塞和序列化的localStorage API要快。
  • 用户的数据可以保存在一个对象中(localStorage API保存的数据是 string)。
  • 企业策略由管理员配置的扩展可以读取(使用存储。管理模式)。

Manifest

你需要在manifest文件中声明storage权限,例如:

{
   "name": "My extension",
   ...
   "permissions": [
     "storage"
   ],
   ...
}

用法

为存储你 App 的数据你可以使用storage.sync或者storage.local,当你使用storage.sync的时候用户的数据将会被自动同步到 Chrome 浏览器登录的用户下,提供用户同步数据。

当 Chrome 处于离线的时候,Chrome 将会把数据存储在本地。当在线的时候,它就会同步数据。即使用户关闭了同步,storage.sync仍然会工作。在这种情况下,它和 storage.local 行为完全相同。

机密的数据不应该被存储,因为存储区域没有被加密!

storage.managed是只可读的(>=Chrome 33)。

示例

下面这个例子是保存一个 textarea 里面的值:

function saveChanges() {
  // Get a value saved in a form.
  var theValue = textarea.value;
  // Check that there's some code there.
  if (!theValue) {
    message('Error: No value specified');
    return;
  }
  // Save it using the Chrome extension storage API.
  chrome.storage.sync.set({ value: theValue }, function () {
    // Notify that we saved.
    message('Settings saved');
  });
}

如果你有对跟踪更改数据对象有兴趣,你可以增加一个onChanged事件,每当storage有任何改变的时候,这个事件将会被触发。下面是一个存储改变的实例:

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,
      namespace,
      storageChange.oldValue,
      storageChange.newValue
    );
  }
});

总结

| 类型 | 属性 | 事件 |
| ————- | ——- | ——— | — |
| StorageChange | sync | onChanged |
| StorageArea | local | |
| | managed | | |

//chrome.storage.local.set({name: “jiavan”, age: 20},function(){console.log(“storage success”)});

StorageArea(sync/local)

常用方法:

get

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

从存储区域获取一条甚至更多信息。

参数
字符串/字符串数组/对象 键名(可选参数) 一个键,键的列表,或一个字典指定默认值(见对象的描述)。一个空的列表或对象将返回一个空的对象结果。通过传 null 获得全部值。
函数 回调函数 如:chrome.storage.local.get(null, function(info){console.log(info);});

set

StorageArea.set(object items, function callback);
参数
object item 项 对象赋予每个键/值对来更新存储。其他存储键/值对将不会受到影响。
函数 可选的回调函数 如:chrome.storage.local.set({name: "jiavan", age: 20},function(){console.log("storage success")});

remove

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

移除一个或者多个 item。

参数
字符串/字符串数组 键值 一键或者键列表用于移除
函数 可选的回调函数 回调成功/如果错误将会保存 runtime.lastError

clear

StorageArea.clear(function callback);

删除storage里面所有的数据。唯一的参数是可选的回调函数,删除失败同上。

整理自 Chrome APIs storage - https://developer.chrome.com/apps/storage