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

Check if Google Analytics is loaded and ga('create',...) is called

本文关键字:create ga 调用 Analytics Google 是否 加载 检查      更新时间:2023-09-26

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

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

因此,我如何确保它之前被调用和执行过?

我认为window.GoogleAnalyticsObject在这里对我有帮助。但似乎,这只告诉我 ga 正在使用中,而不是确切地告诉我何时加载以及是否加载。

有什么解决方法吗?

最好的解决方案是检查像素请求。创建递归函数或区间函数。该请求是具有以下基础的简单 img:https://www.google-analytics.com/collect

例如

        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

编辑:分析会删除像素。您可以覆盖 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!");
        }
    }
};