history新增方法


history對象包含用戶訪問過的URL,屬於window對象的一部分,傳統的使用中,它擁有length屬性(瀏覽器歷史列表URL數目)

及back()、forward()、go()方法。

 

而新的H5則賦予了其更多的新特性:

 

往返緩存

默認情況下,瀏覽器會緩存當前會話頁面,這樣當下一個頁面點擊后退按鈕,或前一個頁面點擊前進按鈕,瀏覽器便會從緩存中提取並加載此頁面,這個特性被稱為“往返緩存”。

備注: 此緩存會保留頁面數據、DOM和js狀態,實際上是將整個頁面完好無缺地保留

------------沉默分割線-----------------------------------------------------------------------------------------------------------------------

pushState(state, title, url) 

往歷史記錄棧中添加記錄

支持度: IE10+

state: 一個js對象,主要用於在popstate事件中作為參數被獲取

title: 新頁面的標題,部分瀏覽器(比如firefox)忽略此參數,因此一般為null

url: 新歷史記錄的地址,可為頁面地址也可為一個錨點值,新url必須與當前url處於同一個域,否則將拋出異常,此參數若沒有特別標注,會被設為當前文檔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是否存在,也不會再popstate事件中獲取,因為:這個方法僅僅是添加了一條最新記錄,不會觸發頁面刷新

備注:

1.將url設為錨點值時不會觸發hashchange

2.如果設置不同域名地址,會報錯,這樣做的目的是:防止用戶以為它們是同一個網站,若沒有此限制,將很容易進行XSS、CSRF等攻擊方式

------------華麗分割線--------------------------------------------------------------------------------------------------------------------------

replaceState(state, title, url)

支持度: IE10+

參數與pushState一致,但其功能是改變當前的歷史記錄而不是添加新的記錄。

同樣不會觸發popstate

------------璀璨分割線--------------------------------------------------------------------------------------------------------------------------

history.state

支持度: IE10+

返回當前歷史記錄的state

--------------曼妙分割線---------------------------------------------------------------------------------------------------------------------

popstate事件

支持度: IE10+

語法: window.onpopstate= function(event){

  console.log(event.state) //當前歷史記錄的state對象

}//注意大小寫

 

觸發條件: 點擊前進后退按鈕、調用back()、forward()、go()

個人思考: 對於pushState、replaceState無法觸發它,可以從語義上理解,pop有彈出、提取出的意味,是從歷史記錄棧中提取出來,而pushState、replaceState分別是壓入棧和改變元素,自然不會觸發。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM