2010-06-14 102 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