次のようなURLを持つAjaxの重いアプリケーションがあります。
http://example.com/myApp/#page=1
ユーザーがサイトを操作すると、アドレスバーは次のように変化します
http://example.com/myApp/#page=5
ページをリロードすることなく。
私の問題は次のシーケンスです:
変更を検出した場合、JavaScriptがそれに影響を及ぼします。
HTML5にはhashchangeイベントが導入されており、タイマーでポーリングすることなく、URLハッシュの変更の通知を登録できます。
それはすべての主要なブラウザー(Firefox 3.6、IE8、Chrome、その他のWebkitベースのブラウザー)でサポートされていますが、イベントを処理するライブラリーを使用することを強くお勧めします。 HTML5イベントとそれ以外の場合のイベントの使用。
イベントの詳細については、 https://developer.mozilla.org/en/dom/window.onhashchange および http://msdn.Microsoft.com/en-usを参照してください。 /library/cc288209%28VS.85%29.aspx 。
setTimeout/intervalを使用して現在のアドレスを定期的に確認します。
var oldLocation = location.href;
setInterval(function() {
if(location.href != oldLocation) {
// do your action
oldLocation = location.href
}
}, 1000); // check every second
バインドできるイベントを公開するには、ロケーションオブジェクトを拡張する必要があります。
つまり:
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 は、このような種類の優れたライブラリです。