搜尋
首頁web前端H5教程深入了解h5中history特性--pushState、replaceState

DOM中的window物件透過window.history方法提供了瀏覽器歷史記錄的讀取,讓你可以在用戶的訪問記錄中前進和後退。

#HTML5開始,我們可以開始操作這個歷史記錄堆疊。

1.History

#使用back(),forward(),go()方法可以在使用者的歷史記錄中前進和後退

#前進和後退

後退:

window.history.back();

這個方法會像使用者點擊了瀏覽器工具列上的返回鍵一樣。

同樣的,也可以用以下方法產生使用者前進行為:

window.history.forward();

移動到歷史記錄中特定的位置

你可以使用go()方法從session歷史中載入特定的頁面。

向後移動一頁:

window.history.go(-1);

向前移動一頁:

window.history.go(1);

類似的,你可以前進或後退多頁。

也可以透過檢查瀏覽器歷史記錄的length屬性來找到歷史記錄堆疊中的頁面總數。

var numberOfEntries = window.history.length;

注意:IE支援向go( )方法傳URL參數。

2.新增和修改history實體

Gecko2開始引入 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)

HTML5引入了histt​​ory.pushState()history.replaceState()這兩個方法,他們允許新增和修改history實體。同時,這些方法會和window.onpostate事件一起運作。

#

使用history.pushState()方法来修改referrer,这种方法可以被用在经过修改状态后而为xmlhttpRequest对象创建的http header中。这个referrer会是创建XMLHttpRequest documentURL

pushState 用于向 history 添加当前页面的记录,而 replaceState  pushState 的用法完全一样,唯一的区别就是它用于修改当前页面在 history 中的记录。

例子

假设http://mozilla.org/foo.html页面执行了一下JS

var stateObj = { foo: "bar" }; history.pushState(stateObj, "page 2", "bar.html");

这种方法将会使url地址栏显示http://mozilla.org/bar.html,但浏览器不会加载bar.html页面,即使这个页面存在也不会加载。

现在再次假设用户继续访问http://google.com,然后点击后退。这时,url地址栏将会,http://mozilla.org/bar.html,页面会得到popstate事件(chrome),这个状态对象会包含一个stateObjcopy。这个页面看起来像foo.html+

這時,我們再次點擊後退,URL將變成http://mozilla.org/foo.htmldocument將得到另一個popstate事件和為nullstate物件。這次的返回動作並沒有改變文檔的內容。 (也許會過一會嘗試載入…chrome

pushState方法

#pushState()有三個參數:state對象,標題(現在是被忽略,未作處理)URL(可選)。具體細節:

·        state#物件 –state物件是一個JavaScript物件,它關係到由pushState()方法建立出來的新的history實體。用來儲存關於你所要插入到歷史 所記錄的條目的相關資訊。 State物件可以是任何Json字串。因為firefox會使用使用者的硬碟來存取state對象,這個物件的最大儲存空間就是640k。如果大於這個數 值,則pushState()方法會拋出一個例外。如果確實需要更多的空間來存儲,請使用本地存儲。

·        title#—firefox現在回忽略這個參數,雖然它可能將來會被使用。而現在最安全的使用方式是傳一個空字串,以防止將來的修改。或者可以傳一個簡短的標題來表示state

#########

·        #URL—此參數用來傳遞新的history實體的URL,注意瀏覽器將不會會在呼叫pushState()方法後載入這個URL。但也許會過一會嘗試載入這個URL。例如在用戶重啟了瀏覽器後,新的url可以不是絕對路徑。如果是相對路徑,那麼它會相對於現有的url。新的url必須和現有的url同域,否則pushState()將拋出異常。這個參數是選填的,如果為空,則會被置為document目前的url。

某種意義上來說,呼叫pushState()方法很像設定了window.location = “#foo”,這兩者都會建立和啟動另一個關聯到目前documenthistory實體,但pushState()另外有一些優點:

##l 新的url可以是任何和目前url同域的url,相較之下,如果只設定hash#,window.location會保持在同一個document

如果不需要,你可以不修改url。比較而言,設定window.location = “#foo”;只產生新的history實體,如果你目前的hash不是#foo

################

你可以將任意的資料與你的新history實體關聯。使用基於hash的方法,需要將所有相關的資料編碼為一個短字串。

注意,pushState()方法不會使hashchange時間發生,即使是新舊url只是hash不同。

#replaceState()方法

history.replaceState() 用起來很像pushState(),除了replaceState()是用來修改目前的history實體而不是創建一個新的。這個方法有時會很有用,當 你需要對某些使用者行為反應而更新一個state物件或當前history實體時,可以使用它來更新state物件或目前history實體的url

