2010-09-01 2 views
4

При использованиииспользование _gaq асинхронный в затворах

var _gaq = _gaq || []; 

внутри тега сценария, что было бы необходимо, чтобы поддержать это в затворе, чтобы добавить аналитику запросов асинхронных.

т.е.

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 не является общедоступным, я предполагаю, что это не сработает. Любые обходные пути?

ответ

5

Вы могли бы сделать что-то вроде:

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

Если выполнена в глобальном масштабе это будет делать трюк.

+0

Внутри функции 'window' будет' undefined', что вызовет исключение 'TypeError', когда будет доступно свойство' window._gaq'. Первый аргумент 'call' используется как значение' this' внутри вызываемой функции, аргумент 'window' не предоставляется. – CMS

+0

Вам лучше оставить функцию без аргументов, поскольку переменная 'window' уже привязана к тому, что вы хотите, хотя и выше по цепочке областей. –

+0

CMS: Вы совершенно правы, и я знаю, что делает 'call'; просто умственное размытие. Даниэль: в основном я передаю его, чтобы вы могли использовать его в среде, не поддерживающей браузер. Конечно, я не знаю, почему вы пытаетесь отслеживать просмотры страниц в среде, отличной от браузера, но это хорошая привычка не предполагать, что глобальный объект является «окном». –

1

Это работает (с использованием нотации JQuery для document.ready):

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

Я не знаю, если это поможет другим в поисках ответа, но, возможно, это будет. У меня была проблема с _gaq, которая не определена. Я понял, что мой фрагмент GA был ближе к концу страницы перед тегом тега окончания. Как я уже сказал, я переместил его сразу после начала тега. У меня все еще была проблема неопределенного _gaq. Ввод

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

в верхней части моего кода, который имел пользовательские события помогли решить все мои проблемы, но только если фрагмент кода Google был в верхней части страницы. Это очень помогло мне, и мне не пришлось помещать его в каждое событие click или в любую функцию, отличную от функции jQuery ready.

Смежные вопросы