¿Cómo evitar que una página web navegue usando JavaScript?
javascript
onbeforeunload
Software entusiasta
fuente
fuente
Respuestas:
El uso le
onunload
permite mostrar mensajes, pero no interrumpirá la navegación (porque es demasiado tarde). Sin embargo, el usoonbeforeunload
interrumpirá la navegación:Nota: se devuelve una cadena vacía porque los navegadores más nuevos proporcionan un mensaje como "Cualquier cambio no guardado se perderá" que no se puede anular.
En navegadores más antiguos, puede especificar el mensaje que se mostrará en la solicitud:
fuente
window.onbeforeunload = function() { return ""; }
A diferencia de otros métodos presentados aquí, este bit de código no hará que el navegador muestre una advertencia preguntándole al usuario si quiere irse; en su lugar, explota la naturaleza del DOM para redirigirlo a la página actual (y así cancelar la navegación) antes de que el navegador tenga la oportunidad de descargarlo de la memoria.
Dado que funciona haciendo un cortocircuito en la navegación directamente, no se puede usar para evitar que la página se cierre; sin embargo, se puede usar para deshabilitar el frame-busting.
Descargo de responsabilidad: nunca debe hacer esto. Si una página tiene un código que rompe marcos, respete los deseos del autor.
fuente
Terminé con esta versión ligeramente diferente:
En otro lugar, configuro la bandera sucia como verdadera cuando el formulario se ensucia (o de lo contrario quiero evitar navegar). Esto me permite controlar fácilmente si el usuario recibe o no el mensaje Confirmar navegación.
Con el texto en la respuesta seleccionada, verá mensajes redundantes:
fuente
undefined
El equivalente de una manera más moderna y compatible con el navegador, utilizando las modernas API addEventListener.
Fuente: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
fuente
event.returnValue
En el ejemplo de Ayman al devolver falso, evita que la ventana / pestaña del navegador se cierre.
fuente
El equivalente a la respuesta aceptada en jQuery 1.11:
JSFiddle ejemplo
La respuesta de altCognito utilizó el
unload
evento, que ocurre demasiado tarde para que JavaScript anule la navegación.fuente
Use onunload .
Para jQuery, creo que esto funciona así:
fuente
unload
evento se dispara cuando el usuario abandona la página, a diferencia de lobeforeunload
que se dispara de antemano (y puede cancelarse)Ese mensaje de error sugerido puede duplicar el mensaje de error que el navegador ya muestra. En Chrome, los 2 mensajes de error similares se muestran uno tras otro en la misma ventana.
En Chrome, el texto que se muestra después del mensaje personalizado es: "¿Está seguro de que desea abandonar esta página?". En firefox, no muestra nuestro mensaje de error personalizado (pero aún muestra el cuadro de diálogo).
Un mensaje de error más apropiado podría ser:
O estilo stackoverflow: "Has comenzado a escribir o editar una publicación".
fuente
Si está capturando un botón de retroceso / avance del navegador y no desea navegar, puede usar:
De lo contrario, puede usar el evento beforeunload , pero el mensaje puede o no funcionar en varios navegadores, y requiere que se devuelva algo que fuerce una solicitud integrada.
fuente