2013-07-06 36 views
59

我一直在閱讀和搜索replaceState() & pushState()之間的優缺點。 另請參見Mozilla的articleinteresting測試,但仍然不清楚這些差異。replaceState()vs pushState()

任何人都在乎他們有什麼不同?

+0

http://blog.scoutapp.com/articles/2010/12/07/manipulating-browser-history-with-javascript-pushstate-replacestate –

回答

90

replaceState()變化在瀏覽器的URL(即按後退按鈕不會把你帶回)

pushState()將更改URL,並保留舊的瀏覽器歷史記錄(即。按後退按鈕會帶你回去)

30

從你的鏈接

history.replaceState()操作酷似history.pushState()除了replaceState ()修改當前的歷史條目,而不是創建一個新的 。

當您想要更新 狀態對象或當前歷史記錄的URL以響應某些 用戶操作時,replaceState()特別有用。

如果你想只是想更新歷史記錄,要使用replaceState()以其它方式使用pushState(),這將保留舊的條目,並創建一個新的。它們很相似,但都有不同的效果,因此取決於是否要替換或創建新的歷史記錄。

想象一下,如果我把一張牌放在另一張牌的上面(正面朝上),並且只能拿到一堆牌中的頂牌(即我發牌的最後一張牌),我就可以買一副牌。比方說,我把一堆傑克放在一堆。現在,如果我使用replaceState作爲下一張卡片,那麼我就把那個傑克的心臟關掉,然後放下下一張卡片。由於我們剛剛更換了頂牌,因此牌的數量相同。如果我使用pushState來代替,我會將下一張牌放在傑克的心上(所以現在都存在於堆中,並且該堆高一張)。

與URL類似地交換卡片,這就是URL歷史記錄被修改的方式。

+5

爲什麼downvote? 「 – keyboardP

+0

」history.replaceState()的運行方式與history.pushState()完全相同,只是replaceState()修改了當前的歷史記錄,而不是創建新的記錄。「這個引用我在這裏找到了https://developer.mozilla.org/en-US/docs/Web/API/History_API。你能解釋一下全球瀏覽器的歷史嗎?它說入口是在全球瀏覽器歷史上創建的。 –

+0

「全球瀏覽器歷史」是什麼意思? @RaghuDV – stevemao