2010-06-14 8 views
5

Ich habe eine HTML-Seite, die mehrere Iframes lädt, in die dynamische Bilder eingebettet sind, die von einer Tomcat-Serverseite (.jsp) erstellt wurden. Dies funktioniert wie von Chrome und Firefox erwartet, aber aus irgendeinem Grund zeigt IE alle Bilder gleich an (wie das erste Bild). Ich habe ein Beispiel erstellt:
IE Problem beim dynamischen Image-Caching?

http://coupondiscounts.com/jsImageTest.html

jsImageTest.html - Diese Seite lädt einfach 6 Instanzen der testImageFrame.html Seite in separaten iframes one-at-a-time, mit Javascript.
testImageFrame.html - Dies ist die in allen Iframes geladene Seite. Es enthält nur einen JavaScript-Block, der die aktuelle Uhrzeit und ein img-Tag ausgibt. Das IMG wird dynamisch von einer JSP-Seite auf einem anderen Server generiert. Es sollte eine weiße Box auf einem schwarzen Hintergrund sein. In der Box sind die aktuelle Zeit (aus dem Tomcat-Server mit Java) und ein zufällig erstellten Doppeln zwischen 0 & 1.en

Was (in IE) passiert: Die Seite fast sofort vier identischen iframes lädt. Abhängig von der Geschwindigkeit Ihres Computers können die JavaScript-Zeiten um ein oder zwei Sekunden variieren. Die Zeiten der Bilder sind alle gleich wie die Zufallszahl. Dies gilt auch für die letzten beiden Iframes, die 5 und 10 Sekunden nach den anderen geladen werden (mit JavaScript setTimeout()). Was passiert (wie in Chrome und FF): Die Seite lädt die gleichen 4 iframes, aber die Zufallszahlen in den Bildern werden unterschiedlich sein. Die Zeiten in den Bildern betragen gelegentlich auch eine Sekunde.

Wer hat eine Ahnung, was hier vor sich geht? Macht IE etwas seltsames Caching? Der Image-Header hat "No-Cache", "No-Store" und all das. Ich habe es auf IE6 und 7 versucht. Sie können die Schaltfläche "Weiter" verwenden, um einen anderen Iframe zu erstellen. In IE sind die Bilder immer gleich.

Hinweise: Ich brauche keine iframes, nur die Bilder, aber wenn ich nur img-Tags verwende, erscheint das Problem auch in Chrome und FF. Ich muss diese Iframes auch nicht wirklich dynamisch laden, ich habe nur versucht, das Problem weiter zu abstrahieren und eine verzögerte Belastung für die letzten 2 Bilder zu erlauben.

Antwort

0

Übergeben Sie eine Cache-Breaking-Variable oder setzen Sie einen No-Cache-Header.

IE (kein Wortspiel beabsichtigt)

<% 
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 wie OP schon gesagt hat sie diese Schritte versucht. – Jaymz

+0

... Unded downvote für setDateHeader :) – Jaymz

+1

Ich sagte auch eine Cache-Breaking-Variable. Viele Browser werden eine Seite nicht mit '?' In der URL zwischenspeichern. Also könnte er verwenden: http://hostname.com/mypage.jsp?Zeit = irgendwann Bearbeiten: TY :) –

1

MSIE ist toll, wenn es um das Caching kommt. Das Problem hier ist, dass es die Caching-Anweisungen, wie in den Kopfzeilen der "übergeordneten" HTML-Seite angegeben, von denen der JS-Code ausgeführt wird, nicht befolgt.

Ihr spezielles Problem kann durch Hinzufügen eines Zeitstempels zur Abfragezeichenfolge gelöst werden.

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

Diese Kräfte MSIE auf eine völlig neue GET-Anforderung von JS zu schießen.

+0

Dies scheint die gleiche Antwort zu sein, die wir bereits besprochen haben. – rdevitt

+0

Wenn dies das Problem nicht gelöst hat, dann müssen Sie vielleicht den Cache löschen, bevor Sie erneut testen :) – BalusC