O jQuery possui um ótimo plugin para alterar o URL dos navegadores, chamado jQuery-pusher .
JavaScript pushState
e jQuery podem ser usados juntos, como:
history.pushState(null, null, $(this).attr('href'));
Exemplo:
$('a').click(function (event) {
// Prevent default click action
event.preventDefault();
// Detect if pushState is available
if(history.pushState) {
history.pushState(null, null, $(this).attr('href'));
}
return false;
});
Usando apenas JavaScript history.pushState()
, que altera o referenciador, que é usado no cabeçalho HTTP para objetos XMLHttpRequest criados após a alteração do estado.
Exemplo:
window.history.pushState("object", "Your New Title", "/new-url");
O método pushState ():
pushState()
usa três parâmetros: um objeto de estado, um título (que atualmente é ignorado) e (opcionalmente) um URL. Vamos examinar cada um desses três parâmetros com mais detalhes:
objeto de estado - o objeto de estado é um objeto JavaScript associado à nova entrada de histórico criada por pushState()
. Sempre que o usuário navega para o novo estado, um evento popstate é acionado e a propriedade state do evento contém uma cópia do objeto de estado da entrada do histórico.
O objeto de estado pode ser qualquer coisa que possa ser serializada. Como o Firefox salva objetos de estado no disco do usuário para que possam ser restaurados após o usuário reiniciar o navegador, impomos um limite de tamanho de 640k caracteres na representação serializada de um objeto de estado. Se você passar um objeto de estado cuja representação serializada é maior que isso pushState()
, o método lançará uma exceção. Se você precisar de mais espaço do que isso, é recomendável usar o sessionStorage e / ou localStorage.
title - 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.
URL - O URL da nova entrada do histórico é fornecido por esse parâmetro. Observe que o navegador não tentará carregar esse URL após uma chamada pushState()
, mas pode tentar carregá-lo mais tarde, por exemplo, depois que o usuário reiniciar o navegador. O novo URL não precisa ser absoluto; se for relativo, é resolvido em relação ao URL atual. O novo URL deve ser da mesma origem que o URL atual; caso contrário, pushState()
lançará uma exceção. Este parâmetro é opcional; se não for especificado, será definido como o URL atual do documento.