Marko: Iframe per JS - Bug in IE ???

Hallo Forum,

ich versuche gerade mit Javascript einen Iframe in einer Seite zu öffnen. Das Problem ist, dass im IE der Inhalt des Iframe nicht angezigt wird. Wenn ich einen Alert ausgebe ist der Inhalt plötzlich da. Auch die Quellcodeanzeige zeigt den Inhalt an.
Ein reload funktioniert auch nicht ohne Fehler, da frame.document keine Eigenschaft besitzt. Das ganze sieht sehr nach einem Bug im IE aus. Mozilla macht alles richtig. Wie bekomme ich das ohne Alert, und ohne Codefehler hin ? Der Quellcode der Funktion:

function formWindow( url ){
              frame = document.createElement('iframe');
              frame.setAttribute("src",url );
              frame.style.position = 'absolute';
              frame.style.top = '50px';
              frame.style.left = '50px';
              frame.style.width = '700px';
              frame.style.height = '500px';
              frame.style.zIndex = 100;
              body = document.getElementsByTagName("body")[0];
              body.insertBefore( frame, body.firstChild  );
              if( !frame.document.firstchild ) alert(''); // bug in IE ?
          }

Danke und Gruss

Marko

  1. Hallo Marko,

    function formWindow( url ){
                  frame = document.createElement('iframe');
                  frame.setAttribute("src",url );

    Ich würde an deiner Stelle ja auch erst einmal das Attribut erzeugen, bevor ich es, obwohl noch gar nicht in den Elementbaum eingehängt schon über setAttribute() setzen wollte.

    http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute

    Gruß Gernot

    1. Hallo Gernot.

      Ich würde an deiner Stelle ja auch erst einmal das Attribut erzeugen, bevor ich es, obwohl noch gar nicht in den Elementbaum eingehängt schon über setAttribute() setzen wollte.

      http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute

      Ist das generell erforderlich?
      Laut der Beschreibung von setAttribute() und eigenen Erfahrungen nicht.

      Oder ist es bei Frames zwangsläufig anders?

      Einen schönen Mittwoch noch.

      Gruß, Ashura

      --
      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
      Meine Browser: Opera 8.01 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
      [Deshalb frei! - Argumente pro freie Software]
      1. Hallo Ashura,

        Ich würde an deiner Stelle ja auch erst einmal das Attribut erzeugen, bevor ich es, obwohl noch gar nicht in den Elementbaum eingehängt schon über setAttribute() setzen wollte.

        http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute

        Ist das generell erforderlich?
        Laut der Beschreibung von setAttribute() und eigenen Erfahrungen nicht.

        War denn auch bei deinen Erfahrungen das Element, dessen noch nicht vorhandenes Attribut gesetzt werden sollte, noch nicht im Elementbaum eingehängt?

        Abgesehen davon wird eine Seite in einem (I)Frame üblicherweise ja auch nicht über dessen Eigenschaft src neu aufgerufen, sondern über deinIframe.location.href. Ich glaube hier liegt auch ein Problem.

        Gruß Gernot

        1. Hallo Gernot.

          War denn auch bei deinen Erfahrungen das Element, dessen noch nicht vorhandenes Attribut gesetzt werden sollte, noch nicht im Elementbaum eingehängt?

          Ja. Ob ich es nun zuerst einhing und dann das Attribut setzte, oder umgekehrt, machte keinen Unterschied. (</archiv/2005/7/t111103/>)

          Einen schönen Mittwoch noch.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
          Meine Browser: Opera 8.01 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
          [Deshalb frei! - Argumente pro freie Software]
  2. Ein reload funktioniert auch nicht ohne Fehler, da frame.document keine Eigenschaft besitzt. Das ganze sieht sehr nach einem Bug im IE aus. Mozilla macht alles richtig. Wie bekomme ich das ohne Alert, und ohne Codefehler hin ? Der Quellcode der Funktion:

    function formWindow( url ){
                  frame = document.createElement('iframe');
                  frame.setAttribute("src",url );
                  frame.style.position = 'absolute';
                  frame.style.top = '50px';
                  frame.style.left = '50px';
                  frame.style.width = '700px';
                  frame.style.height = '500px';
                  frame.style.zIndex = 100;
                  body = document.getElementsByTagName("body")[0];
                  body.insertBefore( frame, body.firstChild  );
                  if( !frame.document.firstchild ) alert(''); // bug in IE ?
              }

    Bei mir funktioniert das Einwandfrei im IE, aber warum nicht appendChild() dann klappt's auch mit anderen Browsern.

    function formWindow( url ){
        var frame = document.createElement('iframe');
        frame.src = url;
        frame.style.position = 'absolute';
        frame.style.top = '50px';
        frame.style.left = '50px';
        frame.style.width = '700px';
        frame.style.height = '500px';
        frame.style.zIndex = 100;

    var body = document.body || window.documentElement;
        body.appendChild( frame );
    }

    Struppi.

  3. Vielen Dank für die Tips. Das Problem war tatsächlich die Reihenfolge von einhängen und Attribut definieren. Der IE kapiert dann nicht, das er das Document laden soll.
    Ich würde das allerdings durchaus als IE Bug bezeichnen, da es nach dem DOM Standard völlig egal sein müsste wann das Attribut definiert wird.

    Grüsse

    Marko

    1. Vielen Dank für die Tips. Das Problem war tatsächlich die Reihenfolge von einhängen und Attribut definieren. Der IE kapiert dann nicht, das er das Document laden soll.
      Ich würde das allerdings durchaus als IE Bug bezeichnen, da es nach dem DOM Standard völlig egal sein müsste wann das Attribut definiert wird.

      sowohl dein als auch mein Beispiel läuft anstandslos in meinem IE (6)

      Struppi.