Nos navegadores modernos e no HTML5 , existe um método chamado pushState
na janela history
. Isso mudará o URL e o empurrará para o histórico sem carregar a página.
Você pode usá-lo assim, serão necessários 3 parâmetros, 1) objeto de estado 2) título e uma URL):
window.history.pushState({page: "another"}, "another page", "example.html");
Isso mudará o URL, mas não recarregará a página. Além disso, ele não verifica se a página existe; portanto, se você fizer algum código JavaScript que esteja reagindo ao URL, poderá trabalhar com eles dessa maneira.
Também existe o history.replaceState()
que faz exatamente a mesma coisa, exceto que ele modificará o histórico atual em vez de criar um novo!
Além disso, você pode criar uma função para verificar se history.pushState
existe, e continuar com o restante desta forma:
function goTo(page, title, url) {
if ("undefined" !== typeof history.pushState) {
history.pushState({page: page}, title, url);
} else {
window.location.assign(url);
}
}
goTo("another page", "example", 'example.html');
Também é possível alterar o #
para <HTML5 browsers
, que não recarregará a página. É assim que o Angular usa o SPA de acordo com a hashtag ...
Mudar #
é bastante fácil, fazendo o seguinte:
window.location.hash = "example";
E você pode detectá-lo assim:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}