如何在我的 PWA 关闭时触发离线后台功能

How to trigger offline background function when my PWA is closed

基于这个答案: Using setInterval in Service worker 三年前,

我想知道是否有任何方法可以让 PWA(通过或不通过 service worker)触发一些基于时间而不是网络相关的后台功能。

我想在我的 PWA 关闭时使用导航器内置通知 Chrome API 每分钟推送一个通知。

我看到服务工作者的主要目标是缓存资源,但在每份文档中我都看到它们以某种方式 "always active",所以我觉得其中一个可用的事件侦听器应该做我想做的事情.

当您的 PWA 关闭时,每分钟 静默重启您注册的 Service Worker 是浏​​览器主动阻止的事情。在很多情况下,这将成为恶意行为的载体。

话虽这么说,但有两种选择可以不静默地或不频繁地启动注册的 Service Worker。

推送通知

在 "not silently" 方面,您可以使用 push notifications 根据从推送通知服务器发送的传入消息启动您的服务工作者。用户需要先选择接收推送通知。您需要在 Service Worker 的 push 事件处理程序中显示用户可见的通知,因此此方法不是 "silent."

您需要通过远程服务器触发这些 push 事件。您不能通过来自本地设备的 push 事件 "wake up" 服务人员。

定期后台同步

Periodic background sync 是一个较新的功能,更接近您描述的内容。它允许满足特定条件的网络应用程序注册一个 periodicsync 事件,该事件将定期自动触发(无需删除服务器)。您不需要在此 periodicsync 事件处理程序中显示用户可见的通知。

适用于定期后台同步的具体限制取决于浏览器,但至少在 Chrome 中,您无法注册 periodicsync 在任何地方触发的事件几乎与一次触发的频率一样一分钟。如果其他条件都满足,一天一件事的发生频率与您预期的差不多。