Periodic Background Sync 支持
发布于 更新于
Periodic Background Sync 让已安装 PWA 的 Service Worker 能够在后台周期性地同步数据, 使应用在启动时就能立即展示最新内容,而不必让用户等待抓取。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 80 | 高 | 来源 | — |
| Chrome (Android) | 支持 | 80 | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 80 | 高 | 来源 | 2 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 3 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 45 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 6 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 78 |
| Samsung Internet | 支持 | 13.0 | 高 | 来源 | 9 |
| WebView (Android) | 不支持 | — | 高 | 来源 | 10 |
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- 实现跟踪:https://crbug.com/40151529。
在 Service Worker 就绪后,注册一个带最小间隔(毫秒)的周期同步标签:
async function registerPeriodicSync() { const registration = await navigator.serviceWorker.ready; await registration.periodicSync.register('get-latest-news', { minInterval: 24 * 60 * 60 * 1000, });}在 Service Worker 中按标签处理 periodicsync 事件:
self.addEventListener('periodicsync', (event) => { if (event.tag === 'get-latest-news') { event.waitUntil(fetchAndCacheLatestNews()); }});如何在运行时检测
Section titled “如何在运行时检测”在注册之前,先检测 Service Worker 注册对象上是否存在 periodicSync。如果不存在,
则回退为在页面加载时直接刷新内容:
async function scheduleRefresh() { const registration = await navigator.serviceWorker.ready; if ('periodicSync' in registration) { await registration.periodicSync.register('get-latest-news', { minInterval: 24 * 60 * 60 * 1000, }); } else { await fetchAndCacheLatestNews(); }}- Chrome 仅将周期后台同步权限授予已安装并作为独立应用启动的 Web 应用——普通浏览器 标签页中打开的页面不会获得该权限。
- 实际的同步频率由浏览器而非应用决定,依据站点参与度等信号;应将
minInterval视为 下限而非保证值。 - Firefox 与 Safari 均未实现此 API——请始终为这些浏览器提供回退刷新路径(例如页面 加载时刷新)。
- 为独立的周期任务使用不同的
tag值,并在periodicsync处理函数中根据event.tag分支处理。
← 返回兼容性浏览器。