1

ページが読み込まれたときにいくつかの 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 ハッシュを使用できません。

4

0 に答える 0