7

在我的产品网站上,Firefox 有时“检测不到”我的 CSS 和 Javascript 代码中的更改。而是加载旧版本,所以我似乎需要清除缓存。在这样的情况下,我该怎么办?这与最新的 Firefox(撰写本文时为 16.0.1)有关。

编辑!

我忘了说 localhost css 文件出错了。我的意思是,有一个旧的 js 文件,我更新它,上传它,然后在产品服务器上,firefox 认为它是 localhost 文件。我包含文件的方式:

<link rel="stylesheet" href="/xyz.css" type="text/css" />
4

7 回答 7

11

如果您使用的是服务器端语言,则可以使用技巧。您可以在 .css/.js 之后附加一个字符串。以 PHP 为例:

<link rel="stylesheet" type="text/css" href="/style.css?t=<?= time(); ?>" />

它会更改每个页面重新加载。

看看这篇关于缓存破坏的文章。

于 2012-10-25T20:23:24.390 回答
9

您可以使用一种称为“缓存破坏”的技术,将查询字符串附加到对 css/js 文件的调用中。然后,每当您更新 css/js 时,您都会更新查询字符串。

例子:

<link rel="stylesheet" type="text/css" href="/styles.css?ver=1" />
于 2012-10-25T20:22:27.220 回答
3

正如在其他几个答案中提到的,您希望根据内容为静态资产拥有一个唯一标识符,即当且仅当内容发生变化时,标识符才会发生变化。这样,只要内容没有改变,浏览器仍然可以使用资源的缓存版本——这正是你想要的。这种技术称为静态资产版本控制

所以不要使用当前时间或随机数/字符串。如果可以,请使用文件的修改时间或(更好)其内容的 md5 哈希。您可以将此标识符附加为查询字符串(将被忽略)或(更好)将其附加到扩展名之前的文件名。

为了与其他答案中提到的缓存清除技术进行对比并消除混淆:缓存清除是广告商使用的一种技术,用于强制浏览器始终重新加载资源,以便广告商可以通过数量来衡量广告展示次数请求资源的次数。这很容易通过使用随机数来实现。您通常不想将其用于静态资产。

于 2013-02-02T01:19:42.850 回答
2

您可以在发送的 css/js 末尾附加一个版本。

例如

代替www.foo.com/js/javascript.js,发送www.foo.com/js/javascript.js?v=1
代替www.foo.com/css/style.css,发送www.foo.com/css/style.js?v=1

于 2012-10-25T20:22:29.393 回答
2
  • 您可以使用元标记来强制刷新。<meta http-equiv="Cache-control" content="no-cache">, 或<meta http-equiv="pragma" content="no-cache">.
  • 您可以强制使用 HTTP 标头:Cache-control: no-cachePragma: no-cache.
  • 您可以将随机查询字符串附加到 CSS 和 JavaScript 文件中。
于 2012-10-25T20:25:35.527 回答
1

恐怕只是要清除缓存或硬刷新(Ctrl + F5)。

另一种选择是简单地更改 JS 或 CSS 文件的文件名,以便 FF 不会将其识别为缓存文件(例如,将 style.css 重命名为 style2.css)。

于 2012-10-25T20:23:17.477 回答
1

style.css?randomnumber将确保加载

于 2012-10-25T20:24:22.417 回答