2012-06-19 42 views
24

所以我讀過關於計算器幾個問題/答案,一派的問題,我不能似乎得到了event.state任何東西回來,但nullwindow.onpopstate,event.state == null?

我得到了它不會與jQuery的事件工作,但當我做這樣的事情:

window.onpopstate = function (e) { 
    console.log(e.state) 
} 

有沿jQuery.ajax成功調用

history.pushState({ lastUrl: data.State }, data.Title, data.UrlKey); 

無論是鍍鉻(V19)或Firefox(V12)返回任何東西,但零線的東西?我錯過了什麼嗎?它只是沒有完全實施?

+0

[OS X Chrome 10.0.648.151上的HTML歷史狀態問題]的可能重複(http://stackoverflow.com/questions/5418540/html-history-state-issues-on-os-x-chrome-10- 0-648-151) –

+3

@Derek你提供的問題是關於頁面加載時的popstate射擊。爲了澄清,在任何時候popstate觸發,沒有一個pushState函數發送的數據(即上面的例子中的lastUrl)在事件對象中可用,這是我詢問的問題 – mihok

回答

45

e.state指的是被推送的倒數第二個狀態。您需要將e.state的狀態至少推到兩次,而不是null。這是因爲您應該在第一次加載站點時以及之後每次更改狀態時保存狀態。

+1

解決了我的問題我在這裏問了http://stackoverflow.com/questions/13107147/javascript-history-state-incorrect ...如果你可以在這裏爲我的問題寫一個答案,我可以接受它。 –

+0

一般意見:我會推薦而不是重載函數'window.onpopstate = function(e){'簡單地「聽」它'window.addEventListener(「popstate」,函數(事件){'...因爲否則你'取消其他實現是你沒有重寫的。 –

9

我認爲這個問題需要更清楚的解釋,因爲在其他答案中的句子「推倒第二狀態」可能導致混淆。

當我們這樣做history.pushState我們推入歷史堆棧一個新的國家,這成爲當前一個(我們可以從導航欄的網址看到。)

的window.onpopstate事件意味着頂部歷史狀態將被彈出(從堆棧中取出),所以e.state現在將指向堆棧中新的新頂部狀態(因爲導航欄將指向前一個URL)。

相關問題