0

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

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

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

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

4

2 に答える 2

4

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

したがってonunload、最初に起動せずにonclick起動した場合、ユーザーは追跡されたリンクの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>

onclickタグにすでにイベントがある場合は少し注意が必要です<a>。その場合は、それを行う方法も提供できます。

もちろん、onclickjQueryまたは別のJavaScriptライブラリを使用してすべてのイベントにアタッチすることもできます。

于 2009-07-30T17:37:58.220 に答える
0

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

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

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

于 2009-07-30T18:37:06.417 に答える