0

Я строю AngularJS приложений, которые имеют общий заголовок со ссылками на каждый из приложения:Track Ссылки Использование событий - гонки Условия

<a href="https://app1.company.com">App1</a> 
<a href="https://app2.company.com">App2</a> 

Каждое приложение работает на своей подобласти и когда пользователь нажимает на ссылку на переадресация заголовка - страницы в это приложение.

Мне нужно отслеживать действия пользователей со ссылками, например. onClick с Omniture (но проблема также относится к Google Analytics). Когда я добавить событие OnClick, который вызывает функцию, чтобы отправить события в Omniture, например:

<a href="https://app1.company.com" ng-click="trackLink('header-app1')">App1</a> 

TrackLink() является функцией службы AngularJS, краткая реализация:

trackLink: function (eVar8Code) { 

    s = this.getSVariable(s); 

    s.eVar8 = eVar8Code; 
    s.prop28 = s.eVar8; 

    this.sendOmnitureMessage(s, send, false); 

    return s; 
    }, 

функция выполняется асинхронно и сразу возвращается. Затем поведение стандартной ссылки срабатывает: страница перенаправляется на URL-адрес, определенный в атрибуте «href». Новая страница загружена очень быстро (около 70 мс), но AJAX запрос в Omniture не был выполнен: все это асинхронно.

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

<a href="https://app1.company.com?iLink=header-app1">App1</a> 

, но это трудно убедить маркировочные парней.

Что такое хорошая практика отслеживания событий по ссылкам?

+1

Вы можете показать, что выглядит 'sendOmnitureMessage'? –

ответ

0

Как предложил @Eike Pierstorff - я использовал возможности Adobe Analytics native library установить задержку (200 мс), которые дают вызов Adobe Analytics гораздо больше шансов на успех:

в HTML:

<a href="https://app1.company.com" data-omniture-link data-track-code="header-nav-deliveries-returns">App1</a> 

в AngularJS службы:

sendOmnitureMessageWithDelay: function (s, element, eVar8Code) { 
    var s = s_gi(s_account); // jshint ignore:line 

    s.useForcedLinkTracking = true; 
    s.forcedLinkTrackingTimeout = 200; // Max number of milliseconds to wait for tracking to finish 
    s.linkTrackVars = 'eVar8,prop28'; 
    s.eVar8 = eVar8Code; 
    s.prop28 = eVar8Code; 

    var target = element; 

    if (!target) { 
     target = true; 
    } 

    s.tl(target, 'o', s.eVar8, null, 'navigate'); 

    this.cleanOmnitureVars(); 
    } 

Здесь элемент - это элемент HTML о.

Он работает очень хорошо в 99% случаев, но имеет проблемы с медленными и старыми устройствами, где загружается страница, прежде чем звонить в Adobe. Похоже, что нет хорошего решения этой проблемы, и не может гарантировать, что события будут всегда записываться в Adobe Analytics (или в Google Analytics).

1

Измените свою функцию, чтобы включить короткий тайм-аут (возможно, вы позволили бы ей возвращать значение false для подавления поведения по умолчанию и перенаправления через объект местоположения).

Google Analytics ударил обратные вызовы, которые были выполнены после отправки вызова в Google, вы можете посмотреть, есть ли у Google Analytics что-то подобное (так как это можно использовать для перенаправления после того, как был сделан запрос на отслеживание).

Если параметры отслеживания событий и запроса взаимозаменяемы, зависит от вашего варианта использования (они, конечно, измеряют разные вещи). Однако отслеживание событий является хорошо принятым способом отслеживания ссылок.

+1

У Adobe Analytics действительно есть аналогичный [обратный вызов, который вы можете указать как 5-й аргумент в 's.tl'] (https://marketing.adobe.com/resources/help/en_US/sc/implement/function_tl.html) –

+0

Выглядит хорошо, я попробую это. –