以下是 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 一同发布。

修订历史

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 toolbar button 和 menu item,以及 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。

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 事件和序列化器节点过滤器,因此集成者可以应用针对 PDF 导出的内容过滤,而不影响常规内容检索。

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

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 事件和序列化器 node filters,因此集成者可以针对 Word 导出应用内容过滤,而不会影响常规内容检索。

有关在导出期间过滤内容的信息,请参见:Export-specific content filtering。有关 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 包中,并可作为独立附加组件 .zip 从 Tiny Account 下载。该插件仅作为附加组件分发,不包含在任何 TinyMCE ZIP 捆绑包中。

自托管插件仍必须连接到 AI 服务实例。可将其指向托管的 Tiny Cloud AI 服务,或部署 自托管 AI 服务,以将内容保留在主机网络内。有关安装步骤,请参见:Quick start: TinyMCE from NPM or Yarn。有关插件配置的信息,请参见:TinyMCE AI。

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

此前,当编辑器 body 元素在自定义 content_style 中使用 position: relative 时,预览快速操作(如 Translate)会显示错位的差异覆盖层。该覆盖层将 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 工具时,该字符串会显示为 Chat 侧边栏中的状态消息。

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

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

聊天现在可以更新空文档。

以前,聊天在生成内容时不会更新空文档。聊天只在聊天侧边栏中显示生成的内容,因为当文档没有内容时,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。

现在 unwrap 嵌套列表项的 prompts 会保留内容

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

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

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

现在图像编辑会作用于包含多张图像内容中的正确图像

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

集成商现在可以通过 tinymceai_reviews 选项添加自定义 AI reviews

此前,Review 侧边栏仅支持一组固定的内置 reviews,可通过 tinymceai_reviews 选项按 ID 选择。集成商没有受支持的方式来添加命名 reviews、参数化 prompts,或混合内置与自定义 reviews 的菜单。集成商不得不依赖通用流程(例如 Custom 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 流程中保持一致。

现在仅当内容过长无法完整显示时才显示部分 tooltips

此前,TinyMCE AI 界面中的某些 tooltips 只要满足触发条件就会显示,即使内容已完全可见。这增加了不必要的视觉冗余。

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

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 中,卡片标题和正文之间的间距已减少以匹配设计。审核建议卡片现在具有更紧凑、一致的外观。

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

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

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

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

以前,在 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 键应关闭菜单并将焦点移至标签顺序中的下一个或上一个元素。因此,对于依赖键盘或辅助技术的用户来说,通过菜单进行键盘导航的可预测性较低。

在 TinyMCE 8.7.0 中,在打开的菜单上按 Tab 或 Shift+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)加载它的集成人员。有关更新后的皮肤构建步骤,请参阅创建皮肤。

错误修复

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

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

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

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

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

以前,当选择像 contenteditable="false" 这样的内联元素(例如由 Media 插件包裹的 iframe),并应用块级格式(如自定义类或标题样式)时,操作会静默失败且没有效果。

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

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

以前,当选择多个表格单元格时应用缩进,只影响指针释放所在的单元格。该操作使用浏览器的原生选择而非编辑器的单元格选择,因此其他选定的单元格保持不变。

在 TinyMCE 8.7.0 中,缩进应用于选区内的每个单元格。

拖放或复制粘贴图片不会在标签中添加 width 和 height。

以前,当用户将图片拖放到或复制粘贴到编辑器中时,TinyMCE 插入的 img 标签不包含 width 和 height 属性。插入的 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 中点击 li 右侧可能失败的 bug

以前,点击列表项内容右侧时,光标可能会放置在项目的开头,而不是点击的位置。这是由 Chromium 浏览器的 bug 导致光标移动到不正确的位置。

在 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 中,演示构建任务会停止并显示指明所需步骤的信息:

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

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