【问题标题】:How do you obtain the Google Analytics _ga linker parameter required for cross-domain tracking when using gtag.js使用gtag.js时如何获取跨域跟踪所需的Google Analytics_ga链接器参数
【发布时间】:2019-11-05 12:17:43
【问题描述】:

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

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

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

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

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

gtag.js 等价物是什么?

谁能帮忙?

【问题讨论】:

    标签: google-analytics cross-domain gtag.js


    【解决方案1】:

    好的,我想出了如何做到这一点,并认为我会在这里分享。这对我有用,但我不能保证这是最好的方法。 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;
        });
    }
    

    我希望这对某人有所帮助。

    【讨论】:

    • 我不敢相信没有任何文档说明如何使用推荐的 gtag 处理方式来处理此问题。 Analytics 正在使用 ga(linkerParam),所以我只是尝试使用具有相同参数名称的 gtag get 函数
    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2021-02-23
    • 2023-03-29
    • 2013-07-26
    • 2015-01-31
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多