ページが読み込まれたときにいくつかの JavaScript コードを実行したいが、ユーザーがページに戻るボタンを押したときは実行したくない。JavaScript コードはページにメッセージを表示するだけですが、ブラウザの履歴リストからページをリロードしたときにメッセージを表示したくありません。
私はjQueryを使用しているため、コードは現在次のようになっています。
$(function() {
// Code to display the message goes here.
});
以下は、これまでのところうまくいくと思われる解決策ですが、これを行うためのより良い方法はありますか?
これまでの解決策:
$(function() {
function isPageFromHistory() {
if (history.replaceState) {
return history.state && history.state.loaded;
} else {
return location.hash == '#loaded';
}
}
if (!isPageFromHistory()) {
// Code to display the message goes here.
}
});
$(window).on('load', function() {
if (history.replaceState) {
history.replaceState({ loaded: true }, '');
} else {
location.replace('#loaded');
}
});
このソリューションは、ウィンドウの onload イベント ハンドラーで、ページが読み込まれたものとしてマークします。新しいブラウザの場合、history.replace()
関数を使用して履歴状態を設定することでこれを行います。古いブラウザの場合、履歴リストの URL にハッシュを追加する手段に頼っています。
もちろん、このソリューションには制限があります。新しいブラウザでは、他の目的で履歴状態を使用している場合、履歴状態の「ロード済み」値を消去しないように注意する必要があります。古いブラウザでは、他の理由で URL ハッシュを使用できません。