jQuery .live()附加Omniture点击跟踪处理程序?

时间:2011-08-25 04:51:50

标签: analytics jquery adobe-analytics

我们正在努力摆脱我们的网站上通常100个内联onclick =“”处理器的元素。其中大部分是通过onclick属性附加的Omniture点击跟踪功能。

由于它们都是相同的代码,我想简单地使用jQuery的.live()函数将单个处理程序绑定到文档。然后我们将更新我们想要跟踪的链接/按钮/元素,以获得类似class =“trackable”的唯一标记。我们的处理程序注册如下(考虑这个伪代码):

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

显然我们需要一些参数,我们可以从事件源对象中推导出那些,可能是通过数据属性或其他东西。

我关心的主要是可靠性。从我的阅读中,live()处理程序不会被中断 - 例如,事件应该在浏览器卸载页面之前冒泡并进行处理。不过,我不确定。我也有一些关于浏览器兼容性的担忧。

有没有人有live()事件绑定和Omniture(或Google Analytics)的经验?

2 个答案:

答案 0 :(得分:1)

这是我的解决方案。我觉得它很粗糙,但我觉得它很有效。

// 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

This article by Adobe's Ben Gaines表示(在“使用链接以外的链接跟踪”部分中)s.tl()在导航之前引入了500ms的延迟。这是为了确保异步跟踪调用在页面卸载之前有时间执行。我见过Chrome“取消”与导航操作同时发生的HTTP调用; Fiddler甚至从它的请求列表中删除了流量。我对WireShark没有经验,所以我决定谨慎行事并引入相同的延迟。

  • event.preventDefault()
  • return false

这可以防止浏览器正常响应并在用户单击链接时立即导航。

这里的粗糙似乎是setTimeout。我对使用计时器而不是事件驱动的东西感到有些不舒服,这需要花费尽可能多的时间来确保跟踪调用。但是,如果没有Omniture的官方支持允许显式延续或自定义跟踪捕获事件,这可能是最安全的事情。

我希望这会有所帮助。

答案 1 :(得分:-1)

唯一可以停止生活()的是你。如果你使用Jquery的event.stopPropagation()或某个特定于浏览器的方法中断传播,那么肯定会死掉。但是,否则你会没事的。