以下是 Tiny Cloud 和 TinyMCE Enterprise 的发布说明。有关 TinyMCE 最新社区版本的信息,请参阅 TinyMCE 更新日志。

概述

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

  • 配套的 Premium 插件变更

  • 改进

  • 新增

  • 变更

  • 错误修复

配套的 Premium 插件变更

以下 Premium 插件更新随 TinyMCE 8.7.0 一并发布。

修订历史

TinyMCE 8.7.0 版本包含 Revision History Premium 插件的配套发布。

Revision History 包含以下新增内容。

修订可标记为 AI 来源并显示 AI 徽标

修订现在支持可选的 metadata 属性。将其 source 字段设置为 'ai' 可将修订标记为 AI 辅助,以便集成人员跟踪由 TinyMCE AI 插件生成的内容。默认情况下,AI 辅助修订的卡片上会渲染 AI 徽标。将新的 revisionhistory_ai_attribution 选项设置为 false 可隐藏该徽标。

有关将修订标记为 AI 来源的详细信息,请参阅 将修订标记为 AI 辅助。

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

建议编辑

TinyMCE 8.7.0 版本包含 Suggested Edits Premium 插件的配套发布。

Suggested Edits 包含以下改进和新增内容。

AI 辅助建议可显示 AI 徽标

Suggested Edits 现在会将使用 TinyMCE AI 插件所做的编辑记录为 AI 辅助。默认情况下,这些编辑的卡片上会显示 AI 徽标。将新的 suggestededits_ai_attribution 选项设置为 false 可隐藏该徽标。

现在 suggestededits_model 架构为版本 2。加载时会自动迁移以版本 1 保存的模型。

现在可以切换建议跟踪功能

Suggested Edits 现在支持在编辑过程中切换建议跟踪。新的 suggestededits-tracking 工具栏按钮 和 菜单项,以及 SuggestedEditsToggleTracking 命令,可让用户在将编辑跟踪为建议或直接应用于内容之间切换。 suggestededits_auto_approve 配置选项现在还控制它们的默认状态。

由于切换跟踪从根本上改变了 Suggested Edits 的使用体验,该按钮和菜单项默认不包含。必须在编辑器配置中显式添加到工具栏或菜单。

完成审阅时,Suggested Edits hasChanges 事件现在也会触发

此前,SuggestedEditsHasChangesUpdate 事件仅与其他编辑器事件(如输入、选择或聚焦)一起触发。单独完成审阅不会触发该事件,因此 hasChanges API 返回的值可能会过时。结果,任何依赖该 API 的集成在审阅完成时都不会收到更新。

在 TinyMCE 8.7.0 中,只要 hasChanges API 中的值发生变化,包括完成审阅时,SuggestedEditsHasChangesUpdate 事件就会触发。

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

导出为 PDF

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

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

现在可以在 getContent 的事件和 nodeFilter 中指定 export 类型。

Export to PDF 插件现在会以设置为 pdf 的 export 属性调用 tinymce.editor.getContent()。TinyMCE 会将此属性传递给 GetContent 事件和序列化器节点过滤器,以便集成人员可以应用针对 PDF 导出的内容过滤,而不影响常规内容检索。

有关导出期间过滤内容的信息,请参阅:导出特定的内容过滤。有关 Export to PDF 插件的信息,请参阅:Export to PDF。

导出为 Word

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

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

现在可以在 getContent 的事件和 nodeFilter 中使用 export 类型。

Export to Word 插件现在会调用 tinymce.editor.getContent() 并设置 export 属性为 word。TinyMCE 会将此属性传递给 GetContent 事件和序列化器节点过滤器,使集成者能够应用针对 Word 导出的内容过滤,而不会影响常规内容获取。

有关导出期间过滤内容的信息,请参阅:特定于导出的内容过滤。有关 Export to Word 插件的信息,请参阅:Export to Word。

Page Embed

TinyMCE 8.7.0 版本包含 Page Embed 高级插件的配套版本。

Page Embed 包含以下修复。

通过 pageembed 插件插入的 iframe 无法使用左对齐、居中和右对齐工具栏按钮进行对齐。

