怎么判断用户关闭浏览器还是刷新页面的操作?

zhengdinghe 2017-01-17 11:46:19
sos
用户需要在点击关闭浏览器标签页的时候提示提示用户登出后再退出,如果用户点击确定则帮助用户登出处理。日前,通过onbeforeunload事件能在关闭的时候有提示,但是在点击刷新时也触发这个事件,这样不行。于是找资料,有大神说
<script type="text/javascript">
window.onbeforeunload = function(){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b && window.event.clientY < 0 || window.event.altKey)
{
alert("是关闭而非刷新");
window.event.returnValue = "是否关闭?";
}else{
alert("是刷新而非关闭");
}
}
</script>
这样能够实现页面是刷新还是关闭,本人亲测,无效,根本获取不到鼠标的位置,想先在htm页面实现这个效果,求牛人大神指教下小弟,感激不尽。
...全文
965 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengdinghe 2017-01-17
  • 打赏
  • 举报
回复
引用 1 楼 Free_Wind22 的回复:
没办法检测,可以换个方式, 不管是刷新还是关闭提交一个延迟退出的请求,如果是刷新,页面载入后把上一个退出请求取消...
关键判断不了是刷新还是关闭呀- - 你的前提也是需要判断是刷新还是关闭不是
2017-01-17
  • 打赏
  • 举报
回复
没办法检测,可以换个方式, 不管是刷新还是关闭提交一个延迟退出的请求,如果是刷新,页面载入后把上一个退出请求取消...
天际的海浪 2017-01-17
  • 打赏
  • 举报
回复
这个目前没有完美的解决方法。 比较好点的方案是onload事件之后延时一些时间绑定onbeforeunload 事件。 并且在onbeforeunload 事件中判断是否按了F5键。 当然最好还是更改你的业务逻辑,避免这种判断关闭还是刷新的操作。
zhengdinghe 2017-01-17
  • 打赏
  • 举报
回复
引用 4 楼 zzgzzg00 的回复:
cookie设置成session级的不就好了吗?
您的意思是说设置成session级的后,点击关闭tab页就能够销毁session吗? 不是很明白
zhengdinghe 2017-01-17
  • 打赏
  • 举报
回复
引用 3 楼 chate 的回复:
引用 2 楼 zhengdinghe 的回复:
[quote=引用 1 楼 Free_Wind22 的回复:] 没办法检测,可以换个方式, 不管是刷新还是关闭提交一个延迟退出的请求,如果是刷新,页面载入后把上一个退出请求取消...
关键判断不了是刷新还是关闭呀- - 你的前提也是需要判断是刷新还是关闭不是
1、先不判断,一律按关闭提交(要有延迟)。 2、如果是刷新,取消之前的延迟,提交刷新提示。[/quote]请问延迟要怎么实现,因为刷新的话也触发了onbeforeunload,并不是要提交的说,是我点击关闭浏览器的标签页的时候,延迟的话是向后台发ajax请求吗?然后判断请求头是关闭还是刷新的意思吗?
似梦飞花 2017-01-17
  • 打赏
  • 举报
回复
cookie设置成session级的不就好了吗?
chate 2017-01-17
  • 打赏
  • 举报
回复
引用 2 楼 zhengdinghe 的回复:
引用 1 楼 Free_Wind22 的回复:
没办法检测,可以换个方式, 不管是刷新还是关闭提交一个延迟退出的请求,如果是刷新,页面载入后把上一个退出请求取消...
关键判断不了是刷新还是关闭呀- - 你的前提也是需要判断是刷新还是关闭不是
1、先不判断,一律按关闭提交(要有延迟)。 2、如果是刷新,取消之前的延迟,提交刷新提示。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