firefox源代码查看器中的“Stray doctype”错误

"Stray doctype" error in firefox source code viewer

提问人:Slartibartfast 提问时间:11/8/2013 最后编辑:Slartibartfast 更新时间:10/1/2023 访问量:7546

问:

自从我学会了将 XHTML 页面作为 XML 提供后,我开始注意到一些奇怪的事情:每当我在 Firefox 源代码查看器中查看 XHTML 页面时,DOCTYPE 总是被标记为错误。根据我从鼠标悬停中得到的工具提示,有问题的错误是“杂散文档类型”。据我了解,“杂散文档类型”意味着在文档中间有一个额外的 DOCTYPE,它不属于它,这里肯定不是这种情况。

下面是一个示例 - 此标记将通过验证,并在所有现代浏览器中正确显示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--FF source viewer will mark the preceding two lines as an error.-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <meta http-equiv="content-type"
      content="application/xhtml+xml; charset=utf-8" />
    <title>Sample XHTML Page</title>
  </head>
  <body>
    <p>This is an example.</p>
  </body>
</html>

考虑到这些页面完美地通过了验证,并且单个解析错误通常会破坏页面,此错误消息尤其奇怪。

Firefox XHTML 文档类型

评论

2赞 BoltClock 11/9/2013
从技术上讲,DOCTYPE 声明对于在 XML 模式下解析和呈现页面是可选的,但这并不意味着正如您正确指出的那样,在该位置会出现意外,虽然它对于解析是可选的,但它仍然是验证所必需的(毕竟,验证者怎么会知道这是 XHTML 1.0 Strict,而不会做出疯狂的假设?
1赞 Mr Lister 11/10/2013
如果页面以 HTML 形式提供,我希望看到错误,但它也存在于真正的 XHTML 页面中。我倾向于认为这是 FF 中的一个错误,特别是因为这种行为与 W3 验证器的输出相反。
0赞 Slartibartfast 11/13/2013
实际上,该错误仅在页面作为 ;当它作为 提供时,不会出现错误。application/xhtml+xmltext/html
1赞 LGT 1/1/2017
这是 2016 年的最后一天,它也出现在带有 xml + DOCTYPE 的 SVG 中。

答:

9赞 hsivonen 11/19/2013 #1

我是这个功能的开发者。您发现了一个错误。(刚才提交。谢谢。

视图源语法突出显示基于 HTML 解析器,因为我们的 XML 解析器不适合此目的,并且 XML 非常罕见,因此投入资源来实现正确的 XML 视图源没有意义。因此,XML 查看源代码功能是对 HTML 解析器的黑客攻击,这方面不能正常工作。

评论

0赞 marius 1/7/2014
使用 XSL 生成 HTML 的 XML 文档也会出现同样的问题。我注释了标记为“杂散文档类型”的 DOCTYPE,然后我收到了 XSL 行的控制台错误: > InvalidStateError:尝试使用不可用或不再可用的对象 结果是,对于生成 HTML 输出的 XML+XSL 来说,相对链接无法正常工作。加载类似 http://.../file.xml#link 的链接时,该链接不会转到正确的锚点。单击链接地址栏并再次按Enter键,然后就可以工作了。(我也在 Bugzilla 中更新了这个案例)
0赞 marius 1/7/2014
我刚刚测试了Chrome,它也有同样的问题。(FF 26,铬 31.0.1650.63 米)
0赞 9/30/2016
3 年后,这个错误仍然存在于 (Debian GNU/Linux) 中,我在带有 .Firefox ESR 45.4DTD XHTML Basic 1.1
1赞 Public Sphere 5/31/2020 #2

出现此错误的原因是文件保存为 UTF-8 BOM 而不是 UTF-8。在记事本中打开文件并更改其编码。

0赞 Piemol 2/3/2021 #3

除了@Public球体的回答。

使用 时也会出现此警告。 可能还会对 和 标记(杂散开始标记“html”)显示相同的警告。<!DOCTYPE html><html><head><body>

要检查 UTF-8 BOM 是否是问题所在:

  • 点击“网络”选项卡
  • 单击第一个请求
  • 在右侧详细信息面板上,单击“响应”选项卡,然后展开“响应有效负载”
  • 您现在将看到原始响应。 文档类型行前面有一个红点, 悬停时显示“\ufeff”

为了轻松找到可能导致问题的文件,您可以在 Linux 中使用此 grep 查找带有 BOM 的所有文件:

grep -rl $'\xEF\xBB\xBF' .
0赞 Asif 10/1/2023 #4

您需要删除(移至废纸篓)保留其代码副本的文件,然后重新创建文件并粘贴剪裁的代码。