2009-11-01 13 views
7

Realizzo un sito Web che tende a gestire tutte le richieste in una pagina (Ajax). così ho pensato che avrei potuto intrappolare click di ogni utente su un link e verificare IF è sul mio sito faccio qualcosa su JavaScript come una richiesta AJAX per esempio, ELSE sarebbe aprire il link, come al solito!Come monitorare le modifiche nell'URL (Identificatore frammento - la parte di ancoraggio di un URL)

facendo un orologio sul window.location non ha funzionato! e inoltre non so se c'è comunque la parte dell'URL che è dopo il segno #. Nota: sia GMail, e Facebook fa che immagino !, che usano qualcosa di simile:?
http://mail.google.com/mail/#inbox
http://www.facebook.com/home.php#/casella di posta/ref = mb

Gentilmente Considerate: che Mi piace usare jQuery nei miei progetti, quindi è preferibile qualsiasi soluzione utilizzandola.

Qualche idea?

+1

@ Omar: la parte dell'URL dopo # è l'hash. Modificato il titolo della domanda e tag. :) –

+4

@ o.k.w: la parte dell'URL dopo # è chiamata 'frammento', non hash. –

+0

@ o.k.w Grazie, non sono un inglese "nativo", quindi sentitevi liberi di correggerlo per essere più ovvi. –

risposta

4

Ecco un altro buona lettura: Restoring Conventional Browser Navigation to AJAX Applications

Estratto dall'articolo:

Molti sviluppatori hanno adottato AJAX come un modo per sviluppare ricche applicazioni web che sono quasi come interattivo e reattivo come applicazioni desktop. AJAX funziona dividendo l'interfaccia utente Web in segmenti diversi. Un utente può eseguire un'operazione su un segmento e quindi iniziare a lavorare su altri segmenti senza attendere la fine della prima operazione .

Ma AJAX ha un grande svantaggio; è il comportamento del browser pause standard, come come Indietro, Avanti, e bookmarking supporto. Piuttosto che forzare gli utenti a adattarsi alle carenze di AJAX, gli sviluppatori devono rendere le proprie applicazioni AJAX conformi allo stile di interazione web tradizionale , .......

+0

Buone informazioni, mi piace sempre considerare seriamente l'usabilità nei miei siti web. –

4

Il frammento parte dell'URL viene utilizzato per attivare la cronologia di navigazione (pulsanti avanti e indietro) su siti web AJAX-enabled. Se si vuole "trappola" fa clic sul link, dal momento che si sta utilizzando jQuery in ogni caso, si può solo fare questo:

$('a').click(function() 
{ 
    var item = $(this); 
    var url = item.attr('href'); 
    // your logic here 
}); 

Se si utilizza frammenti (window.location.hash) in costellazione con AJAX, nota che IE6 invia la parte frammento dell'URL nelle richieste AJAX che può portare a bachi molto difficili da debugare, quindi tenetene conto.

+0

Ta, proprio quello di cui avevo bisogno. – Pool

3

Vedere il collegamento di @Pekka a How can you check for a #hash in a URL using JavaScript? per esaminare l'hash. Basta mettere quella funzione nel callback a window.setInterval()

+0

Nota: window.setInterval() potrebbe uccidere le prestazioni! Preferisco usare il gestore di eventi (in particolare il modo di jQuery) –

+0

Se si guarda all'hashchange di jQuery - è solo uno script di setinterval su tutto tranne IE8. Comunque, è una bella sceneggiatura. – Justin

+0

Oh !, penso che potrei scaricarlo per quello. –

4

C'è un evento hashchange inviato nella finestra per i browser più recenti.

+1

Sto cercando una soluzione compatibile con le versioni precedenti (come IE6 :() Quindi preferirei monitorare i clic di ancoraggio: –

+4

Hmmm, http://plugins.jquery.com/project/hashchange fa il trucco :) . grazie per la parola chiave 'hashchange' –

Problemi correlati