这些是 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 的详细信息,请参阅 归属 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 schema 已更新至版本 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 插件现在调用 tinymce.editor.getContent() 时会将 export 属性设置为 pdf。TinyMCE 会将该属性传递给 GetContent 事件和序列化器 node filter,因此集成人员可应用针对 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 插件现在会使用一个设置为 word 的 export 属性来调用 tinymce.editor.getContent()。TinyMCE 会将此属性传递给 GetContent 事件和序列化器的节点过滤器,这样集成商就可以应用专门针对 Word 导出的内容过滤,而不会影响常规的内容检索。
有关在导出过程中过滤内容的信息,请参阅:Export-specific content filtering。有关 Export to Word 插件的信息,请参阅:Export to Word。
Page Embed
TinyMCE 8.7.0 版本包含了 Page Embed 高级插件的一个配套发布版本。
Page Embed 包含以下修复。
使用 pageembed 插件插入的 Iframes 无法通过左对齐、居中和右对齐工具栏按钮进行对齐。
以前,左对齐、居中和右对齐工具栏按钮对使用 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 包中,并且可以从 Tiny Account 下载为一个独立的附加组件 .zip 文件。该插件仅作为附加组件分发,不包含在任何 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 时,预览快速操作(例如翻译)会显示错位的差异叠加层。叠加层将 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 聊天和 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。
解包嵌套列表项的提示现在会保留内容
以前,当模型将嵌套块解包为顶层块(例如将 <li> 项转换为 <p> 段落)时,它会复用原始元素 ID。diffing 逻辑将复用的 ID 视为对嵌套元素的更新,因此某些提示会间歇性地移除内容,而不是将其解包。现在,只有当复用的 ID 指向顶层元素时,才会将其视为现有块;否则,将将其作为新元素处理。解包嵌套元素的编辑现在可以可靠地应用并保留内容。
切换回更早的对话现在会继续该对话
以前,一个回归错误导致较早的对话无法在 Chat 侧边栏中正确加载。开始新聊天后,返回到较早的对话并发送提示会开始一次不连贯的交互,而不是继续原始线程。现在,切换到现有对话会恢复其对话 ID,因此后续提示会继续所选的对话。
图像编辑现在会针对内容中多个图像的正确图像
以前,发送给模型的图像没有被唯一标识,因此引用特定图像的提示可能会将一个图像误认为另一个图像,并将更改(例如 alt 文本更新)应用到错误的图像。TinyMCE AI 现在会为每个 img 元素添加唯一标签,因此它们不太可能被混淆。现在,即使内容包含多个图像,图像编辑也会应用到目标图像。
集成商现在可以使用 tinymceai_reviews 选项添加自定义 AI review
以前,Review 侧边栏仅支持一组固定的内置 review,通过 tinymceai_reviews 选项按 ID 选择。集成商没有受支持的方法来添加命名 review、参数化提示或混合内置和自定义 review 的菜单。集成商不得不依赖通用流程(例如 Custom review),而不是 Review 侧边栏中的专用 review 操作。
在 TinyMCE 8.7.0 中,tinymceai_reviews 选项除了现有的内置字符串 ID 外,还接受集成商定义的 review 对象。集成商可以定义 simple、list 和 input review 类型,每种类型都有自定义名称、描述和提示。有关完整 schema 和示例,请参阅 tinymceai_reviews 选项。
当内容被替换时,AI 建议预览不再显示已删除的文本
以前,在查看 AI 建议时,预览会将已删除文本和插入文本并排显示以进行替换。这会使预览变得杂乱且难以阅读,因为必须同时解析原始内容和新内容,尤其是当文档包含多个替换时。
在 TinyMCE 8.7.0 中,预览会隐藏替换中的已删除文本,仅显示新内容。当选择替换时,会显示并高亮插入的内容,而已删除的文本保持隐藏。单独的删除操作在选择时会继续显示已删除的文本,因此纯删除操作保持完全可见。这使预览在查看 AI 生成的更改时更加简洁易读。
AI 预览与编辑器内容结构不匹配,导致样式渲染差异
以前,AI 建议预览会在预览 iframe body 内的 wrapper 元素中渲染内容,而不是像编辑器那样直接渲染到 iframe body 中。由于预览和编辑器的结构不同,注入的样式可能会以不同方式渲染。绝对定位元素和 body 级别的 CSS 规则并不总是以相同方式应用,这可能会导致表格标题和页脚错位等故障。
在 TinyMCE 8.7.0 中,预览会将内容直接插入到 iframe body 中,使其结构与编辑器一致。注入的样式现在会在两者中产生相同的视觉结果,并且预览与编辑器的渲染保持一致。
查看 AI 建议时的批量操作按钮现在会反映当前进度
以前,在查看 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 历史记录中未正确渲染
此前,AI 聊天历史中显示的用户提示词会折叠连续的空格和换行符。多行提示词会显示为一长串连续文本,因此聊天线程中的消息与实际输入的内容不一致。
在 TinyMCE 8.7.0 中,AI 聊天历史中的用户提示词将保留原始的换行和间距,长行内容仍会在消息内自动换行。提示词现在将按输入时的原样显示。
将 AI 建议预览中的纯图标按钮替换为带有“应用”和“跳过”标签的按钮
此前,AI 建议预览使用了仅包含图标的接受和拒绝按钮,因此每个操作的含义只能依赖图标及其工具提示(tooltip)来判断。这使得这些操作的含义不够明确,且较难被发现。
在 TinyMCE 8.7.0 中,AI 建议预览使用了带有标签的按钮:一个主要的 Apply 按钮用于接受建议,一个次要的 Skip 按钮用于拒绝建议。更清晰的标签使每个操作一目了然,并提高了可访问性。
在调整浏览器窗口大小时,AI 建议的差异(diff)覆盖层有时无法保持对齐
此前,在 AI 聊天生成新内容后,调整浏览器窗口大小可能会导致 AI 建议的差异覆盖层与底层文本错位。在某些布局中,高亮显示会脱离其标记的内容,使得建议预览看起来像是损坏了。
在 TinyMCE 8.7.0 中,预览覆盖层可追踪更广泛的窗口大小变化。差异覆盖层现在能与生成的内容保持对齐,从而确保 AI 建议预览的准确性。
减少了 AI 审查建议卡片的间距
此前,AI 审查侧边栏中的审查建议卡片使用的内边距(padding)超过了预期,这使得卡片布局看起来与设计不一致。
在 TinyMCE 8.7.0 中,卡片标题与正文之间的间距已减小,以符合设计要求。审查建议卡片现在具有更紧凑且一致的外观。
使用 premium Snow 皮肤时,编辑器内容会穿透 AI 建议预览可见
此前,在使用 premium Snow 皮肤时,AI 建议预览覆盖层的背景是透明的。底层的编辑器内容会穿透预览显示出来,这使得用户难以阅读和评估 AI 生成的建议。
在 TinyMCE 8.7.0 中,AI 建议预览在 Snow 皮肤中使用了纯白色背景。建议现在显示在干净、无遮挡的背景上。
预览页脚的键盘导航现在会聚焦当前激活的视图模式,而不是始终聚焦第一个
此前,将键盘焦点移至 AI 聊天预览页脚时,焦点总是落在第一个视图模式选项上,而不是当前激活的选项上。这使得在差异模式(Diff mode)和预览选项卡之间的键盘导航变得不可预测。
在 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 预览中的内容在应用之前不会经过编辑器内容规则的过滤。在严格的模式(schema)配置下,更改可能会显示在预览中并被接受,但在应用到编辑器时被移除,导致最终结果与预览不符。
在 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 会插入一个不带 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 仅删除换行符,并保留空的列表项。
样式属性中的 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 导致的,该 bug 会将插入符移动到错误的位置。
在 TinyMCE 8.7.0 中,有针对性的修复会检测这种情况并纠正插入符位置。现在点击列表项右侧会将光标置于预期位置。
使用撤销键盘快捷键未能正确恢复编辑器选区
以前,在删除所选内容后按下 undo 键盘快捷键(Ctrl+Z 或 macOS 上的 Cmd+Z)可能会导致光标位置错误。之前的更改在每次按下 Ctrl 或 Cmd 时都会注册一个额外的 undo 步骤,因此在恢复删除的内容之前会先记录该步骤。
在 TinyMCE 8.7.0 中,TinyMCE 仅在按下 Ctrl 或 Cmd 同时按下 Backspace 或 Delete 时才会注册该 undo 步骤,而不是在每次按下 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 来解决失败问题。