2015-08-14 6 views
8

Browser stellen eine Liste der Seiten bereit, die innerhalb einer Clientsitzung über das Objekt window.history aufgerufen wurden. Client-Code kann damit durch die Liste vor- und zurückgehen (mit history.back(), history.forward() und history.go()).So finden Sie den aktuellen Standortindex in der Browserhistorie

Aber wie kann der Client-Code wo in der Geschichte der aktuellen Seite befindet? Wenn der Client beispielsweise die Seiten A, B und C aufruft, enthält der Verlauf drei Elemente, und das aktuelle Verlaufselement (oder der aktuelle Status) wird für Seite C verwendet. Wenn der Benutzer dann auf die Schaltfläche "Zurück" klickt, wird der aktuelle Seite ist jetzt B. Allerdings ist die history.length immer noch 3, was die Tatsache widerspiegelt, dass insgesamt drei Seiten besucht wurden. Wie stellen wir fest, dass der Client derzeit in Position 2 in der Geschichte ist? Ein spezifischeres Problem ist, dass ich bestimmen möchte, ob ich am ersten Element in der Geschichte positioniert bin, so dass ich eine Schaltfläche 'Schließen' anzeigen kann, die die Seite schließt (unter der Annahme, dass window.opener nicht null ist); An jeder anderen Stelle in der Geschichte möchte ich stattdessen eine Schaltfläche "Zurück" anzeigen, die zur vorherigen Seite führt.

Dies scheint eine merkwürdige Unterlassung zu sein, dass es keinen 'aktuellen Index' in das Historienobjekt gibt.

Hinweis: Dies ist ähnlich wie question #12895940, unterscheidet sich aber dadurch, dass ich wirklich nur wissen muss, ob ich an der ersten Stelle in der Historie positioniert bin.

+2

möglich Duplikat von [Finde heraus, wo in der Browserhistorie der Benutzer ist] (http://stackoverflow.com/questions/12895940/find-out-where-in-browserhistory-the-user-is) – duskwuff

+0

As Es wurde im obigen Thema gesagt (@duskwuff), ich denke, es gibt keine Möglichkeit, dies in JavaScript zu tun, es sei denn, Sie erstellen etwas wie eine Web-Erweiterung, um den Verlauf "die ganze Zeit" zu verfolgen. Aber ich wette, das ist nicht die Lösung, nach der Sie suchen – lockedz

Antwort

5

Das einzige, was ich mit aufkam ist (die in HTML5 + Browsern funktioniert nur) etwas entlang der Linien von dieser:

// Onload 
{ 
    if (!history.state && typeof(history.replaceState) == "function") 
     history.replaceState({ page: history.length, href: location.href }, "foo"); 
} 

Dieses ein Statusobjekt auf die Geschichte Stapel schiebt, wenn die Seite geladen wird. (Die typeof Prüfung ist erforderlich, um sicherzustellen, dass der Browser die HTML5 replaceState() Methode unterstützt.)

Später kann ich überprüfen, ob die aktuelle Geschichte Objekt das erste in der Liste ist, die ersetzt bekam:

if (history.state && history.state.page == 1) { 
    // It appears that we are positioned at the first history item 
    ... 
} 

Dies scheint für das, was ich brauche, angemessen zu sein.

Verwandte Themen