8

我的网站上有一些 Google Analytics 跟踪代码 (GATC),它会触发对_gaq.pushGoogle 代码中的方法的调用。

在 GA 不可用或_gaq尚未加载的情况下,我想确保页面上没有任何 JavaScript 错误。通过检查_gaq与“未定义”不同 - 这足以检查它是否可用并且这是 x 浏览器吗?我已经查看了 Google 的文档,但它没有提及任何关于此的内容。

我知道检查对象是否为null,但我不确定这是否有必要。

if (typeof(_gaq) !== 'undefined') {
   _gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 
   _gaq.push(['rollup._trackEvent', 'Downloaded Video', 'Yes']);                                    
}
4

6 回答 6

50

如果您使用的是 Universal Analytics ( analytics.js),请切换:

_gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 

对此:

ga('send', 'event', 'Downloaded Video', 'Yes');
于 2013-07-04T15:46:06.673 回答
18

在您从分析中获得的推荐 javascript 代码中,它包括以下行:

var _gaq = _gaq || [];

因此,如果您在代码中保留此行,则该数组应该始终可用。如果您稍后添加分析代码,只需在主脚本之前添加上面的行,它就会起作用。

请注意,即使您_gaq之前定义了此代码段,它也是无害的,因为它仅将它定义为一个新的 Array,如果它以前未定义。

这是使用异步脚本的好方法,数组首先在本地定义,您可以在需要时将命令推送到该数组。加载分析脚本后,它可以在需要时使用这些命令。所以不需要检查数组是否未定义或类似的东西。

于 2012-11-16T10:16:12.093 回答
3

加载时ga.js,它定义了一个window._gat(注意 T 而不是 Q)全局对象,您只需要测试它是否已定义(但要注意它是异步加载的,那么您可能会延迟测试)。

于 2012-11-19T09:18:30.190 回答
3

您通常不需要检查它是否已定义,因为 Google Analytics(分析)代码段会为您执行此操作。但是,如果您在 stie 的其他部分执行类似事件跟踪的操作,因为问题表明,有时最好检查一下脚本是否已加载,因为它是异步的。

我为 GA 编写了一个 jQuery 插件包装器,并想在尝试向其推送任何数据之前检查代码是否确实安装了 GA。这是为了涵盖有人试图在未安装 GA 或初始化 GA 之前使用插件的情况。

if (typeof(_gaq) == 'undefined') {
  console.error("Google Analytics is not installed");
}
于 2013-02-21T20:13:46.250 回答
1

正如@David所说,只要您之前var _gaq = _gaq || [];定义了代码段,就可以了,无需检查_gaq是否未定义。

_gaq如果之前未定义,则将其定义为空数组的原因是它有一个push方法。这允许您的分析代码在加载 GA 代码之前执行,或者在某些情况下它不可用时执行。

当 GA 加载时,_gaq将被重新定义为带有push方法的对象,并且将执行旧 _gaq 数组的任何现有内容。

于 2012-11-16T21:20:10.110 回答
0

您可能想在 js 中的某处添加事件跟踪,但 CMS 只为未登录的访问者或某些页面添加 Google Analytics。该功能的以下检查将起作用:

if (typeof(ga) === 'function') {
  ga('send', 'event', 'what', 'has', 'happened');
}
于 2017-06-01T13:52:41.303 回答