官术网_书友最值得收藏!

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={}的賦值將不會成功。

主站蜘蛛池模板: 金门县| 临澧县| 武义县| 五原县| 彰化县| 阿鲁科尔沁旗| 呈贡县| 易门县| 和顺县| 祁连县| 青浦区| 通渭县| 杂多县| 南部县| 林甸县| 会东县| 牙克石市| 正安县| 普安县| 安福县| 翁源县| 黔东| 临海市| 策勒县| 定州市| 都安| 磐石市| 册亨县| 黄骅市| 缙云县| 高碑店市| 青铜峡市| 龙江县| 丹巴县| 阿拉尔市| 普兰店市| 黄平县| 安康市| 永春县| 肇源县| 肥东县|