谷歌分析,_gaq.push(回调),回调永远不会执行

时间:2014-02-02 00:08:19

标签: javascript iframe callback google-analytics push

根据enter link description here的文档

,我正在使用谷歌分析和跟踪iframe的数据

所以在外页(包含iframe)中我使用_gaq.push()方法来推送并执行在运行时嵌入iframe的回调。

但该回调永远不会被执行。

此外,在外页我有两个跟踪脚本,回调必须由第二个跟踪脚本执行。

推送回调的代码如下

_gaq.push(['ga_code_second_tracking_script._setAccount', '<ga_code_of_second_tracking_script>']);
_gaq.push(function(){
                    console.log('IN PUSH');
                    var tracker = _gat._getTracker('<ga_code_of_second_tracking_script>');
                    embedIframe();                
})

1 个答案:

答案 0 :(得分:0)

您尝试将回调函数插入Array.prototype的推送方法时会犯一个简单的错误,默认情况下该方法不存在。我的意思是,Array.prototype.push()不接受回调函数。由于_gaqArray,因此无效。您正在做的是,当您调用_gaq时,只需将您刚定义的函数添加到数组_gaq.push(function(){...});,这样就不会触发任何函数调用。你可以做的是自己定义一个函数like this person here is trying to do

为简单起见,我在这里添加代码:

_gaq.push = function (){
    //Callback Function Call here...
    return Array.prototype.push.apply(this,arguments);
}

每次使用_gaq.push()函数时,此方法都会执行回调。

您似乎误解了Google Developer Docs中的文档。它指出,In addition to pushing command arrays, you can also push function objects. This can be especially useful for tracker methods that return values. These functions can reference both _gat and _gaq.您只是推送一个函数对象,而不是将该函数用作回调。请明确这一点。如果函数返回GA应该使用的任何值,例如,返回可以推送到GA的字符串数组的函数,则会推送返回值。

而且确实,您在问题中指的是analytics.js(文档的链接),而_gaq对象从未在该实现中使用(_gaq是仅用于较早的ga.js实现。)

即使是简单的function(){alert('1');},也会在推送到_gaq时执行。同样,这不是回调,只是在推送该函数时执行的函数调用。