2009-11-01 4 views
7

Ich mache eine Website, die dazu neigen, alle Anfragen auf einer Seite (Ajax) zu behandeln. so dachte ich, dass ich konnte jeden Benutzer Klick auf einem Link Fall und überprüfe IF es auf meiner Website, was ich tue etwas auf JavaScript wie ein Ajax-Request zum Beispiel ELSE es den Link wie gewohnt öffnen würde!Wie überwacht man die Änderungen in der URL (Fragment Identifier - der Anker Teil einer URL)

eine Uhr auf window.location zu tun hat nicht funktioniert! und außerdem weiß ich nicht, ob es trotzdem den url-teil nach dem # zeichen gibt. Hinweis: beide GMail und Facebook tut, dass ich denke, !, sie so etwas wie folgt verwenden:?
http://mail.google.com/mail/#inbox
http://www.facebook.com/home.php#/Posteingang/ref = mb

Bitte Bedenken Sie: dass Ich liebe es, jQuery in meinen Projekten zu verwenden, daher wird jede Lösung bevorzugt.

Irgendwelche Ideen?

+1

@Omar: Der Teil der URL nach # ist der 'Hash '. Bearbeitet den Titel und das Tag Ihrer Frage. :) –

+4

@ o.k.w: Der Teil der URL nach # heißt "Fragment", nicht Hash. –

+0

@ o.k.w Vielen Dank, ich bin kein 'Native' Englisch, also fühlen Sie sich frei, es zu korrigieren. –

Antwort

4

Hier ist ein weiteres gutes Buch: Restoring Conventional Browser Navigation to AJAX Applications

Auszug aus dem Artikel:

Viele Entwickler haben AJAX als Weise angenommen Rich-Web-Anwendungen zu entwickeln , die fast so interaktiv sind und reagieren, wie Desktop-Anwendungen. AJAX funktioniert durch Teilen der Web-UI in verschiedene Segmente. Ein Benutzer kann eine Operation für ein Segment ausführen und dann beginnen, an anderen Segmenten zu arbeiten, ohne auf die Beendigung der ersten Operation zu warten.

Aber AJAX hat einen großen Nachteil; es bricht Standard-Browser-Verhalten, wie als Back, Forward und Lesezeichen Unterstützung. Anstatt die Benutzer dazu zu zwingen an die AJAX-Unzulänglichkeiten anzupassen, sollten Entwickler ihre AJAX Anwendungen mit der traditionellen Web-Interaktion style, ...

+0

Gute Informationen, ich interessiere mich immer ernsthaft für die Usability in meinen Webseiten. –

4

Die Fragment Teil der URL verwendet wird Navigation Geschichte zu ermöglichen (Zurück- und Vorwärts-Tasten) auf AJAX-fähige Websites. Wenn Sie wollen „Falle“ auf die Links klickt, da Sie jQuery verwenden sowieso, können Sie genau das tun:

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

Wenn Sie Fragmente (window.location.hash) in Konstellation mit AJAX verwenden, beachten Sie, dass IE6 übergibt den Fragment-Teil der URL in AJAX-Anfragen, was zu sehr schwer zu debuggenden Bugs führen kann, also sei dir dessen bewusst.

+0

Ta, genau das, was ich brauchte. – Pool

3

Siehe @Pekka's Link zu How can you check for a #hash in a URL using JavaScript?, um den Hash zu betrachten. Setzen Sie diese Funktion in den Callback zu window.setInterval()

+0

Hinweis: window.setInterval() kann die Leistung beeinträchtigen! Ich bevorzuge den Event-Handler (speziell jQuery) –

+0

Wenn Sie sich die jquery-Hash-Änderung anschauen - es ist nur ein setinterval-Skript für alles außer IE8. Obwohl es ein nettes Skript ist. – Justin

+0

Oh !, Ich denke, ich könnte es dafür dump machen. –

4

Es gibt ein hashchange Ereignis im Fenster für die neuesten Browser ausgelöst.

+1

Ich bin für eine rückwärtskompatibel (wie IE6 :() Lösung. Also würde ich die Anker Klicks zu überwachen bevorzugen. –

+4

Hmmm, http://plugins.jquery.com/project/hashchange funktioniert der Trick :) . Danke für das Keyword 'hashchange' –