storage.sync

表示 sync 存储区域。sync 存储中的项目会由浏览器同步。然后,这些数据在用户登录的浏览器所有实例上均可用(例如,当在桌面版 Firefox 上使用 Mozilla 账户,或在 Chrome 上使用 Google 账户时),跨越不同设备。

对于桌面版 Firefox,用户必须在 "about:preferences" 的“同步”部分选中“扩展及主题”。Android 版 Firefox 不会将数据与用户账户同步。请参阅 Firefox bug 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.getKeys()

检索存储区域中所有项目的键。

storage.sync.set()

将一个或多个项目存储到存储区域。如果项目已存在,则更新其值。

storage.sync.remove()

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

storage.sync.clear()

移除存储区域中的所有项目。

事件

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

storage.sync.onChanged

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

扩展程序示例

浏览器兼容性

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