2008-11-03 80 views

回答

12

你可以做到這一點的一種方法是在頁面中包含生成頁面的時間,然後使用一些javascript來比較本地時間與生成頁面的時間。如果時間與閾值不同,則頁面來自緩存。問題在於,如果客戶端計算機的時間設置不正確,雖然可以通過使客戶端在生成頁面的請求中包含當前系統時間來解決此問題,然後將該值發送回客戶端。

+0

該死的,你打我吧,豎起大拇指! – Bogdan 2008-11-03 21:46:21

+0

我真的在想這個解決方案。我希望在文檔中更容易一些,但也許它不存在:) – 2008-11-03 21:52:36

+0

如果您正在尋找它以符合任何一致性,這不是一個好的答案。在緩慢加載時間,服務器本地時間與客戶端本地時間或客戶端系統日期不正確之間,您無法保證該測試的準確性。 – 2016-11-04 13:03:38

1

不是直接的,一些瀏覽器可能會有一些自定義命令。

有一個解決方法,可以做你想做的。使用cookie存儲第一次訪問的timestamp,然後使用META HTTP-EQUIV設置文件緩存的時間長度(cacheLength)。如果當前時間在從timestamptimestamp+cacheLength的時間段內,則視爲從緩存加載。緩存過期後,重置cookie時間。

2

使用XmlHttpRequest,您可以拉起當前頁面,然後檢查響應的http標頭。

最好的情況是隻做一個HEAD請求,然後檢查頭文件。

這樣做看看http://www.jibbering.com/2002/4/httprequest.html

+0

我正要提出同樣的問題,但問題表明他想查看當前加載的頁面是否被緩存,如果您關閉了XHR,那麼這將表示下一個請求,而不是當前的請求。 – 2008-11-03 21:56:18

13

我開始與答案「丹尼爾」上面了,但我擔心,通過慢速連接我可能會遇到一些延遲問題的一些例子。

這是最終爲我工作的解決方案。在服務器端,我添加一個cookie refCount並將其值設置爲0.在java腳本中的文檔加載中,我首先檢查refCount,然後增加它。當檢查refCount是否大於1時,我知道該頁面被緩存。所以這個作品就像一個魅力。

感謝大家帶領我到這個解決方案。

3

雖然這個問題已經4歲了。我想我會使用jQuery和History插件添加我的2美分。

$(document).ready(function() 
{ 
    $('body').append('<div class="is_cached"></div>'); 
}); 

History.Adapter.bind(window,'statechange',function(){ 
    if($('.is_cached').length >= 1) 
    { 
     alert('this page is cached'); 
    } 
}); 

當文檔第一次加載時。附加一個新的div.is_cached。加載緩存頁面時沒有兼容的方式來執行JavaScript,但您可以監視歷史記錄更改。當歷史記錄發生變化並且存在div.is_cached時,用戶正在查看已緩存的分頁。

相關問題