Javascript 如何判断每个用户访问每个页面的时间?

Javascript 如何判断每个用户访问每个页面的时间?,javascript,web-applications,web,google-analytics,google-analytics-api,Javascript,Web Applications,Web,Google Analytics,Google Analytics Api,有没有一种很好的方法可以准确地告诉给定用户在web应用程序的给定页面上花费了多长时间 我想到的一个解决方案是使用Javascript每分钟访问一个web服务,并在数据库中跟踪访问。但我想知道是否有更好的方法。。。有没有办法通过谷歌分析来实现这一点?如果是这样,怎么做?首先,我同意关于分析软件的评论,你肯定应该调查这些评论,以了解这种性质的东西 我不知道这会有多好,我肯定不认为这是最好的方式,但如果你下定决心要做这个客户端,你也许可以尝试以下方式: var start = new Date().g

有没有一种很好的方法可以准确地告诉给定用户在web应用程序的给定页面上花费了多长时间


我想到的一个解决方案是使用Javascript每分钟访问一个web服务,并在数据库中跟踪访问。但我想知道是否有更好的方法。。。有没有办法通过谷歌分析来实现这一点?如果是这样,怎么做?

首先,我同意关于分析软件的评论,你肯定应该调查这些评论,以了解这种性质的东西

我不知道这会有多好,我肯定不认为这是最好的方式,但如果你下定决心要做这个客户端,你也许可以尝试以下方式:

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

window.onbeforeunload = function(){
    var end = new Date().getTime();
    alert( parseInt(end - start, 10)/60000 + " minutes" );
};
这里的想法是在用户访问您的页面时保存当前时间。一旦他们离开,事件应该触发并运行函数来计算他们在页面上花费的时间。我想您可以添加一个ajax调用(或类似的调用)同步调用,以节省总时间

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

编辑


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

首先,我同意关于分析软件的评论,你肯定应该调查这些评论,以了解这种性质的东西

我不知道这会有多好,我肯定不认为这是最好的方式,但如果你下定决心要做这个客户端,你也许可以尝试以下方式:

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

window.onbeforeunload = function(){
    var end = new Date().getTime();
    alert( parseInt(end - start, 10)/60000 + " minutes" );
};
这里的想法是在用户访问您的页面时保存当前时间。一旦他们离开,事件应该触发并运行函数来计算他们在页面上花费的时间。我想您可以添加一个ajax调用(或类似的调用)同步调用,以节省总时间

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

编辑


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

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

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

其用法示例如下:

包括在您的页面中:

<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还支持通过WebSocket发送计时数据,因此您不必试图强制将完全同步的http请求写入
文档.onbeforeunload
事件。

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

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

其用法示例如下:

包括在您的页面中:

<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还支持通过WebSocket发送计时数据,因此您不必尝试将完全同步的http请求强制到
document.onbeforeunload
事件中。

我想这样的度量不是来自页面本身,而是来自比较(完全可以在服务器端完成)请求页面的时间与请求下一页的时间。(假设没有后续页面被请求,那么这是一个被放弃的会话。)谷歌分析可能是一条出路。特别是在页面分析中,我想象这样一个指标不会来自页面本身,而是来自于页面被请求的时间与下一个页面被请求的时间的比较(完全可以在服务器端完成)。(假设没有后续页面被请求,那么这是一个被放弃的会话。)谷歌分析可能是一条出路。页面内分析,尤其是
beforeunload
事件中的rajax请求在跨浏览器时不一致,帮助它们的最佳/唯一方法是同步请求。当页面离开时,浏览器会中止打开的AJAX请求。因此,当您在
beforeunload
事件中启动一个请求时,也就是在
unload
事件之前,很有可能请求在其生命周期中没有到达足够远的服务器。感谢您指出@Ian,就像我上面所说的那样……我不太确定它的工作情况如何。但是你完全正确,它们需要同步。我知道,我只是想解释一下可能发生的情况:)对我来说,类似OP要求的东西只需要与服务器通信。服务器不必响应。因此,如果AJAX请求可以在浏览器中止时离开浏览器(这只是意味着浏览器不会处理其响应),那么这就足够了。在我参与的一个项目中,我们在卸载之前在
中发送了一个AJAX请求,我们需要它是同步的。可能有帮助的是在它上面加一个超时(我们做了1000毫秒),比如jQuery
$。ajax
允许。对于这个措辞,我很抱歉——它仍然是一个ajax请求,