Window:pagehide 事件
当浏览器从展示会话历史中的另一个页面过程中隐藏当前页面时,会向 Window
发送 pagehide
事件。
例如,当用户点击浏览器的后退按钮时,在显示前一个页面之前,当前页面会接收到一个 pagehide
事件。
语法
在诸如 addEventListener()
的方法中使用事件名,或者设置事件处理器属性。
js
addEventListener("pagehide", (event) => {});
onpagehide = (event) => {};
事件类型
PageTransitionEvent
。从 Event
继承。
事件属性
PageTransitionEvent.persisted
只读-
指示文档是否正在从缓存中加载。
事件处理器别名
除了在 Window
接口上之外,onpagehide
事件处理器属性也在以下目标上可用:
使用说明
与 unload
和 beforeunload
事件一样,此事件并未得到浏览器的可靠触发,特别是在移动设备上。例如,在以下场景中根本不会触发 pagehide
事件:
- 移动端用户访问你的网页。
- 用户随后切换到另一个应用程序。
- 后来,用户从应用管理器中关闭了浏览器。
然而,与 unload
和 beforeunload
事件不同,此事件与回退或前进缓存(bfcache)兼容,因此向此事件添加监听器不会阻止页面被纳入 bfcache 中。
表示用户会话结束的最佳事件是 visibilitychange
事件。在不支持 visibilitychange
的浏览器中,pagehide
事件是次佳的替代方案。
如果你特别想要检测页面卸载事件,pagehide
事件是最佳选项。
有关此事件如何与页面生命周期中其他事件相关的更多信息,请参阅页面生命周期 API 指南。
示例
在此示例中,建立了一个事件处理器来监听 pagehide
事件,并在页面被持久化以便重用时执行特殊处理。
js
window.addEventListener(
"pagehide",
(event) => {
if (event.persisted) {
/* 页面没有被丢弃,因此可以在以后重复使用 */
}
},
false,
);
这里也可以通过在 Window
上的 onpagehide
事件处理器属性来编写:
js
window.onpagehide = (event) => {
if (event.persisted) {
/* 页面没有被丢弃,因此可以在以后重复使用 */
}
};
规范
Specification |
---|
HTML Standard # event-pagehide |
浏览器兼容性
BCD tables only load in the browser
参见
pageshow
事件。- 页面生命周期 API 提供了在 web 应用程序中处理页面生命周期行为的最佳实践指南。
- PageLifecycle.js:是一个 JavaScript 库,用于处理跨浏览器的页面生命周期行为不一致问题。
- 回退或前进缓存解释了什么是回退或前进缓存,以及它对各种页面生命周期事件的影响。