1

我有一个使用 hashbanging 进行导航的 ajax 应用程序,并且我在我的应用程序中跟踪导航堆栈。有没有什么好的方法可以确定用户是按下浏览器中的后退按钮还是只是按下指向相同 url 的链接。

示例:假设用户位于http://mysite.com/#home,然后按下指向http://mysite.com/#settings的链接。这个新的设置页面包含一个指向 http//mysite.com/#home 的链接。我如何确定用户是否按下链接返回主页,或者用户是否按下浏览器上的后退按钮。

由于我在内部跟踪历史堆栈,因此我想知道是否应该推送或弹出堆栈的 url。

一种解决方案是使用计数器或时间戳毒化 url,但最好避免。

4

2 回答 2

1

忘记 hashbang 并使用 html5 pushState。当页面历史改变时,会触发popState事件。

于 2012-06-16T11:46:33.920 回答
0

您可以轻松检查用户是否按下了链接:

var link = document.getElementById("backLink"), pressedBackLink;
link.addEventListener("click", function() {
    pressedBackLink = true;
    // Do stuff here
}, false);

function hashChange() {
    if (pressedBackLink) {
        pressedBackLink = false;
        // Do other stuff
    }
}

请记住attachEvent用于 IE<9。我认为你的链接有 id"backLink"并且你的事件监听haschange器是 function hashChange

关于后退浏览器按钮,无法确定。用户也可以单击前进或他的历史记录中的任何其他链接,而无需按顺序关注它们。不要在这上面浪费你的时间。

于 2012-06-16T11:03:29.423 回答