Google analytics 如何调试Google Analytics跟踪错误(_gaq.push returns';3';)

Google analytics 如何调试Google Analytics跟踪错误(_gaq.push returns';3';),google-analytics,google-analytics-api,Google Analytics,Google Analytics Api,总结: 我误解了内容脚本的用法。这就引出了这个问题。以下是谷歌官方文件中的一段话: 执行环境 内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是,不到页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行反之亦然: 页面上运行的JavaScript无法调用任何函数或访问任何 由内容脚本定义的变量 更多详情: -- 我在Chrome扩展中添加了一些跟踪代码。但是当我测试它时,_gaq.

总结:

我误解了内容脚本的用法。这就引出了这个问题。以下是谷歌官方文件中的一段话:

执行环境

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是,到页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行反之亦然: 页面上运行的JavaScript无法调用任何函数或访问任何 由内容脚本定义的变量

更多详情:

--

我在Chrome扩展中添加了一些跟踪代码。但是当我测试它时,_gaq.push返回数字3。当我测试时,我想如果我在分机中调用_gaq.push,号码会不断增加。但当我在控制台中调用它时,一切都很好(代码都是一样的)

我想知道如何才能更深入地跟踪这个错误

非常感谢你的回答

更新:

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

但我的脚本中似乎从未加载ga.js。除非我在控制台中手动键入_gaq,否则它是一个对象。这很奇怪

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

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

更新2:


我使用console.log跟踪“window.\u gaq”的值,发现console.log(window.\u gaq)的返回值不同于控制台中直接键入“window.\u gaq”。这是两个完全不同的物体。我甚至使用setInterval函数来记录结果,它会不断返回数组,而不是预期的对象。

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

例如:

加载ga.js文件后,读取
\u gaq
数组,以便处理推入其中的指令,然后用对象替换
\u gaq
数组。对象还实现了推送功能。但是请注意,在这种情况下,push函数将执行一条进入ga.js库的指令,然后返回0

例如:

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

这就是为什么在脚本期间,gaq.push是数组类的一个方法,返回递增的数字,在控制台上它总是返回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的返回值时,它仍然是一个数组。这意味着ga.js仍然没有加载。但问题是,它从未加载到我的脚本中,除非我使用console.log来跟踪_gaq。这很奇怪。我已经更新了我的问题。@AwQiruiGuo我更新了我的答案,但是你最好解释清楚你想调试什么。只要检查gif请求,如果它们被发送,那么它就工作了。感谢您的快速回复!我查过了,任务没有发送。我最终发现这可能是Chrome扩展脚本有效范围的问题。无法直接从控制台面板访问我在扩展中的内容脚本中定义的对象。也许这不是GA的问题,而是Chrome的问题。你有什么好的建议吗?你不应该在内容脚本中插入谷歌分析跟踪代码。您运行的代码可能会受到页面上代码的影响。您最好从contant脚本向后台脚本发送消息以执行跟踪,然后从后台页面进行跟踪。谢谢Eduardo!我会调查的。你的回答对我帮助很大!:)
var _gaq = {
  push: function(){
    // Do something here
    return 0;
  }
};
> undefined
_gaq.push(['_trackPageview'])
> 0
  (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);
  })();
_gaq.push(function(){
  console.log('ga.js loaded!');
  debugger;
});