2013-02-02 51 views
4

所以這將工作: 谷歌分析 - _trackAvent之前_setAccount?訂單是否重要?

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-65432-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); 
})(); 

_gaq.push(['_trackEvent', 'Videos', 'Play', 'Gone With the Wind']); 

但如果遊客能來通過像http://example.com?autoPlay=Wind一個鏈接是什麼?那麼接下來的視頻已經要求,並開始播放,產生:

var _gaq = _gaq || []; 
_gaq.push(['_trackEvent', 'Videos', 'Play', 'Gone With the Wind']); 

事件。但隨後定期跟蹤代碼仍然在頁面的底部運行,這就是爲什麼我們有異步:

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-65432-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); 
})(); 

所以我必須至少_setAccount移動到頂部,或將它只是工作,因爲它是在我撥打ga.js時已經排隊了?或者我可以創建自己的隊列...但是在這裏,我看到一條線索,they made sure不會刪除_gaq,如果在_setAccount之前已經有東西已經存在。而且還有不同背景下的多個追蹤器... 那麼這是否意味着完全忽略命令是完全合法的?對不起,這個簡單的問題,但我什麼也沒有發現什麼是允許與異步和什麼不是。

感謝您的幫助!

回答

5

在使用任何記錄數據的命令(如_trackPageview_trackEvent)之前,必須先有_setAccount

如果您查看_trackEvent發送的跟蹤像素,當_setAccount尚未運行時,您會看到它已記錄到默認帳戶,如UA-XXXXX-X

我已經在開發或分期系統上使用過這個功能,我希望分析代碼能夠運行,但不希望它污染生產跟蹤數據。註釋掉_setAccount一行,並且所有數據都記錄到一個不存在的帳戶。


假設你永遠不會被初始化了一個名爲 '喃喃'(跟蹤與_gaq.push(['mumble._setAccount', 'UA-65432-1']),下面的代碼顯示了一個外行跟蹤器的ID是 'UA-XXXXX-X':

echo(_gat.getTrackerByName('mumble')_getAccount()) 
+0

「註釋掉_setAccount行,並且所有數據都記錄到一個不存在的帳戶。」 - 不敢相信我不知道這一點! – TomFuertes

+0

評論:是的,如果你沒有給它的帳戶,它如何登錄? 但更好:把它移動一行,你甚至不會注意到你的代碼中缺少一些東西。 –

+0

@ZoltánMorvai:帳戶ID最終成爲發送的任何跟蹤像素的參數之一 - 跟蹤時沒有涉及登錄。 – mike

2

現在它:

var _gaq = _gaq || []; 
if(_gaq.unshift){ 
    _gaq.unshift(['_setAccount', 'UA-65432-1']); 
} else { 
    _gaq.push(['_setAccount', 'UA-65432-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); 
})(); 

因此,解決辦法是,雖然push附加到該陣列的端部,而unshift這樣做的beginni NG。

問題可能是iframe的情況ga已經加載,然後它不是一個數組,而是一個具有自定義push方法的對象。在這種情況下,我們回到原始代碼。在您的主頁中,帳戶ID是相同的,並且無論如何都可以工作。