Как получить параметр компоновщика _ga Google Analytics, необходимый для междоменного отслеживания при использовании gtag.js - PullRequest
0 голосов
/ 04 ноября 2019

Мой код использует Javascript window.open для ссылки на другой домен. URL целевой страницы генерируется динамически. Я хочу отслеживать аналитику по всем доменам, но не могу использовать стандартный автоматический метод «linker» gtag, js, который автоматически добавляет параметр _ga в атрибут href тега a или атрибут действия для формы. Мне нужно иметь возможность вручную добавить атрибут the_ga к динамически генерируемому URL, который затем используется в window.open.

Я попытался создать фиктивную переменную 'href', а затем смоделировать щелчок, используя dispatchEvent с protectDefault в обработчике событий. Это работает для события реального щелчка (параметр _ga добавляется к URL-адресу href, который я затем могу извлечь и использовать), но не для события смоделированного щелчка с dispatchEvent.

Идентификатор клиента можно легко получить с помощьюстарая реализация analytics.js, но я не могу найти, как это сделать, используя gtag.js.

Проще говоря, используя analytics.js, для получения поля "linkerParm" можно использовать следующий код:

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

Что такое эквивалент gtag.js?

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 05 ноября 2019

ОК, я понял, как это сделать, и подумал, что поделюсь этим здесь. Это работает для меня, но я не могу гарантировать, что это лучший способ. Похоже, что gtag.js также автоматически загружает analytics.js, однако он не выполняет 'create' для установки идентификатора отслеживания. В этом примере я предполагаю, что используются стандартные глобальные объекты, 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;
    });
}

Надеюсь, это кому-нибудь поможет.

...