强制JS缓存清除,无需服务器端编码

时间:2014-07-09 14:58:52

标签: javascript caching

我正在寻找清除登录页面上某些JavaScript文件的缓存。我们的网络语言非常陈旧,我坚持使用它。没有PHP,Rails,或任何有趣或奇特的东西。

希望清除JS文件上的缓存
1.我不能使用服务器端代码 2.我无法手动附加查询字符串 3.我发现了提到的元标记,但注意到严格引用了缓存HTML。

我唯一的想法是在标题中使用JavaScript来处理HTML文档的文本,然后再将文件加载到页面下方的标记中。虽然我无法成功地使用它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我假设您的代码中目前有这样的内容:

<script type="text/javascript" src="/site/js/script.js"></script>

如果你不能改变它,你就会被困住。浏览器会在看到标记后立即加载。没有一种可靠的方法可以阻止浏览器这样做,或者在浏览器对其进行操作之前操纵标记。

但是,如果你可以改变它,对我来说最明显的解决方案是将其取出,而是动态地注入一个带有缓存破坏URL的脚本标记。例如(未经测试,但你明白了):

<script>
  var scriptUrl = "/site/js/script.js",
      cacheBustingUrl = scriptUrl + "?" + Date.now(),
      newScriptElement = document.createElement("script")
  ;

  newScriptElement.setAttribute("src", cacheBustingUrl);
  document.body.appendChild(newScriptElement);
</script>

这应该在页面末尾附加一个像<script src="/site/js/script.js?1404918388711"></script>这样的新脚本元素,浏览器将像任何其他脚本标记一样加载。

顺便说一下,如果你已经有了jQuery,那就更简洁了一下:

<script>
  var scriptUrl = "/site/js/script.js",
      cacheBustingUrl = scriptUrl + "?" + Date.now()
  ;

  $("<script>").attr("src", cacheBustingUrl).appendTo(document.body);
</script>