清除URL哈希值

Clearing URL hash

本文关键字:哈希值 URL 清除      更新时间:2023-09-26

访问stackoverflow.com/#_=_, window.location.hash求值为#_=_。好。

现在执行window.location.hash = ''来清除哈希,URL变成stackoverflow.com/#。(注意后面的#)

为什么window.location.hash中的#不一致地被包括或排除?如何从URL中删除#而不重新加载页面?

(MDN说

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

,但对于空散列则不成立)

回答第二个问题(删除#而不刷新页面):

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

回答你的第一个问题:

根据窗户。" URL中#符号后面的部分,如果有的话,包括#符号。如果url不包含#或#之后没有任何内容,则为空字符串。"

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

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

有两个因素驱动这种行为:

  • "设置hash属性将导航到指定的锚,而无需重新加载文档。"(这里)
  • "当你设置位置对象或它的任何属性时,除了hash[…]在JavaScript 1.1和更高版本中,设置位置的效果取决于用户在网络上比较文档和原始文档的设置。(这里)

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

我假设为了一致性,浏览器构建器将设置空散列转换为设置'#'作为散列。这样,位置栏中的url就不会导致重新加载。但后半部分纯属猜测。