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:
Wenn ich eine Änderung feststelle, wird JavaScript darauf reagieren.
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 .
Ü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
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
}
SWFaddress ist eine hervorragende Bibliothek für diese Art von Dingen.