2011-08-01 23 views
24

Jakie są różnice między onbeforeunload i onunload? Mam również konkretne pytanie związane z jego używaniem na iPadzie ... Mam stronę (myPage.html), na której próbuję wyświetlić alert, gdy strona jest zamknięta (np. X jest naciśnięty, aby zamknąć kartę na iPadzie)Różnica między onbeforeunload a onunload

Teraz próbowałem używać zarówno window.onunload, jak i window.onbeforeunload Poniżej znajdują się moje wyniki na iPadzie;

  1. Korzystanie window.onunload, jestem w stanie dostać ostrzeżenie, gdy użytkownik przechodzi do innej strony z mojastrona.html (poprzez kliknięcie na jakiś odnośnik lub wykonując wyszukiwania Google, natomiast na mojastrona.html). Jednak nic się nie dzieje, gdy klapka jest zamknięta z widoku zminimalizowanego (X)

  2. Nie uzyskuję alertu przy użyciu window.onbeforeunload, nawet jeśli użytkownik przechodzi do innej strony niż myPage.html LUB zamyka kartę (X) z widoku zminimalizowanego.

Chciałem wiedzieć, czy istnieje jakiś alternatywny sposób rozwiązania tego problemu?

Dziękuję.

Odpowiedz

12

onunload jest odpowiedzialny za wykonanie instrukcji po zamknięciu strony. Powoduje również problem z IE i AJAX.

onbeforeunload jest bardziej efektywne, ponieważ nie działa w konkurencji z faktycznym zamknięciu okna i jest wyzwalany przed onunload

wiem Opera wykorzystywane do nie uznają onbeforeunload - nie wiem, czy oni Naprawiłem to, ale zawsze zarejestrować słuchacza zarówno dla pewności:

window.onunload = window.onbeforeunload = (function(){... 
+4

Wiele za to ... Ale jakikolwiek pomysł na temat wdrożenia iPada? – testndtv

+16

window.onunload = window.onbeforeunload = (function() {..., uruchomi funkcję dwa razy, jeśli przeglądarka nie będzie miała problemów z obydwoma zdarzeniami – noboundaries

16

Dodawanie z ans AlienWebguy, w celu uniknięcia podwójnego połączenia z przeglądarek, które obsługują zarówno wydarzenia,

var onBeforeUnLoadEvent = false; 

window.onunload = window.onbeforeunload= function(){ 
if(!onBeforeUnLoadEvent){ 
    onBeforeUnLoadEvent = true; 
    //your code here 
    } 
}; 
5

onbeforeunload:

  • wezwany przed rozładunkiem zaczyna
  • MDN tells me można anulować zamknięcia strony przy użyciu event.preventDefault();
  • lub poprzez zwrot non-void wartość (czyli wartość!= 0), na stronie pojawi się okno z potwierdzeniem, który pozwala użytkownikowi wybrać, aby anulować ścisły
  • MDN również mówi, Opera 12 i do wsparcia onbeforeunload - wygląda jak jego wspierany przez jakiś czas teraz

onunload:

  • Wywoływana po rozładunku zaczęła, ale przed każdym dealokacji zasobów (to nie jest dla mnie jasne, co dokładnie jest wykonane w tym okresie)
  • jest zbyt późno, aby anulować stronę bliską w tym p oint

Jedynym powodem mogę myśleć dlaczego chcesz używać onunload nad onbeforeunload byłoby gdzie Twój kod onunload może zająć trochę dużo czasu, i nie chce użytkownikowi zobaczyć okno, które zawiesza się podczas zamykania .

7

Jedną znaczącą różnicą (inną niż anulowalność) między onbeforeunload i onunload jest to, że pierwsza jest wyzwalana dla linków pobierania, a druga nie. Przykład: <a href="https://somewhere.com/thething.zip">download</a> uruchomi obsługę onbeforeunload, ale nie onunload.

+4

Nie mogę tego odtworzyć w Chrome. Masz jakąś dokumentację na ten temat? –