什么的原因是,浏览器不能正确认识到:

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

只有这个认识到:

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

这不会打破这一概念的XHTML支持?

注:这句话是正确的,至少对于所有即(6至8beta2).

有帮助吗?

解决方案

XHTML1说明书中说:

С.3.元化和空元的内容

鉴于空实例中的一个元素,其内容模式是不是 EMPTY (例如,一个空的标题和段落)不使用最小化的形式(例如使用 <p> </p> 而不 <p />).

XHTML DTD 指定脚本要素为:

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

其他提示

添加什么,布拉德和squadette说,自闭XML语法 <script /> 实际上 正确的XML,但对它的工作在实践中,你的网页服务器也需要发送你的证件作为正常的XML用XML mimetype喜欢 application/xhtml+xml 在HTTP Content-Type header(和 作为 text/html).

然而,发送XML mimetype会导致你的页面不要加以分析的IE7,其唯一喜欢 text/html.

w3:

总之,'application/xhtml+xml' 应该用于XHTML家庭 文件和使用的'text/html' 应该限于HTML兼容 XHTML1.0文件。'application/xml' 和'text/xml'也可以使用,但是 在适当情况 'application/xhtml+xml'应用 而不是那些通用XML媒体 类型。

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

如果你的服务器发送的 text/html 类型在其HTTP头,即使用否正确形成XHTML文件,FF3+将利用其HTML呈现的模式,这意味着 <script /> 不会的工作(这是一个变化,火狐是以前那么严格).

这会发生,无论在任何摆弄 http-equiv 元素,XML序言或doctype内部文件--Firefox分支机构一旦得到的 text/html 标题,即确定是否HTML或XML parser看起来里面的文档,并HTML析器不明白 <script />.

在情况下,任何人的好奇,最终原因是HTML最初的一种方言SGML,这是XML是奇怪的哥哥。在SGML的土地,元素可以指定在DTD无论是作为自封闭(例如BR,人力资源,输入),以隐含可封闭的(例如P、LI、TD),或明确可封闭的(例如表格,脚本)。XML当然没有概念。

标签-汤分析程序使用通过现代浏览器进化出的这种传统,尽管他们的分析模型是不是纯SGML了。当然,你仔细地造XHTML是被视为严重写SGML灵感的标签-汤除非你把它与一个XML mime类型。这也是为什么...

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

...得到的解释通过浏览器为:

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

...这是一个可爱的模糊的漏洞,可以把你扔到适当你试图码对DOM。

其他人回答"如何",并援引的规范。这里是真实的故事",为什么没有 <script/>"后,很多时间挖成的错误报告和邮件列表。


HTML4

HTML4是基于 SGML.

SGML有一些 shorttags, 如 <BR//, <B>text</>, <B/text/, 或 <OL<LI>item</LI</OL>.XML的采取的第一种形式,重新定义的结尾为">"(SGML是灵活的),以使它成为 <BR/>.

然而,HTML没有redfine,所以 <SCRIPT/> 应该 意思是 <SCRIPT>>.
(是的,'>'应的一部分内容和标签仍然是 关闭。)

显然,这是不符合XHTML和 打破许多网站(通过的时间足够成熟的浏览器 照顾 关于这个),所以 没有人实现shorttags 和说明书 建议反对他们.

有效,所有的'工作'self-结束了标签标记可选的结束标签在技术上不符合的分析程序,实际上是无效的。这是W3C哪 想出了这个黑客 来帮助过渡到XHTML通过使它 HTML兼容.

<script>'s端的标签 不是可选的.

"自止"的标签是一个黑客在HTML4和毫无意义。


HTML5

HTML5 五种类型的标签 而仅仅是无效的'和'外国'标记 允许可以自动关闭.

<script> 不是无效的(它 有内容)而不是国外的(像者编辑或SVG) <script> 不能自我封闭,无论你如何使用它。

但为什么?他们不能把它作为外国,使特殊情况下,或者什么的?

HTML5的目标是 向后兼容实现 HTML4和XHTML1.它不是基于SGML或XML;它的语法主要涉及记录和团结的方式实现的。(这是为什么 <br/> <hr/> 等等。都 有效HTML5 尽管是无效的HTML4.)

