从JavaScript文件强制缓存过期

时间:2010-02-23 17:57:46

标签: javascript firefox caching

我有一个旧版本的JS文件缓存在用户的浏览器上,过期设置为10年(从那时起,我学会了如何在我的Web服务器上正确设置过期标题)。我已经对JS文件进行了更新,我希望我的用户能够从中受益。

  • 我的网络服务器是否有办法强制用户的浏览器清除这个文件的缓存,而不是提供不同名称的JS文件?
  • 将来,如果未正确设置expires标头(偏执),我的JS文件是否会自动过期并强制重新加载,比如说,自缓存以来已经过了一天?

编辑:理想情况下,我想解决此问题,而不更改承载脚本的页面上的HTML标记。

4 个答案:

答案 0 :(得分:19)

简而言之......不。

您可以在脚本标记的源地址末尾添加内容。浏览器会将此视为与当前缓存的文件不同的文件。

<script src="/js/something.js?version=2"></script>

不确定您的其他选择。

答案 1 :(得分:6)

在HTML5中,您可以使用应用程序缓存,这样您就可以控制缓存何时到期

您需要添加清单

的路径

<!DOCTYPE HTML><html manifest="demo.appcache">

在demo.appcache文件中,您可以放置​​要缓存的每个文件

CACHE MANIFEST
# 2013-01-01 v1.0.0
/myjsfile.js

当您希望浏览器下载新文件时,您可以更新清单

CACHE MANIFEST
# 2013-02-01 v1.0.1
/myjsfile.js

当浏览器发现清单发生变化时,请确保使用发布日期或版本(或其他内容)修改缓存清单,它将下载其中的所有文件。

如果清单未更改,浏览器将不会更新本地文件,即使该文件已在服务器上修改。

有关详细信息,请查看HTML5 Application Cache

答案 2 :(得分:1)

您可以在网址中添加虚拟参数

<script src='oldscriptname.js?foo=bar'></script>

[e:f; B]

主要问题是,如果使用简单的“Expires”标头设置过期,那么缓存文件的浏览器甚至都不愿意与您联系。即使脚本有一种方法来破解浏览器并清除缓存,您的旧脚本也不会这样做,因此您无法将该功能发送给客户端

答案 3 :(得分:0)

您可以强制使用javascript:

重新加载缓存的文档
window.location.reload(true);

true命令表示浏览器必须重新加载没有缓存的页面。