清除URL散列(Clearing URL hash)

2019-07-21 06:58发布

访问stackoverflow.com/#_=_window.location.hash计算结果为#_=_ 。 精细。

现在执行window.location.hash = ''清除散列和URL成为stackoverflow.com/# 。 (注意尾随# )。

为什么#window.location.hash不一致包含或排除? 如何才能#在不重新加载页面从URL中移除?

( MDN说

[散列是]后面的#符号,包括#符号的URL的一部分。

但是,这并不是一个空哈希的情况也是一样的。)

Answer 1:

要回答第二个问题(去掉#不需要刷新页面):

history.pushState('', document.title, window.location.pathname);


Answer 2:

回答第一个问题:

按照window.location的文档中Mozilla.org:“后面的#符号,如果有的话,包括#符号的URL的一部分空字符串,如果网址不包含#或具有#后,什么都没有。

奇怪的是,该文件刚刚更新了2013年4月8日。 不知道如果你选中的文件后加入。

顺便说一句(并参考答案)中,window.location.hash和pushState的是,虽然接近相关的不同的概念。



Answer 3:

有两件事情驾驶这种行为:

  • “设置hash属性导航到命名锚无需重新加载该文件。” ( 在这里 )
  • “当你设置的位置或物体以外的任何散列其属性的[...]在JavaScript 1.1和更高版本,设置位置的效果取决于用户的设置通过网络的文件到原来的比较。” ( 在这里 )

所以基本上,设置hash属性永远不应该导致重装,设置任何其他财产,应导致重载(或者可能是E-标签/改性因为头检查,视浏览器设置)。

我假设为统一起见,浏览器制造商变换设置一个空的哈希值,以设定“#”作为哈希值。 这样,在地址栏中的URL不会导致重新加载。 但是,这后一部分是纯粹的猜测。



Answer 4:

我已经两个星期前处理同样的问题,我的结论是,有没有好的解决办法。 有没有直接的解决方案,去除URL哈希总是迫使浏览器重新加载页面,即使有一个unpretty黑客样的解决方案,我宁愿有散在的URL比使用晦涩的解决方案的结束。



文章来源: Clearing URL hash