为什么使用target =“_ blank”会导致Javascript失败?

时间:2009-10-27 07:07:14

标签: javascript google-analytics onclick

我有一堆使用target =“_ blank”属性的链接在新窗口中打开。我想将Google Analytics目标跟踪附加到这些链接的点击次数上。

为此,我尝试将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();
    }

......然后它无法追踪目标。

任何人都可以告诉我为什么会这样,以及我应该怎样做才能解决这个问题?仅供参考我正在使用Prototype for Javascript。

2 个答案:

答案 0 :(得分:2)

弹出窗口拦截器可能存在问题(我认为Googlebar)会阻止窗口打开,并且(存在onclick)阻止onclick代码运行。例如,请参阅thisthis其他人类似的声音问题。

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

然而,你的假设是错误的。 target="_blank"onclick="..."可以很好地协同工作。

测试用例:http://jsbin.com/anahe(将/edit添加到网址以编辑代码)。 您可能需要关闭弹出窗口拦截器

<!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>

点击该链接会打开一个新窗口会根据链接点击的次数更新div。在IE6,IE7,FF2,FF3.5,Chrome 2,Chrome 3,Opera 9中进行了测试。

答案 1 :(得分:0)

有可能,victor是对的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>

接下来最好的方法是建立一个链接跟踪页面,并通过该页面路由所有外部链接。