Google analytics 使用gtag.js时,如何获取跨域跟踪所需的Google Analytics_ga linker参数

Google analytics 使用gtag.js时,如何获取跨域跟踪所需的Google Analytics_ga linker参数,google-analytics,cross-domain,gtag.js,Google Analytics,Cross Domain,Gtag.js,我的代码使用Javascript window.open链接到另一个域。目标页面的url是动态生成的。我想跨域跟踪分析,但无法使用gtag、js的标准“链接器”自动方法,该方法会自动将_ga参数添加到“a”标记href属性或“表单”的操作属性中。我需要能够手动将_ga属性添加到动态生成的URL中,然后在window.open中使用该URL 我尝试创建一个虚拟的“a href”,然后在事件处理程序中使用dispatchEvent和preventDefault模拟“单击”。这适用于真实的单击事件(将

我的代码使用Javascript window.open链接到另一个域。目标页面的url是动态生成的。我想跨域跟踪分析,但无法使用gtag、js的标准“链接器”自动方法,该方法会自动将_ga参数添加到“a”标记href属性或“表单”的操作属性中。我需要能够手动将_ga属性添加到动态生成的URL中,然后在window.open中使用该URL

我尝试创建一个虚拟的“a href”,然后在事件处理程序中使用dispatchEvent和preventDefault模拟“单击”。这适用于真实的单击事件(将_ga参数附加到href URL,然后我可以提取并使用该URL),但不适用于带有dispatchEvent的模拟单击事件

使用旧的analytics.js实现可以轻松获得客户端ID,但我找不到如何使用gtag.js实现

简单地说,使用analytics.js,可以使用以下代码获取“LinkerParam”字段:

gtag.js的等价物是什么


有人能帮忙吗?

好的,我已经知道怎么做了,想在这里分享一下。这对我来说很有效,但我不能保证这是最好的方式。 gtag.js似乎也会自动加载analytics.js,但它不会通过“创建”来设置跟踪ID。 在本例中,我假设使用标准全局对象,window.dataLayer用于gtag.js,window.ga用于analytics.js

function getLinkerParam(){
    // our global variables
    window.glpReady = false; // set to true when glpLinkerParam is set
    window.glpLinkerParam = null; // the linkerParam

    // define variables will be used in this function
    var analyticsTimeout = null;
    var timeoutFired = false;
    var timeoutPeriod = 1000;

    // Code to initialse analytics.js if necessary
    function initialiseAnalytics(){
        if (!window.GoogleAnalyticsObject){
            window.GoogleAnalyticsObject = 'ga';
            window.ga = window.ga || function(){
                (window.ga.q = window.ga.q || []).push(arguments);
            };
            window.ga.l = 1 * new Date();
        }
    }

    // initialise analytics.js if necessary
    checker: {
        // is gtag.js installed?
        if (window.dataLayer) { // Yes
            // obtain the tracking ID from the dataLayer
            for (var i = 0; i < window.dataLayer.length; i++){
                if (window.dataLayer[i][0] == 'config') {
                    // initialise the tracking with a create
                    console.log('trackingID='+window.dataLayer[i][1]);
                    initialiseAnalytics();
                    window.ga('create', window.dataLayer[i][1]);
                    break checker;
                }
            }
        }
        else {
            // gtag.js is NOT installed
            // check for analytics.js installed
            if (window.GoogleAnalyticsObject){
                // analytics.js is installed in it;s own right
                // so the create should already be done.
                break checker;
            }
        }
        console.log('analytics not installed or config tracker id not found');
        window.glpReady = true;
        return;
    } // end checker

    // here analytics.js is defined either in it's own right
    //  or as part of gtag.js. In either case the tracking ID should have been 'created'.
    ga('require', 'linker');
    ga(function(tracker) {
        console.log('Client ID: '+tracker.get('clientId'));
    });

    // set a timeout for the linkerParam
    analyticsTimeout = setTimeout(function(){
        timeoutFired = true;
        console.log('get linkerParam timeout fired');
        window.glpReady = true;
        return;
    }, timeoutPeriod);

    // get the linkerParam
    console.log('Get linkerParam');
    ga(function(tracker) {
        var linkerParam = tracker.get('linkerParam');
        console.log('got linkerParam: '+linkerParam);
        clearTimeout(analyticsTimeout);
        window.glpLinkerParam = linkerParam;
        window.glpReady = true;
        return;
    });
}
函数getLinkerParam(){ //我们的全局变量 window.glpReady=false;//设置glpLinkerParam时设置为true window.glpLinkerParam=null;//链接参数 //定义变量将在此函数中使用 var分析估计值=零; var timeoutFired=false; var timeoutPeriod=1000; //必要时初始化analytics.js的代码 函数initialiseAnalytics(){ 如果(!window.GoogleAnalyticsObject){ window.GoogleAnalyticsObject='ga'; window.ga=window.ga | |函数(){ (window.ga.q=window.ga.q | |[]).push(参数); }; window.ga.l=1*新日期(); } } //如有必要,初始化analytics.js 检查人:{ //是否安装了gtag.js? 如果(window.dataLayer){//Yes //从数据层获取跟踪ID 对于(var i=0;i 我希望这对某人有帮助

function getLinkerParam(){
    // our global variables
    window.glpReady = false; // set to true when glpLinkerParam is set
    window.glpLinkerParam = null; // the linkerParam

    // define variables will be used in this function
    var analyticsTimeout = null;
    var timeoutFired = false;
    var timeoutPeriod = 1000;

    // Code to initialse analytics.js if necessary
    function initialiseAnalytics(){
        if (!window.GoogleAnalyticsObject){
            window.GoogleAnalyticsObject = 'ga';
            window.ga = window.ga || function(){
                (window.ga.q = window.ga.q || []).push(arguments);
            };
            window.ga.l = 1 * new Date();
        }
    }

    // initialise analytics.js if necessary
    checker: {
        // is gtag.js installed?
        if (window.dataLayer) { // Yes
            // obtain the tracking ID from the dataLayer
            for (var i = 0; i < window.dataLayer.length; i++){
                if (window.dataLayer[i][0] == 'config') {
                    // initialise the tracking with a create
                    console.log('trackingID='+window.dataLayer[i][1]);
                    initialiseAnalytics();
                    window.ga('create', window.dataLayer[i][1]);
                    break checker;
                }
            }
        }
        else {
            // gtag.js is NOT installed
            // check for analytics.js installed
            if (window.GoogleAnalyticsObject){
                // analytics.js is installed in it;s own right
                // so the create should already be done.
                break checker;
            }
        }
        console.log('analytics not installed or config tracker id not found');
        window.glpReady = true;
        return;
    } // end checker

    // here analytics.js is defined either in it's own right
    //  or as part of gtag.js. In either case the tracking ID should have been 'created'.
    ga('require', 'linker');
    ga(function(tracker) {
        console.log('Client ID: '+tracker.get('clientId'));
    });

    // set a timeout for the linkerParam
    analyticsTimeout = setTimeout(function(){
        timeoutFired = true;
        console.log('get linkerParam timeout fired');
        window.glpReady = true;
        return;
    }, timeoutPeriod);

    // get the linkerParam
    console.log('Get linkerParam');
    ga(function(tracker) {
        var linkerParam = tracker.get('linkerParam');
        console.log('got linkerParam: '+linkerParam);
        clearTimeout(analyticsTimeout);
        window.glpLinkerParam = linkerParam;
        window.glpReady = true;
        return;
    });
}