2011-12-30 9 views
6

Con evento di scaricamento della finestra, è possibile mostrare all'utente una finestra di dialogo di conferma, diciamo in una situazione in cui è in corso una richiesta che si sta aspettando per terminare e navigare lontano dalla pagina terminerà la richiesta.Annulla/Interrompi/Confermare un evento di modifica stato HTML 5 (onpopstate)

C'è un modo per farlo con onpopstate dell'API di cronologia HTML5? O in qualsiasi altro modo con lo stesso risultato?

risposta

0

Credo che si potrebbe modificare il comportamento di pushState per chiedere conferma prima di spingere un nuovo stato:

// Store original pushState 
var _pushState = window.history.pushState; 
// Some bad global variable to determine if confirmation is needed 
var askForConfirm = true; 
// Modify pushState behavior 
window.history.pushState = function() { 
    if(!askForConfirm || confirm('Are you sure you want to quit this page ?')) { 
     // Call original pushState 
     _pushState.apply(window.history,arguments); 
    } 
}; 
+0

Ma questo non si cura delle situazioni in cui l'utente ha causato l'attivazione dell'evento (ad esempio premendo il pulsante Indietro) – Mansour

+0

Hm. Bene, allora forse è possibile gestirlo nell'evento onpopstate, memorizzando lo stato precedente e spingendolo indietro in caso di cancellazione ... Sembra un po 'complicato. –

0

Non so se aiuta nella vostra situazione, ma Sammy.js, un hash popolare -routing library ha un gestore before. L'ho usato nella mia applicazione per registrare l'hash precedentemente acceduto, e se è l'hash voglio impedirgli di uscire, return false li terrà su quella pagina. Devi ancora riscrivere l'URL per visualizzare la pagina precedente, ma sembra funzionare.

Vedere my answer in this other thread per ulteriori informazioni.