JavaScriptは、戻るボタンとリンクのどちらを使用するかを区別できますか?

StackOverflow https://stackoverflow.com/questions/1208129

質問

私のアプリケーションには、表示されるコンテンツを単純に切り替える複数のタブを持つページがあります。ただし、ページには、ページにタブを追加するリンクもあります。また、アプリケーションは(Cookieを使用して)ページが更新された場合に最後に表示したタブを記憶します(キャッシュ設定を厳密に設定すると、戻るボタンや進むボタンを使用しても更新されます)。

私の問題は、このページセットに初めてアクセスすると、最初のタブ(タブA)が表示されることです。次に、リンクをクリックすると、タブが追加され、その新しいタブが記憶されます(タブB)。ただし、戻った場合、最後にクリックしたタブ(Tab B)を記憶して表示するため、何もしなかったように見えます。

タブBを記憶することは、新しいページに進むをクリックし、アプリケーション内の履歴を使用して前のページに戻る場合に望ましい動作です。ただし、[戻る]ボタンをクリックすると、最初に到着したときのようにタブAを再度表示するため、望ましくありません。

私の質問は、JavaScript onunload イベントが[戻る]ボタンを使用してページを離れる、またはその他の手段の違いを検出できるかどうかです。この時点で、そのページで記憶していたタブを忘れてほしい。

役に立ちましたか?

解決

検出しようとしている違いが、ユーザーがリンクをクリックしてから他の方法でページから移動することである場合、観察する各リンクにonclickイベントハンドラーを添付することにより、JavaScriptを使用してリンククリックを検出できますクリックします。

したがって、onunloadが最初に起動されずに<a>が起動された場合、ユーザーは追跡されたリンクの1つをクリックする以外の方法でページを離れます。

<script type="text/javascript">
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].onclick = setGlobal;
}
function setGlobal() {
    window.linkClicked = true;
}
window.onunload = function() {
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) {
        // they are leaving some other way than by clicking a link
    }
}
</script>

<=>タグに既に<=>イベントがある場合は少し複雑になりますが、その場合はその方法も提供できます。

もちろん、jQueryまたは別のJavaScriptライブラリを使用して、すべての<=>イベントに添付することもできます。

他のヒント

ブラウザは、そのページで作成されたタイマー(setTimeout呼び出し)の状態を記憶します。

ページが初めて読み込まれるとonLoadが呼び出され、履歴に基づいて次のページに転送するタイマーを設定します。すでに最後のページにいる場合は問題ありません:D、そうでない場合は転送されます。

IEの場合、戻るボタンがあるかどうかに関係なく、onLoadが常に呼び出されるため、同じ部分のコードをそこに配置できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top