这些是 Tiny Cloud 和 TinyMCE Enterprise 的发布说明。有关最新的 TinyMCE 社区版本的信息,请参阅 TinyMCE Changelog。

概述

TinyMCE 8.4.0 于 2026 年 3 月 31 日星期二面向 TinyMCE Enterprise 和 Tiny Cloud 发布。本发布说明概述了 TinyMCE 8.4.0 的变更,包括:

  • 新增 Premium 插件

  • 配套的 Premium 插件变更

  • 配套的增强型皮肤和图标包变更

  • 改进

  • 新增内容

  • 变更

  • Bug 修复

  • 安全修复

新增 Premium 插件

以下新的 Premium 插件随 TinyMCE 8.4.0 一起发布。

TinyMCE AI

TinyMCE AI 是 TinyMCE 的全新 Premium AI 平台:通过即用型 AI 功能实现更快捷的草稿撰写和更强大的编辑工作流 —— 现同时以即插即用插件和用于自定义集成的 API 形式提供。

该平台围绕三种体验构建,契合团队对现代 AI 写作工具的期待:

  • 聊天图标 聊天:基于上下文的对话、持久化的历史记录以及能理解文档内容的帮助功能。

  • 审阅图标 审阅:面向长篇内容和编辑标准的校对与结构化质量检查。

  • 快捷操作图标 操作:针对日常任务(语气、长度、清晰度等)的快速、可重复的转换。

在 UI 背后,是具备生产环境就绪性的 TinyMCE AI API,支持 JWT 身份验证、细粒度权限和多种模型,也可用于您的更广泛的应用程序中。

这对用户意味着什么(该界面旨在实现的成果):

  • 无需离开编辑器即可推进草稿并调整语气。

  • 通过引导式流程进行摘要、调整长度并提高清晰度。

  • 通过权限和审阅式工作流,确保品牌和政策护栏触手可及。

TinyMCE AI 的文档:

付费计划的现有客户可通过 客户门户 申请功能完整的免费试用。

配套的 Premium 插件变更

以下 Premium 插件更新随 TinyMCE 8.4.0 一起发布。

Comments(评论)

TinyMCE 8.4.0 版本包含了配套发布的 Comments Premium 插件版本。

Comments 包含以下修复。

创建新评论时的错误导致保存按钮卡在“正在保存”状态

此前,在 Comments 中创建或编辑评论时,如果保存操作失败或组件未被替换,保存按钮可能会无限期停留在“正在保存”状态。该状态除了重新创建组件外无法重置为 false,从而误导用户以为操作仍在进行中。

在 TinyMCE 8.4.0 中,无论保存操作成功还是失败,保存逻辑现在都会在操作完成后将保存状态重置为 false。保存按钮不再卡在“正在保存”状态。

包含 @ 的 id 用户未被正确解析

此前,Comments 中的提及解析器未将 @ 符号视为提及字符串的一部分。包含 @ 的用户 ID(例如电子邮件地址)被错误拆分,导致提及在保存后仍显示为原始文本,而不是解析为显示名称。

在 TinyMCE 8.4.0 中,Comments 插件现在能正确解析包含 @ 的用户 ID 的提及。提及将如预期解析为显示名称。

有关 Comments 插件的信息,请参阅:Comments。

Export to PDF(导出为 PDF)

TinyMCE 8.4.0 版本包含了配套发布的 Export to PDF Premium 插件版本。

Export to PDF 包含以下新增内容。

exportpdf 支持 API 版本 2 的转换器选项

TinyMCE 8.4.0 通过 exportpdf_converter_options 添加了对 exportpdf API 2 版本的支持。为向后兼容,1 版本仍为默认版本。新的嵌套结构将选项组织在 document、headers、footers、metadata、security 和 signature 下,支持逐页页眉页脚、PDF 元数据、密码保护以及基于证书的签名。

有关 Export to PDF 插件的信息,请参阅 Export to PDF。

Full Page HTML(整页 HTML)

TinyMCE 8.4.0 版本包含了配套发布的 Full Page HTML Premium 插件版本。

Full Page HTML包含以下修复。

已用现代等效项替换弃用的浏览器 API。

此前,Full Page HTML 插件使用已弃用的 escape 和 unescape JavaScript API 处理部分受保护内容。这些 API 已不再建议用于新代码。

