【问题标题】:<script></script> or <script />? [duplicate]<script></script> 还是 <script />? [复制]
【发布时间】:2011-08-23 00:39:55
【问题描述】:

可能重复:
Why don't self-closing script tags work?

我刚刚发现 HTML 中的 script 标签有一个奇怪的行为。

我的网络服务器是 nginx,我使用 FAST CGI 和 PHP5。我有一个 page.html,它看起来像这样:

<html>
  <body>
    <!-- <?php echo 'i am going to add php code here'; ?> -->
    <script type="text/javascript" src="./my/javascript1.js" />
    <script type="text/javascript" src="./my/javascript2.js" />
  </body>
</html>

如果此页面直接从 Web 服务器提供,则 java 脚本运行良好。但如果它传递给 PHP5,似乎只执行了第一个 java script 标签。但是,如果我将 script 块更改为:

    <script type="text/javascript" src="./my/javascript1.js"></script>
    <script type="text/javascript" src="./my/javascript2.js"></script>

一切都恢复正常了。注意到标签是如何关闭的吗?是的,这就是我在这里问的原因。有什么区别?它们应该具有相同的功能/含义。另外,我的浏览器(Chrome/IE9)收到的输出HTML是一样的,为什么要区别对待呢?

【问题讨论】:

标签: javascript html


【解决方案1】:

script 标记必须有一个结束标记,即使它使用了src 属性。避免它会导致不良行为。

【讨论】:

    【解决方案2】:

    浏览器解释 HTML 的方式与 PHP 无关,因为它不是 HTML 解析器。一些浏览器接受它。其他人没有....也请检查此link。更多关于同一主题的问答

    【讨论】:

      【解决方案3】:

      脚本标签需要一个单独的结束标签才能成为有效代码。见http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1

      有些浏览器会接受自闭合标签,有些则不会,而且您使用的 HTML 版本也会影响结果。除非您使用 XHTML,否则没有自闭合标签。

      通过 PHP 引擎传递文件不应改变结果,但它可能会尝试更正不正确的脚本标签。您应该在浏览器中查看源代码以查看标签是否已更改。

      【讨论】:

      • 想尝试回答这部分 - If this page is served directly from the web server, the java script works well. But if it passed to PHP5?我假设他的意思是 PHP 与 HTML。
      【解决方案4】:

      这基本上取决于你在HTML中提到的DocType

      如果DocType 被提及transitional XHTML,那么它将不允许像&lt;script ... /&gt; 这样关闭脚本标签。它只会允许标签像这样关闭。 &lt;script ... &gt;&lt;/script&gt; 等等。

      如果DocTYpe 不是XHTML,则在这种情况下取​​决于浏览器的兼容性。

      有关参考,请参阅此...

      http://www.w3schools.com/tags/tag_doctype.asp

      【讨论】:

      • 这是不正确的。无论使用何种 HTML 版本,结束标记始终是必需的。
      • 我上面提到的事情是100%正确的(虽然不是书呆子),但它适用于大多数浏览器(包括IE 6)
      • 据我所知,没有浏览器允许在任何类型的 HTML 中使用 &lt;script ... /&gt;。它是无效的 HTML,我见过的每个浏览器都将它视为等同于 &lt;script ... &gt; 没有结束标记,这会导致不同浏览器之间出现不同但总是错误的行为。
      • 顺便说一句,w3schools 作为此类东西的参考很烂。
      • @Naveed: w3.org/TR/xhtml1
      【解决方案5】:

      您的服务器似乎配置为输出 XHTML 而不是 HTML。 HTML 没有 &lt;tag /&gt; 这样的东西。但 XML 确实有。

      在这两种情况下检查文档类型声明。 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 等在文档的开头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2012-03-21
        • 2012-03-13
        • 1970-01-01
        • 2018-01-27
        • 2011-05-13
        • 2013-06-16
        相关资源
        最近更新 更多