以下是 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 版本包含 修订历史 Premium 插件的配套版本。
修订历史 包含以下新增功能。
修订可标记为 AI 生成并显示 AI 徽章
修订现支持可选的 metadata 属性。将其 source 字段设置为 'ai' 可将修订标记为 AI 辅助生成,使集成人员能够跟踪由 TinyMCE AI 插件生成的内容。默认情况下,AI 辅助生成的修订卡片会显示 AI 徽章。将新增的 revisionhistory_ai_attribution 选项设为 false 可隐藏该徽章。
有关将修订标记为 AI 生成的详细信息,请参阅 将 AI 辅助生成的修订标记为 AI 生成。
有关 修订历史 插件的信息,请参阅:修订历史。
建议编辑
TinyMCE 8.7.0 版本包含 建议编辑 Premium 插件的配套版本。
建议编辑 包含以下改进和新增功能。
AI 辅助的建议可显示 AI 徽章
建议编辑现会记录使用 TinyMCE AI 插件所做的编辑,并将其标记为 AI 辅助生成。默认情况下,这些编辑的卡片上会显示 AI 徽章。将新增的 suggestededits_ai_attribution 选项设为 false 可隐藏该徽章。
suggestededits_model schema 现为版本 2。加载时,使用版本 1 保存的模型会自动迁移。
跟踪建议现可切换
建议编辑现支持在编辑过程中切换建议跟踪。新增的 suggestededits-tracking 工具栏按钮 和 菜单项,以及 SuggestedEditsToggleTracking 命令,让用户能够在以建议形式跟踪编辑或直接将编辑应用于内容之间切换。suggestededits_auto_approve 配置选项现在也会控制它们的默认状态。
由于切换跟踪会从根本上改变建议编辑的体验,该按钮和菜单项默认不包含在内。必须在编辑器配置中明确将其添加到工具栏或菜单。
审查完成时,建议编辑 hasChanges 事件现在也会触发
以前,SuggestedEditsHasChangesUpdate 事件只会与其他编辑器事件(如输入、选择或聚焦)一同触发。单独完成审查不会触发该事件,因此 hasChanges API 返回的值可能会过时。这样一来,任何依赖该 API 的集成在审查完成时都不会收到更新。
在 TinyMCE 8.7.0 中,每当 hasChanges API 中的值发生变化时,SuggestedEditsHasChangesUpdate 事件就会触发,包括审查完成时。
有关 建议编辑 插件的信息,请参阅:建议编辑。
导出为 PDF
TinyMCE 8.7.0 版本包含 导出为 PDF Premium 插件的配套版本。
导出为 PDF 包含以下新增功能。
现在可以在 getContent 的事件和 nodeFilter 中指定 export 类型。
导出为 PDF 插件现在调用 tinymce.editor.getContent() 时会将 export 属性设为 pdf。TinyMCE 会将此属性传递给 GetContent 事件和序列化程序节点过滤器,因此集成人员可以应用针对 PDF 导出的内容过滤,而不会影响常规的内容检索。
有关在导出过程中过滤内容的信息,请参阅:导出特定的内容过滤。有关 导出为 PDF 插件的信息,请参阅:导出为 PDF。
导出为 Word
TinyMCE 8.7.0 版本包含 导出为 Word Premium 插件的配套版本。
导出为 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 包含以下改进、修复和新增内容。
在 npm-premium 和 ZIP 下载中添加 TinyMCE AI 插件。
从 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 时,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 工具时显示在聊天侧边栏中的状态消息。
空的自定义审阅 textarea 会显示滚动条。
以前,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 中,当侧边栏隐藏时,从 Preview 页脚应用或跳过建议后,review 状态现在能正确重置。重新打开 Review 侧边栏会再次显示 review 列表,因此无需重新加载编辑器即可运行进一步的 review。
现在 unwrap 嵌套列表项的提示会保留内容
此前,当模型将嵌套块 unwrap 为顶层块(例如将 <li> 项转换为 <p> 段落)时,会复用原始元素 ID。diffing 逻辑将这些复用的 ID 视为对嵌套元素的更新,因此某些提示会间歇性地删除内容而非 unwrap。现在,仅当复用的 ID 指向顶层元素时才会将其视为已有块;否则将作为新元素处理。unwrap 嵌套元素的编辑现在可以可靠应用并保留内容。
切换回更早的对话现在会继续该对话
此前,一次回归导致在 Chat 侧边栏中无法正确加载较早的对话。开始新聊天后,返回较早的对话并发送提示会开启一段断连的会话,而非继续原有 thread。切换到已有对话现在会恢复其 conversation ID,因此后续提示会继续所选对话。
在包含多张图片的内容中,图片编辑现在会作用于正确的图片
此前,发送给模型的图片未被唯一标识,因此引用特定图片的提示可能将一张图片误认为另一张,并将更改(例如 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 suggestions 预览不再显示被删除的文本
此前,在 review AI suggestions 时,对于替换操作,预览会将已删除文本与插入文本并排显示。这使得预览显得杂乱且更难阅读,因为需要同时解析原始内容与新内容,尤其在文档包含多次替换时更为明显。
在 TinyMCE 8.7.0 中,对于替换操作,预览会隐藏被删除的文本,仅显示新内容。选中替换后,会显示插入内容并高亮,而被删除的文本保持隐藏。独立的删除操作在选中时仍会显示被删除文本,因此纯删除保持完全可见。这使得在 review AI 生成的更改时,预览更清晰、更易读。
AI 预览与编辑器内容结构不一致,导致样式渲染差异
此前,AI suggestions 预览在预览 iframe body 内的 wrapper 元素中渲染内容,而不是像编辑器那样直接渲染到 iframe body。由于预览与编辑器结构不同,注入的样式可能以不同方式渲染。绝对定位元素和 body 级 CSS 规则并不总能以相同方式应用,从而导致表格表头与页脚错位等 glitches。
在 TinyMCE 8.7.0 中,预览会将内容直接插入 iframe body,从而使其结构镜像编辑器。注入的样式现在在两者中产生相同的视觉效果,并且预览会与编辑器一致渲染。
在 review AI suggestions 时,批量操作按钮现在会反映当前进度
此前,在 review AI suggestions 时,批量操作按钮始终显示 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 历史记录中用户提示的空白未被正确渲染
以前,AI Chat 历史记录中显示的用户提示词会折叠连续的空格和换行符。多行提示词显示为一个连续的单行,因此聊天线程中的消息与键入的内容不匹配。
在 TinyMCE 8.7.0 中,AI Chat 历史记录中的用户提示词保留其原始换行和空格,同时长行仍会在消息内换行。提示词现在显示为键入时的样子。
将 AI 建议预览中的仅图标按钮替换为带有标签的“应用”和“跳过”按钮
以前,AI 建议预览使用仅含图标的接受和拒绝按钮,因此每个操作的含义依赖于图标及其工具提示。这使得这些操作模糊不清且更难发现。
在 TinyMCE 8.7.0 中,AI 建议预览使用带标签的按钮:一个主要 应用 按钮用于接受建议,一个次要 跳过 按钮用于拒绝建议。更清晰的标签使每个操作一目了然,并提高了可访问性。
AI 建议差异覆盖层在调整浏览器窗口大小时并不总是保持对齐
以前,在 AI Chat 生成新内容后,调整浏览器窗口大小可能会导致 AI 建议差异覆盖层与底层文本不对齐。在某些布局中,高亮显示与它们标记的内容分离,使得建议预览看起来损坏。
在 TinyMCE 8.7.0 中,预览覆盖层在窗口大小调整时跟踪更广泛的大小变化集。差异覆盖层现在与生成的内容保持对齐,从而保持 AI 建议预览的准确性。
减少了 AI 审核建议卡片中的间距
以前,AI 审核侧边栏中的审核建议卡片使用了比预期更多的内边距,这使得卡片布局看起来与设计不一致。
在 TinyMCE 8.7.0 中,卡片头部和主体之间的间距已减少以匹配设计。审核建议卡片现在具有更紧凑和一致的外观。
使用高级 Snow 皮肤时,编辑器内容在 AI 建议预览中可见
以前,在使用高级 Snow 皮肤时,AI 建议预览覆盖层具有透明背景。底层编辑器内容在预览中显示出来,这使得阅读和评估 AI 生成的建议变得困难。
在 TinyMCE 8.7.0 中,AI 建议预览在 Snow 皮肤中使用纯白色背景。建议现在出现在干净、无障碍的背景上。
预览页脚中的键盘导航现在聚焦当前活动的视图模式,而不是总是第一个
以前,将键盘焦点移动到 AI Chat 中的预览页脚时,总是会落在第一个视图模式选项上,而不是当前活动的选项。这使得在差异模式和预览标签页之间的键盘导航不太可预测。
在 TinyMCE 8.7.0 中,焦点移动到预览页脚中的当前活动视图模式。键盘导航现在反映活动选择。
在离开未解决的建议之前现在会出现确认对话框,例如切换到另一个侧边栏或在快速操作期间打开侧边栏时
以前,在 AI 建议仍未解决时,在 AI Chat 和审核侧边栏之间切换,或在快速操作期间打开侧边栏,会永久丢弃这些建议和任何已应用的更改。一次意外的点击就可能导致进度丢失。
在 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 中,发送提示后侧边栏即被记录。在响应就绪前关闭并重新打开 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 顺序中的下一个或上一个可聚焦元素。这使键盘导航更具可预测性,并使下拉菜单行为与无障碍指南保持一致。
编辑器调整大小手柄现在使用浏览器 pointer events,以便在不同集成环境中更可靠地工作
此前,编辑器调整大小手柄依赖覆盖层元素来捕获指针移动,这需要提升编辑器的堆叠顺序。这导致在调整编辑器大小期间,编辑器会出现在 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 的 math 模式从 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 math 模式。编译器仅在运算被括号包裹时才进行除法求值,并会在 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 插入的 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 中,深色模式下选定的链接文本将显示为白色。链接在聚焦时保持可读,提高了深色模式下的可访问性。
位置设置为 'line' 的上下文工具栏在溢出视口时不会重新定位到另一侧
以前,配置为 position: 'line' 的上下文工具栏(如 quickbar)在溢出视口边缘时不会重新定位。在这种情况下,工具栏可能会被截断,导致用户无法点击其按钮。
在 TinyMCE 8.7.0 中,使用 position: 'line' 的上下文工具栏在空间不足时会翻转到另一侧。工具栏在受限布局中保持完全可见且可用。
一些带有注释的文本在打印时被隐藏,尽管应该可见
以前,当页面打印时,由注释功能(如拼写指示器)标记的文本可能会被隐藏。注释被包裹在打印时隐藏的内部占位符元素中,这也导致其中的内容被隐藏。
在 TinyMCE 8.7.0 中,仅作为包装器的占位符元素在打印时会隐藏其样式而不是内容。注释高亮在打印输出中保持隐藏,而底层文本则按预期打印。
修复了一个 Chromium 浏览器的 bug,即点击 li 右侧可能会失败
以前,点击列表项内容右侧可能会将光标放置在项的开头,而不是实际点击的位置。这是由于 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 来解决该问题。