日期:2014-05-17  浏览次数:20392 次

页面关闭问题
当点击右上角关闭页面:执行 window.onbeforeunload{后台页面方法aa()} ,此时aa()方法执行
  
当右键点击标题栏选择关闭此页面时:执行 window.onbeforeunload{后台页面方法aa()} ,此时aa()方法却不执行

麻烦大家给看看。。。。。。。。


------解决方案--------------------
不清楚你说的什么问题?
------解决方案--------------------
看看这两种关闭方法有木有区别,如果木有区别的话,很难吧 估计!
------解决方案--------------------
你用window.onbeforeunload这个来判断用户的关闭动作,势必不会很精确,用户关闭浏览器的场景很多,比如直接从任务栏里面点右键关闭,或者用户直接把电脑给关闭了,没有关闭浏览器。
------解决方案--------------------
JScript code
function window.onbeforeunload()  
     {       
        //用户点击浏览器右上角关闭按钮或是按alt+F4关闭
        if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey)  
        {  
         // alert("点关闭按钮");
               document.getElementById("hiddenForm:hiddenBtn").click();
            // window.event.returnValue="确定要退出本页吗?";  
        }
        //用户点击任务栏,右键关闭。s或是按alt+F4关闭
        else if(event.clientY > document.body.clientHeight || event.altKey)
        {
            // alert("任务栏右击关闭");
               document.getElementById("hiddenForm:hiddenBtn").click();
            // window.event.returnValue="确定要退出本页吗?";  
        }
        //其他情况为刷新  
        else
        {  
            // alert("刷新页面");
        }  
     }
 <body scroll="no" onbeforeunload="return CloseEvent();" onunload="UnLoadEvent()" >
</body>

<script language="JavaScript" type="text/javascript">
  
    var DispClose = true;
    function CloseEvent()
    {
        if (DispClose)
        {
            return "是否离开当前页面?";
        }
    }
   
    function UnLoadEvent()
    {
        DispClose = false;
        //在这里处理关闭页面前的动作
    }
</script>

------解决方案--------------------
后台页面方法aa() ?难道是aspx.cs里面的方法? 
这个你不能掉吧。如果需要掉用可以使用ajax的方法,然后去执行aa()方法。返回一个结果。
------解决方案--------------------
MARK下
------解决方案--------------------
我的思路是在前台用js做一个定时器,通过ajax定时的更新用户当前的在线时间,如果用户退出系统(不管是点按钮退出或是点浏览器的X退出或是其他情况),那自然就不会再执行这个定时器操作了,定时器最后更新的用户在线时间,就是用户退出时间了。
------解决方案--------------------
或者换一种思路,前台还是定时给后台发消息,后台建立一个监听,接收前台发送的消息,一旦浏览器关了,监听不到前台发送的消息,那么就执行事先准备好的方法。