2985 votes

Comment modifier l'URL sans recharger la page ?

Existe-t-il un moyen de modifier l'URL de la page actuelle sans recharger la page ?

Je voudrais accéder à la partie avant le # hash si possible.

Je dois seulement changer la portion après le domaine, donc ce n'est pas comme si je violais les politiques inter-domaines.

 window.location.href = "www.mysite.com/page2.php";  // Sadly this reloads

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.

8voto

Prathamesh Rasam Points 416

Utilisez history.pushState() de l'API HTML 5 History.

Reportez-vous à la API HTML5 pour l'histoire pour plus de détails.

8voto

Vinay Kaithwas Points 695

Votre nouvelle url.

let newUrlIS =  window.location.origin + '/user/profile/management';

Dans un sens, l'appel à pushState() est similaire à la définition de window.location = "#foo", dans la mesure où les deux créeront et activeront une autre entrée d'historique associée au document actuel. Mais pushState() présente quelques avantages :

history.pushState({}, null, newUrlIS);

Vous pouvez consulter la Racine : https://developer.mozilla.org/en-US/docs/Web/API/History_API

1 votes

Veuillez ajouter une référence sur les " avantages " supposés de pushState :)

6voto

satoshi Points 1025

Il est possible de le faire sans utiliser de hachage. asual jQuery Address plugin :

Exemple aquí .

Notez qu'il utilisera des hachages dans IE, il n'y a pas de solution de contournement pour cela.

1voto

Benoit Points 121

Celui-là fait ça : http://fr.gamesplanet.com/acheter-telecharger-jeux-pc/Action-pc-13.html#categoryId_13:p_1

changer de page pour voir

Qu'en pensez-vous ?

1voto

Webdeveloper011 Points 43

Ce code fonctionne pour moi. Je l'ai utilisé dans mon application en ajax.

history.pushState({ foo: 'bar' }, '', '/bank');

Une fois qu'une page est chargée dans un ID à l'aide d'ajax, elle change l'url du navigateur automatiquement sans recharger la page.

C'est la fonction ajax ci-dessous.

function showData(){
    $.ajax({
      type: "POST",
      url: "Bank.php", 
      data: {}, 
      success: function(html){          
        $("#viewpage").html(html).show();
        $("#viewpage").css("margin-left","0px");
      }
    });
  }

Exemple : A partir de n'importe quelle page ou contrôleur comme "Dashboard", quand je clique sur la banque, il charge la liste des banques en utilisant le code ajax sans recharger la page. A ce moment, l'URL du navigateur ne sera pas modifié.

history.pushState({ foo: 'bar' }, '', '/bank');

Mais quand j'utilise ce code dans l'ajax, il change l'url du navigateur sans recharger la page. C'est le code complet de l'ajax ici dans le bellow.

function showData(){
        $.ajax({
          type: "POST",
          url: "Bank.php", 
          data: {}, 
          success: function(html){          
            $("#viewpage").html(html).show();
            $("#viewpage").css("margin-left","0px");
            history.pushState({ foo: 'bar' }, '', '/bank');
          }
        });
      }

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