为什么在</ body>和</ header>之后放置JS脚本?

Bob*_*obN 3 html javascript behavior execution

我正在研究PHP中的一些东西,我想要包含一个文件并在最后插入一些内容.不考虑它,我做了include,然后回显了我想要插入的材料,这是一个JS脚本.

当我查看输出时,我意识到我忘记了包含文件中的标签.脚本插在他们之后,但令人惊讶的是(至少对我而言)它被执行了.

如果在执行此操作之前,如果脚本和标签之后的脚本执行了,我是否曾经问过我,我会说"我不这么认为." 我会说我认为它不会执行,因为我已经假定,到目前为止,浏览器会忽略和标记之后的任何内容.

所以,如果你问过,我会给出答案,我会错的.

在和标签之后放置的脚本会执行 - 为什么?

我用FF 3.6.24和IE 8.0.7601.17514尝试了它,两者的行为相同.

显示和标签后面的任何文字 - 为什么?

有没有人对此有任何想法?而且,这是我可能依赖的东西吗?如果是这样,我可以在这里和那里简化一些处理.

这是我正在使用的页面http://www.bobnovell.com/PastHtmlEndTesting.shtml - 如果您的特定浏览器没有执行脚本和/或显示我在脚本之后放置的文本,请告诉我.

短发

Mik*_*uel 5

这是HTML5中明确指定的行为,虽然它将由HTML5验证器标记.

后机身后插入模式定义上发生了什么是后内容</html>标签.处理此案例的规则是:

还要别的吗

↪解析错误.将插入模式切换为"in body"并重新处理令牌.

所以从技术上讲,它是一个解析错误,但是具有明确定义的行为.该<script>元素分析和执行,就好像它已经出现在身体和元素应该出现在身体的DOM.

大多数浏览器不会将"解析错误"视为致命错误.在HTML 5规范解释说:

解析算法中的某些点被称为解析错误.解析错误的错误处理是明确定义的:用户代理在遇到此类问题时必须按照下面的描述执行操作,或者必须在遇到的第一个错误中止处理,因为他们不希望应用下面描述的规则.