2015-08-14 16 views
8

I browser forniscono un elenco delle pagine visitate all'interno di una sessione client tramite l'oggetto window.history. Con questo, il codice cliente può navigare avanti e indietro nell'elenco (usando history.back(), history.forward() e history.go()).Come trovare l'indice della posizione attuale nella cronologia del browser

Ma come può il codice client determinare dove nella cronologia si trova la pagina corrente? Ad esempio, se il client visita le pagine A, B e C, la cronologia conterrà tre elementi e l'elemento della cronologia corrente (o lo stato) sarà per la pagina C. Se l'utente fa clic sul pulsante "Indietro", l'attuale la pagina è ora B. Tuttavia, lo history.length è ancora 3, il che riflette il fatto che tre pagine sono state visitate in totale. Come si determina che il cliente si trovi attualmente nell'elemento 2 della cronologia?

Un problema più specifico è che voglio determinare se sono posizionato sul primo elemento della cronologia, in modo da poter visualizzare un pulsante "Chiudi" che chiuderà la pagina (supponendo che window.opener non sia nullo); in qualsiasi altra posizione nella cronologia, voglio invece visualizzare un pulsante 'Indietro' che consentirà di navigare alla pagina precedente.

Questa sembra essere una curiosa omissione che non esiste un 'indice corrente' nell'oggetto della cronologia.

Nota: Questo è simile a question #12895940, ma differisce dal fatto che ho solo bisogno di sapere se sono posizionato nella prima posizione nella cronologia.

+2

possibile duplicato di [Scopri dove si trova nella cronologia del browser l'utente] (http://stackoverflow.com/questions/12895940/find-out-where-in-browser-history-the-user-is) – duskwuff

+0

As è stato detto nell'argomento sopra (@duskwuff), penso che non ci sia modo di farlo in JavaScript, a meno che non si crei qualcosa come un'estensione web per tenere traccia della storia "tutto il tempo". Ma scommetto che questa non è la soluzione che stai cercando – lockedz

risposta

5

L'unica cosa che mi è venuta (che funziona solo in HTML5 + browser) è qualcosa sulla falsariga di questo:

// Onload 
{ 
    if (!history.state && typeof(history.replaceState) == "function") 
     history.replaceState({ page: history.length, href: location.href }, "foo"); 
} 

Questo spinge un oggetto di stato sulla storia stack quando la pagina viene caricata. (È necessario il controllo typeof per garantire che il browser supporta il metodo HTML5 replaceState().)

Più tardi, posso verificare se l'oggetto storia attuale è il primo della lista che ha ottenuto sostituito:

if (history.state && history.state.page == 1) { 
    // It appears that we are positioned at the first history item 
    ... 
} 

Questo sembra essere adeguato per quello di cui ho bisogno.

Problemi correlati