这更像是一个好奇心问题......
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并被数以百万计的网站使用......
由于
答案 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。