代码之家  ›  专栏  ›  技术社区  ›  paul

doctype声明必须是HTML文档中的第一个标记吗?[复制品]

  •  10
  • paul  · 技术社区  · 18 年前

    这个问题已经有了答案:

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

    有什么想法吗?

    8 回复  |  直到 10 年前
        1
  •  6
  •   erlando    18 年前

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

        2
  •  12
  •   Brad Wilson    18 年前

    是的,doctype必须在前面。

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

        3
  •  2
  •   pdc    18 年前

    HTML的建议将其表示为SGML的应用程序,这要求 DOCTYPE 声明出现在HTML元素之前(忽略HTML注释)。即使没有 文档类型 添加一个 SCRIPT 元素外部 HTML 元素(在它之前或之后)不是有效的HTML。当然,HTML的有效性对您来说可能不是一个要求,只要它在大多数浏览器中都能正常工作,那么上面提到的奇怪模式切换将使您得到:没有 文档类型 ,许多浏览器将切换到Quirks模式,可能会更改布局。

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

        4
  •  1
  •   Attila    18 年前

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

        5
  •  1
  •   paul    18 年前

    我读了W3规范,它只是说一个文档有三个部分。假设序列,没有明确的语句禁止,例如,前面有一个小JS截图。

    我知道可以配置TAM在文档的末尾添加JS,但如果它能引起如此明显的问题,那我就不明白为什么他们会把它放在最前面!

        6
  •  1
  •   Joseph Hansen    11 年前

    W3C(位于w3.org),位于一个名为 html5/syntax.html 说:“A 文档类型 是一个必须的序言“,我解释的意思是它是必须的,而且必须排在第一位。

    它还表示,它必须按此顺序由以下组件组成:

    1. 一个字符串,它与该字符串不区分大小写 <!DOCTYPE .
    2. 一个或多个空格字符。
    3. 一个字符串,它与该字符串不区分大小写 html .
    4. 或者,doctype遗留字符串或废弃的允许doctype字符串(定义见下文)。
    5. 零个或多个空格字符。
    6. > (U+003E)字符。
        7
  •  1
  •   Jeremy Meo    10 年前

    是的,doctype必须是文档中的第一个内容(注释除外)。您应该避免在doctype之前插入脚本;兼容的解析器不需要接受这一点。(他们应该接受附加的脚本 之后 文档的其余部分(如果可以选择的话)。

    从HTML 5规范:

    8.1 Writing HTML documents

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

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

    1. 可选,单个“bom”(u+feff)字符。
    2. 任何数量的注释和空格字符。
    3. DOCTYPE。
    4. 任何数量的注释和空格字符。
    5. 根元素,以HTML元素的形式。
    6. 任何数量的注释和空格字符。
    7. 下面几节将介绍上述各种类型的内容。

    来自HTML 4.01规范:

    7 The global structure of an HTML document

    HTML 4文档由三部分组成:

    1. 包含HTML版本信息的行,
    2. 声明性头段(由head元素分隔),
    3. 包含文档实际内容的正文。主体可以由body元素或frameset元素实现。

    […]

    空白(空格、换行符、制表符和注释)可能出现在每个部分的前面或后面。

    […]

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

        8
  •  0
  •   Paul D. Waite    16 年前

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