javascript - alternativas de window.opener
(5)
Estoy abriendo una ventana emergente modal. Luego accedo a un cuadro de texto de la ventana principal y 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 la ventana principal en la ventana secundaria que funciona en ambos navegadores?
Como alternativa de navegador cruzado, puede asignar un atributo personalizado a la nueva ventana mientras la abre:
var popup = window.open(...);
popup.isPopup = true;
Luego, en la página referida:
if (window.isPopup) {
// Do something
}
else {
// Not in a popup
}
Desactive el "Modo protegido" de Internet Explorer, que impide el acceso a este objeto.
Los pasos para esto son:
- Presiona Alt + T para mostrar el menú Herramientas
- Haga clic en "Opciones de Internet"
- Seleccione la pestaña "Seguridad"
- Asegúrese de que la zona seleccionada contenga su sitio. Para un sitio de intranet, normalmente sería la zona "Intranet local".
- Desmarque "Habilitar modo protegido"
- Cierre todas las pestañas y ventanas de IE y vuelva a abrir.
Ahora debería poder acceder al objeto window.opener.
El enfoque que tomaría es el siguiente:
- Use una biblioteca de IU de JavaScript existente porque no es la primera persona que desea hacer esto, fallando eso
- Cree una función llamada
OpenWindow
, que el navegador olfatee para el métodowindow.opener
Por ejemplo:
if(window.opener == undefined) {
//probably not Firefox...
}
y si lo encuentra, entonces lo usa, de lo contrario, prueba la variante de IE y la usa. Y luego comprueba la versión de Safari, etc ...
Hay dos formas de resolver el problema: Nota: " window.opener " no es compatible con IE si se usa " showModalDialog ".
1) En lugar de " window.showModalDialog " use " window.open "
2) Si desea utilizar " window.showModalDialog ", 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>
Puede pasar argumentos a la función showModalDialog. Simplemente pase el objeto de la ventana como un argumento.
window.showModalDialog(theURL, window);
Puedes acceder a los argumentos desde la ventana modal usando dialogArguments. Consulte: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx
var openerWindow = window.dialogArguments;