文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
断言接口是开发者自定义的校验函数,用于内容净化前的语义准入控制,集中管理标签、属性及上下文合法性,嵌入解析流程并驱动跳过、降级或统计等实际行为。

在富文本编辑器的解析逻辑中,断言接口(assertion interface)不是浏览器原生 API,而是开发者自定义的一组校验函数,用于声明“某类 HTML 标签是否允许出现在最终输出中”。它的核心作用不是渲染或编辑,而是**内容净化前的语义准入控制**——即:哪些标签能进、哪些属性可留、哪些嵌套关系合法。关键不在于“能不能解析”,而在于“该不该放行”。
明确白名单策略,用断言封装标签合法性
直接硬编码允许的标签容易散落各处、难以维护。推荐将放行规则集中为断言函数,例如:
-
isInlineTag(tagName):判断是否属于安全内联元素,如
"span"、"em"、"strong"、"a"(需额外校验href) -
isBlockTag(tagName):限定段落级容器,如
"p"、"h2"、"ul"、"ol"、"li" -
isMediaTag(tagName):专管媒体类,如
"img"(必须校验src协议与域名)、"video"(限制controls属性)
结合属性与上下文做细粒度断言
仅判断标签名远远不够。一个 <a></a> 是否放行,取决于它有没有危险的 javascript: 协议;一个 <img> 是否保留,要看 src 是否来自可信 CDN 域名。断言应接收完整节点信息:
- 传入
element.tagName、element.attributes、甚至父节点类型(如禁止<script></script>出现在<p></p>内) - 返回布尔值,但建议附带理由字段(如
{ allow: false, reason: "unsafe-protocol" }),便于调试与审计 - 示例:
assertSafeLink(el) → el.hasAttribute("href") && /^https?:\/\//.test(el.href)
在解析流程中嵌入断言调用点
断言不是独立运行的,必须嵌入 HTML 解析主链路。以递归 DOM 遍历为例,在识别到 Element 节点时插入校验:
- 遇到开始标签前,先调用
canRenderTag(child.tagName);若否,跳过整个子树 - 对每个属性调用
isValidAttribute(tagName, attrName, attrValue),过滤掉onerror、style(或仅允许可信 CSS 声明)等 - 在生成 token 数组(如
{markup: "<p>"}</p>)前完成断言,确保非法结构不进入后续序列化环节
断言结果要驱动实际行为,而非仅作日志
断言返回 false 不能只打个 console.warn。必须落实为动作:
- 跳过该节点及其全部子节点(避免残留闭合标签错位)
- 对部分标签降级处理,如把
<font color="red"></font>转为<span style="color:red"></span>后再断言样式合法性 - 记录拦截统计(如 “本周拦截 17 个
<iframe></iframe>”),用于运营风控或用户提示
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










