检查是否已加载Google Analytics并调用ga('创建',...)

时间:2016-04-22 09:37:49

标签: javascript google-analytics

我正在使用analytics.js。但是,我没有加载Google Analytics以及analytics.js脚本,因为我正在等待一些数据首先出现。

因此我稍后会致电ga('create', googleKey, 'auto');。这个脚本应该总是执行,但我想100%肯定。因此,我想在我的控制器中调用该函数,但前提是它还没有被调用过。

因此,我怎样才能确保它之前被调用并执行过?

我认为window.GoogleAnalyticsObject在这里帮助我。但看起来,这只能告诉我ga正在使用中,而不是它何时被加载以及是否已加载。

有什么工作吗?

1 个答案:

答案 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();

添加记录计数器也是一个好主意。您还可以在请求中搜索其他特征。网页浏览请求如下所示:

https://www.google-analytics.com/collect?v=1&_v=j41&a=707797589&t=pageview&_s=1&dl=[URL]&ul=en-us&de=UTF-8&dt=[PAGETITLE]&sd=24-bit&sr=1920x1080&vp=1296x992&je=0&fl=21.0%20r0&_u=QCCAgAAB~&jid=1841853851&cid=253920917.1460537916&tid=UA-39805455-4&gtm=[GTMID]&cg1=beauty&z=1871236975

修改: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!");
        }
    }
};