Po prostu napotkałem jakieś dziwne zachowanie w Firefoksie 3.6/Mac. Podejrzewam jednak, że jest to ogólne zachowanie Firefoksa.Przekierowanie JavaScript (location.href) łamie przycisk Wstecz, chyba że użyto metody setTimeout()
Stworzyłem dwa martwe prostych stron testowych, które zmieniają właściwości window.location.href
, aby przejść do nowego adresu URL:
- http://troy.onespot.com/static/stack_overflow/redirect.html
- http://troy.onespot.com/static/stack_overflow/redirect_timeout.html
Jeśli spróbujesz następujące albo pliku:
- Otwórz nową/pustą kartę przeglądarki.
- Wklej adres URL i naciśnij "Enter".
Zauważysz jedną różnicę między tymi dwoma: przy użyciu pierwszego linku przycisk "Wstecz" przeglądarki jest wyłączony; używając drugiego, jest włączony i działa tak, jak bym tego oczekiwał.
Jedyna różnica między tymi dwoma skryptami polega na tym, że ta ostatnia ustawia jednomutowy limit czasu przed zmianą window.location.href
.
Nie wiem, dlaczego tak się dzieje i staram się osiągnąć zachowanie drugiego skryptu (gdzie przycisk "Wstecz" działa dalej zgodnie z oczekiwaniami) bez powodowania opóźnień dla użytkownika.
Domyślam się, że Mozilla Firefox traktuje natychmiastowe "przekierowanie", ustawiając window.location.href
tak samo, jak przy użyciu metody window.location.replace()
, ponieważ myślę, że programiści często używają tego pierwszego, gdy zamierzali użyć tego drugiego. Może użycie setTimeout
, ponieważ powoduje to asynchroniczne uruchamianie kodu, powoduje porażkę tego zachowania. Czy to możliwe?
Nie eksperymentowałem z minimalną wartością dla setTimeout
, aby osiągnąć pożądany efekt, ale zrobię to teraz. Chciałbym się dowiedzieć, dlaczego tak się dzieje dokładnie.
Dzięki!
Pierwszy działa idealnie: naciśnij przycisk Wstecz i wróć na tę stronę. Po drugie, jedno z powrotem pokazuje pustą stronę, wraca tu druga strona. Jeśli otworzę w nowej karcie, pierwsza działa zgodnie z oczekiwaniami, nie ma żadnych dostępnych. Drugi powraca do pustej strony. To są dokładnie te zachowania, których oczekiwałbym od twojego opisu. –
@Skip Head - dlaczego? dlaczego samo ustawienie limitu czasu zmieniłoby zachowanie? – sje397
Przetestowałem dla Ciebie kilka innych przeglądarek: Zdarza się w Chrome na systemach Linux/Mac i Opera dla komputerów Mac. Nie dzieje się to w Safari na Macu ani w Firefoksie dla Linuksa. – Robert