2013-05-14 21 views
11

私のサイトのユーザーがウィンドウ/タブを閉じるか、URLを変更したかどうかは現在検出しています。javascript on window closeイベント

私は完璧に動作follwoingコードを、使用しています:

var validNavigation = false; 

function endSession() { 
    // Browser or broswer tab is closed 
    // Do sth here ... 
    alert("bye"); 

} 

function wireUpEvents() { 

    window.onbeforeunload = function() { 
     if (!validNavigation) { 
     endSession(); 
     } 
    } 

    // Attach the event keypress to exclude the F5 refresh 
    $(document).bind('keypress', function(e) { 
    if (e.keyCode == 116){ 
     validNavigation = true; 
    } 
    }); 

    // Attach the event click for all links in the page 
    $("a").bind("click", function() { 
    validNavigation = true; 
    }); 

    // Attach the event submit for all forms in the page 
    $("form").bind("submit", function() { 
    validNavigation = true; 
    }); 

    // Attach the event click for all inputs in the page 
    $("input[type=submit]").bind("click", function() { 
    validNavigation = true; 
    }); 

} 


$(document).ready(function() { 
    wireUpEvents(); 
}); 

私の問題は、私は、オーバーレイにアラートからのイベントを変更したいです。私は隠されたdivのオーバーレイをセットアップを持っているとして上記のコードで警告を置き換える:

$('.overlay').css('display','block'); 

ページに滞在するユーザーを取得するためのdiv内には何もないとこれはもはや、動作します。 (ユーザーはアラート内のボタンをクリックする必要はありません)

この問題を回避する方法の提案はありますか?

いいえ、

+0

は、なぜあなたは、単に 'window.onbeforeunload'を使用していませんか?私はそれが素晴らしいdiv 'ではないことを知っているが、それは間違いなくこれらの種類のものを意図している。 – Powerslave

+0

window.onbeforeunloadはオプションでしたが、今はスタイリングが必要な素晴らしいdivが必要です。 – danyo

+0

重複してhttp://stackoverflow.com/questions/276660/how-can-i-override-the-onbeforeunload-dialog-and-replace-it-with-my-own/276739 –

答えて

8

最後のイベントとして、ウィンドウクローズイベントが発生します。したがって、後に他のイベントは発生しません。

beforeunloadイベントをJqueryで使用すると、画面にオーバーレイを表示できます。

次のリンクを助けることができる:link

+0

あなたが投稿したリンクは*極端です*役に立つ。ありがとうございました! – Ethereal