storage.sync

表示 sync 存储区。sync 存储区中的项目由浏览器同步。然后,用户登录的所有浏览器实例 (例如,在台式机版 Firefox 上使用 Mozilla 帐户或在 Chrome 上使用 Google 帐户) 在不同设备上都可以访问这些数据。

对于台式机版 Firefox,用户必须在 "about:preferences" 中的“同步”部分中选择“附加组件”。Android 版 Firefox 不会与用户帐户同步数据。请参阅 Firefox 错误 1625257.

Firefox 中的 storage.sync 实现依赖于附加组件 ID。如果您使用 storage.sync,则必须使用 browser_specific_settings manifest.json 键为您的扩展设置 ID。

此 API 的主要用例是存储有关您的扩展的偏好设置,并允许用户将这些偏好设置同步到不同的配置文件。

同步数据的存储配额

浏览器会强制执行限制,以限制每个扩展可以在同步区域中存储的数据量

名称 描述 以字节为单位的值
最大总大小 每个扩展允许在同步存储区中存储的总数据量的最大值,以每个值的 JSON 字符串化的长度加上每个键的长度来衡量。 102400
最大项目大小 每个扩展允许在同步存储区中存储的任何一项的最大大小,以项目的 JSON 字符串化的长度加上其键的长度来衡量。 8192
最大项目数 每个扩展可以在同步存储区中存储的项目数的最大值。

512

如果扩展尝试存储超过这些限制的项目,则对 storage.sync.set() 的调用将被拒绝并返回错误。扩展可以使用 storage.sync.getBytesInUse() 来找出已使用了多少配额。

同步过程

在 Firefox 中,扩展数据每 10 分钟同步一次,或者在用户选择“立即同步”(在“设置”>“同步”或 Mozilla 帐户图标中) 时同步。当浏览器执行同步时,对于存储的每个键,它会

  • 将服务器上的值与上次同步时的值进行比较;如果它们不同,则将来自服务器的值写入浏览器同步存储区中的键。
  • 将浏览器同步存储区中的值与服务器上的值进行比较;如果它们不同,则将浏览器的键值写入服务器。

这意味着对于每个键,服务器上的更改优先于浏览器同步存储区中的更改。

这种机制通常适用于用户偏好设置或用户更改的其他全局设置等数据。

但是,键的值可以在一个浏览器中更新并同步,然后在第二个浏览器同步之前在第二个浏览器中更新,导致本地更新在同步过程中被覆盖。因此,这种机制不适合处理跨设备汇总的数据,例如页面浏览次数或使用某个选项的次数。要处理此类情况,请使用 storage.sync.onChanged 侦听来自服务器的同步更新 (例如,另一个浏览器实例上的页面浏览次数)。然后调整本地值以考虑远程值 (例如,根据远程计数和新的本地计数更新总浏览次数)。

方法

sync 对象实现了在 storage.StorageArea 类型上定义的方法

storage.sync.get()

从存储区中检索一项或多项。

storage.sync.getBytesInUse()

获取在存储区中使用的一项或多项所用的存储空间 (以字节为单位)。

storage.sync.set()

在存储区中存储一项或多项。如果该项目存在,则更新其值。

storage.sync.remove()

从存储区中删除一项或多项。

storage.sync.clear()

从存储区中删除所有项目。

事件

sync 对象实现了在 storage.StorageArea 类型上定义的事件

storage.sync.onChanged

当存储区中的一项或多项发生更改时触发。

示例扩展

浏览器兼容性

BCD 表仅在浏览器中加载

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