我正在一个网站上工作,javascript在生产中缩小,但在开发中没有,所以我们有一个动态加载其他脚本的脚本。为了强制浏览器在可用时下载新的javascript版本,我们使用版本号重命名更新javascript文件。
问题在于Chrome以某种方式缓存旧文件的功能,即使它们不再被请求或存在。
加载javascript文件的文件(下面的源代码)没有版本化。
所以,作为一个例子,今天早上,我们的组合/缩小的javascript文件命名为:
的联合js.2.8.0.min.js 的
部署后,它被重命名为
的联合js.2.9.0.min.js 的
查看Chrome调试器,您可以轻松地看到2.9.0文件已被请求并提供,但该站点的功能就像2.8.0文件已加载,直到您清除缓存。
这可能是因为加载程序文件没有版本化,还是其他什么原因?
用于加载这些文件的javascript是:
(function loadJavascript() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","/loadjs.php", false);
xmlhttp.send();
// Get file paths
if (xmlhttp.status==200) {
fileNames = JSON.parse(xmlhttp.responseText);
}
// Load JS
var file = document.createElement('script');
file.setAttribute("type","text/javascript");
file.setAttribute("data-main","/main");
file.setAttribute("src", "/"+fileNames.js);
document.getElementsByTagName("head")[0].appendChild(file);
// Load CSS
if( typeof fileNames.css === 'string' ) {
fileNames.css = [fileNames.css];
}
for (fileName in fileNames.css) {
file = document.createElement("link");
file.setAttribute("rel", "stylesheet");
file.setAttribute("type", "text/css");
file.setAttribute("href", fileNames.css[fileName]);
document.getElementsByTagName("head")[0].appendChild(file);
}
}());
答案 0 :(得分:0)
事实证明,在加载器脚本中添加时间戳可以解决问题。
<script language="javascript" type="text/javascript">
var epoch = (new Date).getTime();
document.write("<script language='javascript' type='text/javascript' src='/load.js?t="+epoch+"'><\/script>");
</script>