自动关闭 <script> 是的一个标签在哪里实现中用于不同。它的 使用的工作,在铬、野生动物园, 和歌剧院;据我所知它从未在互联网浏览器或火狐。

这是讨论 当HTML5正在起草,并得到了拒绝,因为它 休息 浏览器 兼容性.网页自附近的剧本标记可能并不正确地呈现(如果有的话),在旧的浏览器。还有 其他建议, 但他们不能解决兼容性问题。

后草案被释放,其更新分析程序可以在一致性。

自动关闭 <script> 不会发生在HTML5由于后向兼容性,以HTML4和XHTML1.


XHTML1/5XHTML

真的 作为XHTML, <script/> 真的是封闭的, 其他的答案 已经说明。

除了 该规格说 它的 应该 有工作时担任HTML:

XHTML文件...可以用互联网媒体类型"text/html"[RFC2854],因为它们与大多数HTML浏览器。

所以,发生了什么事?

问Mozilla让火狐分析 符合文件,作为 XHTML 无论指定内容的标题(称为 内容嗅探).这将允许自闭脚本,内容嗅探 是必要的 无论如何,因为网主机托管服务提供商还不够成熟服务的正确头;即是 好的在这.

如果的 第一浏览器的战争 并没有结束,随即6,XHTML可能已经在名单上,也。但它没有结束。和即6 有一个问题 与XHTML。事实上,即 不支持 正确的类型 在所有, ,迫使 每个人都 使用 text/html XHTML因为即 具有重大的市场份额 整整十年。

并且内容嗅探 真的很坏 和人说 它应该停止.

最后,事实证明,W3C 并不意味着XHTML要sniffable:该文件是 , HTML和XHTML, Content-Type 规则。一个可以说他们站在公司"只要按照我们的规范"和 忽略了什么实际的.一个错误 继续 到后来XHTML版本。

无论如何,这个决定 解决问题 为Firefox。这是7年前的铬 出生;有没有其他明显的浏览器。因此,它决定。

指定doctype本身并未触发XML分析,因为以下规范。

Internet Explorer8和前不支持XHTML分析。甚至如果你使用XML宣言》和/或XHTML doctype,老即仍在分析该文件作为普通HTML。和平HTML,自闭语法不是支持。后削减只是被忽略,必须使用一个明确的结束标记。

即使浏览器与支持XHTML分析,例如 即9和后, 将仍然分析的文件,作为HTML除非你提供的文件与XML内容类型。但在这种情况下,老即将不会显示该文件在所有!

上面的人已经很多解释问题,但是有一件事,可能会使事情说清楚的是,虽然人们使用 <br/> 和这所有的时间在HTML文档,任何 / 在这样的位置的基本上被忽略,只能使用当试图使一些既可解析的,作为XML和HTML。尝试 <p/>foo</p>, 例如,你会得到一个正常的段落。

自关闭脚本标签不会的工作,因为该脚本,标记可以包含的内联码,并HTML是不够聪明,打开或关闭这一特性的基础上存在的一个属性。

另一方面,HTML不会有一个很好的标签用于包括 参考文献以外的资源:的 <link> 标记,并可以 自关闭。它已经用于包括的样式表,RSS和原子 饲料,规范Uri,以及各种各样的其它东西。为什么不 JavaScript?

如果你想剧本标记以自我封闭你不能这样做,正如我所说的,但是有一种选择,虽然不是一个聪明的。你可以使用的自动关闭的链接标签,并链接到你的JavaScript通过给予这一类型的文本/javascript和rel作脚本,这样的事情如下:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

不像XML和XHTML、HTML没有知识的自闭语法。浏览器这一解释XHTML为HTML不知道 / 字表示的标记应该是自关闭;相反,他们解释这样一个空的属性和分析程序仍然认为这个标签是"打开"。

只是因为 <script defer> 被视为 <script defer="defer">, <script /> 被视为 <script /="/">.

Internet Explorer8岁以上不支持适当的MIME类型XHTML, application/xhtml+xml.如果你服务XHTML作 text/html, ,你必须对这些旧版本的互联网浏览器来做任何事情,它将其解释为HTML4.01.你只能使用的短语法用任何元素允许的结束标记可以省略。看看 HTML4.01说明书.

