一个javascript页面关闭触发事件的问题

我想在用户关闭页面时利用ajax去触发后台一个事件,其实就是去销毁该用户登录的session,当然了如果用户老老实实的去点“安全退出”自然没这问题了,但是实际上会有几个用... 我想在用户关闭页面时利用ajax去触发后台一个事件,其实就是去销毁该用户登录的session,当然了如果用户老老实实的去点“安全退出”自然没这问题了,但是实际上会有几个用户去点安全退出呢,至少我自己是没这个习惯,所以就需要在关闭浏览器时去触发一个事件去及时销毁session,而不是等待session超时(原因是我这是一个在线页面聊天系统,需要实时显示在线好友,总不能那边已经关了浏览器了,我这看着对方还在线呢),我在网上找了不少,也试了不少主要就是关于 onunload和onbeforeload,说实在的能用的真的没几个,说可以实现区分刷新和关闭的代码,我拿过来试一下也是打不到效果,而且都只支持ie,chrome和FF都不行,我想问问有没有什么办法能够完美实现关闭窗口触发事件么?而且支持ie chrome FF ? 展开
 我来答
网海1书生
科技发烧友

推荐于2017-11-26 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
你要换一个思路,后台用一个Application数组来记录所有在线用户的登录状态,你的聊天页面要每隔一个固定的时间(比如20秒或半分钟)利用ajax调用后台一个固定的页面,这个页面的作用就是刷新自身session对应的application数组元素(用SessionID来匹配)的时间值,然后再遍历这个Application数组,如果发现有某个Application元素的时间值超过指定的间隔值(20秒或半分钟,当然为了安全起见,可以适当放宽,比如40秒或1分钟),那么就说明这个用户已经关闭浏览器或离线了,就可以把它删掉。然后你的聊天页面就可以把这个Application数组作为所有用户是否仍然在线的依据了。
利用onunload和onbeforeunload事件来判断用户是否离线是非常不保险的,最简单的,如果该用户的网络突然发生故障造成断网,这时是没有任何事件被触发的(即使有也没法传送到后台服务器),这样服务器端就会一直以为该用户在线(直到Session过期)。唯一可行的办法就是我上面说的,类似于上班打卡,就是每隔一段时间向服务器报告“我是在线的”,如果没有打卡,那就说明离线了。而且这种方法由于大部分是在后台完成的,对前台脚本的依赖性较小(只要支持ajax即可),因此基本上可以说兼容所有浏览器。
育知同创教育
2018-06-28 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
一个判断页面是否真的关闭和刷新的好方法:

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可以设一个返回值作为该对话框的显示文本。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
裕达哥哥
2013-09-04 · TA获得超过1502个赞
知道小有建树答主
回答量:1224
采纳率:76%
帮助的人:161万
展开全部
简单一点,用jquery1.7,我测试过,里面的属性兼容iE6后的所有浏览器,

$(window).unload( function () { alert("Bye now!"); } );

兼容应该没问题,不过能不能实现你要的功能就带你研究,或者百度看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
343993135
2013-09-04
知道答主
回答量:35
采纳率:0%
帮助的人:22.1万
展开全部
同求,我也遇到过这样的问题,判断的是在一个session中不能登录两个用户。防止用户信息交错现象,也是需要清session。因为公司用的就是ie,也没有去深究过。同求解决方案。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式