2011-02-03 49 views
19

Estoy abriendo una ventana emergente modal. Luego accedo a un cuadro de texto de la ventana principal y a otros atributos usando window.opener. Está funcionando bien en Firefox pero no en IE8. Da error 'window.opener es nulo'. ¿Cómo puedo acceder a los atributos de ventana principal en la ventana secundaria que funciona en ambos navegadores?window.opener alternatives

+0

Ha intentado window.parent.opener? –

+0

lo intento window.parent.opener pero no puedo acceder al objeto del documento padre. Paso parent.document como argumento y acceso a parent.document en popup como window.dialogArguments.parentDocumentObj donde parentDocumentObj es el nombre de la variable que contiene el documento. – dmay

Respuesta

7

Puede pasar argumentos a la función showModalDialog. Simplemente pase el objeto ventana como argumento.

window.showModalDialog(theURL, window); 

Yo puedo acceder a los argumentos desde la ventana modal usando dialogArguments. Ver: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments; 
+0

Probablemente debería tener en cuenta que esto funciona en IE y FF y probablemente también en otros navegadores. – Kaitnieks

+3

showModalDialog está en desuso por cromo 35 (julio de 2014). Ver http://blog.chromium.org/2014/07/disabling-showmodaldialog.html y http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html – edigu

0

El enfoque me gustaría tener es la siguiente:

  1. utilizar una biblioteca JavaScript interfaz de usuario existente, ya que no es la primera persona que quiere nunca para hacer esto, en su defecto
  2. crear una función llamada OpenWindow, que olfatea navegador para el window.opener método

por ejemplo:

if(window.opener == undefined) { 
    //probably not Firefox... 
} 

y si lo encuentra, lo usa, de lo contrario, prueba la variante de IE y lo usa. Y entonces se comprueba la versión de Safari, etc ...

8

Hay dos maneras de resolver el problema: Nota: "window.opener" no está soportado por el IE si se ha utilizado "showModalDialog".

1) En lugar de "window.showModalDialog" uso "window.open"

2) Si desea utilizar "window.showModalDialog" y luego haga lo siguiente:

<script language="javascript" type="text/javascript"> 
    function YourFunction() 
    { 
     var opener = null; 

     if (window.dialogArguments) // Internet Explorer supports window.dialogArguments 
     { 
      opener = window.dialogArguments; 
     } 
     else // Firefox, Safari, Google Chrome and Opera supports window.opener 
     {   
      if (window.opener) 
      { 
       opener = window.opener; 
      } 
     }  
     // write you code and refer "opener" 
     window.close(); 
    } 
</script> 
2

Deshabilite el "Modo protegido" de Internet Explorer, que impide el acceso a este objeto.

Los pasos para ello son:

  1. Pulse Alt + T para abrir el menú Herramientas
  2. Haga clic en "Opciones de Internet"
  3. Seleccione la pestaña "Seguridad"
  4. Asegúrese zona seleccionada contiene Tú sitio. Para un sitio de intranet, normalmente sería la zona "Intranet local".
  5. Desmarque "Habilitar modo protegido"
  6. Cierre todas las pestañas y ventanas de IE y vuelva a abrir.

Ahora debería poder acceder al objeto window.opener.

0

Como una alternativa entre navegadores, se puede dar un atributo personalizado a la nueva ventana mientras se está abriendo es:

var popup = window.open(...); 
popup.isPopup = true; 

Luego, en la página enlazada:

if (window.isPopup) { 
    // Do something 
} 
else { 
    // Not in a popup 
} 
Cuestiones relacionadas