javascript - SessionStorage 销毁事件

标签 javascript

根据我对 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. 卸载前卸载中,使用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/

相关文章:

javascript - 如何以另一种形式获取隐藏字段的值

javascript - HTML5 中的异步调用?

javascript - 如何从桌面通知中覆盖或删除签名 "electron.app.Electron"

javascript - 在 HTML 选择列表中选择选项时的 HTML 垂直居中选择

javascript - JQuery 到常规 JavaScript

javascript - 为什么模块无法正常工作?

javascript - 在 ES6 类中停止 setInterval

javascript - jQuery ajax 作用域内存泄漏

javascript - 异步加载 Chart.js 工具提示信息

javascript - GRUNT - 安装 Grunt 软件包?