Differenza tra window.location.href e top.location.href


92

Qualcuno può dirmi la differenza tra window.location.hrefe top.location.href?

E anche dove usare quale.

E quale sarà migliore quando si reindirizza dopo una chiamata ajax in mvc?


ho dimenticato di dire che dovevo reindirizzare a un nuovo URL in .net MVC .. quando ho usato top.location.href ha funzionato mentre window.location no .. puoi anche dire il motivo ????
Egualitario

Risposte:


125

window.location.href restituisce la posizione della pagina corrente.

top.location.href(che è un alias di window.top.location.href) restituisce la posizione della finestra più in alto nella gerarchia della finestra. Se una finestra non ha un genitore, topè un riferimento a se stessa (in altre parole, window=== window.top).

topè utile sia quando hai a che fare con i frame sia quando hai a che fare con finestre che sono state aperte da altre pagine. Ad esempio, se hai una pagina chiamata test.htmlcon il seguente script:

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

L'avviso risultante avrà il percorso completo per test.html - non about: blank, che è ciò che window.location.hrefverrebbe restituito.

Per rispondere alla tua domanda sul reindirizzamento, vai con window.location.assign(url);


3
È corretto chiamare top.location.hrefun alias di window.top.location.href? Ho pensato che una cosiddetta variabile "globale" fosse in realtà una scorciatoia per una proprietà di windowmentre alias implica che sia una variabile indipendente che punta allo stesso posto.
solo.un altro.programmatore il

25

topl'oggetto ha più senso all'interno dei frame. All'interno di un frame, si windowriferisce alla finestra del frame corrente mentre si topriferisce alla finestra più esterna che contiene i frame. Così:

window.location.href = 'somepage.html';significa caricare somepage.htmlall'interno del telaio.

top.location.href = 'somepage.html';significa caricare somepage.htmlnella finestra principale del browser.

Altri due oggetti interessanti sono selfe parent.



7

Il primo aggiunge un elemento alla tua cronologia in quanto puoi (o dovresti essere in grado di) fare clic su "Indietro" e tornare alla pagina corrente.

Il secondo sostituisce l'elemento della cronologia corrente in modo da non poter tornare indietro.

Vedi window.location:

  • assign(url): Carica il documento all'URL fornito.

  • replace(url): Sostituisci il documento corrente con quello nell'URL fornito. La differenza rispetto al assign()metodo è che dopo aver utilizzato replace()la pagina corrente non verrà salvata nella cronologia della sessione, il che significa che l'utente non sarà in grado di utilizzare il pulsante Indietro per raggiungerla.

window.location.href = url;

è favorito rispetto a:

window.location = url;

Per il problema CORS non funziona ... come risolverlo?
Pra_A
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.