onbeforeunload personalizzazione della schermata di conferma

È ansible creare una casella di conferma personalizzata per l’evento onbeforeunload in un browser? Ho provato ma poi ho 2 caselle di conferma (una da me che non è altro che conferma di ritorno … e poi quella standard dal browser).

Al momento il mio codice assomiglia a:

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?'; } } 

Sto usando jQuery per questo.

 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; }; 

Nota: la maggior parte dei browser inserisce questo messaggio dopo un altro testo. Non hai il controllo completo del contenuto della finestra di dialogo di conferma.

No, non puoi evitare quello standard dal browser. Tutto ciò che puoi fare è inserire del testo personalizzato in esso; se si utilizza il seguente gestore di eventi (registrato il prototipo modo lib):

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

(e showMyBeforeUnloadConfirmation è true) otterrai la conferma standard del browser con il seguente testo:

Sei sicuro di voler allontanarti da questa pagina?

foo bar baz

Premere OK per continuare o Annulla per rimanere sulla pagina corrente.

[OK] [Annulla]

Ho affrontato lo stesso problema, sono stato in grado di ottenere la propria finestra di dialogo con il mio messaggio, ma i problemi che ho dovuto affrontare erano:

  1. Stava dando un messaggio su tutte le navigazioni e lo volevo solo per un clic ravvicinato.
  2. Con il mio messaggio di conferma se l’utente seleziona “Annulla”, mostra comunque la finestra di dialogo predefinita del browser.

Di seguito è riportato il codice delle soluzioni che ho trovato, che ho scritto sulla mia pagina Master.

 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;