首页 > 解决方案 > 如何检测浏览器中的后退按钮?

问题描述

我有一个名为的函数back(),它将用于 ajax 调用。实际上,我有一个包含最后 5 个搜索结果的数组堆栈,并且该返回函数将切换到上一个结果集(根据该数组堆栈),它甚至会window.history.pushState()在您单击后退按钮时更改 URL。

我说的那个后退按钮是浏览器内部的一个元素,它可以撤销back()功能。back()现在,当用户单击浏览器的后退按钮时,我也想撤销功能。像这样的东西:

window.onhashchange = function() {
 back(); // this function also changes the url
}

但遗憾window.onhashchange的是,当我点击浏览器的背面时会被撤销两次。因为window.onhashchange当您使用更改 URL 时将被撤销window.history.pushState()

无论如何,我怎样才能检测到哪些事情会改变 URL?是我的 JS 代码还是浏览器的后退按钮?

标签: javascriptjqueryhtml

解决方案


您可以使用performance.navigation.type

在任何给定点,例如 on document.onload,您可以读取 and 的值type,如果它是:

  • 0该页面是通过链接、书签、表单提交、脚本或在地址栏中键入 URL 来访问的。
  • 1通过单击重新加载按钮或通过 Location.reload() 方法访问该页面。
  • 2该页面是通过导航到历史记录来访问的。
  • 255任何其他方式。

请注意,根据兼容性表,支持是有限的。但是,从外观上看,该表似乎已过时。它说它在 chrome 上不受支持,我刚刚对其进行了测试,并在我的 chrome 版本(67.0)上按预期工作


推荐阅读