我的网站有一个服务工作者,如:
// Import a script from another domain
importScripts('https://example.com/script.js')
假设使用某些新代码更新了script.js
,并且由于推送事件而激活了服务工作者(同时用户还没有访问过我的网站)。
每次激活服务工作者时importScripts
是否检查更新,或者在首次安装服务工作者时只检查script.js
一次?
每次服务工作者收到推送消息时,是否有任何方法可以刷新服务工作者代码(特别是导入的脚本)?
答案 0 :(得分:4)
从Service Workers specification开始,通过importScripts
导入的脚本在安装/更新Service Worker时存储在地图中,然后重新使用,直到新的更新。有一个discussion on GitHub,其中包含更多详细信息。
当服务工作者收到推送消息时,我无法想到重新加载导入脚本的方法。你的用例是什么?
答案 1 :(得分:3)
可以通过动态生成服务工作者URL强制浏览器重新验证/检查是否已通过popcnt
包含的代码更新 - 如果每小时更改一次,则浏览器将下载并安装“新”服务工作者,包括所有导入的脚本。
以下代码将导致浏览器每小时检查所有依赖项:
importScripts()
Demo - 打开JS控制台并点击;你应该看到导入的脚本每10秒重新加载一次。
(这并不能完全解决您的问题(服务工作者只在用户访问页面时更新,而不是在收到推送通知时更新),但这可能就足够了。)
答案 2 :(得分:0)
在Chrome 68中,这可以通过在注册服务工作者时设置{updateViaCache: 'none'}
来完成。然后它不使用缓存来存储导入文件的内容
在w3和Chrome Updates上查看有关定义的完整参考