1

Я внедрил analytics.js (новую версию) в своем веб-приложении ASPX. У меня работает просмотр страниц, но события очень часто не отправляются.Событие analytics.js не работает должным образом

В моем примере я попытался нажать 3 разных кнопки, но только один из них запустил это событие. Я добавил предупреждение каждому событию, чтобы убедиться, что оно действительно уволено, и все это показывают.

Fiddler Это мой JS, размещаемые непосредственно перед </head>

(function(i, s, o, g, r, a, m) { 
    i['GoogleAnalyticsObject'] = r; 
    i[r] = i[r] || function() { 
     (i[r].q = i[r].q || []).push(arguments) 
    }, i[r].l = 1 * new Date(); 
    a = s.createElement(o), m = s.getElementsByTagName(o)[0]; 
    a.async = 1; 
    a.src = g; 
    m.parentNode.insertBefore(a, m) 
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 
ga('create', 'UA-XXXXXXXX-1', { 
    'cookieDomain': 'none' 
}); 
ga('send', 'pageview', { 
    'page': '/team/main', 
    'title': 'Logged in' 
}); 

$(document).ready(function() { 
    $(".team_button").on("click", function() { 
     ga('send', 'event', 'button', 'click', 'Team select button', { 
      'page': '/team/' 
     }) 
    }); 
    $(".calendar_month_prev").on("click", function() { 
     ga('send', 'event', 'button', 'click', 'Calendar: Prev month', { 
      'page': '/team/' 
     }) 
    }); 
    $(".calendar_month_next").on("click", function() { 
     ga('send', 'event', 'button', 'click', 'Calendar: Next month', { 
      'page': '/team/' 
     }) 
    }); 
    $(".calendar_day_selected").on("click", function() { 
     ga('send', 'event', 'button', 'click', 'Calendar: Same day reload', { 
      'page': '/team/' 
     }) 
    }); 
    $(".calendar_day_active").on("click", function() { 
     ga('send', 'event', 'button', 'click', 'Calendar: Select day', { 
      'page': '/team/' 
     }) 
    }); 
}); 

+0

Можете ли вы уточнить, что не работает? Этот скриншот, который вы добавили, не просто прочитать или понять. –

+0

Просмотр страницы отправляется, но каждый раз, когда нажимается кнопка, событие должно также отправляться. Кажется довольно случайным, какие события отправляются - точно так же, как если страница перезагружается слишком быстро, но поскольку она асинхронна, я считаю, что это не должно быть проблемой? – Oxholm

ответ

4

Когда новая страница загружается, ожидающие запросы на текущей странице отменяются - в этом случае аналитики отслеживание пиксельных запросов. «async» ссылается больше на загрузку кода javascript аналитики, а затем на обработку данных аналитики.

С помощью ga.js общий подход заключается в том, чтобы остановить распространение события кликов, отправить событие, а затем задержать небольшую сумму (150 мс), прежде чем следовать по ссылке.

С помощью analytics.js вместо задержки вы можете использовать hitCallback для запуска кода после отправки данных аналитики. См Setting the Hit Callback в документации Google Analytics

+0

Хорошо, это немного очищает. Я думаю, я могу использовать что-то вроде 'var url = $ (this).attr ("href"); ' ' 'hitCallback': function() { document.location = url; } ' – Oxholm

+0

Почему, черт возьми, они не перечисляют это с общей информацией о отслеживании событий. Зачем хоронить его в расширенной конфигурации. Я до сих пор не вижу, как события проходят, по крайней мере, в режиме реального времени, но, по крайней мере, я знаю, что обратный вызов вызывает запуск запроса. Я понятия не имею, почему я не могу показать события. Старый способ работал непременно. – Leeish

1

Хорошо, вот как я установил его, если кто-то имеет такую ​​же проблему:

Я сделал функцию, чтобы вызвать трекинг аналитика, где я замедленное страницу для лишь доли секунды:

function TrackEvent(link, category, action, label, page) { 
    try { 
     ga("send", "event", category, action, label, { 'page': page }); 
    } catch (err) { consol.log(err); } 

    setTimeout(function() { 
     document.location.href = link.href; 
    }, 25); 
} 

Затем каждый из моих OnClick связывает вызовы этой функции, например:

$(document).ready(function() { 
    $(".calendar_month_prev").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Prev month', '/team/main'); return false;}); 
    $(".calendar_month_next").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Next month', '/team/main'); return false;}); 
    $(".calendar_day_active").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Select day', '/team/main'); return false;}); 
}); 

Можно было бы, наверное, просто добавьте к этому в HREF OnClick, если это предпочтительно :)

1

Я хотел бы предложить выполнение фиктивного якорный нажмите после успешной регистрации событий:

a.onclick = function(e){ 
      var anchor = this; 
      _gaq.push(['_trackEvent', 'Category','event','label']); 
      _gaq.push(function() { 
       var a = document.createElement('a'); 
       a.href = anchor.href; 
       a.target = anchor.target; 
       a.click(); 
      }); 
      return false; 
     } 

Поскольку толчок работает как очередь, ваш запрос на событие никогда не будет отменен.

0

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

http://veithen.github.io/2015/01/24/outbound-link-tracking.html