2010-10-07 58 views
4

我的問題如下:試圖追蹤用戶電子郵件中的點擊次數

我在嘗試計算我們簡訊中廣告的點擊次數。事情是我不能在電子郵件中包含js - 這是可以理解的。於是我找到解決的辦法寫這一小段代碼:

<script type="text/javascript" src="http://www.factmag.com/wp-content/themes/modularity_/js/jquery-1.3.2.min.js"></script> 

<script type="text/javascript"> 

    function getUrlVars() 
    { 
     var vars = [], hash; 
     var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
     for(var i = 0; i < hashes.length; i++) 
     { 
      hash = hashes[i].split('='); 

      if($.inArray(hash[0], vars)>-1) 
      { 
       vars[hash[0]]+=","+hash[1]; 
      } 
      else 
      { 
       vars.push(hash[0]); 
       vars[hash[0]] = hash[1]; 
      } 
     } 

     return vars; 
    } 

       function redirect() 
       { 
        var link = getUrlVars()["page_url"]; 
        setTimeout('document.location = "' + link + '"', 100) 
       } 
</script> 
<body onload="javascript:redirect();"></body> 


<script type="text/javascript"> 

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-4340871-1']); 
_gaq.push(['_trackPageview']); 

(function() { 
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

</script> 

其託管在我們的服務器上,並在通訊中的廣告代碼的格式如下:

<a href="http://www.example.com/example_ad_counter/?utm_source=banner6&utm_medium=banner&utm_campaign=banner&page_url=ad_url"><img src="ad_img_url" style="border:1px solid #000;"></a> 

所以我想在這裏做:

  1. 用戶點擊電子郵件中的廣告。
  2. 他用這個腳本進入頁面。
  3. Google Analytics(分析)會統計它需要的數字以便跟蹤它。
  4. 腳本將用戶重定向到廣告客戶的頁面。

現在,這裏的交易 - 谷歌分析是不是在這裏做計數。我的猜測是,我需要在谷歌js中添加一些東西,以便這樣做,但不知道是什麼。有人可以幫我解決這個問題嗎?謝謝。

+0

這很有趣。 Google總是衡量我認爲的這些變數。 – fabrik 2010-10-07 08:19:09

+1

嘗試將'ga.async = true;'改爲'ga.async = false;' – Brendon 2010-10-07 08:35:30

+0

@Brendon不會有任何影響。在不支持ga.async的瀏覽器中沒有觀察到;他們只是忽略它。只有在最新版本的Firefox中才能看到。什麼使它異步是嵌入腳本標記的方法。不過,你認爲它是一個同步問題是正確的。這是一個競賽狀況問題。 – Yahel 2010-10-07 15:16:30

回答

1

你想確保你的重定向是在谷歌代碼被調用後調用的。目前,你已經運行onLoad。 yC在他對可能是競賽條件的問題的評論中是正確的,但是推動你的setTimeout並不能完全解決競爭條件。

當谷歌自己插入頁面後,你可以嘗試調用你的重定向函數。

的位置代碼:

(function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

...簡直是谷歌增加了新的script標籤到您的網頁,然後加載分析鏈接到它。 Brendon是正確的建議關閉異步,但我建議在var s = document行(在函數內)之後添加重定向呼叫,並希望這會給谷歌足夠的時間完成其骯髒的工作,並在重定向之前。

如果這不起作用,那麼堅持yC的建議,並進一步推遲超時。只要知道重定向延遲與谷歌的腳本加載並運行所花費的時間相比,這是不可預測的。我可能會把setTimeout放在我建議直接調用重定向函數的地方。這意味着它甚至不會開始計算延遲,直到Google的分析腳本添加到頁面中。

相關問題