JürgenB: Element in ein Popup kopieren geht nicht im IE

Hallo alle,

ich möchte ein Element einer Seite in ein von dieser Seite geöffnetes Popup-Fenster kopieren. Dazu erstelle ich einen Clone des Elements und binde ihn dann per appendChild in das Popup ein. Hier ein Codeauszug:

  
var vglwin=null;  
function vgl() {  
 if(!vglwin || vglwin.closed) {  
  vglwin=window.open("Rr_vgl.html","Vergleichsfenster",  
                        "dependent=yes,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no");  
 }  
 else  
  vgl_copy();  
}  
function vgl_copy() {  
 var grafik=document.getElementById("d_gra").cloneNode(true);  
// vglwin.cpy(grafik) ;                              // Variante I  
 vglwin.document.body.appendChild(grafik);           // Variante II  
// vglwin.document.body.innerHTML+=grafik.innerHTML; // Variante III  
// vglwin.focus();  
}  

Im Popup steht folgendes Script:

  
addEvent(window,"onload",function() { // window.onload=  
 opener.vgl_copy();  
});  
function cpy(gra) {  
 document.body.appendChild(gra);  

Im Firefox funktionieren alle drei Varianten, im IE (6 u. 7) leider nur die Variante III mit innerHTML. Bei den anderen Varianten liefert der Befehl appendChild die Fehlermeldung "Schnittstelle nicht unterstützt".

Kennt jemand dieses Problem? Oder kennt jemand einen anderen Weg, Elemente in ein Popup zu kopieren? Die Variante III wollte ich eigentlich vermeiden.

Wer das ganze "live" sehen möchte, kann das hier: http://www.j-berkemeier.de/Rr.html. Einfach "Tabelle und Grafik Berechnen" und dann "Grafik auf Vergleichsseite kopieren".

Gruß, Jürgen

  1. hi,

    ich möchte ein Element einer Seite in ein von dieser Seite geöffnetes Popup-Fenster kopieren. Dazu erstelle ich einen Clone des Elements und binde ihn dann per appendChild in das Popup ein.

    Der "richtige" Weg wäre eigentlich document.importNode (bezogen auf das document des Popups) - um den Knoten erst mal in dessen Kontext zu importieren.

    Im Firefox funktionieren alle drei Varianten,

    Dass es da auch mit einem simplen cloneNode funktioniert, wundert mich.

    im IE (6 u. 7) leider nur die Variante III mit innerHTML. Bei den anderen Varianten liefert der Befehl appendChild die Fehlermeldung "Schnittstelle nicht unterstützt".

    Kennt jemand dieses Problem?

    Der IE kennt immer noch kein document.importNode, und bei cloneNode bekommt man nach meiner Erfahrung immer diesen Fehler - obwohl es auch im AJAX-Umfeld oftmals empfohlen wird, um Elemente aus einem responseXML ins Hauptdokument einzufügen. Ich hab's bisher damit noch nicht hinbekommen.

    Oder kennt jemand einen anderen Weg, Elemente in ein Popup zu kopieren? Die Variante III wollte ich eigentlich vermeiden.

    Dürfte aber die sicherste und einfachste sein.

    Alternative wäre, dass du den Knoten und seine Kindelemente, sowie deren Attribute rekursiv durchläufst, und damit im Kontext des Popup-documents mittels createElement/appendChild neu erzeugst. Aber erstens aufwendig, und zweitens auch wieder fehlerträchtig, weil der IE da auch seine Macken hat (bspw. ein per document.createElement("input") erzeugtes Element ist vom Typ text, und lässt sich auch im Nachhinein nicht mehr zu was anderem machen. Da müsste dann wieder die IE-only-Syntax document.createElement('<input type="xyz">') benutzt werden).

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga,

      vielen Dank.

      Der "richtige" Weg wäre eigentlich document.importNode (bezogen auf das document des Popups) - um den Knoten erst mal in dessen Kontext zu importieren.

      Das kannte ich noch nicht.

      Im Firefox funktionieren alle drei Varianten,

      Dass es da auch mit einem simplen cloneNode funktioniert, wundert mich.

      Vermutlich nimmt er automatisch importNode. Im Opera 9.1 hat übrigens einer der Versuche ohne innerHTML auch funktioniert. Ich weiß jetzt nur nicht, welcher es war. Den anderen habe ich nicht getestet.

      Da der IE auch kein importNode kennt, werde ich es wohl mit innerHTML umsetzen.

      Gruß, Jürgen

      PS Fürs Archiv: Die verlinkte Seite werde ich entfernen, sobald das Ganze funktioniert. Man kann es dann unter http://www.j-berkemeier.de/Ritzelrechner.html bewundern.