Pregunta

¿Es posible crear un cuadro de confirmación personalizada para el evento onbeforeunload en un navegador? Lo intenté, pero entonces consigo 2 cuadros de confirmación (uno de mí, que no es más que confirmar el retorno ... y luego es el estándar del navegador).

En el momento en que mi código es el siguiente:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

Estoy usando jQuery para esto.

¿Fue útil?

Solución

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

Tenga en cuenta: La mayoría de los navegadores ponen este mensaje después de algún otro texto. Usted no tiene control completo del contenido del cuadro de diálogo de confirmación.

Otros consejos

No, no se puede evitar la estándar desde el navegador. Todo lo que se puede hacer es inyectar un poco de texto personalizado en él; si se utiliza el controlador de eventos siguiente (registrada el camino prototipo lib):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

(y showMyBeforeUnloadConfirmation es cierto) que obtendrá la confirmación estándar del navegador con el siguiente texto:

  

¿Está seguro que desea salir de esta página?

     

foo bar baz

     

Pulse OK para continuar o Cancelar para permanecer en la página actual.

     

[Aceptar] [Cancelar]

Me enfrenté al mismo problema, yo era capaz de conseguir su propio cuadro de diálogo con mi mensaje, pero los problemas que enfrentan son:

  1. Se indica el mensaje en todas las navegaciones y quería sólo una estrecha clic.
  2. Con mi propio mensaje de confirmación si el usuario selecciona "Cancelar", nos muestra el cuadro de diálogo por defecto del navegador.

A continuación se muestra el código soluciones que encontré, que escribí en mi página principal.

function closeMe(evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
        return "Do you want to log out of your current session?";
    }
}

window.onbeforeunload = closeMe;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top