W3C HTML5 验证器维护者在这里。关于验证器行为的简短回答是,验证器会为您在文档中使用的任何自定义元素发出错误,目前作为用户,您无法解决它——而且它将继续还要再等一段时间,直到我们找到解决方案。
我们正在就如何解决这个问题进行一些持续的讨论。将验证器更改为忽略任何带有连字符的元素名称作为一个完整的解决方案是不可行的,因为这样做的结果是我们实际上无法检查它可能具有的任何子元素——我们只需要忽略整个子树,因为否则会导致其他错误。所以这远不是一个理想的解决方案。
无论如何,我很想找到解决这个问题的好方法,所以如果其他人有想法,我想听听他们的意见。发送想法/建议的两个好地方是 public-webapps@w3.org 邮件列表 https://lists.w3.org/Archives/Public/public-webapps/和 whatwg@whatwg.org 邮件列表https: //whatwg.org/mailing-list#specs
我自己想到的一个想法是,我们可以让验证器以与当前处理元素相同的方式处理所有自定义元素<div>
(就文档中允许的位置以及允许包含的子元素而言)。这也不够理想,但至少它会提供一种方法来检查自定义元素的子树中的后代元素中的错误。
2017-02-06 更新:W3C HTML 检查器现在支持自定义元素
因此,我在 2016 年 12 月 16 日向W3C HTML 检查器(验证器)添加了对自定义元素的支持,并在几天后对其进行了改进,以对禁止的名称进行更详细的检查。
我最终想出在检查器架构中实现它的技巧(其核心是基于 RelaxNG 语法/模式的验证器)是添加一个预处理过滤器,该过滤器采用元素名称中带有连字符的任何元素,并将它们放在单独的 XML 命名空间中。
然后我更新了 RelaxNG 模式以允许来自该 XML 名称空间的任何元素。(具有讽刺意味的是,我非常讨厌 XML 命名空间以及它们引起的所有问题。)
所以我们现在正在考虑对自定义属性名称做类似的事情——可能只是将它们定义为包含连字符的任何属性名称(如自定义元素名称)。
但是,在 HTML 规范更新为允许之前,不能更改 HTML 检查器以允许自定义属性名称。为此,请参阅 HTML 规范问题跟踪器中正在讨论的提案。