可以从托管服务器为JavaScript文件指定缓存长度或强制刷新吗?

时间:2014-03-31 19:38:44

标签: javascript caching

我们正在制作一个JavaScript库,它将被我们无法直接控制的其他域上的网页包含在内。理想情况下,我们喜欢缓存该文件,但也有能力告诉用户'浏览器(已加载包含我们的.js文件的网页)清除其缓存并重新加载该.js文件,我们是否需要推送错误修复或类似问题。如果按需提供'刷新是不可能的,因为我们要设置适当的生存时间,以便在合理可预测的时间间隔内获取更改。这可能吗?

编辑:虽然我完全了​​解在.js源网址中添加查询字符串或在内容更改时更改.js文件名称等技巧,但所有这些都是据我所知,需要更新包含.js文件的页面源(以及我不能控制的页面)。我想要的解决方案不需要在初始版本之后更改包含页面的HTML源代码'此处将此JavaScript包含(或类似)添加到您的网页'

2 个答案:

答案 0 :(得分:1)

由于您无法控制第三方网站,因此无法附加到查询字符串,这是强制更新脚本的简单方法。您可以控制服务器缓存脚本的时间长度,或者强制JS每次都需要更新,您可以这样做

这适用于网站所有者"此处,请在您的页面中包含此内容"

<script src="http://link/to/loadthisone.js"></script>

但是loadthisone.js只是一个小文件。服务器被告知永远不会缓存该文件,或者可能持续几个小时。它很小,所以不会太冒犯。这个加载了你不希望网站访问者每次都重新加载的更大的JS库。

<强> loadthisone.js

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://link/to/the/real/js/file.js?version=123'; // the library and version
head.appendChild(script);

然后,当您推送新版本时,您将更新此脚本中的版本号(手动或自动)。

如果您无法在服务器上进行任何更改,则可以使用PHP提供loadthisone.js并以此方式强制执行no-cache。

答案 1 :(得分:0)

您可以通过向网址添加查询字符串来“伪造”新请求:

<script src="http://eternalsite.com/js/script.js?v=1"></script>

如何以及何时发生这种情况必须由您的脚本控制。