为什么JS脚本放在并执行之后?

时间:2012-02-12 03:12:50

标签: javascript html behavior execution

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

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

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

所以,如果你问过,我会给出答案,我本来就错了。

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

我尝试过使用FF 3.6.24和I.E 8.0.7601.17514,两者的行为相同。

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

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

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

鲍勃

1 个答案:

答案 0 :(得分:5)

这是HTML5中明确指定的行为,尽管它将由HTML5验证器标记。

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

  

其他

     
    

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

  

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

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

  

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