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

标签 javascript jquery browser opera onunload

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

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

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

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

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

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

谢谢!

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

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

if(window.opera)
{
options.interval = 1;
}

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

最佳答案

根据http://bytes.com/topic/javascript/insights/799229-browser-quirk-onload-onunload-do-not-fire-back-forward-refresh-opera ,Opera 从来不会真正触发 onload/onunload 事件,因此如果不进行黑客攻击,这样的功能是不可能实现的。

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 的轮询选项,或者可能使用服务器端检查当前页面及其在历史队列中的位置。

关于javascript - Opera:检测后退、前进、刷新和关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1338874/

相关文章:

javascript - 如何从 .js 获取 javascript 代码作为文本插入到 html 页面中?

html - 背景图片大小

javascript - 如何避免在我的 Firefox 附加组件中出现“"TypeError: can' t 访问死对象”状态?

javascript - HTML 样式表更改错误

javascript - 应用关闭时Android WebView保存显示状态

php - 选中的复选框不起作用?

javascript - 如何改变曾曾...曾祖父的元素值

c# - 没有 ID 和名称的 GetElementById 如何?

browser - 缓存对 CORS : No 'Access-Control-Allow-Origin' header is present on the requested resource 的影响

javascript - 如果在手机设置中禁用了 javascript,phonegap + jquerymobile 应用程序会工作吗?