繁体   English   中英

代码*如何在* HEAD标记的结尾和BODY标记处理之间?

[英]How is code *between* the end of the HEAD tag and before the BODY tag processed?

我已经读到这样做是不好的 ,并且在规范之外,但我有一个有点间歇性的错误,可能是相关的。 只是想知道普遍的共识是“用凝固汽油弹烧掉那个代码”还是“它在这些有限的条件下工作”。

我发现,在一个非常复杂的代码库中,我们维护了<script>标签,它们都来自外部源(javascript和jquery),内联脚本,在</head><body>之前。 大部分是在表单完全加载后需要加载的代码。

在我开始做改革,以便把代码到head标签的底部,我想明白发生了什么,现在到运行该代码的客户(我们的目标是不会打破当前的用户体验)。 这些脚本是在呈现页面之前加载还是之后? 这个无人区代码的实际状态首先不应该存在于什么状态?

谢谢!

从根本上说,它是无效的标记和浏览器必须从中恢复的解析错误。 所以我会在你的目标浏览器中测试它,看看它们做了什么。

理论上:在结束</head>标记之后和开始<body>标记之前,解析器处于“ 'head'插入模式之后 ”。 我已经列出了下面的规则,但是由于你的评论 ,我认为相关的是:

  • 标签名称为以下之一的开始标记:“base”,“basefont”,“bgsound”,“link”,“meta”,“noframes”,“script”,“style”,“template”,“title”
    • 解析错误。
    • 将头元素指针指向的节点推到打开元素的堆栈上。
    • 使用“in head”插入模式的规则处理令牌。
    • 从开放元素堆栈中删除头元素指针指向的节点。 (此时可能不是当前节点。)
    • 此时头元素指针不能为空。

这告诉我们:

  1. 这是一个解析错误,请参阅我的开头段落。 :-)
  2. 该规范似乎是告诉浏览器厂商对待剧本,就好像是在结束head

完整规则:

当用户代理要应用“后头”插入模式的规则时,用户代理必须按如下方式处理令牌:

  • 字符标记是U + 0009字符制表,“LF”(U + 000A),“FF”(U + 000C),“CR”(U + 000D)或U + 0020 SPACE之一

    • 插入角色。
  • 评论标记

    • 插入评论。
  • DOCTYPE令牌

    • 解析错误。 忽略令牌。
  • 标签名称为“html”的开始标记

    • 使用“in body”插入模式的规则处理令牌。
  • 标签名称为“body”的开始标记

    • 为令牌插入HTML元素。
    • 将frameset-ok标志设置为“not ok”。
    • 将插入模式切换为“in body”。
  • 标签名称为“frameset”的开始标记

    • 为令牌插入HTML元素。
    • 将插入模式切换为“in frameset”。
  • 标签名称为以下之一的开始标记:“base”,“basefont”,“bgsound”,“link”,“meta”,“noframes”,“script”,“style”,“template”,“title”

    • 解析错误。
    • 将头元素指针指向的节点推到打开元素的堆栈上。
    • 使用“in head”插入模式的规则处理令牌。
    • 从开放元素堆栈中删除头元素指针指向的节点。 (此时可能不是当前节点。)
    • 此时头元素指针不能为空。
  • 标记名称为“模板”的结束标记

    • 使用“in head”插入模式的规则处理令牌。
  • 标记名称为以下之一的结束标记:“body”,“html”,“br”

    • 按照下面“其他任何”条目中的描述行事。
  • 标签名称为“head”的开始标记

  • 任何其他结束标记

    • 解析错误。 忽略令牌。
  • 还要别的吗

    • 为没有属性的“body”开始标记标记插入HTML元素。
    • 将插入模式切换为“in body”。
    • 重新处理当前令牌。

</head>结束标记和<body>开始标记之间出现的内容会直接插入<body>开始标记,除非它是一个不属于正文的元素,在这种情况下它将插入到结尾处头部。

某些元素,如script ,可能出现在头部或身体中; 该位置的脚本元素将插入头部的末尾, 除非浏览器已经处于“体内”插入模式,在这种情况下,它们将被放置在正文中。

参见8.2.5.4.4“头部”插入模式8.2.5.4.6“后头”插入模式8.2.5.4.7 W3C HTML 的“体内”插入模式 ,以获取更多详细信息。 请注意,由于历史原因,错误或故意违反规范的决定,不保证实现遵循规范,并且不应依赖此行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM