Quiero pedir una confirmación al usuario cuando está saliendo de una página.

Sé que se puede lograr muy fácilmente usando la window.onbeforeunload de javascipt

Pero el único problema es que muestra una ventana emergente (ver imagen) cuando recargo la página. No quiero mostrar esa ventana emergente al recargar la página. Creo que el navegador web muestra una ventana emergente, ya que muestra un mensaje "¿Desea volver a cargar este sitio?" que no he escrito en ninguna parte.

Aquí está mi código simple:

<html>
    <head>
        <title>Script</title>
        <script>
            window.onbeforeunload = function () {
                return 'Are you sure you want to leave?';
            };
        </script>
    </head>
    <body>
        hello
        <a href="http://google.com">Google</a>
    </body>
</html>

enter image description here

Cualquier ayuda sería apreciada.

EDITAR:

Mucha gente dice que es malo preguntarle al usuario mientras abandona el sitio y yo también estoy completamente de acuerdo con eso. Pero es un requisito del cliente, por lo que no depende de mí. Lo siento por eso.

Gracias

Parth vora

2
Parth Vora 8 dic. 2016 a las 14:02
2
Creo que actualizar significa abandonar el sitio y volver al sitio. por lo que salir del sitio significa que alertará
 – 
Mahi
8 dic. 2016 a las 14:03
1
I don't want to display that pop up upon page reload Entonces, ¿qué quieres?
 – 
Manish
8 dic. 2016 a las 14:04
Al actualizar, simplemente vuelva a cargar la página como de costumbre, sin necesidad de preguntarle al usuario.
 – 
Parth Vora
8 dic. 2016 a las 14:04
Quiere una alerta cuando el usuario cierra la pestaña, no cuando el usuario actualiza la pestaña
 – 
Mahi
8 dic. 2016 a las 14:05
1
No puede determinar si el usuario: Intentó actualizar la página. Intentó cerrar la pestaña del navegador. Intentó cerrar la ventana del navegador. Ingresó otra URL en la barra de URL y presionó enter. Todas estas acciones generan un evento antes de descargar en la ventana, sin información más exacta sobre el evento, cómo se desencadena o qué acción lo desencadena. Pero sí, puede detectar clics en hipervínculos y evitar esta ventana emergente cuando alguien hace clic en un hipervínculo. Esa es la única posibilidad que tienes ahora mismo. Entonces, para su problema exacto, no existe una solución a partir de ahora.
 – 
Manish
8 dic. 2016 a las 14:24

2 respuestas

Esto debería funcionar.

En Chrome, sus mensajes personalizados no se mostrarán como se explica aquí

Es posible que el mensaje personalizado tampoco funcione para Firefox:

<html>
    <head>
        <title>Script</title>
        <script>
            var navigating = false;
            window.onbeforeunload = function (e) {

                if(!navigating){
                    return null;
                }
                navigating = false;
                var e = e || window.event;

                  // For IE and Firefox
                  if (e) {
                    e.returnValue = 'àààà Are you sure you want to leave?';
                  }

                  // For Safari               
                return ' àààà Are you sure you want to leave?';
            };
            function navigate(url){
                navigating = true;
                setTimeout(function(){ window.location = url; }, 0);
            }
            window.onload = function(){
                var as = document.getElementsByTagName("a");
                var navigateToUrl = function(e){
                    var element = e.target;
                    var url = element.getAttribute("data-href");
                    navigate(url);
                };
                for(var i = 0; i < as.length; i++){
                    as[i].onclick= navigateToUrl;
                }
            }
        </script>
    </head>
    <body>
        hello
        <a href="#" data-href="http://google.com">Google</a>
    </body>
</html>
-1
sabotero 9 dic. 2016 a las 15:36
Bueno, @Liam he editado mi respuesta. Y respondí la pregunta.
 – 
sabotero
8 dic. 2016 a las 14:29
Entonces, ¿desea que el OP agregue una función de javascript a cada enlace en su página web? ¿Seguramente esto no va a ser práctico?
 – 
Liam
8 dic. 2016 a las 14:33
@sabotero. Muchas gracias. Funcionó. Definitivamente votaré a favor de esto, pero lo siento, no puedo aceptar la respuesta, ya que en mi caso no es posible agregar funciones de JavaScript a cada enlace.
 – 
Parth Vora
8 dic. 2016 a las 15:40
Seguramente ahora puede aceptar mi respuesta, he editado la respuesta con una solución más práctica.
 – 
sabotero
9 dic. 2016 a las 15:38

Esa ventana emergente es la ventana emergente predeterminada del navegador. No creo que se pueda eliminar. Sin embargo, puede intentar activar la tecla Intro usando javascript. De forma predeterminada, Reload está seleccionado, por lo que al presionar la tecla Intro, se hará clic en Reload y se volverá a cargar la página.

No lo he probado yo mismo, pero podría funcionar.

-2
mrid 8 dic. 2016 a las 14:08