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?


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


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.



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;

Por questão de CORS não está funcionando ... como resolver isso?
Pra_A
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.