回答
UPDATE
我做的問題有點多的調查,你可以找到更詳細的answer in my recent post 注意,下面描述的解決方案(最初)是不是跨瀏覽器解決方案。
不知道它是否有幫助,但你可以嘗試以下技巧: 1.添加一些資源給你的頁面,讓我們說這將是JavaScript文件cachedetect.js
。 2.每次有人請求時,服務器應該生成cachedetect.js
。並且它應該包含與緩存相關的響應頭,即如果啓用了瀏覽器緩存,資源應該被緩存很長時間。每個cachedetect.js
應該是這樣的:
var version = [incrementally generated number here];
var cacheEnabled; //will contain the result of our check
var cloneCallback;//function which will compare versions from two javascript files
function isCacheEnabled(){
if(!window.cloneCallback){
var currentVersion = version;//cache current version of the file
// request the same cachedetect.js by adding <script> tag dynamically to <header>
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "cachedetect.js";
// newly loaded cachedetect.js will execute the same function isCacheEnabled, so we need to prevent it from loading the script for third time by checking for cloneCallback existence
cloneCallback = function(){
// once file will be loaded, version variable will contain different from currentVersion value in case when cache is disabled
window.cacheEnabled = currentVersion == window.version;
};
head.appendChild(script);
} else {
window.cloneCallback();
}
}
isCacheEnabled();
之後,你可以在一段時間後簡單地檢查cacheEnabled === true
或cacheEnabled === false
。
我喜歡這種方法,但我還沒有完全理解它。我會給它一個鏡頭,讓你知道我找到了什麼。謝謝您的幫助! – gaffleck 2012-02-09 18:29:49
基本上它會多次加載相同的腳本(但使用不同的版本變量),並查看版本變量是否已更改。如果文件直接來自服務器(因爲它每次生成該文件),它將被改變,如果它來自瀏覽器緩存,它(版本變量)將是相同的。 – 2012-02-09 20:12:05
我認爲這應該工作:http://jsfiddle.net/pseudosavant/U2hdy/
基本上你要預加載文件兩次,並檢查了多長時間。第二次應該少於10ms(在我自己的測試中)。你會希望確保你正在測試的文件足夠大,需要稍微下載,但它不一定非常大。
var preloadFile = function(url){
var start = +new Date();
var file = document.createElement("img");
file.src = url;
return +new Date() - start;
};
var testFile = "http://upload.wikimedia.org/wikipedia/en/thumb/d/d2/Mozilla_logo.svg/2000px-Mozilla_logo.svg.png"
var timing = [];
timing.push(preloadFile(testFile));
timing.push(preloadFile(testFile));
caching = (timing[1] < 10); // Timing[1] should be less than 10ms if caching is enabled
時間可能因設備的網絡可靠性而異(即使對於兩個相應的請求)。我建議避免這種檢查... – 2012-02-09 01:05:17
我進一步研究它,是的,這方面的任何事情都將成爲黑客攻擊。我嘗試了各種確定下載時間的方法,如果它不是緩存命中,並且持續時間大於10ms,並且如果是,則持續時間小於10ms,FWIW。 – pseudosavant 2012-02-09 03:07:01
另一種涉及客戶端和服務器的方法。
- 撥打一個頁面/端點,它將設置一個隨機唯一的ID作爲響應。設置緩存頭此頁/端點
- 再犯同樣的電話,這將設置不同的唯一編號
- 如果數字匹配它從緩存中來,或是從服務器
- 1. 禁用瀏覽器緩存
- 2. 如何檢測圖像在瀏覽器中是否被禁用?
- 3. 檢查瀏覽器Cookie是否被禁用
- 4. 如何禁用瀏覽器緩存?
- 5. 檢查瀏覽器是否禁用了離線應用程序緩存
- 6. 檢查瀏覽器是否使用緩存的SWC/SWF?
- 7. 是否可以使用代碼禁用瀏覽器緩存?
- 8. 檢查瀏覽器的緩存是否爲js文件
- 9. 如何檢查/測試應用程序是否不在瀏覽器上緩存?
- 10. 如何通知Javascript是否在瀏覽器中被禁用
- 11. ASP.Net MVC禁用瀏覽器緩存(firefox)
- 12. ROR + MVC禁用瀏覽器緩存
- 13. 如何檢測Flash Player是否在使用JavaScript的瀏覽器中被禁用?
- 14. 是否可以在瀏覽器中禁用檢查元素?
- 15. 如何檢查瀏覽器是否存在?
- 16. Javascript(如何檢查Id是否存在於IE7瀏覽器中)
- 17. ,如果圖像是在瀏覽器緩存中的JavaScript檢查
- 18. 後負荷:檢查如果圖像是在瀏覽器緩存
- 19. HTTP HEAD請求是否會被電話/瀏覽器緩存
- 20. Swift - Parse檢查PFFile是否被緩存
- 21. 儘管瀏覽器緩存被禁用,但子SWF仍在緩存
- 22. 如何禁用瀏覽器瀏覽器?
- 23. 如何檢測瀏覽器是否使用網站的緩存版本?
- 24. 完全禁止瀏覽器緩存
- 25. 有什麼辦法來檢測瀏覽器緩存是否被清除
- 26. 如何使用AngularJS檢測Cookie在瀏覽器中被禁用
- 27. Chrome瀏覽器「檢查」標尺 - 禁用
- 28. 如何檢查無論瀏覽器是否禁用了某個控件?
- 29. 檢測瀏覽器的緩存是否已滿
- 30. 如何檢查用戶是否使用Android瀏覽器?
打算什麼你的意思是說「瀏覽器爲緩存而優化」?它是否支持etag或某些特定的緩存頭? – 2012-02-09 00:39:34
您可以在瀏覽器設置中禁用靜態文件的存儲。有什麼方法可以測試該存儲是否被禁用? – gaffleck 2012-02-09 00:41:34