Kann jemand ein funktionierendes Beispiel für history.replaceState geben? Das sagt w3.org :
history . replaceState(data, title [, url ] )
Aktualisiert den aktuellen Eintrag im Sitzungsverlauf, um die angegebenen Daten, den Titel und, falls angegeben und nicht null, die URL zu erhalten.
Aktualisieren:
Das funktioniert perfekt:
history.replaceState( {} , 'foo', '/foo' );
Die URL ändert sich, aber der Titel ändert sich nicht. Ist das ein Fehler oder fehlt mir etwas? Getestet auf dem neuesten Chrome.
javascript
ajax
html
Serjas
quelle
quelle
title
Parameter nicht verwendet.replaceState
Beispiel fragt , und die akzeptierte Antwort ist in keiner Weise einreplaceState
Beispiel.Antworten:
In der Tat ist dies ein Fehler, obwohl er seit 2 Jahren beabsichtigt ist. Das Problem liegt in einigen unklaren Spezifikationen und der Komplexität, wenn
document.title
und vorwärts / rückwärts beteiligt sind.Siehe Fehlerreferenz zu Webkit und Mozilla . Auch Opera bei der Einführung der History-API sagte, dass der title-Parameter nicht verwendet wurde und wahrscheinlich immer noch nicht.
Mögliche Lösung
Die einzige Möglichkeit, die ich sehe, besteht darin, das Titelelement zu ändern und stattdessen pushState zu verwenden:
quelle
replaceState()
den Dokumenttitel weiterhin manuell zu verwenden und einfach manuelldocument.title = "title"
Hier ist ein minimales, erfundenes Beispiel.
Es gibt noch mehr zu
replaceState()
tun , aber ich weiß nicht genau, was Sie damit machen wollen.quelle
title
Parameter inreplaceState()
wird nach meinem besten Wissen in allen Browsern ignoriert.history.pushState
Verschiebt den aktuellen Seitenstatus auf den Verlaufsstapel und ändert die URL in der Adressleiste. Wenn Sie also zurückkehren, wird dieser Status (das Objekt, das Sie übergeben haben) an Sie zurückgegeben.Derzeit ist das alles, was es tut. Alle anderen Seitenaktionen, z. B. das Anzeigen der neuen Seite oder das Ändern des Seitentitels, müssen von Ihnen ausgeführt werden.
Die von Ihnen verknüpfte W3C-Spezifikation ist nur ein Entwurf, und der Browser implementiert sie möglicherweise anders. Firefox beispielsweise ignoriert den
title
Parameter vollständig.Hier ist ein einfaches Beispiel dafür
pushState
, das ich auf meiner Website verwende.quelle
replaceState
ändert den aktuellen Seitenstatus. Hiermit können Sie das Statusobjekt und die URL des aktuellen Seitenstatus ändern .schau dir das Beispiel an
und suchen
location.hash
;quelle
Das zweite Argument Titel bedeutet nicht Titel der Seite - Es ist eher eine Definition / Information für den Status dieser Seite
Wir können den Titel jedoch weiterhin mit dem Ereignis onpopstate ändern und den Titelnamen nicht aus dem zweiten Argument, sondern als Attribut aus dem ersten als Objekt übergebenen Parameter übergeben
Referenz: http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
quelle
Laut MDN History doc
wird klar gesagt, dass das zweite Argument für die Zukunft vorerst nicht verwendet wird. Sie haben Recht, dass das zweite Argument den Titel einer Webseite betrifft, aber derzeit von allen gängigen Browsern ignoriert wird.
Firefox ignoriert diesen Parameter derzeit, obwohl er möglicherweise in Zukunft verwendet wird. Das Übergeben der leeren Zeichenfolge sollte vor zukünftigen Änderungen an der Methode sicher sein. Alternativ können Sie einen kurzen Titel für den Status übergeben, in den Sie wechseln.
quelle
Ich wollte unbedingt auf die Antwort von @ Sev antworten.
Sev hat recht, es gibt einen Fehler in der
window.history.replaceState
quelle
Angenommen, https://www.mozilla.org/foo.html führt das folgende JavaScript aus:
Dies führt dazu, dass in der URL-Leiste https://www.mozilla.org/bar2.html angezeigt wird, der Browser jedoch nicht bar2.html lädt oder sogar überprüft, ob bar2.html vorhanden ist.
quelle