捕捉浏览器关闭事件

时间:2010-11-24 16:09:38

标签: javascript asp.net browser

Hello Seniors(因为我是基于Web的应用程序的新手), 我热衷于实现或捕捉浏览器关闭事件。 是!我做到了并使用javascript成功实现了它{请参阅下面的代码} 但我已经在没有MasterPage的网页中实现了它。 现在,因为我试图在MASTERPAGE的网页中实现它,但在每个帖子中...事件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>

5 个答案:

答案 0 :(得分:3)

没有javascript事件区分正在关闭的浏览器和导航到另一个页面的用户(通过后退/前进按钮,或单击链接或任何其他导航方法)。您只能告诉当前页面何时被卸载。话虽如此,我不确定为什么你甚至需要知道区别?对我来说听起来像XY问题。

答案 1 :(得分: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");
    ...
});

答案 2 :(得分:0)

第一步:添加名为“_buttonClicked”的全局JavaScript变量,该变量最初设置为false。

第二步:让每个按钮点击_buttonClicked值为true ..使用jQuery它是一行,纯JavaScript也只有几行。

第三步:在你的函数中检查_buttonClicked,如果是,则不要做任何事情。

编辑:快速查看代码后,我发现您已经有步骤#1和#3,所以您需要的只是第二步,在单击任何提交按钮时将g_isPostBack指定为true。如果您需要帮助实现代码,并且您可以使用jQuery,请告诉我。

答案 3 :(得分:0)

如果想要在浏览器关闭时捕获注销(通过单击十字架),我们可以获取窗口事件的帮助。 两项活动将有所帮助:onunloadonbeforeunload。 但问题出现的是,如果您从一个页面导航到另一个页面以及何时导航,代码也将起作用 刷新页面。我们不希望我们的会话清晰,并在刷新时插入注销记录。 因此,解决方案是我们区分关闭和刷新或导航之间的区别。 我得到了解决方案:

  1. 在主页上的body标签内写'onbeforeunload =“loadOut();”'。

  2. 在母版页的head部分的脚本中添加以下函数: -

    function loadOut(){   if((window.event.clientX&lt; 0)||(window.event.clientY&lt; 0))   {
           //调用后面的代码将log退出到数据库中   }      }

  3. 完成了。它适用于IE,请检查其他浏览器。同样,如果窗口关闭,您可以检测到该事件 按下组合键ALT + F4。

答案 4 :(得分: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/'

        });
    }
})