Foros del Web » Programando para Internet » Javascript »

Problema window.opener Internet Explorer

Estas en el tema de Problema window.opener Internet Explorer en el foro de Javascript en Foros del Web. Hola a todos les comento mi problema: Tengo una pagina desde donde abro otra en un popup utilizando window.open: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver ...
  #1 (permalink)  
Antiguo 24/08/2012, 09:48
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Problema window.opener Internet Explorer

Hola a todos les comento mi problema:

Tengo una pagina desde donde abro otra en un popup utilizando window.open:

Código Javascript:
Ver original
  1. var ventana = window.open("export.php","_BLANK","scrollbars=yes");

Y en mi otro archivo (export.php) levanto un div de la ventana padre, la que lanza el window.open. Para ello utilizo window.opener:

Código Javascript:
Ver original
  1. var div = window.opener.document.getElementById("idElemento");

Por ultimo añado el div que tomo de la ventana padre y lo añado usando appendChild a un div de la ventana hija:

Código Javascript:
Ver original
  1. var div = window.opener.document.getElementById("idElemento");
  2. var divHijo = document.getElementById("divHijo");
  3. divHijo.appendChild(div);

Funciona perfectamente en los navegadores estandar pero en Internet Explorer me arroja un mensaje de error que dice Interfaz no Soportada, he leido por ahi que IE no soporta window.opener pero no logre encontrar una alternativa, alguien me puede dar una idea de como lograr esto y si es posible?

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 24/08/2012, 10:38
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 1 mes
Puntos: 35
Respuesta: Problema window.opener Internet Explorer

djaevi

Pues efectivamente tengo entendido que el opener para IE es solo para iframe's y para frame's.

Sin embargo encontre este documento, el cual parece funcionar, seria que lo probara y si no, pues seguimos einvestigando.

y este otro del mismo microsoft.
  #3 (permalink)  
Antiguo 24/08/2012, 11:02
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Problema window.opener Internet Explorer

buenas...
jamás he tenido problema con el uso de self.opener en iexplorer. por lo que podría asegurar que por ahí no va el problema — por supuesto, siempre y cuando se trate de documentos en el mismo dominio. lo que si tengo duda es sobre el tipo de error que estás recibiendo. al menos a mi, la consola de iexplorer me notifica la excepción DOM HIERARCHY_REQUEST_ERR (3). más o menos significa que se intentó realizar una operación donde corrompe la jerarquía del documento a nivel de DOM. por ejemplo, esto suele ocurrir cuando se intenta agregar nodos en un punto específico de la jerarquía donde legalmente no debería ir. para poner un ejemplo más concreto, intenta agregar un elemento cualquiera al objeto document.
Código:
document.appendChild(document.createElement('i'));
ahora, en el caso particular de iexplorer, el navegador levanta el error aparentemente porque las estructuras DOM de ambos documentos no están relacionado entre si. es decir, son dos ambientes distintos. por el momento, la única alternativa que se me ocurre es copiar el código fuente (innerHTML) y recrearlo en la nueva ventana.
__________________
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 11:34
  #4 (permalink)  
Antiguo 24/08/2012, 15:44
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
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
  #5 (permalink)  
Antiguo 24/08/2012, 15:56
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Problema window.opener Internet Explorer

Muchas gracias Zerokilled ya lo solucione usando self.opener.document.getElementById("idElemento"). appendChild();

Saludos

Etiquetas: explorer, funcion, internet, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:43.