【问题标题】:How to trigger offline background function when my PWA is closed我的 PWA 关闭时如何触发离线后台功能
【发布时间】:2020-04-02 08:42:55
【问题描述】:
基于此答案:
Using setInterval in Service worker三年前,
我想知道是否有任何方法可以使 PWA(通过或不通过 service worker)触发一些基于时间而不是网络相关的后台功能。
我想在我的 PWA 关闭时每分钟使用内置通知 Chrome API 的导航器推送一个通知。
我看到服务工作者的主要目标是缓存资源,但在每个文档中我都看到它们以某种方式“始终处于活动状态”,所以我觉得其中一个可用的事件监听器应该做我想做的事情。
【问题讨论】:
标签:
service-worker
progressive-web-apps
【解决方案1】:
在您的 PWA 关闭时,每分钟静默重启您注册的 Service Worker,这是浏览器主动阻止的。在很多情况下,这将成为恶意行为的载体。
话虽如此,有两个选项可用于启动您的注册 Service Worker,不是静默启动,就是不那么频繁。
推送通知
在“非静默”方面,您可以使用push notifications 根据从推送通知服务器发送的传入消息启动您的服务工作者。用户需要先选择接收推送通知。您需要在 Service Worker 的 push 事件处理程序中显示用户可见的通知,因此此方法不是“静默”的。
您需要通过远程服务器触发这些push 事件。您不能通过来自本地设备的 push 事件“唤醒”服务人员。
定期后台同步
Periodic background sync 是一个更新的功能,更接近您的描述。它允许满足特定条件的 Web 应用程序注册 periodicsync 事件,该事件将定期自动触发(无需删除服务器)。您无需在此 periodicsync 事件处理程序中显示用户可见的通知。
适用于定期后台同步的具体限制取决于浏览器,但至少在 Chrome 中,您无法注册在任何地方几乎每分钟一次触发的periodicsync 事件。如果满足其他条件,一天的事件发生的频率与您预期的一样多。