我正在使用 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”,以更清楚地表明我想对任何资源执行此操作被页面使用。