2012-10-20 71 views
4

SUMMARIZE:如何調試Google Analytics跟蹤錯誤(_gaq.push返回'3')

我誤解了內容腳本的用法。這導致了這個問題。下面是來自谷歌的官方文檔報價:

執行環境

內容腳本在一個特殊的環境中執行所謂的孤立 世界。他們可以訪問他們注入的頁面的DOM, ,但而不是可以訪問由該頁面創建的任何JavaScript變量或函數。 它看起來像每個內容腳本一樣,沒有其他JavaScript 正在其上運行的頁面上執行。 反過來也是如此: 頁面上運行的JavaScript不能調用任何函數或訪問由內容腳本定義的任何 變量。

更多細節: Content Script tracking with Google Analytics

-

我加入一些跟蹤代碼到一個Chrome擴展。但是當我測試它時,_gaq.push返回數字3.在我測試的時候,我想如果我在擴展中調用_gaq.push,數字將繼續上升。但是當我在控制檯中調用它時,一切正常(所有相同的代碼)。

我想知道如何才能跟蹤更深入的這個錯誤?

非常感謝每一個答案!

UPDATE:

當我跟蹤_gaq的返回值,它仍是一個數組。這意味着ga.js沒有加載,對吧?

但似乎ga.js從未加載到我的腳本中。除非我在控制檯上手動輸入_gaq,否則它是一個對象。這很奇怪。

我檢查了DOM並發現標記已經添加。

我查看了網絡面板,發現ga.js根本沒有加載到隊列中。但爲什麼我仍然可以使用控制檯訪問_gaq對象?

UPDATE2:

我使用的console.log跟蹤的「window._gaq」的值,發現的console.log(window._gaq)的返回值是不同於直接鍵入「window._gaq」在控制檯。這完全是兩個不同的對象。我甚至使用setInterval函數記錄結果,它保持返回數組,而不是預期的對象。

回答

7

通過腳本運行時_gaq是一個常規數組。就像JavaScript中的任何數組一樣,它的方法push將一個或多個元素插入到數組中,並返回數組的最後長度。

如:

var _gaq = []; 
> undefined 
_gaq.push(['_setAccount', 'UA-XXXXX-X']); 
> 1 
_gaq.push(['_setDomainName', 'mysite.com']); 
> 2 
_gaq.push(['_trackPageview'], 
      ['_trackEvent', 'cat', 'act']); 
> 4 

的GA後。js文件被加載_gaq陣列被讀取,因此可以處理插入它的指令,然後用對象替換_gaq陣列。該對象也實現了推送功能。但是請注意,在這種情況下,推送功能將執行一條指令到ga.js庫,然後返回0

如:

var _gaq = { 
    push: function(){ 
    // Do something here 
    return 0; 
    } 
}; 
> undefined 
_gaq.push(['_trackPageview']) 
> 0 

這是一個非常聰明的谷歌設計,創造了一個API,可以甚至在庫(ga.js)加載之前使用。

這就是爲什麼你的腳本_gaq.push期間Array類的方法和返回越來越多並在控制檯上,它總是返回0。

這是沒有問題的。它似乎按預期工作。

UPDATE

似乎的ga.js已經加載。也許它被緩存了,並沒有顯示在網絡面板上。

的ga.js由跟蹤腳本的這部分加載:

(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); 
    })(); 

這是異步加載。所以在執行這段代碼後,它將被加載,但加載的確切位置是未知的。

如果您需要知道何時加載ga.js文件,您可以將回調推送到_gaq,並在ga.js文件加載時執行。

如:

_gaq.push(function(){ 
    console.log('ga.js loaded!'); 
    debugger; 
}); 
+0

非常感謝您的解釋。我添加了一個新的跟蹤代碼,發現當我跟蹤_gaq的返回值時,它仍然是一個數組。這意味着ga.js仍然沒有加載。但問題是,除非我使用console.log跟蹤_gaq,否則它永遠不會加載到我的腳本中。這很奇怪。我更新了我的問題。 –

+0

@AwQiruiGuo我更新了我的答案,但你最好更好地解釋你想要調試什麼。只要檢查gif請求,如果他們正在發送,那麼它的工作。 – Eduardo

+0

感謝您的快速回復!我檢查了,任務沒有發送。我終於明白,這可能是Chrome擴展腳本的有效範圍的問題。我從擴展中的內容腳本中定義的對象無法直接從控制檯面板到達。也許這不是一個GA問題,而是一個Chrome問題。你有什麼好的建議嗎? –

相關問題