2010-11-24 12 views
1

こんにちはシニア(Iは、Webベースのアプリケーションに新しいですとおり)ブラウザを閉じるイベントを キャッチ。 はい!私はそれを行い、正常にjavacript {下のコードを参照してください} を使用して実装しましたが、私はMasterPageのないWebページで実装しました。私に問題を与えている私は、マスターページとWebページではなく、バック各ポストにそれを実装しようとしているとして今、...イベントwindow.onunloadがキャッチされ 、... は私かどうかを検出するための任意の技術や論理がありますブラウザの閉じるボタンとページのポストバックイベントを区別することができます。私はできるだけ早くプロジェクトで実装する必要がありますようは、私が実装することに熱心だったか、ブラウザを閉じるイベントをキャッチし、

...私を導いてください.... はあなたに感謝。

Ankit Srivastavaさん

<script type="text/javascript"> 

     function callAjax(webUrl, queryString) 
     { 
      var xmlHttpObject = null; 

       try 
       { 
         // Firefox, Opera 8.0+, Safari... 

         xmlHttpObject = new XMLHttpRequest(); 
        } 
       catch(ex) 
       { 
         // Internet Explorer... 

       try 
        { 
         xmlHttpObject = new ActiveXObject('Msxml2.XMLHTTP'); 
        } 
       catch(ex) 
       { 
        xmlHttpObject = new ActiveXObject('Microsoft.XMLHTTP'); 
       } 
      } 

      if (xmlHttpObject == null) 
       { 
       window.alert('AJAX is not available in this browser'); 
       return; 
       } 

     xmlHttpObject.open("GET", webUrl + queryString, false); 
     xmlHttpObject.send(); 

     return xmlText; 
} 

</script> 

<script type="text/javascript"> 

var g_isPostBack = false; 

window.onbeforeunload = check() 
function check() 
{ 
if (g_isPostBack == true) 
    return; 

var closeMessage = 
    'You are exiting this page.\n' + 
    'If you have made changes without saving, your changes will be lost.\n' + 
    'Are you sure that you want to exit?'; 

if (window.event) 
{ 
    // IE only... 

    window.event.returnValue = closeMessage; 
} 
else 
{ 
    // Other browsers... 

    return closeMessage; 
} 

g_isPostBack = false; 
} 
window.onunload = function() 
{ 
if (g_isPostBack == true) 
    return; 

var webUrl = 'LogOff.aspx'; 
var queryString = '?LogoffDatabase=Y&UserID=' + '<%# Session["loginId"] %>'; 
var returnCode = callAjax(webUrl, queryString); 

} 

</script> 
+0

jqueryを参照してください。たくさんの不必要な作業をしています。 – Chris

+0

これを見て[回答](http://stackoverflow.com/questions/1824421/detect-browser-close-on-asp-net/1824486#1824486)。 –

答えて

3

閉鎖されているブラウザと(別のページに移動するユーザーを区別なしJavaScriptのイベントはありませんどちらかの戻る/進むボタン、またはリンクをクリックする、または任意の他のナビゲーションを経由して方法)。現在のページがアンロードされている場合にのみ通知することができます。それを言いましたが、違いを知る必要があるのはなぜなのでしょうか?私にXYの問題のように聞こえる。

+0

...たとえあったとしても、ブラウザがクラッシュしたり、ネットワーク接続が失われたり、電源が切れてコンピュータがシャットダウンしたりするなどの理由で、ブラウザを終了することはありません。 – Quentin

0

答えはSO上で見つけることができます: How to capture the browser window close event?

jQuery(window).bind("beforeunload", function(){return confirm("Do you really want to close?") }) 

との確認から防ぐためには、提出:

jQuery('form').submit(function() { 
    jQuery(window).unbind("beforeunload"); 
    ... 
}); 
+0

Operaは、標準の 'onbeforeunload'と' onunload'です。 –

0

第1工程:最初は "_buttonClicked" と呼ばれるグローバルJavaScript変数を追加falseに設定します。

第2のステップは:trueに_buttonClicked値を割り当てるすべてのボタンをクリックして持っている.. jQueryを使って、それは1行ですが、純粋なJavaScriptはまた、唯一の数行です。

第三ステップ:あなたの関数で_buttonClickedをチェックし、それが本当ならば、何もしません。

EDIT:あなたのコードでクイックルックをしたら、すでに#1と#3のステップがあるので、2番目のステップは、送信ボタンがクリックされたときにg_isPostBackをtrueに割り当てることです。コードの実装の助けが必要な場合、またjQueryを使用できるかどうかをお知らせください。

0

1は、ブラウザを閉じたときに(十字架の上でクリックすることによって)ログアウトキャッチしたい場合、我々は、ウィンドウイベントの助けを借りることができます。 2つのイベントが役に立ちます:onunloadonbeforeunload しかし、1つのページから別のページへナビゲートしているときだけでなく、 がページを更新するときにもコードが機能するという問題が発生します。私たちはセッションをクリアし、ログアウトの記録を挿入してリフレッシュすることは望ましくありません。 解決策は、クローズとリフレッシュまたはナビゲートの違いを区別する場合です。 ' "バックパック内();" onbeforeunload =' bodyタグ内のマスターページ上の

  1. 書き込み: は、私は解決策を得ました。

  2. は、マスターページのヘッドセクションにスクリプトの内部に次の関数を追加: -

    機能バックパック内(){ IF((window.eventします。clientX < 0)|| (window.event.clientY < 0)){データベース にログを挿入する方法の背後にあるコードを呼び出す
    //}}

その行います。それはIEのために働いています、他のブラウザを確認してください。同様に、ウィンドウが閉じられている場合は、 キーがALT + F4キーの組み合わせを押すことで、イベントを検出することができます。

0

window.unloadブラウザのクローズボタンをクリックするだけでなく、あるページから別のページに移動すると起動するので、ブラウザのクローズボタンを検出するにはフラグを使用する必要があります。

var inFormOrLink; 

$("a,:button,:submit").click(function() { inFormOrLink = true; }); 

$(":text").keydown(function (e) {  

    if (e.keyCode == 13) { 
     inFormOrLink = true; 
    } 
})/// Sometime we submit form on pressing enter 
$(window).bind("unload", function() { 
    if (!inFormOrLink) { 

     $.ajax({ 
      type: 'POST', 
      async: false, 
      url: '/Account/Update/' 

     }); 
    } 
}) 
関連する問題