0 0

浏览器关闭页面处理10

开发中遇到问题:业务希望关闭浏览器后后台能够得到用户已经离开系统操作消息,因为这个消息将会触发在其他业务系统中功能,所以在实时性上有要求。

需求分析:

1:js通过绑定onbeforeunload事件在触发时候调用ajax发送请求到服务器,但是实际上页面对象已经释放了,那么在ajax还没有发送成功时候变被终止了。
window.onbeforeunload = function(){
      $.ajax('',{});
}

2:现在做法是通过ajax方式定时发送请求到服务器,但是在多用户情况下这样会给服务器压力。
setInterval(function(){
      $.ajax('',{});
},30000);

是否还有其他方式能更好解决这个问题?
问题补充
还有其他方式能更好解决这个问题?
问题补充
现在问题就是需要在用户点击了确认后才能发送ajax请求
问题补充
如果用onunload事件处理肯定是不可以
问题补充
用定时轮询的方式算是一种方案,虽然有时间延迟,有后台每隔一点事件去判断用户的离开
问题补充
int08h 写道
把ajax改成同步的就是了,问题就是连接慢的话页面会有假死现象

那就是说在onunload事件处理ajax改成同步发送请求?
问题补充
如果是onunload事件中处理,但是此时页面dom已经销毁了,那么ajax方法也会销毁了
问题补充
zjhlht 写道
这个问题原来也遇见过,一直没有很好的解决,而且还有个大问题是跨浏览器的问题,头大啊,希望LZ最后能总结出来的。给点经验

跨浏览器的问题,头大啊!
问题补充
zjhlht 写道
这个问题原来也遇见过,一直没有很好的解决,而且还有个大问题是跨浏览器的问题,头大啊,希望LZ最后能总结出来的。给点经验

是否可以考虑WebSocket方式建立连接来监听用户使用浏览器状态?
问题补充
jinxhj2003 写道
这个问题我们现在的项目也有这种需求,通过你说的用js的方式,,用户关闭浏览器就执行ajax。。但这只是一种情况,如果是客户端直接关电脑或是直接通过任务管理器关进程。那种方式的效果不太好的。。甚至不执行..
我们现在的解决方案是监听session。。将用户的登陆状态保存至数据库。。然后服务器每隔一定时间查看当前的session同步至数据库。。

这种方式处理比较合适些。

问题补充
现在就是无法做到实时,所以只能采取服务端监控客户端定时发送ajax请求处理办法,如果在指定时间内没有得到浏览器发送请求,则认为用户离开了页面。
2011年4月15日 14:21

19个答案 按时间排序 按投票排序

0 0

window.onbeforeunload不用异步用同步怎么样?

2011年4月16日 09:34
0 0

3楼正解,弹出提示用alert.
先ajax请求,然后立马alert.
alert会阻塞javascript执行器中当前主线程的执行,但ajax启动的线程不是主线程,仍在执行。当用户点完确定后,ajax在后台早执行完了。

2011年4月15日 14:21
0 0

      window.onbeforeunload = function() {
         window.location = "exit.action";
      }

2011年4月15日 14:21
0 0

deng131 写道
现在就是无法做到实时,所以只能采取服务端监控客户端定时发送ajax请求处理办法,如果在指定时间内没有得到浏览器发送请求,则认为用户离开了页面。


这样是不是太耗资源了啊,服务器压力太大了

2011年4月15日 14:21
0 0

主要看楼主对用户离开这个事件的实时性要求有多高。
如果实时性要求不高,用http session超时机制不依赖客户端,是比较可靠的方式
反之,就得采用诸如浏览器unload或者轮询的方式

2011年4月15日 14:21
0 0

记得之前遇到过这种情况,当时是在unload(beforeunload没有返回值,至于哪个事件记得不太清了)事件中做的同步处理,发送离线标示到服务器上。在正常情况下都可以的。

2011年4月15日 14:21
0 0

jinxhj2003 写道
这个问题我们现在的项目也有这种需求,通过你说的用js的方式,,用户关闭浏览器就执行ajax。。但这只是一种情况,如果是客户端直接关电脑或是直接通过任务管理器关进程。那种方式的效果不太好的。。甚至不执行..
我们现在的解决方案是监听session。。将用户的登陆状态保存至数据库。。然后服务器每隔一定时间查看当前的session同步至数据库。。


这种是通用点的解决方案吧。。。在客户端的处理的话 总会有以外情况。。。断电、断网、直接关进程等一堆要考虑的 还不如直接服务器端做这种事情。。

2011年4月15日 14:21
0 0

可以试试通过监听session的Attribute。

2011年4月15日 14:21
0 0

浏览器崩溃,
用户直接结束进程
都是问题

