强制刷新对Head JS不起作用

时间:2012-10-02 08:54:05

标签: javascript browser-cache head.js

通过Head JS加载脚本时,我无法使用Ctrl + F5(或等效的)键盘快捷键强制刷新内容。

脚本正确缓存,浏览器遵循从服务器发送的缓存指令(我使用的是IIS 7.5)。但与标记中直接包含的脚本标记不同,我无法覆盖缓存并强制刷新通过Head JS加载的脚本。

我假设这是脚本动态加载方式的结果。我可以忍受这种行为,因为强制刷新只是在开发过程中很方便,而且我知道其他方法可以强制从服务器检索内容。

我只是想知道是否有人能解释为什么会这样......

更新

这对我们来说从来都不是问题,因为我们的静态内容的缓存指令是适当设置的。这在开发和QA中只是一个问题,我可以选择的选项是......

  • 将所有Dev和QA浏览器配置为永不缓存内容。
  • 为Dev和QA环境配置不同的静态内容缓存指令 - 实际上将MaxAge设置为如此小的内容始终过期。仅在实时中设置正确的MaxAge值。

我选择了第二个选项。

3 个答案:

答案 0 :(得分:2)

动态脚本加载不是正确加载页面的一部分。当您强制刷新时,浏览器会重新加载页面以及其HTML和引用的CSS文件中引用的所有资源,但是在页面内容中未引用您使用head.js加载的脚本,并且浏览器无法弄清楚head.js将创建对其他资源的引用。在创建这些引用时,浏览器不再刷新页面,因此适用正常的缓存规则。

您可以通过在其网址中添加唯一的查询字符串来强制重新加载脚本(例如jquery.js?random=437593486394),但这会禁用页面所有加载的缓存,而不仅仅是在强制刷新时。

答案 1 :(得分:1)

这也是require.js的问题。希望其中一个解决方案也适用于Head.Js

  • 如果使用Chrome,请打开“网络”标签上的“开发人员工具”面板,右键单击并选择“清除浏览器缓存”
  • 通过在js资源的查询字符串中附加日期时间戳来执行一些“缓存清除”
  • 如果您使用IIS(它看起来像你)。转到您网站的HTTP Response Headers面板,单击Set Common Headers并立即将Expire Web内容设置为。

后者是我开发机器的首选选项

IIS HTTP Response Headers Panel

答案 2 :(得分:0)

我不会说它是动态或非动态的问题,当你注入脚本时,它仍会导致浏览器发出HTTP请求并应用它应用的任何缓存逻辑。

如上所述,如果您不希望脚本缓存..动态或静态,则无关紧要,您通常需要以查询字符串的形式附加时间戳。

如果您只想查看更改是否有效,请在浏览器中强制刷新...通常是CTRL + F5