Javascript 当使用Google Analytics跟踪出站链接时,为什么要延迟出站单击,而不是将函数推入队列?

Javascript 当使用Google Analytics跟踪出站链接时,为什么要延迟出站单击,而不是将函数推入队列?,javascript,google-analytics,outbound,Javascript,Google Analytics,Outbound,使用(异步版本的)Google Analytics跟踪出站链接的方法是将跟踪事件推送到队列中,如: gaq.push(['_trackEvent', 'Outbound', 'http://foo.bar/']); setTimeout('document.location = "http://foo.bar"', 100); 像这样不是更好吗 在setTimeout版本中,无法保证事件会在重定向发生之前被处理,而在第二个版本中,它只会在事件被处理后重定向,对吗?执行建议的问题是,它没有时间在

使用(异步版本的)Google Analytics跟踪出站链接的方法是将跟踪事件推送到队列中,如:

gaq.push(['_trackEvent', 'Outbound', 'http://foo.bar/']);
setTimeout('document.location = "http://foo.bar"', 100);
像这样不是更好吗

setTimeout
版本中,无法保证事件会在重定向发生之前被处理,而在第二个版本中,它只会在事件被处理后重定向,对吗?

执行建议的问题是,它没有时间在页面更改之前执行请求

浏览器不会等待这两个事件完成后再继续导航用户。如果您熟悉jQuery,它将类似于向链接添加
click
事件处理程序,向该处理程序添加
ajax
请求,但不将
event.preventDefault()
放在其中。换句话说,ajax请求不会被处理,因为用户已经进入下一页

编辑正如您在评论中提到的,如果您也将
返回false
应用于链接,则这与此无关

如果你真的可以像你在例子中所演示的那样推送一个函数,我真的不明白为什么它不能更好地工作,除了第一个请求由于某种原因超时,使得用户的等待时间远远超过了通常的100毫秒


那些被谷歌屏蔽的用户呢?有很多插件/程序等可以完全屏蔽google analytics、adsense等。这些用户会有正常的用户体验吗?

最好的方法是使用GA支持的
hitCallback
函数。
hitCallback
是一个在成功发送点击后立即调用的函数

在您的情况下,您可以这样做:

     // if after 300 ms, we still didn't get any action from hitCallback,
     // redirect manually
    setTimeout(function() {
      document.location = 'http://foo.bar/';
    }, 300);

    _gaq.push(['_set', 'hitCallback', function() {
      document.location = 'http://foo.bar/';
    }]);

    _gaq.push(['_trackEvent', 'outbound link ','click', 'http://foo.bar/']);

我在这里做了一个要点:

是不是默认事件没有通过放置
return false来阻止onClick
中选择code>?(在,
)@lucasrizoli是的,这使得我的答案完全不相关。感谢您指出这一点并非无关紧要:我在问题中省略了额外的
onClick
内容;很高兴在这里指出这一点。无论如何,在事件上使用
preventDefault
可能比使用
return false
更好。如果您真的可以像示例中所示那样推送一个函数,我真的不明白为什么它不能更好地工作,除了第一个请求由于某种原因超时,让用户的等待时间远远超过通常的100毫秒。是的,不过我想我可以添加
setTimeout('document.location='http://foo.bar"', 100);
还介绍了GA没有足够快地处理队列中的事件和功能的情况,以及GA在用户端被阻塞的情况。
     // if after 300 ms, we still didn't get any action from hitCallback,
     // redirect manually
    setTimeout(function() {
      document.location = 'http://foo.bar/';
    }, 300);

    _gaq.push(['_set', 'hitCallback', function() {
      document.location = 'http://foo.bar/';
    }]);

    _gaq.push(['_trackEvent', 'outbound link ','click', 'http://foo.bar/']);