为什么JS脚本放在</身体>并且</页眉>被处决

Why does a JS script placed after the </body> and </header> get executed?

本文关键字:lt gt 并且 页眉 处决 JS 脚本 为什么 身体      更新时间:2023-09-26

我正在用PHP做一些事情,我想包括一个文件并在末尾插入一些东西。我不假思索地做了收录,然后呼应了我想插入的材料,那是一个JS脚本。

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

如果你在我做这件事之前问我,在和标记之后的脚本是否会执行,我会说"我不这么认为。"我会说我认为它不会执行,因为到目前为止,我一直认为在和标记后面的任何东西都会被浏览器忽略。

所以,如果你问的话,我会给出那个答案,我错了。

放在和标记后面的脚本确实执行了——为什么?

我已经在FF 3.6.24和I.E 8.0.7601.17514中尝试过,它在两者中的表现都相同。

显示和标记后的任何文本-为什么?

有人对此有什么想法吗?这是我可以信赖的东西吗?如果是这样的话,我可以在这里和那里简化一些处理。

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

Bob

这是HTML5中指定的行为,尽管它会被HTML5验证器标记。

after-after-body插入模式定义了</html>标记之后的内容会发生什么。处理这种情况的规则是:

其他任何东西

↪分析错误。将插入模式切换到"插入"模式;体内";并重新处理令牌。

因此,从技术上讲,这是一个解析错误,但行为定义良好。<script>元素被解析和执行,就像它出现在主体中一样,并且该元素应该出现在主体的DOM中。

大多数浏览器不会将";解析错误";是致命的。HTML 5规范解释道:

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