新版编辑器html支持基于白名单和运行时过滤,禁用script、iframe、onerror等危险标签与属性;仅允许语义安全标签如b、i、ul、table等,div和span需后端显式开启;class须预配置且受css支持限制,style基本被全禁;所有执行性代码在提交前被sanitizer强制移除。

新版编辑器对 HTML 的支持不是“全放开”,而是有明确白名单和运行时过滤机制——直接写 、 或内联 onerror 事件会被静默剥离,不是失效,是压根不会进入 dom。
哪些 HTML 标签能用?看编辑器的白名单配置
新版编辑器通常基于类似 DOMPurify 的净化逻辑,默认只保留语义安全的标签。常见可用标签包括:、、、、、
、
、
、
、、
、
、
、
。但注意:
和 是否允许,取决于后端是否在白名单中显式开启——很多部署默认禁用它们以防止样式逃逸。
- 用
写代码块时,必须成对闭合,且中间不能混入未转义的 或 >,否则整段被截断
中禁止出现 style="width:100%" 这类内联样式,宽度需靠 class 控制(如果编辑器支持 class 白名单)
-
![html语句的应用_新版编辑器支持html语句变化【详解】]()
只允许 src 和 alt 属性,onload、data-src 等一概被删
class 和 style 怎么生效?得看后端策略
不是所有 class 都有效。class="tuc-19bc10f7-953ae2-0 high<a href= tuc-19bc10f7-953ae2-0"https://seo.sqjnqi.com/tag/li/">light" 能否起作用,取决于两个条件:前端 CSS 是否定义了该类,且后端净化器是否允许该 class 名通过。多数生产环境只放行有限几个 class,如 ql-align-center(Quill 衍生编辑器常用)、language-javascript(用于代码高亮)。style 属性则基本被全禁——即使写了 style="color:red",也会在保存前被移除。
- 想加颜色或字体大小?改用语义化标签:
→ 改写为 (如果编辑器仍支持 )或依赖编辑器内置 toolbar 按钮
- 自定义 class 必须提前在编辑器初始化时通过
allowedClasses 配置项声明,否则 runtime 会过滤掉
- 某些编辑器(如 TipTap)用 ProseMirror 底层,class 是通过 nodeSpec 的
addAttributes 显式注册的,硬写无效
为什么
这不是 bug,是强制安全策略。新版编辑器在内容提交前会调用 HTML sanitizer(例如 DOMPurify.withConfig),自动移除所有含执行能力的节点和属性。你看到的“没反应”,其实是内容还没发出去就被切掉了。
立即学习“前端免费学习笔记(深入)”;
-
→ 整个 script 标签连同内容被删除
-
→ onclick 属性被删,只剩
-
链接 → href 值被重写为 #,防止 js 执行
- 想实现交互?必须走编辑器插件机制,比如注册自定义 node 或用 data 属性配合外部 JS 监听(前提是该 data 属性在白名单里)
真正容易被忽略的是:HTML 输入后的实时预览和最终渲染可能走两套解析流程——编辑器内部用 Quill/ProseMirror 渲染,而详情页可能用服务端 markdown 转 HTML + 净化,导致同一段 HTML 在两边表现不一致。上线前务必在发布态下实测,别只信编辑器里的“所见即所得”。