2

我目前正在开发一个跟踪访问者鼠标行为的 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 行效果很好。我唯一担心的是开销,所以我仍在寻找更优雅的解决方案。

4

3 回答 3

2

根据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似乎证实了这一点,并且基本上表明歌剧试图跨请求维护页面的状态。

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

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

于 2009-08-27T15:46:26.113 回答
1

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

if( typeof(opera) != 'undefined' )
{
    opera.setOverrideHistoryNavigationMode( 'compatible' );
    history.navigationMode = 'compatible';
}

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

于 2012-02-28T09:31:11.790 回答
1

添加这行 JavaScript 对你有用吗?

history.navigationMode = 'compatible';

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

于 2009-08-27T04:47:06.893 回答