這個功能能夠進行傳參,還能夠解決ajax沒法前進和倒退的問題html
首先,history新增的兩個方法history.replaceState()和history.pushState()方法屬於HTML5瀏覽器新增的屬性,因此IE9如下的是不支持的。jquery
直接上代碼:ajax
history.replaceState() 顧名思義就是替換的意思,因此它的做用就是替換當前地址欄的url數組
- <!DOCTYPE HTML>
- <head>
- <script src="jquery-1.8.2.min.js"></script>
-
- <style>
-
- </style>
- <script>
- $(function(){
- $("#bt").click(function(){
- history.replaceState({data:111},"1222","aa.html");
- return false;
- });
- })
-
- </script>
- </head>
- <body class="sapUiBody">
- <input type="button" id="bt" value="show">
-
- </body>
點擊按鈕後,能夠看到頁面地址欄的地址變了,可是頁面並無刷新。瀏覽器
history.replaceState(data,"頁面的title","須要改變的url") 接收三個參數數據結構
history.pushState() 看到push你們首先應該想到的是數組,沒錯,這個方法就是往瀏覽器的history裏壓入一條url,就像數據結構裏的棧同樣,這個壓入的url會在棧url
的最頂端,當你點擊瀏覽器的前進或者倒退按鈕時,便會拿出棧頂的url來定位,從而達到改變history的做用可是並不刷新!spa
- <!DOCTYPE HTML>
- <head>
- <script src="jquery-1.8.2.min.js"></script>
-
- <style>
-
- </style>
- <script>
- $(function(){
- $("#bt").click(function(){
- history.pushState({data:111},"1222","aa.html");
- history.pushState({data:111},"1222","ab.html");//多壓入幾條
- return false;
- });
- })
-
- </script>
- </head>
- <body class="sapUiBody">
- <input type="button" id="bt" value="show">
-
- </body>
其次是.net
window.addEventListener('popstate', function(event) {
console.log(event.state);//data });
還記得上面的pushState方法麼,當你往history的棧裏經過調用這個方法壓入多條數據時,而且你經過點擊瀏覽器的前進倒退按鈕進行改變的時候,這個事件就觸發了,而後就code
是event.state就是上面方法的第一個參數data,而且是和url一一對應的,這樣就實現了傳值
- <!DOCTYPE HTML>
- <head>
- <script src="jquery-1.8.2.min.js"></script>
-
- <style>
-
- </style>
- <script>
- $(function(){
- $("#bt").click(function(){
- history.pushState({data:111},"1222","aa.html");
- history.pushState({data:111},"1222","ab.html");//多壓入幾條
- return false;
- });
-
- window.addEventListener('popstate', function(event) {
- console.log(event.state);
- });
- })
-
- </script>
- </head>
- <body class="sapUiBody">
- <input type="button" id="bt" value="show">
-
- </body>
最後,經過這種方法能夠在popstate的事件裏寫本身的邏輯了,如發送ajax等