Wie lässt man die Browser-Zurück-Schaltfläche ignorieren Hash-Tags?

9

Ich habe eine Website, die Hashes verwendet, um einige Tabs und Layer auf der aktuellen Seite zu öffnen / schließen. Der Grund für die Verwendung von Hashes ist, dass, wenn ein Benutzer eine andere Seite über einen Link aufruft und dann zur ursprünglichen Seite zurückkehrt, alle Tabs und Ebenen genau so wie beim Verlassen der Seite geöffnet werden sollten.

Das Problem ist, dass sich während der ersten Seite und der Zurück-Schaltfläche des Browsers nur die Hashes ändern und der Benutzer mehrfach klicken muss, um tatsächlich zur letzten "richtigen" Seite zurückzukehren.

Kann dieses Verhalten geändert werden? Hier ist ein Beispiel-Workflow:

Ich besuche also eine Seite:

start.php & gt; klicke auf den Link & gt; processing.php & gt; Klicken Sie auf Registerkarte, Hash-Änderungen & gt;

processing.php#1 & gt; Klicken Sie auf einen anderen Abschnitt auf der Seite. Der Hash ändert sich in & gt;

processing.php#1-2

Wenn ich nun auf die Zurück-Schaltfläche des Browsers klicke, gehe ich zurück zu:

start.php NICHT processing.php#1

ABER! Wenn ich von:

gehe

processing.php#1-2 & gt; navigiere zu & gt; otherpage.php

und dann drücken Sie die Zurück-Taste von dort, ich muss zurück zu:

%Vor%

, um die geöffneten Registerkarten und Ebenen wiederherzustellen.

Ist das möglich !? Jede Hilfe wird geschätzt!

    
Kzqai 05.01.2012, 18:25
quelle

5 Antworten

8

Soweit ich weiß, können Sie das nicht ohne JavaScript lösen. Das Fragment ist Teil der URL, und wenn es sich ändert, wird die neue URL dem Verlauf hinzugefügt.

Ich würde vorschlagen, location.replace() zu verwenden, wenn Sie die URL ändern möchten, ohne einen Verlaufseintrag zu erstellen. Versuchen Sie statt window.location.hash zu setzen:

%Vor%

Ich überlasse es Ihnen, den besten Weg zu wählen, um dies in Ihre Website zu integrieren, aber hier ist eine minimal getestete Option, Klicks auf Links einzufangen:

%Vor%     
s4y 05.01.2012 19:46
quelle
3

Das ist absichtliches Browser-Verhalten und ist die richtige Verwendung von Hash-Tags. Daher schlage ich vor, zu prüfen, ob das JavaScript, das diese Hash-Tags verwendet, das Problem ist, und es in eine andere Speichermethode zu ändern. Effektiv können Sie einfach eine global verfügbare Javascript-Variable für diesen Zweck verwenden, da kein erneutes Laden der Seite stattfindet, so dass die Variable bestehen bleibt.

%Vor%

Sie möchten das Standardverhalten natürlich immer noch durch Klicks für js-Elemente unterdrücken.

Alternativ können Sie, wenn Sie möchten, dass die Phasen gespeichert werden, aber nicht "navigierbar" sind, Local Storage in modernen Browsern verwenden.

EDIT: (basierend auf den neuen Informationen)

Die Sache, die Sie versuchen, ist ein sehr häufiges Szenario in Webdev, weil Seiten nicht viel über den Status / die Informationen ihres Benutzers speichern.

Sie möchten Informationen darüber speichern, was Ihre Benutzer abgeschlossen haben und in welchem ​​Stadium sie sich gerade befinden. Auch wenn sie von einer Seite weg navigiert haben.

Es gibt eine begrenzte Anzahl von Orten, um Daten zu "speichern": den Hash, localStorage, Cookies, oder clientseitige , und das ist alles. Wenn ich ein Nutzer Ihrer Seite bin, vermute ich, dass meine Daten unabhängig davon gespeichert werden sollen, wie ich durch Ihre App navigiere.

Ich schlage daher vor, einen besseren Speicherort für den Status Ihrer Webseite zu berücksichtigen als den Hash, der in der Regel für die Navigation gedacht ist. Wenn sie über PHP eingeloggt sind, speichern Sie sie einfach über PHP in der Datenbank. Wenn nicht, dann speichern Sie es in localStorage, wo verfügbar, und greifen Sie auf Cookies zurück oder verwenden Sie einfach Cookies.

Ihre Endnavigation sieht möglicherweise folgendermaßen aus: start page & gt; processing page & gt; any other page & gt; processing page & gt; leave the site & gt; return to processing page

Aber jedes Mal, wenn sie zur Verarbeitungsseite zurückkehren, werden ihre Daten in dem Zustand gespeichert, in dem sie sie hinterlassen haben.

Wenn Sie aus irgendeinem Grund einen Hash verwenden müssen, hat @ Sidnicious 'Antwort eine Möglichkeit, den Schritt des Erstellens eines Verlaufseintrags zu überspringen, wenn Sie ihn also für alle Stufen außer der vorherigen verwenden Wenn Sie die Seiten wechseln, sieht Ihr Verlauf wie folgt aus: start & gt; processing.php & gt; processing.php#final & gt; otherpage.php , wodurch die Zurück-Schaltfläche auf ein akzeptables Maß reduziert werden kann.

    
Kzqai 05.01.2012 18:33
quelle
0

Vielleicht verhindern Sie das Standardverhalten und machen den Sprung zum Hash mit Javascript?

%Vor%     
Burntime 05.01.2012 18:43
quelle
0

Sie können zählen, wie viele Hashes Sie geklickt haben, seit Sie die Seite geladen haben, und dann diese Anzahl mit history.go (- countHashes) verwenden, um zu Ihrer Seite zurückzukehren.

    
Ivan Ivković 13.02.2013 14:02
quelle
0

Ich habe das gleiche Problem wie das von Ihnen beschriebene Problem festgestellt. Ich stimme Ivan Ivkovićs Idee zu. Das Folgende ist mein Code und es funktioniert für meinen Fall. Ich bin neu in JS, hoffe aber, dass es hilft.

%Vor%     
yueyu 13.08.2014 20:15
quelle

Tags und Links