项目原来有一个功能,用户点击退出时会记录用户的注销情况,但是如果用户使用各种方法关闭浏览器的话就没有办法捕捉。为了实现这个功能,我从网上找了很多资料,不过都没有实现,最后用了一个折中的办法实现。
既然要用js来捕捉用户刷新和关闭的事件,自然是要用到onunload或者onbeforeunload,这两者的区别网上有很多,就不多累述了。无论哪种方法要实现上面的功能都不行,因为对于浏览器来说,刷新和关闭都是结束当前的会话,都会执行后面的代码。
后来想到可以利用onunload、onbeforeunload和onload的执行情况。(上面的功能只用onbeforeunload和onload)
1、当我们加载页面的时候只会执行onload。
2、当我们刷新页面的时候会首先执行onbeforeunload,然后执行onload。
3、当我们关闭页面的时候只会执行onbeforeunload。
知道这一点就方便多了,具体代码如下。
window.onbeforeunload =function(){
//无论用户刷新还是删除这段代码都会执行,记录用户的注销时间等信息
var XMLRole=new XMLHttpObject("GET","/文件名/数据库名.nsf/记录注销时间代理名?openagent&key="+Math.random(),false,'')
XMLRole.sendData();
var XmlResponse = XMLRole.getText();
}
//如果用户是刷新,后面这段代码会执行,从而清除注销时间等信息(如果关闭则不会执行)
var XMLRole=new XMLHttpObject("GET","/文件名/数据库名.nsf/删除注销时间代理名?openagent&key="+Math.random(),false,'')
XMLRole.sendData();
var XmlResponse = XMLRole.getText();
//后面省略AJAX的XMLHttpObject函数,具体函数在http://blog.youkuaiyun.com/liuchang__/article/details/50317069中。
这样就实现了上面说到的功能,经过测试IE11上没有问题,其它浏览器还需要测试。
后面也将网上找到的方法记录一下吧,很多代码有借鉴之处的。
1、这种是网上找到最多的方法。
window.onunload = function(){
var a_n = window.event.screenX - window.screenLeft;
var a_b = a_n > document.documentElement.scrollWidth-20;
if(a_b && window.event.clientY< 0 || window.event.altKey){
alert('关闭页面行为');
}else{
alert('跳转或者刷新页面行为');
}
}
2、还有这种方法。
<script
language="javascript">
<!--
var s="close";
function window.onunload(){
if(s=="fresh")
if(window.screenLeft>10000){alert('关闭');}else{alert('刷新');}
else
alert('关闭');
}
function window.onbeforeunload(){
s="fresh";
}</script>