html5 在 history 對象上添加幾個新的方法、事件、屬性,用以加強開發者對於瀏覽器歷史記錄的控制。大致上說,新的API能夠幫助咱們在無刷新的狀況下改變瀏覽器的url,新增或者替換以前的歷史記錄。建議先看看這個示例,
具體的文檔推薦參考MDN。html
這裏談談使用新的 History API時,須要特別注意的地方。html5
state
保存不了完整對象,只能保存通常對象(plain object),由於可能瀏覽器使用了JSON方法,方法都被移除掉了。這個我是被坑過的,明明保存了對象,而且在state上面找到了,結果調用方法就報錯。git
popstate
事件在firefox下,頁面直接載入時是不觸發的,而 Chrome 和 Safari 下是觸發的。這個問題很容易解決,由於咱們老是能夠經過 history.state
對象得到當前路徑的 state 對象,只是在綁定事件的時候須要額外考慮一下第一次的狀況(有些庫會幫你考慮的)。github
每次瀏覽器歷史記錄發生變化都會觸發popstate
事件,包括用戶使用前進或者後退按鈕,以及調用history接口。若是歷史記錄是由調用pushState
或者replaceState
改變的,state對象可經過event
對象的state
屬性得到。瀏覽器
最後,推薦一下TJ寫的page.js,一個不只使用簡單,並且對於異步操做很是友好的客戶端路由庫。異步
(完)ide