为了账号安全,请及时绑定邮箱和手机立即绑定

SessionStorage销毁事件

SessionStorage销毁事件

慕神8447489 2021-05-05 16:34:02
根据我对Web存储的(较差)理解,该sessionStorage对象是按选项卡维护的,它在页面重新加载和页面导航后仍然存在,并且在选项卡关闭或浏览器进程终止时被破坏。有没有办法听的sessionStorage破坏事件?关闭选项卡或窗口时,我似乎需要执行HTTP调用,看来这sessionStorage是遵循相似生命周期的单个对象。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

有没有办法监听sessionStorage destroy事件?

不,没有用于会话存储的“销毁”事件。

关闭选项卡或窗口时,我似乎需要执行HTTP调用,并且似乎sessionStorage是遵循相似生命周期的单个对象。

您无法区分页面重新加载和离开页面。

我唯一想到的就是要做到这一点:

  1. beforeunload或中unload,用于sendBeacon进行HTTP调用(必须是POST)。您不能只使用标准ajax(XMLHttpRequestfetch),浏览器会在卸载事件中积极禁用标准ajax。因此,sendBeacon如果存在,请使用它,如果不存在,则回退到标准(并且-嗯!-同步)的Ajax请求(这表明它和较旧的浏览器可能仍然有效)。

  2. 在页面加载时,检查sessionStorage标记并:

    • 如果存在,则进行ajax调用,基本上说“没关系!” 可以说,如果服务器刚刚收到“我要离开页面”的ajax调用,则应忽略它。

    • 如果不存在,请设置标记。

您需要确保服务器处理以下可能性:由于网络请求的多变(尤其是信标始终是异步的),服务器可能会无序地接收到这两个请求。因此,请在其中包含一些序列化信息(例如,从performance.now()到的值,Date.now()必要时可以回落到)。

或者,当然,在打开页面并使用超时指示用户离开页面时使用轮询。方法之间的权衡将很有趣。:-)


用户window.document(有趣的用户名!)指出,您可以为此使用Web套接字。我没有使用网络套接字的经验(必须解决!),但我认为一般的想法是,当用户离开页面或刷新时,您会看到套接字断开连接,但是(如上)如果刷新,此后不久您将再次看到套接字连接-就像“没关系!” 致电上方。


查看完整回答
反对 回复 2021-05-13
  • 1 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信