¿Cómo evitar que se activen alertas de JavaScript al salir de una página?

¿Cómo evitar que se activen alertas de JavaScript al salir de una página?

Muchas páginas tienen alertas cuando las sales: si cierras pestañas, navegas sin guardar, etc., existen numerosas razones por las que un sitio te avisaría/bloquearía para que no salgas 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 onbeforeunloady/o onunload.

Aquíes un ejemplo.

¿Hay alguna forma 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 se produzca un clic adicional.

onbeforeunloady onunloadlos cuidadores aún deben disparar; simplemente no se les debería permitir hacer cosas que bloqueen al usuario. Eso significa que no habrá alertas ni operaciones que demoren más de unos segundos.

Encontré algunos complementos que editan/parchean el JavaScript de Greasemonkey para páginas específicas y jugué un poco con su código para intentar hacerlos más aplicables universalmente. Sin embargo, espero encontrar una solución que funcionecualquierpágina que intenta bloquear la salida del usuario.

Respuesta1

Bueno, lo más sencillo es simplemente anular el script de páginas directamente y reasignar el evento a null.

window.onbeforeunload = null;

Esto debería funcionar en cualquier lugar, a menos que sean realmente maliciosos y sigan reasignándolo ellos mismos. En tal caso, nullprobablemente funcionará un bucle para mantener la configuración.

while(true) {
    if (window.onbeforeunload != null) {
        window.onbeforeunload = null;
    }
}

Ahora bien, ten cuidado, algunas páginas usan esto para siempre. Tome la página de carga de YouTube: si navega durante una carga, ¡es posible que haya perdido horas de progreso! O tal vez un formulario web que está completando y que quizás no desee volver a completar, o un mensaje (foro/correo electrónico) que quizás no desee volver a escribir. Con esta característica, estás protegido.

Otro problema es que cualquier página utilice esto para algún propósito secundario, como guardar datos mediante AJAX. Pueden usar este evento para activar la acción de guardar y esperar que el usuario tarde el tiempo suficiente en hacer clic en el botón para que se complete la solicitud. Nuevamente, esto se hace a menudo para salvarte de ti mismo.

Pero, obviamente, todos sabemos que muchas páginas usan esto para mal. Entonces, si conoce alguna página en la que desea que funcione, siempre puede tener un sistema de lista blanca. Realmente no hay una manera de bloquear esta acción, sin bloquearla totalmente window.onbeforeunload, y cualquier acción (posiblemente buena) que pueda tomar.

No hay forma (sin conocimiento previo del código de una página determinada) de mantener las buenas acciones mientras se detiene el cuadro emergente. Esta caja esnoun alert(). El cuadro lo genera el navegador, según el comportamiento previsto de onbeforeunload. Uno lo crea haciendo que cualquier función que le asigne window.onbeforeunloaddevuelva una cadena. Esa cadena se imprimirá en la ventana emergente.

window.onbeforeunload = function() {
    //Whatever
    return "WARNING! You have unsaved changes that may be lost!";
}

Por lo tanto, no podrá bloquear la ventana emergente sin borrar la función.

Además, si encontrara una manera, cualquier AJAX fallaría. La ventana emergente da tiempo a las solicitudes para que se completen; sin ella, se pueden perder datos.

En cuanto a onunload, no debería ser posible bloquearte con esto. ya que disparadespuésla página se descarga. Pero para estar seguro, siempre puedes hacer algo window.onunload = null;y debes cuidarlo.

Respuesta2

    // ==/UserScript==

var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);

Respuesta3

Existe una buena herramienta que puede manejar cualquier ventana emergente molesta en un sistema Windows:Haga clic en Apagar. Puedes descargarlo desdeaquí. Lo verifiqué y funciona con la alerta "Es posible que los cambios realizados no se guarden" para el sitio de SharePoint.

información relacionada