将<script>标记放在</body>标记之后是错误的吗?</script>

时间:2010-06-14 13:49:03

标签: javascript html

将脚本标记置于正文的结束标记(</body>)之后有多么错误。 ?

<html>
  ....
  <body>
     ....
  </body>
  <script type="text/javascript" src="theJs.js"></script>
</html>

8 个答案:

答案 0 :(得分:172)

<body><head>标记之外不会validate。它也没有多大区别 - 除非你在body元素完全加载之前进行了break IE的DOM操作 - 把它放在关闭</body>之前。

<html>
  ....
  <body>
     ....
     <script type="text/javascript" src="theJs.js"></script>
  </body>
</html>

答案 1 :(得分:75)

是。在主体的结束标记之后,只允许使用注释和html元素的结束标记。

浏览器可能会执行错误恢复,但您永远不应该依赖它。

答案 2 :(得分:30)

由于Andy表示该文档无效,但仍然会解释该脚本。例如,请参阅WebKit中的snippet

void HTMLParser::processCloseTag(Token* t)
{
    // Support for really broken html.
    // we never close the body tag, since some stupid web pages close it before 
    // the actual end of the doc.
    // let's rely on the end() call to close things.
    if (t->tagName == htmlTag || t->tagName == bodyTag 
                              || t->tagName == commentAtom)
        return;
    ...

答案 3 :(得分:8)

IE不再允许这样做(因为版本10,我相信)并且会忽略这些脚本。 FF和Chrome仍然可以容忍它们,但有一天它们可能会将其作为非标准版本。

答案 4 :(得分:0)

是。但是如果你确实在它之外添加代码,那么很可能不会是世界末日,因为大多数浏览器都会修复它,但是进入它仍然是一个不好的做法。

答案 5 :(得分:0)

Google实际上就'CSS优化'推荐这一点。他们建议内衬关键的上层样式并推迟其余的(css文件)。

示例:

<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>

请参阅:https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery

答案 6 :(得分:0)

按程序recommended process by W3C在“元素主体”为“解析错误”之后插入“元素脚本”。在“树结构”中创建错误,然后运行“再次令牌化”以处理该内容。因此,这就像其他步骤。只有这样才能运行“脚本执行”-参见scheme process

  

还有其他“解析错误”。将“插入模式”切换为“体内”并重新处理令牌。

从技术上讲,它是浏览器的内部过程,它们如何标记和优化它。

我希望我能帮助别人。

答案 7 :(得分:0)

现代浏览器将在主体中采用脚本标签,如下所示:

<body>
    <script src="scripts/main.js"></script>
</body>

基本上,这意味着脚本将在页面完成后加载,这在某些情况下(即DOM操作)可能有用。但是,我强烈建议您使用相同的脚本,并使用“ defer”将其放在head标签中,因为它会产生相同的效果。

<head>
    <script src="scripts/main.js" defer></script>
</head>