2015-12-06 10 views
9

Ich habe eine jQuery Mobile-Anwendung, die ich entwickle. jQuery Mobile verwendet standardmäßig pushState, damit der Zurück-Button des Browsers dynamisch funktioniert.Aktivieren der Zurück-Schaltfläche ohne manuelle Änderungen über die URL zuzulassen

Jetzt soll meine Anwendung seine Seiten dynamisch ändern, und der Benutzer sollte immer auf die Startseite gelangen, wenn er die Anwendung lädt.

Das Problem ist, jQuery Mobile aktualisiert den Hash der Seite in der URL, wenn ich auf eine Seite in der Anwendung gehe. Wenn der Benutzer nun denselben Hash in der Anwendung eingibt, wird er von jQuery Mobile automatisch auf diese Seite geleitet (wenn ich möchte, dass sie von meinem Code verarbeitet werden). Auch wenn sie die Seite aktualisieren, möchte ich, dass mein Code sie dorthin zurückführt, wo sie sein sollte, und nicht direkt in den Hash der URL verschoben wurde.

Um dies zu verhindern, habe ich versucht, den folgenden Code in der mobileinit Ereignis hinzuzufügen:

$.mobile.hashListeningEnabled = false; 

Dies funktioniert, aber es sperrt auch die pushState Updates, die die Zurück-Taste wiederum bricht, die ich don‘ Ich will passieren.

Was wäre der beste Weg, um Benutzern zu ermöglichen, die Zurück-Taste zu verwenden, während manuelle Bewegungen zwischen Seiten nicht erlaubt sind?

+0

Sie haben 100 Ihrer rep auf diese Frage investiert; Sie haben zwei Antworten, haben sie Ihnen geholfen, Ihr Problem zu beheben? – Omar

Antwort

6

ich nicht so viel Element eine mögliche und genaue Lösung für Ihr Problem zu beschreiben, aber leicht gefallen sollte sein:

auf jedem Link auf Ihrer Seite, die auf einen anderen nimmt eine Funktion wie anhänge dies:

$(DOMElem).on("click",function(){ 
    sessionStorage["urlChangedByLink"] = "true"; 
}); 

auf der gleichen Seite können Sie versuchen, wenn es kein Problem mit diesem sind:

$(window).on("navigate", function(event, data) { 
    if(sessionStorage["urlChangedByLink"] == "true") 
    $.mobile.hashListeningEnabled = true; 
    else 
    $.mobile.hashListeningEnabled = false; 
}); 

Oder diese, auf der anderen Seite, die Sie prüfen, ob diese Speicher variabl e exsist und als Ihr Betrieb vor:

if(sessionStorage["urlChangedByLink"] == "true") 
    continue navigation... 
else 
    window.history.back(); 
+0

ein ausgezeichneter Vorschlag Emanuele! Ich habe in der Vergangenheit localStorage verwendet, um mir bei meinen Navigationsproblemen zu helfen. Ich musste durch ein Verzeichnis navigieren, also speicherte ich den 3-stelligen Code für den Bezirk, sodass ich immer wusste, wo ich war! –

+0

Sollte es keinen Ort geben, an dem Sie sessionStorage ["urlChangedByLink"] auf false setzen? sonst wird es immer wahr sein. Ich denke, am Ende des Fenster-Navigations-Handlers sollten wir ihn auf false setzen. –

+0

Falsch. Dies gilt weder für das Aktualisieren der aktuellen Seite noch für den manuellen Zugriff auf Seiten mit Hash. Ich frage mich, warum Benutzer eine völlig falsche Antwort aufwerten. – Omar

0

eine Option hier ist die data-url für jede Ihrer Seiten setzen Sie einfach fügen Sie das Attribut auf Ihrer Seite div und setzen es gleich zu Ihrer Homepage auf diese Weise die URL Die Seite im Verlauf hat keine Hash-Werte (oder Sie könnten Ihre eigenen Werte enthalten). Die Dokumentation dazu ist besser erklärt in the jquery mobile documentation