我在尝试调试的 Angular/AMP 设置中遇到了配置问题。我预感到问题可能出在哪里,但我无法验证某些编译器是否可能会误解没有 <!DOCTYPE html>
的 HTML 注释。存在(这本身就是一个问题)。
为了提供我正在使用的页面的简单概述,该网站在非 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 -->
,但是编译器可能会解释类似 <!----><link rel="amphtml" ... ><!---->
的东西吗?作为评论时<!DOCTYPE html>
不在场吗?具体来说,可以Chrome 41将此视为评论?
查看 Chrome 63 中的 AMP 链接,一切看起来都有效,但我想在继续深入研究问题之前排除这一假设。
提前非常感谢,并对这个愚蠢的问题表示歉意:)
最佳答案
不清楚“编译器”是什么意思,但就浏览器中 HTML 解析器的行为而言,我认为您可以排除任何浏览器解析器处理标记中注释的情况根据文档是否具有文档类型,问题中的代码片段会有不同的情况。
每the parsing algorithm defined in the HTML spec ,缺少 doctype 会将 HTML 解析器置于 quirks mode 中,并且解析/渲染行为中会出现许多“怪癖”——其中一些记录在https://quirks.spec.whatwg.org/中以及 DOM 中记录的其他内容, CSSOM ,和CSSOM View规范,在 HTML 规范本身,以及非正式的地方,如 What happens in Quirks Mode?
但是在这些记录的怪癖中没有任何与注释解析相关的怪癖。
如果存在这样的怪癖,那么它几乎肯定是 HTML 规范本身解析算法的一部分。
我想可以想象,不符合 HTML 规范中的解析算法的解析器可能会对问题中显示的标记片段执行不同的操作 - 但就浏览器中的解析器而言,所有现代浏览器版本至少过去 6 年实现了符合 HTML 规范中的解析算法的解析器。
Chrome,例如,has implemented a spec-conforming HTML parser自 Chrome 7 (2010)。
因此,我认为您可以消除任何浏览器引擎根据文档类型是否存在对标记情况进行不同解析的可能性。
关于angularjs - 没有 DOCTYPE 的 HTML 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48132495/