2010-11-24 187 views
1

Hello Seniors(我是基於Web的應用程序的新手), 我很想實現或捕獲瀏覽器關閉事件。 是的!我做到了,併成功地通過使用javascript(見下面的代碼) 實現它,但我已經在沒有MasterPage的網頁中實現它。 現在,因爲我試圖在MASTERPAGE的網頁中實現它,但在每個帖子後面...事件window.onunload被捕獲,這是給我的問題... 是否有任何技術或邏輯來檢測是否我可以區分關閉瀏覽器按鈕和頁面的回發事件。捕捉瀏覽器關閉事件

請指導我......因爲我必須儘快在項目中實施...... 謝謝。

ANKIT塔瓦

<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 2010-11-24 16:13:56

+0

看看這個[答](http://stackoverflow.com/questions/1824421/detect-browser-close-on-asp-net/1824486#1824486)。 – 2011-12-08 11:46:22

回答

3

有其被關閉的瀏覽器和用戶導航到另一頁(區分沒有JavaScript事件要麼經由前進/後退按鈕,或點擊一個鏈接,或任何其他導航方法)。你只能告訴當前頁面何時被卸載。話雖如此,我不知道爲什麼你甚至需要知道它的區別?聽起來像是我的XY問題。

+0

......即使有,它也不會捕獲瀏覽器因爲崩潰而關閉,或者網絡連接丟失或電源關閉等情況。 – Quentin 2010-11-25 08:54:37

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

第一步:添加一個名爲 「_buttonClicked」 全局JavaScript變量,它最初是設置爲false。

第二步:讓每個按鈕單擊指定_buttonClicked值爲true ..使用jQuery它是一行,純JavaScript也只有幾行。

第三步:在你的功能檢查_buttonClicked,如果它是真的,不要做任何事情。

編輯:快速查看你的代碼後,我看到你已經有了步驟#1和#3,所以你需要的是第二步,當點擊任何提交按鈕時將g_isPostBack賦值爲true。讓我知道如果你需要幫助實現代碼,如果你可以有jQuery。

0

如果想關注瀏覽器關閉時的註銷(點擊十字),我們可以藉助窗口事件。 兩個事件將會有幫助:onunloadonbeforeunload。 但問題在於,如果您正在從一個頁面導航到另一個頁面,以及當一個頁面刷新頁面時,代碼也可以正常工作。我們不希望我們的會話清晰並在刷新時插入註銷記錄。 所以解決方案是,如果我們區分關閉和刷新或導航之間的區別。 我得到了解決:

  1. 寫 'onbeforeunload = 「裝車();」' body標籤內的母版頁上。

  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/' 

     }); 
    } 
})