Devo usar window.navigate ou document.location em JavaScript?

177

Qual é o método preferido para alterar o local da página da web atual usando JavaScript? Eu vi o window.navigate e document.location usados. Existem diferenças de comportamento? Existem diferenças nas implementações do navegador?

dthrasher
fonte

Respostas:

220
window.location.href = 'URL';

é a implementação padrão para alterar a localização da janela atual.

James Skidmore
fonte
22
Você tem uma referência para indicar que o window.location.href é a implementação padrão? E esse padrão se aplica igualmente a todos os navegadores? Você certamente parece ter conhecimento e mais de 15 votos (mais a resposta aceita) ajudam a torná-lo mais autoritário, embora eu ache melhor ver a documentação das equipes de desenvolvimento do navegador para fazer backup da reivindicação.
Goyuix
6
@Goyuix, provavelmente é mais preciso dizer que window.location.hrefé a implementação completa, mas window.locationrealiza a mesma coisa. Consulte docs.sun.com/source/816-6408-10/location.htm : "Se você atribuir uma string à locationpropriedade de um objeto, o JavaScript cria um locationobjeto e atribui essa string à sua hrefpropriedade".
James Skidmore
3
Parece que esses caras decidiram que é sua preferência pessoal: developer.mozilla.org/Talk:en/DOM/window.location . Ou veja o exemplo na parte inferior, eles usam apenas, window.locationmas isso não indica necessariamente de qualquer maneira: developer.mozilla.org/en/window.location .
James Skidmore
1
Atualmente, estou usando isso para o desenvolvimento do Android. Estou tendo problemas para redirecionar a página do JS no navegador padrão do Android. Eu tentei window.location.href = 'URL';e também window.location.assign('URL');o método que é projetado para recarregar uma nova página. Mais informações podem ser encontradas w3schools.com/jsref/obj_location.asp
Philipp
3
window.navigateé um método proprietário, usado pelo Internet Explorer (tenho certeza de que outros navegadores imitam a compatibilidade, o Chrome não). document.locationou window.locationsão objetos padrão (consulte as várias especificações HTML / HTML5 / DOM). document.location = someURL(ou window.location = someURL) provavelmente é suportado devido ao código legado. A maneira certa de fazer isso é document.location.href = someURL, ou talvez document.location.assign(someURL).
PhistucK
11

window.navigate não suportado em alguns navegadores

No script java, existem muitas maneiras de redirecionar, veja o código e a explicação abaixo

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href carrega a página do cache do navegador e nem sempre envia a solicitação ao servidor. Portanto, se você tiver uma versão antiga da página disponível no cache, ela será redirecionada para lá, em vez de carregar uma página nova do servidor.

método window.location.assign () para redirecionamento, se você deseja permitir que o usuário use o botão Voltar para retornar ao documento original.

window.location.replace () , se você deseja redirecionar para uma nova página e não permitir que o usuário navegue até a página original usando o botão Voltar.

Srikrushna
fonte
7

document.locatio n é uma propriedade de cadeia de caracteres somente leitura (descontinuada, mas ainda presente), substituída por document.url .

Kennebec
fonte
6

window.location também afeta o quadro,

a melhor forma que encontrei é:

parent.window.location.href

E o pior é:

parent.document.URL 

Fiz um teste maciço no navegador e alguns IE raros com vários plugins são indefinidos na segunda forma.

jolmos
fonte
Por essa lógica, top.window.location.href não seria melhor ainda?
#
6

window.locationafetará o destino do seu navegador. O document.location afetará apenas o seu navegador e o frame / iframe.

Aldry Zhen
fonte
4

window.navigateNÃO é suportado em alguns navegadores, portanto, um deve ser evitado. Qualquer um dos outros métodos que usam a propriedade location é a abordagem mais confiável e consistente

Troy Grosh
fonte
2

Eu iria com window.location = "http://...";. Estou codificando o JavaScript entre navegadores há alguns anos e nunca tive problemas ao usar essa abordagem.

window.navigatee window.location.hrefparece um pouco estranho para mim.

cllpse
fonte
13
window.location funciona, mas tecnicamente incorreto porque "location" é um objeto.
James Skidmore
16
Mas tudo em JavaScript é um objeto :)
cllpse
1
Embora praticamente tudo seja um objeto em JavaScript, a atribuição de uma string a um objeto geralmente não define o valor para uma de suas propriedades (como window.location ou document.location fazem com sua propriedade href), mas substitui esse objeto por um corda. Nesse caso, uma peculiaridade do navegador foi adicionada para ser compatível com implementações existentes (peculiares) e conteúdo herdado (e não tão herdado).
PhistucK
1

Realmente não há diferença; existem cerca de 5 métodos diferentes de fazê-lo. No entanto, os que eu vejo com mais frequência são document.locatione window.locationporque são suportados por todos os principais navegadores. (Eu pessoalmente nunca vi window.navigateusado no código de produção, então talvez ele não tenha um suporte muito bom?)

Sasha Chedygov
fonte
document.location não funciona em todos os navegadores. window.location faz.
Philippe Leybaert 9/06/09
2
O Firefox não suporta window.navigate
Andrew Harry
-5

Você pode mover sua página usando

window.location.href =Url;
Vishnu Gupta
fonte
3
Isto realmente não adicionar mais informações, então o aceitou, e resposta multiplicar upvoted ...
Stuart Siegler
3
Você poderia até mesmo ir mais longe e argumentam que você simplesmente plagiou a resposta aceita
Liam