Google Analytics代码会出现在头脑之前会发生什么?

时间:2014-02-18 15:36:42

标签: javascript google-analytics

我正在查看一个网站,该网站在一个不寻常的地方有一些Google Analytics代码,即在<head>代码之前。

分析似乎都正常工作......但预期的行为是什么?

在即使是标题之前,JS会立即加载吗?如果是这样,那对于如何跟踪事物有什么影响(如果有的话)?

更广泛地说,在<head><body>标记之外放置的各种JavaScript的预期行为是什么?

任何建议都非常感激。

干杯。

2 个答案:

答案 0 :(得分:1)

只要不引用加载代码中的“head”,javascript仍会加载。

e.g。头部负荷:https://stackoverflow.com/a/6683376/94668

<script>
var script = document.createElement("script");
    script.src = "yourfile.js";
    script.async = true; //asynchronous
    document.getElementsByTagName("head")[0].appendChild(script);
</script>

e.g。脚本代码(谷歌分析使用):https://developers.google.com/analytics/devguides/collection/gajs/#quickstart

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

基本上寻找getElementsByTagName(elementString)并确保elementString!=='head'。

答案 1 :(得分:1)

现代浏览器的问题在于它们不需要有效的HTML。

现在标签在没有严格检查的情况下被解析。因此,<head>部分之前但仍在<html>部分内的任何脚本(或任何标记元素)都被视为文档的<head>部分的一部分,并且如果仅存在有效标记,则文档中<head>标记中的任何内容都会保留在<head>中;如果找到文本或无效标记,则会将其推送到body

此类脚本,只要它们不引用<head>标记就可以了(因为head标签现在已经更改)。这是正常但意外的行为,并且可以在浏览器甚至其版本之间进行更改。随着浏览器的发展,他们开始接受偏离严格标准的文件和结构。您可以使用Chrome中的开发者控制台(F12)在此文档中验证这一点:

<!DOCTYPE html>
<html>
<script>
console.log(document.getElementsByTagName('title'));
</script>
<head>
    <title>This</title>
    as
    <script>var s="sastra";console.log(s);
    </script><title>This2</title>
    as
</head>
    <body>
        <a href="http://google.com">Click here for Google</a>
        <p> How are you?</p>
    </body>
</html>

并致电document.getElementsByTagName('html')并查看他们的headbody元素,并将其与来源进行比较。在上面的同一文档中,如果从<head>部分中移除了2'作为',

我的意思是:

<!DOCTYPE html>
<html>
<script>
console.log(document.getElementsByTagName('title'));
</script>
<head>
    <title>This</title>
    <script>var s="sastra";console.log(s);
    </script><title>This2</title>
</head>
    <body>
        <a href="http://google.com">Click here for Google</a>
        <p> How are you?</p>
    </body>
</html>

您会看到headbody现在使用相同的开发者控制台是不同的。看,我告诉你意外的行为。

现在基于上下文识别标签,浏览器可以像<html><title>TitleHere那样违反很多规则。试试吧!

希望有所帮助! :)