延迟href单击,但不是SetTimeout

时间:2012-06-11 16:31:04

标签: javascript jquery

我正在尝试通过Google Analytics和Google suggests using this跟踪出站链接:

<script type="text/javascript">
  function recordOutboundLink(link, category, action) {
    _gat._getTrackerByName()._trackEvent(category, action);
    setTimeout('document.location = "' + link.href + '"', 100);
  }
</script>

哪个没问题,除了我的出站链接要在新标签页中打开,我(自然地)使用target="_blank"来表示...

但是,setTimeout方法将其取消,并在同一页面中打开链接..

我尝试过使用window.open(),但我担心它会被浏览器阻止..

那么,无论如何,我是否可以执行这个js函数,并将点击延迟一会儿? (谷歌暗示100毫秒)?

感谢。

<小时/> 我在SO上看过这样的other questions,但它们没有涉及在新标签/窗口中打开。

3 个答案:

答案 0 :(得分:1)

简单,只需删除它的setTimeout()部分即可。所以它所做的只是调用_trackEvent函数。

你的链接应该执行javascript函数并打开新窗口,如果你只是保留它们:

<a href="example.com" target="_blank" onclick="recordOutboundLink(foo, bar)">Click here</a>

<script type="text/javascript">
  function recordOutboundLink(category, action) {
    _gat._getTrackerByName()._trackEvent(category, action);
  }
</script>

答案 1 :(得分:1)

好的,为了发展上面的答案,这里是一个Jquery插件,可以提供听取选择的链接(根据您自己的标准),并为您提供回调它们的方法。

fiddle

所以在OP的情况下,设置可能如下:

<a href="http://www.google.co.uk" target="_blank" data-category="Outbound">Google</a>

$(document).ready(function() {
    $('a').trackOutBound(null,function() {
        var category= $(this).data('category');
        _gat._getTrackerByName()._trackEvent(category, $(this).attr('href'));
    });
});

答案 2 :(得分:-1)

在继续使用默认浏览器行为之前,我使用它来保持函数等待:

var wait_until = new Date().getTime() + 500;
while (new Date().getTime() < wait_until) {
    //Do nothing, wait
}