0

一般来说,我们是否可以认为最初无效但最终在技术上有效(通过脚本)的 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

这最初会验证,但在技术上会导致无效文档,没有任何明显的方法来检测它。

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

更新: 用于 DOM 验证的 W3C 规范(第 3 级)

更新: Service Workers 的 W3C 规范,它似乎可以用来确保 DOM 在呈现之前是有效的,即使模板不是(避免使用占位符元素等)。在撰写本文时还为时过早(2014 年 6 月 26 日,所以不要引用我的话)。

4

2 回答 2

2

无效的 HTML 文档是不行的,即使您出于各种原因使用脚本使其有效。

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

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

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

最后但同样重要的是,不要忘记禁用脚本的少量客户端。

于 2013-09-10T11:59:40.033 回答
0

我不明白您想如何确定文档“最终在技术上是否有效”。脚本代码可以引用任意上下文状态(现有 dom、用户客户端信息、本地存储、用户输入、Web 请求响应 url)。验证者事先无法访问大部分信息。

您的方案可能适用于非常有限的脚本指令子集,但我看不出这在现实生活中的应用程序中有什么用处。

所以,不,我不认为最终验证的概念是合理的。最初未验证的文档不应被视为正常。

于 2013-09-10T12:00:45.430 回答