此前,左对齐、居中和右对齐工具栏按钮对通过 Page Embed 插件插入的 iframe 无效。选择嵌入式 iframe 并选择对齐方式不会改变其位置。

在 TinyMCE 8.7.0 中,左对齐、居中和右对齐工具栏按钮可以对齐通过 Page Embed 插件插入的 iframe。

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

Inline CSS

TinyMCE 8.7.0 版本包含 Inline CSS 高级插件的配套版本。

Inline CSS 包含以下修复。

获取带有 inline CSS 的 HTML 内容时未包含 fullpage 页眉和页脚

此前,当启用 Full Page HTML 插件时,Inline CSS 插件的 getContent API 不会返回完整的 HTML 文档。周围的文档页眉和页脚被省略,导致输出不适合用于生成适合电子邮件的文档等用例。

在 TinyMCE 8.7.0 中,Inline CSS 插件会检测何时启用了 Full Page HTML 插件,并在输出中包含文档页眉和页脚。getContent API 现在按预期返回完整的 HTML 文档。

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

TinyMCE AI

TinyMCE 8.7.0 版本包含 TinyMCE AI 高级插件的配套版本。

TinyMCE AI 包含以下改进、修复和新增功能。

将 TinyMCE AI 插件添加到 npm-premium + ZIP 下载中。

从 TinyMCE 8.7.0 开始,TinyMCE AI 插件首次可供自托管客户使用。此前,该插件只能从 Tiny Cloud CDN 加载。

从本版本起,tinymceai 插件包含在 tinymce-premium NPM 包中,并可从 Tiny Account 作为独立插件 .zip 下载。该插件仅作为插件分发,不包含在任何 TinyMCE ZIP 捆绑包中。

自托管插件仍必须连接到 AI 服务实例。将其指向托管的 Tiny Cloud AI 服务,或部署 自托管 AI 服务 以使内容保留在主机网络内。有关安装步骤,请参阅:快速入门:来自 NPM 或 Yarn 的 TinyMCE。有关插件配置,请参阅:TinyMCE AI。

当 body 元素在自定义 content_style 中使用 position: relative 时,差异叠加层可能会错位

此前,预览快速操作(如翻译)时,如果编辑器 body 元素在自定义 content_style 中使用 position: relative,差异叠加层会显示错位。叠加层使用 body 元素作为其包含块而不是视口,但定位逻辑仍使用视口。结果,高亮切片显示与翻译文本偏移。定位 body 元素的打印样式布局和文档模板可能使预览难以使用。

在 TinyMCE 8.7.0 中,差异叠加层独立于编辑器内容样式渲染。无论自定义 body 定位如何,叠加层都会与翻译文本对齐,并且切片按预期高亮显示活动的翻译内容。

新增 tinymceai_tool_data_callback 选项以自定义 Model Context Protocol (MCP) 工具运行时显示的状态消息

TinyMCE AI 插件现在支持 tinymceai_tool_data_callback 选项。当 MCP 服务器在流式响应期间发送 mcp-tool-result 或 mcp-tool-notification 事件时,将运行此函数。该函数应返回一个字符串,在 AI 模型调用 MCP 工具时,该字符串将显示为聊天侧边栏中的状态消息。

自定义审阅文本域为空时显示滚动条。

此前,TinyMCE AI 审查侧边栏“自定义审查”部分的文本区域即使在为空时也会显示滚动条。占位符文本可能会滚动,文本区域的边角看起来被截断,这使得控件看起来像是损坏的。

在 TinyMCE 8.7.0 中,自定义审查文本区域使用更大的默认高度,因此占位符无需滚动条即可完整显示,并且文本区域在为空时能正确呈现。

当未提供 tinymceai_default_model 时,插件不再显示控制台警告。

此前,当未设置 tinymceai_default_model 选项时,TinyMCE AI 插件会在控制台中记录一条警告,尽管省略该选项是有效的。该警告暗示存在配置错误,从而引起了混淆。

在 TinyMCE 8.7.0 中,当未提供 tinymceai_default_model 选项时,TinyMCE AI 插件不再记录控制台警告。

在聊天和操作预览模式中,点击高亮建议后不再显示选中状态,因为这些建议上没有可用的后续操作。

