【问题标题】:How to determine browser forward or backward in ajax app如何在ajax应用程序中确定浏览器前进或后退
【发布时间】:2012-06-16 10:59:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您能否分享更多关于您如何使用哈希进行导航的详细信息?通常,不需要在代码中跟踪历史记录。
  • 其实跟踪这个的唯一原因是为了确定一些过渡动画的方向。这没什么大不了的。

标签: javascript browser-history


【解决方案1】:

忘记 hashbang 并使用 html5 pushState。当页面历史发生变化时,他的popState事件被触发。

【讨论】:

    【解决方案2】:

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

    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
        }
    }
    

    记得在 IEattachEvent。我认为您的链接的 ID 为 "backLink",而您在 haschange 事件上的侦听器是函数 hashChange

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

    【讨论】:

    • 谢谢!从链接中获取事件很容易,我只是想知道这是否是确定用户在浏览器历史记录中前进还是后退的好方法。如果没有,我会找到其他方法来处理我的问题。
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2014-02-01
    • 2010-11-12
    • 2011-05-11
    相关资源
    最近更新 更多