js可以获取到用户点击浏览器上前进和后退键的事件的吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js可以获取到用户点击浏览器上前进和后退键的事件的吗?相关的知识,希望对你有一定的参考价值。

比如我点击浏览器的后退键时不想让它回到上一个历史记录而是显示一个对话框要怎么做?

浏览器上的按钮你是管不到的,你只可以管你自己的网页
所以可以处理window.onbeforeunload=function()return false事件,在你的网页结束前,让人确认一下是不是要离开这个页面
参考技术A 不能获取,因为,浏览器上的前进后退是浏览器自带的功能,而不是页面自带的功能,所以除非你可以改浏览器的源码。。。。追问

大神,那我该怎么做才能让他按下前进或者回退到我自己的页面?

追答

虽然捕获不了前进、后退,但是可以捕获到unload事件,当用户操作时(前进、后退、关闭)都会触发unload事件,这样你可以用unload带的open方法打开你需要打开的URL
window.onunload=function 方法名()

Opera:检测后退、前进、刷新和关闭事件

【中文标题】Opera:检测后退、前进、刷新和关闭事件【英文标题】:Opera: Detecting back, forward, refresh and close events 【发布时间】:2009-08-27 04:38:32 【问题描述】:

我目前正在开发一个跟踪访问者鼠标行为的 jQuery 插件。移动、点击、滚动和调整大小都会被记录下来,并通过 Ajax 发送到解析和存储这些数据的位置。

最初,当用户离开页面时,数据被发送到脚本。我所说的“离开”是指刷新、来回浏览历史记录、关闭窗口/选项卡并转到不同的地址。

该解决方案适用于除 Opera 之外的所有浏览器。我正在使用 Opera 根本不支持的 jQuery 的“卸载”事件。 onbeforeunload 和 onunload 都不是。

问题是,如何为 Opera 浏览器实现这种功能?

我的一个解决方案是特别使用我创建的“轮询”功能。此功能允许您指定每隔“x”秒将内容推送到服务器的时间间隔。专门针对 Opera 浏览器将其设置为 1 秒可能会解决这个问题,但这是一个可怕的开销,并且请求并不总是按顺序完成,等等......

有什么建议还是我只坚持上述选项?

谢谢!

我想我可以将你们链接到插件源。 http://www.thedrunkenepic.com/junk/jquery.mousalytics.js

关于上面链接的代码,添加:

if(window.opera)

options.interval = 1;

第 89 行效果很好。我唯一担心的是开销,所以我仍在寻找更优雅的解决方案。

【问题讨论】:

您可能想查看 Gmail 的功能。它可以检测 Opera 上的页面卸载或类似情况。 如果你点击一个链接离开页面,Opera 会触发 unload 事件,但基本上不会。 ***.com/questions/4683221/… 【参考方案1】:

根据http://bytes.com/topic/javascript/insights/799229-browser-quirk-onload-onunload-do-not-fire-back-forward-refresh-opera,Opera 从来没有真正触发 onload / onunload 事件,所以如果没有 hack,这样的功能是不可能实现的。

http://dev.opera.com/articles/view/efficient-javascript/?page=4 似乎证实了这一点,并且基本上表明opera 试图跨请求维护页面的状态。

在进一步的研究中,http://unitehowto.com/Onunload 表明它可能可以使用 opera.io.webserver.addEventListener('_close', onunload, false);(其中 onunload 是先前定义的函数),但它也表明此功能在所有版本中都不一致歌剧,可能根本不起作用。

我认为您最好的选择可能是使用 Opera 的轮询选项,或者可能使用服务器端检查当前页面及其在历史队列中的位置。

【讨论】:

是的,你是对的。我想我会强制 Opera 浏览器中的轮询选项每 5 秒左右推送一次数据。我确信对于这样的事情,5 秒的最大间隔是可以接受的。也许,有一天,他们会增加对这样的东西的支持。谢谢,伙计! opera.io.webserver API 仅限于 (Opera Unite) 小部件等,因此上述建议的解决方案也不是一般网页的答案。【参考方案2】:

添加这行 JavaScript 对你有用吗?

history.navigationMode = 'compatible';

来源:http://www.opera.com/support/kb/view/827/

【讨论】:

啊,是的,我应该提到我也尝试过。没有骰子。【参考方案3】:

我遇到了同样的问题,这节省了我的时间:

if( typeof(opera) != 'undefined' )

    opera.setOverrideHistoryNavigationMode( 'compatible' );
    history.navigationMode = 'compatible';

有关此问题的更多信息,请访问:http://www.opera.com/support/kb/view/827/

【讨论】:

以上是关于js可以获取到用户点击浏览器上前进和后退键的事件的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Opera:检测后退、前进、刷新和关闭事件

js如何使浏览器的后退和前进功能失效(IE FF 谷歌)

JS中怎么获得浏览器后退事件

监控浏览器的前进后退---window.onpopstate事件

浏览器“后退”“前进”或可以这么去监听

vue中通过history api拦截浏览器的前进后退按钮事件