浏览器无法正确识别的原因是什么:
<script src="foobar.js" /> <!-- self-closing script element -->
只有这一点是公认的:
<script src="foobar.js"></script>
这是否打破了XHTML支持的概念?
注意:此声明至少对所有IE(6-8 beta 2)都是正确的。
浏览器无法正确识别的原因是什么:
<script src="foobar.js" /> <!-- self-closing script element -->
只有这一点是公认的:
<script src="foobar.js"></script>
这是否打破了XHTML支持的概念?
注意:此声明至少对所有IE(6-8 beta 2)都是正确的。
当前回答
与XML和XHTML不同,HTML不了解自动关闭语法。将XHTML解释为HTML的浏览器不知道/字符表示标记应该是自动关闭的;相反,它们将其解释为一个空属性,解析器仍然认为标记是“打开的”。
正如<script defer>被视为<script defer=“defer”>一样,<script/>被视为<script/=“/”>。
其他回答
Internet Explorer 8和更早版本不支持XHTML解析。即使使用XML声明和/或XHTML文档类型,旧IE仍然将文档解析为纯HTML。在纯HTML中,不支持自动关闭语法。尾部斜杠被忽略,您必须使用显式结束标记。
即使是支持XHTML解析的浏览器(如IE9和更高版本),也会将文档解析为HTML,除非您使用XML内容类型提供文档。但在这种情况下,旧IE根本不会显示文档!
与XML和XHTML不同,HTML不了解自动关闭语法。将XHTML解释为HTML的浏览器不知道/字符表示标记应该是自动关闭的;相反,它们将其解释为一个空属性,解析器仍然认为标记是“打开的”。
正如<script defer>被视为<script defer=“defer”>一样,<script/>被视为<script/=“/”>。
简单地说,现代的答案是因为标签以这种方式表示为强制性的
标记省略无,开始标记和结束标记都是必填的。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
上面的人已经大致解释了这个问题,但有一点可能会让事情变得很清楚,尽管人们一直在HTML文档中使用<br/>等,但这种位置上的任何/基本上都被忽略了,只有在试图使某种东西既可解析为XML又可解析为HTML时才使用。例如,尝试<p/>foo</p>,就会得到一个常规段落。
除Brad和squadette所说的之外,自动关闭的XML语法<script/>实际上是正确的XML,但要使其在实践中发挥作用,web服务器还需要将文档作为格式正确的XML发送,并在HTTP Content Type标头中使用类似application/xhtml+XML的XML mimetype(而不是text/html)。
然而,发送XML mimetype将导致IE7无法解析页面,IE7只喜欢text/html。
来自w3:
总之,“application/xhtml+xml”应用于XHTML系列文档,以及“text/html”的使用应限于HTML兼容XHTML 1.0文档。'应用程序/xml'也可以使用“text/xml”,但是只要合适,应使用“application/xhtml+xml”而不是那些通用的XML媒体类型。
几个月前我对此感到困惑,唯一可行的(兼容FF3+和IE7)解决方案是使用旧的<script></script>语法和text/html(html语法+html mimetype)。
如果您的服务器在其HTTP头中发送text/html类型,即使是格式正确的XHTML文档,FF3+也将使用其html呈现模式,这意味着<script/>将无法工作(这是一个变化,Firefox以前没有那么严格)。
无论对文档中的http equiv元元素、XML序言或doctype进行任何篡改,都会发生这种情况——Firefox一旦获得text/html头,就会分支,这决定了html或XML解析器是否在文档中查找,而html解析器不理解<script/>。