我们正在努力摆脱我们的网站上通常100个内联onclick =“”处理器的元素。其中大部分是通过onclick属性附加的Omniture点击跟踪功能。
由于它们都是相同的代码,我想简单地使用jQuery的.live()函数将单个处理程序绑定到文档。然后我们将更新我们想要跟踪的链接/按钮/元素,以获得类似class =“trackable”的唯一标记。我们的处理程序注册如下(考虑这个伪代码):
$('.trackable').live('click', function(e) {
trackClick();
};
显然我们需要一些参数,我们可以从事件源对象中推导出那些,可能是通过数据属性或其他东西。
我关心的主要是可靠性。从我的阅读中,live()处理程序不会被中断 - 例如,事件应该在浏览器卸载页面之前冒泡并进行处理。不过,我不确定。我也有一些关于浏览器兼容性的担忧。
有没有人有live()事件绑定和Omniture(或Google Analytics)的经验?
答案 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()或某个特定于浏览器的方法中断传播,那么肯定会死掉。但是,否则你会没事的。