Javascript 在网页中单击“浏览器后退”按钮时,即使哈希值已更改,如何返回到上一页?

Javascript 在网页中单击“浏览器后退”按钮时,即使哈希值已更改,如何返回到上一页?,javascript,jquery,html,Javascript,Jquery,Html,我有一个网页,其中我的锚定标记使用#id引用同一页面中的一个元素。但这会改变我的URL,因为它将#id添加到后缀中。因此,现在当我想通过单击浏览器的后退按钮返回到我所在的页面时,它不会返回到上一页,而是返回到我通过单击锚标记所做的哈希选择。请帮助我解决这个问题。当您使用哈希路由时,它会在浏览器历史记录中创建一条新记录,就像您导航到一个新页面一样。因此,如果您在站点上从一个页面导航到该页面上的哈希路由,然后导航到一个新页面,那么您必须单击“上一步”按钮两次才能返回到原始位置 因此,如果您导航htt

我有一个网页,其中我的锚定标记使用#id引用同一页面中的一个元素。但这会改变我的URL,因为它将#id添加到后缀中。因此,现在当我想通过单击浏览器的后退按钮返回到我所在的页面时,它不会返回到上一页,而是返回到我通过单击锚标记所做的哈希选择。请帮助我解决这个问题。

当您使用哈希路由时,它会在浏览器历史记录中创建一条新记录,就像您导航到一个新页面一样。因此,如果您在站点上从一个页面导航到该页面上的哈希路由,然后导航到一个新页面,那么您必须单击“上一步”按钮两次才能返回到原始位置

因此,如果您导航
https://example.com -> https://example.com#myHash ->https:/example.com/另一个页面
,然后第一次单击后退按钮将导航到
https://example.com#myHash
第二次单击后退按钮将导航到
https://example.com


希望对您有所帮助

您可以使用中的
history.replaceState()
函数来实现这样的行为。当用户单击锚定时,您将只替换当前历史记录项,而不是添加新的历史记录项

编辑:
window.location.replace()

另一种方法是使用不会将新条目添加到浏览器历史记录中的:

Location.replace()方法将当前资源替换为所提供URL上的资源。与assign()方法的区别在于,在使用replace()之后,当前页面将不会保存在会话历史记录中,这意味着用户将无法使用back按钮导航到它

因此,要获得所需的结果,可以做的是在
body
元素上添加一个onclick处理程序,其中包含一个逻辑,如果当前位置不是主页(或任何其他页面),它将替换当前位置。此处理程序将类似于下面的代码:

function handler (event) {
    if (!isAnchor(event.target) return;                     // return if clicked element is not an anchor (isAnchor function should be also implemented by you. For example, you can add some class on every anchor and check if clicked element is <a> tag with this class)
    if (window.location.href !== window.location.origin) {  // check if you are currently on the homepage
        event.preventDefault();                             // if not on homepage then prevent default <a> tag redirect 
        window.location.replace(event.target.href);         // and replace current history item URL with the new URL
    }
}
函数处理程序(事件){
if(!isAnchor(event.target)return;//如果单击的元素不是锚定元素,则返回(isAnchor函数也应该由您实现。例如,您可以在每个锚定元素上添加一些类,并检查单击的元素是否带有此类标记)
如果(window.location.href!==window.location.origin){//检查您当前是否在主页上
event.preventDefault();//如果不在主页上,则阻止默认标记重定向
window.location.replace(event.target.href);//并用新URL替换当前历史记录项URL
}
}

请包含您迄今为止尝试过的内容的cope片段。很抱歉,首先没有包含这些内容,但我可以用一个例子来解释:以我所使用的路径为例->->现在我想要的是,当我在#myHash id标签上单击“上一步”按钮时,我应该直接返回我的主页:->谢谢,我不会在这之前,你能告诉我如何在我的HTML中使用它吗?这是我面临的问题和我想要的解决方案:以我所走的路径为例->->现在我想要的是,当我在#myHash id标签上单击后退按钮时,我应该直接返回我的主页:->非常感谢!但是我不想通过使用javascript:void(0)和scrollIntoView方法,我找到了一个相当简单的方法来实现这一点。这正是我想要避免的功能。举个例子,我要做的是->->现在我想要的是,当我在#myHash id标记上单击后退按钮时,我应该直接返回我的主页:->