Есть ли состояние гонки при отслеживании нажатых ссылок?

Я хочу отслеживать клики пользователей на моей странице. Но я немного запутался. Глядя на этот код:

<a href="http://example.com" onClick=”_gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);”>Follow Us</a>

^ Что, если пользователь будет перенаправлен на http://example.com до того, как Google Analytics будет отслеживать - что тогда? Я прав, что в этом примере есть состояние гонки?


person Dannyboy    schedule 14.07.2014    source источник
comment
Вы можете отложить переход на новый сайт примерно на 100 мс, чтобы убедиться, что отслеживание происходит.   -  person Huangism    schedule 15.07.2014
comment
Я считаю, что он все еще должен выполняться. Ты пробовал это? Кроме того, вы можете настроить таргетинг на новое окно / вкладку, чтобы текущая страница оставалась открытой. Я также совершенно уверен, что в Google Analytics есть сценарии для отслеживания ссылок и кликов.   -  person Adjit    schedule 15.07.2014
comment
@Adjit _gaq.push просто нажимает на стандартный массив JS. Затем на сервер Google необходимо отправить дополнительный HTTP-запрос. Так что, насколько я понимаю - это кто делает первым: трекинг или перенаправление страницы. И да - в некоторых случаях он может отслеживать - но в некоторых случаях перенаправление будет быстрее, верно?   -  person Dannyboy    schedule 15.07.2014
comment
Честно говоря, я понятия не имею, поэтому предлагаю вам проверить это. Но если вы хотите добавить небольшую задержку, чтобы разрешить запрос отслеживания, посмотрите здесь stackoverflow.com/questions/11366627/   -  person Adjit    schedule 15.07.2014
comment
возможный дубликат отслеживания событий HitCallback в Google Analytics не работает   -  person Blexy    schedule 15.07.2014


Ответы (2)


Состояние гонки отсутствует. Обработчик кликов вызывается и полностью выполняется до начала навигации по странице. Этот обработчик кликов создает запрос ajax, ответ на который несущественен. Запрос ajax запускается до начала навигации по страницам.

Не обманывайтесь названием метода. Согласно Google:

Эта функция называется push, поэтому вместо _gaq можно использовать массив до полной загрузки Analytics. Пока Google Analytics загружается, команды будут помещены в массив или помещены в очередь. Когда Google Analytics завершает загрузку, он заменяет массив объектом _gaq и выполняет все поставленные в очередь команды. Последующие вызовы _gaq.push разрешают эту функцию, которая выполняет команды по мере их отправки.

Первоначально .push() просто помещает команды в массив, но после загрузки Analytics эти команды выполняются немедленно.

person gilly3    schedule 14.07.2014
comment
Я знал о преобразовании ›объекта в массив. Но трекинг звонка по-прежнему асинхронный афаик - не так ли? Вот билет, который, я думаю, подтверждает это: - person Dannyboy; 15.07.2014
comment
@Dannyboy - Мне нравится выяснять сам, поэтому я проверил отладчик. Я прошел через обфусцированный код Google и убедился, что маяк gif создается до возврата обработчика кликов. Он асинхронен в том смысле, что не ожидает ответа от сервера, но код, который создает запрос (через маячок gif), является синхронным. - person gilly3; 15.07.2014
comment
спасибо за проверку! Правильно ли я это понимаю - что нет гарантии, что gif-маяк достигнет сервера Google до перезагрузки страницы? - person Dannyboy; 15.07.2014
comment
@Dannyboy - Без сомнения, http-запрос отправляется. Вполне возможно, что страница может быть перезагружена до того, как Google получит запрос, но что с того? Почему это имеет значение, если Google получил запрос после того, как запрос внешней ссылки был обработан, а не раньше? - person gilly3; 18.07.2014

Ты можешь это сделать:

С jQuery:

$('a').on('click', function(e){
    e.preventDefault();
    var $el = $(this);
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.attr('href');
    }, 100);
});

Без jQuery:

document.getElementById('someIdOfLink').addEventListener('click', function(){
   return false;
   var $el = this;
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.getAttribute('href');
    }, 100);
});

надеюсь помочь вам!

person Rubén Guerrero    schedule 14.07.2014