【发布时间】:2015-11-28 17:19:11
【问题描述】:
编辑:截至 2022 年,此问题已过时。 Appcache 已被弃用并从浏览器中删除,此功能可以通过 service worker 轻松实现。
我正在尝试使用HTML5 appcache feature 为我的网站提供一个自定义的“断开连接”页面。我有一个名为offline.html 的页面,我想在浏览器处于脱机状态时向尝试访问站点根页面 (/) 的用户显示该页面,并且我想关闭所有其他 appcache 功能。我不希望我网站上的任何页面缓存在 appcache 中(当然,offline.html 和必要的offline_cache.html 除外)。
我正在使用this workaround 来防止我的主页被缓存为母版页,并且使用下面的代码,我觉得我几乎可以正常工作了。
我的index.html 使用离线缓存助手加载 iframe:
<iframe style="display: none;" src="offline_cache.html"></iframe>
offline_cache.html 文件加载 site.appcache:
<!DOCTYPE HTML>
<html lang="en" class="no-js" manifest="site.appcache">
<head>
<meta charset="utf-8">
<title>Manifest Initiation Page</title>
</head>
<body></body>
</html>
我的site.appcache 文件使用FALLBACK 指令为根页面提供离线替代方案(现在它匹配所有内容,但我希望它只匹配根页面):
CACHE MANIFEST
CACHE:
NETWORK:
*
FALLBACK:
/ /offline.html
SETTINGS:
prefer-online
期望的行为:
除了自定义离线页面 (offline.html) 及其帮助程序之外,缓存中不应有任何内容。当用户在线访问该站点时,该站点应正常运行,包括所有特殊状态代码页面(如 404)。当用户离线访问站点的根页面时,他们应该看到offline.html。当用户在离线时访问不存在的页面(可以是offline.html 或本机离线页面)时发生什么并不重要,但如果他们在线,那么它必须显示 404 页面而不是 offline.html。
当前行为:
无论浏览器在线还是离线,用户都看不到任何 404 页面 - 对于在用户在线时应该显示 404 错误的页面,他们看到的是offline.html。这是因为后备部分中的/ 不仅匹配主页,还匹配以/ 开头的每个url,即包括所有不存在的页面的整个站点(我希望它只匹配主页)。
本质上,我只需要在/ 的主页上设置我的后备触发器,而不是在网站上的任何其他路径上。然后所有不存在的资源将正确返回本机离线页面或 404 错误页面,而不是 offline.html。我怎样才能做到这一点?
【问题讨论】:
-
感谢服务人员 - 我认为这个问题现在已经过时了。
标签: html http caching html5-appcache