2010-09-01 18 views
4

_gaq非同步使用使用倒閉

var _gaq = _gaq || []; 

script標籤將需要什麼來支持這個在封閉加分析異步請求中。

experiment = (function(){ 
      var _gaq = _gaq || []; 
      _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
      _gaq.push(['_trackPageview']); 
      var nobody_knows_this_var_is_here = "cant see me"; 
     }); 
如果_gaq尚未定義,它才能找到這個陣來執行項目

被推到它,一旦它已準備就緒。因爲_gaq var不公開,我猜這是行不通的。任何解決方法?如果在全球範圍內,這將這樣的伎倆執行

(function (window) { 
    var g = window._gaq || (window._gaq = []); 
    g.push(['_setAccount', 'UA-XXXXX-X']); 
    g.push(['_trackPageview']); 
})(this); 

回答

5

你可以做這樣的事情。

+0

函數'window'的內部將是'undefined',當'window._gaq'屬性被訪問時會導致'TypeError'異常。 'call'的第一個參數被用作被調用函數中的'this'值,'window'參數沒有被提供。 – CMS 2010-09-01 23:41:41

+0

由於'window'變量已經綁定到你想要的,儘管在範圍鏈上更高,你最好不要離開函數。 – 2010-09-02 01:42:32

+0

CMS:你是完全正確的,我知道'call'是什麼;只是一個心理模糊。丹尼爾:主要是我將它傳入,以便您可以在非瀏覽器託管的環境中使用它。當然,我不知道你爲什麼試圖在非瀏覽器託管的環境中跟蹤瀏覽量,但不要以爲全局對象是「窗口」,這是一個好習慣。 – 2010-09-02 14:21:45

1

這工作(使用jQuery的符號來表示的document.ready):

$(function() { 
    $('.foobar').on('click', function() { 
     var _gaq = window._gaq || (window._gaq = []); 
     _gaq.push(['_trackEvent', 'category', 'action', 'label']); 
    }); 
}); 
0

我不知道這是否會幫助別人尋找一個答案,但也許它會。 我有一個_gaq沒有被定義的問題。我意識到我的GA代碼片段接近結束標籤前的頁面末尾。正如Google現在所建議的那樣,我在身體標記開始後將其移動到了右側。我還有一個未定義的_gaq的問題。把

var _gaq = window._gaq || (window._gaq = []);

在我的代碼,有自定義事件上幫助解決我的所有問題,但只有當谷歌片段是在頁面的頂部。這對我非常有幫助,我不必將它放在每個單擊事件或任何位置的函數中,而不是jQuery就緒函數。