我想使用JavaScript重新加载页面,但我也想清除缓存,所以在页面刷新页面上有最新版本的服务器。
除IE之外的其他浏览器没有获取最新内容。window.location.reload清除缓存
IE9的任何解决方案?
我想使用JavaScript重新加载页面,但我也想清除缓存,所以在页面刷新页面上有最新版本的服务器。
除IE之外的其他浏览器没有获取最新内容。window.location.reload清除缓存
IE9的任何解决方案?
reload()
应该接受它告诉它做一个硬性重新加载,即一个说法,忽略缓存:
location.reload(true);
我不能保证它的可靠性,您可能需要进一步调查。
它是否适用于android webkit浏览器? – prongs 2012-03-29 07:44:54
@prongs我不明白为什么它不应该。当然,我没有基于Android的webkit来测试它... – Christian 2012-03-29 14:40:16
适用于IE和FF,但不适用于Chrome,Safari。任何人都知道如何在Chrome,Safari中实现这一点? – testpattern 2012-10-30 13:31:00
您可以通过几种方法来做到这一点。一,单纯这个元标记添加到您的head
:
<meta http-equiv="Cache-control" content="no-cache">
如果你想使一个已经缓存获取的也抹去了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--
阅读我知道你想以编程方式清除缓存,而不是每次的意见后。你可以做的是有一个函数在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>
这不是测试,但应该工作。基本上,你的JS函数,如果被调用,将重新加载页面,但在URL的末尾添加一个GET参数。然后你的网站会有一些后端代码来寻找这个参数。如果它存在,它会添加元标记和包含时间戳的缓存var,并将其附加到您正在缓存问题的脚本和CSS。
--update 2--
meta标记确实不会清除缓存的负载。因此,从技术上讲,您需要在JS中运行eraseCache函数,一旦页面加载,您需要重新加载它以便进行更改。你应该能够用你的服务器端语言来解决这个问题。你可以运行相同的eraseCache JS的命令,但不是添加meta标签在你的页面的顶部运行此相反:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>
<!-- Here you'd start your page... -->
这样的工作,因为它之前删除缓存页面加载和任何运行之前。
如果我错了,纠正我,但meta缓存控制标记将阻止正在加载的页面的缓存。它不会清除已保存在客户端浏览器中的缓存。 – Keylan 2011-04-19 20:34:04
此外,将时间以毫秒为单位添加到src属性的末尾永远不会允许该JavaScript文件被缓存......这是不可取的。我从coure06希望能够通过请求清除浏览器缓存的问题中获得它 - 而不是永久保证该文件永远不会被缓存。也许一个综合的解决方案是使用包含的GET参数来链接到同一页面,这会强制javascript包含当前时间。 – Keylan 2011-04-19 20:38:57
只是想继续添加评论,因为我认为新的东西显然。将毫秒添加到基于某些事件的文件路径上并不容易,因为在完成一次之后 - 文件路径永远不会仅返回到myscript.js,因为浏览器只会切换回缓存文件。 – Keylan 2011-04-19 20:44:31
我写了这个JavaScript脚本,并将其包含在标题(在任何加载之前)。它似乎工作。如果页面在一个多小时前加载,或者情况未定义,它将重新加载服务器上的所有内容。 一小时= 3600000毫秒的时间可以在下面的行来改变: 如果(改变> 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>
在我的情况重载()不工作因为asp.net控制行为。所以,为了解决这个问题,我已经使用了这种方法,尽管似乎是一个解决方法。
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(/#.*$/, '');
};
我有这个问题,我解决它使用JavaScript
location.reload(true);
你也可以使用
window.history.forward(1);
阻止用户登录后浏览器后退按钮退出应用程序。
这个'location.reload(true);'会放在javascripts文件中? – FedericoCapaldo 2017-05-21 16:04:28
是的,你可以把它放在任何js文件中 – yousef 2017-05-22 13:00:46
@FedericoCapaldo只要将它放在你想要重载用户页面时调用的任何函数中 – 2017-06-27 17:44:30
Cache.delete()也可以用来清除最新的chrome,firefox和opera浏览器的缓存。
当用户坐在代理后面时,可能会发生丑陋的事情。为了确保页面重新加载,只需将随机的val添加到您的网址。 – Teson 2011-04-19 21:15:15