2009-07-31 29 views
6

A questo punto abbiamo una photogallery che utilizza gli hashvalues ​​per determinare quale immagine è attualmente mostrata all'utente e per supportare l'invio della pagina ad un amico e così via. Qualcosa di simile:top.location.replace crea la cronologia in Safari/Chrome

http://url/photos/#photo-4

Quando abbiamo caricato l'immagine corrispondente dopo aver fatto clic sul pulsante successivo o precedente, cambiamo l'url in base alle specifiche JS 1.1 utilizzando:

top.location.replace(url.url + hash); 

nostra voleva comportamento è non è stato creato alcun elemento della cronologia, quindi gli utenti possono utilizzare il pulsante Indietro per uscire dalla galleria fotografica, invece di usare il pulsante Indietro per vedere le immagini precedenti.

In IE e Firefox il metodo funziona come un incantesimo, ma Safari e Chrome creano un elemento di cronologia per l'URL modificato. Ho trovato un sacco di esempi su come creare gli elementi della cronologia quando si usa l'hash per navigare in questo modo, ma voglio farlo in un altro modo. Qualche indizio?

risposta

3

Questo funziona come previsto ora:

Su Safari [5.1.7] location.replace() funziona come previsto - l'URL viene sostituito, nulla viene aggiunto alla coda del tasto back, e nulla viene aggiunto al menu della cronologia.

Su Chrome [21.0.1180.82] location.replace() è un po 'complicato - l'URL viene sostituito e nulla viene aggiunto alla coda del pulsante indietro, ma fa aggiungere una voce al menu di storia.


Ciò che rende questo difficile è che esistono due code di cronologia distinte: il menu cronologia e i pulsanti Indietro/Avanti. Fai clic e tieni premuti i pulsanti Indietro e Avanti per vedere la loro coda e confrontarli con il menu Cronologia.

E la coda di cronologia dei pulsanti Indietro/Avanti è collegata alla scheda attiva. Inoltre, la cronologia dei pulsanti rimane attiva anche quando si cancella il menu Cronologia, almeno finché non si chiude la scheda.

0

Hai visto assegnare il tuo hash utilizzando window.location.hash = newHash invece di sostituire l'intero URL?

https://developer.mozilla.org/en/DOM/window.location

+0

Sì "sostituire (url) \t sostituire il documento corrente con quella all'URL fornito. La differenza dal metodo di assegnazione() è che dopo aver usato replace() la pagina corrente non verranno salvate nella cronologia della sessione, significato l'utente non sarà in grado di utilizzare il pulsante Indietro per navigare ad esso. " E lì ho il mio bug, perché non funziona in Webkit. –

+0

Mi chiarirò la mia risposta – MyItchyChin

+1

location.hash crea gli elementi della cronologia in tutti i principali browser tranne IE, quindi non funzionerà :-) –

3

Non sembra esserci alcuna soluzione a questo punto.

+0

Solo per la cronaca, è ancora un problema fastidioso 2 anni dopo ... Webkit correzioni di bug sono un po 'lente. – DarthJDG