lunes, 16 de enero de 2012

Cerrando una ventana en Firefox con JavaScript

Un compañero estaba teniendo problemas con un requerimiento que pidió el cliente que consistía simplemente en agregar un link que cerrara la ventana cuando se seleccionaba.

Una simple línea en JavaScript: "window.close();" pensabamos que era suficiente para hacer el trabajo, pero resulta que Firefox no permite esta operación porque lo percibe como una llamada poco segura. Algo que no debería permitirsele al navegador por defecto (similar a la capacidad de un script de leer archivos del cliente).

Googleando por un rato descubrí que hay una manera de habilitar estas llamadas poco seguras usando esta línea: "netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");".

Así que hice mi código de ejemplo que hiciera una excepción para FF:

<html>
<head>
<script language="Javascript">
function closeWindow() {
if (navigator.userAgent.indexOf("Firefox")!=-1){
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
alert("This will close the window");
window.open('','_self');
window.close();
} else {
this.focus();self.opener = this;self.close();
}
}
</script>
</head>
<body>
<a href="javascript:closeWindow();">Close Window</a>
</body>
</html>


Cuando abrí la página localmente e intenté cerrarla con el enlace que me conecta a la función JavaScript, me apareció el siguiente mensaje de confirmación:


Si le doy permitir, efectivamente la ventana se cierra. El problema está cuando uno coloca el script en un servidor web porque FF ni siquiera muestra este mensaje sino que de una niega el acceso. Esto se puede ver en la consola de errores:



Pareciera que existe todo un proceso en Mozilla para certificar scripts que intentan hacer este tipo de llamadas para obtener privilegios del navegador. Si los scripts no están certificados, FF interpreta el sitio como no seguro para hacer este tipo de llamadas.

La conclusión en mi caso particular, es que parace demasiado trabajo para agregar una opción que en sí no parece tan natural para una aplicación web. Lo mejor es dejarlo habilitado solamente para los navegadores que lo soportan.

No hay comentarios:

Publicar un comentario