如何调试Google Analytics跟踪错误(_gaq.push返回'3')

时间:2012-10-20 01:56:36

标签: google-analytics google-analytics-api

总结:

我误解了内容脚本的用法。这导致了这个问题。以下是Google官方文档的引用:

  

执行环境

     

内容脚本在称为隔离的特殊环境中执行   世界。他们可以访问他们注入的页面的DOM,   但到页面创建的任何JavaScript变量或函数。   它将每个内容脚本视为没有其他JavaScript   在正在运行的页面上执行。 反过来也是如此:   页面上运行的JavaScript无法调用任何函数或访问任何函数   由内容脚本定义的变量。

更多细节: Content Script tracking with Google Analytics

-

我在Chrome扩展程序中添加了一些跟踪代码。但是当我测试它时,_gaq.push返回数字3.正如我测试的那样,我想如果我在扩展中调用_gaq.push,数字将继续上升。但是当我在控制台中调用它时,一切都很好(所有相同的代码)。

我想知道如何更深入地跟踪此错误?

非常感谢每一个答案!

更新:

当我追踪_gaq的返回值时,它仍然是一个数组。这意味着没有加载ga.js,对吗?

但似乎ga.js永远不会加载到我的脚本中。除非我在控制台中手动输入_gaq,否则它就是一个对象。这很奇怪。

我检查了DOM,发现标签已经添加。

我查看了“网络”面板,发现队列中根本没有加载ga.js。但为什么我仍然可以使用控制台来访问_gaq对象?

UPDATE2:

我使用console.log来跟踪" window._gaq"的值。并发现console.log(window._gaq)的返回值与直接输入" window._gaq"相比是不同的。在控制台中。它完全是两个不同的对象。我甚至使用setInterval函数来记录结果,并且它不断返回数组,而不是预期的对象。

1 个答案:

答案 0 :(得分:7)

当你的脚本_gaq运行时,它是一个常规数组。就像JavaScript中的任何数组一样,它有方法push,它将一个或多个元素插入到数组中,并返回数组的最终长度。

例如:

var _gaq = [];
> undefined
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
> 1
_gaq.push(['_setDomainName', 'mysite.com']);
> 2
_gaq.push(['_trackPageview'], 
          ['_trackEvent', 'cat', 'act']);
> 4

加载ga.js文件后,将读取_gaq数组,以便处理推送到其中的指令,然后用对象替换_gaq数组。该对象也实现了push函数。但请注意,在这种情况下,push函数将执行ga.js库中的指令,然后返回0.

例如:

var _gaq = {
  push: function(){
    // Do something here
    return 0;
  }
};
> undefined
_gaq.push(['_trackPageview'])
> 0

这是一个非常聪明的Google设计,可以创建一个甚至可以在加载库(ga.js)之前使用的API。

这就是为什么在你的脚本_gaq.push中是一个Array类的方法并且返回递增的数字,并且在控制台上它总是返回0.

这根本不是问题。它似乎按预期工作。

<强>更新

似乎ga.js已经加载了。也许它被缓存而没有在网络面板上显示。

ga.js由跟踪脚本的这一部分加载:

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

它是异步加载的。因此,在执行此片段后,它将被加载,但加载它的确切位置是未知的。

如果您需要知道加载ga.js文件的时间,您可以将回调推送到_gaq,并在加载ga.js文件时执行。

例如:

_gaq.push(function(){
  console.log('ga.js loaded!');
  debugger;
});