Domanda

Gmail usa # quando fai clic su un messaggio per distinguere la pagina (+ azione Ajax). http://mail.google.com/mail/#inbox/1238e709e37a1394

Ho trovato: Google utilizza # anziché la ricerca? nell'URL. Perché?

In FF o Chrome puoi usare Avanti e Indietro senza aggiornare tra questi URL: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3

Ma su IE la pagina si aggiorna e non conta i parametri dopo # quando viene eseguita un'azione posteriore.

In che modo Gmail realizza la magia?

È stato utile?

Soluzione 2

Questo è quello che stavo cercando: http://nix.lv/history/demo.html#3

Trovato su: Salva l'ancora nella storia di ie6

Altri suggerimenti

Posso darti la risposta, perché ho affrontato e risolto questo problema.

Ci sono alcuni concetti da capire prima qui:

  1. javascript non può modificare direttamente la cronologia del browser.
  2. ogni volta che cambia l'URL di base di un iframe nella pagina, la cronologia viene aggiornata. (ma questo ha alcune stranezze con browser diversi).
  3. l'URL ha un "hash" " parte: ad esempio, nell'URL http://mail.google.com/mail#inbox , #inbox è la parte con hash. Chiamiamolo "hash". pertanto http://mail.google.com/mail sarà il nostro "quot URL di base".

Il monitoraggio della cronologia da parte di GMail viene effettuato principalmente utilizzando trucchi basati su questo "quot" hash ".

Quindi, alcuni altri concetti:

  1. quando l'URL nella barra degli indirizzi cambia, la cronologia viene aggiornata (l'URL precedente passa alla cronologia)
  2. quando l'URL di base viene modificato, la pagina viene ricaricata.
  3. quando la parte hash dell'URL cambia senza cambiare l'URL di base, la pagina non viene ricaricata.

Quindi, quando passi da http://mail.google.com/mail#inbox a http://mail.google.com/mail#sent , la pagina non viene aggiornata .

Ora, se GMail dovesse ricevere una notifica di evento quando l'hash è cambiato, allora Gmail potrebbe intraprendere azioni basate su quello. Sfortunatamente, non ci sono eventi DOM che possono aiutarci a catturare le azioni della cronologia. Quindi invece (questa è la parte che mostra come ho superato il problema), eseguiamo un ciclo infinito che controlla le modifiche all'hash. Se osserva una modifica, viene rilevato un clic su " back " o "avanti" pulsante del browser.

Nel risolvere questo, ho creato uno strumento utile: il URL parser . Può analizzare i parametri GET nell'URL e i parametri codificati nell'Hash. Prova la demo!

Cheers!


A proposito di questo problema in IE: non mi rendevo conto che questa soluzione basata su 'hash' non funziona su IE (povero vecchio sviluppatore di Linux).

Ma per IE, puoi utilizzare un iframe nascosto e utilizzare il suo "quot url influisce sulla cronologia" proprietà per implementare la cronologia. So che questa affermazione manca di dettagli, ma deriva dalla mia mancanza di esperienza con IE.

Proverò questa soluzione e seguirò :)

Ho trovato una serie di collegamenti su Internet che eseguono correttamente la storia usando iframe / hash di posizione. Non ho avuto la pazienza di scavare le differenze tra l'interfaccia iframe su vari browser.

Suppongo che preferirei il plugin jquery . Anche YUI ha un gestore della cronologia.

Cheers!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top