通常,我们可以认为最初无效但最终在技术上有效(通过脚本编制)的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文档将仍然无效
最后但并非最不重要的一点是,不要忘记有少量禁用了脚本的客户端。