HTML5歷史狀態管理history API-pushState/replaceState與popstate事件
【本文源址:http://blog.csdn.net/q1056843325/article/details/60607402 轉載請新增該地址】
AJAX技術對我們前端產生了巨大影響
可以讓我們的頁面無重新整理操作減少網路請求
但是它也產生了一些問題
不能夠使用瀏覽器的前進與後退
(後退是瀏覽器非常常用的按鈕)
很久很久以前,Gmail藉助iframe解決了這個問題
但現在,HTML5提供了超級簡單的API
pushState與onpopstate
history.pushState(stateObject, title, url)
包含三個引數
分別是狀態物件、新狀態標題和可選引數相對URL
第一個引數狀態物件應該傳入提供頁面狀態資訊的資料
第二個引數還沒有瀏覽器實現
新增也沒有什麼用,所以可以傳入一個空字串
如果使用了第三個引數,那麼執行這個函式後,瀏覽器地址也會更新
但是不會真的向伺服器傳送請求
當我們從狀態棧中的一個狀態跳到另一個狀態popstate事件就會觸發
(瀏覽器前後翻頁觸發,重新整理頁面不觸發)
它的事件物件中有一個state屬性儲存著當初傳遞給pushState()的狀態物件
下面通過一個小例子來解釋一下
<button id="next">下一頁</button>
當前頁數:<span id="cur">0</span>
要實現點選下一頁,然後當前頁數對應增加
var next = document.getElementById('next');
var cur = document.getElementById('cur');
var page = 0; //表示當前頁數
next.onclick = function(){
page++;
cur.innerHTML = page;
}
這時我們還不能使用瀏覽器的上下翻頁
現在使用history API來新增一些程式碼
var next = document.getElementById('next');
var cur = document.getElementById('cur');
var page = 0;
next.onclick = function(){
page++;
history.pushState({page: page}, '','?page=' + page);
//狀態物件中儲存當前頁數
cur.innerHTML = page;
}
window.onpopstate = function(e){
if(e.state){
cur.innerHTML = e.state.page;
}else{
cur.innerHTML = 0;
}
}
當點選“後退”按鈕回到最開始時(第0頁)
因為沒有狀態,所以e.state值為null
replaceState
除此之外還有一個API用於更新狀態
引數與pushState()前兩個引數相同
呼叫這個方法就會重寫當前的狀態
也就是說替換當前的記錄
<button id="next">下一頁</button>
<button id="update">更新樣式</button>
當前頁數:<span id="cur">0</span>
var next = document.getElementById('next');
var update = document.getElementById('update');
var cur = document.getElementById('cur');
var page = 0;
next.onclick = function(){
page++;
history.pushState({page: page}, '','?page=' + page);
cur.innerHTML = page;
}
update.onclick = function(){
history.replaceState({page: history.state.page + '(已讀)'},'');
//部分瀏覽器實現了history.state返回當前狀態
}
window.onpopstate = function(e){
if(e.state){
cur.innerHTML = e.state.page;
}else{
cur.innerHTML = 0;
}
}
HTML5歷史狀態管理只有簡單的幾個函式
短短几行程式碼,就可以增加狀態記錄的功能
現在各個瀏覽器都實現了這個功能
相關文章
- HTML5歷史管理狀態機制HTML
- Html5使用history物件history.pushState()和history.replaceState()方法新增和修改瀏覽歷史記錄HTML物件
- 操縱瀏覽器歷史記錄 : popstate() 、 history.pushState() 、 window.history.pushState()瀏覽器
- HTML5 history新特性pushState、replaceStateHTML
- 「前端」History API與瀏覽器歷史堆疊管理前端API瀏覽器
- StateShot - 無侵入的歷史狀態管理庫
- StateShot – 無侵入的歷史狀態管理庫
- Html5無重新整理修改Url,history pushState/replaceStateHTML
- 監聽瀏覽器返回,pushState,popstate 事件,window.history物件瀏覽器事件物件
- 利用HTML5的history.replacestate()修改當前頁面的URLHTML
- Javascript history物件的 history.pushState() 和 history.replaceState() 方法JavaScript物件
- History(歷史)命令用法 15 例
- window history pushState replaceState 跳轉原理
- 深入學習History物件管理瀏覽器會話歷史物件瀏覽器會話
- 操縱歷史,利用HTML5 History API實現無重新整理跳轉HTMLAPI
- 事件溯源:是來自事件的狀態與作為狀態的事件? - verraes事件
- 前端狀態管理與有限狀態機前端
- 拉丁字母的歷史(History of the Latin alphabet)Alphabet
- React 狀態管理:狀態與生命週期React
- 人工智慧的歷史(History of artificial intelligence)人工智慧Intel
- 單頁應用巧用history.go()、history.length返回到歷史指定頁面Go
- 前端路由的實現(三) —— History的pushState和replaceState用法前端路由
- 推薦一個 Chrome 瀏覽歷史記錄管理的擴充套件 - History Trends UnlimitedChrome套件MIT
- 程式設計隨想:基於歷史狀態的演算法程式設計演算法
- 4個快速查詢Linux歷史命令的技巧(history)Linux
- Flutter狀態管理 - 初探與總結Flutter
- 通用人工智慧導航:AGI的歷史與現狀人工智慧
- HTML5 : History APIHTMLAPI
- Jim Gray:資料管理歷史
- 7月17日上課 簡單命令、命令歷史(history)、如何獲取幫助、檔案管理
- [Flutter翻譯]eBay汽車與狀態管理Flutter
- Vuex 4與狀態管理實戰指南Vue
- history.pushState() 給網站新增和修改瀏覽歷史記錄網站
- Flutter | 狀態管理Flutter
- Vuex狀態管理Vue
- Html5 History API解析HTMLAPI
- 使用history儲存列表頁ajax請求的狀態
- LangChain 進階歷史對話管理LangChain