H5中對history棧的操作


今天研究一下H5中history操作的相關知識,首先梳理一下基本內容:

一、在history中的跳轉

使用 back()forward()和 go() 方法來完成在用戶歷史記錄中向后和向前的跳轉。

window.history.back();
window.history.forward();
window.history.go(-1);
window.history.go(1);

可以通過查看長度屬性的值來確定的歷史堆棧中頁面的數量:

let numberOfEntries = window.history.length;

二、添加和修改歷史記錄中的條目,即對history棧的操作

HTML5引入了 history.pushState() 和 history.replaceState() 方法,它們分別可以添加和修改歷史記錄條目。這些方法通常與window.onpopstate 配合使用。

使用 history.pushState() 可以改變referrer,它在用戶發送 XMLHttpRequest 請求時在HTTP頭部使用,改變state后創建的 XMLHttpRequest 對象的referrer都會被改變。因為referrer是標識創建  XMLHttpRequest 對象時 this 所代表的window對象中document的URL。

pushState() 方法:

  需要三個參數: 一個狀態對象, 一個標題 (目前被忽略), 和 (可選的) 一個URL

  注意 pushState() 絕對不會觸發 hashchange 事件,即使新的URL與舊的URL僅哈希不同也是如此。

let stateObj = {
    foo: "bar",
};

history.pushState(stateObj, "page 2", "bar.html");

replaceState() 方法:

history.replaceState() 的使用與 history.pushState() 非常相似,區別在於  replaceState()  是修改了當前的歷史記錄項而不是新建一個。 注意這並不會阻止其在全局瀏覽器歷史記錄中創建一個新的歷史記錄項。

replaceState() 的使用場景在於為了響應用戶操作,你想要更新狀態對象state或者當前歷史記錄的URL。

let stateObj = {
    foo: "bar",
};

history.pushState(stateObj, "page 2", "bar.html");

popstate 事件:

每當活動的歷史記錄項發生變化時, popstate 事件都會被傳遞給window對象。並且popstate 被觸發時能得到的狀態對象。

當然,也可以直接讀取當前歷史記錄項的狀態對象state,而不必等待popstate 事件, 只需要這樣使用history.state 屬性: 

 


免責聲明!

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



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