对于谷歌Analytics(分析)两个独立的脚本标签?(Two separate script ta

2019-07-31 03:39发布

有谁知道为什么谷歌Analytics(分析)需要两个独立的脚本标签?

具体来说,他们的说明书告知用户嵌入下面的代码片段到网页以便跟踪:

<!-- Google Analytics -->
<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-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

为什么不能用户只使用一个脚本块这样的:

<!-- Google Analytics -->
<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"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

Answer 1:

<script>标记中,依次执行。 甲<script>如果不这样做的前一个执行块不能执行。

第一<script>标签负责创建的谷歌的<script>标签,其将加载外部JS。 第一后<script>是完成执行,则DOM看起来如下:

<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->

这保证了第二<script>标记将不执行,直到.js加载完成。 如果第一和第二<script>将被组合,这将导致_gat变量是未定义的(因为谷歌注入直到第一脚本完成执行的脚本将不会启动装载)。



Answer 2:

document.write只要它是在代码执行发生。 因此,如果我们用你的“一个脚本块”的例子,实际生成的源代码最终会这样看:

<!-- Google Analytics -->
<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"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

因此, var pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview(); var pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview(); 代码将失败,因为_gat直到ga.js文件加载不会被定义。

那有意义吗?



Answer 3:

第一块实际上是使用JavaScript编写一个全新的脚本标签内嵌到更换的脚本。 它是做一个检查,看看如果您正在使用“HTTPS”被请求的页面上,如果是这样,用自己的安全URL请求的脚本,或者您的浏览器可能会显示“此页面的部分是不安全的 - 显示安全项目吗?” 或拒绝拨打电话都没有。

如果第二脚本标签被列入第一,它会被吹走和/或不是一个结构良好的脚本标记和代码将不得不与他们相互混合。

这样一来,你可以做的是trackPageview和设置属性等所有电话在自己的块干净,还通过HTTP和HTTPS正常工作。

因此,页面呈现的情况下,DOM看起来像这样的第一个脚本执行(普通的HTTP)后:

<!-- Google Analytics -->
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

而这(HTTPS):

<!-- Google Analytics -->
<script src='https://ssl.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

更多细节: http://code.google.com/apis/analytics/docs/tracking/gaTrackingOverview.html



Answer 4:

我怀疑这是试图避免使用晦涩的浏览器有问题document.write部署脚本标签。



Answer 5:

对于它的价值,我们做大量使用的onclick =“pageTracker._trackPageview(%文件名%)”机制来追踪直接下载文件,但还是不希望跟踪实际浏览量直到网页完全加载。 我们必须包括在页面顶部的第一个标签来启用,但最后留下的最后_trackPageview()调用(当然,我们多用var以pageTracker有点太)。

不一定, 为什么他们打破它这种方式,但它使我们的目的更容易一些。



文章来源: Two separate script tags for Google Analytics?