1 回答

TA贡献1827条经验 获得超9个赞
有没有办法监听sessionStorage destroy事件?
不,没有用于会话存储的“销毁”事件。
关闭选项卡或窗口时,我似乎需要执行HTTP调用,并且似乎sessionStorage是遵循相似生命周期的单个对象。
您无法区分页面重新加载和离开页面。
我唯一想到的就是要做到这一点:
在
beforeunload
或中unload
,用于sendBeacon
进行HTTP调用(必须是POST)。您不能只使用标准ajax(XMLHttpRequest
/fetch
),浏览器会在卸载事件中积极禁用标准ajax。因此,sendBeacon
如果存在,请使用它,如果不存在,则回退到标准(并且-嗯!-同步)的Ajax请求(这表明它和较旧的浏览器可能仍然有效)。在页面加载时,检查
sessionStorage
标记并:如果存在,则进行ajax调用,基本上说“没关系!” 可以说,如果服务器刚刚收到“我要离开页面”的ajax调用,则应忽略它。
如果不存在,请设置标记。
您需要确保服务器处理以下可能性:由于网络请求的多变(尤其是信标始终是异步的),服务器可能会无序地接收到这两个请求。因此,请在其中包含一些序列化信息(例如,从performance.now()
到的值,Date.now()
必要时可以回落到)。
或者,当然,在打开页面并使用超时指示用户离开页面时使用轮询。方法之间的权衡将很有趣。:-)
用户window.document(有趣的用户名!)指出,您可以为此使用Web套接字。我没有使用网络套接字的经验(必须解决!),但我认为一般的想法是,当用户离开页面或刷新时,您会看到套接字断开连接,但是(如上)如果刷新,此后不久您将再次看到套接字连接-就像“没关系!” 致电上方。
添加回答
举报