2011-08-23 3 views
6

Problembeforeunload dziwactw

Korzystanie $(window).bind("beforeunload", ...[snip] zapytać, czy użytkownik chce opuścić stronę daje dziwne wyniki w niektórych przeglądarkach. Pojawi się okno dialogowe z pytaniem, czy chcesz pozostać na stronie, czy opuścić stronę. Jeśli klikniesz opcję pobytu na stronie, Google Chrome (najnowsze - 13.0.782.215 m) i WinIE7 wyskoczy na ostatnią stronę historii w przycisku "Wstecz".

Aby zilustrować ten punkt, prąd historia sesja składa się odwiedzając następujące strony:

  • Page 3
  • Page 2
  • Page 1

zdecydować opuścić Page 3 i zostanie wywołane zdarzenie beforeunload. Możesz pozostać na bieżącej stronie.

Ponownie klikniesz przycisk Wróć i tym razem zdecydujesz się opuścić stronę. Powinieneś znaleźć się na stronie 2, ale zamiast tego jesteś na stronie 1. Możesz nawigować dalej do przodu.

Pytanie

Jak mogę zapobiec przeglądarki z usunięcia tych stron z przycisku Wstecz, kiedy wybrać opcję „pozostać na bieżącej stronie”? Czy to możliwe?

Przykład problemu

za pomocą Google Chrome, w nowym oknie, udaj się do http://stackoverflow.com i przeglądać na kilka pytań bez wracając. Następnie naciśnij przycisk Zadaj pytanie. Rozpocznij pisanie w oknie dialogowym. Naciśnij Wróć w przeglądarce. Wybierz pozostać na stronie. Ponownie naciśnij w przeglądarce i tym razem wybierz opcję opuszczania strony. Znaleźliście już dwie strony historii. Możesz zasadniczo wrócić do wielu stron, jeśli klikniesz na stronie więcej niż jeden raz.

Dlaczego to ma znaczenie ?!

Nie chcę mylić moich użytkowników. Nie są typami komputerowymi.

Mój kod (nie, że jest to istotne)

$(window).bind("beforeunload", function(){ 
    if (in_edit > 0){ 
     return "You are currently editing this job.\n\nAre you sure you wish to exit the page?"; 
    } 
}); 
+0

Ciekawe - mogę odtworzyć to w Chrome 11 (na przykład), ale nie w Canary (wersja 15). Zgaduję, że to/był błąd, ale nie mogę go znaleźć na http://www.crbug.com. –

+0

Udało mi się odtworzyć go na Wyspach Kanaryjskich. crbug.com id 93858 – dan

+0

Po raz kolejny spróbowałem na Wyspach Kanaryjskich i za pierwszym razem * myślę * Udało mi się zrobić to źle, ale teraz nie mogę odtworzyć :( –

Odpowiedz

0

Można próbować to ukryty iframe do strony, a następnie w funkcji onbeforeunload zmienić SRC na tym iframe. Może to prawdopodobnie zawierać inny adres URL w historii, który może zostać usunięty ze stosu historii zamiast bieżącej strony, na której się znajdujesz.

Więc historia wygląda następująco:

Page3 
Page2 
Page1 

onbeforeunload zmienia iframe:

Dummy 
Page3 
Page2 
Page1 

Ale to tylko przypuszczenie, że może działać, trzeba będzie spróbować ...