javascript - 为什么放置在</body>和&lt;/header&gt;之后的JS脚本会被执行?

标签 javascript html behavior execution

我正在用 PHP 做一些事情,我想包含一个文件并在最后插入一些东西。想都没想就做了include,然后echo出来了我要插入的素材,是一个JS脚本。

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

如果在我执行此操作之前您问我 和 标记之后的脚本是否会执行,我会说“我不这么认为”。我会说我认为它不会执行,因为我假设,到目前为止,浏览器会忽略 和 标记之后的任何内容。

所以,如果你问,我会给出那个答案,但我会大错特错。

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

我已经用 FF 3.6.24 和 I.E 8.0.7601.17514 试过了,它在两者中的行为相同。

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

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

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

鲍勃

最佳答案

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

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

Anything else

↪ Parse error. Switch the insertion mode to "in body" and reprocess the token.

从技术上讲,这是一个解析错误,但具有明确定义的行为。 <script>元素被解析和执行,就像它出现在正文中一样,元素应该出现在正文中的 DOM 中。

大多数浏览器不会将“解析错误”视为 fatal error 。 HTML 5 spec解释:

Certain points in the parsing algorithm are said to be parse errors. The error handling for parse errors is well-defined: user agents must either act as described below when encountering such problems, or must abort processing at the first error that they encounter for which they do not wish to apply the rules described below.

关于javascript - 为什么放置在</body>和&lt;/header&gt;之后的JS脚本会被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246121/

相关文章:

javascript - Prestashop 1.6.1.16 - 我的 js 文件已加载,但没有看到我的函数

wpf - 在 ListboxItem 上添加自定义混合行为

Yii 行为和场景

javascript - 在 web2py 中包含静态 javascript

javascript - 使用 JavaScript 的平滑滚动问题

php - 修改 beforeFind 回调中所需的 Containable 字段?

javascript - setInterval - 我可以让它识别 "this"

javascript - 递归 JS 函数列出 Hx HTML 标签?

javascript - 使用 javascript 从 html 中提取元素

javascript - 未定义的输入、动态页面更改、html 中的 javascript