ServiceWorker 陷入无限循环

3
我正在创建一个项目,其中有一个serviceWorker每2秒向php API发送请求,如果答案是"hi",它会显示通知,但是如果您关闭浏览器并重新打开或花费约1分钟,serviceWorker将停止。
它甚至可以在页面关闭的情况下工作,但只能像我之前说的那样持续1分钟。有人知道如何使serviceWorker不停止或至少具有更长的持续时间吗?

代码:

self.addEventListener('install', function(event) {
  setInterval(() => {
    fetch('teste.php').then(function(response) {
      return response.text();
    }).then(function(data) {
      var options = {
        body: 'Ja gastaste 4GB do teu tarifario, mas va ainda tens 1GB',
        icon: 'https://cdn130.picsart.com/274112228042211.png?r1024x1024',
        vibrate: [100, 50, 100]
      };
      if (data == "oi") {
        if (Notification.permission == 'granted') {
          return self.registration.showNotification('IMM | Limite de internet', options);
        }
      }
    });
  }, 2000);
});

也许尝试使用Web Workers?https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers - MoxGeek
@MoxGeek - 我不认为你理解 Web Workers 的作用... 完全无关 - vsync
我不明白为什么你需要一个 service-worker 来做你想做的事情。 - vsync
@vsync,我使用Web Workers,也许我没有理解问题。 :) - MoxGeek
@MoxGeek - 我觉得没有人理解这个问题 :) - vsync
1个回答

0

install事件仅在“安装”时触发,因此如果您离开页面并重新打开它,则服务工作者已经安装,这就是为什么它不会再次开始请求服务器的原因。

如果您希望您的服务工作者在访问页面时(重新)启动,您可以向其发送消息,或将该活动绑定到某个请求,例如在此情况下使用/。因此,每当浏览器加载您的页面索引时,它就开始轮询。但是,如果页面已经打开,则应该使用消息。

对于您的问题,“正确”方法应该是Background-Sync,但据我所见,它支持较差。因此,您必须解决这个限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接