jQuery .live (), чтобы прикрепить обработчики отслеживания кликов Omniture? - PullRequest
1 голос
/ 25 августа 2011

Мы пытаемся избавить наш сайт от сотен встроенных обработчиков onclick = "" для элементов.Большинство из них - это функции отслеживания кликов Omniture, прикрепленные через атрибут onclick.

Поскольку все они представляют собой один и тот же код, я хочу просто привязать к документу один обработчик, используя функцию jlu .live ().Затем мы обновили бы ссылки / кнопки / элементы, которые мы хотим отслеживать, чтобы иметь уникальный маркер, такой как class = "trackable".Мы бы зарегистрировали обработчик что-то вроде следующего (рассмотрим этот псевдокод):

$('.trackable').live('click', function(e) { 
  trackClick();
};

Очевидно, нам понадобятся некоторые параметры, и мы выведем их из объекта источника события, возможно, черезатрибуты данных или что-то в этом роде.

В основном меня беспокоит надежность.Из моего чтения обработчики live () не прерываются - событие должно всплыть и обрабатываться, например, до того, как браузер выгружает страницу.Я не уверен в этом, хотя.У меня также есть некоторые опасения по поводу совместимости браузера.

Кто-нибудь имеет опыт работы с привязкой событий live () и Omniture (или Google Analytics)?

Ответы [ 2 ]

1 голос
/ 27 августа 2013

Вот мое решение.Я чувствую, что это довольно грубо, но я думаю, что это работает.

// attach omniture tracking to links within search results
jQuery('.app1 .app1-searchresults').on('click', '.app1-entry a', function(event) {
    var jLink = jQuery(event.target);

    s_gi(s_account).tl(true, 'o', 'App1: {instance}: {link}'.supplant({
        'instance': jQuery('.app1 .app1-header').text(),
        'link': jLink.text()
    }));

    setTimeout(function() { window.location = jLink.attr('href'); }, 500);

    event.preventDefault();
    return false;
});

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

  • setTimeout

Эта статья Adobe Бена Гейнса указывает(в разделе «Использование отслеживания ссылок на чем-то отличном от ссылки») s.tl () вводит задержку в 500 мс перед навигацией.Это необходимо для того, чтобы асинхронный вызов отслеживания успел выполнить перед выгрузкой страницы.Я видел, как Chrome «отменял» HTTP-вызовы, которые ~ одновременны с операциями навигации;Fiddler даже стирает трафик из своего списка запросов.У меня нет опыта работы с WireShark, поэтому я решил ошибиться с осторожностью и ввести ту же задержку.

  • event.preventDefault()
  • return false

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

Кажется, что грубость здесь - это setTimeout.Мне немного неудобно использовать таймер вместо чего-то, управляемого событиями, которое требует столько или меньше времени, чтобы убедиться, что вызов отслеживания сделан.Однако без официальной поддержки со стороны Omniture, допускающей явное продолжение или настраиваемое отслеживаемое событие, это может быть самым безопасным.

Надеюсь, это поможет.

0 голосов
/ 25 августа 2011

Единственное, что может остановить live () - это ты.Если вы прервете распространение в какой-то момент с помощью метода event.stopPropagation () Jquery или одного из методов, специфичных для браузера, то, конечно, он умрет.Но в противном случае у вас все будет хорошо.

...