2012-03-08 11 views
18

Oczywiście, window.onbeforeunload napotkał swój spory udział w problemach z Chrome, jak widziałem ze wszystkich napotkanych problemów. Jakie są najnowsze prace?window.onbeforeunload w Chrome: jaka jest najnowsza poprawka?

Jedyne co mam nawet blisko do pracy jest this:

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

Jednak gdybym zastąpił zwrotny „alert” z czymś alert („bla”), otrzymuję nic z Chrome.

Widziałem w numerze this question, że Google celowo blokuje to. Dobre dla nich ... ale co jeśli chcę wykonać połączenie AJAX, gdy ktoś zamknie okno? W moim przypadku chcę wiedzieć, kiedy ktoś opuścił czat na mojej stronie, sygnalizowany zamknięciem okna.

Chcę wiedzieć, czy istnieje sposób, aby zarówno
(a): naprawić połączenie window.onbeforeunload tak, że mogę umieścić AJAX tam
lub
(b): trochę inny sposób określania, które okno został zamknięty w Chrome

+0

Zobacz również http://stackoverflow.com/questions/7389554/crossbrowser-onbeforeunload – powtac

Odpowiedz

13

Odpowiedź:

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

trochę mix and match, ale pracował dla mnie. 1 + 3 zapewnia, że ​​wywoływana jest funkcja wylogowania (zobaczysz 4, jeśli zakończy się powodzeniem na wyskakującym okienku przy próbie wyjścia).

+1

Ta praca _DOES_ w Chrome dla mnie. DZIĘKI!!! – jahroy

+1

To nie działa w chrome, a także wyskoczy alert. Czy istnieje sposób, aby zignorować alert w chrome? – angelokh

+0

Jaki alert? To zadziałało dla mnie bez żadnego ostrzeżenia – varatis

3

Oto bardziej proste podejście.

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

Zwrócona wiadomość może być dowolna, w tym pusty ciąg, jeśli nie masz nic do dodania do wiadomości, którą Chrome już pokazuje. Wynik wygląda tak:

enter image description here

+5

Próbowałem tego samego i to nie działa.Alert wyświetla się poprawnie, ale bez mojej niestandardowej wiadomości. – c4k

+2

@ c4k Myślę, że coś w najnowszej aktualizacji chrome zepsuł to. W moim przypadku zwrócona wiadomość niestandardowa działała tydzień temu, ale po zainstalowaniu poprawki chrome już jej nie ma. – Chronozoa

+4

@Chronozoa, masz rację: https://www.chromestatus.com/feature/5349061406228480 – Bobort

2

Według MDN,

Funkcja powinna przypisać wartość ciągu do właściwości returnValue obiektu zdarzenia i powrót tego samego łańcucha.

To po

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

Jest to właściwy pomysł, ale zapomniałeś dodać do odbiornika zdarzenia "beforeunload". – zenw0lf

+0

Dzięki, zaktualizowałem to – kisp

+0

Dziękuję bardzo! To działało w Chrome 63; Zwracanie łańcucha bez przypisywania wartości "returnValue" nie było wystarczające. – cxw

Powiązane problemy