Google Analytics跟踪代码中的双脚本标记

时间:2010-05-13 23:56:49

标签: javascript google-analytics tracking

这更像是一个好奇心问题......

Google指示添加分析跟踪代码,如下所示:

<script type="text/javascript">
   var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
   document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
   try{
      var pageTracker = _gat._getTracker("UA-xxxxxx-x");
      pageTracker._trackPageview();
   } catch(err) {}
</script>

我想知道这里的一些JS大师可以告诉我为什么他们将它分成两个脚本标签,而不是将它们全部放在一个标签内。我知道顶部部分可以放在标题和底部部分之前,在身体标记之前,以确保页面在跟踪之前加载,但我想知道是否还有更多内容。任何知道这一点的人都可能知道如何将代码分成两个标签。

我只是问,因为这是来自Goog并被数以百万计的网站使用......

由于

2 个答案:

答案 0 :(得分:3)

这是一致的跨浏览器,它需要确保document.write()在下一个脚本块运行之前粘贴它生成的标记,因此结果如下所示:

<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>
<script type="text/javascript">
   try{
      var pageTracker = _gat._getTracker("UA-xxxxxx-x");
      pageTracker._trackPageview();
   } catch(err) {}
</script>

如果它没有在2个脚本中执行,_gat将在第二个脚本块中未定义,因为ga.js尚未加载...但是作为脚本块之前,页面在执行最后一个块内的代码之前等待,使它在应该的时候全部工作。基本上,浏览器按顺序执行脚本块,谷歌利用这个事实在需要加载脚本时加载脚本......这是在使用之前。

答案 1 :(得分:1)

如果我不得不猜测,我会说这是因为document.write(unescape(...));行他们动态地包含了另一个JS文件。为什么他们动态加载那个我不知道的。我猜这与你是否正在运行https或http。

有关

如果是一个文件,我怀疑是否会及时加载ga.js文件来运行pageTracker代码。 _gat不存在,您将收到错误,而不是实际使用Google Analytics。