popstate事件#當history實體改變時,popstate 事件將會發生。如果history實體是有pushStatereplaceState方法產生的,popstate事件的state屬性會包含一份來自history實體的state物件的拷貝

#詳見

window.onpopstate##### ####

读取当前的state

当页面加载时,它可能会有一个非空的state对象。这可能发生在当页面设置一个state对象(使用pushState或者replaceState)之后用户重启了浏览器。当页面重新加载,页面将收到onload事件,但不会有popstate事件。然而,如果你读取history.state属性,将在popstate事件发生后得到这个state对象

var currentState = history.state;

Browsers: Tested and Working In

HTML5 Browsers

Chrome 8,9,10
Firefox 4
Safari 5
Opera 11
Safari iOS 4.3
HTML4 Browsers

IE6,7,8,9
Firefox 3
Opera 10
Safari 4
Safari iOS prior to version 4.3

【相关推荐】

1. 特别推荐“php程序员工具箱”V0.1版本下载

2. js中的window.history的用法(一)

3. js中的window.history的用法(二)

4. 详细介绍h5中的history.pushState()使用实例

5. h5中History API 对Web应用的影响

以上是深入了解h5中history特性--pushState、replaceState的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越基礎:H5代碼中的高級技術超越基礎:H5代碼中的高級技術May 02, 2025 am 12:03 AM

H5的高級技巧包括:1.利用進行複雜圖形繪製,2.使用WebWorkers提升性能,3.通過WebStorage增強用戶體驗,4.實現響應式設計,5.利用WebRTC實現實時通信,6.進行性能優化和最佳實踐。這些技巧幫助開發者構建更動態、互動和高效的Web應用。

H5:網絡內容和設計的未來H5:網絡內容和設計的未來May 01, 2025 am 12:12 AM

H5(HTML5)將通過新元素和API提升網頁內容和設計。 1)H5增強了語義化標記和多媒體支持。 2)它引入了Canvas和SVG,豐富了網頁設計。 3)H5的工作原理是通過新標籤和API擴展HTML功能。 4)基本用法包括使用創建圖形,高級用法涉及WebStorageAPI。 5)開發者需注意瀏覽器兼容性和性能優化。

H5:網絡開發的新功能和功能H5:網絡開發的新功能和功能Apr 29, 2025 am 12:07 AM

H5帶來了多項新功能和能力,極大提升了網頁的互動性和開發效率。 1.語義化標籤如、增強了SEO。 2.多媒體支持通過和標籤簡化了音視頻播放。 3.Canvas繪圖提供了動態圖形繪製工具。 4.本地存儲通過localStorage和sessionStorage簡化了數據存儲。 5.地理位置API便於開發基於位置的服務。

H5:HTML5的關鍵改進H5:HTML5的關鍵改進Apr 28, 2025 am 12:26 AM

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

HTML5:標準及其對Web開發的影響HTML5:標準及其對Web開發的影響Apr 27, 2025 am 12:12 AM

HTML5的核心特性包括語義化標籤、多媒體支持、離線存儲與本地存儲、表單增強。 1.語義化標籤如、等,提升代碼可讀性和SEO效果。 2.和標籤簡化多媒體嵌入。 3.離線存儲和本地存儲如ApplicationCache和LocalStorage,支持無網絡運行和數據存儲。 4.表單增強引入新輸入類型和驗證屬性,簡化處理和驗證。

H5代碼示例:實際應用和教程H5代碼示例:實際應用和教程Apr 25, 2025 am 12:10 AM

H5提供了多種新特性和功能,極大地增強了前端開發的能力。 1.多媒體支持:通過和元素嵌入媒體,無需插件。 2.畫布(Canvas):使用元素動態渲染2D圖形和動畫。 3.本地存儲:通過localStorage和sessionStorage實現數據持久化存儲,提升用戶體驗。

H5和HTML5之間的連接:相似性和差異H5和HTML5之間的連接:相似性和差異Apr 24, 2025 am 12:01 AM

H5和HTML5是不同的概念:HTML5是HTML的一個版本,包含新元素和API;H5是基於HTML5的移動應用開發框架。 HTML5通過瀏覽器解析和渲染代碼,H5應用則需要容器運行並通過JavaScript與原生代碼交互。

H5代碼的基礎:密鑰元素及其目的H5代碼的基礎:密鑰元素及其目的Apr 23, 2025 am 12:09 AM

HTML5的關鍵元素包括、、、、、等,用於構建現代網頁。 1.定義頭部內容,2.用於導航鏈接,3.表示獨立文章內容,4.組織頁面內容,5.展示側邊欄內容,6.定義頁腳,這些元素增強了網頁的結構和功能性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具