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

概述

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

  • 新增 Premium 插件

  • 配套的 Premium 插件变更

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

  • 改进

  • 新增

  • 变更

  • 错误修复

  • 安全修复

新增 Premium 插件

以下新增的 Premium 插件与 TinyMCE 8.4.0 一并发布。

TinyMCE AI

TinyMCE AI 是 TinyMCE 新的高级 AI 平台:借助现成的 AI 功能,可加快草稿撰写并增强编辑工作流程——现在既可作为即插即用插件使用,也可作为 API 用于自定义集成。

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

  • 聊天图标 Chat(聊天):上下文对话、持久历史记录,以及理解文档内容的帮助。

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

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

在用户界面背后,是可用于生产的 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

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

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

exportpdf 支持 API version 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

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

Full Page HTML 包括以下修复。

已用现代等效 API 替换弃用的浏览器 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 视图中的文档加载过程已更新,移除了弃用的方法。文档现在仅在完全加载后显示,提高了浏览器兼容性,并在审核建议的编辑时提供更流畅、更稳定的体验。

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

此前,只要打开建议编辑审查界面,系统就会自动聚焦“取消”按钮,包括在页面加载时自动打开审查界面的情况。这可能会导致意外的滚动行为,例如当编辑器位于页面下方时,浏览器会在页面加载时将编辑器滚动到可见区域。

在 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 中,此前用户在链接和图像对话框的上传标签页拖放区域仅插入不允许的扩展名文件时,系统不会提供任何反馈。这导致用户无法确定上传失败还是对话框未响应。现在,当所有选择的文件都具有不允许的扩展名时,拖放区域会显示错误消息,告知用户所选文件的扩展名不被允许,并提示选择其他文件。

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

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

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

希伯来语的方向性错误

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

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

新增功能

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

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

此前,集成者无法在通过编辑器 UI 创建表格时设置默认的表头行数和列数。这影响了表格的可访问性,并要求集成者手动干预以达到可访问性标准。新的 table_default_header_rows 和 table_default_header_cols 选项允许集成者设置通过编辑器 UI 创建的新表格的默认表头行数和列数,为满足可访问性要求提供了支持的方式。

拖放区域对话框组件新增 errorHandler 选项

在 TinyMCE 8.4.0 中,拖放区域对话框组件支持新的 onInvalidFiles 回调(在更新日志中称为 errorHandler),当所有拖放或选择的文件具有不允许的扩展名时触发。这使得在使用拖放区域的对话框(如链接和图像对话框)中可以对无效文件上传进行自定义错误处理。

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

此前,不可编辑插件在 TinyMCE 6 中转换为核心功能。该功能始终启用,且没有记录的禁用方法,这对集成者来说并不总是理想的。

在 TinyMCE 8.4.0 中,新增了 allow_noneditable 选项。默认情况下,该选项是启用的。当设置为 false 时,不可编辑功能将被禁用,相当于在 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 会将聊天历史记录限定为该文档范围。具体详情请参阅 TinyMCE AI 选项中的 content_id。

变更

TinyMCE 8.4.0 还包含以下变更:

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

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

在 TinyMCE 8.4.0 中,新增了检查机制以防止压缩包含多个 rgb 值的 border-color 样式。样式不再会被压缩为无效的简写属性。

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

此前,元素路径容器使用 navigation 地标角色(role="navigation")且没有可访问名称,这与其在辅助技术中的实际行为不符。

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

错误修复

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

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

此前,通过链接对话框的上传选项卡上传空文件时,转换为 BlobInfo 会失败,并返回关于 blob 和 base64 编码的通用且晦涩的错误信息。导致用户无法理解失败原因或解决方法。

在 TinyMCE 8.4.0 中,空文件上传现由链接对话框自身处理,当选中空文件时会显示清晰、用户友好的错误提示。用户将收到具体说明问题的错误信息,而非通用的转换错误。

打包的内容 CSS 现已加载到预览 iframe 中

此前,当编辑器内容 CSS 被打包时,不会加载到预览 iframe 中。这导致编辑器内容区域与用户在预览对话框、建议编辑视图和修订历史视图中看到的效果存在视觉差异。

在 TinyMCE 8.4.0 中,修复了此问题:现在会检查内容 CSS 是否作为打包资源可用,并通过 style 标签将其应用到预览 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 中,当选区未折叠时,选区逻辑不再考虑强制根块(forced root block)。这防止了选区扩展到预期的列表项目之外,因此切换列表格式时不会发生意外的选区更改。

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

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

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

工具栏错误地使用了“group”角色,而不是“toolbar”。工具栏组错误地使用了“toolbar”角色,而不是“group”。

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

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

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

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

在 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