使用gtag.js时如何获取跨域跟踪所需的Google Analytics _ga链接器参数

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

我尝试过创建一个虚拟的'a href',然后使用带有事件处理程序中的preventDefault的dispatchEvent来模拟'click'。这适用于实际的点击事件(将_ga参数附加到href URL上,然后我可以提取并使用),但不适用于带有dispatchEvent的模拟点击事件。

使用旧的analytics.js实现可以轻松获得客户端ID,但我找不到使用gtag.js进行操作的方法。

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

ga(function(tracker) {
   var linkerParam = tracker.get('linkerParam');
});

什么是gtag.js等效项?

有人可以帮忙吗?

qingfenglvshui 回答:使用gtag.js时如何获取跨域跟踪所需的Google Analytics _ga链接器参数

好的,我已经弄清楚如何做到这一点,并以为可以在这里分享。这对我有用,但我不能保证这是最好的方法。 看来gtag.js还会自动加载analytics.js,但是它不会执行“创建”来设置跟踪ID。 在此示例中,我假设使用了标准的全局对象,gtag.js使用window.dataLayer,analytics.js使用window.ga。

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;
    });
}

我希望这对某人有帮助。

本文链接:https://www.f2er.com/3166560.html

大家都在问