在 TinyMCE 8.4.0 中,插件改用现代编码 API。这使实现符合当前浏览器指南,并提高了受保护内容处理的可靠性。

粘贴 HTML 文档时存在 XSS 攻击漏洞

在 Full Page HTML 插件中发现了一个跨站脚本(XSS)漏洞。此前,粘贴时文档 <head> 中的恶意代码能够被执行。

TinyMCE 8.4.0 已通过确保正确编码文档 <head> 中的内容修复了该漏洞。

editor.getContent() 和 editor.setContent() API 新增参数 fullpagehtml,在 Full Page HTML 插件激活时仅获取/设置内容主体。

此前,在 Full Page HTML 插件激活时设置和获取编辑器内容可能很麻烦,因为所有 API 调用都存在完整 HTML 文档,即使不需要也是如此。仅获取和操作主体内容(例如用于保存)未记录在案且需要变通方法。

在 TinyMCE 8.4.0 中,editor.getContent() 和 editor.setContent() API 添加了 fullpagehtml 选项。设置为 false 时,此选项允许在 Full Page HTML 插件激活时仅获取和设置主体内容,而不影响完整文档结构。文档现在更不容易意外更改,内容可以在不包含完整 HTML 文档的情况下检索或更新。详情参见 fullpagehtml 选项用于 getContent/setContent。

有关 Full Page HTML 插件的信息,参见:Full Page HTML。

Media Optimizer

TinyMCE 8.4.0 版本包括 Media Optimizer 高级插件的配套版本。

Media Optimizer 包括以下新增内容和修复。

与 quickbars 插件一起使用时,工具栏按钮未初始化。

此前,当 Media Optimizer 插件与 quickbars 插件一起使用时,uploadcare 工具栏按钮完全未注册。结果,即使配置了,按钮也无法出现在工具栏中。

在 TinyMCE 8.4.0 中,uploadcare 按钮现在总是注册,可以与 quickbars 插件一起在工具栏中使用。为避免在上下文工具栏中重复,当 quickbars 插入图像按钮已存在时,插件不再添加 uploadcare 按钮。

使用 Media Optimiser 插件和 CSS 插件时,第三方库图标出现在格式中

此前,当 Media Optimiser 插件与 importcss 插件一起使用时,旧版本的 uc-video 需要导入外部样式。importcss 插件检测到这些导入并将其添加到格式菜单中,导致第三方库图标出现在格式 UI 中。这些图标不是官方 TinyMCE 图标包的一部分,造成了混乱和不一致的 UI 体验。

在 TinyMCE 8.4.0 中,uc-video 包已升级为样式自包含在 Web 组件中的版本。importcss 插件不再检测 uc-video 样式,因此第三方图标不再出现在格式 UI 中。

现在可以上传 SVG 图像。

此前,SVG 图像无法通过 Media Optimizer 插件上传,因为 Uploadcare 对 SVG 文件处理施加了限制。需要在内容中包含 SVG 图形的用户无法直接上传它们。

在 TinyMCE 8.4.0 中,现在可以通过 Media Optimizer 插件上传 SVG 图像。某些 CDN 操作可能对 SVG 文件有限制;详情参见 Uploadcare 关于 CDN 操作限制的文档。

有关 Media Optimizer 插件的信息,参见:Media Optimizer。

Suggested Edits

TinyMCE 8.4.0 版本包括 Suggested Edits 高级插件的配套版本。

Suggested Edits 包括以下改进和修复。

文档视图渲染以减少加载 Suggested Edits 时的闪烁。

此前,Review Edits 视图中显示的文档依赖于已弃用的浏览器方法 document.write,这可能导致内容在完全样式化之前出现。用户打开审查界面时可能短暂看到部分渲染或未样式化的内容。

在 TinyMCE 8.4.0 中,Review Edits 视图中的文档加载过程已更新,移除了已弃用的方法。文档现在仅在完全加载后显示,提高了浏览器兼容性,并在审查建议编辑时提供更流畅、更稳定的体验。

即使编辑器未聚焦,视图打开时取消按钮总是获得焦点。

之前,只要打开“建议编辑(Suggested Edits)”界面(包括页面加载时自动打开的情况),其中的“取消”按钮就会自动获得焦点。这可能导致意外的滚动行为,例如当编辑器位于页面更靠下的位置时,浏览器会在页面加载时将编辑器滚动到可视区域内。

