是否可以检测用户何时单击浏览器的后退按钮?

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

任何使用 PHP、JavaScript 的解决方案都是优选的。任何语言的解决方案都可以,只需要我可以翻译成 PHP/JavaScript 的东西

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

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

有帮助吗?

解决方案

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

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

这是 顺便说一下,一个包含您正在寻找的东西的图书馆

其他提示

我最喜欢的框架之一是 雅虎的浏览器历史记录管理器. 。您注册事件,当用户返回到该状态时,它会回调您。如果你想了解它是如何工作的 这是一篇关于雅虎决定的有趣博客文章!制成 设计它的时候。

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

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

雅虎用户界面库是我个人最喜欢的客户端 JS 库,它具有出色的性能 浏览器历史记录管理器 这正是你所要求的。

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

只需将以下内容放入您的 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>

我设置了一个变量 $wasPosted$_SESSION 有价值 false.

我所有的帖子都通过同一个 php 文件,并设置 $wasPostedtrue.

全部 header(location:) 请求之前设置 $wasPostedtrue.

如果 $wasPostedfalse 然后在使用后退或前进按钮后加载页面。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top