2011年4月15日 14:21
0 0

function ajaxget (){
//ajax请求 在回调函数中判断是否发送失败,如果失败的话 则继续 ajaxget()一下
}

2011年4月15日 14:21
0 0

还是楼上这种方式好一点,听说浏览器可以长连接,但我没试过,而且跨浏览器问题也麻烦。

服务端监听会导致用户把浏览器开长时间不动作,使服务器以为用户下线,可以在cookie中设置自动登陆,注意安全性。

2011年4月15日 14:21
0 0

这个问题我们现在的项目也有这种需求,通过你说的用js的方式,,用户关闭浏览器就执行ajax。。但这只是一种情况,如果是客户端直接关电脑或是直接通过任务管理器关进程。那种方式的效果不太好的。。甚至不执行..
我们现在的解决方案是监听session。。将用户的登陆状态保存至数据库。。然后服务器每隔一定时间查看当前的session同步至数据库。。

2011年4月15日 14:21
0 0

可以新开窗口,window.open(requestURL) 变通完成用户登出处理

2011年4月15日 14:21
0 0

这个问题原来也遇见过,一直没有很好的解决,而且还有个大问题是跨浏览器的问题,头大啊,希望LZ最后能总结出来的。给点经验

2011年4月15日 14:21
0 0

还是在服务器端监控session超时吧
这样发送Ajax请求,不确定性太高

2011年4月15日 14:21
0 0

其实。。。轮询也没什么的,用户数真的很多很多吗?

如果后端方便实现,可以使用长轮询,服务器压力进一步降低,并且能做到近乎实时


哦。。。还是不行,刚才考虑到一种情况: 触发了alert之类会锁死JS进程的对话框时,轮询也成了浮云。

要是用户一直不点,那铁定因为轮询中断而“被下线”

so... 要么保证页面不会弹这种模式对话框,要么就无视这种小概率事件

2011年4月15日 14:21
0 0

deng131 写道
现在问题就是需要在用户点击了确认后才能发送ajax请求

你可以变通啊,点取消的话再来一次请求,告诉服务器:“刚才那次不算”
服务器也留30秒缓冲期,一般也够用了,不考虑弹出提示30秒还不点的情况……

另外,在unload中做同步ajax啊、死循环啊什么的,各浏览器应对方法不一样,有些浏览器直接中止JS脚本,有些还等你运行,所以还是行不通。

嗯。。。以上是印象中的,以前测试过一次,更详细的最好自己测一下,不保证正确

2011年4月15日 14:21
0 0

把ajax改成同步的就是了,问题就是连接慢的话页面会有假死现象

2011年4月15日 14:21
0 0

beforeunload事件可以指定返回字符串,这样用户那里就弹出了确认提示,从而争取到多一点时间以便ajax请求发出。

so,在beforeunload中发送ajax请求,然后弹出提示,一般是很大概率成功的。

不过要注意一点,有可能用户点了否,那么你还要挽回之前发送的ajax请求

2011年4月15日 14:21

