2009-10-27 91 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

相關問題