利用HTML5的history.replacestate()修改當前頁面的URL
history物件
history物件儲存著使用者上網的歷史記錄,從視窗被開啟的那一刻算起。由於安全方面的考慮,開發人員無法得到使用者瀏覽器的URL,但藉由使用者訪問過的頁面列表,可以在不知道實際URL的情況下實現後退和前進。
跳轉方法
go()
使用go()方法可以在使用者的歷史記錄中任意跳轉。這個方法接收一個引數,表示向後或向前跳轉的頁面數的一個整數值。負數表示向後跳轉(類似於後退按鈕),正數表示向前跳轉(類似於前進按鈕)
go()方法無引數時,相當於history.go(0),可以重新整理當前頁面
back()
back()方法用於模仿瀏覽器的後退按鈕,相當於history.go(-1)
forward()
forward()方法用於模仿瀏覽器的前進按鈕,相當於history.go(1)
如果移動的位置超出了訪問歷史的邊界,以上三個方法並不報錯,而是靜默失敗
[注意]使用歷史記錄時,頁面通常從瀏覽器快取之中載入,而不是重新要求伺服器傳送新的網頁
增改記錄:
history.pushState() , history.replaceState()
HTML5為history物件新增了兩個新方法,history.pushState()和history.replaceState(),用來在瀏覽歷史中新增和修改記錄。state屬性用來儲存記錄物件,而popstate事件用來監聽history物件的變化
pushState()
history.pushState()方法向瀏覽器歷史新增了一個狀態(增加一個記錄)。pushState()方法帶有三個引數:一個狀態物件、一個標題(現在被忽略了)以及一個可選的URL地址
history.pushState(state, title, url);
state object —— 狀態物件是一個由pushState()方法建立的、與歷史紀錄相關的javascript物件。當使用者定向到一個新的狀態時,會觸發popstate事件。事件的state屬性包含了歷史紀錄的state物件。如果不需要這個物件,此處可以填null
title —— 新頁面的標題,但是所有瀏覽器目前都忽略這個值,因此這裡可以填null
URL —— 這個引數提供了新歷史紀錄的地址。新URL必須和當前URL在同一個域,否則,pushState()將丟出異常。這個引數可選,如果它沒有被特別標註,會被設定為文件的當前URL
replaceState(引數見上所述)
把當前的頁面的歷史記錄替換掉
他們最大的特點是新增或替換歷史記錄後,瀏覽器位址列會變成你傳的地址,而頁面並不會重新載入或跳轉。
例如,假設當前的頁面地址是example.com/1.html,且history中此時只有一條當前頁面的記錄。
當你執行 history.pushState(null, null, “2.html”)後,瀏覽器的位址列會顯示example.com/2.html,但並不會跳轉到2.html,甚至並不會去檢查2.html存不存在,只是加入一個最新的歷史記錄項。此時history中會有兩個記錄。假如你此時點選頁面上的link跳轉到另外一個頁面後,點選瀏覽器的後退按鈕,則url會變成example.com/2.html,如果此前的1.html的頁面瀏覽器有快取的話會顯示1.html的內容,否則會發起請求example.com/2.html。如果再次點後退,url會變成example.com/1.html。
而如果執行 history.replaceState(null, null, “2.html”)的話,瀏覽器的位址列也會顯示example.com/2.html,區別是history中只有當前2.html的記錄,而1.html的記錄已被替換掉。
利用這些特性,可以用來修改當前頁面的URL來達成某些目的,比如可以用來記住搜尋條件。
參考原文連結
相關文章
- react獲取當前頁面的url引數React
- PHP中獲取當前頁面的完整URLPHP
- asp.net獲取當前頁面的url地址ASP.NET
- PHP中獲取當前頁面的各種URL格式PHP
- pbootcms模板如何輸出當前頁面的完整url地址boot
- 利用js獲取當前頁面的域名程式碼JS
- javascript如何獲取當前網頁的url地址JavaScript網頁
- 獲取當前頁面的上一個頁地址
- 獲取當前頁面的topViewControllerViewController
- PHP獲取當前頁面完整URL地址PHP
- 關於利用jQuery實現愛奇藝裡面的滑鼠移入改變當前頁面的功能的實現原理jQuery
- javascript獲取當前頁面的來路頁面地址JavaScript
- javascript如何獲取當前頁面的路徑JavaScript
- JS實現點選按鈕複製當前介面的URLJS
- JS指令碼中重新整理當前頁面的方法JS指令碼
- javascript獲取當前urlJavaScript
- 超全的JS重新載入當前頁面的幾種方式JS
- vue專案重新整理當前頁面的三種方法Vue
- 帝國CMS利用PHP判斷當前頁面是否為首頁PHP
- H5 記錄當前頁面的選中狀態,sessionStorageH5Session
- jquery實現頁面離開時檢測當前頁面是否被修改,修改則提示jQuery
- SAP Spartacus 如何獲得當前渲染頁面的 CMS 後設資料
- 帝國CMS當前位置newsnav“首頁”兩個字修改方法
- JS 點選複製當前URL地址JS
- vue重新整理當前頁面或者當前元件Vue元件
- jquery/js透過當前URL對當前欄目連結高亮顯示jQueryJS
- iframe下重新整理頁面無法重新整理當前頁面的解決辦法
- android利用adb命令,獲取當前介面(當前Task的棧頂).Android
- Html5無重新整理修改Url,history pushState/replaceStateHTML
- MVC中獲取當前URL、controller、actionMVCController
- 獲取當前修改的行記錄資料
- github_修改當前倉庫的預設分支Github
- 修改oracle當前會話的語言環境Oracle會話
- Android 判斷當前的介面是否是桌面的方法Android
- 請教如何在標籤的dostart裡獲取當前頁面的URL地址以及父標籤的標籤型別和某個屬性的屬性值呢?型別
- 小謝第36問:elemet - table表格修改後表格行高亮顯示且定位到當前行當前頁
- 前後端分離,html頁面中怎麼獲取當前登入使用者資訊,並寫入html頁面的指定位置?後端HTML
- git 解決衝突 —— git stash 當前修改Git