2013-04-12 279 views
0

我想单个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(); 
     } 

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

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

+0

将相同的“随机”变量添加到页面上的所有GetScript调用中。然后它会在页面内缓存,但不会跨页面加载。 –

回答

0

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

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

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