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

2019-02-11 10:41发布

问题:

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

回答1:

先回答题主的问题:

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

 

 

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

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

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

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

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

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

 

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

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

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

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

 

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



回答2:

参考 Check if page gets reloaded or refreshed in Javascript



标签: hmtl js jquery