通过引用将Google Analytics对象传递给函数的问题

时间:2012-02-11 04:02:08

标签: javascript arrays object google-analytics pass-by-reference

我为我的javascript做了一个帮助,以便跟踪一些ajax事件,这里是它设置的简短版本

analytics:{
        active: false,
        gaq:  null,
        init: function(gaq){
            this.active = true;
            this.gaq = gaq;
            $('a[href^=\"http://\"]').live('click', function() {
                helper.analytics.trackPageview('/outgoing/' + $(this).attr('href'));
                return true;
            });
        },
        trackPageview: function(page){
            if(this.active === false){
                return;
            }
            this.gaq.push(['_trackPageview',page]);
        }
    },

我有常见的谷歌分析设置

<script type="text/javascript">
  var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-xxxxxxxx-1']); 
   _gaq.push(['_setDomainName', '.example.com']);
   _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
  $(document).ready( function() {
    helper.analytics.init(_gaq);
  });
</script>

但是在控制台中,日志记录_gaq会导致出现一个对象。记录helper.analytics.gaq会生成一个数组,其中会附加新的综合浏览量,但不会在Google Analytics中跟踪网页浏览。
为什么不通过引用将_gaq传递给助手?

2 个答案:

答案 0 :(得分:1)

创建脚本代码时,ga代码段会将async属性设置为true。因此,它将独立于身体负荷。您需要将事件处理程序绑定到ga脚本标记的onload事件。像这样:

(function() {
 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;

 ga.onload = function(){
  herlper.analytics.init(_gaq);
 };

 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

我没有对此进行测试,但我认为它可能有用。

答案 1 :(得分:0)

您是否在Chrome devtools控制台或Firefox&amp;萤火?

您在初始脚本标记后面有'."