Czy ktoś może mi powiedzieć, jaka jest różnica między window.location.href
i 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?
javascript
asp.net-mvc
Egalitarny
źródło
źródło
Odpowiedzi:
window.location.href
zwraca lokalizację bieżącej strony.top.location.href
(który jest aliasemwindow.top.location.href
) zwraca położenie najwyższego okna w hierarchii okien. Jeśli okno nie ma rodzica,top
jest odniesieniem do samego siebie (innymi słowywindow
===window.top
).top
jest 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.html
z 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.href
zostanie zwrócone.Aby odpowiedzieć na pytanie dotyczące przekierowania, przejdź do
window.location.assign(url);
źródło
top.location.href
się alias owindow.top.location.href
? Myślałem, że tak zwana zmienna „globalny” jest naprawdę skrót od nieruchomości odwindow
natomiast alias oznacza, że jest to zmienna, która wskazuje na tym samym miejscu niezależne.top
obiekt ma większy sens wewnątrz ramek. Wewnątrz ramkiwindow
odnosi się do okna bieżącej ramki, atop
do okna najbardziej zewnętrznego, które zawiera ramkę (ramki). Więc:window.location.href = 'somepage.html';
oznacza ładowaniesomepage.html
wewnątrz ramy.top.location.href = 'somepage.html';
oznacza ładowaniesomepage.html
w głównym oknie przeglądarki.Dwa inne interesujące obiekty to
self
iparent
.źródło
top
odnosi się do obiektu okna, który zawiera wszystkie bieżące ramki (ojciec pozostałych okien).window
jest obecnywindow
.http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific
top.location.href
może więc zawierać łącze do strony „wzorcowej” zawierające wszystkie ramki, awindow.location.href
jedynie łącze do strony „bieżącej”.źródło
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 tejassign()
metody polega na tym, że po użyciureplace()
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;
źródło