在闭包中使用_gaq async

时间:2010-09-01 21:45:36

标签: javascript google-analytics closures

使用时

var _gaq = _gaq || [];

在脚本标记内,在闭包中支持此操作以添加分析异步请求。

即。

experiment = (function(){
          var _gaq = _gaq || [];
          _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
          _gaq.push(['_trackPageview']); 
          var nobody_knows_this_var_is_here = "cant see me";
        });

如果尚未定义_gaq,它将能够找到此数组,以便在准备就绪后执行推送到它的项目。因为_gaq var不公开我猜它不会起作用。任何解决方法?

3 个答案:

答案 0 :(得分:5)

您可以执行以下操作:

(function (window) {
    var g = window._gaq || (window._gaq = []);
    g.push(['_setAccount', 'UA-XXXXX-X']);
    g.push(['_trackPageview']);
})(this);

如果在全局范围内执行,这就可以解决问题。

答案 1 :(得分:1)

这是有效的(使用jQuery的document.ready表示法):

$( function() {
    $('.foobar').on('click', function() {
        var _gaq = window._gaq || (window._gaq = []);
        _gaq.push(['_trackEvent', 'category', 'action', 'label']);
    });
});

答案 2 :(得分:0)

我不知道这是否会帮助其他人寻找答案,但也许会。 我有一个问题,没有定义_gaq。我意识到我的GA片段接近结束体标记之前的页面末尾。正如Google现在建议的那样,我在身体标签开始后将其移动到了正确的位置。我仍然有一个未定义的_gaq的问题。放

var _gaq = window._gaq || (window._gaq = []);

在我的代码顶部有自定义事件有助于解决我的所有问题,但前提是Google代码段位于页面顶部。这对我帮助很大,除了jQuery就绪函数之外,我没有把它放在每个click事件或任何地方的函数中。