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

概述

TinyMCE 8.7.0 于 2026 年 6 月 30 日星期二正式发布,适用于 TinyMCE Enterprise 和 Tiny Cloud。本发行说明概述了 TinyMCE 8.7.0 的变更内容,包括:

  • 配套的 Premium 插件变更

  • 改进

  • 新增

  • 变更

  • Bug 修复

配套的 Premium 插件变更

以下 Premium 插件更新与 TinyMCE 8.7.0 同步发布。

修订历史 (Revision History)

TinyMCE 8.7.0 版本包含配套的 Revision History Premium 插件更新。

Revision History 包含以下新增功能。

修订可归属于 AI 并显示 AI 徽标

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

有关将修订归属于 AI 的详细信息,请参阅 Attributing AI-assisted revisions。

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

建议编辑 (Suggested Edits)

TinyMCE 8.7.0 版本包含配套的 Suggested Edits Premium 插件更新。

Suggested Edits 包含以下改进和新增功能。

AI 辅助建议可显示 AI 徽标

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

suggestededits_model schema 现已升级至版本 2。加载时,使用版本 1 保存的模型将被自动迁移。

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

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

由于切换跟踪功能会从根本上改变 Suggested Edits 的使用体验,因此默认情况下不包含该按钮和菜单项。必须在编辑器配置中明确将它们添加到工具栏或菜单中。

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

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

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

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

导出为 PDF (Export to PDF)

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

Export to PDF 包含以下新增功能。

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

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

有关在导出过程中过滤内容的信息,请参阅:Export-specific content filtering。有关 Export to PDF 插件的信息,请参阅:Export to PDF。

导出为 Word (Export to Word)

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

Export to Word 包含以下新增功能。

现在可以在 getContent 的事件和 nodeFilter 中使用 export 属性。

Export to Word 插件现在会使用 export 属性设置为 word 的参数调用 tinymce.editor.getContent()。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 内容时,未包含全页页眉和页脚

此前,当启用 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 包中,并可作为独立的附加组件 .zip 下载从 Tiny Account 获取。该插件仅作为附加组件分发,不包含在任何 TinyMCE ZIP 捆绑包中。

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

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

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

在 TinyMCE 8.7.0 中,diff 叠加层独立于编辑器内容样式渲染。叠加层无论自定义 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 Review 侧边栏的 Custom review 部分中的文本区域即使为空也会显示滚动条。占位符文本可以滚动,并且文本区域的角落看起来被截断,这使得该控件看起来损坏了。

在 TinyMCE 8.7.0 中,Custom review 文本区域使用更大的默认高度,因此占位符无需滚动条即可容纳,并且在为空时文本区域能正确渲染。

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

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

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

由于无法对 Chat 和 Actions 预览模式中的高亮建议执行后续操作,点击它们时不再显示选中状态。

此前,在 TinyMCE AI Chat 和 TinyMCE AI Quick Actions 的预览模式中,点击高亮建议会显示选中状态,尽管预览模式不为高亮建议提供任何操作。选中状态使得建议看起来像是可交互的,并导致用户期望预览模式提供但实际上并未提供的后续操作。

在 TinyMCE 8.7.0 中,TinyMCE AI Chat 和 TinyMCE AI Quick Actions 预览模式中的高亮建议不再响应点击,并且不再显示选中状态。高亮部分保持可见以供参考,因此预览模式呈现的是最终文本的只读视图。

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 中,上下文源上的移除按钮现在会立即取消正在进行中的上传。用户可以在上下文源仍在加载时将其移除,而无需等待请求完成。

Chat 现在可以更新空文档

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

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

Review 模式的键盘导航现在与 Chat 侧边栏一致

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

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

新增 tinymceai_reviews_change_tone_menu 选项以控制 Change Tone 审查菜单

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

应用审查后,Review 侧边栏不再显示“No improvements found”

此前,如果在模型仍在响应时隐藏了 Review 侧边栏,并且随后从 Preview 页脚应用或跳过了生成的建议,则审查状态不会被重置。重新打开 Review 侧边栏会显示“Review complete — no improvements found”,而不是审查列表,尽管审查已经完成。恢复审查选项的唯一方法是重新加载编辑器。

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

展开嵌套列表项的提示现在会保留内容

此前,当模型将嵌套块展开为顶层块(例如将<li>项转换为<p>段落)时,会复用原始元素 ID。差异比对逻辑将复用的 ID 视为对嵌套元素的更新,因此某些提示会间歇性地移除内容而非展开内容。现在,只有当复用的 ID 指向顶层元素时,才会将其视为现有块;否则将作为新元素处理。展开嵌套元素的编辑现在能可靠应用并保留内容。

返回更早的对话现在会继续该对话

此前,一个回归问题导致聊天侧边栏无法正确加载更早的对话。开始新聊天后,返回更早的对话并发送提示,会开启一次断开的交互,而非继续原始对话串。现在切换到现有对话会恢复其对话 ID,因此后续提示会继续所选对话。

图像编辑现在会在包含多张图像的内容中定位到正确的图像

此前,发送给模型的图像未被唯一标识,因此引用特定图像的提示可能会将一张图像误认为另一张,并将更改(如 alt 文本更新)应用到错误的图像上。TinyMCE AI现在会为每个img元素分配唯一标签,以减少误判。现在,即使内容包含多张图像,图像编辑也会应用到目标图像上。

集成者现在可以使用tinymceai_reviews选项添加自定义 AI 审阅

此前,审阅侧边栏仅支持一组固定的内置审阅,需通过tinymceai_reviews选项按 ID 选择。集成者没有受支持的方式添加命名审阅、参数化提示,或混合内置与自定义审阅的菜单。集成者只能依赖通用流程(如“自定义审阅”),而非审阅侧边栏中的专用审阅操作。

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

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

