如何在浏览器中强制刷新javascript文件?

时间:2011-11-22 16:55:16

标签: javascript

我一直在为我正在构建的网络应用程序使用相当多的JQuery,KnockoutJS和其他JavaScript东西。大多数JS都在自己漂亮的单独文件中。我遇到的问题是浏览器会缓存这些文件,因此当我推送更改时,人们必须先刷新几次才能获得更新的文件。最近我对一些数据的传递方式进行了重大更改,文件的缓存版本导致了一些错误,更糟糕的是,有些数据被删除了。

人们如何处理这个问题?有没有办法强制刷新文件?

3 个答案:

答案 0 :(得分:6)

不同的开发者做不同的事情。官方的方法是播放nicley并使用HTTP标头。谷歌的http头和缓存问题,你可以继续按自己的方式继续。

然而,有些浏览器会忽略您,所以如果我在实时环境中进行开发,我会使用版本号来确保每个人都获得最新文件。所以你可以称你原来的“something.js?v = 1.0”。做一个小改动然后把它改成“?v = 1.1”..你明白了。因为链接不同,所以在大多数情况下它应该完全忽略缓存。

我倾向于尽可能使用这两种方法

答案 1 :(得分:5)

我知道强制所有浏览器忽略缓存的唯一方法是在脚本标记中添加某种唯一标识符。

您可以做的一件事是通过GET参数添加时间戳或版本号,这对服务器没有任何意义,或者只是在可行的情况下更改脚本本身的文件名:

<script type="text/javascript" src="myscript.js?version=2.0"></script>
<script type="text/javascript" src="myscript.js?ts=9342038423048"></script>
<script type="text/javascript" src="myscript.2.0.js"></script>

如果对JS文件进行了重大更改,尽管大多数浏览器应足够智能以获取新副本...如果您有权访问服务器(缓存过期等),您还可以调整响应标头

答案 2 :(得分:1)

问题是,当您针对同一网址执行GET请求时,浏览器会缓存。正如其他人所说,您可以附加时间戳作为查询参数。这会在URL发生更改时强制执行新的GET请求。

对于ajax,有一个jQuery.ajax parameter为你做这个

  

cacheBoolean默认值:true,false表示dataType“script”和“jsonp”

     

如果设置为false,则会强制请求的页面不被缓存   浏览器。将cache设置为false也会附加查询字符串参数,   “_ = [TIMESTAMP]”,到URL。

使用AJAX时,您应该使用此方法。否则,请附加您自己的时间戳或修改标题(这应该适用于现代浏览器)。