Javascript 在History.js中是否有办法知道何时按下了后退按钮

Javascript 在History.js中是否有办法知道何时按下了后退按钮,javascript,browser-history,history.js,Javascript,Browser History,History.js,我已经开始测试了。在了解了它的工作原理并且不存在popstate之后,取而代之的是statechange。我正在寻找一种不同的方式,当按下浏览器的后退按钮时 原因是我需要在状态移动之前知道URL,从我将要访问的URL开始。在包含项目的情况下,只查看我们要访问的URL 我希望解决方案不是在全局变量中跟踪访问的最新URL 谢谢我终于使用历史记录管理了所有链接。按下state,这样就不需要按下后退按钮。我们以相同的方式处理所有状态更改 Edit:在历史记录中发现了这两个问题。js'Github,可能对

我已经开始测试了。在了解了它的工作原理并且不存在
popstate
之后,取而代之的是
statechange
。我正在寻找一种不同的方式,当按下浏览器的后退按钮时

原因是我需要在状态移动之前知道URL,从我将要访问的URL开始。在包含项目的情况下,只查看我们要访问的URL

我希望解决方案不是在全局变量中跟踪访问的最新URL


谢谢

我终于使用
历史记录管理了所有链接。按下state
,这样就不需要按下后退按钮。我们以相同的方式处理所有状态更改

Edit:在历史记录中发现了这两个问题。js'Github,可能对某人有所帮助。

我知道这是一个非常过时的问题,但我找到了一个解决方案,解决了在标准页面和历史状态页面之间切换时使用后退/前进按钮的问题

情景: 在一组页面上使用HTML5历史(或History.js插件) 然后是我们需要实际加载的其他页面,也就是标准页面(不要问为什么,但可能需要某些用例)

当您从一个历史状态页面转到一个标准页面时。您无法返回:它更改url,但不加载页面——它只触发状态更改;我想这就是原始帖子的问题。我个人认为这是一个浏览器错误(尽管所有浏览器都有这个问题),因为浏览器应该知道您所在的页面在历史状态页面之外被重新加载

我用非常简单的方法解决了这个问题: 侦听statechange事件,并告诉浏览器在触发时刷新。这样的话,我不在乎他们是从这一页返回还是前进。如果浏览器认为状态正在更改(链接不会触发statechange事件),则只有“返回/前进到历史记录状态”页面才会触发此事件,因此解决了此问题

代码,使用jQuery+History.js插件:

$(window).on('statechange', function() {
    window.location.reload();
});
如果这不合理,你可能没有这个问题。然而,我在许多使用HTML5历史记录的网站上注意到了这一点(即使是pinterest.com,如果您在图像模式下重新加载,然后尝试返回,也会出现此问题)


如果你真的遇到了这个问题,希望你能找到这个答案并松一口气:)

我发现github上的解决方案对我来说有点过头了。我创建了一个bool,它总是正确的,除了在我使用历史改变状态之前

var manualStateChange = true;

History.Adapter.bind(window,'statechange',function(){
    if(manualStateChange == true){
     // BACK BUTTON WAS PRESSED
    }
    manualStateChange = true;
});
每当我以编程方式更改状态时,请将bool设置为false:

manualStateChange = false;
History.pushState(null, null, currentPath);

在“官方”版本中,此功能不可用。在以下情况下,尝试在主目录中使用此文件:

我不能保证他的解决方案适用于所有浏览器。但这是一个很好的解决方案。如果应用了他的更改,则可以使用:

var State = History.getState();
if (State.navigation) {
    // Back / forward button is pressed.
}

有关更多信息,请访问。

与詹姆斯·瓦格纳的答案类似。 “statechange”事件是双向触发的,因此我只检查“popstate”事件,在我的示例中,只有当用户返回时才会调用该事件

window.addEventListener('popstate', function() {
  window.location.reload();
});

然而,我也想到了类似的逻辑,当发出pushState和按下back/forward时会触发statechange,这会创建无限的重新加载循环。事实上,这是一个巨大的解脱。我正要放弃。我做了同样的事情,但这不会区分“后退”和“前进”按钮。这正是我需要的,谢谢:D。。。我只需要
location.reload()
//后退按钮中按下
位,所以“后退”和“前进”不成问题:我同意@GTCrais的观点,这不会区分“后退”和“前进”按钮。因此,在您的代码中按“上一步”按钮是错误的。您应该将其更改为
//按下后退或前进按钮