此前,在 TinyMCE AI 聊天和 TinyMCE AI 快捷操作的预览模式中,点击高亮建议会显示选中状态,尽管预览模式不为高亮建议提供任何操作。选中状态使建议看起来具有交互性,导致用户期望获得预览模式并不提供的后续操作。

在 TinyMCE 8.7.0 中,TinyMCE AI 聊天和 TinyMCE AI 快捷操作预览模式中的高亮建议不再响应点击,也不再显示选中状态。高亮仍保持可见以便参考,因此预览模式呈现最终文本的只读视图。

TinyMCE AI 插件现在会向 SetContent 和 BeforeSetContent 事件负载添加 ai 属性

此前,TinyMCE AI 插件将内容插入编辑器时,不会将其标记为 AI 生成。监听 BeforeSetContent 和 SetContent 事件的集成无法可靠地区分此内容与其他来源设置的内容,也无法应用基于来源的处理、跟踪或分析。

在 TinyMCE 8.7.0 中,TinyMCE AI 插件在设置内容时,会向 BeforeSetContent 和 SetContent 事件负载添加 ai 属性。事件处理程序可以检查此属性,以检测 TinyMCE AI 生成的内容并根据其来源做出响应。

现在可以删除仍在加载中的上下文源

此前,当文件仍在上传时,用户无法从 TinyMCE AI 对话中删除上下文源。添加了大文件(例如图像或 PDF)的用户必须等待文件上传到 AI 服务完成后才能将其删除。插件没有提供取消已在进行中的请求的方法。

在 TinyMCE 8.7.0 中,上下文源的删除按钮现在会立即取消正在进行的上传。用户可以在上下文源仍在加载时将其删除,无需等待请求完成。

聊天现在可以更新空文档

此前,聊天在生成内容时不会更新空文档。聊天仅在聊天侧边栏中显示生成的内容,因为当文档没有内容时,AI 服务无法应用编辑。

在 TinyMCE 8.7.0 中,AI 聊天现在可以处理空文档的更新。当编辑器为空时,生成的内容现在会直接插入到文档中,而不仅仅是显示在侧边栏中。

审查模式的键盘导航现在与聊天侧边栏匹配

此前,审查侧边栏的键盘导航与聊天侧边栏不匹配,因此在这两个侧边栏之间切换时,仅使用键盘的工作流行为不一致。按 Esc 还可能会拒绝所有待处理的建议,而不是移动焦点,这意味着键盘用户可能会无意中丢弃建议。

在 TinyMCE 8.7.0 中,审查侧边栏的键盘导航与聊天侧边栏匹配。Ctrl+Alt+S 快捷键可以打开审查侧边栏并聚焦。Tab 和 Shift+Tab 可以在建议卡片及其按钮之间移动。Esc 现在会移动焦点,而不是拒绝待处理的建议。仅使用键盘的用户无需鼠标即可导航并应用建议。

新的 tinymceai_reviews_change_tone_menu 选项用于控制“更改语气”审查菜单

TinyMCE 8.7.0 为 TinyMCE AI 添加了 tinymceai_reviews_change_tone_menu 选项。此选项控制“更改语气”审查中显示哪些语气选项及其顺序。仅支持预设语气 ID。重复的 ID 会被删除,菜单会按配置的顺序显示语气。如果该选项包含无效的语气 ID,则配置会被拒绝,并使用默认语气。有关有效的语气 ID 和选项详情,请参阅 tinymceai_reviews_change_tone_menu。

应用审查后,审查侧边栏不再显示“未找到改进建议”

此前,如果在模型仍在响应时隐藏审查侧边栏,然后从预览页脚应用或跳过了生成的建议,审查状态不会重置。重新打开审查侧边栏会显示“审查完成——未找到改进建议”,而不是审查列表,尽管审查已经完成。恢复审查选项的唯一方法是重新加载编辑器。

在 TinyMCE 8.7.0 中,当侧边栏隐藏时,从预览页脚应用或跳过建议后,review 状态现在能正确重置。重新打开 review 侧边栏会再次显示 review 列表,因此无需重新加载编辑器即可继续进行 review。

现在,用于解包嵌套列表项的 prompts 会保留内容

