HTML5离线清单:停止缓存页面声明的内容

14
我一直在尝试使用缓存清单文件,并尝试阻止其缓存声明页面。根据HTML5 Rocks的说法,任何包含清单的页面都会被隐式添加到应用程序缓存中。我希望清单文件可以缓存特定的工件之一是我的在线单页应用程序HTML的离线版本,但不要缓存在线版本。

我对HTML5还有点陌生,但我很惊讶居然没有一个明确定义的方法来防止包括清单在内的页面被缓存。 - Peter Herdenborg
是的,我也是这样想的。如果清单文件有更多的影响力,那么只有你声明的内容才会被缓存,这样我会更喜欢。它不应该与页面链接在一起,那只是隐藏功能。 - Greg
我的第一个想法是“将其添加到NETWORK:部分”,但经过一些测试,这并不起作用(至少在IE中 - 我一旦发现有一个情况不起作用就停止测试了)。在我看来,这就是明显的错误 - 明确声明的内容应始终覆盖默认行为。由于存在此类问题,我仍然非常犹豫是否使用离线功能。 - Morvael
1个回答

17

这是我解决问题的方法。我的清单文件

CACHE MANIFEST
# Version 0.1

CACHE:
# Minimised Styles
/css/style.0.1.min.css

# Minimised JavaScript
/js/script.0.1.min.js

FALLBACK:
/ /offline.html

NETWORK:
*

注意:当离线时,所有发送到mydomain.com/的内容现在将被发送到/offline.html(来自缓存)

现在,如何仅缓存清单文件中的内容,而不包括mydomain.com/上的在线页面。

请在mydomain.com/页面底部放置以下iframe:

<iframe src="/offline.html" style="display: none;"></iframe>

并且在offline.html中加入manifest="myapp.appcache"

这意味着当加载mydomain.com/时,它不会被缓存(因为页面上没有manifest属性)。然后浏览器通过iframe获取offline.html,并使用清单文件中的指令添加所有其他希望缓存的内容,包括offline.html页面,因为存在HTML属性。

我唯一能看到的开销是在第一次页面加载时,iframe将发出额外的HTTP请求,但一旦它被缓存,就会从缓存中取出,所以不是一个很大的问题。


这似乎适用于Chrome,但我似乎无法让它在FireFox v14.0.1上工作。它一直从网络获取主index.htm文件的所有内容(该文件没有清单属性-但具有包含离线.htm文件的清单的iframe)。 - patorjk
升级到FF 15后,它开始为我工作。不确定我的设置是否有问题,但现在它可以工作了。 - patorjk
这正是我在寻找的,虽然不够整洁,但完美地完成了工作。谢谢@Greg! - Abhinav Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接