<\!-- self-closing script element..."> <\!-- self-closing script element..."/> <\!-- self-closing script element..."> <\!-- self-closing script element...">

自关闭脚本元素为何不起作用?

JavaScript

蛋蛋十三

2020-03-09

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

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

只有这是公认的:

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

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

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

第283篇《自关闭脚本元素为何不起作用?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

8个回答
Eva神乐 2020.03.09

Internet Explorer 8和更早版本不支持XHTML的正确MIME类型application/xhtml+xml如果您以XHTML的形式提供服务text/html,而这些Internet Explorer的较早版本必须执行任何操作,则它将被解释为HTML 4.01。您只能对任何允许省略结束标记的元素使用简短语法。请参阅HTML 4.01规范

XML“简短形式”被解释为名为/的属性,该属性(因为没有等号)被解释为具有隐式值“ /”。在HTML 4.01中,这是完全错误的-不允许使用未声明的属性-但浏览器将忽略它。

IE9和更高版本支持XHTML 5一起提供application/xhtml+xml

神无Green前端 2020.03.09

简而言之,现代的答案是因为该标记以这种方式表示为强制性的

标签省略无,开始标签和结束标签都是必需的。

https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/script

Stafan古一 2020.03.09

与XML和XHTML不同,HTML不了解自动关闭语法。将XHTML解释为HTML的浏览器不知道该/字符表明该标签应该是自动关闭的。取而代之的是,他们将其解释为空属性,而解析器仍然认为标记为“打开”。

正如<script defer>被视为<script defer="defer"><script />被视为<script /="/">

村村阿飞 2020.03.09

自动关闭脚本标签将不起作用,因为脚本标签可以包含内联代码,并且HTML不够灵巧,无法根据属性的存在打开或关闭该功能。

另一方面,HTML确实具有出色的标记,可以包含对外部资源的引用:<link>标记,它可以是自动关闭的。它已经包括样式表,RSS和Atom提要,规范URI以及各种其他功能。为什么不使用JavaScript?

如果您希望脚本标签是自封闭的,则不能像我所说的那样做,但是有一种替代方法,尽管不是明智的选择。您可以使用自行关闭链接标记,并通过将其指定为文本/ JavaScript和rel作为脚本的类型来链接至JavaScript,如下所示:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />
Green达蒙 2020.03.09

上面的人已经很好地解释了这个问题,但是可能使事情变得清楚的一件事是,尽管人们<br/>一直在HTML文档中使用诸如此类的内容,但/基本上处于这种位置的任何内容都将被忽略,并且仅在试图使可以解析为XML和HTML的东西。<p/>foo</p>例如,尝试,您将获得一个普通段落。

蛋蛋阿飞 2020.03.09

Internet Explorer 8和更早版本不支持XHTML解析。即使您使用XML声明和/或XHTML文档类型,旧版IE仍会将文档解析为纯HTML。在纯HTML中,不支持自动关闭语法。尾部的斜杠只是被忽略,您必须使用显式的结束标记。

即使支持XHTML解析的浏览器(例如IE 9和更高版本)仍将文档解析为HTML,除非您使用XML内容类型提供文档。但是在那种情况下,旧的IE根本不会显示文档!

Itachi伽罗 2020.03.09

万一有人好奇,最终的原因是HTML最初是SGML的方言,SGML是XML的怪异哥哥。在SGML域中,可以在DTD中将元素指定为自动关闭(例如BR,HR,INPUT),隐式关闭(例如P,LI,TD)或显式关闭(例如TABLE,DIV,SCRIPT)。XML当然没有这个概念。

尽管现代的浏览器的解析模型不再是纯粹的SGML,但现代浏览器所使用的标记汤解析器却是从此继承而来的。当然,除非您使用XML MIME类型发送它,否则您精心设计的XHTML将被视为编写不良的SGML风格的标记汤。这也是为什么...

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

...被浏览器解释为:

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

...这是一个可爱的,难以理解的错误的配方,当您尝试对DOM进行编码时,该错误会使您陷入困境。

L十三 2020.03.09

XHTML 1规范说:

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

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

XHTML DTD将脚本元素指定为:

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

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android