跨浏览器缓存脚本文件

时间:2013-04-12 16:44:15

标签: java javascript internet-explorer caching servlets

我希望将单个javascript文件缓存1小时,然后使用以下代码实现此目的。由于某种原因(可能是因为js文件是异步加载的),当js文件在缓存中时,该js文件中的函数不会在IE8中执行。所以我想在IE以外的所有浏览器中缓存js文件。我可以设置标题,以便js文件不仅仅为IE浏览器缓存吗?

try { 

       response.setHeader("Cache-Control", "max-age="+AIMConstants.CACHE_CONTROL_TIME_PERIOD); 

      } catch (Exception e) { 
       logger.info("Error in setting the cache control"); 
       e.printStackTrace(); 
      } 

注意:通过getScript调用在页面上多次加载js文件。因此,如果我仅为IE应用条件逻辑通过向文件附加变量来获取该js文件,则可能会多次加载该文件,这就是为什么我不在客户端添加随机变量来获取新副本的原因的JavaScript文件。我想使用header指令解决这个问题。任何其他涉及javascript的解决方案也是受欢迎的。

更新:我添加了Vary:*以防止缓存js文件,当我这样做时,所有浏览器都会获取js文件的新副本。我希望每次只有IE来检索js文件的新副本。所有其他浏览器都可以缓存js文件。

1 个答案:

答案 0 :(得分:0)

此代码仅适用于IE浏览器,每次从服务器检索一个新副本。

var jsCache = true;
        if($.browser.msie){
            jsCache = false;
        }
            if(!initialized){

                $.getScript('thatjsfileurl', function() { 
                 $("#welcome").pluginInit({
                    start:'newPage'
                 });  
                 initialized = true;
                },jsCache);
            }