書名: 深入理解React Router:從原理到實踐作者名: 李楊韜本章字數(shù): 691字更新時間: 2021-04-16 16:10:36
1.3.1 window.history.go
window.history.go方法可加載歷史列表中的某個特定具體的頁面,用來完成在用戶歷史記錄中向后和向前的跳轉(zhuǎn)。其簽名為:

入?yún)⒖梢允菙?shù)字,移動歷史棧中棧指針的相對距離,“-1”表示后退到上一個頁面,“1”表示前進一個頁面。在某些瀏覽器中,也可通過單擊“前進”和“后退”按鈕旁的歷史棧菜單按鈕選擇需要導航到的頁面,這對應于history.go(1)、history.go(2)、history.go(-2)等。注意,IE瀏覽器支持傳遞URL作為參數(shù)給history.go函數(shù),但這是不標準的。
對于history.go(0),其意義為刷新當前頁面,與location.reload方法行為一致。

對于歷史棧指針的移動,如圖1-5所示。
history.go方法僅移動棧指針,不會修改棧記錄,不會對棧的記錄數(shù)量造成影響。
history.go與history.pushState相比,history.pushState并不會造成頁面刷新,而history.go跳轉(zhuǎn)頁面的刷新行為視具體情況而定。history.go與history.pushState的主要區(qū)別是,一個不產(chǎn)生歷史棧,僅控制棧指針在棧內(nèi)移動,一個產(chǎn)生歷史棧。在行為上,history.go等同于瀏覽器的“前進”和“后退”按鈕,其調(diào)用會觸發(fā)popstate事件;而history.pushState會清空當前指針位置之上的所有歷史棧,并入棧一個歷史記錄作為棧頂,同時移動指針指向它。有一個容易產(chǎn)生的誤區(qū):在history.pushState被調(diào)用多次后,單擊瀏覽器的“后退”按鈕,瀏覽器就會完成歷史棧的出棧操作。事實上,這時候棧的數(shù)量并不會改變。單擊瀏覽器的“前進”和“后退”按鈕,包括執(zhí)行history.go等操作都僅是移動指向棧記錄的指針,造成指針位置的改變,瀏覽器并不會進行出棧。如果需要改變棧的數(shù)量,則需要執(zhí)行history.pushState。假如一個歷史棧有3個記錄且指針指向棧頂,那么當執(zhí)行2次后退操作后,指針后退到棧底,這時history.length還是3;當再執(zhí)行一次history.pushState時,會產(chǎn)生一個新的棧頂并指向它,history.length將變?yōu)?,進而才改變了history.length。注意,history.pushState永遠產(chǎn)生新的棧頂并指向它。

圖1-5 棧指針在棧內(nèi)移動
window.history.state作為常量不能直接修改,如window.history.state={}的賦值將不會成功。
- 流量的秘密:Google Analytics網(wǎng)站分析與優(yōu)化技巧(第2版)
- Java從入門到精通(第4版)
- C語言程序設計
- Mastering Ubuntu Server
- Java程序設計:原理與范例
- Android開發(fā)案例教程與項目實戰(zhàn)(在線實驗+在線自測)
- Clojure for Machine Learning
- 移動增值應用開發(fā)技術導論
- 玩轉(zhuǎn).NET Micro Framework移植:基于STM32F10x處理器
- 超好玩的Scratch 3.5少兒編程
- Python預測分析與機器學習
- 百萬在線:大型游戲服務端開發(fā)
- Spring Data JPA從入門到精通
- 嵌入式C編程實戰(zhàn)
- Learning WordPress REST API