根据我对Web存储的(较差的)理解,sessionStorage
对象是按选项卡维护的,它在页面重新加载和页面导航后仍然存在,并且在选项卡关闭或浏览器进程终止时被破坏。
是否有办法监听 sessionStorage
销毁事件?
当选项卡或窗口关闭时,我似乎需要执行HTTP调用,看来sessionStorage
是遵循相似生命周期的单个对象。
答案 0 :(得分:3)
有没有办法监听sessionStorage destroy事件?
否,没有用于会话存储的“销毁”事件。
当选项卡或窗口关闭时,我需要执行HTTP调用,似乎sessionStorage是遵循相似生命周期的单个对象。
您无法区分页面重新加载和离开页面。
我唯一想到的就是要做到这一点:
beforeunload
或unload
中,使用sendBeacon
进行HTTP调用(必须是POST)。您不能只使用标准ajax(XMLHttpRequest
/ fetch
),浏览器会在卸载事件中积极禁用标准ajax。因此,请使用sendBeacon
(如果存在),如果不存在,则回退到标准(并且ugh!–同步)的ajax请求(这表明它仍然可以使用旧版本的浏览器)。sessionStorage
中是否有标记,然后:
您需要确保服务器处理以下可能性:由于网络请求的多变(尤其是信标始终是异步的),服务器可能会无序地接收这两个请求。因此,请在其中包含一些序列化信息(例如,performance.now()
中的值,如有必要,可以回退到Date.now()
)。
或者,当然,在打开页面并使用超时指示用户离开页面时使用轮询。方法之间的权衡将很有趣。 :-)
用户window.document(有趣的用户名!)points out,您可能可以使用web sockets。我没有太多使用网络套接字的经验(必须解决!),但我认为一般的想法是,当用户离开页面或刷新时,您会看到套接字断开连接,但是(如上)如果刷新,此后不久您将再次看到套接字连接-就像“没关系!”打电话过来。