在Javascript或C#中是否有一种方法可以判断某人使用的浏览器是否禁用了静态内容的缓存?
我需要能够测试浏览器是否针对缓存进行了优化。
答案 0 :(得分:2)
<强>更新强>
我对此问题进行了更多调查,您可以找到更详细的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
。
答案 1 :(得分:0)
我相信这应该有效:http://jsfiddle.net/pseudosavant/U2hdy/
基本上你必须预先加载一个文件并检查它花了多长时间。第二次应该不到10毫秒(在我自己的测试中)。您需要确保您正在测试的文件足够大,以至于需要一点点下载,但它不一定非常大。
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
答案 2 :(得分:0)
涉及客户端和服务器的另一种方法。