ブラウザの履歴の変更 (つまり、[戻る] または [進む] ボタン) でのみハッシュ変更を検出することは可能ですか?
onBeforeUnload イベントを見たことがありますが、ウィンドウがアンロードされていないため、このイベントはハッシュの変更時に発生しません。
hashchange イベントは、ハッシュが変更されるたびに発生します。修正はありますか?できればプラグインなしで。jQuery 履歴プラグインを見たことがありますが、最も簡単な解決策を探しています。
助けてくれてありがとう。
ブラウザの履歴の変更 (つまり、[戻る] または [進む] ボタン) でのみハッシュ変更を検出することは可能ですか?
onBeforeUnload イベントを見たことがありますが、ウィンドウがアンロードされていないため、このイベントはハッシュの変更時に発生しません。
hashchange イベントは、ハッシュが変更されるたびに発生します。修正はありますか?できればプラグインなしで。jQuery 履歴プラグインを見たことがありますが、最も簡単な解決策を探しています。
助けてくれてありがとう。
window.onhashchangeイベントを見てください。
ただし、現在、すべてのブラウザーでサポートされているわけではありません。ここで BA jQuery Hash Change Pluginをご覧ください。最終的にプラグインを使用することを選択した場合は、機能する可能性があります。
これが役立つことを願っています!
Chris が求めていたのは、window.onhashchange イベントがブラウザーの履歴 (戻る/進む) ボタンをナビゲートしているときにのみ機能する方法を求めていたと思います。
答え = いいえ...ただし、if ステートメントを関数に入れることはできます。
私はこれを行います:
$('.nav').click(function() { //on the onclick event for your nav add a class
$(this).addClass('navClick'); // before you change the hash.
window.location.hash = 'state' + $(this).html();
});
function getLocationHash() {
return window.location.hash.substring(1);
}
window.onhashchange = function(e) { // if element does not exist with your
if ($('.navClick').length == 0) { // 'navClick' class then check hash
switch(getLocationHash()) {
case 'state1':
execute code block 1;
break;
case 'state2':
execute code block 2;
break;
default:
code to be executed if different from case 1 and 2;
}
} else { // removes the class if it does
$('.navClick').removeClass('navClick');
}
};
私は自分のサイトで似たようなことをしました
すべて動的に変化するコンテンツです。私は今でも を使用しwindow.location.hashて、サイトの状態を追跡しています。サイトをナビゲートしてから、サイトが履歴に入ったら戻るボタンを使用してナビゲートし始めると、後でページをリロードする必要がなく、ユーザーが実際にナビをクリックしたかのように、状態が動的に変化します。履歴を使用してナビゲートしている場合にのみ、ハッシュをチェックします。
別のアプローチをお勧めします。あるページに移動するリンクがあるとします(ただし、更新せずにAJAXを使用します)。そのリンクをクリックすると、ハッシュを好きなように変更します。これで、ユーザーが[戻る]ボタンをクリックすると、ハッシュはユーザーがリンクをクリックする前の元の状態に戻ります...しかし、リンクやボタン(またはその他)でクリックイベントが発生したかどうかを確認することができます。チェックしたいセレクター/イベント)。解雇された場合は、ページ自体のクリックからリクエストが送信されたことをご存知でしょう。チェックしているイベントが発生していなかった場合は、クリックが[戻る]または[進む]ボタンから発生したことがわかります。
もう1つの方法は、ハッシュが変更されたときにハッシュにサフィックスを追加することです(発生したイベントのチェックに基づいて[戻る]または[進む]ボタンから)。したがって、ハッシュがある場合は、ハッシュが[戻る]ボタンまたは[進む]ボタンから変更されたことを示す#pageTitleために変換されます。#pageTitle_chrome
次に、ハッシュをチェックするときに、ハッシュが_chromeどのような変更であったかを検出するために含まれているかどうかを確認できます。
これをハッシュや HTML5 History API で行うことはできません。ユーザーが戻るボタンまたは進むボタンをクリックすることにのみ関連するイベントはありません。クライアント マシンに何らかの拡張機能などをインストールできない限り、おそらく元の問題に対して別のアプローチが必要になるでしょう。