我能确定这个页面赢了吗;如果我使用`location.replace`来更改哈希,则不会重新加载

Can I be sure the page won't reload if I use `location.replace` to change hash?

本文关键字:哈希 加载 新加载 replace location 如果      更新时间:2023-09-26

我使用哈希是为了避免重新加载页面(是的,我知道有一个新的历史API,但无论如何…)

但现在我想更改哈希,而不将其添加到会话历史记录中(即不希望它出现在后退按钮列表中),或者添加它以删除前一个。所以我不想把新的和旧的都列入名单。

我似乎可以使用location.replace:

location.replace( location.href.replace(/#.+/, '') + '#' + newHash );

在Firefox 29上,它运行得很好,而且由于我只更改了哈希,所以页面不会重新加载。

但它在所有浏览器上都是这样工作的吗(IE,我看着你)?

是的,你可以肯定。为什么replace方法会做与将window.location设置为url相同的事情?如果我是你,我会用window.location.hash = "#newhash"

LE:或者直接打电话给history.replaceState()。它与pushState相同,唯一的区别是该方法不会创建新的历史条目。

在用browserling和browserstack测试(测试页面)后,似乎

  • 没有浏览器重新加载页面
  • 有些浏览器不会替换后退按钮列表中的最后一项

具体来说,我的代码适用于

  • Firefox:3
  • IE:6
  • 铬:6(但不适用于5)
  • Safari:5.0.5(但不在4.0上)
  • 歌剧:12.10(但不是11.6)

根据IETester的说法,它也适用于IE 5.5。

编辑-以下代码也可以工作(测试页),具有相同的浏览器支持:

location.replace('#' + newHash);