pushState() vous permet de modifier le référent utilisé dans l’en-tête HTTP pour les objets XMLHttpRequest créés après le changement d’état. La valeur du référent sera l’URL du document dont se trouve la fenêtre au moment de la création de l’objet XMLHttpRequest.
pushState() crée une nouvelle entrée dans l’historique du navigateur, vous permettant de revenir aux pages précédentes à l’aide du bouton Précédent. Pendant ce temps, l’histoire. replaceState() remplace l’entrée actuelle, empêchant ainsi la possibilité de revenir à l’URL précédente via le bouton retour.

Supposons que le code JavaScript suivant soit exécuté sur la page http://x.org/foo.html:
js
Copy to Clipboard
let stateObj = {
foo: "bar",
};
history.pushState(stateObj, "page 2", "bar.html");
Cela entraînera l’affichage de http://x.org/bar.html dans la barre d’URL, mais le navigateur ne chargera pas la page bar.html ni même vérifiera si elle existe.
Supposons maintenant que l’utilisateur accède à http://google.com, puis clique sur le bouton de retour. En conséquence, l’URL affichera http://x.org/bar.html et history.state contiendra stateObj. L’événement popstate ne sera pas déclenché car la page a été rechargée. La page elle-même ressemblera à bar.html.
Voir aussi...![]() |
Si l’utilisateur clique à nouveau sur le bouton Précédent, l’URL deviendra http://x.org/foo.html et le document déclenchera à nouveau un événement popstate, cette fois avec l’objet d’état défini sur null. Dans ce cas, revenir en arrière ne modifie pas non plus le contenu du document, comme à l’étape précédente, bien que le document lui-même puisse mettre à jour son contenu après avoir reçu l’événement popstate.
La méthode pushState() prend trois paramètres : un objet d’état, un en-tête (ignoré pour l’instant) et un paramètre « URL » (facultatif).
state object. L’objet state est un objet JavaScript associé à la nouvelle entrée d’historique créée par pushState(). Chaque fois que l’utilisateur accède à un nouvel état, l’événement popstate se produit et la propriété state de l’événement contient une copie de l’objet state avec des entrées d’historique.
Un objet d’état peut être tout ce qui peut être sérialisé. Étant donné que Firefox stocke les objets d’état sur le disque de l’utilisateur afin qu’ils puissent être restaurés après le redémarrage du navigateur, nous imposons une limite de 640 000 caractères à la représentation sérialisée de l’objet d’état. Si vous transmettez un objet d’état dont la représentation sérialisée est supérieure à cette valeur, la méthode pushState() lèvera une exception. Si vous avez besoin d’un stockage plus important, vous devriez envisager d’utiliser sessionStorage et/ou localStorage.
title. En-tête – Tous les navigateurs, à l’exception de Safari, ignorent ce paramètre pour le moment, mais pourraient le faire à l’avenir. En raison de modifications futures de la méthode, une solution sûre consiste à transmettre une chaîne vide. Alternativement, vous pouvez transmettre un court en-tête pour l’état vers lequel vous passez.
URL. Ce paramètre transmet l’URL d’une nouvelle entrée dans l’historique. Notez que le navigateur n’essaiera pas de charger l’URL donnée immédiatement après avoir appelé pushState(), mais pourra essayer de le faire plus tard, par exemple après que l’utilisateur redémarre le navigateur. Il n’est pas nécessaire que la nouvelle URL soit absolue ; s’il est relatif, il est défini par rapport à l’URL actuelle. La nouvelle URL doit pointer vers le même domaine, protocole et port, sinon pushState() lèvera une exception. Ce paramètre est facultatif; si non spécifié, l’URL du document actuel sera utilisée.
L’appel de pushState() est quelque peu similaire à la définition de window.location = « #foo » dans le sens où ils créent et activent également une autre entrée d’historique associée au document actuel.
Mais pushState() présente plusieurs avantages:
La nouvelle URL peut appartenir au même domaine, au même port et au même protocole que l’adresse actuelle. Alors que la définition de window.location vous laisse au même document uniquement si vous modifiez uniquement le hachage. Il n’est pas nécessaire de modifier l’URL. Alors que le paramètre window.location = « #foo »; crée une nouvelle entrée dans l’historique uniquement si le hachage actuel n’est pas #foo
Toutes les données peuvent être associées à une nouvelle entrée dans l’historique. Dans l’approche basée sur le hachage, toutes les données pertinentes doivent être codées dans une courte chaîne. Si l’en-tête du titre est ensuite utilisé par les navigateurs, ces données peuvent être utilisées (indépendamment du hachage, par exemple). Notez que pushState() ne déclenche jamais l’événement hashchange, même si la nouvelle URL ne diffère de l’ancienne qu’en termes de hachage.
Dans les documents XUL, il crée l’élément XUL spécifié. Dans d’autres documents, il crée un élément avec un URI d’espace de noms nul.
Méthode replaceState(). history.replaceState() fonctionne exactement de la même manière que history.pushState(), sauf que replaceState() modifie l’entrée actuelle de l’historique au lieu de créer une nouvelle entrée. A noter que cela n’empêche pas la création d’une nouvelle entrée dans l’historique global du navigateur.
replaceState() est particulièrement utile lorsque vous souhaitez mettre à jour l’objet d’état ou l’URL de l’entrée actuelle de l’historique en réponse à une action de l’utilisateur.
Supposons que le code JavaScript suivant soit exécuté sur la page http://x.org/foo.html:
let stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");
Une explication de ces deux lignes peut être trouvée dans l’exemple de méthode pushState() ci-dessus.
Supposons ensuite que du code JavaScript soit exécuté sur la page http://x.org/bar.html:
history.replaceState(stateObj, "page 3", "bar2.html");
Cela entraînera l’affichage de http://x.org/bar2.html dans la barre d’URL, mais le navigateur ne chargera pas immédiatement bar2.html ni même vérifiera la présence de cette page bar2.html.
Supposons maintenant que l’utilisateur accède à http://www.microsoft.com, puis clique sur le bouton Précédent. Dans ce cas, http://x.org/bar2.html sera affiché dans la barre d’URL. Si l’utilisateur clique à nouveau sur le bouton « Retour », la barre d’URL affichera http://x.org/foo.html et contournera complètement bar.html.
Evénement popstate. L’événement popstate est déclenché sur la fenêtre chaque fois que l’entrée d’historique active change. Si l’entrée d’historique en cours d’activation a été créée par un appel à pushState ou activée par un appel à replaceState, la propriété state de l’événement popstate contient une copie de l’entrée d’historique de l’objet événement.
Lorsqu’une page se charge, elle peut avoir un objet événement avec une valeur autre que « null ». Cela peut se produire, par exemple, si la page définit un objet d’état (en utilisant pushState() ou replaceState()) et que l’utilisateur redémarre ensuite le navigateur. Lorsque la page est rechargée, elle recevra l’événement onload, mais ne recevra pas l’événement popstate. Cependant, si vous lisez la propriété history.state, vous obtiendrez l’objet d’état que vous auriez obtenu si l’événement popstate s’était produit.
À l’aide de la propriété history.state, vous pouvez lire l’état de l’entrée actuelle de l’historique sans attendre l’événement popstate, par exemple:
let currentState = history.state;







