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?


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);


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.



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;

W przypadku problemu CORS nie działa ... jak to rozwiązać?
— Pra_A
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.