19

Mam następujący kod przekierowania javascript, a następnie trochę więcej kodu.Co dzieje się z kodem po przekierowaniu javascript (ustawienie window.location.href)?

window.location.href = '/someurl'; 
alert('hello'); 
alert('hello again'); 

Powoduje to niespójność przeglądarki.

W firefox pierwszy alert jest widoczny przez ułamek sekundy tuż przed przekierowaniem. Drugi alert nie jest w ogóle widoczny.

W chrome oba alerty pojawią się, a przekierowanie nastąpi dopiero po kliknięciu przycisku OK dla obu alertów.

Czy istnieje pojęcie, co dzieje się z kodem po przekierowaniu, które może rozwiązać te różnice? Jeśli przekierowanie jest asynchroniczne, to co robi chrome? Chciałbym zrozumieć, co się dzieje, abym mógł zdecydować, co zrobić w bardziej skomplikowanym scenariuszu, w którym przekierowanie jest głęboko ukryte w ramach niektórych zwrotów i innej logiki.

+1

Dlaczego chcesz zrobić coś po przekierowaniu? – Musa

+0

Wszystko zależy od czasu - po zmianie lokalizacji nie można polegać na tym, jak długo potrwa przetwarzanie/renderowanie/etc. –

+0

@Musa Właściwie nie chcę nic robić po przekierowaniu, dlatego pojawiło się to pytanie. Na przykład, jeśli przekierowanie ma nastąpić w wywołaniu wywoływanym przez inny kod biblioteki, mogą istnieć inne rzeczy, które zostaną wykonane przez bibliotekę po tym, jak biblioteka wywoła moje wywołanie zwrotne. Ale jeśli po prostu chcę przekierować stronę bez uruchamiania innych rzeczy, być może powinienem coś zrobić, aby zapobiec jej kontynuacji w normalny sposób, w zależności od tego, co przeglądają przeglądarki. – user1385729

Odpowiedz

10

przeglądarka spróbuje wykonać kod po window.location.href = 'url' aż strona przechodzi do następnej adres strony internetowej, więc liczba linii kodu, które będą realizowane w zależności od szybkości przeglądarki

+0

Dzięki, wydaje się to prawdopodobne. Próbuję to przetestować, dodając długo działającą pętlę po przekierowaniu. Gdyby to była kwestia szybkości, czy przeglądarki nie przekierowywałyby losowo podczas pętli? Zarówno chrome, jak i firefox wydają się wykonywać cały kod bez względu na to, co zawiera pętla (chyba, że ​​w pętli znajduje się alert, w którym to przypadku firefox przechodzi do przekierowania w tym momencie). Nie jestem pewien, czy test długich pętli jest najlepszym testem ... – user1385729

+0

Masz rację. Może to nie jest szybkość, ale priorytet każdej funkcji javascript –

+0

@DaniloValente czy masz jakiś zasób, aby to potwierdzić –

16

Sesja JavaScript będzie walka kontynuuj swoją misję w obliczu nadchodzącej zagłady. Kodowanie w ten sposób jest uważane za nieprzewidywalne. ... i okrutny.

+1

Myślę, że to najlepsza odpowiedź. Zachowanie jest niezdefiniowane. – styfle

+1

+1000 dla ciebie proszę pana. – Houssni

Powiązane problemy