HTML 中的空脚本标签是怎么回事

What's the thing with empty script tags in HTML?

本文关键字:标签 怎么回事 脚本 HTML      更新时间:2023-09-26

要在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。弃用<script>上的 src 属性,因为它是整个混淆的根源,具有以下两个选项之一:

  • <link>标记而不是空<script>标记:

    <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():(因此始终强制将某些内容放入标签中,并允许在一个script标签中包含多个脚本)

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

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

您唯一可以自行终止元素标签 ( <br /> ) 的情况是 如果该元素没有结束标签(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。

根据规范,在 HTML5 中省略 <script> 的结束标记是不允许的(请参阅标记省略部分):

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

https://www.w3.org/TR/html5/scripting-1.html#script

https://html.spec.whatwg.org/multipage/scripting.html#the-script-element