为什么不自我

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

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

只有这一点被认可:

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

这是否违反了XHTML支持的概念?

注意:至少对于所有IE(6-8测试版2)这个说法是正确的。


XHTML 1规范说:

С.3。 元素最小化和空元素内容

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

XHTML DTD将脚本标记指定为:

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

为了增加Brad和Squadette所说的,自动关闭XML语法<script />实际上正确的XML,但为了在实践中正常工作,Web服务器还需要将文档作为正确形成的XML与XML mimetype像HTTP Content-Type头中的application/xhtml+xml (而不是text/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兼容)解决方案是使用带有text/html (HTML语法+ HTML mimetype)的旧<script></script>语法。

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

无论是否使用http-equiv meta标签,文档中的XML prolog或doctype,Firefox分支一旦获取text/html标头,确定HTML或XML分析器是否在文档内部查找,都会发生这种情况, HTML解析器不理解<script />


如果任何人都好奇,最终的原因是HTML最初是SGML的一种方言,这是XML奇怪的哥哥。 在SGML-land中,标签可以在DTD中指定为自闭(例如BR,HR,INPUT),隐式可关闭(例如P,LI,TD)或显式可关闭(例如TABLE,DIV,SCRIPT)。 XML当然没有这个概念。

现代浏览器使用的标记汤分析器是从这个传统演变而来的,尽管他们的分析模型不再是纯粹的SGML。 当然你的精心制作的XHTML被认为是写得不好的SGML标签汤,除非你用XML MIME类型发送它。 这也是为什么...

<p><div>hello</div></p>

...被浏览器解释为:

<p></p><div>hello</div><p></p>

...这是一个可爱的晦涩的错误的食谱,可以在您尝试对DOM进行编码时使您陷入合适的状态。

链接地址: http://www.djcxy.com/p/3165.html

上一篇: Why don't self

下一篇: Fixing JavaScript Array functions in Internet Explorer (indexOf, forEach, etc.)