2012-02-22 6 views
5

Poniższy tekst: https://gist.github.com/1876791 (zapożyczony z wersji demonstracyjnej w this question) to prosty przykład użycia window.onbeforeunload w js.Safari pozostaje "ładowanie", gdy window.onbeforeunload zwraca fałsz

Problemem mamy jest następujący (dzieje z Safari 5.1.3 i nie Najnowsza wersja Chrome):

  1. Odwiedź tę stronę: http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
  2. Kliknij na jeden z linków, będziesz otrzymasz alert z pytaniem, czy naprawdę chcesz opuścić tę stronę
  3. Kliknij "Pozostań na stronie"
  4. Załaduj ponownie stronę, używając cmd-R. Zostaniesz zapytany o inny czas, jeśli naprawdę chcesz opuścić stronę
  5. Kliknij "Pozostań na stronie".
  6. Safari pozostaje w stanie "ładowanie", a pasek postępu wygląda tak, jakby załadować następną stronę.

Czy to błąd z Safari? Czy istnieje sposób na obejście tego problemu?

+0

To dziwne, bo nawet próba window.stop() nie spowoduje, że Safari przestanie udawać, że odświeża stronę. Zgaduję, że to błąd, spróbuj zgłosić to do [webkit guys] (http://www.webkit.org/quality/reporting.html) – Roberto

+0

Zdarza się tak również, jeśli odświeżam więcej niż raz.Nie muszę klikać jednego z linków. Używam Safari 5.1.2 na PC. –

Odpowiedz

1

udało mi się odtworzyć ten problem nawet podczas pomijanie kroki OP 2 i 3. Każda forma eksponatów Przeładuj emisji. Minimalistyczne kroki do odtworzenia:

  1. Odwiedź stronę the page in question.
  2. Przeładuj hit.
  3. Kliknij przycisk "Pozostań na stronie".

Postęp ładowania jest wizualnie wcześniejszy zaraz po przeładowaniu i pozostaje tak przez całe życie okna potwierdzenia (najwyraźniej w celu przekazania "wiszącego nad krawędzią klifu" - typ dojrzałej sytuacji ;) Jednakże:

  • Kiedy dialogowe zostaje odrzucona z przyciskiem „Pobyt na stronie”, to wychodzi z obroną X symbol na i postęp ładowania nadal zaangażowany i zamrożone gdzieś około 10% znak.
  • Tego "ładowania" NIE można anulować w żaden sposób (klawiatura, przycisk, skrypt).
  • Zakładka Network in Web Inspector zapewnia NIE zaistniałą sytuację.

To naprawdę wygląda jak błąd Webkit/Safari UI - wygląda na to, że nie wyłącza paska postępu w warunkach pozostawania na stronie. Najlepiej byłoby zgłosić to do Webkit team lub, ponieważ możesz tego doświadczyć w Safari, może Safari team będzie lepiej.

0

Proszę zobaczyć ten PAGE->https://developer.mozilla.org/en/DOM/window.onbeforeunload

Musisz obsłużyć zdarzenia. Przykład na stronie działa poprawnie. Oto kod:

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
    e.returnValue = 'Any string'; 
    } 

    // For Safari 
    return 'Any string'; 
}; 
+0

Najpierw wątpiłem w twoją odpowiedź. Wtedy pomyślałem, że dodanie '(e)' zamiast '()' zadziała. Ale ta dokładna strona https://gist.github.com/1960398 (biorąc dokładnie twój kod js) pokazuje błąd, o którym mówię w moim pytaniu. – rpechayr

+0

to nie był "mój kod js". Podałem źródło jako link, jeśli mógłbyś to sprawdzić. – zipizip

+0

Tak, również natrafiłem na ten kod. Przepraszam, że mój komentarz nie był tak naprawdę jasny. – rpechayr