ロケーションハッシュの変更を検出するにはどうすればいいですか? 質問する

ロケーションハッシュの変更を検出するにはどうすればいいですか? 質問する

ナビゲーションには Ajax とハッシュを使用しています。

window.location.hashこのように変更されたかどうかを確認する方法はありますか?

http://example.com/blah#123からhttp://example.com/blah#456

ドキュメントが読み込まれるときにチェックすると機能します。

しかし、#hash ベースのナビゲーションを使用している場合、ブラウザの戻るボタンを押しても機能しません (そのため、blah#456 から blah#123 にジャンプします)。

アドレスボックス内に表示されますが、JavaScript ではキャッチできません。

ベストアンサー1

これを実際に行う唯一の方法 (そして 'reallysimplehistory' がこれを行う方法) は、現在のハッシュをチェックし、それを以前のものと比較し続ける間隔を設定することです。これを実行して、ハッシュが変更された場合に発生する変更イベントをサブスクライバーがサブスクライブできるようにします。完璧ではありませんが、ブラウザーは実際にはこのイベントをネイティブにサポートしていません。


この回答を最新の状態に保つために更新します:

jQuery を使用している場合 (今日ではほとんどの人にとってある程度基礎的なはずです)、jQuery のイベント システムを使用してウィンドウ オブジェクトの hashchange イベントをリッスンすることで、jQuery が提供する抽象化を使用するのが適切な解決策です。

$(window).on('hashchange', function() {
  //.. work ..
});

ここで良いのは、ハッシュ変更のサポートを気にする必要のないコードを書くことができることですが、あまり知られていないjQueryの機能の形で、いくつかの魔法を使う必要があります。jQuery 特別イベント

この機能を使用すると、基本的に、誰かが初めてイベントを何らかの方法で使用しようとしたときに (イベントへのバインドなど)、イベントのセットアップ コードを実行できるようになります。

このセットアップ コードでは、ネイティブ ブラウザーのサポートをチェックできます。ブラウザーがこれをネイティブに実装していない場合は、変更をポーリングして jQuery イベントをトリガーするための単一のタイマーを設定できます。

これにより、コードがこのサポート問題を理解する必要がなくなり、この種の特別なイベントの実装は簡単です(単純な98%の動作バージョンを取得するため)が、なぜそうするのでしょうか?すでに誰かが

おすすめ記事