2012-09-25 28 views
3

我的小型HTML5应用需要重新部署在服务器上。我知道我只需触摸.appcache文件即可在下次访问时将每个浏览器更新到最新版本的文件。HTML5离线appcache:强制刷新所有内容?

清单如下:

CACHE MANIFEST 
#Version: 201209251353 

index.html 
apple-touch-icon.png 
css/styles.css 
data/dump.bin 
img/background.png 
img/sprites.png 
js/core.js 
js/jquery-1.8.1.min.js 
vid/walkthrough.mov 

“触动”,我加了一个注释(的#Version :)我的意思是随时更新的内容变化。

奇怪的是,一些文件被更新。并非所有的人都知道,一个同事得到最新的core.js,但仍然显示一个旧的walkthrough.mov。

有没有一种简单的机制来强制更新缓存中的所有文件?

我发现所以下面的代码,其中包括它在脚本,希望它帮助。不知道怎么要紧的是:(

// Application cache refresh 
    window.addEventListener('load', function(e) { 

     window.applicationCache.addEventListener('updateready', function(e) { 
     if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { 
      // Browser downloaded a new app cache. 
      // Swap it in and reload the page to get the new hotness. 
      window.applicationCache.swapCache(); 
      if (confirm('A new version of this site is available. Load it?')) { 
      window.location.reload(); 
      } 
     } else { 
      // Manifest didn't changed. Nothing new to server. 
     } 
     }, false); 

    }, false); 

回答

6

expiry headers是你在你的清单和内容设置是什么?

如果您已设置(例如)在vid/walkthrough.mov期满一个月就可以在未来而该文件足够小的浏览器缓存(注意:不是应用缓存)去那么浏览器将刷新在浏览器缓存版本的应用程序缓存,而不是再次请求它在网络上(如果它是不到一个月,因为它提取文件)

如果你在某些浏览器的某些版本设置清单文件将来的到期日则这可能会导致更新的清单不会被检测到。

+0

谢谢!那么,在appcache中的所有文件上设置'Expires'标头到1994年是否足够好呢?它仍然可以离线使用? – Markasoftware

0

另一种解决方案,我使用,但不漂亮是重命名应用程序缓存文件。然后,所有内容都将刷新,因为appcache将丢失。