2011-04-04 32 views
3

我正在使用MVC與JS一起創建一個iPad應用程序。其中一個關鍵要求是應用程序在離線模式下工作。因此我使用清單文件來確定緩存的腳本文件。但是,我希望在瀏覽器再次聯機時刷新所有腳本。我已經指定了這個:未刷新ASP.NET清單文件腳本

Network: 
* 

在腳本下面的清單文件中。這不起作用,因爲一些文件在瀏覽器在線刷新時不會更新。此外,如果我檢查開發者工具在Chrome中,控制檯顯示下列事件:

Application Cache Checking event 
Application Cache NoUpdate event 

我猜意味着瀏覽器嘗試更新緩存,但沒有更新被發現。

任何想法?

見下面我的全部清單文件:

CACHE MANIFEST 
#rev20 


# Explicitly cached entries 
    ../css/sencha-touch.css 
    ../Site.css 
    ../css/mycss.css 
    ../css/application.css 
    ../../Scripts/SenchaTouch/sencha-touch-debug-w-comments.js 
    ../../Scripts/js/Base/Index.js 
    ../Images/Icons/green_indicator.png 
    ../Images/Icons/red_indicator.png 
    ../Images/toolbar_image.png 
    ../Images/search_icon.png 
    ../Images/loading.gif 

NETWORK: 
* 

編輯:

我最初的想法是,一旦被修改過的文件將自動更新。但是,因爲瀏覽器依賴於清單文件來通知它所做的更改(我認爲),所以在發生更改時,需要增加#rev號碼。即使這樣,當我測試時,我需要重新刷新頁面幾次才能重新加載文件。我懷疑有一些事情要做,瀏覽器加載和處理資源的順序,但我找不到任何信息。

+0

嗨,你這個隨時隨地? - 我有同樣的問題... – Journeyman 2011-05-03 17:04:24

+0

@Journeyman。是和不是。見上面的編輯 – sTodorov 2011-05-05 07:53:36

回答

2

瀏覽器只會在檢測到緩存清單發生更改時更新緩存。增加您的修訂版本號是強制更改的好方法。

瀏覽器檢測到更改後,它會下載文件並準備新版本的緩存。瀏覽器在完全填滿並刷新頁面之前不會使用新緩存。

,可以檢測何時新緩存準備和刷新開始使用它立即使用這個JavaScript頁面:

function updateCache(){ 
    window.applicationCache.swapCache(); 
    window.location.reload(); 
} 

window.applicationCache.addEventListener("updateready", updateCache, false);