以前,当模型将嵌套块解包为顶级块(例如将 <li> 项转换为 <p> 段落)时,会重用原始元素 ID。diffing 逻辑会将重用的 ID 视为对嵌套元素的更新,因此某些 prompts 会间歇性地移除内容,而不是对其进行解包。现在,只有当重用的 ID 指向顶级元素时,才会将其视为现有块;否则,会将其作为新元素处理。解包嵌套元素的编辑现在可以可靠地应用并保留内容。

切回之前的会话现在会继续该会话

以前,一个回归问题导致无法在 Chat 侧边栏中正确加载之前的会话。在开始新聊天后,返回之前的会话并发送 prompt 会开始一次不连贯的交流,而不是继续原始线程。现在,切换到现有会话会恢复其 conversation ID,因此后续的 prompt 会继续所选会话。

现在,在包含多张图像的内容中,图像编辑会针对正确的图像

以前,发送给模型的图像没有唯一标识,因此引用特定图像的 prompt 可能会将一张图像误认为另一张,并将更改(例如 alt 文本更新)应用到错误的图像。TinyMCE AI 现在会为每个 img 元素添加唯一标签,从而降低出错概率。即使在内容中包含多张图像,图像编辑现在也会应用到目标图像。

集成人员现在可以使用 tinymceai_reviews 选项添加自定义 AI review

以前,review 侧边栏仅支持一组固定的内置 review,可通过 tinymceai_reviews 选项按 ID 选择。集成人员没有受支持的方法来添加命名 review、参数化 prompts 或混合内置和自定义 review 的菜单。集成人员必须依赖通用流程(例如自定义 review),而不是 review 侧边栏中的专用 review 操作。

在 TinyMCE 8.7.0 中,tinymceai_reviews 选项除了接受现有的内置字符串 ID 外,还接受集成人员定义的 review 对象。集成人员可以定义 simple、list 和 input review 类型,每种类型都有自定义名称、描述和 prompt。有关完整 schema 和示例,请参阅 tinymceai_reviews 选项。

当内容被替换时,AI 建议预览不再显示已删除的文本

以前,在 review AI 建议时,对于替换操作,预览会并排显示已删除文本和插入的文本。这会使预览显得杂乱且难以阅读,因为必须同时解析原始内容和新内容,尤其是在文档包含多个替换项时。

在 TinyMCE 8.7.0 中,预览会针对替换操作隐藏已删除文本,仅显示新内容。当选择替换项时,会显示并高亮显示插入的内容,而已删除文本仍保持隐藏。独立的删除操作在选择时会继续显示已删除文本,因此纯删除操作仍完全可见。这使预览在 review AI 生成的更改时更简洁、更易读。

AI 预览与编辑器内容结构不匹配,导致样式渲染差异

以前,AI 建议预览会在预览 iframe body 内的包装器元素中渲染内容,而不是像编辑器那样直接渲染到 iframe body 中。由于预览和编辑器的结构不同,注入的样式可能会以不同方式渲染。绝对定位元素和 body 级 CSS 规则并不总是以相同方式应用,这可能会导致表格页眉和页脚错位等故障。

在 TinyMCE 8.7.0 中,预览会将内容直接插入 iframe body,使其结构与编辑器一致。注入的样式现在在两者中产生相同的视觉结果,并且预览与编辑器渲染一致。

现在,review AI 建议时的批量操作按钮会反映当前进度

以前,在 review AI 建议时,批量操作按钮总是显示 Skip remaining 和 Apply remaining,即使尚未应用或跳过任何建议也是如此。这会令人困惑,因为尚未做出任何决定。

在 TinyMCE 8.7.0 中,批量操作按钮会反映当前进度。在第一次决定之前,它们显示 Skip all 和 Apply all,然后在至少应用或跳过一条建议后切换为 Skip remaining 和 Apply remaining。这种行为在 Chat 和 Quick Actions 流程中是一致的。

现在,某些工具提示仅在内容过长无法完全显示时出现

以前,TinyMCE AI 界面中的某些工具提示只要满足触发条件就会显示,即使内容已完全可见也是如此。这增加了不必要的视觉杂乱。

