參考文檔:https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history
實現(xiàn)目標
? ? ? 1.頁面的跳轉(前進后退钉蒲,點擊等)不重新請求頁面
? ? ? 2.頁面URL與頁面展現(xiàn)內容一致(符合人們對傳統(tǒng)網(wǎng)頁的認識)
? ? ? 3.在不支持的瀏覽器下降級成傳統(tǒng)網(wǎng)頁的方式
使用到的API
? ? ? history.state
? ? ? ? 當前URL下對應的狀態(tài)信息。如果當前URL不是通過pushState或者replaceState產(chǎn)生的灯蝴,那么history.state是null鹊杖。
? ? ? history.pushState(state, title, url)
? ? ? ? 將當前URL和history.state加入到history中吭练,并用新的state和URL替換當前襟雷。不會造成頁面刷新端三。
? ? ? ? state:與要跳轉到的URL對應的狀態(tài)信息锯茄。
? ? ? ? title:標題,可以為空谈火。
? ? ? ? url:要跳轉到的URL地址侈询,不能跨域。
? ? ? ? history.replaceState
? ? ? ? 用新的state和URL替換當前堆巧。不會造成頁面刷新妄荔。
? ? ? ? state:與要跳轉到的URL對應的狀態(tài)信息。
? ? ? ? ?title:不知道干啥用谍肤,傳空字符串就行了啦租。
? ? ? ? ?url:要跳轉到的URL地址,不能跨域荒揣。
window.onpopstate
? ? ? ?history.go和history.back(包括用戶按瀏覽器歷史前進后退按鈕)觸發(fā)篷角,并且頁面無刷的時候(由于使用pushState修改了history)會觸發(fā)popstate事件,事件發(fā)生時瀏覽器會從history中取出URL和對應的state對象替換當前的URL和history.state系任。通過event.state也可以獲取history.state恳蹲。