Różnica między window.location.href i top.location.href

93

Czy ktoś może mi powiedzieć, jaka jest różnica między window.location.hrefi top.location.href?

A także gdzie użyć którego.

A który z nich będzie lepszy w przypadku przekierowania po wywołaniu ajax w mvc?

Egalitarny
źródło
zapomniałem wspomnieć, że musiałem przekierować do nowego adresu URL w .net MVC .. kiedy użyłem top.location.href zadziałało, podczas gdy window.location nie ... czy możesz również powiedzieć, dlaczego ????
Egalitarian

Odpowiedzi:

125

window.location.href zwraca lokalizację bieżącej strony.

top.location.href(który jest aliasem window.top.location.href) zwraca położenie najwyższego okna w hierarchii okien. Jeśli okno nie ma rodzica, topjest odniesieniem do samego siebie (innymi słowy window=== window.top).

topjest przydatny zarówno w przypadku ramek, jak i okien, które zostały otwarte przez inne strony. Na przykład, jeśli masz stronę wywołaną test.htmlz następującym skryptem:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

Wynikowy alert będzie miał pełną ścieżkę do test.html - nie about: blank, czyli to, co window.location.hrefzostanie zwrócone.

Aby odpowiedzieć na pytanie dotyczące przekierowania, przejdź do window.location.assign(url);

josh3736
źródło
3
Jest to dokładna nazywać top.location.hrefsię alias o window.top.location.href? Myślałem, że tak zwana zmienna „globalny” jest naprawdę skrót od nieruchomości od windownatomiast alias oznacza, że jest to zmienna, która wskazuje na tym samym miejscu niezależne.
just.another.programmer
25

topobiekt ma większy sens wewnątrz ramek. Wewnątrz ramki windowodnosi się do okna bieżącej ramki, a topdo okna najbardziej zewnętrznego, które zawiera ramkę (ramki). Więc:

window.location.href = 'somepage.html';oznacza ładowanie somepage.htmlwewnątrz ramy.

top.location.href = 'somepage.html';oznacza ładowanie somepage.htmlw głównym oknie przeglądarki.

Dwa inne interesujące obiekty to selfi parent.

Salman A
źródło
9

topodnosi się do obiektu okna, który zawiera wszystkie bieżące ramki (ojciec pozostałych okien). windowjest obecny window.

http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific

top.location.hrefmoże więc zawierać łącze do strony „wzorcowej” zawierające wszystkie ramki, a window.location.hrefjedynie łącze do strony „bieżącej”.

meder omuraliev
źródło
7

Pierwsza dodaje element do historii, w którym możesz (lub powinieneś być w stanie) kliknąć „Wstecz” i wrócić do bieżącej strony.

Drugi zastępuje bieżący element historii, więc nie można do niego wrócić.

Zobacz window.location:

  • assign(url): Załaduj dokument pod podanym adresem URL.

  • replace(url): Zastąp bieżący dokument dokumentem znajdującym się pod podanym adresem URL. Różnica w stosunku do tej assign()metody polega na tym, że po użyciu replace()bieżącej strony nie zostanie zapisana w historii sesji, co oznacza, że ​​użytkownik nie będzie mógł użyć przycisku Wstecz, aby przejść do niej.

window.location.href = url;

jest faworyzowany w stosunku do:

window.location = url;
Sachin R.
źródło
W przypadku problemu CORS nie działa ... jak to rozwiązać?
Pra_A