1

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

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

我最初认为这是我的服务工作者文件很奇怪,所以我添加了这个:https ://stackoverflow.com/a/50414028/9978023 ,奇怪的是它在 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
}

服务工作者.js

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

4

1 回答 1

2

我弄清楚发生了什么事。我必须手动告诉 Service Worker 在它重新联机时触发同步事件:

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

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

PS这只会触发一次事件:

如果您在运行上面的代码后重新上线,它将触发,但如果您在之后退出并重新打开,则不会再次触发。因此,每次您希望后台同步工作时都需要运行此代码。

于 2019-01-31T15:18:19.683 回答