javascript - 如何检测浏览器中的后退按钮?
问题描述
我有一个名为的函数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 代码还是浏览器的后退按钮?
解决方案
您可以使用performance.navigation.type
在任何给定点,例如 on document.onload
,您可以读取 and 的值type
,如果它是:
0
该页面是通过链接、书签、表单提交、脚本或在地址栏中键入 URL 来访问的。1
通过单击重新加载按钮或通过 Location.reload() 方法访问该页面。2
该页面是通过导航到历史记录来访问的。255
任何其他方式。
请注意,根据兼容性表,支持是有限的。但是,从外观上看,该表似乎已过时。它说它在 chrome 上不受支持,我刚刚对其进行了测试,并在我的 chrome 版本(67.0)上按预期工作