如果我使用`location.replace`更改哈希,我可以确定页面不会重新加载吗?

时间:2013-12-15 01:04:49

标签: javascript hash browser-history

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

但是现在我想要更改散列而不将其添加到会话历史记录中(即不要将其放在后退按钮列表中),或添加它删除前一个。所以我不想要的是在列表中同时包含新的和旧的。

我似乎可以使用location.replace

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

在Firefox 29上运行良好,因为我只更改了哈希,所以页面不会重新加载。

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

2 个答案:

答案 0 :(得分:0)

在使用test pagebrowserling进行测试(browserstack)后,似乎

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

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

  • Firefox:3
  • IE:6
  • Chrome:6(但不是5)
  • Safari:5.0.5(但不是4.0)
  • Opera:12.10(但不是11.6)

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

修改 - 以下代码也有效(test page),浏览器支持相同:

location.replace('#' + newHash);

答案 1 :(得分:0)

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

LE:或者只是致电history.replaceState()。它与pushState相同,唯一的区别是此方法不会创建新的历史记录条目。