清单托管资源脱机时是否可以回退到自己的缓存副本



我使用HTML5清单来允许应用程序离线工作。我有一个资源,比如/background.png,它可能会不时更新,但如果应用程序处于脱机状态,则最后检索到的版本适合使用。我想要的行为是浏览器在联机时正常请求/background.png,但如果由于脱机、服务器关闭等原因请求失败,则返回到缓存版本。

在我的测试中,有一个像这样的清单条目

NETWORK:
/background.png

使浏览器始终尝试请求资源。如果它处于脱机状态,它将返回一个错误,而不是从appcache返回一个副本。这不是我想要的,但这就是我所理解的网络应该如何运作

我也试过

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",以更清楚地表明我希望对页面使用的任何资源都这样做。

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

最新更新