2012-01-18 26 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

相关问题