2012-01-18 23 views
2

我正在使用HTML5清單來允許應用程序脫機工作。我有一個資源 - 說/background.png - 可能會不時更新,但如果應用程序脫機,最後檢索的版本適合使用。我想要的行爲是瀏覽器請求/background.png通常如果它在線,但如果請求由於脫機,服務器關閉等而失敗,則返回到緩存版本。脫機時,清單管理的資源可以回退到其自己的緩存副本嗎?

在我的測試,具有類似於

NETWORK: 
/background.png 

一個清單條目進行的瀏覽器總是嘗試請求的資源。如果它離線,它將返回一個錯誤,而不是從appcache返回一個副本。這不是我想要的,但是我知道NETWORK應該如何表現。

我也試過

FALLBACK: 
/background.png /background.png 

希望可能意味着「落回高速緩存副本,如果你不能得到一個新的」,但在配置瀏覽器不會嘗試請求資源如果它在線。

我認爲另一種可能性是

CACHE: 
/offline-background.png 

FALLBACK: 
/background.png /offline-background.png 

,但具有同一資源兩個不同的名字 - 併爲IMG SRC =「background.png」具有相同的資源請求兩次(一次和一次對於緩存的離線副本) - 看起來像一個沒有吸引力的黑客。

background.png發生更改時,我也可以對清單進行任意更改,但這會導致瀏覽器檢查清單中的所有內容。

是否有可能從HTML5清單中得到這個「使用我擁有的東西,除非我能得到一個新的」模式?這似乎是一個合理的模式,所以我認爲會有一個乾淨的方式來做到這一點。如果沒有,任何人都可以提出另一種方法?提前致謝!

編輯:原來的問題提到「news.json」,意味着資源正在被JavaScript檢索,但我已將其更改爲「background.png」,以使其更清晰,我想做這與任何資源使用的頁面。

回答

0

自行管理緩存的最佳方法是將其粘貼到local storage。您應該可以簡單地將新聞Feed中的JSON直接放入單個變量中。當您請求/news.json文件僅在200響應中更新其緩存副本時,應用程序的其餘部分始終使用本地存儲中的副本。

+0

非常感謝您的建議。這種方法適用於AJAX所要求的東西 - 我在原始問題中選擇的資源名稱肯定是隱含的。但是我試圖解決這個頁面可以使用的* any *資源的問題,包括一個簡單的圖片引用,其中沒有涉及JavaScript。我希望能夠使用這個不錯的新的離線緩存功能,而不是使用離線存儲「自己推出」。我編輯了這個問題來引用「background.png」而不是「news.json」來澄清意圖。再次感謝! – jgarbers 2012-01-18 20:31:24

+0

@jgarbers然後它不會工作。如果您在清單中列出文件,那麼它將從應用程序緩存中提供。在更新清單文件本身之前,它不會從服務器更新。它的設計方式是:不變的東西進入清單; AJAX請求更改事物(即數據),並自己處理它們的緩存。如果你希望圖像是數據驅動的,可以考慮使用'canvas'或'svg'。 – robertc 2012-01-18 23:36:35

+0

我仍然好奇爲什麼設計不支持我認爲合理的模式 - 「如果你不在線時使用你所擁有的,但如果你不是,請檢查一個新的」 - 但是,我會接受你的答案。這可能不是我想聽到的,但它是正確的! – jgarbers 2012-01-20 01:10:12

相關問題