在 TinyMCE 8.7.0 中,这些工具提示仅在内容因过长无法完全显示而被截断时出现。这减少了不必要的工具提示,并使界面更整洁。

AI Chat 历史记录中用户 prompts 的空白未正确渲染

以前,AI 聊天历史记录中显示的用户提示会合并连续的空格和换行符。多行提示会显示为连续的单行,因此聊天线程中的消息与输入的内容不匹配。

在 TinyMCE 8.7.0 中,AI 聊天历史记录中的用户提示会保留其原始换行符和空格,而长行仍会在消息内换行。提示现在会按照输入时的样式显示。

将 AI 建议预览中的仅图标按钮替换为带有标签的“应用”和“跳过”按钮

以前,AI 建议预览使用仅图标的接受和拒绝按钮,因此每个操作的含义依赖于图标及其工具提示。这使操作变得模糊且难以发现。

在 TinyMCE 8.7.0 中,AI 建议预览使用带有标签的按钮:一个主要的“应用”按钮来接受建议,一个次要的“跳过”按钮来拒绝建议。更清晰的标签使每个操作都一目了然,并提高了可访问性。

AI 建议差异叠加层在调整浏览器窗口大小时未能始终保持对齐

以前,当 AI 聊天生成新内容后,调整浏览器窗口大小可能会导致 AI 建议差异叠加层与底层文本不对齐。在某些布局中,高亮显示会与它们标记的内容分离,使建议预览看起来像是损坏了。

在 TinyMCE 8.7.0 中,预览叠加层在调整窗口大小时会跟踪更广泛的大小变化。差异叠加层现在会与生成的内容保持对齐,从而使 AI 建议预览保持准确。

减少了 AI 审查建议卡片中的间距

以前,AI 审查侧边栏中的审查建议卡片使用的内边距超出了预期,导致卡片布局与设计看起来不一致。

在 TinyMCE 8.7.0 中,卡片页眉和正文之间的间距已减少以匹配设计。审查建议卡片现在具有更紧凑和一致的外观。

使用高级雪白皮肤时,编辑器内容会透过 AI 建议预览显示出来

以前,使用高级雪白皮肤时,AI 建议预览叠加层具有透明背景。底层编辑器内容会透过预览显示出来,使阅读和评估 AI 生成的建议变得困难。

在 TinyMCE 8.7.0 中,AI 建议预览在雪白皮肤中使用纯白色背景。建议现在显示在干净、无遮挡的背景上。

预览页脚中的键盘导航现在会聚焦当前活动的视图模式,而不是总是聚焦第一个视图模式

以前,将键盘焦点移到 AI 聊天中的预览页脚时,总是会落在第一个视图模式选项上,而不是当前活动的视图模式。这使差异模式和预览标签页之间的键盘导航变得不太可预测。

在 TinyMCE 8.7.0 中,焦点会移到预览页脚中当前活动的视图模式。键盘导航现在会反映当前选中的视图模式。

在离开未解决的建议之前(例如切换到另一个侧边栏或在快速操作期间打开侧边栏时),现在会出现一个确认对话框

以前,当 AI 建议仍未解决时,在 AI 聊天和审查侧边栏之间切换,或在快速操作期间打开侧边栏,会永久丢弃这些建议和任何已应用的更改。一次意外的点击就可能导致进度丢失。

在 TinyMCE 8.7.0 中,在离开未解决的建议之前会出现一个确认对话框。只有在确认后才会执行操作,从而防止意外丢失正在进行的更改。

在 Safari 中,当悬停在用省略号缩短的上下文源或对话标题上时,会同时显示两个工具提示

以前,在 Safari 中,悬停在用省略号缩短的文本(如 AI 聊天对话标题或上下文源)上时,可能会同时显示两个工具提示:浏览器的原生工具提示和插件的自定义工具提示。

在 TinyMCE 8.7.0 中,这些元素在 Safari 中仅显示原生工具提示。现在,悬停时会按预期显示一个工具提示。

中止并开始新对话时可能会报告错误

以前,中止流式 AI 响应并开始新对话时可能会报告错误。中止响应会触发文档删除操作,该操作有时会失败。

在 TinyMCE 8.7.0 中,中止 AI 请求时不再删除文档。中止响应并开始新对话不再会报告此错误。

