2

有没有一种好方法可以判断给定用户在 Web 应用程序的给定页面上花费了多长时间,准确度约为一分钟?

我想到的一种解决方案是使用 Javascript 每分钟点击一次 Web 服务,并跟踪数据库中的点击量。但我想知道是否有更好的方法......有没有办法通过谷歌分析来完成这个?如果是这样,怎么做?

4

2 回答 2

3

首先,我同意有关分析软件的评论,您绝对应该研究它们以了解这种性质的事情。

我不知道这会有多好,我绝对不相信这是最好的方法,但如果你死心塌地做这个客户端,你也许可以尝试类似的方法:

var start = new Date().getTime();

window.onbeforeunload = function(){
    var end = new Date().getTime();
    alert( parseInt(end - start, 10)/60000 + " minutes" );
};

这里的想法是在用户访问您的页面后保存当前时间。一旦他们离开,onbeforeunload事件应该触发并运行函数来计算他们在页面上花费的时间。我想你可以在ajax 调用(或其他东西)中添加一个同步调用来节省某处的总时间。

例子

注意:jsfiddle 将阻止这些事件,但您仍然可以通过打开控制台在错误日志中看到输出。打开控制台后,只需点击Run即可触发事件。

编辑

请参阅下面@Ian 关于在onbeforeunload事件中使用 AJAX 请求的评论。

于 2013-04-16T20:03:02.510 回答
1

对于那些感兴趣的人,我在一个小型 JavaScript 库和服务中做了一些工作,以计算用户与网页交互的时间。它实际上完全符合 Chase 在他/她的回答中所描述的!然而,它还有一个额外的好处,那就是更准确(虽然不是很完美)跟踪用户实际与页面交互的时间。它忽略用户切换到不同选项卡、空闲、最小化浏览器等的时间。

编辑:我已经更新了示例以包含当前的 API 使用情况。

http://timemejs.com

其用法示例:

在您的页面中包含:

<script src="http://timemejs.com/timeme.min.js"></script>
<script type="text/javascript">
TimeMe.initialize({
    currentPageName: "home-page", // page name
    idleTimeoutInSeconds: 15 // time before user considered idle
});
</script>

如果您想自己向后端报告时间:

window.onbeforeunload = function(){
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("POST","ENTER_URL_HERE", false);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds();
    xmlhttp.send(timeSpentOnPage);
});

TimeMe.js 还支持通过 websockets 发送计时数据,因此您不必尝试将完整的同步 http 请求强制到document.onbeforeunload事件中。

于 2015-01-31T20:45:07.293 回答