14

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

任何人的想法?

4

8 回答 8

13

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

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

于 2008-09-16T06:35:02.117 回答
7

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

于 2008-09-16T06:36:41.753 回答
2

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

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

于 2008-09-16T13:17:12.460 回答
1

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

于 2008-09-16T06:38:09.363 回答
1

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

从 HTML 5 规范:

8.1 编写 HTML 文档

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

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

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

来自 HTML 4.01 规范:

7 HTML 文档的全局结构

HTML 4 文档由三部分组成:

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

[...]

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

[...]

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

于 2008-09-16T06:38:52.480 回答
1

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

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

于 2008-09-16T06:50:38.943 回答
1

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

它还说它必须按此顺序包含以下组件:

  1. 一个字符串,它是一个不区分大小写的 ASCII 匹配字符串<!DOCTYPE
  2. 一个或多个空格字符。
  3. 一个字符串,它是一个不区分大小写的 ASCII 匹配字符串html
  4. 可选地,DOCTYPE 遗留字符串或过时的允许 DOCTYPE 字符串(定义如下)。
  5. 零个或多个空格字符。
  6. 一个>(U+003E) 字符。
于 2015-01-21T06:19:53.587 回答
0

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

于 2009-12-23T13:16:58.817 回答