不能用 web worker 直接扫描 html 文档结构合法性,因其无法访问 dom api 且 domparser 在 worker 中不执行浏览器纠错逻辑、无渲染上下文、无法检测隐性断裂;可行路径是主线程预处理 dom 快照,worker 仅做基于字符串的轻量静态分析(如标签配对、关键词匹配、doctype 校验),结果须由主线程交叉验证。

不能用 Web Worker 直接扫描 HTML 文档结构合法性——因为 Worker 无法访问 document、documentElement 或任何 DOM API,而结构校验必须基于真实解析后的 DOM 树或至少是完整、可解析的 HTML 字符串。所谓“在编辑器中扫描”,本质是校验用户输入的 HTML 片段是否能构成合法子树,或是否与标准文档结构兼容。
为什么不能让 Worker 直接调用 DOMParser 校验结构
DOMParser 在 Worker 中可用(Chrome/Firefox/Edge 均支持),但它只能解析字符串为 Document 对象,且该对象是只读、无渲染上下文的“碎片文档”:它没有 document.body、document.head,也不执行 HTML 规范中的自动修复逻辑(如自动闭合 <p></p>、拆分非法嵌套)。所以即使 parser.parseFromString(html, 'text/html') 不报错,返回的 doc.documentElement 也可能是 null,或结构与主线程中浏览器实际构建的 DOM 完全不一致。
- Worker 中的
DOMParser不模拟浏览器的纠错行为,比如<div> <p></p> <div></div> 在主线程会被修正,在 Worker 里会保留非法嵌套 <li>它无法检测 “缺少 <code>根标签但服务端返回了完整 HTML” 这类上下文问题——因为没document实例可查 - 验证器真正关心的 “隐性断裂”(如被浏览器悄悄移出
的<script></script>)在 Worker 解析结果中根本不可见 - 统计
和 <code>>是否成对(粗筛明显语法错误) - 用正则快速标记未闭合标签(如
<div> 后无 <code>>或对应
可行路径:主线程预处理 + Worker 承担纯文本规则匹配
把真正依赖 DOM 的检查(是否存在 document.documentElement、body 是否为空、节点是否游离)留在主线程;Worker 只做轻量、确定性、无副作用的静态分析,例如:











