如何判断javascript是否在缓存中重新加载

时间:2013-03-22 14:32:41

标签: javascript

我遇到了javascript被缓存在用户浏览器上的问题,并且在更改投入生产时没有得到更新。由于该网站使用多个嵌入式iframe,因此仅使用f5是不够的。我使用的解决方案是先加载一个脚本,获取我需要的js文件的所有修改日期,然后将这些日期附加到每个页面的js文件中。每个页面看起来像这样:

    <script type="text/javascript" src="get_dates"></script>//returns the dates for each file in array
    <script type="text/javascript">
        document.writeln('<script type="text/javascript" src="' + some_path + '?Mod=' + date_array[pos] + '"></script>...repeat for all scripts
    </script>

我的问题是:

  1. 在mod日期发生变化之前,如何判断脚本是否被缓存? (我仍然希望它们被缓存,如果它们被更新则不是这样)
  2. html页面的缓存将如何影响这个?
  3. 使用document.writeln(()会影响缓存吗?即使你编写完全相同的脚本,它们仍会被缓存吗?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

将版本控制应用于每个生产版本中的js文件。 让我们说

Release1:

<script src="source.js?v1.0"></script>

Release2:

<script src="source.js?v2.0"></script>

依旧......

这样您仍然允许客户端缓存您的js文件,但是在特定版本上。

答案 2 :(得分:0)

  

如何在mod日期更改之前判断脚本是否已缓存?

只需将到期时间设置为无穷大(或者说,1年 - 足够长)。每次Mod参数更改时,都会请求新文件。

  

html页面的缓存将如何影响这个?

完全没有。但是,get_dates脚本的缓存将会出现。

  

使用document.writeln(()会影响缓存吗?即使你编写完全相同的脚本,它们仍会被缓存吗?

不,它不会影响任何事情。结果 - 引用外部脚本的<script>节点将是相同的。

另请阅读How to force browser to reload cached CSS/JS files?