首页 新闻 会员 周边

js可以区分刷新和关闭吗?

0
[已解决问题] 解决于 2019-02-11 11:03

我使用unload和beforeunload两个函数,但是都是顺序执行,没有办法区分刷新和关闭

zqifa的主页 zqifa | 菜鸟二级 | 园豆:204
提问于:2019-01-30 16:49
< >
分享
最佳答案
-1

先回答题主的问题:

我个人的理解中,浏览器没有离开页面时的事件,那么也就无法知道是“刷新”或“关闭”

 

 

但是有一个比较抖机灵的解决方案

支持H5的浏览器会有一个Session Storage

这个东西每个浏览器标签是独立的,只要浏览器标签没有被关闭就会一直存在,即使有多个同源的标签页面存在,也是独立的,思路大概是这样的。

页面打开,检查Session storage 的某个你制定的Key是否存在,

如果存在,证明是刷新,执行你要刷新时的操作。

如果不存在,证明新打开的,执行你的离开的操作,然后写入指定的Key。

 

当然这种方案有一个弊端,就是无法让服务端及时发现。必须等下次页面再打开才能发现上次被关闭。

没有办法及时发现浏览器端的状态。

因为Http本身就是无状态的,一次http(Tcp)交互就完成三次握手就OK了。

如果你是让服务器端发现用户是不是已经关闭页面,那么可以尝试一下WebSocket进行长连接,一旦断开服务器端会触发断开事件,但是这种方案需要在刷新的时候做一些手脚。因为无论刷新和离开,都会造成断开。

 

如果不需要websocket这么灵敏的话,可以尝试用轮询解决

奖励园豆:5
写代码的相声演员 | 小虾三级 |园豆:517 | 2019-01-31 17:46
其他回答(1)
0
dudu | 园豆:31003 (高人七级) | 2019-01-30 16:52

这个在window.load之后才有用,window.unload的时候不起作用
要实现的功能是,当页面关闭时,用户退出,刷新时不做操作,window.unload执行在window.load之前

支持(0) 反对(0) zqifa | 园豆:204 (菜鸟二级) | 2019-01-30 17:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册