清除URL哈希

时间:2013-03-10 13:46:54

标签: javascript html url-routing window.location

访问stackoverflow.com/#_=_window.location.hash评估为#_=_。细

现在执行window.location.hash = ''清除哈希值,网址变为stackoverflow.com/#。 (注意尾随#。)

为什么#中的window.location.hash不一致包含或排除?如何在不重新加载页面的情况下从URL中删除#

MDN

  

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

但是在空哈希的情况下情况并非如此。)

4 个答案:

答案 0 :(得分:55)

要回答第二个问题(在没有页面刷新的情况下删除#):

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

答案 1 :(得分:4)

回答你的第一个问题:

根据Mozilla.org中的window.location doc“#符号后面的URL部分,如果有符号,则包括#符号。如果网址符号,则为空字符串不包含#或在#。

之后没有任何内容

奇怪的是,该文件刚刚于2013年4月8日更新。检查文档后,不确定是否添加了。

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

答案 2 :(得分:0)

推动此行为有两件事:

  • “设置哈希属性导航到命名锚点而不重新加载文档。” (here
  • “设置位置对象或其任何属性(哈希[...]除外)在JavaScript 1.1及更高版本中,设置位置的效果取决于用户将文档与原始网络进行比较的设置。” (here

所以基本上,设置hash属性永远不应该导致重新加载,设置任何其他属性应该导致重新加载(或者可能是E-Tag / modified-since标头检查,具体取决于浏览器设置)。

我认为为了保持一致性,浏览器构建器会将设置空哈希,将'#'设置为哈希。这样,位置栏中的URL不会导致重新加载。但后一部分是纯粹的推测。

答案 3 :(得分:-1)

两周前我一直在处理同样的问题,我的结论是没有好的解决方案。没有直接的解决方案,从URL中删除散列总是迫使浏览器重新加载页面,即使有一个类似于黑客的解决方案,我宁愿在url的末尾使用哈希而不是使用模糊的解决方案。