在网页上使用多个脚本块有什么不同?

时间:2010-06-06 21:16:54

标签: javascript google-analytics

编辑:正如Andrew Moore指出这个问题是Two separate script tags for Google Analytics?的重复所以应该删除这个问题以避免混乱Stack Overflow,除非有一点保持这个,因为它可能显示在略有不同的搜索中。

在网页上使用多个脚本块有何不同?我已经在标准代码中粘贴了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-xxxxxx-x");
        pageTracker._trackPageview();
    } catch(err) {}
</script>

4 个答案:

答案 0 :(得分:5)

第二个<script>包含依赖google-analytics.com/ga.js加载的代码。

非延迟脚本按它们在DOM中的存在顺序执行。

第一个<script>会自动注入新的<script>src指向谷歌的ga.js),会立即加载并执行 - 只有第二个<script> {1}}被执行。

答案 1 :(得分:5)

<script>个标签按顺序执行。如果前一个块未执行,则<script>块无法执行。

第一个<script>代码负责创建将加载外部js的Google <script>标记。第一个<script>执行完毕后,DOM如下所示:

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

这可以保证在<script>完成加载之前,第二个.js标记不会执行。如果合并第一个和第二个<script>,则会导致_gat变量未定义(因为在第一个脚本执行完毕之前,Google注入的脚本不会开始加载)。

答案 2 :(得分:2)

在您的示例中,第一个脚本块使用document.write编写另一个脚本元素,该元素加载外部脚本,然后第二个脚本元素使用该外部脚本中定义的内容。我很确定将它分成两个脚本块是必要的。

如果你没有使用这种奇怪的技巧,那么将多个脚本块放在一行通常不会有什么特别之处。将它们放在页面的不同部分非常有用,因为您希望在加载文档时运行脚本。如果您的页面很长,您可能希望在加载时运行一些脚本,以便尽快初始化。用窗口小部件替换元素应该尽早完成,以避免在页面最终完成加载时跳转。

答案 3 :(得分:1)

如果第一个块中的代码以异常结束,则第二个部分也将起作用。