Czy powinienem używać window.navigate czy document.location w JavaScript?

177

Jaka jest preferowana metoda zmiany lokalizacji bieżącej strony internetowej za pomocą JavaScript? Widziałem używane zarówno window.navigate, jak i document.location. Czy są jakieś różnice w zachowaniu? Czy są różnice w implementacjach przeglądarek?

dthrasher
źródło

Odpowiedzi:

220
window.location.href = 'URL';

to standardowa implementacja zmiany lokalizacji bieżącego okna.

James Skidmore
źródło
22
Czy masz odniesienie wskazujące, że window.location.href jest standardową implementacją? I czy ten standard dotyczy równie dobrze wszystkich przeglądarek? Z pewnością wydajesz się kompetentny, a ponad 15 głosów (plus zaakceptowana odpowiedź) pomaga uczynić go bardziej wiarygodnym, chociaż myślę, że lepiej byłoby zapoznać się z dokumentacją od zespołów programistów przeglądarki, aby potwierdzić roszczenie.
Goyuix
6
@Goyuix, prawdopodobnie dokładniej jest powiedzieć, że window.location.hrefjest to pełna implementacja, ale window.locationosiąga to samo. Zobacz docs.sun.com/source/816-6408-10/location.htm : „Jeśli przypiszesz ciąg znaków do locationwłaściwości obiektu, JavaScript tworzy locationobiekt i przypisuje ten ciąg do jego hrefwłaściwości”.
James Skidmore
3
Wygląda na to, że ci goście zdecydowali, że to osobiste preferencje: developer.mozilla.org/Talk:en/DOM/window.location . Lub zobacz przykład u dołu, używają tylko, window.locationale to niekoniecznie oznacza: developer.mozilla.org/en/window.location .
James Skidmore
1
Obecnie używam tego do tworzenia aplikacji na Androida. Mam problem z przekierowaniem strony z JS w domyślnej przeglądarce Androida. Wypróbowałem, window.location.href = 'URL';a także window.location.assign('URL');metodę, która jest przeznaczona do ponownego ładowania nowej strony. Więcej informacji można znaleźć w3schools.com/jsref/obj_location.asp
Philipp
3
window.navigatejest zastrzeżoną metodą, używaną przez Internet Explorera (jestem pewien, czy inne przeglądarki naśladują ją ze względu na kompatybilność, Chrome nie). document.locationlub window.locationsą obiektami standardowymi (zobacz różne specyfikacje HTML / HTML5 / DOM). document.location = someURL(lub window.location = someURL) jest prawdopodobnie obsługiwany ze względu na starszy kod. Właściwy sposób to zrobić document.location.href = someURL, a może document.location.assign(someURL).
PhistucK
11

window.navigate nie jest obsługiwane w niektórych przeglądarkach

W skrypcie java istnieje wiele sposobów przekierowania, zobacz poniższy kod i wyjaśnienie

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href ładuje stronę z pamięci podręcznej przeglądarki i nie zawsze wysyła żądanie do serwera. Tak więc, jeśli masz starą wersję strony dostępną w pamięci podręcznej, przekieruje ona do niej zamiast ładowania nowej strony z serwera.

window.location. assign () na przekierowanie, jeśli chcesz zezwolić użytkownikowi na użycie przycisku Wstecz w celu powrotu do oryginalnego dokumentu.

window.location.replace () , jeśli chcesz przekierować do nowej strony i nie pozwolić użytkownikowi przejść do oryginalnej strony za pomocą przycisku Wstecz.

Srikrushna
źródło
7

document.locatio n jest (przestarzałą, ale nadal obecną) właściwością ciągu tylko do odczytu, zastąpioną przez document.url .

kennebec
źródło
6

window.location wpływa również na oprawę,

najlepsza forma jaką znalazłem to:

parent.window.location.href

A co gorsza:

parent.document.URL 

Zrobiłem ogromny test przeglądarki i niektóre rzadkie IE z kilkoma wtyczkami stają się niezdefiniowane w drugiej formie.

jolmos
źródło
Zgodnie z tą logiką, czy top.window.location.href nie byłby jeszcze lepszy?
Orwellophile
6

window.locationwpłynie na docelową przeglądarkę. document.location wpłynie tylko na przeglądarkę i ramkę / iframe.

Aldry Zhen
źródło
4

window.navigateNIE jest obsługiwane w niektórych przeglądarkach, więc należy tego unikać. Każda z pozostałych metod wykorzystujących właściwość lokalizacji jest najbardziej niezawodnym i spójnym podejściem

Troy Grosh
źródło
2

Poszedłbym z window.location = "http://...";. Od kilku lat koduję JavaScript dla różnych przeglądarek i nigdy nie spotkałem się z problemami przy stosowaniu tego podejścia.

window.navigatei window.location.hrefwydaje mi się trochę dziwne.

cllpse
źródło
13
window.location działa, ale jest technicznie niepoprawne, ponieważ „lokalizacja” jest obiektem.
James Skidmore
16
Ale wszystko w JavaScript jest obiektem :)
cllpse
1
Chociaż prawie wszystko jest obiektem w JavaScript, przypisanie ciągu do obiektu zazwyczaj nie ustawia wartości na jedną z jego właściwości (tak jak w przypadku właściwości window.location lub document.location z ich właściwością href), ale zamiast tego zastępuje ten obiekt znakiem strunowy. W tym przypadku dodano dziwactwo przeglądarki, aby było zgodne z istniejącymi (dziwacznymi) implementacjami i starszą (a nie starszą) treścią.
PhistucK
1

Naprawdę nie ma różnicy; jest na to około 5 różnych metod. Jednak te, które widzę najczęściej, są document.locationi window.locationdlatego, że są obsługiwane przez wszystkie główne przeglądarki. (Osobiście nigdy nie widziałem window.navigateużywanego w kodzie produkcyjnym, więc może nie ma bardzo dobrego wsparcia?)

Sasha Chedygov
źródło
document.location nie działa we wszystkich przeglądarkach. window.location.
Philippe Leybaert
2
Firefox nie obsługuje window.navigate
Andrew Harry,
-5

Możesz przenieść swoją stronę za pomocą

window.location.href =Url;
Vishnu Gupta
źródło
3
To tak naprawdę nie dodaje więcej informacji niż zaakceptowana i pomnożona pozytywna odpowiedź ...
Stuart Siegler.
3
Możesz nawet pójść dalej i argumentować, że po prostu plagiatowałeś zaakceptowaną odpowiedź
Liam