在浏览器关闭之前如果需要有操作的话,应该监听 window.onbeforeunload 事件。
这个事件会在页面销毁前触发(关闭标签,刷新页面等)。onbeforeunload 的返回值如果是true,那么这个会弹出提示框,询问用户是否关闭页面.
如果在页面关闭前要发出一个异步请求,没有办法保证请求一定能发送成功。因为有可能在异步操作没有执行的情况下就已经关掉了页面的进程。
window.onbeforeunload = function() {$.ajax( {...} )
return true
}
你要换一个思路,后台用一个Application数组来记录所有在线用户的登录状态,你的聊天页面要每隔一个固定的时间(比如20秒或半分钟)利用ajax调用后台一个固定的页面,这个页面的作用就是刷新自身session对应的application数组元素(用SessionID来匹配)的时间值,然后再遍历这个Application数组,如果发现有某个Application元素的时间值超过指定的间隔值(20秒或半分钟,当然为了安全起见,可以适当放宽,比如40秒或1分钟),那么就说明这个用户已经关闭浏览器或离线了,就可以把它删掉。然后你的聊天页面就可以把这个Application数组作为所有用户是否仍然在线的依据了。利用onunload和onbeforeunload事件来判断用户是否离线是非常不保险的,最简单的,如果该用户的网络突然发生故障造成断网,这时是没有任何事件被触发的(即使有也没法传送到后台服务器),这样服务器端就会一直以为该用户在线(直到Session过期)。唯一可行的办法就是我上面说的,类似于上班打卡,就是每隔一段时间向服务器报告“我是在线的”,如果没有打卡,那就说明离线了。而且这种方法由于大部分是在后台完成的,对前台脚本的依赖性较小(只要支持ajax即可),因此基本上可以说兼容所有浏览器。
js 怎么监听到页面关闭或页面跳转事件,以下介绍方法:
//在页面关闭或者跳转的时候调用
window.onbeforeunload = function (e) {
return e.returnValue = '确认关闭?'
}
window.onunload = function () {
//这个执行完onbeforeunload 会调用该function,
//alert()是不会有弹出的。
}
调用上面的代码,用谷歌浏览器关闭浏览页面或者跳转页面都会弹出下面页面询问。
注意:刷新的时候也会弹出询问,这监控也把刷新当成重新打开页面相当跳转。