Iframe per JS - Bug in IE ???
Marko
- javascript
0 Gernot Back0 Ashura0 Gernot Back0 Ashura
0 Struppi0 Marko0 Struppi
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
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
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
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
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
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.
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
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.