Mostrar mensaje de confirmación antes de cerrar la página en JavaScript

- 👤 Andrés Cruz

🇺🇸 In english

Muchas veces nos hemos preguntado si es posible mostrar una ventana o alerta de confirmación cuando un usuario esta abandonando nuestra página, esto es particularmente útil en diversas situaciones en donde el usuario está descargando o cargando algún documento en la página y es imprescindible que el usuario no cierre la página, es decir, mantenga la sesión hasta que la operación termine, y en estos casos, podemos mostrar un mensaje de confirmación, esto lo podemos implementar fácilmente mediante el evento beforeunload de JavaScript que se ejecuta al momento de que el usuario intente cerrar la ventana de nuestra aplicación.

El evento beforeunload se ejecuta justamente cuando el usuario intenta abandonar la página, es decir, cierra la ventana del navegador o la pestaña, en estos casos,, podemos mostrar un mensaje de confirmación para preguntar si el usuario está completamente seguro de que quiere abandonar nuestra aplicación, aunque, es una herramienta que se debe de emplear con cuidado para evitar molestar al usuario con popups o mensajes emergentes.

La confirmación antes de cerrar una pestaña —también conocida como beforeunload dialog— es una pequeña alerta que aparece cuando el usuario intenta cerrar el navegador, la pestaña o recargar la página mientras ocurre algo importante. Es una herramienta sencilla, pero cuando la usas bien, puede ahorrarte abandonos accidentales y procesos interrumpidos.

Uso común cuando el usuario puede perder información al cerrar, métele una ventana de confirmación

Cuándo conviene usarla y cuándo evitarla

Conviene usar beforeunload cuando:

  • El usuario está subiendo un archivo.
  • Hay un proceso crítico ejecutándose (descargas, conversiones, generación de informes).
  • Existe un formulario largo o costoso de rellenar.
  • Se trata de contenido que no quieres que pierdan accidentalmente.

No conviene usarla cuando:

  • Quieres retener al usuario de manera agresiva.
  • Tu objetivo es impedir que abandone tu web por razones de marketing (malísima idea).
  • La acción del usuario no requiere confirmación.

Restricciones y cambios recientes en navegadores

Los navegadores modernos ya no permiten mensajes personalizados.

Es decir, aunque escribas un texto bonito dentro de event.returnValue, Chrome, Firefox o Safari no lo mostrarán. Solo mostrarán un mensaje genérico controlado por el navegador.

Cómo funciona el evento beforeunload en JavaScript

Su uso es muy sencillo, simplemente debemos de asignar algún valor a la propiedad returnValue, usualmente es simplemente un texto y este texto se mostrará cuando el usuario intente cerrar la página, si no se establece un valor, el evento ocurre, pero, no se muestra ninguna alerta o notificación al usuario de que esta a punto de cerrar la página.

El evento beforeunload se dispara justo cuando el usuario está a punto de abandonar la página. En esencia, basta con asignar un valor a event.returnValue y el navegador hará el resto.

window.addEventListener("beforeunload", function (event) {
 event.returnValue = "Are you sure you want to go out?"; 
});

Y la versión clásica:

window.onbeforeunload = function (e) {
    e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'Are you sure you want to go out?';
    }

    // For Safari
    return 'Are you sure you want to go out?';
};

Comportamiento en diferentes navegadores

  • Chrome: ignora el texto personalizado, muestra mensaje genérico.
  • Firefox: comportamiento similar.
  • Safari: todavía tolera return en algunos escenarios.
  • Móvil: soporte muy limitado; casi siempre lo ignora.

La clave aquí es no activarlo todo el tiempo SOLO cuando sé que el usuario está en un proceso importante cuyo cierre implica PERDER lo que está haciendo el usuario.

Alternativas más respetuosas para retener usuarios

  • Barras de progreso.
  • Mensajes dentro de la página.
  • Auto-guardado de formularios.
  • Confirmaciones internas antes de abandonar secciones.

En más de una ocasión he optado por estas alternativas en lugar del beforeunload cuando el objetivo no era crítico.

Preguntas frecuentes

  • ¿Chrome permite mensajes personalizados?
    • No. Solo muestra un mensaje genérico.
  • ¿Funciona en móviles?
    • En la mayoría de Android/iOS, el soporte es casi nulo.
  • ¿Es legal usarlo?
    • Sí, siempre que no manipules al usuario con engaño.
  • ¿Cómo evitar abusarlo?
    • Actívalo solo durante interacciones que realmente lo justifican.

Conclusión

La confirmación antes de cerrar la pestaña es una herramienta pequeña pero poderosa. Bien empleada, evita pérdidas de progreso, errores y abandonos accidentales. En mi caso, me ha ayudado mucho en mi blog y en mis páginas de cursos y libros, donde mantener al usuario hasta que todo esté listo es clave.

El secreto es usarla con moderación, activarla solo cuando realmente aporta valor y entender sus limitaciones en navegadores modernos.

Acepto recibir anuncios de interes sobre este Blog.

Veremos como emplear el evento beforeunload de JavaScript para ejecutar un evento y mostrar un mensaje cuando el usuario intenta abandonar nuestra página web.

| 👤 Andrés Cruz

🇺🇸 In english