Javascript 捕获浏览器关闭事件

Javascript 捕获浏览器关闭事件,javascript,asp.net,browser,Javascript,Asp.net,Browser,您好,长者们(因为我对基于Web的应用程序还不熟悉), 我热衷于实施或捕捉浏览器关闭事件。 对我做到了,并通过使用javascript{参见下面的代码}成功地实现了它 但是我在没有母版页的网页上实现了它。 现在,当我试图在一个带有MASTERPAGE的网页中实现它时,但在每一篇回帖中…捕获了event window.onunload,这给了我一些问题。。。 是否有任何技术或逻辑来检测我是否可以区分关闭浏览器按钮和页面的回发事件 请指导我…因为我必须尽快在项目中实施。。。。 多谢各位 安基特·斯利

您好,长者们(因为我对基于Web的应用程序还不熟悉), 我热衷于实施或捕捉浏览器关闭事件。 对我做到了,并通过使用javascript{参见下面的代码}成功地实现了它 但是我在没有母版页的网页上实现了它。 现在,当我试图在一个带有MASTERPAGE的网页中实现它时,但在每一篇回帖中…捕获了event window.onunload,这给了我一些问题。。。 是否有任何技术或逻辑来检测我是否可以区分关闭浏览器按钮和页面的回发事件

请指导我…因为我必须尽快在项目中实施。。。。 多谢各位

安基特·斯利瓦斯塔瓦

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

函数callAjax(webUrl、queryString)
{
var xmlHttpObject=null;
尝试
{
//Firefox、Opera 8.0+、Safari。。。
xmlHttpObject=新的XMLHttpRequest();
}
捕获(ex)
{
//Internet Explorer。。。
尝试
{
xmlHttpObject=newActiveXObject('Msxml2.XMLHTTP');
}
捕获(ex)
{
xmlHttpObject=newActiveXObject('Microsoft.XMLHTTP');
}
}
if(xmlHttpObject==null)
{
alert('AJAX在此浏览器中不可用');
返回;
}
open(“GET”,webUrl+queryString,false);
xmlHttpObject.send();
返回xmlText;
}
var g_isPostBack=false;
window.onbeforeunload=检查()
函数检查()
{
if(g_isPostBack==true)
返回;
var关闭消息=
'您正在退出此页。\n'+
'如果您在未保存的情况下进行了更改,您的更改将丢失。\n'+
'您确定要退出吗?';
if(window.event)
{
//我只是。。。
window.event.returnValue=closeMessage;
}
其他的
{
//其他浏览器。。。
返回关闭消息;
}
g_isPostBack=false;
}
window.onunload=函数()
{
if(g_isPostBack==true)
返回;
var webUrl='LogOff.aspx';
var queryString='?LogoffDatabase=Y&UserID='+'';
var returnCode=callAjax(webUrl,queryString);
}

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

答案可以在下面的网站上找到:

并防止对提交的文件进行确认:

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

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

第二步:让每个按钮都单击,将_buttonclickedvalue赋值为true。。对于jQuery,它只有一行,纯JavaScript也只有几行

第三步:在你的函数检查中,点击按钮,如果是真的,不要做任何事情


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

如果您想在浏览器关闭时(通过单击十字)捕获注销,我们可以借助窗口事件的帮助。 两个事件将非常有用:
onunload
onbeforeuload
。 但问题是,如果您从一个页面导航到另一个页面,以及当一个页面 刷新页面。我们不希望会话变得清晰,在刷新时插入注销记录。 因此,解决方案是区分关闭和刷新或导航之间的区别。 我得到了解决方案:

  • 在母版页的body标记中写入“onbeforeunload=”loadOut();“”

  • 在母版页头部的脚本中添加以下函数:-

    函数加载(){ if((window.event.clientX<0)| |(window.event.clientY<0)) {
    //调用代码隐藏方法将注销插入数据库 } }

  • 一切都结束了。它适用于IE,请检查其他浏览器。同样,如果窗口关闭,您也可以检测事件
    按下ALT+F4组合键。

    窗口。当我们从一个页面导航到另一个页面以及单击浏览器的关闭按钮时,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/'
    
            });
        }
    })
    

    查看jquery。你正在做大量不必要的工作。看看这个。请注意,Opera不支持非标准的
    onbeforeunload
    onunload
    …即使有,它也不会捕获浏览器关闭,因为它崩溃了,或者网络连接丢失了,或者断电关闭了计算机等等。
    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/'
    
            });
        }
    })