Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/08/2012, 15:44
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 9 meses
Puntos: 1485
Respuesta: Problema window.opener Internet Explorer

insatisfecho de la alternativa que indique me puse a investigar sobre este error en iexplorer. tengo mis dudas de cuál navegador realmente está haciendo las cosas bien. en la documentación de appendChild en MDN hay una nota acerca de los elementos a agregar. en un párrafo cita:
Cita:
This method is not allowed to move nodes between different documents. If you want to append node from a different document (for example to display results from AJAX request) you must first use importNode.

a éste método no se le permite mover nodos entre diferentes documentos. si deseas anexar un nodo de un documento distinto (por ejemplo para mostrar el resultado de una petición Ajax) primero debes utilizar importNode.
intenté corroborar ese dato buscando en la especificación oficial pero no encontre nada al respecto. solo pude ver un pequeño detalle en la descripción de appendChild que dice en DOM Level 3 hubieron cambios, pero no pude determinar cuales. quizás esa restrincción existía antes y por eso en iexplorer — al menos hasta la versión 9 — se genera el error.
edit: dato corroborado. en la especificación aparece como DOM Exception WRONG_DOCUMENT_ERR

en otra fuente, la explicación a este problema es que la propiedad ownerDocument del nodo de origen es distinto a la del nodo destino. sin embargo, curiosamente en pruebas que llevaba a cabo pude lograr transferir nodos de un documento a otro pero dentro del mismo ambiente (ventana).
Código:
// asumiendo que el documento tiene contenido ;
// en iexplorer9 me funciona ;
var doc = document.implementation.createHTMLDocument();
doc.documentElement.replaceChild(document.body, doc.body);
en conclusión, tal como dice la cita, lo correcto es utilizar importNode. no obstante, nótese que importNode es una forma de clonar un nodo y el original no será removido.
Código:
nodo.appendChild(document.importNode(nodo_documento_externo));
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 24/08/2012 a las 16:02