javascript - 禁用动态创建的 Javascript 的缓存

标签 javascript php symfony caching browser-cache

我已经使用 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/

相关文章:

javascript - 什么时候或谁将 resolve 和 reject 函数传递给 JS promise?

Javascript insideWidth 不起作用

javascript - 我应该在我的 HTML 中放入什么来确保用户获得我页面的最新版本,而不是旧版本?

PHP 和 python 节俭

php - 删除一行后进入同一个数据页

symfony - 原则 2 使用选项数组搜索数组字段

javascript - 替换较大字符串的一小部分

php - LAST_INSERT_ID Mysql 不工作

php - 如何在 Symfony 的自定义错误页面中显示异常文本?

forms - 嵌入表单的持久性