JavaScript上的历史回溯钩子
有没有一种方法可以提供像onHistoryBack这样的钩子?我目前正在使用history.js和JavaScript上的历史回溯钩子,javascript,jquery,history.js,Javascript,Jquery,History.js,有没有一种方法可以提供像onHistoryBack这样的钩子?我目前正在使用history.js和 History.Adapter.bind (window, 'statechange', function () {}); 但我无法询问用户是否呈现了history.back()或它是否是history.pushState()调用的结果。。有什么想法吗?我这样做的方法是在每次点击实际站点时将变量设置为true。然后,statechange事件将检查此变量。如果这是真的,他们使用了网站上的链接。如
History.Adapter.bind (window, 'statechange', function () {});
但我无法询问用户是否呈现了history.back()或它是否是history.pushState()调用的结果。。有什么想法吗?我这样做的方法是在每次点击实际站点时将变量设置为true。然后,statechange事件将检查此变量。如果这是真的,他们使用了网站上的链接。如果为假,则他们单击了浏览器后退按钮 例如:
var clicked = false;
$(document).on('click','a',function(){
clicked = true;
// Do something
});
History.Adapter.bind (window, 'statechange', function () {
if( clicked ){
// Normal link
}else{
// Back button
}
clicked = false;
});
希望有帮助:)所有状态都存储在
历史记录中。savedStates
。每次推回时,都会添加另一个状态。因此,从理论上讲,您可以测试History.savedStates
,看看History.savedStates[History.savedStates.length-2]==currentState
。这将指示用户从步骤a到步骤b,再回到步骤a。但是,用户可以通过“后退”按钮以外的其他方式到达目的地,因此您可能需要将其与用户事件结合使用
您还可以使用
History.getStateByIndex
方法返回保存的状态。谢谢@will我刚刚用类似于您的方法解决了这个问题,但是我包装了我的历史记录。在“单击”修改之间调用pushState(…),以防止执行“statechange”钩子