在 TinyMCE 8.4.0 中,仅当编辑器本身已获得焦点时,“取消”按钮才会获得焦点。当界面自动打开时,该按钮不再获得焦点,从而避免了非预期的滚动。

有关 Suggested Edits 插件的信息,请参见:Suggested Edits。

配套的 Enhanced Skins & Icon Packs 变更

TinyMCE 8.4.0 版本包含配套发布的 Enhanced Skins & Icon Packs。

Enhanced Skins & Icon Packs

Enhanced Skins & Icon Packs 的发布包含以下更新:

已重新构建 Enhanced Skins & Icon Packs,以纳入默认 TinyMCE 8.4.0 皮肤 Oxide 中同样包含的变更。

有关使用 Enhanced Skins & Icon Packs 的信息,请参见:Enhanced Skins & Icon Packs。

改进

TinyMCE 8.4.0 还包含以下改进:

link 和 image 对话框的文件上传功能在选择了不受支持的文件类型时会提供反馈

在 TinyMCE 8.4.0 之前,当用户仅插入具有不允许的扩展名的文件时,link 和 image 对话框上传选项卡中的拖放区域(dropzone)不会提供任何反馈。这让用户不确定上传是否失败,或对话框是否没有响应。现在,当所有所选文件都具有不允许的扩展名时,拖放区域会显示错误消息,告知用户所选文件的扩展名不受允许,并提示他们选择不同的文件。

方向性按钮现在始终应用于块级元素,并且仅在设置了方向性时显示为激活状态

在之前的版本中,在切换到默认方向时,方向性按钮不会应用方向性属性或样式。这可能导致非默认方向性的内容以相反方向显示。

在 TinyMCE 8.4.0 中,每个方向性按钮始终会应用或移除所选块的方向性属性,并且仅在块上显式设置了方向性时才显示为激活状态。

希伯来语的方向性错误

之前,语言包中未正确设置希伯来语的从右到左(RTL)方向性。这导致在将希伯来语设为语言时,编辑器会渲染出错误的方向性。

在 TinyMCE 8.4.0 中,已通过确保语言包中正确设置了希伯来语的方向性解决了这一问题。

新增功能

TinyMCE 8.4.0 还包含以下新增功能:

新的 table_default_header_rows 和 table_default_header_cols 选项,用于设置新表格的默认表头大小

之前,集成人员无法在通过编辑器界面创建表格时设置默认的表头行和列。这会影响表格的可访问性,并要求希望满足可访问性标准的集成人员进行手动干预。新的 table_default_header_rows 和 table_default_header_cols 选项使集成人员能够设置通过编辑器界面创建的新表格的默认表头行和列数,从而提供了一种受支持的方式来满足可访问性要求。

用于 dropzone 对话框组件的新 errorHandler 选项

在 TinyMCE 8.4.0 中,dropzone 对话框组件支持一个新的 onInvalidFiles 回调(在更新日志中称为 errorHandler),当所有拖放或选择的文件都具有不允许的扩展名时会运行该回调。这 enables 在使用拖放区域的对话框(例如 link 和 image 对话框)中对无效文件上传进行自定义错误处理。

现在可以通过新的 allow_noneditable 选项禁用不可编辑(noneditable)功能。

之前,noneditable 插件在 TinyMCE 6 中被转换为核心功能。该功能始终处于启用状态,且没有记录在案的关闭方法,而这并不总是集成人员所期望的。

在 TinyMCE 8.4.0 中,提供了一个新的 allow_noneditable 选项。它默认处于启用状态。当设置为 false 时,noneditable 功能将被禁用,这与在 TinyMCE 6 之前禁用该插件的效果相当。

新的 view_show 选项,用于在初始化时显示指定的视图。

在 TinyMCE 8.4.0 中,新的 view_show 选项允许指定在编辑器初始化时要显示的视图。该选项的行为与 sidebar_show 类似,但优先用于视图;侧边栏和视图都可以配置为在初始化时显示。

用于唯一标识所编辑文档的新 content_id 编辑器选项

之前,在编辑器配置中没有受支持的编辑器选项来为正在编辑器中编辑的文档提供稳定的标识符。

在 TinyMCE 8.4.0 中,可选的 content_id 字符串选项可用。集成可以将其设置为一个能唯一标识文档的值(例如数据库记录 ID)。当 TinyMCE AI 插件启用时,content_id 会将聊天历史的作用范围限定为该文档;有关详细信息,请参阅 content_id in the TinyMCE AI options。

