Iframe.contentDocument funktioniert nicht richtig
Yannick Gottschalk
- javascript
Hallo!
Ich habe folgendes Problem (code wird nur in firefox ausgeführt):
Ich erzeuge ein Iframe und style es ein wenig um:
var iframe = document.createElement("iframe");
iframe.name = iframe.setAttribute("id", "textEditor");
iframe.name = iframe.setAttribute("name", "textEditor");
iframe.style.border = "0px";
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.fontSize = "12px";
iframe.style.fontFamily = "Arial";
iframe.style.padding = "10px";
iframe.style.paddingTop = "15px";
iframe.style.color = "#151515";
iframe.style.backgroundColor = "#DDDDDD";
Dann füge ich es in die Seite ein (das Element saveframe gibt es bereits):
document.getElementById("saveframe").parentNode.insertBefore(iframe, document.getElementById("saveframe"));
Danach möchte ich dem body noch ein wenig style verpassen und das ganze zur bearbeitung nehmen:
iframe.contentDocument.body.style.width = "100%";
iframe.contentDocument.body.style.height = "100%";
iframe.contentDocument.body.style.overflow = "auto";
iframe.contentDocument.body.style.fontSize = "12px";
iframe.contentDocument.body.style.fontFamily = "Arial";
iframe.contentDocument.body.style.padding = "0px";
iframe.contentDocument.body.style.margin = "0px";
iframe.contentDocument.body.style.color = "#151515";
iframe.contentDocument.body.style.backgroundColor = "#DDDDDD";
iframe.contentDocument.designMode="on";
Nun zum Problem: der letzte block wird nicht ausgeführt. Ich habe mit einem Debugger (firebug) den code schrittweise durchlaufen lassen, und dann funktioniert es, was bei mir große verwunderung hervorruft...
Hat jemand vllt. eine Idee, wo der Fehler liegt? Wenn noch mehr Informationen gebraucht werden, einfach nachfragen!
Danke schonmal in voraus,
Yannick Gottschalk
Nun zum Problem: der letzte block wird nicht ausgeführt.
D.h. ohne eine Fehlermeldung in der Fehlerkonsole? (nicht in Firebug)
Hat jemand vllt. eine Idee, wo der Fehler liegt?
Das Dokument ist noch nicht fertig.
Struppi.
D.h. ohne eine Fehlermeldung in der Fehlerkonsole? (nicht in Firebug)
ja, weder in firebug, wenn es halt nicht zeile für zeile debuggt, noch in der fehlerkonsole
Das Dokument ist noch nicht fertig.
???
das ist an der stelle noch nicht zu 100% geladen, alle teile die verwendet werden (getElement) sind aber schon vorhanden, könnte es trotzdem daran liegen?
Yannick
Hi,
Das Dokument ist noch nicht fertig.
???
das ist an der stelle noch nicht zu 100% geladen, alle teile die verwendet werden (getElement) sind aber schon vorhanden,
Du verwendest nicht getElement..., sondern versuchst direkt auf body zuzugreifen.
könnte es trotzdem daran liegen?
Natürlich - du versuchst, *augenblicklich*, nachdem du den Iframe ins Dokument eingehängt hast, auf den Body von dessen Inhalts-Dokument zuzugreifen.
Augenblicklich ist aber zu schnell, weil der Browser so fix noch gar kein DOM erstellt hat, in dem es einen Body gäbe.
MfG ChrisB
Erstmal danke für eure Hilfe, aber es geht noch nicht :(
Ich habe jetzt die Befehle in die onload Funktion geschreiben, hat nix gebracht...
und ich habe versucht statt iframe.contentDocument.body iframe.contentDocument.getElementsByTagName("body").item(0) zu verwenden, jedoch auch ohne erfolg!
Wo genau soll ich das iframe erstellen und wie kann ich es formatieren?
Danke in voraus,
Yannick
Erstmal danke für eure Hilfe, aber es geht noch nicht :(
Ich habe jetzt die Befehle in die onload Funktion geschreiben, hat nix gebracht...
Sollte aber.
und ich habe versucht statt iframe.contentDocument.body iframe.contentDocument.getElementsByTagName("body").item(0) zu verwenden, jedoch auch ohne erfolg!
Das macht auch keinen Unterschied
Wo genau soll ich das iframe erstellen und wie kann ich es formatieren?
In dem du wartest bis der document.body verfügbar ist. Irgendwas machst du falsch
Struppi.
JA! Ich habs!
Musste natrlich in die onload, jedoch sollte man dan iframe in seiner eigenen onload function stylen und nicht in der Hauptseite.
Für alle die das gleiche Problem haben, mein Code:
var iframe = document.createElement("iframe");
iframe.setAttribute("id", "textEditor");
iframe.setAttribute("name", "textEditor");
iframe.style.border = "0px";
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.fontSize = "12px";
iframe.style.fontFamily = "Arial";
iframe.style.padding = "10px";
iframe.style.paddingTop = "15px";
iframe.style.color = "#151515";
iframe.style.backgroundColor = "#DDDDDD";
iframe.onload = function () {
iframe.contentDocument.designMode="on";
var iframeBody = this.contentDocument.body;
iframeBody.style.width = "100%";
iframeBody.style.height = "100%";
iframeBody.style.overflow = "auto";
iframeBody.style.fontSize = "12px";
iframeBody.style.fontFamily = "Arial";
iframeBody.style.padding = "0px";
iframeBody.style.margin = "0px";
iframeBody.style.color = "#151515";
iframeBody.style.backgroundColor = "#DDDDDD";
}
document.getElementById("saveframe").parentNode.insertBefore(iframe, document.getElementById("saveframe"));
Großes DANKE an alle die mich ein Stück näher an die Lösung gebracht haben!
Yannick