2009-05-14 19 views
9

Nel test document.location.href, ho osservato che quando l'utente avvia un'azione che risulta in javascript che assegna a document.location.href, il nuovo URL viene aggiunto a la storia.Assegnazione a document.location.href senza cronologia di compressione

Tuttavia, se la chiamata viene avviata da javascript che è il risultato, ad esempio, della modifica di stato di un XMLHTTPRequest, la voce per la pagina corrente nella cronologia viene sovrascritta. L'ho caratterizzato correttamente? C'è un modo per far sì che la modifica della pagina si rifletta nella cronologia in quest'ultimo caso?

+0

Non sono abbastanza sicuro di cosa vuoi fare. Vuoi rimuovere gli elementi dei clic dalla cronologia o vuoi spostare le modifiche dell'indirizzo non cliccabile alla cronologia? –

+0

Secondo: voglio che il mio server sia in grado di dire al client di navigare in una nuova pagina - preservando la cronologia - come risultato di una risposta XMLHttpRequest – wolffiex

risposta

11

stavo affrontando lo stesso problema e ho trovato questa soluzione che ha funzionato per me

invece di

function onAjaxCallback(evt){ 
    location.href=newLocation; 
} 

ho avvolto la chiamata location.href intorno ad un setTimeout. Sembra fare il trucco. La mia storia si sta comportando bene ora. Spero che questo aiuti

function onAjaxCallback(evt){ 
    setTimeout(function(){ 
     location.href=newLocation; 
    },0) 
} 
+3

btw su chrome, ff3.5 e ie8 – royston

+0

+1 questo ha risolto il mio problema all'indirizzo http://stackoverflow.com/questions/1629285/how-to-use-jquery-click-event-to-change-href-value-asyncronously-based-on-a-json – pavsaund

-1

Ahimè, la tua domanda non si può rispondere, richieste AJAX non hanno nulla a che fare con la cronologia del browser, e se è stato caricato un po 'di contenuti dinamici con loro, quindi l'utente cliccato il pulsante del browser di nuovo, la precedente pagina viene caricata (tale che è stato caricato con un GET ordinaria o richiesta POST), che corrompe la sequenza di visualizzare i contenuti in.

risposte di Dmitri significa che si manterrà la propria storia per il contenuto dinamico usando il frammento parte dell'URL (questo dopo il simbolo #), forse fornirai la tua schiena e la tua fo pulsanti Rward, ma ancora non sei protetto dall'effetto dei pulsanti Indietro e Avanti del browser.

Se solo avessero fornito qualche tipo di eventi per gestire i clic degli utenti su questi pulsanti con la possibilità di annullare.

1

Leggi la domanda originale con più attenzione. La domanda non riguarda il contenuto caricato da un XHR, ma il contenuto dello caricato da uno script caricato da un XHR. Ho avuto lo stesso problema e il metodo setTimeout sembra funzionare bene.

2

studio: window.location.replace() e window.location.assign()

0

URL può essere aggiunto manualmente alla storia prima di reindirizzare l'utente.

if (window.history) { 
    history.pushState({}, window.location.href); 
} 
window.location.replace("/login/?next=" + window.location.pathname); 
Problemi correlati