变更

TinyMCE 8.4.0 还包括以下变更:

具有多个 rgb 颜色的 border-color 样式会被错误地压缩为 border

以前,当 border-color 使用多个 rgb 值(例如元素不同边的颜色)时,样式压缩器会错误地将它们压缩为单个 border 简写属性。border 简写属性只支持一种颜色,因此会产生无效的 CSS。这会影响表格和其他具有多色边框的元素。

在 TinyMCE 8.4.0 中,添加了一个检查,当 border-color 包含多个 rgb 值时阻止压缩。样式不再被压缩为无效的简写属性。

元素路径使用 WAI-ARIA 组语义和可访问名称

以前,元素路径容器使用 navigation 地标角色(role="navigation")并且没有可访问名称。这与控件对辅助技术的行为方式不匹配。

在 TinyMCE 8.4.0 中,元素路径使用 role="group" 并带有 aria-label(已本地化;英语中为 Element Path)。有关键盘导航,请参阅 可访问导航指南。

错误修复

TinyMCE 8.4.0 还包括以下错误修复:

现在 link 对话框允许上传空文件

以前,当通过链接对话框的上传选项卡上传空文件时,转换为 BlobInfo 会失败,并返回一个关于 blob 和 base64 编码的通用、隐晦的错误。因此,用户无法理解导致失败的原因或如何解决它。

在 TinyMCE 8.4.0 中,空文件上传现在由链接对话框本身处理,当选择空文件时会显示清晰、用户友好的错误消息。用户会收到一个解释问题的具体错误,而不是通用的转换错误。

捆绑的内容 CSS 现在会加载到预览 iframe 中

以前,当编辑器内容 CSS 被捆绑时,它不会加载到预览 iframe 中。这导致编辑器内容区域与用户在预览对话框、建议编辑视图和修订历史视图中看到的内容存在视觉不匹配。

在 TinyMCE 8.4.0 中,修复程序会检查内容 CSS 是否作为捆绑资源可用,并通过样式标签将其应用于预览 Iframe。捆绑的内容 CSS 现在可以正确加载到预览 Iframe 中。

尝试移除 contentEditable="false" 元素后的链接会失败。

在 TinyMCE 的以前版本中,尝试移除位于 contentEditable="false" (CEF) 元素之后的链接可能会失败,因为操作流程会创建一个书签,该书签会规范化选择并将其移入 CEF;一旦光标进入 CEF 内部,选择检查就会阻止链接移除操作(以及其他基于选择的操作)执行。

TinyMCE 8.4.0 通过在创建书签之前捕获选择的目标来解决这个问题,反转了以前的顺序,以便在规范化之前复制选择,确保选择目标保持有效并且链接移除按预期工作。

某些格式未应用于多级列表中的项目。

以前,当对多级列表应用格式(如背景、粗体、斜体、下划线或删除线)然后在第二级列表之前添加新项目时,新项目可能会丢失一些格式。这是因为在包含嵌套列表的列表项中创建新行有时会删除持有应用样式的空元素。

在 TinyMCE 8.4.0 中,删除逻辑已更新,以避免在包含空元素(样式)和嵌套列表的列表项中插入新行时删除这些元素。现在,在向多级列表添加新项目时,格式会按预期保留。

当 table_style_by_css 为 false 时,通过表格属性设置宽度不生效。

以前,当 table_style_by_css 设置为 false 时,通过表格属性对话框更新表格宽度不会应用宽度属性。对话框仅在使用 CSS 样式时应用宽度,这破坏了依赖 HTML 属性进行表格大小调整的用户的功能。

在 TinyMCE 8.4.0 中,当 table_style_by_css 为 false 时,通过表格属性对话框更新宽度现在确保宽度属性正确应用。表格对话框对于基于属性和基于样式的宽度设置都按预期工作。

使用 block/unblock API 时对话框未保持焦点。

以前,当对话框被阻止(例如加载时)然后取消阻止时,加载旋转图标会消失,而不会自动聚焦任何其他元素。结果,焦点完全脱离了编辑器。使用内联编辑器时,这会导致对话框和编辑器 UI 的其余部分消失。

