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

Dan*_*anC 202 html javascript

将script标记放在body(</body>)的结束标记之后是多么错误.?

<html>
  ....
  <body>
     ....
  </body>
  <script type="text/javascript" src="theJs.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)

And*_*y E 184

它不会在或标签之外进行验证.它也没有太大的区别-除非你做DOM操作,可以打破IE满载body元素之前-到把它刚刚闭幕前.<body><head></body>

<html>
  ....
  <body>
     ....
     <script type="text/javascript" src="theJs.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • @epalla:如果你把脚本放在body标签的末尾,那么当它到达那里时,没有其他内容可以加载,所以将它放在外面或者只是在里面之间应该没什么区别.然后,您的页面仍然可以验证,这是我试图在我的答案中提出的点. (13认同)
  • @PHPst:嗯,无效代码可能会在某些浏览器中受到副作用.无论哪种方式,我都没有看到它的缩进比一个标签宽度小于它上面的代码使它看起来更干净. (3认同)

Que*_*tin 84

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

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

  • 这是一个更好的答案.有太多的新浏览器出现在移动设备上,当你需要切割并粘贴一个结束标签时,冒险做错了. (12认同)
  • 请注意,“defer”***仅***适用于外部脚本文件(即您还必须指定“src”属性)。您不能*“推迟”*包含脚本的`&lt;script&gt;`元素。 (2认同)

Vit*_*nko 32

正如安迪所说,该文件无效,但仍然会解释该剧本.例如,请参阅WebKit 的代码段:

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;
    ...
Run Code Online (Sandbox Code Playgroud)

  • "支持真正破解的HTML." - 我认为它说明了一切. (10认同)

Bro*_*onx 7

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


BG *_*uno 5

按照W3C 推荐的流程,在“元素主体”之后按程序插入“元素脚本”是一个“解析错误” 。在“树构建”中创建一个错误并再次运行“标记化”来处理该内容。所以这就像一个额外的步骤。只有这样它才能运行“脚本执行”——参见方案流程

其他任何内容都是“解析错误”。将“插入模式”切换为“体内”并重新处理令牌。

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