Quelqu'un peut-il donner un exemple de travail pour history.replaceState? Voici ce que dit w3.org :
history . replaceState(data, title [, url ] )
Met à jour l'entrée actuelle dans l'historique de la session pour avoir les données, le titre et, s'il est fourni et non nul, l'URL.
Mettre à jour:
Cela fonctionne parfaitement:
history.replaceState( {} , 'foo', '/foo' );
L'URL change, mais le titre ne change pas. Est-ce un bug ou est-ce que je manque quelque chose? Testé sur le dernier Chrome.
javascript
ajax
html
Serjas
la source
la source
title
paramètre n'est pas réellement utilisé.replaceState
exemple, et la réponse acceptée n'est en aucun cas unreplaceState
exemple.Réponses:
En effet c'est un bug, bien que intentionnel depuis maintenant 2 ans. Le problème réside dans certaines spécifications peu claires et la complexité du moment
document.title
et de l'arrière / de l'avant.Voir la référence de bogue sur Webkit et Mozilla . Opera, lors de l'introduction de l'API History, a également déclaré qu'il n'utilisait pas le paramètre title et qu'il ne le fait probablement toujours pas.
Solution potentielle
La seule façon que je vois est de modifier l'élément title et d'utiliser à la place pushState:
la source
replaceState()
et de définir simplement le titre du document manuellementdocument.title = "title"
Voici un exemple minimal et artificiel.
Il y a plus à faire
replaceState()
mais je ne sais pas exactement ce que vous voulez en faire.la source
title
paramètre dansreplaceState()
est, à ma connaissance, ignoré dans tous les navigateurs.history.pushState
pousse l' état actuel de la page sur la pile d'historique et modifie l'URL dans la barre d'adresse. Ainsi, lorsque vous revenez en arrière, cet état (l'objet que vous avez passé) vous est retourné.Actuellement, c'est tout ce qu'il fait. Toute autre action de page, telle que l'affichage de la nouvelle page ou la modification du titre de la page, doit être effectuée par vous.
La spécification W3C que vous liez n'est qu'un brouillon et le navigateur peut l'implémenter différemment. Firefox , par exemple, ignore
title
complètement le paramètre.Voici un exemple simple
pushState
que j'utilise sur mon site Web.la source
replaceState
change l'état actuel de la page. Il vous permet de modifier l'objet d'état et l'URL de l' état actuel de la page.Regardez l'exemple
et rechercher
location.hash
;la source
Le deuxième argument Le titre ne signifie pas le titre de la page - Il s'agit plus d'une définition / information pour l'état de cette page
Mais nous pouvons toujours changer le titre en utilisant l' événement onpopstate , et en passant le nom du titre non pas à partir du deuxième argument, mais en tant qu'attribut du premier paramètre passé en tant qu'objet
Référence: http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
la source
Selon MDN History doc
Il est clairement dit que le deuxième argument est pour l'avenir utilisé pas pour le moment. Vous avez raison, le deuxième argument concerne le titre de la page Web, mais il est actuellement ignoré par tous les principaux navigateurs.
Firefox ignore actuellement ce paramètre, bien qu'il puisse l'utiliser à l'avenir. Passer la chaîne vide ici devrait être sûr contre les modifications futures de la méthode. Alternativement, vous pouvez passer un court titre pour l'état dans lequel vous vous déplacez.
la source
Je voulais vraiment répondre à la réponse de @ Sev.
Sev a raison, il y a un bug à l'intérieur du
window.history.replaceState
la source
Supposons que https://www.mozilla.org/foo.html exécute le JavaScript suivant:
Cela entraînera l'affichage de la barre d'URL https://www.mozilla.org/bar2.html , mais ne fera pas charger le navigateur de bar2.html ni même de vérifier que bar2.html existe.
la source