iframe zeigt veralteten Inhalt an

  • Hallo zusammen,


    ich bin neu hier und natürlich wegen eines aktuellen Problems hier gelandet - in der Hoffnung, dass mir jemand helfen kann...


    Situation: Ich habe vor bald 10 Jahren ein kleines Info-System zusammen gebastelt, auf dessen Haupt-HTML-Seite drei iframes eingebettet sind. Die in den iframes anzuzeigenden html-Dateien werden mehrmals am Tag neu generiert und auf den Server hochgeladen. Die Hauptseite wird regelmäßig neu geladen:


    ===========

    <head>

    <title>SCMK</title>

    <script>

    <!--

    function timedRefresh(timeoutPeriod) {

    setTimeout("location.reload(true);",timeoutPeriod);

    }


    window.onload = timedRefresh(60000);


    // -->

    </script>

    </head>

    ===========


    Seit einiger Zeit funktioniert die Sache nicht mehr zuverlässig. Obwohl die neuen html-Seiten auf dem Server liegen, zeigen die iframes veraltete Inhalte an. Im Produktivbetrieb nutzen wir Firefox. Das Cachemanagement habe ich beim FF ausgeschaltet und den Cache auf 0 gesetzt. Außerdem habe ich browser.cache.check_doc_frequency auf 1 gestellt. Standard ist 3 für "automatisch oder wenn erforderlich" und 1 steht für "jedes Mal".


    Heute hat es wieder mal nicht geklappt und ich konnte eine sehr erstaunliche Beobachtung machen: Wenn ich auf F5 gedrückt habe, ist im iframe ganz kurz der neue Inhalt angezeigt worden und keine halbe Sekunde später wieder der veraltete. Erst als ich ans Ende in der URL-Zeile gegangen bin und RETURN gedrückt habe, hat der iframe dauerhaft die aktuell auf dem Server liegende html-Seite angezeigt.


    Mit Vivaldi fast das gleiche Verhalten, nur hilft hier auch das RETURN in der URL-Zeile nicht. Der neue Inhalt blitzt kurz auf und dann kommt wieder die veraltete Version. Erst wenn ich die html-Seite direkt in einem eigenen Fenster aufrufe, kommt die aktuelle Version und wird dann auch im Standardfenster im iframe korrekt angezeigt.


    Irgendwie scheint das immer noch ein cache-Problem zu sein. Hat jemand einen Tipp, wie ich v.a. bei Firefox erzwingen kann, dass wirklich die aktuellen Dateien dargestellt werden?


    Vielen Dank schon mal im Voraus,

    Klaus

  • Wahrscheinlich gibt es da mehrere möglichkeiten.

    Du kannst hinter den Link ein Timestamp mit dran hängen,so wird eigentlich sicher gestellt das er den Link jedesmal neu laden tut und nicht auf der Cache zugreift.


    Zusätzlich könnte man auch die metatags erweitern

    Code
    <meta http-equiv="cache-control" content="no-cache" />

    Es kommen bestimmt noch mehr möglichkeiten. An besten alles mal ausprobieren,für mch höhrt sich das aufjedenfall auch nach Cache problem an

  • Hallo Basti,


    dank dir schön für die schnelle Antwort. Meinst du so etwas?


    <iframe src="links.html#<?php echo time() ?>


    Und den metatag in der äußeren html-Seite oder im code für die iframe-htmls?


    VG, Klaus

  • Meinst du so etwas?


    <iframe src="links.html#<?php echo time() ?>

    Ja so in der art

    Und den metatag in der äußeren html-Seite oder im code für die iframe-htmls?

    Ein sehr gute Frage die ich mir gerade auch stelle.Eigentlich die Seite wo der iframe eingebunden ist.So kenne ich das von herkömlichen Seiten ohne iframe. Nur ob das mit iframe anders ist und der metatag auch auf der iframeseite geändert werden muß ist eine gute Frage. Fals da keiner einer genauere Antwort hat würde ich doch einfach mal beides testen.Kaputt machen kann man damit ja nix.

  • Ich würde window.location.href = 'aufzurufende-seite.html?' + (Date.now()).toString(); verwenden.

    Das Problem ist, dass manche Browser(-Versionen) trotz deaktiviertem Cache meinen, die gleichen Dateien nicht komplett neu laden zu müssen.

    Durch den Timestamp über Date.now() erhält der Browser immer einen veränderten Request und wird gezwungen, die Seite neu zu laden.


    Weiterhin würde ich die Funktion im setTimeout() anders lösen, weil ich mir auch grad nicht ganz sicher bin, ob in Deiner Variante der Parameter überhaupt Relevanz hat:

    JavaScript
    setTimeout(function() {
            window.location.href = "seite.html?" + (Date.now()).toString();
        }
        , timeoutPeriod
    );

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!