【问题标题】:What's the thing with empty script tags in HTML? [duplicate]HTML 中的空脚本标签是怎么回事? [复制]
【发布时间】:2016-07-05 15:08:07
【问题描述】:

要在 HTML 页面中包含一个外部 JavaScript 文件,你可以这样:

<script type="text/javascript" src="images/jquery-2.2.2.js"></script>

这个标签的正文是空的,但我必须输入字符串script 两次。为什么 HTML 中没有 XML 样式的隐式结束标记,如下所示:

<script type="text/javascript" src="images/jquery-2.2.2.js" />

如果它是有效的(至少在 HTML5 中),那么如何确保每个支持 HTML5(或 XHTML5)的浏览器都能接受这种用法?

编辑

我将把这个问题提交给 HTML WG。弃用 &lt;script&gt; 上的 src 属性,因为它是整个混乱的根源,使用以下两个选项之一:

  • &lt;link&gt; 标记而不是空的&lt;script&gt; 标记:

    <link type="text/javascript" href="images/jquery-2.2.2.js" />
    

    或者可以选择使用rel 属性:

    <link rel="script" type="text/javascript" href="images/jquery-2.2.2.js" />
    
  • JavaScript 本身中的 PHP 样式 include():(因此始终强制 some 内容进入标签,并允许多个脚本包含在一个 script 标签中)

    <script type="text/javascript">include("images/jquery-2.2.2.js");</script>
    

【问题讨论】:

  • 有趣的是,它实际上曾经在 2.0 左右的 firefox 中工作,但它被关闭以使 XSS 更难并允许更多清理 RegExps 正常工作。我记得更改日志条目...
  • 粗略的 tl;dr AFAIK:HTML5 的最初目标是标准化跨浏览器最可靠的工作。这从未在某些浏览器中实现,因此出于可比性原因,它被排除在 HTML5 之外。这导致以 HTML 模式实现它的浏览器决定放弃它。
  • @JeremyBanks:更简单:没有可以有内容的标签可以通过/&gt;自动关闭。

标签: javascript html


【解决方案1】:

【讨论】:

    【解决方案2】:

    您不能省略脚本元素的结束标记。如果这样做,JavaScript 运行时会将以下 HTML 视为 JavaScript 并输出错误。

    您可以自行终止元素标签 (&lt;br /&gt;) 的唯一情况是,如果该元素没有结束标签(br、link、meta)或结束标签被定义为可选(li、 p)。

    现在,您必须键入带有打开和关闭标签的元素的原因是因为该元素 可以包含 JavaScript,这使其成为内容元素。所有内容元素必须始终明确关闭,除非规范。另有说法。

    实际上,HTML 会忽略尾随的正斜杠“/” 解析器。包含它的唯一好处是如果标记是 由 XML 解析器解析。

    因此,对于 HTML 解析器,它会看到:

     <script type="text/javascript" src="images/jquery-2.2.2.js" />
    

    这样:

     <script type="text/javascript" src="images/jquery-2.2.2.js">
    

    然后,它会认为接下来的一切都必须是 JavaScript。

    【讨论】:

    • 我发现这变得非常愚蠢非常快。 src 属性和 script 标签的内容在现实生活中很大程度上是互斥的,因此允许 &lt;script&gt; 自关闭并不是一个坏主意,因为它们几乎专门用于链接外部脚本。
    • @MaxthonChan 我不反对。但是,HTML 中有很多没有多大意义的“功能”。但是,这就是 XML(和 XHTML)应该解决的问题,直到世界决定它不希望 XML 成为未来。
    • 另一个可能派上用场的修复方法是&lt;link&gt; 标签。像&lt;link type="text/javascript" src="images/jquery-2.2.2.js" /&gt; 这样的东西会很有帮助,从&lt;script&gt; 标记中删除src 属性。
    • @MaxthonChan 对此有更多的了解。 HTML 被设计为 IBM 在 60 年代设计的 SGML(标准通用标记语言)的词汇和语法。当 Tim Berners-Lee 创建 HTML 时,他使用 SGML 来指定 HTML 语言的“规则”。 SGML 要求元素有内容、没有内容或者可以选择自终止。由于&lt;script&gt; 可以包含内容,因此它被声明为这样,因此需要一个结束标记。
    • @MaxthonChan 另一个很好的建议,但请记住,HTML、CSS 和 JavaScript 并不是同时发明和实现的,所以我们今天拥有的很多东西都是补丁上的补丁,这些补丁已经成为标准。 Netscape 发明了 JavaScript,因此他们必须发明一种将其注入代码的方法,因此他们想出了&lt;script&gt;&lt;link&gt; 做不到)。最终,它进入了标准。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2014-02-21
    • 2018-10-27
    • 2022-01-14
    • 2021-04-13
    • 1970-01-01
    • 2011-10-13
    • 2020-11-26
    相关资源
    最近更新 更多