为什么自闭合脚本元素不起作用?

2022-08-29 22:00:18

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

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

只有这样才能被识别:

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

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

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


答案 1

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

元素最小化和空元素内容

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

XHTML DTD 将脚本元素指定为:

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

答案 2

为了补充Brad和sbandette所说的,自闭合XML语法实际上是正确的XML,但是为了在实践中工作,您的Web服务器还需要将文档作为正确格式的XML发送,并使用XML mimetype,如HTTP Content-Type标头(而不是as)。<script />application/xhtml+xmltext/html

但是,发送XML mimetype将导致您的页面不被IE7解析,IE7只喜欢。text/html

w3 开始

总之,'application/xhtml+xml'应该用于XHTML系列文档,'text/html'的使用应该仅限于HTML兼容的XHTML 1.0文档。也可以使用“application/xml”和“text/xml”,但在适当的时候,应该使用“application/xhtml+xml”,而不是那些通用的XML媒体类型。

几个月前我对此感到困惑,唯一可行的(与FF3 +和IE7兼容)解决方案是使用旧语法(HTML语法+ HTML mimetype)。<script></script>text/html

如果你的服务器在其HTTP标头中发送类型,即使使用其他格式正确的XHTML文档,FF3 +也将使用其HTML渲染模式,这意味着这将不起作用(这是一个变化,Firefox以前不那么严格)。text/html<script />

无论在文档中如何摆弄元元素,XML prolog或doctype,这都会发生 - Firefox一旦获得标题就会分支,这决定了HTML或XML解析器是否查看文档内部,而HTML解析器不理解。http-equivtext/html<script />