entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Unload no funciona en Chrome

Buenas tardes.
Tengo un código que me redirige a otra página si no se cumplen ciertas condiciones. Estoy usando unload para esto, lo cual me funciona muy bien en Mozilla, pero a la hora de ejecutar en Chrome u Opera no funciona, no se redirige a la página que quiero y continúa su "camino".
Dejo acá parte del código y agradezco de antemano cualquier ayuda.

 $(window).unload(function() {
  salir();
 });

  function salir()
  {
    //Función que verifica si puede salir del formulario.
    //Esta función solo aplica para cuando se pretende usar un link a otra página,
    // el botón atrás del navegador o el botón adelante.
    //Esta función NO impide que cierre la ventana si se usa el botón cerrar del navegador.

    var guardar = document.getElementById("guardar").value;// Campo oculto que tiene un valor para evaluar.
    var balanceo = document.getElementById("balanceo").value;// Campo oculto que tiene un valor para evaluar.

    if(guardar != 1)
    {
      if(balanceo == 1)
      {// Si esta condición se cumple envía a la página de mensaje_balance.php
        document.location = 'mensaje_balance.php';

      }
      else
      { // Si la condición no se cumple puede salir de la página normalmente al destino escogido por el usuario.
        return true;
      }
    }
    else 
    {
      return true;
    }

  }

También intenté con onbeforeunload y tampoco funcionó. Intenté ponerlo en la etiqueta body pero el resultado es el mismo.

0voto

ferneyp34 comentado

También intenté con

window.onbeforeunload = salir;

pero tampoco funcionó.

2 Respuestas

0voto

ferneyp34 Puntos620

Buenas tardes.
@Leonardo-Tadei Disculpe por tardar en contestar.
La primera solución que propone la había intentado sin éxito. La segunda no logré implementarla tampoco.
Finalmente se me ocurrió hacer como vi en un blog alguna vez: Al sacar el cursor de la página y acercarlo a la barra tareas del navegador, mostrar un mensaje que indique al usuario que no puede salir de la página. Lo hice de esta forma:

$(document).mouseout(function(){
  //Muestra el mensaje de error
});

El problema es que al hacer esto, el mensaje modal sale pero se oculta rápidamente. Intenté hacerlo de varias formas pero no funcionó.
Finalmente lo que hice fue esto:

<script type="text/javascript">
  function coordenadas(event) 
  {
    var y = event.clientY;

    var balanceo = document.getElementById("balanceo").value;
    if(balanceo == 1) //Uno es el resultado de la función que evalúa si se puede abandonar la página. En este caso (1) no.
    {
      if(y >= 0 && y <= 20 )
      {
        $("#modDesBal").modal('show'); //Modal con mensaje de error.
        $("#btnDesBal").focus();
      }
    }
  }
</script>

</head>
<body onMouseMove="coordenadas(event);">

Lo que hice fue determinar la posición del cursor y si este se acercaba a cero, el borde superior del navegador, mostraba el mensaje. Como pueden ver hay un rango de cero a veinte; se debe a que en ocasiones el cursor no queda en la posición cero así que no se muestra el mensaje, no sé porqué no queda en cero.
Bueno. Muchas gracias a todos por su interés, especialmente a Leonardo.
Hasta la próxima.

0voto

Peter comentado

Gracias por compartir tu solución!

4votos

Leonardo-Tadei Puntos227320

Hola @ferneyp34,

probá haciendo:

...
window.onunload = salir;
...

Acá hay documentación sobre cómo se usa esto

Pareciera que lo que hiciste vos no funciona, por el orden en que se ejecuta el código en las llamadas a eventos. Si el evento se ejecuta antes que la asignación, la función no estará definida al momento en que haga falta, sino inmediatamente después, cuándo ya es demasiado tarde.

El ejemplo típico de esta diferencia en el llamado a eventos de JavaScript es cuando, por ejemplo, en el click de un botón lo deshabilitás para impedir que el usuario lo presione nuevamente antes de terminar un proceso. En el caso de que el evento se sobreescriba antes del despacho, como hace Google Chrome, el evento click nunca se generará, porque cuando debe generarse el botón está deshabilitado, con lo que no es posible hacerle click.

Después contanos si era esto!

1voto

ferneyp34 comentado

Buen día @Leonardo-Tadei
No funcionó

window.onunload = salir;

en Chrome, en Mozilla funciona correctamente. La verdad no sé que hacer.
También cambié la posición de window.onunload = salir;, pero tampoco funcionó en Chrome. probé también el ejemplo que pone el enlace que dejo ud pero tampoco funciona en Chrome.

1voto

Leonardo-Tadei comentado

Hola @ferneyp34,

revolviendo un poco por ahí, parece que Chrome (y supongo que los demás navegadores que usen el motor JavaScript V8) no dan soporte en el unload() para redirigir a otra página ni para abrir popups.

Estas cosas se suelen limitar para evitar la publicidad invasiva y ciertos ataques.

Fijate en esta solución, y si no funciona, esta forma muy ingeniosa de llamar las cosas en diferido con setTimeout

Saludos

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta