我正在使用analytics.js。但是,我没有加载Google Analytics以及analytics.js脚本,因为我正在等待一些数据首先出现。
因此我稍后会致电ga('create', googleKey, 'auto');
。这个脚本应该总是执行,但我想100%肯定。因此,我想在我的控制器中调用该函数,但前提是它还没有被调用过。
因此,我怎样才能确保它之前被调用并执行过?
我认为window.GoogleAnalyticsObject
在这里帮助我。但看起来,这只能告诉我ga正在使用中,而不是它何时被加载以及是否已加载。
有什么工作吗?
答案 0 :(得分:0)
最佳解决方案是检查像素请求。创建recursiv函数或区间函数。请求是一个简单的img,其中包含以下基础:https://www.google-analytics.com/collect
e.g
function checkAnalyticsPixel(){
var analyticsPixel = false;
var imgs = document.getElementsByTagName('img');
for(var i = 0; i < imgs.length; i++){
var img = imgs[i];
if(!!img.src.match("google-analytics.com/collect")){
analyticsPixel = true;
}
}
if(!analyticsPixel){
setTimeout(checkAnalyticsPixel, 1000);
}else{
return true;
}
}
checkAnalyticsPixel();
添加记录计数器也是一个好主意。您还可以在请求中搜索其他特征。网页浏览请求如下所示:
修改:Google Analytics会删除Pixel。您可以覆盖appendChild。这不是一个非常好的解决方案,但它可以工作。覆盖必须是脚本中的第一个。
var appendChildPrototype = Element.prototype.appendChild;
Element.prototype.appendChild = function(){
appendChildPrototype.apply(this, arguments);
for(var i = 0; i < arguments.length; i++){
var element = arguments[i];
if(element.nodeName == "IMG" && element.src.match("google-analytics.com/collect")){
console.log("ANALYTICS!");
}
}
};