JavaScript监听_gaq.push?

时间:2014-06-08 18:29:03

标签: javascript google-analytics

我有一个小部件可以将javascript代码注入我的用户网站。现在,我想添加监听Google Analytics _addTrans电话的功能。

Google Analytics调用示例:

<a onclick=" _gaq.push(['_addTrans',
    '1234',           // transaction ID - required
    'Acme Clothing',  // affiliation or store name
    '11.99',          // total - required
    '1.29',           // tax
    '5',              // shipping
    'San Jose',       // city
    'California',     // state or province
    'USA'             // country
  ]);" href="#">CONVERSION</a>

_gaq是Google Analytics提供的对象。

我的脚本是否也可以接收到_gaq对象的推送事件?

我试过了:

if (window._gaq) {
    for (var i = 0; i < _gaq.length; i++) {     
        var method = _gaq[i].shift();
        console.log(method);
    }
};

window._gaq = {
    push: function() {
        try {
            var args = Array.prototype.slice.call(arguments, 0);
            console.log(args);
        }
        catch(err) { 
            console.log(err);
        }  
    }
};

虽然有效,但Google Analytics现在无法再跟踪转化情况了。看来我压倒一切。有什么想法可以做到吗?

2 个答案:

答案 0 :(得分:4)

您想要保存原始push功能,然后在覆盖结束时调用它。

var originalPush = window._gaq.push;
window._gaq.push = function () {
  // do something else
  ...
  // then call the original function with the same args
  originalPush(arguments);
};

以供将来参考,这称为Monkey Patching

答案 1 :(得分:1)

这可能会对Google Analytics产生负面影响,具体取决于您的实施方式,但您可以尝试将对象的引用从_gaq更改为另一个变量,然后接管_gaq变量你自己用的。然后,您可以重新定义_gaq.push()函数,以便它(1)触发新变量上的原始push()方法,并(2)触发您自己的自定义事件处理程序。

示例:

var _gaq_actual = _gaq;
_gaq = {
    push: function(args) {
        // First, call the push() method on the "actual" GA object.
        _gaq_actual.push(args);
        // Now, do what you want with the args here. (Or, you could do this first.)
        customMethod(args);
    }
};