此前,在审阅 AI 建议时,预览会将已删除文本和插入文本并排显示以表示替换。这使预览显得杂乱且更难阅读,因为需要同时解析原文和新内容,尤其是在文档包含多次替换时。

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

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

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

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

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

此前,在审阅 AI 建议时,批量操作按钮始终显示“跳过剩余”和“应用剩余”,即使在尚未应用或跳过任何建议之前也是如此。这令人困惑,因为尚未做出任何决定。

在 TinyMCE 8.7.0 中,批量操作按钮会反映当前进度。在首次决定之前,按钮显示“全部跳过”和“全部应用”;在至少应用或跳过一条建议后,按钮切换为“跳过剩余”和“应用剩余”。该行为在聊天和快速操作流程中保持一致。

部分工具提示现在仅在内容过长无法完整显示时出现

此前,TinyMCE AI 界面中的某些工具提示一旦满足触发条件就会显示,即使内容已完全可见。这增加了不必要的视觉干扰。

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

用户提示中的空白在 AI 聊天历史中未正确渲染

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

在 TinyMCE 8.7.0 中,AI Chat 历史记录中的用户提示会保留原有的换行和间距,同时长行仍会在消息内换行。提示现在会按输入时的原样显示。

将 AI 建议预览中仅含图标的按钮替换为带有标签的 Apply 和 Skip 按钮

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

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

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

以前,在 AI Chat 生成新内容后,调整浏览器窗口大小可能会导致 AI 建议差异覆盖层与底层文本不对齐。在某些布局中,高亮显示会脱离其标记的内容,使得建议预览看起来有问题。

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

减小了 AI Review 建议卡片中的间距

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

在 TinyMCE 8.7.0 中,卡片头部和正文之间的间距已减小以符合设计。review 建议卡片现在具有更紧凑、一致的外观。

使用 premium Snow 皮肤时,编辑器内容会透过 AI 建议预览显示

以前,在使用 premium Snow 皮肤时,AI 建议预览覆盖层具有透明背景。底层编辑器内容会透过预览显示,这使得阅读和评估 AI 生成的建议变得困难。

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

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

以前,将键盘焦点移至 AI Chat 中的预览页脚时,焦点总是落在第一个视图模式选项上,而不是当前激活的视图模式。这使得在 Diff 模式和 Preview 标签页之间的键盘导航变得不那么可预测。

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

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

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

在 TinyMCE 8.7.0 中,在离开未解决的建议之前会显示确认对话框。只有在确认后操作才会继续,从而防止意外丢失进行中的更改。在 Safari 中,当鼠标悬停在用省略号缩短的上下文源或对话标题上时,会同时显示两个工具提示

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

在 TinyMCE 8.7.0 中,在 Safari 中这些元素只会显示原生工具提示。现在,悬停时只会按预期显示一个工具提示。中止并开始新对话时可能会报告错误

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

在 TinyMCE 8.7.0 中,当 AI 请求中止时,文档不再被删除。中止响应并开始新对话不再报告此错误。AI 响应的 HTML 现在在显示到预览之前会通过编辑器的内容管道进行过滤

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

在 TinyMCE 8.7.0 中,AI 响应的 HTML 在显示到预览之前会通过编辑器的内容管道进行过滤。预览现在反映将被添加到编辑器的内容,如果过滤删除了所有内容,则会通知用户。如果侧边栏在模型开始响应之前关闭,AI Chat 状态会丢失

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

在 TinyMCE 8.7.0 中,一旦发送提示词,侧边栏就会被记录。在响应就绪之前关闭并重新打开聊天侧边栏,现在不再重置对话。

有关 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 顺序中的下一个或上一个可聚焦元素。这使得键盘导航更具可预测性,并使下拉菜单行为符合无障碍规范。

编辑器大小调整手柄现在使用浏览器 pointer events,以便在不同集成环境中获得更可靠的行为

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

在 TinyMCE 8.7.0 中,大小调整手柄改用现代浏览器的 pointer events。这样不再需要覆盖元素和提高层叠顺序,可在不同集成环境中提供更可靠的调整大小体验,并解决与浮动侧边栏重叠的问题。

新增

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)加载 TinyMCE 的集成人员。更新后的皮肤构建步骤请参阅 创建皮肤。

Bug 修复

TinyMCE 8.7.0 还包括以下 bug 修复:

在跨表格单元格选择时,块级格式化现在会作用于正确的元素

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

在 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中,深色模式下选定的链接文本将以白色显示。链接在聚焦时仍然可读,这提高了深色模式下的可访问性。

位置为'line'的上下文工具栏在溢出视口时不会重新定位到对面

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

在TinyMCE 8.7.0中,当空间不足时,使用position: 'line'的上下文工具栏现在会翻转到对面。工具栏在受限布局中仍然完全可见且可用。

一些标记的文本在打印时被隐藏,尽管它应该可见

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

在TinyMCE 8.7.0中,仅作为包装器使用的占位符元素在打印时会隐藏其样式而不是其内容。注释高亮在打印输出中仍然隐藏,而基础文本则按预期打印。

解决了一个Chromium错误,即点击li右侧可能会失败

以前,点击列表项内容右侧可能会将光标放在项的开头,而不是点击的位置。这是由Chromium浏览器错误引起的,该错误会将插入符号移动到不正确的位置。

在TinyMCE 8.7.0中,有针对性的变通方法会检测这种情况并纠正插入符号的位置。现在点击列表项右侧会将光标放置在预期位置。

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

此前,删除选区后按撤销快捷键(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 中,演示构建任务会停止并显示指出所需步骤的信息:

未找到本地 TinyMCE 构建。在启动皮肤演示之前,请在代码库根目录运行 `bun run build` 来构建 TinyMCE。

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