AI 响应 HTML 现在会在预览中显示之前通过编辑器的内容管道进行过滤

以前,AI 预览中显示的内容在应用之前不会通过编辑器的内容规则进行过滤。在使用严格模式配置时,更改可能会出现在预览中,被接受,然后在应用到编辑器时被移除,因此最终结果与预览不匹配。

在 TinyMCE 8.7.0 中,AI 响应 HTML 在显示在预览中之前会通过编辑器的内容管道进行过滤。预览现在会反映将添加到编辑器中的内容,如果过滤移除了所有内容,则会通知用户。

如果侧边栏在模型开始响应之前关闭,AI 聊天状态会丢失

以前,如果聊天侧边栏在模型开始响应提示之前关闭,AI 聊天对话的状态可能会丢失。插件仅在响应开始时记录是哪个侧边栏启动了响应,因此提前关闭侧边栏不会留下记录。然后,重新打开侧边栏会重置对话和任何待处理的预览。

在 TinyMCE 8.7.0 中,只要提示发送成功,侧边栏就会被记录。在响应准备就绪之前关闭并重新打开 Chat 侧边栏不会再重置对话。

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

改进

TinyMCE 8.7.0 还包括以下改进:

移除表情符号对话框“全部”标签页的 300 个项目限制

此前,表情符号对话框将全部标签页限制为 300 个项目。这一限制是一种变通方案,因为渲染所有可用表情符号(超过 1,200 个)会导致性能问题和体验卡顿。

在 TinyMCE 8.7.0 中,表情符号对话框的渲染性能得到优化,全部标签页的 300 个项目限制已被移除。现在所有可用表情符号都会显示。

在打开的菜单上按 Tab 或 Shift+Tab 会关闭菜单并将焦点移动到下一个或上一个可聚焦元素

此前,在打开的下拉菜单内按 Tab 或 Shift+Tab 会在菜单项之间循环焦点,而不会关闭菜单。这种行为不符合无障碍指南,该指南建议使用 Tab 键关闭菜单并将焦点移动到 Tab 顺序中的下一个或上一个元素。因此,对于依赖键盘或辅助技术的用户来说,通过键盘导航菜单的可预测性较差。

在 TinyMCE 8.7.0 中,在打开的菜单上按 Tab 或 Shift+Tab 现在会关闭菜单,并将焦点移动到 Tab 顺序中的下一个或上一个可聚焦元素。这使得键盘导航更具可预测性,并使下拉菜单行为符合无障碍指南。

编辑器调整大小手柄现在使用浏览器指针事件,以在不同集成环境中提供更可靠的行为

此前,编辑器调整大小手柄依赖于覆盖元素来捕获指针移动,这需要提高编辑器的堆叠顺序。这导致在编辑器调整大小期间,编辑器出现在 TinyMCE AI 插件使用的浮动侧边栏之上。

在 TinyMCE 8.7.0 中,调整大小手柄改用现代浏览器指针事件。这消除了对覆盖元素和提高堆叠顺序的需求,在不同集成环境中提供更可靠的调整大小体验,并解决了与浮动侧边栏的重叠问题。

新增功能

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

用于屏幕阅读器播报的新 tinymce.dom.AriaAnnouncer API

TinyMCE 8.7.0 添加了 tinymce.dom.AriaAnnouncer API,用于通过 aria-live 区域向屏幕阅读器发送消息,而不会移动焦点。announce 方法接受一个消息和一个可选的 { assertive } 设置。集成者可以使用它来播报格式更改,例如通过监听 FormatApply 和 FormatRemove 事件。

tinymce.dom.AriaAnnouncer.announce('Bold on');
tinymce.dom.AriaAnnouncer.announce('Error occurred', { assertive: true });

变更

TinyMCE 8.7.0 还包括以下变更:

将 LESS 数学模式从 always 更改为 parens-division

此前,Oxide Less 编译器使用 math: 'always' 运行,这会将每个 / 字符视为除法运算符。使用现代 CSS 颜色语法时,Oxide Less 编译器可能会错误地编译诸如 rgb(10 10 10 / 10%) 或 hsl(from var(--color) h s l / 10%) 之类的函数。在某些情况下,编译器会静默生成错误值且不发出警告,例如 rgb(10 10 10 / 10%) 变成 rgb(10, 10, 1),而不是保留 alpha 通道。

