我使用minishlink/web-push来发送推送。我用push、notificationclick和notificationclose事件侦听器为推送消息制作了一个服务工作者notificationclick。对于进行订阅的站点,有一个sw.js:
let timeStampInMs = new Date().getTime();
importScripts('https://super-push-site.com/serviceworker.js?ts=' + timeStampInMs);效果很好。
但是,我制作了一个新版本的服务工作者,并将其放置在旧位置(https://super-push-site.com/serviceworker.js)上。
如何在不访问订阅站点的情况下更新我的订阅者的服务工作者版本?
发布于 2019-01-29 10:37:45
在回答您的问题之前,我想指出,在服务工作者URL中添加缓存破坏器参数被认为是一种不好的做法,因为如果新的服务工作者与现有的服务工作者不同,浏览器已经将其排队用于安装。你可以在:服务工作者生命周期上读到更多关于这方面的内容。
现在,要回答你的实际问题:
当收到推送消息时,可以通过调用服务工作人员注册的update()方法手动触发更新:
self.addEventListener('push', function (event) {
...
event.waitUntil(
Promise.all([
self.registration.showNotification(title, options);
self.registration.update()
])
);
});您还可能希望只在服务工作人员的新版本可用时才触发self.registration.update()。要做到这一点:
self.registration.update()。希望这能有所帮助!
https://stackoverflow.com/questions/53848349
复制相似问题