Diferença entre window.location.href e top.location.href

92

Alguém pode me dizer a diferença entre window.location.hrefe top.location.href?

E também onde usar qual.

E qual será o melhor ao redirecionar após uma chamada de ajax no mvc?

Igualitário
fonte
esqueci de mencionar que tive que redirecionar para um novo url em .net MVC .. quando eu usei top.location.href funcionou enquanto window.location não .. você também pode dizer o motivo ????
Igualitário

Respostas:

125

window.location.href retorna a localização da página atual.

top.location.href(que é um alias de window.top.location.href) retorna a localização da janela superior na hierarquia de janelas. Se uma janela não tiver pai, topé uma referência a si mesma (em outras palavras, window===window.top ).

topé útil quando você está lidando com frames e quando está lidando com janelas que foram abertas por outras páginas. Por exemplo, se você tiver uma página chamada test.htmlcom o seguinte script:

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

O alerta resultante terá o caminho completo para test.html - não about: blank, que é o window.location.hrefque retornaria.

Para responder à sua pergunta sobre redirecionamento, vá com window.location.assign(url);

Josh3736
fonte
3
É preciso chamar top.location.hrefum alias de window.top.location.href? Eu pensei que uma variável chamada "global" é realmente uma abreviação para uma propriedade de windowenquanto alias implica que é uma variável independente que aponta para o mesmo lugar.
apenas.another.programmer
25

topobjeto faz mais sentido dentro de quadros. Dentro de um quadro, windowrefere-se à janela do quadro atual, enquanto topse refere à janela mais externa que contém o (s) quadro (s). Assim:

window.location.href = 'somepage.html'; significa carregar somepage.html dentro do quadro.

top.location.href = 'somepage.html';significa carregar somepage.htmlna janela principal do navegador.

Dois outros objetos interessantes são selfe parent.

Salman A
fonte
9

toprefere-se ao objeto janela que contém todos os frames atuais (pai do resto das janelas). windowé a corrente window.

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

portanto, top.location.hrefpode conter o link da página "mestre" contendo todos os frames, enquanto window.location.hrefcontém apenas o link da página "atual".

Meder Omuraliev
fonte
7

O primeiro adiciona um item ao seu histórico no qual você pode (ou deveria poder) clicar em "Voltar" e voltar para a página atual.

O segundo substitui o item do histórico atual para que você não possa voltar a ele.

Veja window.location:

  • assign(url): Coloque o documento no URL fornecido.

  • replace(url): Substitua o documento atual por aquele no URL fornecido. A diferença do assign()método é que após usar replace()a página atual não será salvo no histórico da sessão, o que significa que o usuário não poderá usar o botão Voltar para navegar até ela.

window.location.href = url;

é favorecido:

window.location = url;
Sachin R
fonte
Por questão de CORS não está funcionando ... como resolver isso?
Pra_A