Muchas páginas tienen alertas cuando las abandonas: si cierras pestañas, navegas sin guardar, etc., existen numerosas razones por las que un sitio te alertaría / bloquearía tu salida hasta que confirmes una alerta, por ejemplo, "¿Estás seguro de que quieres navegar fuera de esta página? ".
Esto normalmente se hace con los controladores onbeforeunload
y / o onunload
controladores.
Aquí hay un ejemplo.
¿Hay alguna manera de evitar alertas / eventos de bloqueo de usuarios generados por esos controladores? Básicamente, me gustaría dejar JS habilitado, y específicamente no permitir cosas que me impidan salir de una página sin que ocurra un clic adicional.
onbeforeunload
y los onunload
manipuladores aún deben disparar; simplemente no se les debe permitir hacer cosas que bloqueen al usuario. Eso significa que no hay alertas ni operaciones que demoren más de unos segundos.
He encontrado algunos complementos que editan / greasemonkey parchean el javascript para páginas particulares, y jugué un poco con su código para intentar hacerlos más universalmente aplicables. Sin embargo, espero encontrar una solución que funcione en cualquier página que intente bloquear la salida del usuario.
fuente
onbeforeunload
) solo funcionará para páginas que usanonbeforeunload
, no para páginas que usan uno de los otros métodos para adjuntar eventos.Respuestas:
Bueno, lo más simple es simplemente anular el script de páginas directamente y reasignar el evento a
null
.Esto debería funcionar en cualquier lugar, a menos que sean verdaderamente maliciosos, y seguir reasignándolo ellos mismos. En tal caso, un ciclo para mantener la configuración
null
probablemente funcionará.Ahora, ten cuidado, algunas páginas usan esto para siempre. Tome la página de carga de YouTube: si navega fuera durante una carga, ¡puede haber perdido horas de progreso! O tal vez un formulario web que está completando, que tal vez no desee volver a completar, o un mensaje (foro / correo electrónico) que no desee volver a escribir. Con esta característica, estás protegido.
Otro problema es cualquier página que use esto para algún propósito secundario, como guardar datos por AJAX. Pueden usar este evento para activar la acción de guardar, y esperan que el usuario tarde lo suficiente en hacer clic en el botón para que se complete la solicitud. Nuevamente, esto a menudo se hace para salvarte de ti mismo.
Pero, obviamente, todos sabemos que muchas páginas usan esto por enfermedad. Entonces, si conoce alguna página en la que desea que funcione, siempre podría tener un sistema de lista blanca. Realmente no hay una manera de bloquear esta acción, sin un bloqueo total
window.onbeforeunload
, y cualquier acción (posiblemente buena) que pueda tomar.No hay forma (sin el conocimiento previo de un código de página dado) para mantener las buenas acciones mientras se detiene el cuadro emergente. Este cuadro no es un
alert()
. El navegador genera el cuadro, como el comportamiento previsto deonbeforeunload
. Uno lo crea haciendo cualquier función que asignen parawindow.onbeforeunload
devolver una cadena. Esa cadena se imprimirá en la ventana emergente.Por lo tanto, no podrá bloquear la ventana emergente sin borrar la función.
Además, si encontraste una manera, cualquier AJAX fallaría. La ventana emergente le da tiempo a las solicitudes para pasar, sin ella, se pueden perder datos.
En cuanto a
onunload
, no debería ser posible bloquearlo con esto. Ya que se dispara después de que la página se descarga. Pero para estar seguro, siempre se puede hacerwindow.onunload = null;
y se debe tener cuidado.fuente
onbeforeunload
controlador hiciera algo más importante? Por ejemplo, ¿qué pasaría si hiciera una breve solicitud de AJAX o confirmara algo al almacenamiento HTML5 local? ¿Hay alguna manera de evitar que losonbeforeunload
manejadores realicen ciertas llamadas (es deciralert()
), o que se ejecuten por más de un período de tiempo determinado? Es por eso que pregunté acerca de una extensión en lugar de solo un script de tipo greasemonkey: parece que, para hacer esto correctamente, tendría que haber algo cambiado en el nivel del motor de JavaScript.fuente
Hay una buena herramienta que puede manejar cualquier ventana emergente molesta en un sistema Windows: ClickOff . Puedes descargarlo desde aquí . Lo verifiqué y funciona con la alerta "Los cambios que realizó no se pueden guardar" para el sitio de SharePoint.
fuente