2009-08-26 9 views
6

¿Es posible crear un cuadro de confirmación personalizado para el evento onbeforeunload en un navegador? Lo intenté pero luego obtuve 2 cuadros de confirmación (uno de mí que no es más que confirmación de devolución ... y luego el estándar del navegador).antes de descargar la personalización de la pantalla de confirmación

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.

Respuesta

11
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. No tiene control completo del contenido del diálogo de confirmación.

+0

Desafortunadamente, no es posible anular esta pantalla. –

3

No, no puede evitar el estándar del navegador. Todo lo que puede hacer es inyectarle texto personalizado; 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:

¿Seguro ¿Quieres navegar desde esta página?

foo bar baz

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

[Aceptar] [Cancelar]

0

que enfrentan el 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 hacer clic.
  2. Con mi propio mensaje de confirmación si el usuario selecciona "Cancelar", todavía muestra el cuadro de diálogo predeterminado del navegador.

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

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; 
Cuestiones relacionadas