Utilizzando l'API html5 window.history
, posso controllare abbastanza bene la navigazione sulla mia web app.JS - window.history - Elimina uno stato
L'applicazione ha attualmente due stati: selectDate
(1) e enterDetails
(2).
Quando i carichi app, ho replaceState
e impostare un popState
ascoltatore:
history.replaceState({stage:"selectDate",...},...);
window.onpopstate = function(event) {
that.toStage(event.state.stage);
};
Quando si seleziona una data e l'applicazione passa alla fase 2 Spingo stato 2 alla pila:
history.pushState({stage:"enterDetails",...},...);
Questo stato viene sostituito ogni volta che i dettagli cambiano e quindi vengono salvati nella cronologia.
Ci sono tre modi per lasciare la fase 2:
- save (Ajax presentare)
- annullare
- indietro pulsante
Il pulsante indietro viene gestito dal popstate
ascoltatore. Il pulsante Annulla spinge lo stage 1 in modo che l'utente possa tornare ai dettagli che stavano inserendo il pulsante Indietro. Funzionano entrambi bene.
sul pulsante Salva dovrebbe tornare al livello 1 e non permettere all'utente di navigare indietro alla Pagina (dal momento che già presentate). In pratica, è necessario che lo stack della cronologia sia lunghezza = 1.
Ma non sembra essere uno history.delete()
o history.merge()
. Il meglio che posso fare è un history.replaceState(stage1)
che lascia la pila della storia come: ["selectDate","selectDate"]
.
Come si elimina un livello?
Edit:
pensiero di qualcos'altro, ma non funziona neanche.
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
Questo lascia la pila storia come ["selectDate","selectDate#foo"]
.
Quindi, in alternativa, c'è un modo per rimuovere la cronologia "Avanti" senza premere un nuovo stato?
Ehi, grazie. È piuttosto più elegante di quello che ho usato come soluzione alternativa. – slicedtoad
Cosa fare quando un utente è abituato a questo comportamento, quindi naviga alcune volte costruendo uno stato, quindi naviga verso un sito esterno, quindi torna indietro e presumo che la cronologia di tutte le applicazioni della navigazione sia scomparsa e il pulsante Indietro essere ultimo sul mucchio. –
Lo stato inviato da history.pushState sarà disponibile al loro ritorno (anche se chiudono o aggiornano il browser). Alcuni browser generano un evento popstate al caricamento della pagina, ma altri no (Firefox per esempio). Ma puoi sempre leggere history.state direttamente. Se non stai facendo uso dell'oggetto history.state, avresti bisogno di usare un altro mezzo per mantenere il tuo stato (come localStorage). history.state viene mantenuto automaticamente come parte della cronologia di navigazione. –