为什么Google Analytics事件不会被解雇/保存?

时间:2013-09-23 19:10:35

标签: javascript jquery google-analytics

我已将谷歌分析跟踪器加载到iFrame中:

  (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','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-my-id-here');
  ga('set', 'location', 'http://foo.com/bar');
  ga('set', 'title', 'Awesome');

  ga('send', 'pageview');

我也有自定义Javascript试图在同一页面上跟踪富客户端应用程序中的事件,该应用程序上面引用了ga实例,并尝试发送事件:

ga('send', 'event', 'my_category', 'my_event', 'my_value');

当我加载页面时,我看到正确跟踪了初始网页浏览量。当我单击并触发自定义事件跟踪时,JavaScript会执行并且不会引发错误。它也没有注册任何事件。

2 个答案:

答案 0 :(得分:0)

确保您在snippte之后尝试调用的页面已加载analytics.js(如果它在iframe中)

ga('send', 'event', 'my_category', 'my_event', 'my_value');

答案 1 :(得分:0)

问题最终成为JavaScript范围问题。

analytics.js应用程序仅在所有调用都在相同的Javascript范围内时才有效。我试图在不同的页面范围内触发GA事件(由于嵌入式JS应用程序和iFrames,它很复杂)。

解决方案如下:

<script type="text/javascript">
  (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','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-my-id');
  ga('set', 'hostname', 'awesome.com');
  ga('set', 'location', '/path/to/awesome');
  ga('set', 'referrer', 'REFERRER_VALUE');
  ga('set', 'title', 'Awesome App');

  ga('send', 'pageview');

  window.trackGAEvent = function(eventName, value) {
    ga('send', 'event', 'awesome_app', eventName, value);
  }
</script>

诀窍是封装ga事件send调用。我可以通过向下钻取DOM来从其他上下文中调用此方法,但我不能直接从正确的上下文之外调用GA应用程序。