Chiedi se l'utente è sicuro di lasciare il sito (XHTML / JavaScript)
-
21-09-2019 - |
Domanda
Quando un utente lascia una pagina del mio sito web, ci dovrebbe essere un messaggio di avviso che dà all'utente la possibilità di rimanere sulla pagina:
"Sei sicuro di voler chiudere questa pagina?"
Non importa se la pagina successiva è una pagina interna o esterna.
Ho pensato che questo potrebbe essere fatto con il gestore di eventi onUnload, non poteva?
<body onunload="confirmClose()">
La funzione confirmClose () deve poi mostrare una finestra di messaggio con due pulsanti in modo che l'utente può scegliere tra "Davvero lasciare" o "Stay".
function confirmClose() {
return confirm('Really leave this page?')
}
Ma questa funzione non può fermare lo scarico, giusto?
Avete una soluzione per il mio problema? Grazie in anticipo!
Soluzione
È possibile aggiungere un evento onbeforeunload
. Si noti che può solo restituire una stringa di testo da includere nella finestra del browser visualizzerà quando l'evento viene chiamato. Non è possibile modificare la finestra di dialogo di là di questo, né è possibile attivare il proprio confirm
come si sta cercando di fare.
Mi piacerebbe notare che questo è molto, un comportamento molto fastidioso se non in un paio di situazioni specifiche. A meno che non mi sta salvando da una significativa perdita di dati con questo, si prega di non farlo.
Altri suggerimenti
È possibile fornire solo il testo. Il browser gestisce la finestra di dialogo (motivi di sicurezza). Ecco un po 'di codice è possibile utilizzare:
window.onbeforeunload = function (e) {
var e = e || window.event;
var msg = 'Are you sure you want to leave?';
// For IE and Firefox
if (e) {
e.returnValue = msg;
}
// For Safari / chrome
return msg;
}
Prova questo su diversi browser, però. Noterete il messaggio deve essere costruito in modo diverso a seconda finestra formulazione dei vari browser.
Ecco quello che io uso:
if (IsChrome) {
return 'You were in the middle of editing. You will lose your changes if you leave this page';
} else {
return 'You were in the middle of editing. Press OK to leave this page (you will lose your changes).';
}
Il browser si occupa di visualizzare la finestra di conferma.
È necessario restituire la stringa con il messaggio che si vuole chiedere. Inoltre, si consiglia di utilizzare onbeforeunload
per la compatibilità cross browser.