Caching ist ein erstklassiges Werkzeug, führt allerdings hin und wieder zu seltsamen Erkenntnissen. Im konkreten Fall haben wir via Drupal Widgets erzeugt, die als iFrame eingebunden werden können. Sie aktualisieren sich mit einem kleinen JavaScript Snippet alle X Sekunden selbst. Soweit so gut!
Aber warum läuft ein JS-Timer im Internet Explorer iFrame im "eigentlich" neu geladenen Inhalt einfach weiter? Warum ändert sich der Inhalt nicht?
Der Internet Explorer cached den Inhalt der Seite, doch wie können wir dies verhindern, ohne das Caching der gesamten Seite zu beeinflussen?
Lösung:
Die Lösung liegt seitens Drupal in den Modulen context.module und context_http_headers.module. Mit Kontexten lassen sich Bedingungen und Ereignisse für (Teil-)Bereiche der Seite sowie entsprechende Reaktionen definieren. Über das context_http_headers.module Zusatzmodul lässt sich dieses Verhalten um HTTP-Header ergänzen.
Definieren wir also einen Kontext für die Widgets und fügen als HTTP-Header den folgenden Eintrag ein:
CACHE-CONTROL:NO-CACHE
EXPIRES:0
Und schon ist das Problem auch im geliebten Internet Explorer behoben.
Tipp:
Testen lassen sich die HTTP Header übrigens wunderbar mit dem Firefox Plugin: https://addons.mozilla.org/de/firefox/addon/live-http-headers/
Viel Spaß damit und lasst Euch nicht ärgern ;)