Cela peut maintenant être fait dans Chrome, Safari, Firefox 4+, et Internet Explorer 10pp4+ !
Voir la réponse à cette question pour plus d'informations : Mise à jour de la barre d'adresse avec la nouvelle URL sans hachage ni rechargement de la page
Exemple :
function processAjaxData(response, urlPath){
document.getElementById("content").innerHTML = response.html;
document.title = response.pageTitle;
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
}
Vous pouvez alors utiliser window.onpopstate
pour détecter la navigation du bouton de retour/avance :
window.onpopstate = function(e){
if(e.state){
document.getElementById("content").innerHTML = e.state.html;
document.title = e.state.pageTitle;
}
};
Pour un examen plus approfondi de la manipulation de l'historique du navigateur, voir cet article du MDN .
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.