跟踪用户点击浏览器上的后退按钮的时间

Posted

技术标签:

【中文标题】跟踪用户点击浏览器上的后退按钮的时间【英文标题】:Track when user hits back button on the browser 【发布时间】:2010-09-08 12:35:50 【问题描述】:

是否可以检测用户何时点击浏览器的返回按钮?

我有一个 Ajax 应用程序,如果我可以检测到用户何时点击后退按钮,我可以显示相应的数据

任何使用 php 的解决方案,javascript 都是可取的。地狱,任何语言的解决方案都很好,只需要我可以翻译成 PHP/JavaScript 的东西

编辑:从下面剪切和粘贴:

哇,所有优秀的答案。我想使用 Yahoo,但我已经使用了 Prototype 和 Scriptaculous 库,不想添加更多的 ajax 库。但它使用 iFrames,这为我编写自己的代码提供了一个很好的指针。

【问题讨论】:

【参考方案1】:

无法判断用户何时单击后退按钮或按退格键返回浏览器,但是可以检测到以特定顺序发生的其他事件。这个example javascript 有一个相当好的检测返回命令的方法:

然而,传统方式是使用 cookie 或引荐页面跟踪用户在您的网站上的移动。当用户转到页面 A,然后是页面 B,然后再次出现在页面 A 上(特别是当 B 上没有指向 A 的链接时),那么您就知道他们返回了 - A 可以检测到这一点并重定向它们或以其他方式。

【讨论】:

【参考方案2】:

我在$_SESSION 中设置了一个变量$wasPosted,其值为false

我所有的帖子都通过同一个 php 文件,并将 $wasPosted 设置为 true

所有header(location:) 请求之前都将$wasPosted 设置为true

如果$wasPostedfalse,则页面是在使用后退或前进按钮后加载的。

【讨论】:

【参考方案3】:

检查您是否返回到需要刷新的页面缓存版本的最简单方法是添加一个将被缓存的隐藏输入元素,您可以检查它是否仍然具有其默认值。

只需将以下内容放在您的 body 标签内。我把我的放在结束标签之前。

<input type="hidden" id="needs-refresh" value="no">
<script>
    onload=function()
        var e = document.getElementById("needs-refresh");
        if (e.value === "yes")
            location.reload();
        e.value = "yes";
    
</script>

【讨论】:

当您点击刷新按钮时,此脚本会导致无限循环!在 Firefox 上测试。【参考方案4】:

dojo 工具包具有在 javascript 中处理此问题的功能。我认为在纯 PHP 中没有什么好的方法来处理它。

这是他们的文档页面:http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo

【讨论】:

【参考方案5】:

Yahoo 用户界面库,我个人最喜欢的客户端 JS 库,有一个出色的 Browser History Manager,它完全符合您的要求。

【讨论】:

【参考方案6】:

我最喜欢的框架之一是Yahoo!'s Browser History Manager。您注册事件并在用户返回到该状态时回调您。如果您想了解它的工作原理,请在设计时here's a fun blog entry about the decisions Yahoo! made。

【讨论】:

【参考方案7】:

有多种方法可以做到这一点,但有些方法只适用于某些浏览器。我知道的一个想法是在页面上嵌入一个几乎不可见的微小 iframe。当用户点击后退按钮时,iframe 被导航回来,您可以检测到然后更新您的页面。 Here 是另一种解决方案。

您可能还想查看 gmail 之类的源代码,看看他们是如何做到的。

Here's 一个图书馆,顺便提一下你正在寻找的东西

【讨论】:

以上是关于跟踪用户点击浏览器上的后退按钮的时间的主要内容,如果未能解决你的问题,请参考以下文章

通过在 L5 中点击浏览器上的后退按钮来防止注销后再次登录?

按下后退按钮时强制重新加载/刷新

重定向到浏览器后退按钮上的特定操作单击 MVC

通过浏览器后退按钮到达时重新加载网站

禁用浏览器上的后退按钮 [关闭]

点击浏览器后退按钮时如何刷新 ASP .NET MVC 页面