2012-08-27 77 views
4

我想了解這是不可能獲得成功:google analytics trackEvent如何運作?

_gaq = _gaq || []; 

_gaq.push(['trackEvent', 'something', 'bleee']); 

好了,我明白了,我推數據轉換成一些魔法陣。但谷歌的腳本如何知道我已經做到了這一點?它必須輪詢該數組(不太可能),或者當用戶離開頁面時,它會對它進行一些操作。

我發現,導航離開該頁面時,提出請求通常會導致連接請求完成之前被關閉。

有人能向我解釋如何這個神奇的作品?

回答

5

谷歌已經建立了自己的目標與自定義.push()方法。所以當你將某些東西推到「數組」上時,它會激活更多的代碼(一個函數),以創建一個跟蹤像素和wallah。

谷歌這樣做,這樣,如果你嘗試G.A.之前使用_gaq數組的push方法片段已被評估,您只需創建一個發送給Google的命令隊列(在標準陣列中)。如果G.A.代碼段已經被評估過,你實際上正在運行Google創建的自定義函數來替代.push方法。

此功能被命名爲推,使得陣列可在_gaq的地方 可以使用分析已完全加載之前。在加載分析爲 時,命令將被推入/排隊到陣列上。當分析 完成加載,它取代該陣列與_gaq對象和 執行所有排隊的命令。隨後對_gaq.push 的調用解析爲此函數,該函數在推送時執行命令。

*來源:https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApi_gaq#_gaq.push *

+1

我相信他們完全用新對象替換'_gaq',所以一旦分析代碼運行,它就不再是數組了。 –

+0

@MatthewCrumley好的電話,我的措辭很尷尬。 – Jasper

0

加載庫時該陣列_gaq由谷歌分析JS庫讀取。 _gaq只是在庫成功加載時調用的方法列表(及其參數)。另一個Web分析系統Piwik使用相同的方法。

+0

使用該邏輯,'_gaq.push(..)'在庫加載後不會跟蹤任何內容。不是這種情況。 – mkoryak

+0

@mkoryak - 這種方法是爲實現異步跟蹤而創建的。很久以前,應該在加載js跟蹤庫之前定義數組。谷歌改進了方法,用對象替換數組,以便在js庫加載之前和之後提供相同的接口。 – freedev

相關問題