问题描述
如果我放:
Welcome
代替:
<!DOCKTYPE html>
<html>
<body>
Welcome
</body>
</html>
在我的index.html
中,这会在某些浏览器上引起问题吗?
解决方法
浏览器依靠HTTP Content-Type
标头来确定内容的解析方式。
“以纯文本形式发送”通常是指使用Content-Type: text/plain
,但是我认为您的index.html始终以text/html
的形式发送,而问题仅与文件的内容有关。
使用Content-Type: text/html
会调用HTML解析器,该解析器会为两个输入生成几乎相同的DOM,除了DOCTYPE
声明(假设您的意思是<!DOCTYPE html>
,而不是DOCKTYPE)。
通常,省略DOCTYPE会将页面放在具有"quirks mode"的所谓的a number of effects in certain edge-cases中。
,浏览器尝试construct the DOM tree时会发现stack of open elements为空。因此,insertion mode将设置为 initial ,如参考链接中所述:
插入模式是一个控制主变量的状态变量 树木建造阶段的运作。 最初,插入模式为“初始”。
因此,您进入Initial insertion mode,并遵循一系列其他案例,这些案例在经历几种插入模式时会自动继续创建并关闭e
, f
和<html>
标签,并在其中添加您的纯文本。
但是,如果您仅发送带有.txt文件的纯文本,浏览器会将所有最终标签也视为纯文本,并将所有内容包装到<head>
标签中,因为内容类型将可能设置为<body>
,并且浏览器假定您希望将所有内容都显示为纯文本。
相反,在您的情况下,将纯文本放入.html文件仍然会将content-type设置为<pre>
,使浏览器可以识别最终写入其中的标签,而无需将代码包装到text/plain
标签中。
因此,在最后一种情况下,问题中显示的两个内容所创建的DOM树不会有任何区别。
实际上不是一个:在您的情况下,text/html
声明被省略,这将使浏览器使用Quirk mode而不是标准的unwanted results来呈现页面。 }。