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。