replaceState()与pushState()


Answers:


158

replaceState()会在浏览器中更改网址(即,按“后退”按钮不会使您返回)

pushState() 会更改网址,并在浏览器历史记录中保留旧网址(即,按“后退”按钮会将您带回)


57

从您的链接

history.replaceState()的操作与history.pushState()完全相同,不同之处在于replaceState()会修改当前历史记录条目,而不是创建一个新的条目。

当您要响应某些用户操作而更新状态对象或当前历史记录条目的URL时,replaceState()尤其有用。

如果您只想更新历史记录条目,请使用replaceState()否则使用pushState(),它将保留旧条目并创建一个新条目。它们相似,但是两者具有不同的效果,因此取决于您是否要替换或创建新的历史记录条目。

可以将其想象为我正在通过将一张纸牌叠放在另一张纸上(面朝上)来分配一副纸牌,而您只能将头顶纸牌堆放在一堆中(即我所发行的最后一张纸牌)。假设我在堆上放了个《红心大战》。现在,如果我使用下一张卡replaceState,那么我将“红心杰克”摘下并放下下一张卡。卡数相同,因为我们只是更换了顶卡。如果我pushState改用了,我将把下一张纸牌放在“红心杰克”的上面(所以现在两者都存在于纸堆中,并且纸堆高出一张纸牌)。

类似于用URL交换卡,这就是修改URL历史记录的方式。


2
“ history.replaceState()的操作与history.pushState()完全相同,只是replaceState()会修改当前的历史记录条目,而不是创建一个新的条目。” 我在这里找到这句话developer.mozilla.org/en-US/docs/Web/API/History_API。您能否解释什么是全局浏览器历史记录。它说条目是在全局浏览器历史记录上创建的。
Raghu DV

“全局浏览器历史记录”是什么意思?@RaghuDV
stevemao

@keyboardP太棒了。非常感谢。
michael.zech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.