【问题标题】:Does the DOCTYPE declaration have to be the first tag in an HTML document? [duplicate]DOCTYPE 声明必须是 HTML 文档中的第一个标记吗? [复制]
【发布时间】:2010-09-09 08:22:11
【问题描述】:

当客户端请求页面时,我们的安全管理器会在每个 html 页面的顶部动态插入一些 javascript。它被插入到 DOCTYPE 语句的上方。我认为这可能是我遇到布局问题的原因。

有什么想法吗?

【问题讨论】:

  • 如果“安全经理”是人,应该开除。如果它是一个软件,它应该被卸载。对我来说闻起来像可怕的代码。

标签: html doctype


【解决方案1】:

是的,DOCTYPE 必须放在第一位。

定义在这里:http://www.w3.org/TR/REC-html40/struct/global.html。请注意,它说一个文档由三部分组成,DTD 必须是第一个。

【讨论】:

    【解决方案2】:

    是的,DOCTYPE 必须是页面上的第一个数据:http://www.w3schools.com/tags/tag_DOCTYPE.asp

    【讨论】:

    • 你能链接到 W3C 作为参考吗? W3schools 不隶属于 W3C,不是该主题的权威来源,有时他们的信息是错误的(但在这种情况下他们没问题)。
    • w3fools.com 请帮助制止这种网络不平等。
    • 这个问题在 IE10 中得到解决。 Doctype 之前的 cmets 不会强制 IE10 进入 quirks 模式。
    【解决方案3】:

    HTML 的建议将其表达为 SGML 的应用,它要求DOCTYPE 声明出现在 HTML 元素之前(忽略 HTML cmets)。即使没有DOCTYPE,在HTML 元素之外(在它之前或之后)添加SCRIPT 元素也是无效的HTML。当然,HTML 的有效性可能不是你的要求,只要它适用于大多数浏览器,然后提到的 quirks-mode 切换会得到你:没有DOCTYPE,许多浏览器会切换到 quirks 模式,可能会改变布局。

    我假设 TAM 脚本片段是由某个代理或其他无法正确分析页面的 HTML 结构的代理添加的,并将SCRIPT 插入到HEADBODY 的正确位置文件。在这种情况下,添加到文档末尾虽然不是有效的 HTML,但在大多数 Web 浏览器中都可以使用。

    【讨论】:

      【解决方案4】:

      这可能是您的问题的根源! 查看“怪癖模式”,因为这取决于 doctype 设置。 进修:http://www.quirksmode.org/ 说明:您可以将浏览器切换到(主要是 IE)严格标准编译模式和松散模式。这将极大地影响渲染。 TAM 的设置可以打开/关闭此功能。

      【讨论】:

        【解决方案5】:

        我阅读了 w3 规范,它只是说一个文档有 3 个部分。顺序是假定的,没有明确的声明禁止,例如,前面有一点 js 片段。

        我知道可以将 TAM 配置为在文档末尾添加 js,但如果它会导致如此明显的问题,为什么他们将它放在顶部,这让我很生气!

        【讨论】:

        • <script> 标签不允许出现在 页面之外,但如果您的唯一选项是在之前或之后,您可能应该选择之后,因为它的副作用更少。
        【解决方案6】:

        W3c(在 w3.org)在一个名为 html5/syntax.html 的页面上说“DOCTYPE 是必需的序言”,我将其解释为它是必需的,并且必须放在首位。

        它还说它必须按此顺序由以下组件组成:

        1. 与字符串<!DOCTYPE 匹配的不区分大小写的ASCII 字符串。
        2. 一个或多个空格字符。
        3. 与字符串html 匹配的不区分大小写的ASCII 字符串。
        4. (可选)DOCTYPE 旧版字符串或过时的允许 DOCTYPE 字符串(定义如下)。
        5. 零个或多个空格字符。
        6. > (U+003E) 字符。

        【讨论】:

          【解决方案7】:

          是的,文档类型必须是文档中的第一件事(cmets 除外)。您应该避免在文档类型之前插入脚本;兼容的解析器不需要接受这一点。 (他们应该接受附加在文档其余部分之后的脚本,如果这是替代方案的话。)

          来自 HTML 5 规范:

          8.1 Writing HTML documents

          本节仅适用于文档、创作工具和标记 > 生成器。特别是,它不适用于一致性检查器; > 一致性检查器必须使用下一节中给出的要求 >(“解析 HTML 文档”)。

          文档必须按给定顺序由以下部分组成:

          1. (可选)单个“BOM”(U+FEFF) 字符。
          2. 任意数量的 cmets 和空格字符。
          3. 一个文档类型。
          4. 任意数量的 cmets 和空格字符。
          5. 根元素,采用 html 元素的形式。
          6. 任意数量的 cmets 和空格字符。
          7. 接下来的几节将介绍上述各种类型的内容。

          来自 HTML 4.01 规范:

          7 The global structure of an HTML document

          一个 HTML 4 文档由三部分组成:

          1. 一行包含 HTML 版本信息,
          2. 声明性标题部分(由 HEAD 元素分隔),
          3. 正文,其中包含文档的实际内容。主体可以由 BODY 元素或 FRAMESET 元素实现。

          [...]

          空格(空格、换行符、制表符和 cmets)可能出现在每个部分之前或之后。

          [...]

          有效的 HTML 文档声明文档中使用的 HTML 版本。文档类型声明命名文档使用的文档类型定义 (DTD)(参见 [ISO8879])。

          【讨论】:

            【解决方案8】:

            这不是标签,是的。主要是因为这是让 Internet Explorer(我认为是 8 之前的版本)进入标准模式的唯一方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-03
              • 2013-02-18
              • 2015-09-29
              • 2013-03-13
              • 1970-01-01
              相关资源
              最近更新 更多