2015-12-06 39 views
9

Ho un'applicazione jQuery Mobile che sto sviluppando. jQuery Mobile utilizza pushState per impostazione predefinita per consentire al pulsante Indietro del browser di funzionare in modo dinamico.Abilitare il pulsante Indietro senza consentire modifiche manuali tramite l'URL

Ora, la mia applicazione ha lo scopo di cambiare le pagine in modo dinamico e l'utente deve sempre arrivare in prima pagina durante il caricamento dell'applicazione.

Il problema è, jQuery Mobile aggiorna l'hash della pagina nell'URL ogni volta che vado a una pagina nell'applicazione. Ora, se l'utente inserisce lo stesso hash nell'applicazione, jQuery Mobile li porterà automaticamente a quella pagina (quando vorrei che fossero gestiti dal mio codice). Inoltre, se aggiornano la pagina, vorrei che il mio codice li riportasse dove dovrebbero essere, non direttamente spostati nell'hash che l'URL aveva.

Per evitare questo, ho cercato di aggiungere il seguente codice nel mobileinit evento:

$.mobile.hashListeningEnabled = false; 

questo funziona, ma disabilita anche i pushState aggiornamenti, che a sua volta rompe il pulsante indietro, che io don' voglio succedere.

Quale sarebbe il modo migliore per consentire agli utenti di utilizzare il pulsante Indietro pur non consentendo il movimento manuale tra le pagine?

+0

Hai investito 100 dei tuoi rappresentanti su questa domanda; hai due risposte, ti hanno aiutato a risolvere il tuo problema? – Omar

risposta

6

Non ho così tanto elemento per descrivere una soluzione possibile e accurato per il vostro problema, ma un compito facile dovrebbe essere questo:

su ogni link sulla pagina che vuole per un altro allegare una funzione come questo:

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

nella stessa pagina si può provare se non ci sono problemi con questo:

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

O questo, d'altra pagina di controllare se questo variabl stoccaggio e exsist e di rendere l'operazione:

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

un ottimo consiglio Emanuele! In passato ho utilizzato localStorage per aiutarmi nei miei problemi di navigazione. Ho dovuto navigare in una directory, quindi ho memorizzato il codice a 3 cifre per il distretto, così ho sempre saputo dove fossi! –

+0

Non dovrebbe esserci un posto dove si imposta sessionStorage ["urlChangedByLink"] su falso? altrimenti sarà sempre vero. Suppongo che alla fine del gestore di navigazione della finestra dovremmo impostarlo su false. –

+0

errato. Questo non copre la pagina corrente di aggiornamento né l'accesso alle pagine manualmente con l'hash. Mi chiedo perché gli utenti inviano una risposta totalmente sbagliata. – Omar

0

una possibilità è quella di impostare il data-url per ciascuna delle tue pagine è sufficiente aggiungere l'attributo alla tua pagina div e impostarlo uguale alla vostra home page in questo modo l'url per la pagina mostrata nella cronologia non ha i valori hash (o potresti includere i tuoi valori). la documentazione su questo è meglio spiegata in the jquery mobile documentation