我正在使用服务工作者来实现Web推送通知。每当我更改一些service-worker代码时,除非我删除cookie / cache,否则该更改不会反映在浏览器上的service-worker中。 这是正常的行为还是我必须添加一些功能来更新服务工作者?
答案 0 :(得分:5)
如果缓存标头随服务工作文件一起发送,则服务工作文件的缓存最长为24小时。
第一步是将缓存标头设置为0以不缓存。
当浏览器找到新的服务工作者时,它将下载并安装它。在服务工作者当前控制的所有页面都关闭之前,它不会生效。对于普通用户来说,这不是问题。在使用chrome进行开发期间,您可以使用Ctrl + shift + R进行硬刷新,这会强制页面不被服务工作者控制,从而允许您的服务工作者在下次刷新时控制。
最终选项是在安装步骤中使用跳过等待并在激活步骤中声明强制新服务工作者立即激活和控制任何页面。如果因为这很容易进入奇怪的场景而获利。
更新:浏览器正在更改此默认行为 - Firefox现在会忽略缓存标头,而其他浏览器可能会实现相同的行为
答案 1 :(得分:0)
回答您的具体问题:是的,行为是故意的,是的,您可以调用更新功能。在服务工作者注册上使用update()
方法。来自MDN:
ServiceWorkerRegistration接口的更新方法尝试更新服务工作者。它获取工作者的脚本URL,如果新工作程序与当前工作程序不是逐字节相同,则会安装新工作程序。如果之前的提取发生在24小时之前,则工作程序的提取会绕过任何浏览器缓存。
请注意,如果之前的提取时间超过24小时,SW提取将绕过任何浏览器缓存,因此您应该在开发服务工作时禁用缓存。