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.