通常,我们可以认为最初无效但最终在技术上有效(通过脚本编制)的HTML文档是否可以通过?

如果可以回答此问题,则按照良好做法或可能就标准而言为“ OK”。

例如,解析此序列化的HTML标记产生的文档最初使用W3 validator进行验证:

<!DOCTYPE html>
<title>foo</title>
bar


虽然这个没有:

<!DOCTYPE html>
<script>document.title = 'foo'</script>
bar


即使对于支持Javascript的任何浏览器,结果是完全相同的。假设这是一个Web应用程序,并且需要JS,这种事情“确定”吗?

当我们最初没有任何正确的方法(从应用程序的角度来看)满足标准时,我特别想知道这种情况。例如,如果我们最初不知道文档标题,而必须使用脚本来计算/检索该文档,该怎么办?

在这种特殊情况下,使用占位符会带来错误:

<!DOCTYPE html>
<title>placeholder</title>
<script>document.title = 'foo'</script>
bar


(请注意,将title元素保留为空仍然被认为是无效的。)

因此,在不特别讨论title元素的情况下,是否普遍接受分发仅最终有效的HTML资源?

子问题:我意识到验证文档(以DOM表示)和验证其序列化标记是两件事。前者有什么工具吗? (从DOM快照中或“连续”中。)示例:

<!DOCTYPE html>
<title>foo</title>
<script>document.title = ''</script>
bar


最初会进行验证,但是从技术上讲会导致无效的文档,而没有任何明显的方法来检测它。

更新:显然,这样的工具在静态分析环境(暂停问题等)中价值有限。但是,运行时工具应该很有用。

更新:W3C spec for DOM validation (Level 3)

更新:W3C spec for Service Workers,似乎可以用来确保DOM在呈现之前是有效的,即使模板不是这样(避免使用占位符元素等)。在撰写本文时仍为时过早(2014年6月26日,因此请不要在此引用我的信息)。

最佳答案

无效的HTML文档也不行,即使出于各种原因使脚本使它有效。

在运行脚本之前,HTML文档将在加载时进行验证和解析。因此,即使您使用脚本“修复”文档,文档也很可能会很时髦。即使您在脚本中生成所有内容,许多浏览器也不会接受。

此外,如果您关心搜索引擎,请记住:


搜索引擎认为无效的HTML是一件坏事,并将影响您的排名
脚本不会被评估或解析,您的HTML文档将仍然无效


最后但并非最不重要的一点是,不要忘记有少量禁用了脚本的客户端。

08-06 03:20
查看更多