【问题标题】:Why does a JS script placed after the </body> and </header> get executed?为什么放在 </body> 和 </header> 之后的 JS 脚本会被执行?
【发布时间】:2012-02-12 03:12:50
【问题描述】:

我正在用 PHP 做一些事情,我想包含一个文件并在最后插入一些东西。不假思索,我做了include,然后回显出我想插入的材料,这是一个JS脚本。

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

如果你在我这样做之前问过我是否会执行 and 标签之后的脚本,我会说“我不这么认为”。我会说我认为它不会执行,因为到目前为止我一直认为 and 标记之后的任何内容都会被浏览器忽略。

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

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

我已经在 FF 3.6.24 和 I.E 8.0.7601.17514 上进行了尝试,两者的行为相同。

and 标记之后的任何文本都会显示 - 为什么?

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

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

鲍勃

【问题讨论】:

  • 浏览器会解析整个文件,而不仅仅是标签所在的位置。

标签: javascript html behavior execution


【解决方案1】:

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

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

其他的

↪ 解析错误。将插入模式切换为"in body",重新处理token。

从技术上讲,这是一个解析错误,但具有明确定义的行为。 &lt;script&gt; 元素被解析和执行,就好像它已经出现在 body 中一样,并且该元素应该出现在 body 中的 DOM 中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2011-10-13
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多