一般来说,我们是否可以认为最初无效但最终在技术上有效(通过脚本)的 HTML 文档是可以的?
如果它回答了这个问题,那么“OK”将符合良好做法,或者可能与标准有关。
例如,解析此序列化 HTML 标记生成的文档最初使用W3 验证器进行验证:
<!DOCTYPE html>
<title>foo</title>
bar
虽然这个没有:
<!DOCTYPE html>
<script>document.title = 'foo'</script>
bar
即使任何支持 Javascript 的浏览器的结果完全相同。假设这是一个 Web 应用程序并且需要 JS,这种东西“OK”吗?
当我们没有任何正确(从应用程序的角度)最初满足标准的方式时,我特别想知道这种情况。例如,如果我们最初不知道文档的标题,并且必须使用脚本计算/检索它怎么办?
在这种特殊情况下,使用占位符感觉不对:
<!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
这最初会验证,但在技术上会导致无效文档,没有任何明显的方法来检测它。
更新:显然,这样的工具在静态分析上下文中的价值有限(停机问题等)。但是,运行时工具应该很有用。
更新: Service Workers 的 W3C 规范,它似乎可以用来确保 DOM 在呈现之前是有效的,即使模板不是(避免使用占位符元素等)。在撰写本文时还为时过早(2014 年 6 月 26 日,所以不要引用我的话)。