按照頁面載入、切換、關閉三個動作講解頁面狀態改變會觸發的一些事件
載入頁面
-
文件解析完成觸發
readystatechange
事件,document.readyState === `interactive`
,接著立即觸發DOMContentLoaded
事件。以上兩個事件是相同的,表示同一個意思,文件已經完成載入,文件已被解析,但是諸如影像,樣式表和框架之類的子資源仍在載入。唯一的不同點在於所有瀏覽器都支援
readystatechange
事件,IE8 及以下不支援DOMContentLoaded
事件。 -
所有依賴資源載入完畢觸發
readystatechange
事件,document.readyState === `complete`
,接著立即觸發load
事件。以上兩個事件也是相同的,表示同一個意思,文件和所有依賴資源都已載入完成。
-
觸發
pageshow
事件此事件除了在
load
事件觸發後初始化頁面時觸發之外,當一條會話歷史記錄被執行的時候也將會觸此事件(包括 後退 / 前進 按鈕操作)。
頁面可見狀態切換
當使用者最小化網頁或者瀏覽到其他標籤的網頁時,API 將傳送一個關於當前頁面的可見資訊的事件 visibilitychange
,對應的狀態標識是 document.visibilityState
。
常見使用場景如視訊或音樂播放頁面,當使用者改變當前頁面可見狀態時,自動開啟或暫停播放。
詳細參考:Page Visibility API
關閉頁面
-
頁面關閉之前觸發
beforeunload
事件當瀏覽器視窗關閉或者重新整理時,會觸發
beforeunload
事件。當前頁面不會直接關閉,可以點選確定按鈕關閉或重新整理,也可以取消關閉或重新整理(取消預設行為)。如果處理函式的
event
物件的returnValue
屬性賦值非空字串,瀏覽器會彈出一個對話方塊,來詢問使用者是否確定要離開當前頁面。有些瀏覽器會將返回的字串展示在彈框裡,但有些其他瀏覽器只展示它們自定義的資訊。沒有賦值時,該事件不做任何響應。需要注意的是,為了避免不必要的彈窗,如果頁面並沒有發生互動瀏覽器可能不會展示在
beforeunload
事件中引發的彈框,甚至可能即使發生互動了也直接不顯示。 -
觸發
pagehide
事件與
pageshow
事件大同小異,在beforeunload
事件之後unload
事件之前觸發,同樣在會話歷史記錄被執行的時候也將會觸此事件(包括 後退 / 前進 按鈕操作)。 -
頁面被解除安裝時觸發
unload
事件當文件或一個子資源(iframe)正在被解除安裝時,觸發 unload事件,父 iframe 會在子 iframe 解除安裝之前解除安裝。
詳細參考:unload
還有更多其它事件嗎?