一个javascript页面关闭触发事件的问题
发布网友
发布时间:2022-04-27 00:59
我来回答
共4个回答
热心网友
时间:2022-04-23 14:57
你要换一个思路,后台用一个Application数组来记录所有在线用户的登录状态,你的聊天页面要每隔一个固定的时间(比如20秒或半分钟)利用ajax调用后台一个固定的页面,这个页面的作用就是刷新自身session对应的application数组元素(用SessionID来匹配)的时间值,然后再遍历这个Application数组,如果发现有某个Application元素的时间值超过指定的间隔值(20秒或半分钟,当然为了安全起见,可以适当放宽,比如40秒或1分钟),那么就说明这个用户已经关闭浏览器或离线了,就可以把它删掉。然后你的聊天页面就可以把这个Application数组作为所有用户是否仍然在线的依据了。
利用onunload和onbeforeunload事件来判断用户是否离线是非常不保险的,最简单的,如果该用户的网络突然发生故障造成断网,这时是没有任何事件被触发的(即使有也没法传送到后台服务器),这样服务器端就会一直以为该用户在线(直到Session过期)。唯一可行的办法就是我上面说的,类似于上班打卡,就是每隔一段时间向服务器报告“我是在线的”,如果没有打卡,那就说明离线了。而且这种方法由于大部分是在后台完成的,对前台脚本的依赖性较小(只要支持ajax即可),因此基本上可以说兼容所有浏览器。
热心网友
时间:2022-04-23 16:15
一个判断页面是否真的关闭和刷新的好方法:
window.onbeforeunload=function (){
alert("===onbeforeunload===");
if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
alert("你关闭了浏览器");
}else{
alert("你正在刷新页面");
}
}
这段代码就是判断触发onbeforeunload事件时,鼠标是否点击了关闭按钮,或者按了ALT+F4来关闭网页,如果是,则认为系统是关闭网页,否则在认为系统是刷新网页。
onbeforeunload与onunload事件
Onunload,onbeforeunload
都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload
来指定或者在<body>里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
Onbeforeunload
也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读
到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而Onbeforeunload 可以做到。
页面加载时只执行onload
页面关闭时先执行onbeforeunload,最后onunload
页面刷新时先执行onbeforeunload,然后onunload,最后onload。
1、onbeforeunload事件:
说明:目前三大主流浏览器中firefox和IE都支持onbeforeunload事件,opera尚未支持。
用法:
·object.onbeforeunload = handler
·<element onbeforeunload = “handler” … ></element>
描述:
事件触发的时候弹出一个有确定和取消的对话框,确定则离开页面,取消则继续待在本页。handler可以设一个返回值作为该对话框的显示文本。
热心网友
时间:2022-04-23 17:50
简单一点,用jquery1.7,我测试过,里面的属性兼容iE6后的所有浏览器,
$(window).unload( function () { alert("Bye now!"); } );
兼容应该没问题,不过能不能实现你要的功能就带你研究,或者百度看看
热心网友
时间:2022-04-23 19:41
同求,我也遇到过这样的问题,判断的是在一个session中不能登录两个用户。防止用户信息交错现象,也是需要清session。因为公司用的就是ie,也没有去深究过。同求解决方案。