2015-12-06 27 views
9

Mam aplikację jQuery Mobile, którą rozwijam. jQuery Mobile domyślnie używa pushState, aby umożliwić powrót przycisku przeglądarki do dynamicznej pracy.Włączanie przycisku Wstecz bez ręcznego wprowadzania zmian za pomocą adresu URL

Moja aplikacja ma teraz dynamicznie zmieniać strony, a użytkownik powinien zawsze przychodzić na pierwszą stronę podczas ładowania aplikacji.

Problem polega na tym, że jQuery Mobile aktualizuje hash strony w adresie URL za każdym razem, gdy przechodzę do strony w aplikacji. Teraz, jeśli użytkownik wprowadzi ten sam skrót w aplikacji, jQuery Mobile automatycznie przeniesie ich na tę stronę (gdy chcę, aby były obsługiwane przez mój kod). Ponadto, jeśli odświeżą stronę, chciałbym, aby mój kod zabrał ich z powrotem do miejsca, w którym powinien być, a nie bezpośrednio do adresu hash, który miał URL.

Aby temu zapobiec, próbowałem dodać następujący kod w przypadku mobileinit:

$.mobile.hashListeningEnabled = false; 

To działa, ale również wyłącza pushState aktualizacje, które z kolei łamie przycisk Back, które don” Chcę się wydarzyć.

Jaki byłby najlepszy sposób, aby umożliwić użytkownikom korzystanie z przycisku Wstecz, nie pozwalając jednocześnie na ręczny ruch między stronami?

+0

Zainwestowałeś 100 swoich przedstawicieli na to pytanie; masz dwie odpowiedzi, czy pomogły ci rozwiązać twój problem? – Omar

Odpowiedz

6

nie mam tyle do opisania elementu możliwe i dokładne rozwiązanie dla swojego problemu, ale łatwe powinno być tak:

na każdym link na swojej stronie, że brać na inną funkcję, jak dołączyć to:

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

na tej samej stronie można spróbować, jeśli nie ma problemu z tym:

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

Albo to, z drugiej strony, czy ta przechowywania variabl e exsist i niż dokonać operacji:

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

doskonała sugestia Emanuele! Używałem localStorage w przeszłości, aby pomóc mi w moich kłopotach nawigacyjnych. Musiałem nawigować po katalogu, więc zapisałem 3-cyfrowy kod dla dzielnicy, więc zawsze wiedziałem, gdzie jestem! –

+0

Czy nie powinno być miejsca, w którym ustawiono sessionStorage ["urlChangedByLink"] na false? w przeciwnym razie zawsze będzie to prawda. Przypuszczam, że na końcu okna nawigatora należy ustawić go na false. –

+0

Niepoprawnie. Nie obejmuje to odświeżania bieżącej strony ani ręcznego dostępu do stron za pomocą skrótu. Zastanawiam się, dlaczego użytkownicy przebrali całkowicie błędną odpowiedź. – Omar

0

jedna opcja Oto ustawić data-url dla każdej ze stron wystarczy dodać atrybut do swojej strony div i ustawić go równą swojej stronie głównej W ten sposób URL dla strona wyświetlana w historii nie ma wartości mieszania (lub możesz uwzględnić własne wartości). dokumentacja na ten temat jest lepiej wyjaśniona: in the jquery mobile documentation