Steff Maier: iFrame dynamisch erzeugen - wie precachen?

Hallo liebes Forum.

Letztens habe ich ein kleines Lightbox-Skript geschrieben, mit dem ich auf Link-Klick ein halbtransparentes DIV-Layer erzeuge sowie ein darin zentriertes Bild. Damit ich auf die Höhe und Breite des Bildes zugreifen konnte musste ich es erst vorladen lassen; erst danach konnte ich mit dem Skript fortfahren:

  
 function loadImage() {  
  var img = new Image();  
  img.src = foo;  
  if (img.complete) {  
   openLightBox();  
  } else {  
   img.onload = openLightBox;  
  }  
 }  

Nun möchte ich etwas ähnliches machen; nur möchte ich keine Bilder anzeigen lassen sondern andere HTML-Seiten. Ich habe mir gedacht ich löse das über ein iFrame.

  
 var div0 = document.createElement("div");  
 var iframe = document.createElement("iframe");  
 iframe.src = foo;  
 div0.appendChild(iframe);  
 document.body.appendChild(div0);  

Soweit funktioniert das auch schon; die unter "foo" verlinkte Seite wird wie gewünscht in einem Layer über der Seite geöffnet.
Nun sollte ich aber die Eigenschaften dieser verlinkten Seite auch noch abrufen können, und da habe ich das Problem, daß während der Ausführung des Skripts die Seite ja noch nicht im Cache ist.

Das merke ich daran, dass wenn ich an das Skriptende "alert(top.frames[0].location);" anfüge bekomme ich "about: blank" als Meldung; nur wenn ich vorher einen weiteren Alert habe, erhalte ich den korrekten Dateipfad.

Nur, wie frage ich ein Onload-Event einer zu erzeugenden Frameseite ab? Insbesondere wenn ich nicht die einzubindenden Seiten dafür anpassen möchte? Analog zum Image kann es ja nicht gehen, und "iframe.onload" geht natürlich auch nicht (das ist ja das IFRAME-Tag).

Im Netz findet man leider nur Anleitungen wenn ein festes Frameset besteht, aber leider nicht wenn man eines dynamisch erzeugen will.
Könnt ihr mir bitte weiterhelfen?

Viele Grüße, Steffen

  1. Hallo,

    Nur, wie frage ich ein Onload-Event einer zu erzeugenden Frameseite ab? Insbesondere wenn ich nicht die einzubindenden Seiten dafür anpassen möchte? Analog zum Image kann es ja nicht gehen, und "iframe.onload" geht natürlich auch nicht (das ist ja das IFRAME-Tag).

    Warum sollte das nicht gehen?
    Doch, am iframe-Elementobjekt passiert ein load-Ereignis, wenn dessen Inhalt fertig geladen ist. Das ist genau das, was du suchst.

    Mathias

    1. Doch, am iframe-Elementobjekt passiert ein load-Ereignis, wenn dessen Inhalt fertig geladen ist. Das ist genau das, was du suchst.

      Dankeschön; das geht dann doch leichter als ich es dachte. Ich hatte es zwar auch ausprobiert, aber ich denke ich hatte da einen Syntaxfehler drin.
      So gehts im Firefox: iframe.onload = openFrameBox;

      Ein Problem hätte ich da aber noch: Das funktioniert leider nicht im Internet Explorer. Mit iframe.complete wirds wohl auch nicht gehen. Weiß jemand von euch Rat?

      Viele Grüße, Steffen