在 TinyMCE 8.4.0 中,取消阻止对话框现在会自动聚焦第一个可聚焦元素,与打开对话框时相同。这防止了使用内联编辑器时对话框和编辑器 UI 的其余部分消失。

切换列表会导致选区问题

此前,反复切换列表格式(例如,在项目符号列表和有序列表之间切换)可能会导致选区意外扩展,包含最初未选中的内容。每次后续切换时,选区会跳到相邻行并不断扩展,导致难以仅将列表更改应用到目标项目。

在 TinyMCE 8.4.0 中,当选区未折叠时,选区逻辑不再考虑强制根块。这防止了选区扩展到预期的列表项之外,因此切换列表格式时不会发生意外的选区更改。

具有无单位宽度或高度属性的表格无法正确调整大小。

此前,使用无单位宽度或高度属性(例如,没有 px 或 % 的数字值)的表格无法正确调整大小。调整大小句柄和列操作对于这些表格的行为不符合预期。

在 TinyMCE 8.4.0 中,表格调整大小逻辑可以正确处理无单位的宽度和高度属性。无论维度如何指定,现在都可以按预期调整表格的大小和修改表格。

工具栏的角色错误地为“group”,而不是“toolbar”。工具栏组的角色错误地为“toolbar”,而不是“group”。

此前,工具栏错误地获得了 group 角色,而不是 toolbar 角色,而工具栏组错误地获得了 toolbar 角色,而不是 group 角色。这导致屏幕阅读器的语义混淆,因为用户会听到多个“工具栏”,却没有清晰的分组结构和可访问名称。

在 TinyMCE 8.4.0 中,已修正 ARIA 角色,因此工具栏使用 role="toolbar",工具栏组使用 role="group"。这提高了可访问性和屏幕阅读器的行为。

如果内容足够长,具有 matchWidth: true 的下拉菜单可能会位于其父级的左侧

此前,当下拉菜单带有 matchWidth: true 且字段值溢出视口右边缘时(例如,将长 URL 粘贴到图像对话框源字段中时),下拉菜单可能会位于输入框的左侧。错位范围从轻微偏移到菜单紧贴视口左边缘。下拉菜单宽度被限制以匹配输入框,但在该限制之后菜单未重新定位,因此列表不再与字段对齐,看起来脱节。

在 TinyMCE 8.4.0 中,定位逻辑现在会在下拉菜单宽度受限时触发重新定位。下拉菜单将按预期与输入框保持对齐。

列表中的某些删除键盘事件无法阻止

在 TinyMCE 8.4.0 中,发现了一个问题,即列表中的某些删除键盘事件由于键处理程序在编辑器设置阶段之前注册且未验证事件是否已被阻止而无法阻止。因此,拦截和阻止选区删除的尝试无效,限制了对列表行为的自定义和控制。

TinyMCE 8.4.0 通过将键处理程序注册更新为在 init 阶段进行来解决此问题,并且额外的检查现在可以确保尊重之前已阻止的事件。

删除 li 中的选区不会触发 beforeinput。

此前,删除列表项内的选区或在列表项开始处按 Backspace 键不会触发原生 beforeinput 事件。编辑器的列表键处理程序在执行删除之前阻止了 keydown 事件,这也抑制了 beforeinput 事件。这影响了依赖 beforeinput 来拦截或自定义列表中删除行为的集成和插件。

在 TinyMCE 8.4.0 中,编辑器现在会在执行列表项内的删除操作之前发出合成的 beforeinput 事件。处理程序可以对此事件调用 preventDefault() 以按预期拦截删除操作。

安全修复

TinyMCE 8.4.0 包含针对以下安全问题的一项修复:

rawtext 上下文中的属性净化绕过

在 跨站脚本 (XSS) 中发现了一个DOMPurify 漏洞,该漏洞影响 TinyMCE 8.4.0 之前的版本。该问题是由于 DOMPurify 允许攻击者在某些 rawtext 上下文中绕过属性净化,当净化后的输出放置在这些上下文内时,可能会导致不当的净化。

受影响的版本

  • DOMPurify 3.1.3 至 3.3.1

  • DOMPurify 2.5.3 至 2.5.8

漏洞

  • rawtext 上下文中的属性净化绕过(CVE-2026-0540):允许攻击者通过利用 SAFE_FOR_XML 正则表达式中缺失的 rawtext 元素来绕过属性净化。

GHSA:GitHub 公告

CVE:CVE-2026-0540