我想使用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