ServiceWorker:浏览器未检测到新版本

时间:2015-04-08 10:53:37

标签: html5 caching service-worker

我正在尝试基于this article的HTML5 ServiceWorker API。在文章中提到了

  

当用户导航到您的网站时,浏览器会尝试重新下载   在后台定义服务工作者的脚本文件。如果   比较服务工作文件中甚至存在字节差异   它目前拥有的东西,它认为它是新的'。

我从中得出结论,如果我在工作人员的脚本文件中更改任何,它将提示浏览器定义一个新版本,当所有引用旧版本的页面都会启动工人的版本被终止。

<小时/> 修改:显然浏览器正在缓存serviceworker.js文件本身,这就是为什么新版本没有被选中。谁能告诉我如何避免缓存工作文件?我已经在线查看了可用的演示文稿(包括MDNW3C Webmob's GitHub上的演示文稿)

这是我的文件结构:

|- index.html
|- serviceworker.js // the actual worker
|- serviceworker-cache-polyfill.js
|- serviceworker-registration.js // contains the registration logic for the worker
|- style.css

我将缓存配置为包含以下网址:

  • &#34; /style.css"

2 个答案:

答案 0 :(得分:3)

问题不在于ServiceWorker的配置,而在于我的服务器缓存了该文件。不能说我不觉得愚蠢我没有早点检查过。

为了将来参考,我使用http-server,它默认缓存所有文件1小时。您可以通过传入c参数来覆盖它。要完全禁用缓存,请传入-1

http-server -c-1

修改以下article包含有关如何使用ServiceWorker进行开发的完整摘要:

  

为了保证您的服务工作者的最新版本   正在使用脚本,请按照以下说明操作:

     
      
  1. 将本地服务器配置为以不可缓存的方式提供Service Worker脚本(缓存控制:无缓存)
  2.   
  3. 更改服务后   工人脚本:   
        
    1. 关闭除了一个指向您的Web应用程序的选项卡之外的所有选项卡
    2.   
    3. 点击shift-reload以绕过服务工作者以确保   剩下的标签不在服务工作者的控制之下
    4.   
    5. 命中   重新加载以让较新版本的Service Worker控制   页。
    6.   
  4.   

答案 1 :(得分:1)

这确实可以解释这种行为。更新逻辑确实尊重HTTP缓存控制标题,但最多24小时(以避免遇到使用Cache-control:1年标头提供的损坏的SW)。