【问题标题】:Is there a racing condition when tracking clicked links?跟踪点击的链接时是否存在竞速条件?
【发布时间】:2014-07-14 19:58:33
【问题描述】:

我想跟踪用户在我的页面上的点击次数。 但我有点困惑。看这段代码:

<a href="http://example.com" onClick=”_gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);”>Follow Us</a>

^ 如果用户在 google analitics 跟踪之前被重定向到http://example.com 怎么办?然后呢?我说这个例子有竞争条件是对的吗?

【问题讨论】:

  • 您可以延迟访问新站点 100 毫秒左右,以确保跟踪发生
  • 我相信它仍然应该执行。你试过了吗?此外,您可以定位一个新窗口/选项卡,以便当前页面保持打开状态。我也相当肯定,在谷歌分析中有脚本选项来跟踪链接和点击
  • @Adjit _gaq.push 只是推送到标准 JS 数组。然后必须将额外的 http 请求发送到 Google 服务器。据我所知 - 谁先做:跟踪或页面重定向。是的 - 在某些情况下它可能会跟踪 - 但在某些情况下重定向会更快 - 对吗?
  • 说实话我不知道,这就是为什么我建议你测试一下。但是,如果您想添加一个短暂的延迟以允许跟踪请求,请查看此处stackoverflow.com/questions/11366627/…

标签: javascript google-analytics tracking


【解决方案1】:

没有竞争条件。单击处理程序在页面导航开始之前被调用并完全执行。该单击处理程序创建一个响应无关紧要的 ajax 请求。 ajax 请求在页面导航启动之前启动。

不要被方法名称所迷惑。 According to google:

此函数名为 push,以便在 Analytics 完全加载之前使用数组代替 _gaq。在加载分析时,命令将被推送/排队到阵列上。当 Analytics 完成加载时,它会用 _gaq 对象替换数组并执行所有排队的命令。对 _gaq.push 的后续调用解析为该函数,该函数在命令被推送时执行。

虽然最初,.push() 只是将命令推送到数组中,但一旦加载 Analytics,这些命令就会立即执行。

【讨论】:

  • 我知道数组-> 对象转换。但是跟踪调用仍然是异步的 afaik - 不是吗?这是一个ticket,我认为它证实了这一点:
  • @Dannyboy - 我喜欢自己找出答案,所以我检查了调试器。我逐步浏览了 google 的混淆代码,并验证了 gif 信标是在点击处理程序返回之前创建的。它是异步的,因为它不等待来自服务器的响应,但创建请求的代码(通过 gif 信标)是同步的。
  • 感谢您的验证!我是否正确理解这一点 - 不能保证 gif 信标在页面重新加载之前到达谷歌服务器?
  • @Dannyboy - 毫无疑问,http 请求已发送。可以想象,在 google 收到请求之前页面可能会重新加载,但那又如何呢?如果谷歌在处理外部链接请求之后而不是之前收到请求,这有什么关系?
【解决方案2】:

你可以这样做:

使用 jQuery:

$('a').on('click', function(e){
    e.preventDefault();
    var $el = $(this);
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.attr('href');
    }, 100);
});

没有 jQuery:

document.getElementById('someIdOfLink').addEventListener('click', function(){
   return false;
   var $el = this;
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.getAttribute('href');
    }, 100);
});

希望能帮到你!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多