Diferença entre window.location.href = window.location.href e window.location.reload ()

Qual é a diferença entre o JavaScript

window.location.href = window.location.href 

e

 window.location.reload() 

funções?

   

Se bem me lembro, window.location.reload() recarrega a página atual com dados POST, enquanto window.location.href=window.location.href não inclui os dados POST.

Como observado por @ W3Max nos comentários abaixo, window.location.href=window.location.href não recarregará a página se houver uma âncora (#) na URL – você deve usar window.location.reload() neste caso .

Além disso, conforme observado por @Mic abaixo, window.location.reload() recebe um argumento adicional skipCache para que, com o uso de window.location.reload(true) o navegador pule o cache e recarregue a página do servidor. window.location.reload(false) fará o oposto e carregará a página do cache, se possível.

Se você disser window.location.reload(true) o navegador ignorará o cache e recarregará a página do servidor. window.location.reload(false) fará o oposto.

Nota: default valor default para window.location.reload() é false

A diferença é que

 window.location = document.URL; 

não recarregará a página se houver um hash (#) na URL (com ou sem algo depois dela), enquanto

 window.location.reload(); 

irá recarregar a página.

Se você adicionar o booleano true ao recarregamento window.location.reload(true) ele será carregado do servidor.

Não está claro como este booleano é suportado, o W3Org menciona que NS costumava suportá- lo

Pode haver uma diferença entre o conteúdo de window.location.href e document.URL – pelo menos costumava haver uma diferença entre location.href e o documento não padrão e preterido.location que tinha a ver com o redirecionamento, mas que é realmente o último milênio.

Para fins de documentação eu usaria window.location.reload () porque é isso que você quer fazer.

Como dito, modificar o href quando há um hash (#) no url não recarrega a página. Assim, eu uso isso para recarregá-lo em vez de expressões regulares:

 if (!window.location.hash) { window.location.href = window.location.href; } else { window.location.reload(); } 

Veio através desta questão pesquisando algum comportamento aberrante no IE, especificamente o IE9, não verificou versões mais antigas. Parece

 window.location.reload(); 

resulta em uma atualização que apaga a canvas inteira por um segundo,

  window.location = document.URL; 

atualiza a página muito mais rapidamente, quase imperceptivelmente.

Fazendo um pouco mais de pesquisa, e alguma experimentação com violinista, parece que window.location.reload() irá ignorar o cache e recarregar do servidor, independentemente de você passar o booleano com ele ou não, isso inclui obter todos os seus ativos ( imagens, scripts, folhas de estilo, etc) novamente. Então, se você quiser apenas que a página atualize o HTML, o window.location = document.URL retornará muito mais rápido e com menos tráfego.

Uma diferença no comportamento entre os navegadores é que quando o IE9 usa o método reload, ele limpa a página visível e aparentemente a recria a partir do zero, onde FF e chrome esperam até obter os novos ativos e reconstruí-los se forem diferentes.

Uma diferença no Firefox (12.0) é que em uma página renderizada a partir de um POST, reload () exibirá um aviso e fará um novo post, enquanto uma atribuição de URL fará um GET.

O Google Chrome faz um GET para ambos.

Usando o JSF, estou tendo agora o problema com a atualização após a expiração da session: PrimeFaces ViewExpiredException após o recarregamento da página e, com alguma investigação, descobri uma diferença no FireFox:

Chamar window.location.reload() funciona como clicar no ícone de atualização no FF, ele adiciona a linha

Cache-Control max-age=0

window.location.href configuração window.location.href funcione como pressionar ENTER na linha de URL, ela não envia essa linha.

Embora ambos sejam enviados como GET, o primeiro (recarregar) está restaurando os dados anteriores e o aplicativo está em estado inconsistente.

Não, não deveria haver. No entanto, é possível que haja diferenças em alguns navegadores, portanto, nenhum deles (ou nenhum) pode funcionar em alguns casos.

da minha experiência de cerca de 3 anos, não pude encontrar nenhuma diferença …

edit: sim, como um deles disse aqui, apenas passar um parâmetro booleano para window.location.reload () é a diferença. se você passar verdadeiro , o navegador carrega uma nova página, mas se for falso , a versão do cache é carregada …

window.location.href, isso salvou minha vida em webview do Android 5.1. A página não é atualizada com location.reload () nesta versão do Android.