使用Google Analytics(异步版)跟踪传出的点击次数,而不会破坏target = _blank

时间:2010-11-25 15:19:22

标签: asynchronous google-analytics

我想跟踪用户点击指向外部网站的链接。我很高兴使用GA的异步版本,因为这允许(在大多数浏览器中)页面继续加载而不是停止脚本标记并等待google-analytics.com/ga.js下载和执行。

Google recommends此功能:

<script type="text/javascript">
function recordOutboundLink(link, category, action) {
  try {
    var myTracker=_gat._getTrackerByName();
    _gaq.push(['myTracker._trackEvent', ' + category + ', ' + action + ']);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
</script>

<a href="http://www.example.com" onClick="recordOutboundLink(this, 'Outbound Links', 'example.com');return false;">

此解决方案的问题:

  • 可能需要10毫秒,可能需要300毫秒才能跟踪事件,但无论发生什么情况,它都会在100毫秒后更改页面。如果跟踪速度太慢,页面会在跟踪之前发生变化。
  • document.location =表示原始链接被忽略,因此target = _blank不会打开新的标签/窗口。

1 个答案:

答案 0 :(得分:1)

可能的解决方案:

  • 忙碌等待do {curDate=new Date();} while(curDate-date<millis))100ms,而跟踪有机会发送请求,然后返回true 。糟糕,因为繁忙的等待消耗了所有可用的CPU。
  • 使用window.open以便打开新的标签/窗口,这会将我带到我当前的最爱:

  • 在点击处理程序中使用$(this).attr("target", "_blank");,然后在将跟踪命令推送到_gaq后再使用return true

这是有效的,因为打开一个新选项卡会离开当前选项卡以完成跟踪调用。

$(document).ready(function(){
  var localserver = document.location.hostname;
  // unfortunately misses if any uppercase used in link scheme
  $("a[href^=http://],a[href^=https://]") 
    .not("a[href^=http://"+localserver+"]")
    .not("a[href^=http://www."+localserver+"]")
    .click(function(e){
        $(this).attr("target", "_blank");
        _gaq.push(['_trackEvent', 
                   'Outgoing Click',
                   $(this).attr("href"),
                   $(this).text()
                 ]);
        return true;
    });
});

总是为外部链接打开一个新选项卡的一个小缺点是,我看不到任何其他问题。