我有一个html页面正在加载多个iframe,其中嵌入了从Tomcat服务器页面(.jsp)创建的动态图像。这与Chrome和Firefox预期的一样,但由于某种原因,IE显示所有图像相同(作为第一个图像)。我创造了一个例子:
http://coupondiscounts.com/jsImageTest.html
jsImageTest.html - 此页面使用Javascript一次一个地在单独的iframe中加载6个testImageFrame.html页面实例。
testImageFrame.html - 这是在所有iframe中加载的页面。它只包含一个写出当前时间的JavaScript块和一个img标记。 img由不同服务器上的.jsp页面动态生成。它应该是黑色背景上的白色盒子。在框中是当前时间(来自使用Java的Tomcat服务器)和随机创建的0和0之间的双倍。 1。
会发生什么(在IE中):该页面几乎立即加载了四个相同的iframe。根据您的机器速度,JavaScript时间可能会有一两秒的变化。图像的时间将与随机数相同。即使最后两个iframe在其他iframe之后加载5秒和10秒(使用JavaScript setTimeout())也是如此。
应该发生什么(就像在Chrome和FF中一样):页面加载相同的4个iframe,但图像中的随机数会有所不同。图像中的时间偶尔也会跨越一秒。
任何人都知道这里发生了什么? IE正在做一些奇怪的缓存吗?图像标题具有“无缓存”,“无存储”以及所有这些。我已经在IE6和7上尝试过了。您可以使用“下一步”按钮创建另一个iframe。在IE中,图像始终相同。
注意:我真的不需要iframe,只需要图像,但如果我只使用img标签,问题也会出现在Chrome和FF中。我也不需要动态加载这些iframe,我只是想进一步抽象问题并允许后两个图像的延迟加载。
答案 0 :(得分:1)
MSIE在缓存方面非常棒。这里的问题是它不遵守执行JS代码的“父”HTML页面标题中指定的缓存指令。
您可以通过在查询字符串中添加时间戳来解决您的特定问题。
ifr.src = 'testImageFrame.html?' + new Date().getTime();
这个迫使 MSIE从JS发起一个全新的GET请求。
答案 1 :(得分:0)
传递缓存中断变量,或设置无缓存头。
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
%>