Ottmar von der Heide: FF Mozilla führt iframe nicht aus

Hallo,

ich bin ein relativ neuer HTML / Java-Script Programmierer und beisse mir gerade an folgendem Problem die Zähne aus:

In einem Frame werden mit JS dynamisch Informationen berechnet. Anhand der Ergebnisse wird eine spezielle Datei in ein IFrame geladen. Dies wird mitunter öfter ausgeführt, ohne dass die Seite gewechselt wird. In Reload zu gegebener Zeit sollte die richtige Datei im iFrame neu laden.

Der Code sieht folgendermaßen aus:

.....
<body onload="Event_init()">

<script type="text/javascript">
.....
var docref = Ergebnis diverser Berechnungen;
.....

document.write(docref); // nur zu Testzwecken

document.write('<iframe src="' + docref + '" width="100%" height="100%" frameborder="0" name="Document">');
document.write('<p><a href="' + docref + '">Document</a></p></iframe>');

</script>
.....

Im IE6 funktioniert das auch alles wunderbar.

Der FF Mozilla funktioniert nur teilweise:
-> Beim ersten Öffnen der Seite ist alles ok.
-> Das Docref wird offenbar immer richtig berechnet (der testweise eingeführte write Befehl liefert immer das richtige Ergebnis)
Bei einem Reload weigert sich der FF Mozilla aber hartnäckig, die Seite zu aktualisieren und das richtige Refernenzdokument zu laden. Es kommt auch keine Fehlermeldung. Es wird lediglich als zuerst geladene Referenzdokument weiterhin im iFrame angezeigt.

Kennt jemand das Problem? Har jemand 'ne Idee?

PS: Mit meiner ersten Anfrage im Forum möchte ich es nicht versäumen, ein dickes fettes Lob an die Autoren von SelfHTML auszusprechen.

  1. Hallo,
    Hm, also mir fällt dazu folgendes sein:

    Falls ich Dich richtig verstanden habe:

    Du hast ein Iframe, und nach einer bestimmten Zeit wird das Ziel dieses Iframes neu berechnet und dann eingesetzt?
    Wie änderst Du das Iframe-Ziel? Mit doument.write?

    Dann ist das möglicherweise Dein Problem:
    "document.write()" funktioniert (so wie man es üblicherweise will) nur während das Dokument aufgebaut wird (also beim Laden der Seite).

    Kommt ein "document.write()" NACH dem Laden eines Dokumentes, wird ein neus Dokument dafür geöffnet.

    Möchtest Du die Source eines Iframes ändern nachdem dieser schon ins Dokument eingebunden wurde, kannst Du das z.b. mit:

    document.getElementById("ID_Des_IFRAMES").src = "http://www.domain.de";

    oder

    document.frames.nameDesIframes.src = "http://www.domain.de"

    Wenns das nicht ist: Vielleicht wird die HTML-Seite die im Iframe angezeigt wird gecached? Vielleicht wenn Du einen ZufallsParameter anhängst

    document.getElementById("ID_Des_IFRAMES").src = "http://www.domain.de/seite.html?rndValue="+Math.random();

    Hoffe, das hilft Dir weiter.

    Grüße,
    Jörg

    1. Hallo Jörg,
      vielen Dank für Deine Hilfe, hat aber leider nichts genützt.

      Du hast ein Iframe, und nach einer bestimmten Zeit wird das Ziel dieses Iframes neu berechnet und dann eingesetzt?
      Wie änderst Du das Iframe-Ziel? Mit doument.write?

      Ja, wobei der reload natürlich nicht fehlt bzw. fehlen darf.
      Das Szenario ist wie folgt:
      1. Anwender öffnet Seite
      2. für die Variable 'docref' wird ein Startwert berechnet.
      3. iframe wird mit
         document.write('<iframe src="' + docref + '".....
         korrekt berechnet.
      4. Der Anwender ändert mit Clicks auf Menüeinträge die Variable docref.
      5. Nach Änderung der Variable erfolgt ein
         window.location.reload()
      6. mittels diverser Tests (alert's und write's) kann ich zeigen, dass die neue Adresse definitiv richtig berechnet ist und der Befehl unter Punkt 3 tatsächlich richtig aufgerufen wird. Fehler in der Berechnung des docref können ausgeschlossen werden.
      7. Sowohl unter Mozilla als auch unter IExplorer wird die Seite offenbar neu aufgebaut; denn baue ich alert-Befehle vor'm Aufbau der Seite ein, ist die Seite leer.
      8. Nach Neuaufbau zu sehen:
      ->IE: korrekte Seite
      ->Mozilla: alte Seite wird neu geladen.

      Dann ist das möglicherweise Dein Problem:
      "document.write()" funktioniert (so wie man es üblicherweise will) nur während das Dokument aufgebaut wird (also beim Laden der Seite).

      Kommt ein "document.write()" NACH dem Laden eines Dokumentes, wird ein neus Dokument dafür geöffnet.

      Möchtest Du die Source eines Iframes ändern nachdem dieser schon ins Dokument eingebunden wurde, kannst Du das z.b. mit:

      document.getElementById("ID_Des_IFRAMES").src = "http://www.domain.de";

      Die Umstellung führt zum gleichen Effekt. Dies gilt auch dann, wenn ich eine Zufallszahl anhänge, wie vorgeschlagen.

      Besonders merkwürdig:
      Wenn ich NACH der Neuberechnung den Wert auslese
      alert(document.getElementById("ID_Des_IFRAMES").src)
      dann steht in der Promptbox tatsächlich die korrekte Adresse von dem Dokument, die der Browser eigentlich anzeigen müsste.

      Im Browser zu sehen ist aber nach wie vor die alte Seite.
      Wer Lust hat, kann den Effekt - wenn er den FF Mozilla einsetzt - auf der Webseite
      http://www.vdh-bits.com
      beobachten. Ich versuche gerade, die Seite aufzubauen.

      1. hi,

        Wer Lust hat, kann den Effekt - wenn er den FF Mozilla einsetzt - auf der Webseite
        http://www.vdh-bits.com
        beobachten. Ich versuche gerade, die Seite aufzubauen.

        Wenn du gerade erst beim Aufbauen der Seite bist - dann tu doch ihr, dir und vor allem ihren späteren Besuchern den Gefallen, auf Frames und ihre zahlreichen Nachteile zu verzichten.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }