A pesar de lo que dicen algunos de estos diálogos, no pueden hacer nada malicioso . Siempre puede hacer clic en Aceptar o Salir de la página para cerrar la página ofensiva sin ninguna consecuencia.
Si el cuadro de diálogo es demasiado largo y los botones están fuera de la pantalla , puede presionarEnter para confirmar el cierre de la página.
Si no tiene un teclado (dispositivos de pantalla táctil), use el bookmarklet a continuación o vea la respuesta de SimpleSimon (solo Chrome).
Ahora, algunos detalles.
Solo hay una forma de realizar alguna acción cuando se cierra una página: a través del onbeforeunload
evento. Por supuesto, esto podría usarse fácilmente contra el usuario (por ejemplo, cuando intenta cerrar una página, abre su copia en una nueva ventana), por lo que es muy limitada.
En realidad, lo único razonable que puede hacer es abrir un cuadro de diálogo con texto personalizado y dos botones, uno para salir de la página y otro para quedarse. Lo único que puede hacer una página con ese diálogo es definir su texto. Los botones y la barra de título son inmutables. Aquí hay una captura de pantalla de Firefox 3.6: ( versión muy antigua de Firefox)
Por supuesto, cuando dejas que las personas muestren ventanas emergentes con cualquier texto y solo botones OK / Cancelar , puedes estar seguro de que tarde o temprano algunos chicos lo usarán en tu contra.
En la captura de pantalla anterior, OK significa simplemente "Abandonar esta página", pero la descripción personalizada sugiere algo más. Por lo tanto, los navegadores han cambiado los cuadros de diálogo, por lo que es más difícil hacerlos engañosos. Por ejemplo, las versiones recientes de Firefox parecen ignorar el texto personalizado:
Chrome muestra el texto personalizado, pero siempre agrega una pregunta preguntando al usuario qué quiere hacer y los botones indican explícitamente sus acciones: (¡pero sigue siendo propenso a los mensajes de "videos de gatos"!)
Aquí está Internet Explorer 10, también "propenso a los gatos":
Opera 12 simplemente ignora el onbeforeunload
evento y si intentas cerrar una pestaña como esa, se cerrará como cualquier otra. Sin embargo, no he probado la última Opera.
Entonces, para resumir las cosas más importantes:
- Las páginas no pueden mostrar cuadros de diálogo con ningún texto. El sitio web puede pedirle al navegador que muestre un diálogo con un texto personalizado, pero el navegador puede ignorarlo por completo (Opera), usar texto genérico (Firefox) o decir explícitamente qué sucederá (Chrome, IE).
- Los detalles del cuadro de diálogo dependen del navegador que esté utilizando, pero los botones siempre son inmutables. Si no dicen explícitamente cuál hace qué, entonces OK significa "salir de esta página * y Cancelar es" quedarse aquí ".
- Los sitios web no pueden realizar ninguna acción maliciosa si decides abandonarlos. Sus archivos no serán reemplazados por videos de gatos, no se inundará con los virus 135234 y el FBI no será informado de que tiene un software ilegal en su computadora.
Puede deshabilitar el onbeforeunload
evento si lo desea, evitando efectivamente que las páginas le pidan que se vaya o se quede. Aquí hay un script de usuario cruzado . (desplácese hacia abajo si el enlace está muerto)
Si está en un sitio web específico que muestra una ventana emergente maliciosa y todavía tiene miedo de hacer clic en Dejar , puede crear un marcador para eliminarlo. Haga clic con el botón derecho en la barra de marcadores, elija Nuevo marcador (o equivalente) y péguelo como URL: (es solo un código minifundido del enlace de arriba)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
Luego, simplemente haga clic en ese marcador y la ventana emergente se eliminará temporalmente de la página activa.
Si desea probar cómo se ven esas ventanas emergentes en su navegador o probar el bookmarklet / userscript, cree un archivo de texto con el siguiente código y guárdelo como un .html
archivo:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Parece que el enlace del script de usuario está muerto en este momento, así que aquí hay una copia extraída de la caché archive.org . Todo el crédito para el creador del guión original.
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);