history.pushState 實現瀏覽器頁面不刷新修改url鏈接


  最近遇到了在不刷新頁面的情況下修改瀏覽器url鏈接的需求,遂求助於萬能的度娘,最終通過history.pushState()完美解決問題。現在將我理解的一些內容分享一下,不對的地方歡迎大家指出。

  在使用方法前首先需要了解它的兼容性,history.pushState()存在一定的兼容性問題,下圖展示了部分瀏覽器的兼容情況,當然也可以通過 https://caniuse.com/#search=pushState 查看支持的瀏覽器版本。

history.pushState()的瀏覽器兼容性

 

  簡單介紹一下方法的相關信息:

history.pushState(stateObject, title, url);

history.pushState()主要是在不刷新瀏覽器的情況下,創建新的瀏覽記錄並插入瀏覽記錄隊列中。

1.狀態對象(stateObject)--stateObject是一個JavaScript對象,通過pushState方法可以將stateObject內容傳遞到新頁面中。

2.標題(title)--幾乎沒有瀏覽器支持該參數,但是傳一個空字符串會比較安全。

3.地址(url)--新的歷史記錄條目的地址(可選,不指定的話則為文檔當前URL);瀏覽器在調用pushState()方法后不會加載該地址;傳入的URL與當前URL應該是同源的,否則,pushState()會拋出異常。

 

  下面以博客園官網為例具體說明:

  打開博客園官網鏈接 https://www.cnblogs.com/ ,F12打開控制台並輸入 window.history,可以得到window.history的相關信息,如下圖所示,我們關注的主要是紅框標出的三個信息,其中length為瀏覽記錄隊列長度,由於這個頁面是新打開的,隊列中只有當前頁面鏈接相關信息,其值為1,state值將在下面介紹,pushState即history.pushState(),不多贅述。

  接下來我們開始實現修改瀏覽器url鏈接,在控制台輸入 

window.history.pushState({status: 0} ,'' ,'?data=1')

 

執行后頁面沒有刷新,觀察瀏覽器的鏈接變成了 https://www.cnblogs.com/?data=1,成功實現在不刷新頁面的情況下修改瀏覽器url鏈接。pushState()的參數url有多種用法,除了上述用法,還可以是 ‘https://www.cnblogs.com/?data=1’ 、‘data/1’、'/data/1' 、‘data=1’ 等等,大家可以自己嘗試,同時需要注意url不支持跨域。

  再次獲取window.history信息,對比pushState方法執行前后window.history的變化可以發現,length變為2,這是因為方法創建了新的瀏覽記錄,並將新的鏈接插入到瀏覽記錄隊列中;state值為{status: 0},與方法的參數stateObject相對應,實現了數據傳遞,新頁面中可以通過執行 window.history.state.status ,得到參數中status的值0,最后附上結果如圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM