Подтвердить что ты не робот

Использование асинхронного кода Google Analytics из внешнего JS файла

Я пытаюсь добавить асинхронную версию кода отслеживания Google Analytics на веб-сайт.

Я хотел бы оставить JavaScript в отдельном файле и называть его оттуда.

Вот что я получил в моем .js файле:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

function loadtracking() {
    var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
        _gaq.push(['_trackPageview']);

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

addLoadEvent(loadtracking);

И вот что я получил в теге <head> моей главной страницы:

<script type="text/javascript" src="js/google-analytics.js" ></script>

Однако, очевидно, проблема, так как через несколько дней я не получаю статистику!

Любые идеи, что мне нужно изменить?

Спасибо, Нил


EDIT: Хорошо... После некоторой обратной связи ниже я собираюсь добавить новое текущее содержимое моего .js файла. Я буду держать его в курсе, чтобы, если/когда это будет решено, он, надеюсь, поможет другим людям, пытающимся сделать подобные вещи.

var _gaq = _gaq || [];

function loadtracking() {
        window._gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
        window._gaq.push(['_trackPageview']);

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

loadtracking();
4b9b3361

Ответ 1

Ваш "var _gaq" находится внутри функции. Это означает, что он локально ограничен внутри этой функции и не будет существовать глобально. GA зависит от глобальной переменной _gaq. Если вы хотите сохранить его внутри такой функции, ссылайтесь на него как на window._gaq.

Ответ 2

Вы полностью пропустите точку асинхронного кода отслеживания. Не помещайте его во внешний файл, потому что это точно так же, как и старая синхронная GA.

И самое главное не откладывайте код отслеживания до window.onload, поскольку он может срабатывать слишком поздно.

Если вы используете асинхронный GA , просто поместите его в верхнюю часть документа во встроенный тег script. Это рекомендация на сайте Google Analytics.

Вставьте асинхронный фрагмент на нижней части раздела <head> вашего страниц, после любых других скриптов страница или шаблон.