访问stackoverflow.com/#_=_
和window.location.hash
计算结果为#_=_
。 精细。
现在执行window.location.hash = ''
清除散列和URL成为stackoverflow.com/#
。 (注意尾随#
)。
为什么#
在window.location.hash
不一致包含或排除? 如何才能#
在不重新加载页面从URL中移除?
( MDN说
[散列是]后面的#符号,包括#符号的URL的一部分。
但是,这并不是一个空哈希的情况也是一样的。)
要回答第二个问题(去掉#
不需要刷新页面):
history.pushState('', document.title, window.location.pathname);
回答第一个问题:
按照window.location的文档中Mozilla.org:“后面的#符号,如果有的话,包括#符号的URL的一部分空字符串,如果网址不包含#或具有#后,什么都没有。 “
奇怪的是,该文件刚刚更新了2013年4月8日。 不知道如果你选中的文件后加入。
顺便说一句(并参考答案)中,window.location.hash和pushState的是,虽然接近相关的不同的概念。
有两件事情驾驶这种行为:
- “设置hash属性导航到命名锚无需重新加载该文件。” ( 在这里 )
- “当你设置的位置或物体以外的任何散列其属性的[...]在JavaScript 1.1和更高版本,设置位置的效果取决于用户的设置通过网络的文件到原来的比较。” ( 在这里 )
所以基本上,设置hash属性永远不应该导致重装,设置任何其他财产,应导致重载(或者可能是E-标签/改性因为头检查,视浏览器设置)。
我假设为统一起见,浏览器制造商变换设置一个空的哈希值,以设定“#”作为哈希值。 这样,在地址栏中的URL不会导致重新加载。 但是,这后一部分是纯粹的猜测。
我已经两个星期前处理同样的问题,我的结论是,有没有好的解决办法。 有没有直接的解决方案,去除URL哈希总是迫使浏览器重新加载页面,即使有一个unpretty黑客样的解决方案,我宁愿有散在的URL比使用晦涩的解决方案的结束。