2009-10-27 45 views
4

我有一堆链接使用target =“_ blank”属性在新窗口中打开。我想附加Google Analytics目标跟踪以点击这些链接。为什么使用target =“_ blank”导致Javascript失败?

为此,我尝试在链接上附加一个onclick =“pageTracker._trackPageview('/ event/outgoing')”属性。

但我发现对于具有target =“_ blank”属性的链接,Javascript onclick事件会被跳过。所以目标没有记录。换句话说,该链接成功地记录了目标:

<a href="http://www.yahoo.com" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a> 

但这并不:

<a href="http://www.yahoo.com" target="_blank" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a> 

有谁知道为什么这可能发生?假设没有简单的解决方案,我假设我将不得不使用Javascript来解决问题。下面的代码成功地记录了一个目标(但不打开链接):

function attach_goal_tracking() { 
    var links = document.getElementsByClassName("buyTicketsLink"); 
    for(var i=0; i<links.length; i++) { 
     links[i].onclick = record_goal; 
     } 
} 

function record_goal(e) { 
    e.stop(); 
    pageTracker._trackPageview('/event/outgoing'); 
} 

但是,当我加入到record_goal函数打开的链接...

function record_goal(e) { 
    e.stop(); 
    pageTracker._trackPageview('/event/outgoing'); 
    var newWindow = window.open(this.getAttribute('href'), '_blank'); 
    newWindow.focus(); 
    } 

...然后未能追踪目标。

谁能告诉我为什么这可能是,我该怎么做才能解决这个问题?仅供参考我正在使用Javascript的原型。

+0

http://www.google.com/support/forum/p/Google+Analytics/thread?tid = 51738bbcaf8db444&hl = en我能找到的最好的东西。 – barkmadley 2009-10-28 11:02:47

+0

我知道你说过你在使用Prototype库,虽然'e.stop()'是对Prototype事件对象的有效方法调用,你绑定到'click'事件的方式完全绕过Prototype事件绑定模型(即,'Event.observe')在IE中。仅供参考。 – 2009-10-28 15:44:28

+0

如何使用onmousedown而不是onclick? – mangokun 2009-10-28 16:09:41

回答

2

弹出窗口阻止程序(我在想Googlebar)可能会阻止窗口打开,并且(在出现onclick时)阻止onclick代码运行。例如,请参阅thisthis其他人遇到的类似声音问题。

或者它可能仅仅是点击处理程序代码抛出一个错误,然后阻止其余的代码完成。请参阅我对你的问题的评论,关于你如何约束事件。 e.stop()可能在IE中失败。

然而,你的假设是错误的。 target="_blank"onclick="..."一起工作就好了。

测试用例中的点:http://jsbin.com/anahe(将/edit添加到url来编辑代码)。 您可能需要关闭弹出窗口阻止程序(一个或多个)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Sandbox</title> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<script>var clickCount= 0;</script> 
</head> 
<body> 
    <a href="http://www.google.com" target="_blank" onclick="document.getElementById('dbg').innerHTML = ++clickCount"> 
    open new 
    </a> 
    <div id="dbg"></div> 
</body> 
</html> 

点击链接打开一个新窗口用的链接被点击的次数更新股利。在IE6,IE7,FF2,FF3.5,Chrome 2,Chrome 3,Opera 9测试过。

0

这是可能的,胜者是正确的e.stop()是不必要的,我可以确认下面的代码成功地打开一个新的标签,并在旧标签上异步提醒(因此使其重新获得焦点)。

<a href="" target="_blank">reload</a> 

<script> 

var as = document.getElementsByTagName('a'); 
for (var i = 0; i < as.length; i++) { 
    var a = as[i]; 
    a.onclick = function(e) { 
     setTimeout(function() { 
      alert('hi hi'); 
     }, 1000); 
    } 
} 

</script> 

下一个最好的事情是有一个链接跟踪页面,并通过该页面路由所有外部链接。

+0

我试过了。不幸的是,即使我使用setTimeout(),目标也没有被跟踪。 – Jack7890 2009-10-28 05:57:18

相关问题