编辑:正如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>
答案 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)
如果第一个块中的代码以异常结束,则第二个部分也将起作用。