2016-06-30 3 views
0

У меня есть следующий скрипт, однако переменная «ClientID» каким-то образом теряется (не определена). Мне интересно, это из-за инструкции window.load? и есть ли что-нибудь, что я могу сделать, чтобы переменная ClientID переносилась на эту функцию?переменная теряется при использовании window.onload

<script> 
      //Google analytics include 
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 

      ga('create', 'UA-xxxxxx-x', 'auto'); 
      ga('send', 'pageview'); 

      //store clientId in ClientID variable 
      var ClientID = ga(function(tracker) { 
       return tracker.get('clientId'); 
      }); 

      //After whole DOM is loaded addEventListener and send ClientID 
      //Not working, somehow ClientID gets lost... 
      window.onload = function() { 
       var myl = document.querySelector('div.mylivechat_collapsed'); 
       myl.addEventListener('click', function() { 
        ga('send', 'event', 'contact', 'livechat' , ClientID); 
       }); 
      } 
</script> 
+0

https://developers.google.com/analytics/devguides/collection/analyticsjs/command -queue-reference # add-commands-to-queue – Teemu

+0

Привет, Teemu, не знаю, как помогает файл справки - ничего не может найти для этого случая. У меня проблема с порядком, который, как мне кажется, инициализируется, и переменная теряется. –

+0

«Вызов функции очереди команд ga() со следующей сигнатурой функции будет выталкивать команды в очередь ...» Вы пытаетесь получить значение из асинхронно выполняемой функции. – Teemu

ответ

0

Per этого документа: https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference#create

ga() функция возвращает undefined. Поэтому ClientID будет undefined.

Я не уверен, что вы желая точно, но, возможно, вы хотите сказать:

 window.onload = function() { 
      console.log('onload'); 
      var myl = document.querySelector('div.mylivechat_collapsed'); 
      myl.addEventListener('click', function() { 
       console.log('CLICK:',ClientID); 
       ga('send', 'event', 'contact', 'livechat' , tracker.get('clientId')); 
      }); 
     } 

Если это так, то вам не нужно переменную ClientID.

0

Кажется, что ClientId не потерял но никогда не определено:

<script> 
 
    //Google analytics include 
 
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
 
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
 
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
 
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 
 

 
      ga('create', 'UA-xxxxxx-x', 'auto'); 
 
      ga('send', 'pageview'); 
 

 
      //store clientId in ClientID variable 
 
      var ClientID = ga(function(tracker) { 
 
       return tracker.get('clientId'); 
 
      }); 
 
    
 
      console.log('1:',ClientID); 
 

 
      //After whole DOM is loaded addEventListener and send ClientID 
 
      //Not working, somehow ClientID gets lost... 
 
      window.onload = function() { 
 
       console.log('onload'); 
 
       var myl = document.querySelector('div.mylivechat_collapsed'); 
 
       myl.addEventListener('click', function() { 
 
        console.log('CLICK:',ClientID); 
 
        ga('send', 'event', 'contact', 'livechat' , ClientID); 
 
       }); 
 
      } 
 
</script> 
 
<div class="mylivechat_collapsed">[CLICK ME]</div>