在 TinyMCE 8.7.0 中,Oxide Less 编译器使用 parens-division 数学模式。编译器仅在操作被括号包裹时才计算除法,并保留 CSS 颜色语法中的 /。TinyMCE 更新了 Oxide Less 文件中现有的除法表达式,以用括号包裹除法。编译 Oxide Less 的自定义皮肤作者必须用括号包裹除法操作。

从源代码构建 TinyMCE 现在使用 Bun 而不是 Yarn

此前,从源代码构建 TinyMCE 需要 Yarn,并且仓库提供了 yarn.lock 文件来锁定依赖项版本。贡献者和自定义皮肤作者运行诸如 yarn、yarn build 和 yarn oxide-start 之类的命令。

在 TinyMCE 8.7.0 中,仓库使用 Bun 进行包管理和构建脚本,并提供 bun.lock 文件取代 yarn.lock。等效的命令是 bun install、bun run build 和 bun oxide-start。Yarn 不再解析仓库依赖项。此变更不影响从 npm 安装 TinyMCE 或从内容分发网络(CDN)加载它的集成者。有关更新后的皮肤构建步骤,请参阅创建皮肤。

Bug 修复

TinyMCE 8.7.0 还包括以下 bug 修复:

块级格式化现在在跨表格单元格选择时针对正确的元素

此前,当选择多个表格单元格时,检查块是否可重命名不会检查嵌套元素。例如,如果一个包含标题的引用块,应用新标题格式会更改引用块而不是标题。

在 TinyMCE 8.7.0 中,检查会检查嵌套元素,因此块级格式会应用到正确的元素。

现在可以在选择不可编辑的内联元素时应用块级格式

以前,当选择一个内联的 contenteditable="false" 元素(如被 Media 插件包裹的 iframe),然后应用块级格式(例如自定义类或标题样式)时,操作会静默失败,不产生任何效果。

在 TinyMCE 8.7.0 中,块级格式在这种情况下会应用于最近的可编辑父块,包括添加类、样式以及更改块标签。

缩进现在应用于所有选中的表格单元格

以前,选中多个表格单元格后应用缩进,仅影响指针松开所在的单元格。此行为使用的是浏览器的原生选区,而非编辑器的单元格选区,因此其余被选中的单元格保持不变。

在 TinyMCE 8.7.0 中,缩进应用于选区中的所有单元格。

拖放或复制粘贴图片时,未向标签添加 width 和 height 属性。

以前,当用户将图片拖放或复制粘贴到编辑器中时,TinyMCE 会插入一个不包含 width 和 height 属性的 img 标签。所插入的 img 标签缺少“图片”对话框会添加的尺寸属性。

在 TinyMCE 8.7.0 中,编辑器会读取拖放或粘贴图片的尺寸,并将 width 和 height 属性添加到 img 标签中。拖放或粘贴的图片现在会包含与“图片”对话框添加的相同的 width 和 height 属性。

当编辑器托管在 shadow DOM 中且其父元素设置了 overflow:scroll 时,工具提示会被裁剪。

以前,当 TinyMCE 运行在 shadow DOM 中(例如 Web 组件),并且宿主元素的父级元素使用了 overflow: scroll 时,该元素会裁剪掉超出宿主元素边界的工具提示。被裁剪的工具提示可能变得不可读。

TinyMCE 8.7.0 将工具提示的定位限制在宿主元素的边界内。当 TinyMCE 运行在 shadow DOM 中时,工具提示现在会重新定位以保持在宿主元素内部,并保持可见。

删除列表项中的换行符会删除整个列表项。

以前,在一个本为空的列表项内按 Backspace 删除换行符(<br>)时,会删除整个列表项,而不仅仅是换行符。该问题影响使用 Shift + Enter 创建的列表(包括嵌套列表),并会在没有警告的情况下删除内容。

在 TinyMCE 8.7.0 中,Backspace 仅移除换行符,并保留空的列表项。

style 属性中的 CSS 自定义属性名称和颜色值在解析时被转为小写

