在History.js中有没有办法知道何时按下后退按钮

时间:2011-11-21 11:29:46

标签: javascript browser-history history.js

我已经开始测试History.js了。在了解其工作原理并且没有popstate之后,就会有statechange。我正在寻找一种方法,以便在按下浏览器的后退按钮时有所不同。

原因是我需要知道状态移动之前的URL,从我要去的那个。使用项目包含的gist,只查看我们访问的网址。

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

由于

4 个答案:

答案 0 :(得分:18)

我发现github上的解决方案对我来说有点过头了。除了在使用History改变状态之前,我创建了一个始终正确的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);

答案 1 :(得分:4)

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

方案: 在一组页面上使用HTML5历史记录(或history.js插件) 然后其他页面我们需要真正的负载,也就是标准页面(不要问为什么,但有一些用例可能需要这样做)

当您从历史记录状态页面开始,并对标准页面进行实际加载时。你不能回去:它改变了网址,但没有加载页面 - 它只会触发状态转换;我假设是原帖的问题。我个人认为这是一个浏览器错误(但所有浏览器都有问题),因为浏览器应该知道你所在的页面是在历史状态页面之外重新加载的。

我用一些非常简单的方法解决了这个问题: 侦听statechange事件并告诉浏览器在触发时刷新。这样我就不在乎他们是否会退出或退出此页面。如果浏览器认为状态正在改变(链接不会触发statechange事件),则只有返回/转发INTO历史状态页面才会触发此事件,因此它解决了问题。

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

$(window).on('statechange', function() {
    window.location.reload();
});

如果这没有意义,那么你可能没有这个问题。但是,我在很多网站上都注意到使用HTML 5历史记录(如果你在图像模式下重新加载,然后尝试返回,就会发生pinterest.com这个问题。)

希望如果你确实遇到这个问题,你会找到这个答案并松一口气:)

答案 2 :(得分:0)

我最终使用History.pushState管理所有链接,这样就不需要按下后退按钮了。我们以同样的方式处理所有状态变化。

编辑:在History.js'Github中发现这两个问题,可能对某人有所帮助。  https://github.com/browserstate/history.js/issues/70  https://github.com/browserstate/history.js/issues/47

答案 3 :(得分:0)

在'官方'版本此功能不可用。尝试在main中使用此文件: https://github.com/danger89/history.js/blob/master/scripts/bundled/html5/jquery.history.js

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

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

可以在Github issue 47找到更多信息。