 <p><strong>UPDATE</strong></p> <p>I did a bit more investigation of the problem and you can find more detailed <a href="http://podlipensky.com/2012/02/how-to-check-if-browser-caching-disabled/" rel="nofollow">answer in my recent post</a> Note, the solution described below (initially) is not cross browser solution.</p> <p>Not sure if it helps, but you can try the following trick: 1. Add some resource to you page, let's say it will be javascript file <code>cachedetect.js</code>. 2. The server should generate <code>cachedetect.js</code> each time someone request it. And it should contain cache-related headers in response, i.e. if browser's cache is enabled the resource should be cached for long time. Each <code>cachedetect.js</code> should look like this:</p> <pre><code>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 &lt;script&gt; tag dynamically to &lt;header&gt; 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(); </code></pre> <p>After that you can simply check for <code>cacheEnabled === true</code> or <code>cacheEnabled === false</code> after some period of time.</p>