为什么不自我
浏览器无法正确识别的原因是什么:
<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.)