Html5無重新整理修改Url,history pushState/replaceState
來源URL:http://blog.sina.com.cn/s/blog_70a3539f0101ecyg.html
一、認識window.history
window.history表示window物件的歷史記錄,是由使用者主動產生,並且接受javascript指令碼控制的全域性物件。window物件通過history物件提供對覽器歷史記錄的訪問能力。它暴露了一些非常有用的方法和屬性,讓你在歷史記錄中自由前進和後退。
1、歷史記錄的前進和後退
在歷史記錄中後退,可以這麼做:
- window.history.back();
這就像使用者點選瀏覽器的後退按鈕一樣。
類似的,你可以前進,就像在瀏覽器中點選前進按鈕,像這樣:
window.history.forward();
2、移動到指定歷史記錄點
通過指定一個相對於當前頁面位置的數值,你可以使用go()方法從當前會話的歷史記錄中載入頁面(當前頁面位置索引值為0,上一頁就是-1,下一頁為1)。
要後退一頁(相當於呼叫back()):
- window.history.go(-1);
向前移動一頁(相當於呼叫forward()):
- window.history.go(1);
類似的,傳遞引數“2”,你就可以向前移動2個記錄點。你可以檢視length屬性值,瞭解歷史記錄棧中一共有多少個記錄點:
- window.history.length;
二、修改歷史記錄點
HTML5的新API擴充套件了window.history,使歷史記錄點更加開放了。可以儲存當前歷史記錄點、替換當前歷史記錄點、監聽歷史記錄點,下面逐一簡要說明一下。
1、儲存當前歷史記錄點
儲存的方式類似於陣列的入棧(Array.push()
),在window.history裡新增一個歷史記錄點,例如:
- //當前的url為:http://www.qingdou.me/index.html
- varjson={time:new Date().getTime()};
- //@狀態物件:記錄歷史記錄點的額外物件,可以為空
- //@頁面標題:目前所有瀏覽器都不支援
- //@可選的url:瀏覽器不會檢查url是否存在,只改變url,url必須同域,不能跨域
- window.history.pushState(json,”",”http://www.qingdou.me/post-1.html”);
var state = { title: title, url: options.url, otherkey: othervalue }; window.history.pushState(state, document.title, url);
執行了pushState方法後,頁面的url地址為http://www.qingdou.me/post-1.html。
2、替換當前歷史記錄點
window.history.replaceState和window.history.pushState類似,不同之處在於replaceState不會在window.history裡新增歷史記錄點,其效果類似於window.location.replace(url),都是不會在歷史記錄點裡新增一個記錄點的。當你為了響應使用者的某些操作,而要更新當前歷史記錄條目的狀態物件或URL時,使用replaceState()方法會特別合適。
3、監聽歷史記錄點
監聽歷史記錄點,直觀的可認為是監聽URL的變化,但會忽略URL的hash部分,監聽URL的hash部分,HTML5有新的API為onhashchange,我的部落格裡也有說到該方法和跨瀏覽器的相容解決方案。可以通過window.onpopstate來監聽url的變化,並且可以獲取儲存在該歷史記錄點的狀態物件,也就是上文說到的json物件,如:
- //當前的url為:http://www.qingdou.me/post-1.html
- window.onpopstate=function()
- {
- //獲得儲存在該歷史記錄點的json物件
- varjson=window.history.state;
- //點選一次回退到:http://www.qingdou.me/index.html
- //獲得的json為null
- //再點選一次前進到:http://www.qingdou.me/post-1.html
- //獲得json為{time:1369647895656}
- }
值得注意的是:javascript指令碼執行window.history.pushState和window.history.replaceState不會觸發onpopstate事件。
還有一點注意的是,谷歌瀏覽器和火狐瀏覽器在頁面第一次開啟的反應是不同的,谷歌瀏覽器奇怪的是回觸發onpopstate事件,而火狐瀏覽器則不會。
瀏覽器相容性表:
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
replaceState, pushState | 5 | 4.0 (2.0) | 10 | 11.50 | 5.0 |
history.state | 18 | 4.0 (2.0) | 10 | 11.50 | 6.0 |
基於ajax與html無重新整理換url的jquery外掛pjax。大家可以去網上看看。
相關文章
- HTML5 history新特性pushState、replaceStateHTML
- window history pushState replaceState 跳轉原理
- 利用HTML5的history.replacestate()修改當前頁面的URLHTML
- Html5使用history物件history.pushState()和history.replaceState()方法新增和修改瀏覽歷史記錄HTML物件
- Javascript history物件的 history.pushState() 和 history.replaceState() 方法JavaScript物件
- HTML5歷史狀態管理history API-pushState/replaceState與popstate事件HTMLAPI事件
- 前端路由的實現(三) —— History的pushState和replaceState用法前端路由
- 使用Ajax和history.pushState()實現無重新整理改變頁面內容和位址列Url
- HTML5 History API實現無重新整理跳轉HTMLAPI
- 簡單聊聊H5的pushState與replaceStateH5
- 操縱瀏覽器歷史記錄 : popstate() 、 history.pushState() 、 window.history.pushState()瀏覽器
- history.pushState() 給網站新增和修改瀏覽歷史記錄網站
- 操縱歷史,利用HTML5 History API實現無重新整理跳轉HTMLAPI
- history.pushState的實際使用筆記筆記
- 【譯】使用 HTML5 History API 控制瀏覽器位址列 URLHTMLAPI瀏覽器
- 瀏覽器 history location pushstate的解決疑問瀏覽器
- HTML5中History.back()頁面後退重新整理頁面HTML
- history pushState 實現瀏覽器前進與後退瀏覽器
- HTML5 : History APIHTMLAPI
- Html5 History API解析HTMLAPI
- 監聽瀏覽器返回,pushState,popstate 事件,window.history物件瀏覽器事件物件
- 使用HTML5的History APIHTMLAPI
- HTML5 history API實踐HTMLAPI
- Laravel+vue實現history模式URL可行方案LaravelVue模式
- Laravel + vue-router 實現 HTML5 History 模式LaravelVueHTML模式
- 無重新整理上傳檔案以及HTML5下的實現方式HTML
- js修改瀏覽器urlJS瀏覽器
- linux下修改history命令儲存條數Linux
- history.js 一個無重新整理就可改變瀏覽器欄地址的外掛(不依賴jquery)JS瀏覽器jQuery
- 使用js修改url地址引數JS
- window.pushState示例
- CentOS 7 如何修改history命令儲存的最大數CentOS
- 配置nginx解決vue路由history模式下重新整理404問題NginxVue路由模式
- 瀏覽器可以自動修改URL?瀏覽器
- javascript如何修改url地址的引數JavaScript
- 如何修改 Git 遠端倉庫 URLGit
- Ajax區域性頁面重新整理和History API結合的陷阱API
- 使用 JavaScript 修改瀏覽器 URL 位址列JavaScript瀏覽器