2012-03-08 13 views
18

Ovviamente, window.onbeforeunload ha riscontrato la sua giusta quota di problemi con Chrome come ho visto da tutti i problemi che ho riscontrato. Qual è il lavoro più recente in giro?window.onbeforeunload in Chrome: qual è la correzione più recente?

L'unica cosa che ho anche vicino al lavoro è this:

window.onbeforeunload = function() { return "alert" }; 

Tuttavia, se sostituisco ritorno "alert" con qualcosa come alert ("bla"), non ottengo niente da Chrome.

Ho visto in this question che Google lo blocca intenzionalmente. Buono per loro ... ma cosa succede se voglio fare una chiamata AJAX quando qualcuno chiude la finestra? Nel mio caso, voglio sapere quando qualcuno ha lasciato la chat sul mio sito web, segnalato dalla chiusura della finestra.

voglio sapere se c'è un modo per entrambi i
(a): fissare la chiamata window.onbeforeunload in modo che posso mettere AJAX in là
o
(b): ottenere qualche altro modo di determinare che una finestra ha chiuso in Chrome

+0

Vedi anche http://stackoverflow.com/questions/7389554/crossbrowser-onbeforeunload – powtac

risposta

13

risposta:

$(window).on('beforeunload', function() { 
    var x =logout(); 
    return x; 
}); 
function logout(){ 
     jQuery.ajax({ 
     }); 
     return 1+3; 
} 

un po 'mix and match, ma ha funzionato per me. Il 1 + 3 si assicura che venga chiamata la funzione di logout (vedrai 4 se ha successo sul popup quando tenti di uscire).

+1

Questo lavoro _DOES_ in Chrome per me. GRAZIE!!! – jahroy

+1

Questo non funziona in chrome e farà anche apparire un avviso. C'è un modo per ignorare l'avviso in chrome? – angelokh

+0

Quale avviso? Questo ha funzionato senza alcun preavviso – varatis

3

Ecco un approccio più diretto.

$(window).on('beforeunload', function() { 
    return "You should keep this page open."; 
}); 

Il messaggio restituito può essere tutto quello che vuoi, tra cui la stringa vuota se non hai niente da aggiungere al messaggio che Chrome mostra già. Il risultato è simile al seguente:

enter image description here

+5

Ho provato la stessa cosa e non funziona.L'avviso viene visualizzato correttamente ma senza il mio messaggio personalizzato. – c4k

+2

@ c4k penso che qualcosa nell'ultimo aggiornamento di Chrome abbia rotto questo. Nel mio caso, il messaggio personalizzato restituito funzionava una settimana fa, ma dopo l'installazione di una patch di Chrome non funziona più. – Chronozoa

+4

@Chronozoa, hai ragione: https://www.chromestatus.com/feature/5349061406228480 – Bobort

2

Secondo MDN,

La funzione dovrebbe assegnare un valore stringa alla proprietà returnValue dell'oggetto Event e restituire la stessa stringa.

Questo è il seguente

window.addEventListener('beforeunload', function(ev) { 
    return ev.returnValue = 'My reason'; 
}) 
+0

Questo è il tipo di idea giusta, ma hai dimenticato di aggiungere l'evento 'beforeunload' al listener. – zenw0lf

+0

Grazie, l'ho aggiornato – kisp

+0

Grazie mille! Questo ha funzionato su Chrome 63; restituire la stringa senza assegnare 'returnValue' non era abbastanza. – cxw

Problemi correlati