2012-09-25 74 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將丟失。