Window: pagehide 事件

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

当浏览器为了显示会话历史中的不同页面而隐藏当前页面时,会向 Window 发送 pagehide 事件。

例如,当用户点击浏览器的“后退”按钮时,在显示上一页之前,当前页面会收到一个 pagehide 事件。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("pagehide", (event) => { })

onpagehide = (event) => { }

事件类型

一个 PageTransitionEvent。继承自 Event

Event PageTransitionEvent

事件属性

PageTransitionEvent.persisted 只读

表示文档是否从缓存中加载。

事件处理程序别名

除了 Window 接口,事件处理程序属性 onpagehide 也可在以下目标上使用

用法说明

unloadbeforeunload 事件一样,浏览器不可靠地触发此事件,尤其是在移动设备上。例如,在以下场景中,pagehide 事件根本不会触发

  1. 移动用户访问您的页面。
  2. 用户随后切换到不同的应用程序。
  3. 稍后,用户从应用程序管理器关闭浏览器。

然而,与 unloadbeforeunload 事件不同,此事件与 往返缓存 (bfcache) 兼容,因此向此事件添加监听器不会阻止页面被包含在 bfcache 中。

用于表示用户会话结束的最佳事件是 visibilitychange 事件。在不支持 visibilitychange 的浏览器中,pagehide 事件是次优选择。

如果您特别想检测页面卸载事件,pagehide 事件是最佳选择。

有关此事件与页面生命周期中其他事件的关系的更多信息,请参阅 页面生命周期 API 指南。

示例

在此示例中,建立了一个事件处理程序来监听 pagehide 事件,并在页面被持久化以备将来重用时执行特殊处理。

js
window.addEventListener("pagehide", (event) => {
  if (event.persisted) {
    /* the page isn't being discarded, so it can be reused later */
  }
});

这也可以使用 Window 上的 onpagehide 事件处理程序属性来编写

js
window.onpagehide = (event) => {
  if (event.persisted) {
    /* the page isn't being discarded, so it can be reused later */
  }
};

规范

规范
HTML
# event-pagehide

浏览器兼容性

另见

  • pageshow 事件。
  • 页面生命周期 API 提供了关于如何在 Web 应用程序中处理页面生命周期行为的最佳实践指导。
  • PageLifecycle.js:一个处理页面生命周期行为中跨浏览器不一致的 JavaScript 库。
  • 往返缓存 解释了往返缓存是什么,以及它对各种页面生命周期事件的影响。