将 script 标签放在 body ( </body>
)的结束标签之后有多大错?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
将 script 标签放在 body ( </body>
)的结束标签之后有多大错?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
是的。在正文的结束标记之后只允许html元素的注释和结束标记。
浏览器可能会执行错误恢复,但您不应该依赖它。
正如安迪所说,文档将无效,但脚本仍将被解释。例如,请参阅来自 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;
...
Internet Explorer 不再允许这样做(我相信从版本 10 开始)并且将忽略此类脚本。
Firefox 和 Chrome 仍然可以容忍它们,但有可能有一天它们会将其作为非标准丢弃。
在W3C 推荐的过程中,在“元素主体”之后按程序插入“元素脚本”是“解析错误” 。在“Tree Construction”中创建一个错误并运行“tokenize again”来处理该内容。所以这就像一个额外的步骤。只有这样它才能运行“脚本执行”——参见方案流程。
其他任何东西都是“解析错误”。将“插入模式”切换为“in body”并重新处理令牌。
从技术上讲,浏览器如何标记和优化它是一个内部过程。