2012-11-16 25 views
8

我的網站上有一些Google Analytics(分析)跟蹤代碼(GATC),它會觸發Google代碼中_gaq.push方法的調用。檢查Google Analytics(分析)_gaq對象是否已加載並可用

在GA不可用或_gaq尚未加載的情況下,我想確保頁面上沒有任何JavaScript錯誤。通過檢查_gaq與'undefined'不相同 - 是否足以檢查它是否可用並且是此X瀏覽器?我查看了Google的文檔,但沒有提到這方面的任何內容。

我知道檢查對象是否爲null,但我不知道這是否有必要。

if (typeof(_gaq) !== 'undefined') { 
    _gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 
    _gaq.push(['rollup._trackEvent', 'Downloaded Video', 'Yes']);          
} 

回答

18

在你的分析獲得推薦的javascript代碼,包括以下行:

var _gaq = _gaq || []; 

因此,數組應該總是可用的,如果你保留此行的代碼。如果您稍後添加分析代碼,只需在主腳本之前添加上面的代碼行即可使用。

請注意,即使您先前定義了_gaq,此代碼段也是無害的,因爲如果它以前未定義,它只會將其定義爲新的Array。

這是使用異步腳本的好方法,數組首先在本地定義,並且您可以在需要時將命令推送到此數組。分析腳本加載後,可以在需要時使用這些命令。所以不需要檢查數組是否未定義或類似的東西。

+1

我不想重新定義'_gaq'變量,因爲我在Google提供的代碼中設置了此設置。我在自己的代碼中有其他地方的推送電話。重新定義_gaq似乎有風險。 – crmpicco

+3

我不是說你應該重新定義它。我的觀點是,如果您已經像文檔所說的那樣添加了它,則無法再檢查未定義 - 而且您不需要。 – David

1

由於@David表示,只要您有前面定義的var _gaq = _gaq || [];代碼段,就沒問題,並且不需要檢查_gaq未定義。

_gaq被定義爲空數組,如果它以前未定義的原因是它有一個push方法。這可以讓您的分析代碼在GA代碼加載之前執行,或者在某些情況下不可用時執行。

當GA加載時,_gaq將被重新定義爲push方法的對象,舊的_gaq數組的任何現有內容都將被執行。

3

當加載ga.js時,它定義了一個window._gat(注意T代替Q)全局對象,你只需要測試它是否被定義(但要注意它是異步加載的,那麼你可能會延遲你的測試) 。

4

您通常不需要檢查它是否被定義,因爲Google Analytics代碼段會爲您執行此操作。但是,如果您在stie的其他部分進行事件跟蹤等事情,則問題表明,檢查腳本是否因爲異步而被加載是有益的。

我爲GA編寫了一個jQuery插件封裝器,並希望在代碼中檢查GA是否實際上已安裝,然後再嘗試推送任何數據。這是爲了說明有人試圖使用未安裝GA的插件或GA初始化之前的情況。

if (typeof(_gaq) == 'undefined') { 
    console.error("Google Analytics is not installed"); 
} 
+2

這是我的正確答案。我們僅在生產站點上呈現跟蹤腳本(谷歌加其他),因此dev/UAT _gaq未定義。這完美地工作。謝謝 – Jag

+0

_gaq由跟蹤代碼段創建,而不是在加載ga.js時創建。這還不夠。請參閱http://stackoverflow.com/a/13450713/307687而不是 –

50

如果您正在使用通用Analytics(analytics.js)再改用這樣的:

_gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 

這樣:

ga('send', 'event', 'Downloaded Video', 'Yes'); 
+1

這應該被標記爲正確的答案。謝謝你的幫助。 –

+0

很高興幫助:) – Mike

+1

@ Mr.Hardy我沒有使用Universal Analytics,因此我無法接受這是正確的答案。 – crmpicco

0

您可能需要添加事件JS某處跟蹤,但CMS僅爲未登錄的訪問者或特定頁面添加Google Analytics。以下功能檢查將起作用:

if (typeof(ga) === 'function') { 
    ga('send', 'event', 'what', 'has', 'happened'); 
} 
相關問題