2011-04-20 63 views
3

我的移動Web應用程序的主頁是一個.jsp頁面。我的應用程序需要登錄(Google App Engine),因此用戶未登錄時有一個登錄按鈕,用戶登錄時有一個登出按鈕,全部由.jsp頁面上的代碼處理。webkit .appcache文件緩存動態頁面

我在頁面上加載了很多JS代碼,所以我使用了一個.appcache文件來緩存它。不幸的是,即使我將我的.jsp頁面添加到網絡區域,該頁面仍以有趣的方式被緩存,忽略了服務器上的內容服務器。這意味着我的註銷按鈕顯示用戶何時註銷,反之亦然。

我試圖添加no-cache指令作爲元標記,但它們都被忽略。

想法?

+0

不要設置元標記 - 首先發送正確的標題! – 2011-10-10 02:18:40

回答

3

根據潛入HTML5,引用清單的頁面會自動包含在清單中。

http://diveintohtml5.ep.io/offline.html

問:我需要列出我的緩存我的HTML頁面清單?答:是的,不是。如果整個Web應用程序包含在單個頁面中,只需確保頁面使用manifest屬性指向緩存清單。當您使用manifest屬性導航到一個HTML頁面時,該頁面本身被假定爲Web應用程序的一部分,因此您無需將其列入清單文件本身。但是,如果您的Web應用程序跨越多個頁面,則應該在清單文件中列出所有HTML頁面,否則瀏覽器不會知道需要下載和緩存其他HTML頁面。

我有類似的問題,我想我最終會通過AJAX加載頁面的內容。

1

在appCache中的緩存是一個兩階段過程:首先檢查緩存清單(在這種情況下,當頁面被加載時),那麼如果它的內容已經改變,則重新加載該內容。然而,就你而言,到那時,陳舊的頁面已經被加載和顯示。

最簡單的解決方法是從appCache中明確排除頁面(但不包括.js),這樣只有js被緩存,而不是頁面。我聽起來像你可能已經想通了,因爲你試圖通過把網頁放在網絡區域來做到這一點。檢查排除是否正確,因爲聽起來像是問題,並且在該頁面上正確設置了html緩存屬性。