BOM包括五個對象柜砾,window湃望、navigation、screen痰驱、location喜爷、history,其中l(wèi)ocation和history都是跟頁面路由相關(guān)的萄唇,且它們都是window 對象的一部分檩帐,可通過 window.history 屬性對其進行訪問。
1. hash
通過hash改變頁面url另萤,方法是location.hash = 'xxx'
-
先清空network內(nèi)的請求
-
在控制臺輸入location.hash = 'aaa'
-
觀察到瀏覽器沒有請求新數(shù)據(jù)湃密,頁面也沒有刷新
2. history模式
history模式本質(zhì)上是用一種類似于棧結(jié)構(gòu)的方式來存取路由,通過history.pushState(data,title,url)可以更改頁面url
-
在控制臺輸入history.pushState({},'','bbb')四敞,頁面路由由aaa變成了bbb泛源,同樣瀏覽器沒有請求新數(shù)據(jù),頁面也沒有刷新
- 再次壓入兩個url:bbb和ccc忿危,此時棧頂?shù)膗rl是ccc达箍,然后使用history.back()方法移除ccc,就相當于返回上一個頁面了
注意铺厨,back要加()不然會返回一個function
3. history的其他方法
- history.replaceState(data,title,url):顧名思義缎玫,替換當前頁面硬纤,無法返回和前進,有點類似于重定向
-history.forward():與history.back()相反赃磨,這個是前進到下一個頁面 - history.go(delta):這個是back和forward的集成版筝家,通過delta控制頁面的變化,hisroty.go(-1) = history.back()邻辉,hisroty.go(1) = history.forward()溪王,hisroty.go(-2) = history.back()之后再history.back()
注意history不支持鏈式調(diào)用,因為各個方法的返回值都是undefined值骇,比如history.back().back()會報錯Cannot read property 'back' of undefined