En moderne navigateurs et HTML5 il existe une méthode appelée pushState
sur la fenêtre history
. Cela changera l'URL et la poussera dans l'historique sans charger la page.
Vous pouvez l'utiliser comme ceci, il prendra 3 paramètres, 1) objet d'état 2) titre et une URL) :
window.history.pushState({page: "another"}, "another page", "example.html");
Cela changera l'URL, mais ne rechargera pas la page. De plus, elle ne vérifie pas si la page existe, donc si vous faites du code JavaScript qui réagit à l'URL, vous pouvez travailler avec eux comme ceci.
Il y a aussi history.replaceState()
qui fait exactement la même chose, sauf qu'il modifiera l'historique actuel au lieu d'en créer un nouveau !
Vous pouvez également créer une fonction pour vérifier si history.pushState
existent, puis continuez avec le reste comme ça :
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');
De même, vous pouvez modifier le #
para <HTML5 browsers
qui ne rechargera pas la page. C'est la façon qu'utilise Angular pour faire SPA selon le hashtag...
Changer #
est assez facile, en faisant comme :
window.location.hash = "example";
Et vous pouvez le détecter comme ceci :
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}
186 votes
Pour faciliter la compréhension de la question, voici ce que fait Facebook lorsque vous ouvrez une photo, par exemple. La barre d'adresse change pour pointer DIRECTEMENT vers cette photo, de sorte que vous pouvez partager l'URL sans perdre l'endroit où vous vous trouvez dans le site. Vous vous souvenez des sites basés sur le cadrage de la dernière décennie ? Vous ne pouviez obtenir que l'URL de la page d'accueil, car seuls les cadres internes changeaient. Et c'était terrible.
7 votes
Alors que
history.pushState()
est probablement la bonne réponse ici, dans cette situation (en fonction des circonstances exactes...), la possibilité d'utiliser une redirection côté serveur (comme via l'utilisation de la directive RewriteRule d'Apache) est quelque chose que vous pourriez envisager, ou du moins connaître. J'ai simplement pensé qu'il fallait le mentionner !13 votes
window.history.replaceState(null, document.title, "/page2.php")
est probablement ce que la plupart des gens recherchent.