检查用户是否在浏览器中点击了返回按钮

4
我正在尝试使用JavaScript的onbeforeunload事件来询问用户是否要离开页面,但是如果用户按下后退按钮,我不希望触发该事件(EDIT:“事件”是弹出对话框,询问用户单击确定以离开站点或单击取消以留在当前页面)。
那么有没有办法使用JavaScript或PHP告诉我们用户是否按下了返回按钮呢?我已经找到了一个解决方案,使用一个隐藏的iframe,但它只适用于IE,我需要一个可以在Firefox,Chrome和Safari上工作的方法。
我的IE解决方案之所以有效,是因为当用户点击后退按钮时,iframe被发送回来,但父页面仍停留在同一位置。从这里我可以知道用户确实按下了后退按钮,然后我使用history.back()。这个小技巧在其他浏览器中不起作用(据我所知),因此我正在寻找跨浏览器的解决方案。
简而言之,我正在使用window.onbeforeunload弹出对话框,询问用户是否要离开我的网站。我不希望在用户按下后退按钮时弹出此对话框。如何知道用户是否在浏览器中按下了后退按钮?
谢谢, Rick

触发的事件是什么?如果您需要在用户点击“返回”按钮时保存信息,您可以将一些信息保存在cookie中,或者HTML5具有新的“localStorage”和“sessionStorage”对象可供使用。http://www.w3schools.com/html5/html5_webstorage.asp - ptpaterson
1
有在IE中运行的解决方案吗?怎么做?似乎有点hacky。 - epascarello
3
简单的解决方案:不要试图将用户留在你的网站上,这会打断用户的体验。但是,在用户离开未保存页面或类似情况时,可以适当地进行确认。 - zzzzBov
你可以检查 history.length,但你不知道用户是通过点击后退还是前进按钮来到你的页面的。 - Shadow The Spring Wizard
3个回答

7

简短回答:

不。

详细回答:

不要。

除非你有一个非常好的理由,否则请不要试图让用户停留在你的网站上。保存表单字段是一个很好的例子。检查他们是否正在转向另一个网站是一个不好的用法。

人们使用Google和社交网络来寻找有趣的页面,并消费各种独立的信息片段,而不是像早期网络那样从一个页面到另一个页面浏览。


3

当用户离开您的页面时,您无法预先知道他将前往哪个页面。您甚至无法获取其当前历史记录中的URL。

对于您的问题,我看不到解决方案,也怀疑是否有解决方案,抱歉。


1
你并不总是能提前知道,但有时你可以有一个相当好的想法。例如,对链接进行mousedown操作就很可能意味着某人将允许mouseup操作并跟随该链接。 - thetaiko
1
嗯,是的,这很棘手,但你可以通过将一个函数附加到外部链接的onclick事件来知道用户何时离开你的网站。但是当他不点击链接时,你无法知道他是点击了返回按钮、关闭了浏览器还是直接在浏览器中输入了新的URL。 - Pik'
查看上面的编辑,了解我确定用户在Internet Explorer中点击后退按钮的解决方案。我正在寻找一种在除IE之外的浏览器中指示后退按钮点击的另一种方法。 - Rick

0

如果您不希望用户单击后退按钮时发生任何事情,那么您不一定需要确定是否已单击后退按钮。

您的目标是确定谁将“最有可能留在[您]的网站上”,并为每个想要离开的人创建一个额外的步骤。您正在尝试中断和覆盖用户对其浏览器行为的期望。

如果您真的想这样做,请为所有未由后退按钮触发的卸载事件添加事件侦听器:页面上的每个链接、关闭窗口等。这并不容易,您也无法捕获所有事件。但是,除非您有充分的理由这样做,否则您将会让人们感到恼火,因此如果确实很重要,则需要付出额外的努力。

简而言之:向除后退按钮以外的所有内容添加事件侦听器,并在回调函数中弹出对话框。尽管这会让人们感到恼火。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接