這篇文章主要介紹了javascript History對象原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
length
history.length屬性保存著歷史記錄的URL數量。初始時,該值為1。由于IE10+瀏覽器在初始時返回2,存在兼容性問題,所以該值并不常用
跳轉方法
go()、back()和forward()
如果移動的位置超出了訪問歷史的邊界,以上三個方法并不報錯,而是靜默失敗
[注意]使用歷史記錄時,頁面通常從瀏覽器緩存之中加載,而不是重新要求服務器發送新的網頁。不觸發onload
增改記錄
HTML5為history對象添加了兩個新方法,history.pushState()和history.replaceState(),用來在瀏覽歷史中添加和修改記錄。state屬性用來保存記錄對象,而popstate事件用來監聽history對象的變化
[注意]ie9不支持
【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
假定當前網址是example.com/1.html,使用pushState方法在瀏覽記錄(history對象)中添加一個新記錄
var stateObj = { foo: 'bar' };history.pushState(stateObj, 'page 2', '2.html');添加上面這個新記錄后,瀏覽器地址欄立刻顯示example.com/2.html,但并不會跳轉到2.html,甚至也不會檢查2.html是否存在,它只是成為瀏覽歷史中的最新記錄。假如這時訪問了google.com,然后點擊了倒退按鈕,頁面的url將顯示2.html,但是內容還是原來的1.html。再點擊一次倒退按鈕,url將顯示1.html,內容不變
總之,pushState方法不會觸發頁面刷新,只是導致history對象發生變化,地址欄的顯示地址發生變化
如果pushState的url參數,設置了一個新的錨點值(即hash),并不會觸發hashchange事件,,即使新的URL和舊的只在hash上有區別
如果設置了一個跨域網址,則會報錯。這樣設計的目的是,防止惡意代碼讓用戶以為他們是在另一個網站上
新聞熱點
疑難解答
圖片精選