2010-11-24 186 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/' 

     }); 
    } 
})