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 庫。
  • 往返快取 解釋了往返快取是什麼,以及它對各種頁面生命週期事件的影響。