storage.onChanged

当针对某个存储区域执行了 storageArea.setstorageArea.removestorageArea.clear 时触发,并返回仅更改键的详细信息。仅当底层数据发生更改时,才会调用回调函数。

注意:在 Firefox 中,返回的信息包含针对 storageArea.set 运行的存储区域内的所有键,无论它们是否更改。此外,在底层数据未更改时也可能会调用回调函数。通过检查每个返回键的 storage.StorageChange 对象来找到更改项的详细信息。请参阅 Firefox bug 1833153

语法

js
browser.storage.onChanged.addListener(listener)
browser.storage.onChanged.removeListener(listener)
browser.storage.onChanged.hasListener(listener)

事件有三个函数

addListener(listener)

向此事件添加监听器。

removeListener(listener)

停止监听此事件。listener 参数是要移除的监听器。

hasListener(listener)

检查 listener 是否已为此事件注册。如果正在监听,则返回 true,否则返回 false

addListener 语法

参数

监听器

此事件发生时调用的函数。该函数会传递以下参数:

changes

object。描述更改的对象。每个属性的名称都是每个键的名称。每个键的值是一个 storage.StorageChange 对象,描述该项的更改。

areaName

string。更改发生的存储区域的名称("sync""local""managed")。

示例

js
/*
Log the storage area that changed,
then for each item changed,
log its old value and its new value.
*/
function logStorageChange(changes, area) {
  console.log(`Change in storage area: ${area}`);

  const changedItems = Object.keys(changes);

  for (const item of changedItems) {
    console.log(`${item} has changed:`);
    console.log("Old value: ", changes[item].oldValue);
    console.log("New value: ", changes[item].newValue);
  }
}

browser.storage.onChanged.addListener(logStorageChange);

扩展程序示例

浏览器兼容性

注意:此 API 基于 Chromium 的 chrome.storage API。本文档源自 Chromium 代码中的 storage.json