J'ai une application lourde Ajax qui peut avoir une URL telle que
http://example.com/myApp/#page=1
Lorsqu'un utilisateur manipule le site, la barre d'adresse peut changer pour quelque chose comme
http://example.com/myApp/#page=5
sans recharger la page.
Mon problème est la séquence suivante:
Si je détecte un changement, un JavaScript agira en conséquence.
HTML5 introduit un événement hashchange qui vous permet de vous inscrire aux notifications de changements de hachage de l’URL sans les interroger à l’aide d’une minuterie.
Il est supporté par tous les principaux navigateurs (Firefox 3.6, IE8, Chrome, autres navigateurs Webkit), mais je suggérerais néanmoins fortement d’utiliser une bibliothèque qui gère l’événement pour vous - c’est-à-dire en utilisant une minuterie dans les navigateurs ne prenant pas en charge la Événement HTML5 et utiliser l'événement autrement.
Pour plus d'informations sur l'événement, voir https://developer.mozilla.org/en/dom/window.onhashchange et http://msdn.Microsoft.com/en-us/library/cc288209% 28VS.85% 29.aspx .
vérifiez régulièrement l'adresse actuelle à l'aide de setTimeout/interval:
var oldLocation = location.href;
setInterval(function() {
if(location.href != oldLocation) {
// do your action
oldLocation = location.href
}
}, 1000); // check every second
Vous devez étendre l'objet location pour exposer un événement auquel vous pouvez vous lier.
c'est à dire:
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 est une excellente bibliothèque pour ce genre de choses.