window.location.reload清除caching

我想使用JavaScript重新加载页面,但我也想清除caching,所以在页面上刷新页面有最新版本的一切从服务器。
除IE以外的其他浏览器都没有获取最新的内容。

任何解决scheme的IE9?

reload()应该接受一个参数,告诉它做一个硬重载,即忽略caching:

 location.reload(true); 

我不能保证它的可靠性,你可能想进一步调查。

你可以用几种方法来做到这一点。 一,只需将这个元标签添加到你的head

 <meta http-equiv="Cache-control" content="no-cache"> 

如果你想确保已经被caching的东西也被删除了,那么expires元标签应该可以通过将它设置为-1来删除它,如下所示:

 <meta http-equiv="Expires" content="-1"> 

http://www.metatags.org/meta_http_equiv_cache_control

另外,IE应该给你主页的最新内容。 如果你的外部文档有问题,比如CSS和JS,在你的URL的最后加上一个虚拟参数,当前时间以毫秒为单位,这样它就不会一样了。 这样,IE浏览器和其他浏览器将始终为您提供最新版本。 这里是一个例子:

 <script src="mysite.com/js/myscript.js?12345"> 

–UPDATE–

读完评论后,我意识到你想以编程方式擦除caching,而不是每次。 你可以做的是在JS中有一个函数,如:

 eraseCache(){ window.location = window.location.href+'?eraseCache=true'; } 

然后,在PHP中,让我们说,你做这样的事情:

 <head> <?php $cache = ''; if(isset($_GET['eraseCache'])){ echo '<meta http-equiv="Cache-control" content="no-cache">'; echo '<meta http-equiv="Expires" content="-1">'; $cache = '?'.time(); } ?> <!-- ... other head HTML --> <script src="mysite.com/js/script.js<?= $cache ?>" </head> 

这没有testing,但应该工作。 基本上,你的JS函数,如果被调用,将重新加载页面,但添加一个GET参数的URL的末尾。 您的网站将有一些后端代码,寻找这个参数。 如果它存在,则添加元标记和包含时间戳的cachingvar,并将其附加到您正在caching问题的脚本和CSS。

– 更新2 –

meta标签确实不会擦除caching的ON LOAD。 所以,从技术上讲,你需要在JS中运行eraseCache函数,一旦页面加载,你需要重新加载它,以进行更改。 你应该能够用你的服务器端语言解决这个问题。 您可以运行相同的eraseCache JS命令,而不是添加元标记,而是在页面顶部运行它:

 <?php header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); ?> <!-- Here you'd start your page... --> 

这种方式是可行的,因为它在页面加载之前和运行之前擦除caching。

我有这个问题,我解决了它使用JavaScript

  location.reload(true); 

你也可以使用

 window.history.forward(1); 

在用户退出应用程序后停止浏览器后退button。

我写了这个JavaScript脚本,并将其包含在标题(在任何加载之前)。 这似乎工作。 如果页面在一个多小时前被加载,或者情况未定义,它将重新加载服务器上的所有内容。 一小时的时间= 3600000毫秒可以在以下行中更改:if(alter> 3600000)

问候,Birke

 <script type="text/javascript"> //<![CDATA[ function zeit() { if(document.cookie) { a = document.cookie; cookiewert = ""; while(a.length > 0) { cookiename = a.substring(0,a.indexOf('=')); if(cookiename == "zeitstempel") { cookiewert = a.substring(a.indexOf('=')+1,a.indexOf(';')); break; } a = a.substring(a.indexOf(cookiewert)+cookiewert.length+1,a.length); } if(cookiewert.length > 0) { alter = new Date().getTime() - cookiewert; if(alter > 3600000) { document.cookie = "zeitstempel=" + new Date().getTime() + ";"; location.reload(true); } else { return; } } else { document.cookie = "zeitstempel=" + new Date().getTime() + ";"; location.reload(true); } } else { document.cookie = "zeitstempel=" + new Date().getTime() + ";"; location.reload(true); } } zeit(); //]]> </script> 

Cache.delete()也可以用来清除最新的chrome,firefox和opera浏览器的caching。

在我的情况下,reload()不起作用,因为asp.net控件的行为。 所以,为了解决这个问题,我使用了这种方法,尽pipe似乎是一个解决办法。

 self.clear = function () { //location.reload(true); Doesn't work to IE neither Firefox; //also, hash tags must be removed or no postback will occur. window.location.href = window.location.href.replace(/#.*$/, ''); };