后台同步不会自动触发

Background Sync not triggering automatically

好的,所以我正在尝试制作一个使用后台同步的 Angular 7 PWA。

我可以在 Chromium 的开发工具中触发同步事件,但是当我拔下以太网电缆并重新插入时它不会触发。

我最初认为是我的 service worker 文件很奇怪所以我添加了这个: ,奇怪的是它在 Firefox 中工作但在 Chromium 中不工作。所以使用它我可以触发同步事件要调用的相同功能。但这不是一个很好的解决方案。

self.addEventListener('sync', function (event) {
  console.log('I heard a sync event. Sending Posts to server', event);
  event.waitUntil(sendPostsToServer()
    .then(res => {
      console.log(res);
    })
    .catch(e=>{console.log(e)}));
});


async function sendPostsToServer() {
  // POST to server
}

服务-worker.js

我做错了什么?为什么当我重新连接到 Internet 时同步事件没有触发?

我明白是怎么回事了。我不得不手动告诉 Service Worker 在它重新联机时触发同步事件:

navigator.serviceWorker.ready.then(function (swRegistration) {
     return swRegistration.sync.register('myFirstSync');
});

有了这个(我 运行 当 POST 不成功时)当我们重新上线时,SW 将 运行 触发同步事件。

P.S。这只会触发一次事件:

如果您在 运行 上面的代码之后重新上线,它将触发,但如果您关闭并在之后重新打开,它将不会再次触发。所以这段代码需要 运行 每次 你想让后台同步工作。