我的许多活动(可能是20%)都没有记录在Google Analytics中。这些都是在发布表单的图像按钮上通过onclick调用的所有事件。我相信代码运行速度不够快,无法在浏览器转到下一页之前将事件提交给Google。
我想要做的是检查_gaq队列的状态,并确保在完成我的Javascript之前没有待处理的事件。
_gaq对我来说似乎有点神秘,但它确实有一个暴露的属性 - 你。我一直在使用以下简单命令在Chrome中进行测试:
console.log(_gaq.u);
不幸的是,即使在_gaq.push命令之后立即运行,它也始终返回0。当然,Chrome似乎总是在发布之前将事件发送给Google,所以我不确定我是否可以在Chrome中调试,因为我无法复制问题。
有没有人知道是否有办法从_gaq获取队列中待处理项目的数量? _gaq.u是适当的属性吗?我想做一些比在我的所有活动中等待100或200毫秒等待更优雅的事情。
答案 0 :(得分:4)
_gaq
有两个阶段。
首先,当一个数组在加载ga.js
之前,它的一个函数名称及其参数或实际函数的队列。
然后,当ga.js
加载时,它会被转换为特殊对象,处理队列(调用函数),所有后续_gaq.push()
调用立即执行它们传递的内容。 / p>
当它仍然是队列时,_gaq
只是一个普通的JavaScript数组。因此,您可以使用_gaq.length
访问等待处理的项目数。处理完队列后,就没有队列了。
onclick
种族条件问题很常见。许多人喜欢通过阻止默认操作,执行事件跟踪,然后设置完成原始操作的短时间跨度setTimeout来绕过它。
我的偏好是不要仅仅因为分析而牺牲用户体验(我这样做是为了生活。)所以,我的解决方案是使用onmousedown
和onkeydown
作为替代品(我一起参考它们为preclick
。它消除了竞争条件,只有极少的误报,这对于网络分析来说已经足够了,这是关于近似模型,而不是科学准确性。
以下是jQuery中的一个示例:
$.fn.preclick = function(param) {
if (!param) {
return this.trigger("mousedown");
}
return this.one("keydown.preclick mousedown.preclick", function(e) {
if (e.type === "mousedown" || e.which === 13) {
param.apply(this);
}
});
};