javascript - 为什么使用目标 ="_blank"会导致 Javascript 失败?

标签 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。

最佳答案

弹出窗口阻止程序(我认为是 Googlebar)可能存在问题,阻止窗口打开,并且(存在 onclick)阻止 onclick 代码从运行。例如参见 thisthis其他人也有类似的问题。

或者可能只是点击处理程序代码抛出错误,导致其余代码无法完成。请参阅我对您如何绑定(bind)事件的问题的评论。 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>

单击链接会打开一个新窗口用链接被单击的次数更新 div。在 IE6、IE7、FF2、FF3.5、Chrome 2、Chrome 3、Opera 9 中对此进行了测试。

关于javascript - 为什么使用目标 ="_blank"会导致 Javascript 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629158/

相关文章:

javascript - 无法让 dojo.place 工作

javascript - jQuery ajaxSend - 哪个元素触发了 ajax?

javascript - 如何添加到现有的 onclick 事件?

android - 当我按下手机上的按钮时应用程序崩溃

javascript - Box2d.js 与 Processing.js

Javascript 解析 Promise Pending

api - 您可以将数据上传到 Google Analytics API 吗?

php - CURL解析PHP

javascript - 在 Laravel 中嵌入 Google Analytics

javascript - 如何 'onclick' 5秒后关闭javascript?