很多web应用都会做成单页面应用,用户无需打开新的窗口,只在同界面异步加载新的窗口(并不刷新,只是动态加载窗口内容),这时我们面临一个需求,这个单页面应用要求对用户下线行为进行检测,即用户关闭web选项卡或者关闭浏览器,进行一些操作,之前我们想使用浏览器的onclose或者beforeonunload事件,但使用后发现这个方法在处理刷新事件时也会触发,如果不能区分刷新和关闭就不能准确的区分离线。
我临时的解决方法是
用户进入应用或者请求服务端都会打一个标记,用beforonunload事件删除该标记并触发一个延时执行的动作,五秒之后检查标记,如果标记不在说明用户在事件之后没在发送任何请求(刷新时会马上发送请求),这时就可以确定用户是离线了。如果标记还在,说明用户之后还在操作,那就是刷新动作咯。