history pushState 實現瀏覽器前進與後退
今天做了個介面需要用到ajax進行頁面跳轉,當然使用ajax進行頁面跳轉有它的優點,比如降低伺服器壓力,縮短使用者等待時間等,但是一個很明顯的缺點就是瀏覽器的前進和後退按鈕失效了,好在HTML5的history物件的出現比較好的解決了這個問題,所以去網上找一些pushState使用的文章,但是大多數都是隻講原理沒有實現的例項,理解起來還是不太容易的。現在將我理解的一些內容說一下,不對的地方歡迎大家指出。
首先講一下API:
首先是方法有兩個history.pushState()和history.replaceState()
事件有一個window.onpopstate
pushState()方法,接收三個引數
a state object, a title (which is currentlyignored), and (optionally) a URL
state物件儲存的是被pushState頁面的資訊的一個拷貝,也就是說以後你要用到的資訊,都可以放到這個物件中。
url是可選的,負責改變瀏覽器的位址列中顯示的url,如果沒有指定url,你點選前進後退按鈕頁面還是會變化,只是瀏覽器的位址列上顯示的url會一直保持不變。
onpopstate事件,每次點選瀏覽器的前進和後退按鈕,就會觸發window的Onpopstate事件。
最後使用history.state獲取當前所在頁面的state物件,也就是在上面pushState中儲存的。
下面以一個例子具體說明。
首先,我們一般做一個網站,剛進去的首頁是沒有pathname的,為了讓瀏覽器能夠後退到首頁,我們對首頁的url進行攔截,即改變首頁的url。這裡面history.replaceState只是改變網頁的url地址,不會改變網頁內容。這裡面的state儲存的是你要在將來獲取到的任何資訊。
var url = “blog/index.html”;
var state = {url:url
}
history.replaceState(state,””,"blog/index.html");
接下來,當呼叫ajax使頁面內容傳送變化之後,我們將這個變化的頁面狀態儲存起來,如
var url = “blog/index.html”;
var state = {
url:url
}
window.history.pushState(state,"",url);
最後,給window新增監聽,當popstate被觸發之後,我們通過history.state獲取到達頁面的資訊,通過.操作符獲取該頁面的資訊,如我這裡儲存了該頁面的url,就通過history.state.url獲取,然後通過這個url載入頁面。
window.addEventListener("popstate",function() {
var currentUrl = history.state.url;
$(".container").load(currentUrl +" #container");
});
相關文章
- 08-棧:如何實現瀏覽器的前進和後退功能?瀏覽器
- 操縱瀏覽器歷史記錄 : popstate() 、 history.pushState() 、 window.history.pushState()瀏覽器
- 瀏覽器 history location pushstate的解決疑問瀏覽器
- 瀏覽器“後退”、“前進”或可以這麼去監聽瀏覽器
- [html]history禁用瀏覽器的後退功能(包括其他操作後退的按鈕,操作等)HTML瀏覽器
- 監聽瀏覽器返回,pushState,popstate 事件,window.history物件瀏覽器事件物件
- ASP.Net頁面瀏覽器“後退”功能的實現ASP.NET瀏覽器
- JS禁止瀏覽器後退鍵JS瀏覽器
- 監聽瀏覽器的後退事件瀏覽器事件
- vue中前進重新整理、後退快取使用者瀏覽資料和瀏覽位置的實踐Vue快取
- 監控頁面後退前進,瀏覽器文件載入事件之pageshow、pagehide瀏覽器事件IDE
- js 禁用瀏覽器後退按鈕效果JS瀏覽器
- 瀏覽器歷史,判斷是點選了後退按鈕還是前進按鈕瀏覽器
- history.pushState() 給網站新增和修改瀏覽歷史記錄網站
- js實現的點選前進和後退功能JS
- Ios、Android微信瀏覽器後退跳轉實現,及遇到的bugiOSAndroid瀏覽器
- 禁止頁面後退JS(相容各瀏覽器)JS瀏覽器
- Html5使用history物件history.pushState()和history.replaceState()方法新增和修改瀏覽歷史記錄HTML物件
- vue實現前進重新整理,後退不重新整理Vue
- 理解瀏覽器歷史記錄(2)- hashchange、pushState瀏覽器
- 「前端」History API與瀏覽器歷史堆疊管理前端API瀏覽器
- vue路由前進後退動畫Vue路由動畫
- 前端路由的實現(三) —— History的pushState和replaceState用法前端路由
- history.pushState的實際使用筆記筆記
- vue單頁實現前進重新整理後退不重新整理Vue
- 點選瀏覽器後退按鈕時彈出提示資訊瀏覽器
- 瀏覽器後退操作時,表單狀態的還原瀏覽器
- 判斷當前瀏覽器是不是微信瀏覽器瀏覽器
- Javascript history物件的 history.pushState() 和 history.replaceState() 方法JavaScript物件
- win10系統瀏覽器閃退怎麼辦 win10瀏覽器閃退的方法Win10瀏覽器
- C#使用雙連結串列來實現模擬IE前進後退功能C#
- javascript判斷當前瀏覽器是不是微信瀏覽器JavaScript瀏覽器
- vue填坑之解決部分瀏覽器不支援pushState方法Vue瀏覽器
- 網頁點選後退再前進出現亂碼原因網頁
- window history pushState replaceState 跳轉原理
- 再談vue前進重新整理,後退不重新整理,include實現方法。Vue
- vue-route-transition路由前進後退動畫Vue路由動畫
- 為什麼win10瀏覽器總是閃退_win10瀏覽器閃退是怎麼回事Win10瀏覽器