我有一堆使用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。
答案 0 :(得分:2)
弹出窗口拦截器可能存在问题(我认为Googlebar)会阻止窗口打开,并且(存在onclick
)阻止onclick
代码运行。例如,请参阅this和this其他人类似的声音问题。
或者可能只是单击处理程序代码抛出一个错误,然后阻止其余代码完成。请参阅我对您的问题的评论,了解您如何约束事件。 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>
接下来最好的方法是建立一个链接跟踪页面,并通过该页面路由所有外部链接。