【问题标题】:How to update service worker version of my subscribers?如何更新订阅者的 service worker 版本?
【发布时间】:2019-01-29 18:37:45
【问题描述】:

我使用minishlink/web-push 发送推送。我为推送消息创建了一个服务工作者serviceworker.js,使用pushnotificationclicknotificationclose 事件监听器。 到订阅发生的站点有 sw.js:

let timeStampInMs = new Date().getTime();
importScripts('https://super-push-site.com/serviceworker.js?ts=' + timeStampInMs);

效果很好。

但我制作了一个新版本的 service worker 并将其放在旧位置 (https://super-push-site.com/serviceworker.js)。

如何在我的订阅者不访问发生订阅的站点的情况下更新他们的 Service Worker 版本?

【问题讨论】:

    标签: push-notification service-worker


    【解决方案1】:

    在回答您的问题之前,我想指出,将 cache-buster 参数添加到您的 Service Worker URL 被认为是一种不好的做法,因为如果新的 Service Worker 与现有的服务人员。您可以在以下位置阅读更多相关信息:The Service Worker Lifecycle

    现在,回答您的实际问题:

    当收到推送消息时,您可以通过调用 Service Worker 注册的update() 方法手动触发更新:

    self.addEventListener('push', function (event) {
        ...
        event.waitUntil(
            Promise.all([
                self.registration.showNotification(title, options);
                self.registration.update()
            ])
        );
    });
    

    您可能还想触发self.registration.update(),仅当实际上有更新版本的服务工作者可用时。为此:

    1. 将软件的版本标识符存储在变量中。
    2. 始终在您的推送消息负载中发送最新的软件版本标识符。
    3. 比较两者,如果不匹配则触发self.registration.update()

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答。但是你认为我没有字节不同,因为我改变了super-push-site.com/serviceworker.js,但没有改变 sw.js?
    • 这仍然可以,因为导入的脚本也会被检查。
    • 感谢您的帮助,梅特
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2011-08-21
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多