我在调试一个Angular/AMP设置时遇到了一个配置问题。我有一种预感,问题可能是什么,但我很难验证一些编译器是否会误解没有<!DOCTYPE html>
存在的HTML注解(这本身就是一个问题)。
为了提供我正在使用的页面的简单概述,该网站在none AMP页面的DOM中呈现了如下内容(注意缺少<!DOCTYPE html>
)。
<html>
<head>
<!---->
<link rel="amphtml" href="https://www.foo.com/amp/document.html">
<!---->
</head>
<body>
<p>Foo site</p>
</body>
</html>
Angular模板将检查网站是否是有效的AMP页面,如果是,将返回AMP链接,并将留下<!---->
。
我意识到一个有效的HTML注解是类似于<!-- foo -->
的东西,但是当<!DOCTYPE html>
不存在时,编译器可能会将类似<!----><link rel="amphtml" ... ><!---->
的东西解释为注解吗?具体来说,Chrome 41可以将其视为注解吗?
在Chrome 63中查看AMP链接,一切看起来都是有效的,但我想在继续挖掘问题之前排除这个假设。
非常感谢,并为这个愚蠢的问题道歉:)
2条答案
按热度按时间hzbexzde1#
目前还不清楚你所说的“编译器”是什么意思,但就浏览器中HTML * 解析器 * 的行为而言,我认为你可以排除任何浏览器解析器处理问题中标记片段中的注解的情况,无论文档是否有doctype。
根据HTML规范中定义的解析算法,缺少doctype将HTML解析器置于quirks mode中,并且解析/呈现行为中出现了许多“怪癖”-一些记录在https://quirks.spec.whatwg.org/中,其他记录在DOM、CSSOM和CSSOM View规范中,在HTML规范本身中,以及非正式地在What happens in Quirks Mode?等地方
但是在这些记录在案的怪癖中,没有一个与解析评论有关。
如果存在这样的怪癖,那么几乎可以肯定它是HTML规范本身解析算法的一部分。
我想可以想象,一个不符合HTML规范中解析算法的解析器可能会对问题中显示的标记片段做一些不同的事情-但就浏览器中的解析器而言,至少在过去6年中,所有现代浏览器版本都实现了符合HTML规范中解析算法的解析器。
Chrome,例如,从Chrome 7(2010)开始的has implemented a spec-conforming HTML parser。
因此,我认为您可以消除任何浏览器引擎基于doctype是否存在而对标记情况进行不同解析的可能性。
83qze16e2#
在这种情况下,Chrome 41,from February 2015,不被认为是旧浏览器。
看看here的线程在哪里下载旧版本是完全肯定的。