128 votes

Comment puis-je changer l'URL actuelle?

Je dispose du code suivant qui modifie les pages depuis JavaScript:

var newUrl = [quelques codes pour construire la chaîne URL];
window.location.replace(newUrl);

Mais cela ne modifie pas l'URL en haut, donc lorsque quelqu'un clique sur le bouton retour, cela ne revient pas à la page précédente.

Comment puis-je faire en sorte que JavaScript modifie également l'URL en haut pour que le bouton retour du navigateur fonctionne ?

214voto

glebm Points 6620

61voto

bcherry Points 3541

Un simple assignement à window.location ou window.location.href devrait suffire :

window.location = newUrl;

Cependant, votre nouvelle URL va charger la nouvelle page dans le navigateur, mais il semble que vous souhaitiez modifier l'URL sans quitter la page actuelle. Vous avez deux options pour cela :

  1. Utiliser le hash de l'URL. Par exemple, vous pouvez passer de example.com à example.com#foo sans charger une nouvelle page. Vous pouvez simplement définir window.location.hash pour faciliter cela. Ensuite, vous devriez écouter l'événement HTML5 hashchange, qui sera déclenché lorsque l'utilisateur appuie sur le bouton retour. Cette fonctionnalité n'est pas prise en charge dans les anciennes versions d'IE, mais vous pouvez consulter jQuery BBQ, qui permet de le faire fonctionner dans tous les navigateurs.

  2. Vous pouvez utiliser l'historique HTML5 pour modifier le chemin sans recharger la page. Cela vous permet de passer de example.com/foo à example.com/bar. Utiliser cette méthode est facile :

    window.history.pushState("example.com/foo");

    Lorsque l'utilisateur appuie sur "retour", vous recevrez l'événement popstate de la fenêtre, auquel vous pouvez facilement écouter (avec jQuery) :

    $(window).bind("popstate", function(e) { alert("location changed"); });

    Malheureusement, cette fonctionnalité n'est prise en charge que par les navigateurs très modernes, comme Chrome, Safari et la version bêta de Firefox 4.

0 votes

La méthode .replace sur les chaînes de caractères ne modifiera pas la chaîne à laquelle elle a été appliquée, elle générera une nouvelle chaîne." - la méthode window.location.replace() n'est pas la même que la méthode String.prototype.replace() car window.location n'est pas une chaîne de caractères (c'est un objet). window.location.replace() remplace l'URL actuelle par une nouvelle, en écrasant l'entrée de l'ancienne URL dans l'historique.

1 votes

Merci pour la correction, je vais mettre à jour ma réponse en conséquence.

3 votes

En regardant en arrière, c'est de loin la meilleure réponse. document.location.href n'a rien sur pushState

14voto

Artokun Points 116

Si vous souhaitez simplement mettre à jour le chemin relatif, vous pouvez également le faire

window.location.pathname = '/relative-link'

"http://domain.com" -> "http://domain.com/relative-link"

10voto

Blender Points 114729

Hmm, je vais utiliser

window.location = 'http://localhost/index.html#?options=go_here';

Je ne suis pas exactement sûr si c'est ce que tu veux dire.

9voto

Chris Smith Points 1

Cela le fera:

window.history.pushState(null,null,'https://www.google.com');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X