有没有办法告诉国家与history.js的方向?

时间:2013-05-14 16:20:06

标签: javascript javascript-events browser-history history.js html5-history

与标题一样,如果调用onstatechange函数而不是pushState函数,我希望能够执行不同的back事件。或者,如果go函数为负数或正数。

示例:

如果调用History.pushState()History.go(1),我希望statechange事件的回调为forwardPushState

如果调用History.back()History.go(-1),我希望statechange事件的回调为backwardsPushState

2 个答案:

答案 0 :(得分:6)

状态是与页面相关的一些数据(用户在浏览器中看到它)。如果用户想要进入某个页面,那么这个页面是相同的,无论是他来自后退按钮点击还是来自前进按钮点击,我认为。

PushState在堆栈中推送新状态。它与backgo没有任何关系。 Backgo是用于在堆栈中的推送状态上导航的函数。我这样说是因为在你的编辑中,看起来你认为pushState和go(1)是等价的。

也许如果您想知道用户来自哪个方向,您应该分析onstatechange事件以了解它是否需要存储方向的任何参数。我还是不知道该怎么做。

我认为主要的是它与go (-1)go(1)back没有任何关系。

答案 1 :(得分:-1)

也许这对你有用。

<html>
<body onunload="disableBackButton()">
<h1>You should not come back to this page</h1>
</body>
<script>
function disableBackButton()
{
   window.history.forward();
}
setTimeout("disableBackButton()", 0);
</script>
</html>

上面的代码将难以使用后退按钮加载此页面。

第二次尝试

以下代码来自另一个堆栈溢出。

detect back button click in browser

window.onload = function () {
if (typeof history.pushState === "function") {
    history.pushState("jibberish", null, null);
    window.onpopstate = function () {
        history.pushState('newjibberish', null, null);
        // Handle the back (or forward) buttons here
        // Will NOT handle refresh, use onbeforeunload for this.
    };
}
else {
    var ignoreHashChange = true;
    window.onhashchange = function () {
        if (!ignoreHashChange) {
            ignoreHashChange = true;
            window.location.hash = Math.random();
            // Detect and redirect change here
            // Works in older FF and IE9
            // * it does mess with your hash symbol (anchor?) pound sign
            // delimiter on the end of the URL
        }
        else {
            ignoreHashChange = false;   
        }
    };
}

}