浏览器无法正确识别的原因是什么:

<script src="foobar.js" /> <!-- self-closing script element -->

只有这一点是公认的:

<script src="foobar.js"></script>

这是否打破了XHTML支持的概念?

注意:此声明至少对所有IE(6-8 beta 2)都是正确的。


当前回答

XHTML 1规范的非规范性附录“HTML兼容性指南”指出:

С.3元素最小化和空元素含量

给定内容模型不是空的元素的空实例(例如,空标题或段落),不要使用最小化形式(例如,使用<p></p>而不是<p>)。

XHTML DTD将脚本元素指定为:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

其他回答

简单地说,现代的答案是因为标签以这种方式表示为强制性的

标记省略无,开始标记和结束标记都是必填的。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

自动关闭的脚本标记不起作用,因为脚本标记可以包含内联代码,而HTML不够聪明,无法根据属性的存在来启用或禁用该功能。

另一方面,HTML确实有一个很好的标记,用于包括对外部资源的引用:<link>标记,它可以是自动关闭。它已经用于包括样式表、RSS和Atom提要、规范URI和其他各种好东西。为什么不呢?JavaScript?

如果你想让脚本标签是自我封闭的,你不能像我所说的那样做,但有一个替代方案,尽管不是一个聪明的方案。您可以使用自动关闭的链接标记,并通过为其提供一种text/JavaScript和rel as脚本来链接到JavaScript,如下所示:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

上面的人已经大致解释了这个问题,但有一点可能会让事情变得很清楚,尽管人们一直在HTML文档中使用<br/>等,但这种位置上的任何/基本上都被忽略了,只有在试图使某种东西既可解析为XML又可解析为HTML时才使用。例如,尝试<p/>foo</p>,就会得到一个常规段落。

XHTML 1规范的非规范性附录“HTML兼容性指南”指出:

С.3元素最小化和空元素含量

给定内容模型不是空的元素的空实例(例如,空标题或段落),不要使用最小化形式(例如,使用<p></p>而不是<p>)。

XHTML DTD将脚本元素指定为:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

与XML和XHTML不同,HTML不了解自动关闭语法。将XHTML解释为HTML的浏览器不知道/字符表示标记应该是自动关闭的;相反,它们将其解释为一个空属性,解析器仍然认为标记是“打开的”。

正如<script defer>被视为<script defer=“defer”>一样,<script/>被视为<script/=“/”>。