以前,TinyMCE 的样式解析器在读取 style 属性时,会将 CSS 自定义属性名称(例如 --MyColor)以及 color 和 background-color 的值转为小写。这会改变区分大小写的值,包括 CSS 自定义属性、模板占位符(如 {{FooBar}})以及十六进制颜色(如 #AABBCC),导致受影响的样式有时无法按设计原样呈现。

在 TinyMCE 8.7.0 中,样式解析器会保留 CSS 自定义属性名称以及 color 和 background-color 值的原始大小写。标准属性名称仍会转为小写,其他处理(如 RGB 到十六进制的转换、简写合并以及安全过滤)保持不变。区分大小写的颜色和自定义属性现在将完全保持与创作时一致。

深色模式下的聚焦链接文本颜色与背景相同

以前,在深色模式下,被聚焦或选中的链接会以与背景相同的文本颜色显示。这导致链接文本在被选中时无法阅读。

在 TinyMCE 8.7.0 中,深色模式下选中的链接文本以白色显示。链接在聚焦时保持可读,提升了深色模式下的可访问性。配置为 position 'line' 的上下文工具栏在溢出视口时未重新定位到对侧

以前,配置了 position: 'line' 的上下文工具栏(例如 quickbar)在溢出视口边缘时不会重新定位。在这种情况下,工具栏可能被截断,导致用户无法点击其按钮。

在 TinyMCE 8.7.0 中,使用 position: 'line' 的上下文工具栏在空间不足时会翻转到对侧。该工具栏在受限布局中保持完全可见和可用。

部分带批注的文本在打印时被隐藏,尽管其本应可见

以前,由批注功能(如拼写指示器)标记的文本在打印页面时可能被隐藏。这些批注被包裹在内部的占位符元素中,这些占位符在打印时会被隐藏,从而也隐藏了其中的文本。

在 TinyMCE 8.7.0 中,仅作为包裹层的占位符元素在打印时会隐藏其样式而非其内容。批注高亮在打印输出中保持隐藏,而底层文本则按预期打印出来。规避了一个 Chromium 浏览器的 bug,该 bug 可能导致点击 li 右侧时操作失败

以前,点击列表项内容右侧时,光标可能会被置于列表项的开头,而非点击的位置。这是由 Chromium 浏览器的一个 bug 引起的,该 bug 会将插入符移动到错误的位置。

在 TinyMCE 8.7.0 中,一个针对性的规避方案会检测这种情况并纠正插入符位置。现在,点击列表项右侧会将光标置于预期位置。

使用撤销快捷键未能正确恢复编辑器选区

以前,在删除选区后按下 undo 键盘快捷键(Windows/Linux 上为 Ctrl+Z,macOS 上为 Cmd+Z)可能会导致光标位置错误。此前的一项更改会在每次按下 Ctrl 或 Cmd 时注册一个额外的撤销步骤,因此该步骤会在删除的内容被恢复之前就被记录下来。

在 TinyMCE 8.7.0 中,TinyMCE 仅当 Ctrl 或 Cmd 与 Backspace 或 Delete 键同时按下时才会注册该撤销步骤,而不是在每次按下 Ctrl 或 Cmd 键时都注册。现在,撤销对选区的删除操作会正确地恢复内容和原始选区。

在没有本地构建的情况下启动 Oxide 皮肤演示会失败,并显示不明确的错误

以前,如果未从仓库根目录构建 TinyMCE,就直接启动 Oxide 皮肤演示,会报错 chalk.red is not a function。演示构建任务尝试报告缺少本地构建的情况,然后替换为云端托管的 TinyMCE 副本。但报告步骤本身抛出了错误。自定义皮肤的作者无法运行演示来测试皮肤更改,而且错误消息并未指出缺少本地构建是导致失败的原因。

在 TinyMCE 8.7.0 中,演示构建任务会停止并显示一条指明所需步骤的消息:

Local TinyMCE build not found. Run `bun run build` in the repository root to build TinyMCE before starting the skin demo.

演示构建任务不再替换为云端托管的 TinyMCE 副本,因此演示始终针对本地构建运行。自定义皮肤的作者现在可以通过在启动演示前构建 TinyMCE 来解决此失败问题。