html5之history對象 控制瀏覽器前進或后退事件


一、摘要:

總結用history對象操作瀏覽器的歷史記錄的方法,在項目中使用的是mui框架,總結中包括我在實際項目中遇到的問題。

二、總結:

實現效果:

實現代碼:

上面的編輯頁面加載的時候就要先調用一次pushHistory()方法,如果不先調用一遍,在第一次點擊瀏覽器上的返回按鈕時,不會彈出提示框,必須在你按過一次手機頁面上的返回鍵之后,你點擊了提示框上的取消按鈕,你再按瀏覽器上的返回鍵頁面才能彈出提示框。

js關鍵代碼:

 

 

 下面總結history對象的用法:

a)歷史記錄 前進和后退的方法:

1.后退方法:

2.前進方法:

3.移動到指定的歷史記錄點:

查看瀏覽器中一共有多少頁:

 

4.popstate事件(監聽瀏覽器的點擊事件):

每當激活的歷史記錄發生變化時,都會觸發popstate事件。

即每當點擊瀏覽器的前進或是后退的時候都會觸發popstate事件,如下代碼:

 上面的代碼可以不加定時器,根據實際情況而定,上面的代碼等同於:

window.onpopstate=function(e) {

closewindow();

}

官方解釋如下:

 

5.pushState()方法主要是添加歷史記錄條目,replaceState是修改歷史記錄條目

總結:

解釋上面的那個問題,在頁面初次加載編輯頁面的時候就要調用pushHistory()方法(主要是調用pushState()),主要是用來改變瀏覽器的歷史記錄條目,

當加載編輯頁面的時候(如下),因為調用了pushHistory()方法,所以瀏覽器的地址會改變,地址后面會加上我們在pushState中添加的參數"#",加"#",顯示的頁面仍然是當前的編輯頁面,當用戶按了瀏覽器的返回鍵,頁面返回到加"#"號之前的那個頁面,也就是下圖的這個地址的頁面,仍然是當前的編輯頁面,這時因為當前的編輯頁面的歷史頁面發生變化,所以會觸發popstate事件,從而就會調用我們寫的closewindow()方法彈出提示框了。

同理,如果起初沒有調用pushHistory()方法,即沒有添加歷史記錄條目,第一次進入編輯頁面然后就按瀏覽器的返回鍵,這時就會直接返回列表頁面(項目中是從列表頁面進入編輯頁面),因為當前編輯頁面沒有歷史記錄條目發生變化(提示框的顯示是在編輯頁面),所以不會觸發popstate事件,進而也不會有提示框彈出。

參考資料:https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history#popstate事件

(如有不對,望指正~)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM