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"一次用于缓存的脱机副本)——似乎是一个没有吸引力的 hack。

我还可以在background.png更改时对清单进行任意更改,但这会导致浏览器检查清单中的所有内容。

是否有可能从 HTML5 清单中获得这种“使用我拥有的东西,除非我能得到一个新的”模式?这似乎是一个合理的模式,所以我认为会有一种干净的方式来做到这一点。如果没有,任何人都可以提出另一种方法吗?提前致谢!

编辑:原始问题提到“news.json”,暗示资源正在被 JavaScript 检索,但我已将其更改为“background.png”,以更清楚地表明我想对任何资源执行此操作被页面使用。

4

1 回答 1

0

自己管理缓存的最佳方法是将其粘贴到本地存储中。您应该能够简单地将 JSON 从您的新闻提要中直接放入单个变量中。当您请求/news.json文件时,仅在响应中更新它的缓存副本200,在您的应用程序的其余部分始终使用本地存储中的副本。

于 2012-01-18T13:51:17.090 回答