我有一堆使用 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
代码从运行。例如参见 this和 this其他人也有类似的问题。
或者可能只是点击处理程序代码抛出错误,导致其余代码无法完成。请参阅我对您如何绑定(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/