将脚本标记置于正文的结束标记(</body>
)之后有多么错误。 ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
答案 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>