basti_p: iframe dynamisch ein onLoad-Event zuweisen

Hallo,

folgendes Problem:
ich möchte einem Dokument in einem iFrame mit Javascript ein onLoad-Event zuweisen:

var doc;
var doc = document.getElementById("editContentFrame").contentWindow || document.getElementById("editContentFrame").contentDocument;
if (doc.document) {
doc = doc.document;
if(!doc.body){
//wenn doc.body noch nicht vorhanden, nochmal...
window.setTimeout("PAGES_makeEditable()",500);
}
else{
doc.body.onLoad=new Function("alert('haha')");
}

Die else-Abfrage wird korrekt angesprungen (mit alert getestet), doc.body ist also vorhanden. Leider bewirkt die onLoad-Zuweisung nichts - keine Fehlermeldung aber leider auch kein alert('haha')...
Wo liegt der Fehler?

Ich teste mit Firefox 2.0.0.11

Danke und Grüße Basti

  1. Hi,

    doc.body.onLoad=new Function("alert('haha')");

    JavaScript behandelt Bezeichner case sensitive - und die Eventhandler-Attribute sind durchgaengig klein zu schreiben.

    MfG ChrisB

    1. Hallo,

      vielen Dank - aber leider hilft die Kleinschreibung auch nichts:-(

      Ich hatte erst den Verdacht, dass das oload-Event vielleicht schon vorbei ist - aber ein alert(doc.body.childNodes.length); direkt vor der onload-Zuweisung gibt 0 aus - und das ist wirklich zu wenig (derselbe Auruf 500ms später ergibt die korrekte Anzahl).

      Grüße Basti

      1. Hi,

        vielen Dank - aber leider hilft die Kleinschreibung auch nichts:-(

        Ich hatte erst den Verdacht, dass das oload-Event vielleicht schon vorbei ist - aber ein alert(doc.body.childNodes.length); direkt vor der onload-Zuweisung gibt 0 aus - und das ist wirklich zu wenig (derselbe Auruf 500ms später ergibt die korrekte Anzahl).

        Versuch mal, den onload-Event des Fensterobjektes zu nutzen, statt den des Bodys.

        MfG ChrisB

        1. Hi,

          Versuch mal, den onload-Event des Fensterobjektes zu nutzen, statt den des Bodys.

          P.S.: Dann kannst du dir auch das Gehampel mit Ueberpruefung auf Vorhandensein des Bodys und Timeouts sparen - das entsprechende Fensterobjekt gibt's naemlich schon, bevor du ueberhaupt die Seite hineinlaedst.

          MfG ChrisB

          1. Hallo,

            P.S.: Dann kannst du dir auch das Gehampel mit Ueberpruefung auf Vorhandensein des Bodys und Timeouts sparen - das entsprechende Fensterobjekt gibt's naemlich schon, bevor du ueberhaupt die Seite hineinlaedst.

            Eben: ich brauche aber die Benachrichtigung, dass ich auf die Elemente des _geladenen_ Dokumentes zugreifen kann.

            Grüße Basti

        2. Hallo,

          hmm - diese onload-Zuweisung wird zwar ausgeführt - wenn ich mir da aber die Anzahl der body-childNodes ausgeben lasse, bekomme ich wieder 0 - der body ist an dieser Stelle also noch nicht komplett.

          Grüße Basti

          1. Hi,

            hmm - diese onload-Zuweisung wird zwar ausgeführt - wenn ich mir da aber die Anzahl der body-childNodes ausgeben lasse, bekomme ich wieder 0 - der body ist an dieser Stelle also noch nicht komplett.

            In welcher Reihenfolge machst du denn das ganze - erst onload-Event zuweisen, und dann Seite in den Iframe laden - oder umgekehrt?

            MfG ChrisB

            1. Hallo,

              ich erzeuge den iFrame mit JavaScript sprich: ich lade eine php-Datei via Ajax und innerHTML in einen div-Container:

              ...
              if(xmlHTTP.readyState==4){
              var div=document.createElement("div");
              div.innerHTML=xmlHTTP.responseText;
              document.getElementById(target_id).appendChild(div);
              }
              ...

              In der php-Datei ist der iFrame definiert:
              <iframe id="editContentFrame" style="width: 100%;border: 0" frameborder="0" src="../index.php"></iframe>

              Dann kommt die onload-Anweisung.

              Grüße Basti

              1. Hi,

                In der php-Datei ist der iFrame definiert:
                <iframe id="editContentFrame" style="width: 100%;border: 0" frameborder="0" src="../index.php"></iframe>

                Und wenn du den Eventhandler mal als HTML-Attribut in diesem Iframe-Element notierst?
                (Just guessing, ich weiss nicht, ob das funktioniert ...)

                MfG ChrisB

                1. Hallo,

                  Danke für den Tipp: ein alert direkt im body-Tag wird vor allen anderen ausgeführt - d.h., das onload-Event ist schon vorbei, die Elemente aber noch nicht in der übergeordneten Seite im DOM verfügbar.

                  Grüße Basti