2010-06-14 147 views
5

我有一个html页面正在加载多个嵌入了从Tomcat服务器页面(.jsp)创建的动态图像的iframe。这可以从Chrome和Firefox中按预期工作,但由于某些原因,IE显示的所有图像都是相同的(如第一张图像)。我创建了一个例子:
IE动态图像缓存问题?

http://coupondiscounts.com/jsImageTest.html

jsImageTest.html - 本页面只需加载testImageFrame.html页的6个实例在单独的I帧一处,一时间,使用Javascript。
testImageFrame.html - 这是加载到所有iframe中的页面。它只包含一个写出当前时间的JavaScript块和一个img标签。 img是由不同服务器上的.jsp页面动态生成的。它应该是黑色背景上的白色框。在框中是当前时间(从使用Java Tomcat服务器)和随机生成的双0之间

会发生什么(在IE):页面几乎立即载入四个相同的I帧。根据机器的速度,JavaScript时间可能会相差一两秒。图像的时间将与随机数一样。即使对于其他两个加载5秒和10秒的最后两个iframe,使用JavaScript setTimeout()也是如此。
会发生什么(如在Chrome和FF中所做的那样):页面加载相同的4个iframe,但图像中的随机数字会有所不同。图像中的时间偶尔还会跨越一秒。

任何人都知道这里发生了什么? IE做了一些奇怪的缓存?图像头包含“no-cache”,“no-store”等等。我已经在IE6和7上试过了。你可以使用“Next”按钮创建另一个iframe。在IE中,图像总是相同的。

评论:我并不是真的需要iframe,只是图片,但如果我只使用img标签,问题也出现在Chrome和FF中。我也不需要动态加载这些iframe,我只是试图进一步抽象这个问题,并允许延迟加载后一张图片。

回答

0

传递缓存中断变量,或设置no-cache头。

IE(没有双关语意)

<% 
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
%> 
+0

-1由于OP已经声明他们已经尝试了这些步骤。 – Jaymz 2010-06-14 21:41:57

+0

... Undid downvote for setDateHeader :) – Jaymz 2010-06-14 21:43:02

+1

我也说过一个缓存中断变量。许多浏览器不会在URL中使用'?'来缓存页面。所以他可以使用:http://hostname.com/mypage.jsp?time = sometime编辑:TY :) – 2010-06-14 21:44:01

1

MSIE是了不起,当涉及到高速缓存。这里的问题是,它没有遵守JS代码执行的“父”HTML页面标题中指定的缓存指令。

您可以通过向查询字符串添加时间戳来解决您的特定问题。

ifr.src = 'testImageFrame.html?' + new Date().getTime(); 

力量 MSIE火从JS一个全新的GET请求。

+0

这似乎是我们已经讨论过的相同答案。 – rdevitt 2010-06-15 17:11:28

+0

如果这没有解决问题,那么也许你需要在重新测试之前清除缓存:) – BalusC 2010-06-15 17:16:47