2016-04-22 3 views
0

Я использую analytics.js. Однако я не загружаю Google Analytics вместе с сценарием analytics.js, поскольку я ожидаю, что некоторые данные придут в первую очередь.Проверьте, загружена ли Google Analytics, и ga ('create', ...) называется

Следовательно, в какой-то момент я звоню ga('create', googleKey, 'auto');. Этот скрипт должен всегда выполняться, но я хочу быть на 100% уверенным. Таким образом, я хочу вызвать функцию в моем контроллере, но только в том случае, если она не была вызвана раньше.

Таким образом, как я могу убедиться, что он был вызван и выполнен раньше?

Я думал, что window.GoogleAnalyticsObject помогает мне здесь. Но, похоже, это говорит только о том, что ga используется, а не точно, когда он загружен и загружен.

Есть ли работа вокруг?

ответ

0

Лучшим решением является проверка запроса на пиксель. Создайте рекурсивную функцию или функцию интервала. Запрос простой IMG с этой базой: https://www.google-analytics.com/collect

например

 function checkAnalyticsPixel(){ 
     var analyticsPixel = false; 
     var imgs = document.getElementsByTagName('img'); 

     for(var i = 0; i < imgs.length; i++){ 
      var img = imgs[i]; 

      if(!!img.src.match("google-analytics.com/collect")){ 
       analyticsPixel = true;  
      } 
     } 

     if(!analyticsPixel){ 
      setTimeout(checkAnalyticsPixel, 1000); 
     }else{ 
      return true;  
     } 
    } 

    checkAnalyticsPixel(); 

Это также хорошая идея, чтобы добавить счетчик для регистрации. Вы также можете искать другие характеристики в запросе. Просмотр страницы запрос выглядит следующим образом:

https://www.google-analytics.com/collect?v=1&_v=j41&a=707797589&t=pageview&_s=1&dl=[URL]&ul=en-us&de=UTF-8&dt=[PAGETITLE]&sd=24-bit&sr=1920x1080&vp=1296x992&je=0&fl=21.0%20r0&_u=QCCAgAAB~&jid=1841853851&cid=253920917.1460537916&tid=UA-39805455-4&gtm=[GTMID]&cg1=beauty&z=1871236975

Edit: Аналитика удаляет пиксель. Вы можете переопределить appendChild. Это не очень хорошее решение, но оно может работать. Переопределение должно быть первым в вашем скрипте.

var appendChildPrototype = Element.prototype.appendChild; 
Element.prototype.appendChild = function(){ 
    appendChildPrototype.apply(this, arguments); 
    for(var i = 0; i < arguments.length; i++){ 
     var element = arguments[i]; 
     if(element.nodeName == "IMG" && element.src.match("google-analytics.com/collect")){ 
      console.log("ANALYTICS!"); 
     } 
    } 
}; 
+0

Как проверяет пиксель, скажите мне, полностью ли загружена аналитика. Я просто интегрировал ваш фрагмент кода. мне кажется, я не знаю, что мне нужно знать? – Dribel

+0

Я протестировал это решение. Не работает, потому что Google удаляет вставленный пиксель. Это очень плохо. –

+0

Отредактировано мое сообщение. –

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