Javascript 使用构造函数/通用分析立即调用函数

Javascript 使用构造函数/通用分析立即调用函数,javascript,google-analytics,universal-analytics,event-tracking,Javascript,Google Analytics,Universal Analytics,Event Tracking,我试图弄清楚跟踪/分析脚本是如何工作的。有一个优化版本的: (函数(窗口、文档、变量名、scriptElement、firstScript){ 窗口['GoogleAnalyticsObject']=variableName; 窗口[variableName]| |(窗口[variableName]=函数(){ (window[variableName].q=window[variableName].q | | |[]).push(参数); }); 窗口[variableName].l=+新日

我试图弄清楚跟踪/分析脚本是如何工作的。有一个优化版本的:


(函数(窗口、文档、变量名、scriptElement、firstScript){
窗口['GoogleAnalyticsObject']=variableName;
窗口[variableName]| |(窗口[variableName]=函数(){
(window[variableName].q=window[variableName].q | | |[]).push(参数);
});
窗口[variableName].l=+新日期;
scriptElement=document.createElement('script'),
firstScript=document.scripts[0];
scriptElement.src='1〕https://127.0.0.1:3000/analytics.js';
firstScript.parentNode.insertBefore(scriptElement,firstScript)
}(窗口,文件“ga”);
ga(“创建”、“UA-XXXX-Y”);
ga(‘发送’、‘页面浏览’);
加载自定义脚本时,我无法理解ga()函数是如何工作的。我已经尝试了各种iLife和构造函数,但是没有得到“创建”和“发送”事件

如何在服务器上查看这些事件

更新

我设法抽象到队列,现在想知道如何创建一个异步队列来将这些事件发送到服务器。有什么建议吗

(function() {
  var ga = function(a) {
    return void 0 != a && -1 < (a.constructor + '').indexOf('String');
  };
  var sa = function(a) {
    return a ? a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '') : '';
  };
  var gb = ga(window.GoogleAnalyticsObject) && sa(window.GoogleAnalyticsObject) || 'ga';
  var Window = window;
  var Document = document;

  console.log(Window[gb].q);

})(window);
(函数(){
var ga=函数(a){
返回void 0!=a&&1<(a.constructor+'').indexOf('String');
};
var sa=函数(a){
返回?a.replace(/^[\s\xa0]+|[\s\xa0]+$/g',):'';
};
var gb=ga(window.GoogleAnalyticsObject)和&sa(window.GoogleAnalyticsObject)| |‘ga’;
var窗口=窗口;
var文件=文件;
console.log(Window[gb].q);
})(窗口);

该函数只是将所有调用参数推送到一个数组中。它随后被
analytics.js
通过
窗口.GoogleAnalyticsObject
获取。谷歌似乎并没有提供一个非精简版的
analytics.js
,而是提供了一个快速的去美和搜索,最终你会得到:

var gb = qa(window.GoogleAnalyticsObject) && sa(window.GoogleAnalyticsObject) || "ga"
qa
检查它是否是字符串,而
sa
函数只是稍微清除名称

那么,他们还会在哪里使用
gb
?作业只发生在其他地方:

N.N
功能:

N.N = function() {
        "ga" != gb && J(49);
        var a = O[gb];
        if (!a || 42 != a.answer) {
            N.L = a && a.l;
            N.loaded = !0;
            var b = O[gb] = N;
            X("create", b, b.create);
            X("remove", b, b.remove);
            X("getByName", b, b.j, 5);
            X("getAll", b, b.getAll, 6);
            b = pc.prototype;
            X("get", b, b.get, 7);
            X("set", b, b.set, 4);
            X("send", b, b.send);
            b = Ya.prototype;
            X("get", b, b.get);
            X("set", b, b.set);
            if (!Ud() && !Ba) {
                a: {
                    for (var b = M.getElementsByTagName("script"), c = 0; c < b.length && 100 > c; c++) {
                        var d = b[c].src;
                        if (d && 0 == d.indexOf("https://www.google-analytics.com/analytics")) {
                            J(33);
                            b = !0;
                            break a
                        }
                    }
                    b = !1
                }
                b && (Ba = !0)
            }
            Ud() || Ba || !Ed(new Od) || (J(36), Ba = !0);
            (O.gaplugins = O.gaplugins || {}).Linker = Dc;
            b = Dc.prototype;
            Yd.set("linker", Dc);
            X("decorate", b, b.ca, 20);
            X("autoLink", b, b.S, 25);
            Yd.set("displayfeatures", fd);
            Yd.set("adfeatures", fd);
            a = a && a.q;
            ka(a) ? Z.D.apply(N, a) : J(50)
        }
    };
您在脚本中使用的
ga
函数将很快被其他函数(
N
)所取代:

这是N:

var N = function(a) {
        J(1);
        Z.D.apply(Z, [arguments])
    };
正在使用的队列在哪里

a = a && a.q;
ka(a) ? Z.D.apply(N, a) : J(50)

Z.D
函数似乎就是执行参数的函数。它使用更小型化的函数。我建议您继续从这里查看。

您的代码在哪里?谢谢您的提示。谷歌分析(Google Analytics)是一个相当大的模块。设法提取了一些代码,但仍然卡住了。
var b = O[gb] = N;
var N = function(a) {
        J(1);
        Z.D.apply(Z, [arguments])
    };
a = a && a.q;
ka(a) ? Z.D.apply(N, a) : J(50)