wake-up-neo.com

Wie kann ich eine Adressleistenänderung mit JavaScript erkennen?

Ich habe eine schwere Ajax-Anwendung, die möglicherweise eine URL wie

http://example.com/myApp/#page=1

Wenn ein Benutzer die Site manipuliert, ändert sich die Adressleiste in etwa

http://example.com/myApp/#page=5

ohne die Seite neu zu laden.

Mein Problem ist die folgende Reihenfolge:

  1. Ein Benutzer markiert die erste URL mit einem Lesezeichen.
  2. Der Benutzer manipuliert die Anwendung so, dass die zweite URL den aktuellen Status aufweist.
  3. Der Benutzer klickt auf das in Schritt 1 erstellte Lesezeichen.
  4. Die URL in der Adressleiste ändert sich von http://example.com/myApp/#page=5 zu http://example.com/myApp/#page=1 , aber ich weiß nicht ' Ich weiß nicht, wie ich die Änderung erkennen kann.

Wenn ich eine Änderung feststelle, wird JavaScript darauf reagieren.

27
JoshNaro

HTML5 führt ein hashchange -Ereignis ein, mit dem Sie sich für Benachrichtigungen über URL-Hashänderungen registrieren können, ohne sie mit einem Timer abzufragen.

Es wurde von allen gängigen Browsern (Firefox 3.6, IE8, Chrome und anderen Webkit-basierten Browsern) unterstützt, aber ich würde trotzdem empfehlen, eine Bibliothek zu verwenden, die das Ereignis für Sie erledigt - dh indem Sie einen Timer in Browsern verwenden, die den Browser nicht unterstützen HTML5-Ereignis und anderweitiges Verwenden des Ereignisses.

Weitere Informationen zu der Veranstaltung finden Sie unter https://developer.mozilla.org/en/dom/window.onhashchange und http://msdn.Microsoft.com/de-de/library/cc288209% 28VS.85% 29.aspx .

35
ThiefMaster

Überprüfen Sie die aktuelle Adresse regelmäßig mit setTimeout/Intervall:

 var oldLocation = location.href;
 setInterval(function() {
      if(location.href != oldLocation) {
           // do your action
           oldLocation = location.href
      }
  }, 1000); // check every second
19
user187291

Sie sollten das Standortobjekt erweitern, um ein Ereignis bereitzustellen, zu dem Sie eine Verbindung herstellen können.

dh:

window.location.prototype.changed = function(e){};

(function() //create a scope so 'location' is not global
{
    var location = window.location.href;
    setInterval(function()
    {
        if(location != window.location.href)
        {
            location = window.location.href;
            window.location.changed(location);
        }
    }, 1000);
})();

window.location.changed = function(e)
{
    console.log(e);//outputs http://newhref.com
    //this is fired when the window changes location
}
5
Skawful

SWFaddress ist eine hervorragende Bibliothek für diese Art von Dingen.

0
moritzstefaner