我遵循了有关服务工作者和后台同步的教程: https://codelabs.developers.google.com/codelabs/workbox-indexeddb/index.html?index=..%2F..%2Findex#0
在 Safari iOS 11.3.1 上运行时,服务工作线程已注册,因为它在日志中报告(已安装服务工作线程(。但我不明白耶!工作框已加载🎉消息。
IndexedDB 工作正常,对象在服务器上的每个fetch
上都会更新。
但是,当我故意脱机并执行 POST 时,不会将任何内容写入 IndexedDB 队列。我的问题是: 1. 我可以在哪里检查网页检查器中的服务工作者? 2. 工作框后台同步是否支持 Safari iOS 11.3.1?如果是,我的设置有什么问题?
您的服务工作线程有错误,因此 Workbox 未加载。在示例中,您必须添加正则表达式:
替换服务辅助角色上的以下内容:
workbox.routing.registerRoute(
/api/add,
networkWithBackgroundSync,
'POST'
);
使用这个:
const bgSyncPlugin = new workbox.backgroundSync.Plugin('offlineQueue', {
maxRetentionTime: 48 * 60 // 48 hours retention on Indexed DB (up to your needs)
});
workbox.routing.registerRoute(
new RegExp('./api/add'),
workbox.strategies.networkOnly({
plugins: [bgSyncPlugin]
}),
'POST'
);
在 Safari 11.3.1 上,您只能对请求进行电子排队,但尚不支持完整的后台支持。 检查:https://github.com/GoogleChrome/workbox/issues/1466
iOS上的 Safari 不支持后台同步