2014-10-12 6 views
13

Der zweite Parameter History.pushState und History.replaceState kann verwendet werden, um den "Titel" des Historieneintrags festzulegen. DieseTitel von history.pushState ist nicht unterstützt, was ist eine gute Alternative?

bedeutet, dass, wenn der Benutzer klickt Seite 1 bis Seite 8, das ist, was er in seiner Geschichte Bar sehen sollte:

enter image description here

Und es arbeitet an Safari und Opera.

Aber auf Chrome und Firefox, ist es das, was der Benutzer sieht:

enter image description here

Versuch document.title zu ändern funktioniert nicht, da es alle Einträge in der Historie Titel-Änderungen:

enter image description here

Was ist die beste Lösung für dieses Problem?

Sind wir nur mit eine Geschichte Titel für alle die Seiten mit pushState und replaceState umgesetzt gezwungen?

Antwort

4

History.js unterstützt elegant die HTML5 History/State-APIs (pushState, replaceState, onPopState) in allen Browsern.

Werfen Sie einen Blick auf die Demos here

Beispiel:

History.pushState({state:1}, "State 1", "?state=1"); // logs {state:1}, "State 1", "?state=1" 
History.pushState({state:2}, "State 2", "?state=2"); // logs {state:2}, "State 2", "?state=2" 
History.replaceState({state:3}, "State 3", "?state=3"); // logs {state:3}, "State 3", "?state=3" 
History.pushState(null, null, "?state=4"); // logs {}, '', "?state=4" 
History.back(); // logs {state:3}, "State 3", "?state=3" 
History.back(); // logs {state:1}, "State 1", "?state=1" 
History.back(); // logs {}, "Home Page", "?" 
History.go(2); // logs {state:3}, "State 3", "?state=3" 
+0

Seit etwa einem Jahr wird History.js nicht mehr gepflegt. Bitte sehen Sie https://github.com/browserstate/history.js/blob/master/README.md – King

4

Ich hatte das gleiche Problem und es scheint, Sie sind falsch.

Wenn History.js es unterstützt, könnten Sie auch. Mit Blick auf den Quellcode so scheint es, Geschichte JS tut es so aus:

https://github.com/browserstate/history.js/blob/master/scripts/uncompressed/history.js#L1293

try { 
    document.getElementsByTagName('title')[0].innerHTML = title.replace('<','&lt;').replace('>','&gt;').replace(' & ',' &amp; '); 
} 
catch (Exception) { } 
document.title = title; 

I getestet und es funktioniert für mich mit Chrome fein: es funktioniert nicht „umschreiben“, um die ganze Geschichte Titel. Es scheint jedoch, dass das Zurück- oder Vorspulen dazu führen kann, dass die Seite neu geladen wird, wodurch der Titel möglicherweise neu initialisiert wird.

+1

Bitte beachten Sie, dass dieser Code _after_ 'Geschichte kommen muss.pushState', um die korrekten Verlaufsinformationen anzuzeigen. – King

0

Eine Abhilfe Um dieses Problem zu beheben, ist stattdessen den folgenden Code zu verwenden:

window.history.pushState({state: 1}, null, "https://example.com"); 
document.title = "Your title"; 

So ersetzen Sie einfach den „Titel“ Eintrag in der Geschichte Objekt mit null, und dem Titel des rechten danach Dokuments ändern .

Im Moment funktioniert das mit Chrome, Opera und Firefox für mich. Habe keine anderen Browser getestet, aber ich bin mir fast sicher, dass das Problem in fast allen Browsern behoben wird.