2014-04-09 22 views
6

Ho array di stati e indici dell'array in history.state e su popstate ho letto il contenuto dell'array, funziona bene ma quando torno alla prima pagina e aggiorno il la matrice è andata (che è normale) ma lo stato della cronologia di andata rimane.Cancella cronologia html creata da pushState all'aggiornamento

È possibile rimuovere la cronologia falsa creata con pushState?

Non riesco a memorizzare il mio stato in localStorage perché ho funzioni nel mio stato array.

+0

è possibile impostare un nuovo stato con pushState o replaceState su pageload, rimuoverà la storia in avanti. – LawfulHacker

risposta

7

Se leggete il specification of History API for pushState, al punto 4 si afferma

  1. Se il metodo invocato è stato il metodo pushState():
    Rimuovere tutte le voci nel contesto di navigazione di cronologia delle sessioni dopo la voce corrente. Se la voce corrente è l'ultima voce nella cronologia della sessione, quindi nessuna voce viene rimossa.

Quindi, a seconda di ciò che si sta cercando di fare, si potrebbe fare un caso speciale per la prima volta che il caricamento della pagina e spingere uno stato (uno si prenderà in considerazione la vostra prima), e in tal modo chiaro gli stati avanzati della storia.

+2

Quasi funziona, ma quando creo pushState onInit (aggiornamento) ho due pagine nella cronologia, la pagina reale originale e quella finta da pushState. replaceState inoltre non funziona perché non cancella la cronologia cambia solo quella corrente. Non è perfetto, ma probabilmente non puoi fare di meglio. – jcubic

2

Non esiste alcun modo per cancellare la cronologia della sessione o disabilitare la navigazione back/forward dal codice non privilegiato. La soluzione più vicina disponibile è il metodo location.replace(), che sostituisce l'attuale elemento della cronologia della sessione con l'URL fornito. Mozilla

L'unico modo è questo (ma credo che tu lo sai)

var length=history.length;  
history.go(-length); 
window.location.replace("urlToRedirect"); 

dopo l'utilizzo di sostituire() la pagina corrente non verrà salvata nella cronologia della sessione, il che significa che l'utente non sarà essere in grado di utilizzare il pulsante Indietro per navigare ad esso.

+0

Tuttavia, l'utente può andare avanti, perché la sostituzione non rimuoverà la storia in anticipo. – modiX

2

La mia idea - ignorare tutta la storia:

for (i = 0; i < 50; i++) { 
 
    history.pushState({}, ''); 
 
}