Solange man window.open("", "name") macht, ist das Fenster im Opera wirklich leer (im Gegensatz zu about:blank!). Keine Elementknoten vorhanden. Weder ein Wurzelelement noch body. Also müsste man erst ein Wurzelelement mit document.appendChild einfügen.
Wie macht man das?
Äh, wie meinst du jetzt? Wie gesagt kann man ja document.appendChild verwenden, um ein Wurzelelement einzufügen - zumindest dachte ich das.
try {
var popup = window.open("", "fenster");
var doc = popup.document;
if (!popup.document.documentElement || !popup.document.body) {
var root = doc.createElement("html");
var body = doc.createElement("body");
root.appendChild(body);
alert("append");
doc.appendChild(root);
alert("end append");
}
var p_element = doc.createElement("p");
p_element.appenChild(doc.createTextNode("Zeug"));
doc.body.appendChild(p_element);
} catch (e) {
alert(e.name + "\n" + e.message);
}
Leider löst das doc.appendChild einen HIERARCHY_REQUEST_ERR aus, siehe dazu:
»Raised if this node is of a type that does not allow children of the type of the newChild node, or if the node to append is one of this node's ancestors or this node itself, or if this node is of type Document and the DOM application attempts to append a second DocumentType or Element node.«
Der letzte Fall ist wohl ausschlaggebend. Aber warum sollte man kein Element an Document hängen können... Naja, vielleicht ist es dann doch eine widersinnige Regelung im Opera, wenngleich es kein DOM-Verstoß im engeren Sinne ist.
Mathias