gpt4 book ai didi

javascript - SessionStorage 销毁事件

转载 作者:行者123 更新时间:2023-11-29 18:42:43 30 4
gpt4 key购买 nike

根据我对 Web 存储的(贫乏)理解,sessionStorage 对象是按选项卡维护的,它在页面重新加载和页面导航后仍然存在,并且在选项卡关闭或浏览器进程终止时被销毁。

有没有办法监听 sessionStorage 销毁事件?
我需要在关闭选项卡或窗口时执行 HTTP 调用,并且 sessionStorage 似乎是遵循类似生命周期的单个对象。

最佳答案

Is there a way to listen to the sessionStorage destroy event?

不, session 存储没有“销毁”事件。

I need to perform an HTTP call when the tab or window is being closed and it seems the sessionStorage is the single object which follow a similar lifecycle.

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

我唯一能想到的接近你想做的事情就是这样做:

  1. beforeunloadunload 中,使用sendBeacon进行 HTTP 调用(必须是 POST)。您不能只使用标准 ajax (XMLHttpRequest/fetch),浏览器会在卸载事件中主动禁用标准 ajax。因此,如果它存在,请使用 sendBeacon,如果它不存在,则回退到标准(和 - 呃! - 同步)ajax 请求(因为这表明旧浏览器可能仍然有效)。<
  2. 在页面加载时,检查 sessionStorage 中的标记,并且:
    • 如果它在那里,做一个 ajax 调用,基本上说“没关系!”也就是说,如果服务器刚刚收到“我要离开页面”ajax 调用,它应该忽略它。
    • 如果不存在,设置标记。

您需要确保服务器能够处理这样的可能性,即由于网络请求的变化无常(特别是因为信标总是异步的),服务器可能会乱序接收这两个请求。因此,在其中包含一些序列化信息(例如,来自 performance.now() 的值,必要时回退到 Date.now())。

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


用户window.document (有趣的用户名!)points out你可以使用 web sockets为了这。我没有太多使用网络套接字的经验(必须解决这个问题!)但我认为一般的想法是当用户离开页面或刷新时你会看到套接字断开连接,但是(像上面一样)如果它是刷新,您很快就会再次看到套接字连接——这就像“没关系!”在上面调用。

关于javascript - SessionStorage 销毁事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863991/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com