Javascript 如何检测 unload 事件是由刷新、后退按钮还是关闭浏览器引起的?

阅读时长 3 分钟读完

在 Web 开发中,我们经常需要在页面即将卸载(unload)时执行一些操作。然而,在某些情况下,我们希望知道卸载事件是由用户的哪种行为引起的,例如是因为用户点击了浏览器的刷新按钮、后退按钮,还是直接关闭了浏览器窗口。在本文中,我们将介绍如何使用 JavaScript 检测这些情况。

方案1:使用 Navigation Timing API

Navigation Timing API 提供了很多有关页面导航和加载的信息,包括页面开始加载的时间、页面完成加载的时间、每个资源的加载时间等等。它还提供了一个名为 performance.navigation 的对象,其中包含了许多有用的信息。

通过检查 performance.navigation.type 属性,我们可以知道最近的页面转换类型。该属性返回以下四个可能的值之一:

  • 0: TYPE_NAVIGATE - 页面刚刚打开
  • 1: TYPE_RELOAD - 用户刷新了页面
  • 2: TYPE_BACK_FORWARD - 用户点击了浏览器的后退或前进按钮
  • 255: TYPE_RESERVED - 表示无效值

因此,在 unload 事件中,我们可以使用以下代码来确定页面转换类型:

-- -------------------- ---- -------
--------------------------------- --------------- -
  ------ ----------------------------- -
    ---- --
      ----------------------
      ------
    ---- --
      -----------------------
      ------
    ---- --
      --------------------------------
      ------
    --------
      -------------------
      ------
  -
---

方案2:使用 sessionStorage

如果您不想使用 Navigation Timing API,也可以考虑使用 sessionStorage。在 unload 事件中,我们可以将一个标志位存储在 sessionStorage 中。然后,在页面加载时,我们可以检查该标志位来确定上一次卸载事件是由哪种行为引起的。

以下是一个示例代码:

-- -------------------- ---- -------
--------------------------------------- --------------- -
  ------------------------------------- ------
---

------------------------------- --------------- -
  -- --------------------------------------- -
    -----------------------------------------
    -----------------------------------------
  - ---- -
    ----------------------
  -
---

总结

在本文中,我们介绍了两种方法来检测 unload 事件是由哪种行为引起的。Navigation Timing API 是一种用于获取更多有关页面加载和导航的信息的强大工具。而使用 sessionStorage 则更加简单,但需要在页面加载时进行一些额外的检查。根据您的特定需求,您可以选择一种适合您的方案。

希望本文能对您有所帮助!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/30849

纠错
反馈