Множественное отслеживание ссылки по клику omniture s.tl(), не могу понять

Я использую omniture jasavscript для Site Catalyst.

В котором я заполняю необходимые переменные по щелчку ссылки.

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

Похоже, он использует кэш-память.

ОБНОВЛЕНИЕ

Я попытался повторно инициализировать объект, используя var s = {}; до и после использования s.tl('this','e','',null);.

Но это не сработало

Может кто подскажет как это можно исправить.


person Padyster    schedule 01.07.2013    source источник
comment
у вас есть код, чтобы показать нам? Я не знаю технологию, но похоже, что она может понадобиться для решения.   -  person John Dvorak    schedule 01.07.2013
comment
@JanDvorak Ознакомьтесь с обновлением   -  person Padyster    schedule 01.07.2013


Ответы (2)


Не видя никакого кода, я могу только предполагать, но я предполагаю, что дополнительное попадание связано с автоматическим отслеживанием ссылок SiteCatalyst — либо ссылкой выхода, поскольку целевой URL-адрес не указан в linkInternalFilters, либо ссылкой для загрузки, поскольку целевой URL-адрес заканчивается чем-то перечисленным в linkDownloadFileTypes.

Я подозреваю, учитывая аргумент 'e' вашего примера s.tl(), что ссылка является ссылкой выхода. Итак, в этой заметке... возможно, решение здесь состоит в том, чтобы использовать отслеживание ссылок автоматического выхода вместо того, чтобы делать свой собственный s.tl() вызов. У Adobe есть плагин под названием exitLinkHandler, который позволит вам активировать дополнительные переменные всякий раз, когда происходит отслеживание ссылки автоматического выхода.

Вот плагин:

/*
* Plugin: exitLinkHandler 0.5 - identify and report exit links
*/
s.exitLinkHandler=new Function("p",""
+"var s=this,h=s.p_gh(),n='linkInternalFilters',i,t;if(!h||(s.linkTyp"
+"e&&(h||s.linkName)))return '';i=h.indexOf('?');t=s[n];s[n]=p?p:t;h="
+"s.linkLeaveQueryString||i<0?h:h.substring(0,i);if(s.lt(h)=='e')s.li"
+"nkType='e';else h='';s[n]=t;return h;");

В вашей функции s_doPlugins добавьте следующее:

s.url = s.exitLinkHandler();
if (s.url) {
  // pop your variables here. Don't forget to pop `linkTrackVars` and `linkTrackEvents`, same as you would have done before
}

Теперь это сделает ваши дополнительные переменные всплывающими при срабатывании любой ссылки выхода. Если вы хотите, чтобы он срабатывал только при определенных совпадениях URL или только при определенном совпадении, вы можете сделать это несколькими способами, в зависимости от ваших потребностей:

  • Если вам нужно только выполнить общее сопоставление подстроки, вы можете передать часть или весь целевой URL-адрес в качестве первого аргумента для s.exitLinkHandler(), и он будет сопоставлять переданный аргумент с целевым URL-адресом.

  • Если этого недостаточно, в условиях if(s.url) вы можете выполнить собственное сопоставление (например, сопоставление регулярных выражений) с целевым URL-адресом, используя s.url.

  • Если вам нужно ориентироваться на какой-либо DOM-атрибут ссылки, в условии s.eo является ссылкой на объект ссылки, по которой щелкнули, поэтому вы можете написать свои собственные условия вокруг этого.
person Crayon Violent    schedule 01.07.2013

Опция 1

Omniture не отслеживает ссылки с # как ссылки выхода, поэтому вы можете сделать что-то вроде:

<a href="#http://google.com" data-track-msg="Tracking Message" class="prepended-with-hash-for-tracking">Search</a>

<script>
(function (){
  'use strict';

  var links = document.querySelectorAll('.prepended-with-hash-for-tracking');

  var track = function(e) {
    e.preventDefault();
    var link = e.currentTarget;
    var url = link.href;
    var trackingMessage = link.getAttribute('data-track-msg');

    // Remove the hash.
    if (url[0] === '#') {
      url = url.substr(1);
    }

    // Track in omniture.
    var s = s_gi('InsertYourRSID');
    s.tl(link, 'o', trackingMessage, null, function(){
      window.location.href = url;
    });
  };

  for (var i = 0, len = links.length; i < len; i++) {
    links[i].addEventListener('click', track, false);
  }

})();
</script>

Вариант 2

Другой обходной путь — установить s.linkLeaveQueryString = true;, а затем добавить URL-адрес с параметром запроса, содержащим ваше доменное имя, которое соответствует строке в s.linkInternalFilters. например <a href="http://facebook.com?r=yourDomain.com">Share</a>

Вариант 3

Отключите отслеживание внешних ссылок omniture по умолчанию, установив s.trackExternalLinks=false;, и тогда вы сможете обрабатывать все внешние ссылки с помощью обработчика событий, который вызывает s.tl() с помощью JavaScript, аналогично варианту 1.

Я бы рекомендовал вариант 3.

person cruzanmo    schedule 06.11.2014