1. 程式人生 > >history.pushState()無重新整理改變url

history.pushState()無重新整理改變url

今天在做一個vue的搜尋功能,需要從搜尋結果頁面跳轉到細節頁面,然後點選返回還能返回到剛剛的結果頁面,如果只用window.history.go(-1)當然會重新重新整理搜尋頁面,當然是不行的。

我嘗試了兩種方法都是通過改變url來實現,一種是window.location.href拼接一個搜尋的key值,點選搜尋的同時,重新整理了頁面,url改變了,功能是實現了,可是bug來了。。。。,搜尋頁面閃爍後才進入結果頁,而結合不跳轉頁面就不會發生閃爍的情況,所以當頁面重新整理時,vue例項都會被重新載入。

所以解決辦法就是尋找不重新整理就能改變url的方法。百度許久,終於找到history,window.history引入了兩個api,pushState和replaceState,我們可以很方便的達到改變url而不過載頁面的目的。

兩種api都能改變當前的url,不同的是,pushState在瀏覽器中建立一條新的歷史記錄,而replaceState僅僅替換當前地址為指定url

history.pushState && history.pushState({ title: value }, value, 'pushState.html?key='+value)

在我的需求中,我使用了replaceState

最後介紹另一種無重新整理技巧,window.location.hash,url中#為網頁中的一個位置,當讀取此url時,頁面會自動滾動到錨點處。這種方法不會向伺服器傳送請求,也不會過載頁面。可讀寫。讀取時,可以用來判斷網頁狀態是否改變;寫入時,則會在不過載網頁的前提下,創造一條訪問歷史記錄。