En los navegadores modernos y HTML5 , hay un método llamado pushState
en la ventanahistory
. Eso cambiará la URL y la enviará al historial sin cargar la página.
Puede usarlo así, tomará 3 parámetros, 1) objeto de estado 2) título y una URL):
window.history.pushState({page: "another"}, "another page", "example.html");
Esto cambiará la URL, pero no volverá a cargar la página. Además, no comprueba si la página existe, por lo que si hace algún código JavaScript que reacciona a la URL, puede trabajar con ellos de esta manera.
También hay history.replaceState()
quien hace exactamente lo mismo, excepto que modificará el historial actual en lugar de crear uno nuevo!
También puede crear una función para verificar si history.pushState
existe, luego continuar con el resto de esta manera:
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');
También puede cambiar el #
for <HTML5 browsers
, que no volverá a cargar la página. Así es como Angular usa para hacer SPA según el hashtag ...
Cambiar #
es bastante fácil, haciendo como:
window.location.hash = "example";
Y puedes detectarlo así:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}
history.pushState()
es probablemente la respuesta correcta aquí, en esta situación (dependiendo de las circunstancias exactas ...) la posibilidad de usar una redirección del lado del servidor (como mediante el uso de la directiva RewriteRule de Apache) es algo que quizás desee considerar, o al menos ser consciente de. ¡Solo pensé que debería mencionarse!