загрузка google Analytics параметризованного скрипта отслеживания асинхронных страниц - PullRequest
3 голосов
/ 05 июля 2011

Если я использую скрипт отслеживания асинхронного сайта Google Analytics , то в конце заголовка моей страницы все будет работать как положено:

<head>   
    <script type="text/javascript">

        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXX-X']);
        _gaq.push(['_setDomainName', 'test.com']);
        _gaq.push(['_trackPageview', '/title=ied&action=fire']);

        (function () {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();

    </script>
</head>

В фиддлере видно 2 запроса:

enter image description here enter image description here

По какой-то причине мне нужно, чтобы скрипт был параметризован, поэтому я обертываю его в пользовательскую функцию googleAnalytics, которая получает 2 параметра:

function googleAnalytics(domain, queryString) {
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    _gaq.push(['_setDomainName', domain]);
    _gaq.push(['_trackPageview', queryString]);

    (function () {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
}

Код Abowe был сохранен в GoogleAnalytics.js файле. Я загрузил его на страницу в разделе заголовка, как показано ниже:

<head>
    <script src="/script/GoogleAnalytics.js" type="text/javascript" language="javascript"></script>
    <script type="text/javascript">googleAnalytics('test.com', '/title=ied&action=fire');</script>
</head>

Но на этот раз Fiddler показывает только 1 запрос:

enter image description here

Отладчик кода отслеживания Google Analytics также ничего не показывает. Загружается только скрипт ga.js , но нет другого запроса, который заполняет данные для отчета Google Analytics. Что не так в этом подходе и как это можно исправить?

Кстати: мне нужны эти 2 параметра и асинхронная версия скрипта отслеживания.

Привет

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Ваша проблема в том, что ваша декларация _gaq является локальной по объему. ga.js загружает и ищет _gaq в глобальной области видимости. (Как только скрипт внедряется, он больше не имеет доступа к области действия функции.)

Чтобы исправить это, вы можете либо поместить var _gaq = _gaq || []; вне функции, либо заменить ее внутри функции следующим образом:

window._gaq = window._gaq || []; 

Это решит вашу проблему.

0 голосов
/ 05 июля 2011

Я заставил это работать.

GoogleAnalytics.js выглядит следующим образом:

function googleAnalytics(domain, queryString) {        
    _gaq.push(['_setDomainName', domain]);
    _gaq.push(['_trackPageview', queryString]);
}

, а раздел заголовка выглядит следующим образом:

<head>
    <script src="/script/GoogleAnalytics.js" type="text/javascript" language="javascript"></script>
    <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXX-X']);

        (function () {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();

    </script>
    <script type="text/javascript">googleAnalytics('com.dev.abb.com','');</script>
</head>

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...