2012-08-29 13 views
10

Ten kod działa poprawnie w przeglądarce Firefox, , ale nie mogę już sprawić, aby zdarzenie zwolnienia działało w przeglądarce Chrome. Czy Chrome przestał obsługiwać zdarzenie zwalniania?Nie mogę uruchomić zdarzenia zwolnienia w przeglądarce Chrome

To jest mój kod:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 

<script type="text/javascript" src="../jquery/jquery.js"></script> 

<script type="text/javascript"> 

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME 
    window.addEventListener("pagehide", pageHidden, false); 

    window.onunload = function() { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD 

    $(window).unload(function() { //WORKS ON FIREFOX BUT NOT IN CHROME 
     alert("Are you sure 3?"); 
    }); 

</script> 
</head> 

<body> 
TEST WEBSITE 
<a href="http://www.iamawesome.com">external link</a> 
</body> 
</html> 

Jak mogę uzyskać zdarzenie wyładowania do pracy w Chrome?

Dzięki!


ODPOWIEDŹ: Nie testuj zdarzenia wyładowania z wpisami;)

+1

Możliwe dupe: http://stackoverflow.com/questions/803887/can-i-pop-up-a-confirmation-dialog-when-the-user-is-closing-the-window-in-safari –

+0

nigdzie nie uruchamiasz niczego w swoim kodzie. jesteś po prostu wiążącymi opiekunami. – jbabey

+0

Sprawdź [ten raport o błędzie] (http://bugs.jquery.com/ticket/10509). Krótko mówiąc, nie będzie działać w Chrome; spróbuj zamiast tego użyć '.onunload' handler, ale nawet to może być" naprawione ".) – raina77ow

Odpowiedz

14
window.onunload = alert("Are you sure 2?"); 

To jest błędne. Ustawiasz onunload do wyniku alert, trzeba ustawić go do funkcji:

window.onunload = function(){ 
    alert("Are you sure?"); 
} 

Jeśli chcesz użyć jQuery, to będzie działać we wszystkich przeglądarkach.

$(window).unload(function() { 
    alert("Are you sure?"); 
}); 

UWAGA: Może wydają jak to nie działa w Chrome, ale jest. To dlatego, że Chrome blokuje alert w wydarzeniu onunload.

+1

To był problem .. Chrome blokował wszystkie moje alerty.Próbowałem console.log i działa dobrze. Dzięki za szybką odpowiedź ! –

+0

Nie ma za co :-) –

+2

Jeśli korzystasz z alertów, w konsoli Chrome powinien pojawić się błąd. –

2

Spróbuj:

window.onbeforeunload = function() { 
    // code 
}; 

lub

window.onpagehide = function() { 
    // code 
}; 
+0

Dzięki Korikulum! Próbowałem tego, ale nie wyświetlał się komunikat ostrzegawczy, który piszę w każdej z funkcji. –

+0

. Przydaje się przydatnego zdarzenia, ale nie można ufać, że zostanie wywołany za każdym razem, gdy strona zniknie.Na przykład, jeśli uruchomisz nową kartę, a następnie zamkniesz całą przeglądarkę, wydarzenie może się nie uruchomić. –

1

Nic nie wywoła - po prostu wykonaj wyrażenie, które chcesz dodać jako Handler:

window.onunload = function(event) { 
    alert("Are you sure 2?"); 
}; 
+0

Nadal nie działa, mogę wyjść z tej strony i komunikat alertu nie pojawi się :( –

1

Z tego, co przeczytałem, wygląda na to, że Chrome blokuje alerty po uruchomieniu zdarzenia. Możesz uruchomić niektóre funkcje, jednak po prostu nie wydaje się, aby cokolwiek, co współdziała z użytkownikiem.

Wydaje się, że od window.onbeforeunload in Chrome: what is the most recent fix?, jeśli chcesz tylko wyświetlić komunikat potwierdzający, musisz to zrobić, zwracając ciąg znaków z wiadomością z funkcji ustawionej jako wywołanie zwrotne.

window.onbeforeunload = function() { 
    // Some wrap up code (no alerts, confirms, redirects, etc) 
    return 'My confirmation messsage'; 
} 

Tekst "Mój komunikat potwierdzający" pojawi się w oknie dialogowym potwierdzenia wyboru Chrome. Firefox dokumentuje to zachowanie here.

+0

Dziękuję, że to zadziałało i pasowało do mojego obecnego projektu – Callat

Powiązane problemy