Javascript 如何在浏览器中检测“后退”按钮?
我有一个名为Javascript 如何在浏览器中检测“后退”按钮?,javascript,jquery,html,Javascript,Jquery,Html,我有一个名为back()的函数,它将用于ajax调用。实际上,我有一个数组堆栈,其中包含最后5个搜索结果,而back函数将切换到上一个结果集(根据该数组堆栈),当您单击back按钮时,它甚至会使用window.history.pushState()更改URL 我刚才提到的后退按钮是浏览器中的一个元素,它撤销了back()函数。现在,当用户单击浏览器的“后退”按钮时,我想撤销back()函数。大概是这样的: window.onhashchange = function() { back(); /
back()
的函数,它将用于ajax调用。实际上,我有一个数组堆栈,其中包含最后5个搜索结果,而back函数将切换到上一个结果集(根据该数组堆栈),当您单击back按钮时,它甚至会使用window.history.pushState()
更改URL
我刚才提到的后退按钮是浏览器中的一个元素,它撤销了back()
函数。现在,当用户单击浏览器的“后退”按钮时,我想撤销back()
函数。大概是这样的:
window.onhashchange = function() {
back(); // this function also changes the url
}
但遗憾的是,当我点击浏览器背面时,window.onhashchange将被撤销两次。因为当您使用window.history.pushState()
更改URL时,window.onhashchange
将被撤销
无论如何,我怎样才能检测出URL发生了什么变化?我的JS代码或浏览器的后退按钮?您可以使用
在任何给定点,例如在document.onload
上,可以读取类型的值,如果是:
0
通过链接、书签、表单提交、脚本或在地址栏中键入URL访问该页面
1
通过单击重新加载按钮或通过Location.Reload()方法访问页面
2
通过导航到历史记录来访问该页面
255
任何其他方式
请注意,根据兼容性表,支持是有限的。
然而,从表面上看,这张桌子似乎过时了。它说它在chrome上不受支持,我刚刚对它进行了测试,并在我的chrome版本(67.0)上正常工作。解决方案之一是使用localstorage选项实现onunload事件。
这是我的想法,也许你需要纠正,但这是基础
var history = [];
window.onload = function(){
var handler;
if ( localStorage.getItem('history') == null ) {
// FIRST TIME
history[0] = window.location.href;
localStorage.setItem("history", JSON.stringify(history));
}
else {
handler = localStorage.getItem('history');
handler = JSON.parse(handler);
history = handler;
// Just compare now
if (history[history.length-1] == window.location.href) {
// no change
} else {
history.push(window.location.href);
}
}
}
window.onunload = function(){
localStorage.setItem('history', JSON.stringify(history));
}
注意:
自2011年5月25日起,HTML5规范规定
可以使用window.alert()、window.confirm()和window.prompt()方法
在此事件中被忽略。有关更多信息,请参见HTML5规范
细节
您可以尝试不依赖浏览器后退/前进按钮我不依赖,我只想调用浏览器后退按钮上的一个函数。@Adelin似乎正是我要找的,您知道使用它的任何示例吗?既然您说这就是您要找的,我刚刚发布了一个答案。用法很简单->读取任意给定点的值。它只写一次,并且是只读的。。向上投票。只有一个问题,为什么当我点击浏览器的后退按钮时,window.onhashchange=function(){}
没有被触发?注意到if(“窗口中的onhashchange”){}
是true
。很可能哈希没有改变。它确实改变了。。我也看到了URL的变化。我一直在谷歌上搜索。可能是其他事件正在取消这一项。还有一个你可以用的。显然,对于后退按钮,popstate
也有很多解决方案。但是它performance.navigation.type
在这两种情况下都返回1
(我的网站后退按钮和浏览器后退按钮)