2013-05-13 5 views
5
<html> 
<body> 

<button type="button" onclick="clickme()">Click Me</button> 

<script> 
var test = 0; 

function clickme() { 
    test = 1; 
    console.log(test); 
} 

window.onunload = function() { 
    alert("test"); 
} 
</script> 

</body> 
</html> 

Używam tego prostego kodu do testowania niektórych rzeczy za pomocą onunload i onbeforeunload. Z jakiegoś powodu, gdy odświeżam/opuszczam stronę i powoduję zdarzenie onunload, nie otrzymuję alertu i błędu w konsoli Firebug. Jeśli używam onbeforeunload, to działa i nie dostaję żadnego błędu, ale słyszę, że onbeforeunload nie jest zbyt dobry w różnych przeglądarkach.Błąd alertu OnUnload "NS_ERROR_NOT_AVAILABLE"

NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111  
(NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert] 

alert("test"); 

Nie próbuję ostrzegać zmiennej testowej, tylko tekst "testuj", zanim ktokolwiek spróbuje wskazać to.

+0

próbowałeś tego w IE ...? – Pandian

+1

["Metody' showModalDialog() ',' alert() ',' confirm() 'oraz' prompt() 'mogą teraz nic nie robić podczas stron, zanim wczytują i usuwają zdarzenia."] (Http: // www .w3.org/TR/html5-diff/# changes-2011-05-25) –

+0

@Pandian Najwyraźniej błąd przeglądarki Firefox (podpowiedzi: spójrz na przedrostki 'NS_' i' nsI' oraz wzmiankę o Firebug). –

Odpowiedz

13

Jeśli chcesz, aby to działało, musi to być zdarzenie onbeforeunload, ale zamiast tworzenia okna wyskakującego alert/potwierdzenie, zdarzenie onbeforeunload ma wbudowane okno podręczne. Wszystko, co musisz zrobić, to zwrócić ciąg znaków, a okno podręczne pojawi się, gdy użytkownik spróbuje odejść od strony. Jeśli nie ma zmiennej zwracanej, nie pojawi się wyskakujące okienko.

  • Wspaniałą rzeczą jest to, że w wyskakującym okienku znajdują się 2 przyciski: OK i Anuluj.
  • Jeśli użytkownik kliknie przycisk OK, przeglądarka będzie nadal poruszać się z dala od strony
  • Jeżeli użytkownik kliknie Anuluj, przeglądarka będzie anulować rozładunek i pozostanie na bieżącej stronie
  • Impreza onbeforeunload jest jedynym pop-up, które można anulować zdarzenie onUnload

przykładem jest poniżej:

<script type="text/javascript"> 

window.onbeforeunload=before; 
window.onunload=after; 

function before(evt) 
{ 
    return "This will appear in the dialog box along with some other default text"; 
    //If the return statement was not here, other code could be executed silently (with no pop-up) 
} 

function after(evt) 
{ 
    //This event fires too fast for the application to execute before the browser unloads 
} 

</script> 

wydaje się, że próbujesz zrobić alert w przypadku onUnload. Problem polega na tym, że jest już za późno. Strona już się rozładowuje i nie ma możliwości jej zatrzymania. Być może uda Ci się wyświetlić komunikat ostrzegawczy, ale nie ma znaczenia, co kliknie użytkownik, ponieważ strona już się rozładowuje.

Najlepiej jest jechać ze zdarzeniem onbeforeunload.