我有一个小部件可以将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现在无法再跟踪转化情况了。看来我压倒一切。有什么想法可以做到吗?
答案 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);
}
};