我已经使用 Symfony2 在 PHP 中创建了一个动态 javascript (test.js) 文件,但我不希望浏览器缓存该文件。当我在一个页面中插入脚本 test.js 两次时,第一次是直接从服务器加载,但第二次是从浏览器缓存加载脚本。这个问题出现在 Chrome 和 IE 上,在 Firefox 上一切正常。
这是一个实例:http://goo.gl/sggKks (如果您看到 3 个相同的数字,则表示它是从缓存加载的,如果 3 个不同的数字,则表示它是从服务器加载的)
我尝试了许多不同的 Header() PHP 设置,但它没有改变任何内容。
PS:我无法使用像 test.js 这样的随机数?r=923902390 来完成我需要另一个解决方案的技巧
最佳答案
想法 1(基本)
在客户端的 JavaScript 中生成内容随机性。 让 javascript 更加有效。 这或许就是应该做的事情。就比较合理了。 除非这是不可能的。
想法 2(不太合理且可能过度设计)
让脚本检查自己的 url 并加载其自身的另一个(随机)副本。
// self contained auto cloning facility
(function(){
// see http://www.2ality.com/2014/05/current-script.html
var currentScript = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
// get script tag url (self)
var url = currentScript.getAttribute('src');
// url doesn't have random part
if(!url.match(/\?\d+$/)) {
// create new script tag with random part
var s = document.createElement('script');
s.src = url+'?'+Math.round(Math.random()*1000000000);
document.body.appendChild(s);
// engage wild brakes
throw "stop";
}
})();
// do the actual job below this point
关于javascript - 禁用动态创建的 Javascript 的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360956/