相关推荐

    vue如何在用户要关闭当前网页时弹出提示的实现

    本文介绍了vue如何在用户要关闭当前网页时弹出提示的实现,分享给大家,具体如下: 效果如下图 正常 js 页面处理方式 [removed] = function (e) { e = e || window.event; // 兼容IE8和Firefox 4之前的版本 if ...

    闪游浏览器saayaa v3.17 官方版

    闪游浏览器对Windows系统资源的占用特少,远远超越了国内外的同类网页浏览器软件。支持Win7、Vista下的透明玻璃特效的浏览器!微软官方认证数字签名,国内率先通过Windows 7认证! 闪游浏览器 v3.17 正式版: 新增...

    猎豹浏览器下载

    修正覆盖安装后不恢复上次未关闭标签的问题 修正GPU加速异常的问题 修正下载安全扫描状态的问题 [功能优化] 屏蔽IE内核下的错误对话框 优化cookie处理逻辑 优化错误页面显示逻辑 优化对wmp文件的播放支持 [界面...

    易语言多标签浏览器

    易语言多标签浏览器源码,多标签浏览器,限制窗口大小,处理消息,事件回调,取高位1,取低位1,取窗体空间,设置浏览框位置,设置标签框位置,新建浏览页,新建搜索,设置默认浏览器,写入历史记录,设置网页标题栏顶边,设置网页...

    Java写的网页浏览器,仿IE基础功能.rar

    Java代码编写的简单网页浏览器,仿IE基础功能,只能解析标准的HTML文件,现在流行的HTML5格式不能解析。使用方法:可直接输入文件名或网络地址,但必需事先连入网络。  JTextField jtfAddress; //输入html文件地址...

    网页自动点击监控工具

    9、支持浏览器伪装,操作系统伪装,来路伪装。 10、网页内容变化监控,包括网页脚本执行产生的变化。 11、网页内容关键字监控,同时监控多个关键字。 12、网页HTML元素级监控,支持网页区域监控,同时监控多个...

    傲游浏览器v3.3.6.2000 [2012-3-22]

    * 锁定标签后关闭浏览器崩溃 * 某些情况下鼠标手势失效 * 某些情况下标签序号显示不完整 * ebay和astronet页面排版错位 [Trident 核心] *夜间模式自定义设置颜色无效 [傲游下载] * 单击"浏览"打开资源管理器定位...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

    Google Chrome,中文名为“谷歌浏览器”,是一个由Google公司开发的网页浏览器。与苹果公司的safari相抗衡,浏览速度在众多浏览器中走在前列,属于高端浏览器。采用BSD许可证授权并开放源代码,开源计划名为Chromium...

    精品离线浏览器(都含注册码)_5款合集打包下载

    它内置浏览程序、可直接浏览或是使用自己喜欢的浏览器来浏览、且更可直接以全浏览窗切换来作网上浏览,另它对于抓取的网站更有MAP的提供、可更清楚整个网站的连结及目录结构 注意要一次性下载完 不能不关闭软件就...

    JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码

    很多站长为了仿止别人仿制或扒下自己的网页,都会选择使用禁止浏览器右键查看元素或F12审查元素,一旦查看元素浏览器页面就会自动关闭,下面话不多说了,来一起看看详细的介绍吧。 注:该代码不兼容火狐浏览器,对于...

    Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法

    其实只要把页面关闭,或者浏览器关闭,然后再打开,就能恢复弹出了。 手机版的浏览器也可以这样处理。 也就是说重启一下浏览器,或者关闭重开页面就行了。 下面测试一下,点击下面的按钮,就会弹出对话框,弹出多次...

    C#浏览器编程,学习使用

    //可以查看页面源文件和网页链接状态的功能(可供分析网站的路径),具备// //常用的门户引擎搜索功能。 // //******************************************************************// namespace CSharp浏览器 { ...

    晓博淘宝专用浏览器3.3.2.1破解版(最新版)

    2,任务汇总:把掌柜所需要处理的事情(发货,评价,橱窗推荐,解释,需要回复的留言等)集中到一个页面,这样可以方便掌柜处理,避免遗漏和页面切换。 3,批量评价:批量做出评价,对于生意好的掌柜很有用,可以...

    乙醇老师的力作57页详细讲解—webdriver实用指南java版本.docx

    • 关闭浏览器 • 浏览器最大化 • 设置浏览器大小 • 访问链接 • 打印当前页面的title及url • 前进和后退 • 简单的对象定位 • 定位一组对象 • 层级定位 • 操作测试对象 • send keys模拟按键输入 • 处理...

    依Q屋淘宝专用浏览器破解版

    2,任务汇总:把掌柜所需要处理的事情(发货,评价,橱窗推荐,解释,需要回复的留言等)集中到一个页面,这样可以方便掌柜处理,避免遗漏和页面切换。 3,批量评价:批量做出评价,对于生意好的掌柜很有用,可以...

    淘宝专用浏览器V2.6.3.9

    淘宝专用浏览器2.6.3.9【可试用】 最新更新,可直接下载全功能试用 软件功能介绍: 1、复制宝贝:可复制任意一家淘宝店的宝贝信息发布到自己店内(功能强大,请勿侵权)包括图片、属性等完全复制过来。 2、任务汇总...

    快便支付原理 商户网站接入支付结果有两种方式,一种是通过浏览器进行跳转通知,一种是服务器端异步通知

    基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面, 并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知, 导致支付结果难以处理。而且浏览器端数据很容易被篡改而降低...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    SessionStorage 存储的数据只在会话期间有效,关闭浏览器则自动删除 Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威...

    ASP.NET的网页代码模型及生命周期

    代码隐藏页模型与单文件页模型不同的是,代码隐藏页模型将事物处理代码都存放在cs文件中,当ASP.NET网页运行的时候,ASP.NET类生成时会先处理cs文件中的代码,再处理.aspx页面中的代码。这种过程被成为代码分离。 ...

    Maxthon2.0.2.2961苦菜花增强优化安装版

    + 崩溃时或强制关闭后打开上次浏览网页列表 + 退出时自动上传未上传的收藏 + 清除隐私/退出删除记录中增加了 Feed 历史和搜索历史 + 收藏支持键盘打开 + 通过点击打开过所有页面后自动关闭恢复列表...

Global site tag (gtag.js) - Google Analytics