代码之家  ›  专栏  ›  技术社区  ›  Tom

谷歌分析跟踪代码中的双脚本标记

  •  2
  • Tom  · 技术社区  · 14 年前

    这更像是一个好奇的问题,而不是其他任何问题…

    谷歌指示添加分析跟踪代码如下:

    <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专家可以告诉我为什么他们要将它分为两个脚本标签,而不是将它们全部粘贴到一个脚本标签中。我知道顶部可以放在标题中,底部可以放在body标签之前,以确保在跟踪页面之前加载页面,但我想知道是否还有其他内容。任何知道这一点的人都可能知道如何将代码分为两个标签。

    我只是问,因为这是来自goog,并被数百万网站使用…

    谢谢

    2 回复  |  直到 14 年前
        1
  •  3
  •   Nick Craver    14 年前

    这是为了保持跨浏览器的一致性,它需要确保 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>
    

    如果它没有在两个脚本中完成, _gat 将在第二个脚本块中未定义,因为 ga.js 尚未加载…但是作为脚本块 之前 这一点,页面在执行最后一个块中的代码之前会等待,使其在应该的时候都能工作。基本上,浏览器执行脚本块 整齐 ,Google利用这个事实在需要加载脚本时加载它……这是在它被使用之前。

        2
  •  1
  •   Jeff Rupert    14 年前

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

    如果是一个文件,我怀疑 ga.js 文件将及时加载以运行 pageTracker 代码。 _gat 不会存在,你会得到一个错误,而不是能够实际使用分析。