iframes how create content javascript dom iframe frames

how - javascript iframe content



No se puede agregar Child a un nodo creado a partir de otro marco (3)

Tengo una página con un iframe y me gustaría extraer un nodo DOM del cuadro secundario y ponerlo en la página principal. Esto funciona en Firefox (3.5), pero no en Internet Explorer (7).

He desglosado el código lo más simple que puedo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Fragment</title> </head> <body> <iframe src="blank.html"></iframe> <script type="text/javascript"> window.onload = function () { var fragment = document.createDocumentFragment(); var div = frames[0].document.createElement("div"); fragment.appendChild(div); }; </script> </body> </html>

Aparece un error " Invalid argument " en la línea " fragment.appendChild(div); " El error parece provenir del hecho de que estoy creando el fragmento de documento del documento del iframe y el elemento div del documento principal. Este código funciona si ambos usan el mismo documento.

Quiero mantener cualquier evento que pueda estar conectado a los nodos DOM, por lo que no quiero usar innerHTML.

Alguien sabe una solución para esto?


Estoy arriesgándome a adivinar aquí, pero podrías intentar crear el div usando

var div = frames[0].document.createElement("div")

en lugar de

var div = document.createElement("div")

Usar el método createElement () del documento principal puede ser la razón por la cual IE está teniendo un problema.


Su problema es que no está adoptando los nodos en el fragmento creado en el documento actual. Use cualquiera de los siguientes:

fragment.appendChild(fragment.ownerDocument.createElement("div"));

o

fragment.appendChild(fragment.ownerDocument.adoptNode(document.createElement("div"));


Creo que encontré la respuesta aquí: http://www.alistapart.com/articles/crossbrowserscripting/

La importación de documentos desde dos propiedades diferentes de ownerDocument ... requiere el uso del método DOM Level 2 importNode (), ya que en estos casos el DOM no permitirá un simple document.appendChild ().