三點:html
精力老是有限的,昨天一衝動,在上海浦東外環以外訂了個90米的房子,要借錢籌首付、貸款和領證什麼的。HTML5 history相關知識點啪啦啪啦講起來也是一條又臭又長的裹腳布,精氣神實在不夠用,這裏,直接一個實例。html5
衆所周知,Ajax能夠實現頁面的無刷新操做——優勢;可是,也會形成另外的問題,沒法前進與後退!曾幾什麼時候,Gmail彷佛藉助iframe搞定,現在,HTML5讓事情變得如同過家家般簡單。web
當執行Ajax操做的時候,往瀏覽器history
中塞入一個地址(使用pushState
)(這是無刷新的);因而,返回的時候,經過URL或其餘傳參,咱們就能夠還原到Ajax以前的模樣。ajax
本demo所展現的就是ajax的內容載入與地址欄的前進與後退,典型應用,對於熟悉相關知識點頗有幫助。api
您能夠狠狠地點擊這裏:HTML5 history API與ajax分頁實例瀏覽器
demo結構大體以下:左邊導航菜單,右側詳細內容。 搜索引擎
若是咱們想偷懶,導航直接URL地址,點擊刷新得了。但頭尾內容都是同樣的,刷新總顯得浪費。從體驗上講,點擊導航,右側Ajax局部刷新是更優的策略。spa
Ajax局部刷新小菜,稍有經驗都能輕鬆應對。如今若是提出以下需求:每次ajax刷新就若是頁面刷新同樣,能夠後退查看以前內容,怎麼破?code
個人策略以下:orm
?
後面的)附在demo HTML頁面地址後面,使用history.pushState
塞到瀏覽器歷史中。window.onpopstate
事件,經過綁定popstate
事件,就能夠根據當前URL地址中的查詢內容讓對應的菜單執行Ajax載入,實現Ajax的前進與後退效果。history.replaceState
更改當前的瀏覽器歷史,而後觸發Ajax操做。因而,你會看到:
.html
,可是,實際URL最後是:
由於被history.replaceState
擺了一道。
由於歷史記錄被history.pushState
插了一刀。
奇蹟般的,頁面無刷新的,又回到了浦東菜單:
由於window.onpopstate
讓菊花刀又拔了出來。
history.pushState({}, "頁面標題", "xxx.html");
history.replaceState(null, "頁面標題", "xxx.html");
window.addEventListener("popstate", function() { var currentState = history.state; /* * 該幹嗎幹嗎 */ });
瀏覽器兼容性表:
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 |