一、摘要:
總結用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事件
(如有不對,望指正~)

