Hallo,
Das erklärt zumindest warum das so ist, daran habe ich nicht gedacht.
Molily versuchte gerade schon, Dir diese Einsicht nahe zu bringen.
Es erklaärt aber nicht, ob es so sein muss, denn: Sobald ich per documentElement was einfüge, würde klar sein, dass ich kein bild öffnen will.
Nur bei einem sehr mitdenkenden Browser. Ich versuche es mal anders zu erklären. Wenn Du Dein vollkommen leeres Popup öffnest, hast Du diese Baumstruktur:
window
|
•
Wenn aber per documentElement etwas einfügen willst, dann willst Du hinterher diese Baumstruktur haben:
window
|
•-- document
|
•-- documentElement
Der mitdenkende Browser müsste also bei diesem Deinem Statement ...
popup.document.documentElement = irgendwas;
... schon einen document-Knoten mit erstellen. Wieso sollte er aber? Für den Browser weisst Du einem nicht existierenden Attribut (documentElement) eines nicht existenten Objektes (document) etwas zu. Klar, es wäre nett, aber das Ding ist immer noch eine Maschine. Und die unterschiedlichen DOM-Spezifikationen sagen nichts über ein Kristallkugel-Verhalten von Browsern voraus. ;)
Du willst – aus war für Gründen auch immer – in einem Popup testen, ob die DOM-Repräsentation des darin enthaltene leere Dokuments das Attribut documentElement hat. Meine bequeme Lösung wäre es, einfach im Popup ein leeres Dokument zu öffnen. Ähnlich geschieht das auch mit Struppis document.write, man schreibt einfach das leere Dokument rein, für mich ist das aber zu viel Kristallkugel.
Konsequenter im Sinne des DOMs wäre wohl dieser Ansatz:
// Popup öffnen, popup bezeichnet hier das nirgendwo in DOM standardisierte window-Objekt
var popup = window.open( '', 'bar', '[...]');
// In dem Popup ein HTML-Dokument erstellen.
popup.document = new HTMLDocument();
// In diesem Dokument den Div-Knoten erstellen und einfügen
var div = popup.document.createElement( 'div');
div.appendChild(popup.document.createTextNode( 'foo'));
popup.document.documentElement.appendChild( div);
Ist aber aus Faulheit ungetesteter Code. ;)
Nein, wenn dann habe ich das nicht genau beschrieben: Mir ist schon klar, dass document vergleichbar mit einem handler ist, und das die eigentliche XML Wurzel (html, feed, rss, uws) innerhalb diesem zu finden ist.
Wurzelelement. Wurzelelement. Wurzelelement. Da gibt es einiges an Begriffsverwirrung, weil - stellt man sich ein gedankliches XML-Dokument als Baum vor, dann sieht das ungefähr so aus:
/--•
|
•-- Prolog
|
•-- Wurzelelement
|
•-- Sonstiges
Es gibt also eine konzeptionelle, gedankliche Wurzel, die kein Element ist. Der Vergleich mit "/" in unixoiden Datensystem liegt nahe. Ich würde diesen Sprachgebrauch vorschlagen, um Verwirrungen zu vermeiden: Dokument bezeichnet diese konzeptionelle Wurzel, das Wurzelelement – das oberste Element eines XMl-Dokumentes und das einzige Element auf dieser Ebene – wird nur noch als Wurzelelement bezeichnet.
Tim