Отслеживание нажатия кнопки загрузки в Google Analytics с использованием событий - PullRequest
7 голосов
/ 13 декабря 2011

Я отслеживаю нажатие кнопки Загрузка на веб-сайте с моим проектом с таким кодом:

function trackDownload(link) {
    try {
        _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']);
        setTimeout('document.location = "' + link.href + '"', 100);
    } catch (err) {}
    return false;
}

И эта кнопка выглядит так:

<a href="files/setup.exe" onclick="return trackDownload(this);">Download</a>

Итак, когда пользователь щелкает по нему, событие отправляется в Analytics, а затем пользователь перенаправляется в файл.

Это применимо также к отслеживанию внешних ссылок , без различий.

А теперь мой вопрос. Могу ли я быть уверен, что событие Analytics "обрабатывается" до того, как пользователь будет перенаправлен?Если нет, то перенаправление приводит к потере события? В настоящее время события отслеживаются, но я не могу быть уверен, что все из них.

Я прочитал, я также могу попробоватьчто-то немного другое, помещая функцию перенаправления в очередь Analytics:

_gaq.push(function() { document.location = link.href; });

Но не ясно, работает ли это или просто эквивалентно предыдущему.Фактически, здесь говорят, что "вызовы _gaq.push [...] выполняют команды по мере их нажатия" .

1 Ответ

7 голосов
/ 20 декабря 2011

Вы правы в том, что вы можете выдвинуть функции в очередь аналитики .Так как функции или события отслеживания выполняются / оцениваются в том порядке, в котором вы помещали их в массив, вы должны быть в состоянии сделать это:

function trackDownload(link) {
    _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']);
    _gaq.push(function() { document.location = link.href });
    return false;
}

Обратите внимание, что try / catch не требуется, поскольку push() не задокументировано, чтобы что-то выбрасывать (и я бы рекомендовал удалить это, поскольку пустые блоки catch могут маскировать другие проблемы ).

Вы спрашиваете:

Но не ясно, работает ли это или просто эквивалентно предыдущему.

В вашем первом примере (push, setTimeout) событие будет потеряно, если Google Analytics не закончила загрузку при перенаправлении (поскольку в это время _gaq является просто массивом),В версии с push(function... событие будет записано перед перенаправлением независимо от того, закончилась ли загрузка Analytics в тот момент, когда пользователь нажал кнопку загрузки.По этой причине я бы рекомендовал использовать push(function....

. Имейте в виду, что версия push(function... будет ждать окончания загрузки аналитики до того, как произойдет перенаправление (что в любом случае звучит так, как вы хотите), но вы можетехочу добавить способ обработки случая, когда аналитика не загружается.

...