Qualquer um pode dar um exemplo de trabalho para history.replaceState? Isto é o que o w3.org diz:
history . replaceState(data, title [, url ] )
Atualiza a entrada atual no histórico da sessão para ter os dados, o título e, se fornecidos e não nulos, o URL.
Atualizar:
Isso funciona perfeitamente:
history.replaceState( {} , 'foo', '/foo' );
O URL está mudando, mas o título não está mudando. Isso é um bug ou estou faltando alguma coisa? Testado no Chrome mais recente.
javascript
ajax
html
Serjas
fonte
fonte
title
parâmetro não é realmente usado.replaceState
exemplo, e a resposta aceita não é de forma alguma umreplaceState
exemplo.Respostas:
Na verdade, isso é um bug, embora intencional por 2 anos. O problema está em algumas especificações pouco claras e na complexidade de quando
document.title
e para trás / para a frente estão envolvidos.Veja a referência de bug no Webkit e Mozilla . Também o Opera, sobre a introdução da API History, disse que não estava usando o parâmetro title e provavelmente ainda não usa.
Solução potencial
A única maneira que vejo é alterar o elemento title e usar o pushState:
fonte
replaceState()
e simplesmente definir o título do documento manualmentedocument.title = "title"
Aqui está um exemplo mínimo e artificial.
Há mais,
replaceState()
mas não sei exatamente o que você quer fazer com isso.fonte
title
parâmetro inreplaceState()
é, dentro do meu conhecimento, ignorado em todos os navegadores.history.pushState
coloca o estado da página atual na pilha do histórico e altera o URL na barra de endereço. Então, quando você voltar, esse estado (o objeto que você passou) será retornado para você.Atualmente, isso é tudo o que faz. Qualquer outra ação da página, como exibir a nova página ou alterar o título da página, deve ser realizada por você.
A especificação do W3C que você vincula é apenas um rascunho e o navegador pode implementá-lo de maneira diferente. O Firefox , por exemplo, ignora
title
completamente o parâmetro.Aqui está um exemplo simples do
pushState
que eu uso no meu site.fonte
replaceState
altera o estado da página atual. Permite alterar o objeto de estado e o URL do estado atual da página.Olhe para o exemplo
e pesquisa
location.hash
;fonte
O segundo argumento Título não significa Título da página - é mais uma definição / informação para o estado dessa página
Mas ainda podemos alterar o título usando o evento onpopstate e passando o nome do título não do segundo argumento, mas como um atributo do primeiro parâmetro passado como objeto
Referência: http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
fonte
De acordo com o documento MDN History,
diz-se claramente que o segundo argumento é para o futuro usado e não por enquanto. Você está certo de que o segundo argumento trata do título da página da web, mas atualmente é ignorado por todos os principais navegadores.
O Firefox atualmente ignora esse parâmetro, embora possa usá-lo no futuro. Passar a string vazia aqui deve ser seguro contra futuras alterações no método. Como alternativa, você pode passar um título curto para o estado para o qual está se mudando.
fonte
Eu realmente queria responder à resposta de @ Sev.
Sev está certo, há um erro dentro do
window.history.replaceState
fonte
Suponha que https://www.mozilla.org/foo.html execute o seguinte JavaScript:
Isso fará com que a barra de URL seja exibida https://www.mozilla.org/bar2.html , mas não fará com que o navegador carregue bar2.html ou verifique se a barra2.html existe.
fonte