Mit der html5 window.history
API kann ich die Navigation in meiner Web App ziemlich gut steuern. Die App hat derzeit zwei Zustände: selectDate
(1) und enterDetails
(2).JS - window.history - Löschen eines Status
, wenn die Anwendung geladen wird, I replaceState
und einen popState
Zuhörers eingestellt:
history.replaceState({stage:"selectDate",...},...);
window.onpopstate = function(event) {
that.toStage(event.state.stage);
};
wenn ein Datum ausgewählt wird, und die Anwendung bewegt sich 2 Stufe I Zustand schieben 2 auf den Stapel:
history.pushState({stage:"enterDetails",...},...);
Dieser Status wird immer dann geändert, wenn sich Details ändern, sodass sie im Verlauf gespeichert werden.
Es gibt drei Möglichkeiten der Stufe 2 zu verlassen:
- save (Ajax abschicken)
- abbrechen
- Zurück-Taste
Die Zurück-Taste durch die popstate
Zuhörer behandelt wird. Die Abbrechen-Taste schiebt Stufe 1, so dass der Benutzer zurück zu den Details gehen kann, die sie die Zurück-Taste eingegeben haben. Beide funktionieren gut.
Die Schaltfläche "Speichern" sollte wieder auf Stufe 1 zurückgesetzt werden und es dem Benutzer nicht erlauben, zurück zur Detailseite zu navigieren (da sie bereits eingereicht wurden). Basisch, y sollte der Historienstapel länge = 1 sein.
Aber es scheint kein history.delete()
oder history.merge()
zu sein. Das Beste, was ich tun kann, ist ein history.replaceState(stage1)
, der den Geschichtestapel wie folgt lässt: ["selectDate","selectDate"]
.
Wie kann ich eine Schicht loswerden?
Edit:
Gedanke an etwas anderes, aber es funktioniert auch nicht.
history.back(); //moves history to the correct position
location.href = "#foo"; // successfully removes ability to go 'forward',
// but also adds another layer to the history stack
Dies lässt den Verlaufsstapel als ["selectDate","selectDate#foo"]
.
Gibt es also als Alternative eine Möglichkeit, den "Forward" Verlauf zu entfernen, ohne einen neuen Zustand zu drücken?
Hey, danke. Das ist etwas eleganter als das, was ich als Workaround benutzt habe. – slicedtoad
Was ist zu tun, wenn ein Benutzer an dieses Verhalten gewöhnt ist, dann einige Male einen Status erstellt, dann zu einer externen Site navigiert und dann zurück navigiert, und ich nehme an, dass der Verlauf der Navigation der App nun verschwunden ist und die Zurück-Schaltfläche angezeigt wird Sei zuletzt auf dem Haufen. –
Der von history.pushState gedrückte Status wird verfügbar sein, wenn sie zurückkommen (auch wenn sie ihren Browser schließen oder aktualisieren). Einige Browser werden ein Popstate-Ereignis beim Laden der Seite auslösen, andere jedoch nicht (Firefox zum Beispiel). Aber Sie können history.state immer direkt lesen. Wenn Sie das Objekt history.state nicht verwenden, müssen Sie eine andere Methode verwenden, um Ihren Status beizubehalten (wie localStorage). history.state wird automatisch als Teil des Browserverlaufs beibehalten. –