Chrome缓存重命名为javascript文件

时间:2014-01-29 20:49:50

标签: javascript google-chrome caching

我正在一个网站上工作,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);
    }
}());

1 个答案:

答案 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>