2010-03-04 41 views
9

我正在切換我們的網站以使用異步Google Analytics,並且我很好奇這是將事件推送到_gaq數組的方法。據我所知,在ga.js腳本被異步下載的同時,事件在_gaq中被放入等待模式。下載腳本後它們會被觸發嗎?如何跟蹤後文檔加載事件?何時以及如何執行異步Google Analytics?

一個例子是用戶在頁面加載10秒後點擊一個鏈接 - 根據文檔,該事件應放置在_gaq中。分析腳本如何檢測此問題?

回答

8

的一般部分最好由Google Analytics Async doc說明。

要將API調用推送到隊列中,必須將其從傳統JavaScript語法轉換爲命令數組。命令數組只是符合某種格式的JavaScript數組。命令數組中的第一個元素是要調用的跟蹤器對象方法的名稱。它必須是一個字符串。其餘元素是您想要傳遞給跟蹤器對象方法的參數。這些可以是任何JavaScript值。

我會盡力解釋有趣的細節: _gaq只是一個簡單的JavaScript陣列,所有陣列具有push方法添加到數組的最後一個條目。因此,在加載分析腳本之前,所有命令都會被推送到數組中。在分析腳本結束時,它用自定義方法替換_gaq.push方法,並執行_gaq數組中的所有條目。新的_gaq.push方法將立即運行跟蹤方法。因此,在頁面加載10秒後運行push方法時,應該執行該命令。

+2

我在_gaq上做了一些日誌記錄,在腳本加載之前它只是一個簡單的數組。一旦腳本被拉下,_gaq將被轉換爲傳統的分析對象,從而驗證您所說的內容。 – 2010-03-05 14:35:26

0

解開谷歌分析代碼總是很困難,但如果我要解決這個問題,在加載腳本時,我會在處理積壓隊列(_gaq)中的所有內容後重新定義陣列上的push函數。這樣,重新定義的push函數就可以作爲pageTracker對象上實際函數調用的代理。

這裏是重新定義push方法數組對象上的一個簡單的例子:

var foo = []; 
foo.push("one");      // pushes "one" onto the array 
foo.push("two");      // pushes "two" onto the array 
foo.push = function(a) { alert(a) }; // redefines `push` 
foo.push("three");     // alerts "three" 
alert(foo);       // alerts "one,two"