XML的短形式被解释为一个属性命名/,(因为没有等号)被解释为具有隐含的价值"/".严格来说这是错误的,在HTML4.01-未申报的属性是不允许的-但是,浏览器将会忽略它。

IE9和后 支持XHTML5application/xhtml+xml.

那是因为脚本标记不是一个空隙元。

在一个 HTML文档 -无效的元素 不不 需要一种"关闭的标记"。

xhtml, 一切都是通用的,因此他们都需要 终止 例如一种"关闭的标记";包括br,一个简单的线断, <br></br> 或其 简写 <br />.

然而,一个脚本元素从来都不是一个无效或一个参数的元素,因为 脚本标记 任何东西之前,是浏览器的指令,不一数据说明《宣言》。

主要是,一个语义结束的指示,例如,"关闭的标记"只是需要处理的说明谁是语义上不能被终止,通过一个成功的标签。例如:

<H1> 语义上不能被终止,由一下 <P> 因为它没有携带足够的自己的语义,以复盖因此终止的先前的H1指示设置的。虽然它将能够打破的 进入一个新的一段线路,它不是"足够强的"重写本字体大小和风格的行高 倾盆而下流, 我.e泄漏H1(因为P不有的话)。

这是如何以及为什么"/"(终止)的信号已经发明的。

一般 没有说明 终止的标记像 < />, 会有足以为任何单一的掉下来的时遇到级联的,例如: <H1>Title< /> 但是这并不总是这种情况,因为我们也希望能够"筑巢"、多个中间标记的流:分裂成山洪前包装/下降到另一个级联。作为结果一个通用的终结者如 < /> 会不能够确定目标的一个酒店终止。例如: <b>大胆 <i>大胆的倾斜 < /> 斜体 </>正常的。毫无疑问将无法获得我们的目的正确和最有可能把它解释为 大胆 大胆-itallic 大胆 正常的。

这是怎样的 概念 的包装,即, 容器中出生。(这些概念是如此的相似,这是不可能辩明和有时相同的元素可能有两个。 <H1> 是的包装和容器在同一时间。而 <B> 只有一个语义wrapper).我们需要一个普通的,没有语义的容器中。当然明的DIV元来。

DIV件实际上是一个2卧室-容器。当然未来的CSS由整个局势怪异比,这将无已,造成很大的混乱与许多伟大的后果-间接!

因为CSS你可以很容易地复盖地前后BR行为的一个新发明格,这是常被称为"做什么的容器".是,当然是错误的!Div是块元素并将本身打破线的流之前和结束后信号。不久,该网络开始遭受的页面DIV炎.他们中的大多数仍然是。

未来的CSS与其能力,以充分复盖并完全重新确定当地行为的任何HTML标签,在某种程度上成功地混淆和模糊的全部意义HTML存在...

突然间所有HTML tags出现了,如果已经过时,他们被污损,剥夺了他们所有的原来含义、身份和目的。不知何故你会获得的印象是,他们不再需要。他说:一个单一容器包装标记将足以满足所有数据介绍。只是添加所需的属性。为什么不能有有意义的标签,而不是;发明标记的名字作为你去而让CSS理会的其余部分。

这是怎么xhtml出生和和平的巨大的钝,付出如此高昂的代价通过新来者和扭曲的愿景是什么,以及什么是该死的目的。W3C从世界各地的网络到底做错了什么,同志们?!!

目的是HTML 有意义的数据给人类收件人。

提供信息。

正式部分是那里唯一帮助的清晰信息的传递。xhtml不得有丝毫的审议该信息。-它,信息是绝对无关紧要的。

最重要的问题是要知道和能够理解 xhtml不仅仅是一个版本的一些扩展HTML, ,xhtml是一个完全不同的猛兽;理由;因此 明智的做法是让他们独立的。

差之间的真正XHTML','仿XHTML'和HTML以及重要性的服务器发送MIME type了 已经说好在这里.如果你想要试试看吧,这里是简单的可编辑的片段带动预,包括自我封闭的剧本标记能够浏览器:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

你应该看看 Hello, true XHTML. Nice to meet you! 下面textarea.

对于不能浏览器能够复制的内容的textarea和保存为一个文件 .xhtml (或 .xht)扩展(谢谢亚历克对这个暗示).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top