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

概述

TinyMCE 8.0.0 于 2025 年 7 月 23 日星期三发布,适用于 TinyMCE Enterprise 和 Tiny Cloud。本发行说明提供了 TinyMCE 8.0.0 变更的概述,包括:

  • 新的 Premium 插件

  • 配套的 Premium 插件变更

  • 配套的 Enhanced Skins & Icon Packs 变更

  • 改进

  • 新增内容

  • 变更

  • 错误修复

  • 已弃用

本次发布包含对许可证密钥系统的破坏性变更。所有商业自托管部署必须更新其许可证密钥以使用新的 T8LK: 前缀格式。有关此内容及其他在考虑升级时的破坏性变更详情,请参阅 从 TinyMCE 7 迁移到 TinyMCE 8.0.0。

新的 Premium 插件

以下新的 Premium 插件随 TinyMCE 8.0.0 一同发布。

Suggested Edits

TinyMCE 8.0.0 发布包含了配套的 Suggested Edits Premium 插件。

Suggested Edits 插件允许多个用户协作编辑文档。审阅窗口会显示哪位用户提出了哪些建议,是否添加、删除、修改或替换了任何内容,并允许用户对这些建议提供反馈,或通过接受或拒绝它们进行最终审阅。

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

配套的 Premium 插件变更

以下 Premium 插件更新随 TinyMCE 8.0.0 一同发布。

Mentions

TinyMCE 8.0.0 发布包含了配套的 Mentions Premium 插件。

Mentions Premium 插件包含以下修复和移除。

深色模式下切换主题时 Mention 用户名未正确更新

此前,当在不同主题之间切换(特别是在深色模式下)时,Mention 卡片上显示的用户名未能正确更新。此问题导致用户名在深色背景中变得不可见,使用户难以阅读。

为解决此问题,已更新用户名的样式。该类现在使用 @text-color 变量作为默认样式,确保在项目激活时从父元素继承正确的颜色。此更改保证了用户名在浅色和深色主题中均保持可见且可读。

移除了未使用的 Mentions 插件样式表

在 8.0.0 版本中,未使用的 mentions.css 文件已从 Mentions 插件中移除。在早期版本(如 7.9)中,尽管该 CSS 文件的内容已在之前的更新中移至 Oxide 主题,但仍会加载此空的 CSS 文件。此更改确保了更清洁的资源加载,并避免了不必要的网络请求。

此次移除不影响插件功能,并适用于所有编辑器模式。

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

Spell Checker

TinyMCE 8.0.0 发布包含了配套的 Spell Checker Premium 插件。

Spell Checker Premium 插件包含以下修复和改进。

带有 lang 属性的内容有时拼写检查不正确。

此前,拼写检查器未能一致地处理标记有不同 lang 属性的内容,特别是当使用的语言代码格式不同时。这种不一致导致在使用交替大小写或分隔符约定(例如 en-GB 与 en_GB)的 span 中的单词漏检。

此问题是在 TinyMCE 6.4 中引入的,其中包含混合使用不同格式语言代码的文档无法可靠地进行拼写检查。因此,即使它们在 6.3 版本中按预期工作,在使用交替大小写或分隔符约定的 span 中的拼写错误单词也无法被检测到。

在 8.0.0 中,已恢复对混合大小写和混合格式语言代码的支持。拼写检查器现在能够正确识别和处理语言属性格式的变化,确保无论代码风格如何都能可靠地检查内容。此改进使得包含多种语言和不同地区惯例的文档能够准确进行拼写检查。

屏幕阅读器未播报拼写错误单词的输入标签。

在以前的版本中,拼写检查器对话框的拼写错误单词输入字段缺乏适当的可访问性标签,导致屏幕阅读器无法播报其用途。TinyMCE 8.0.0 通过为“拼写错误单词”文本与其输入字段之间添加适当的标签关联来解决这一可访问性限制。此增强功能使屏幕阅读器能够正确识别并播报输入字段的用途,从而改善依赖辅助技术用户的拼写检查体验。

语言代码标准化为 RFC5646/BCP47 格式

TinyMCE 8.0.0 发布引入了对使用 RFC5646(也称为 BCP47)格式的语言代码的标准支持。此更新适用于所有与语言相关的配置,包括:

  • UI 语言包(Premium 和社区版)

  • 拼写检查器语言代码

  • HTML lang 属性

  • 内容语言选择

变更

  • 语言代码现在使用连字符 (-) 代替下划线 (_)。例如:

    • 'en-US' 代替 'en_US'

    • 'zh-TW' 代替 'zh_TW'

    • 'pt-BR' 代替 'pt_BR'

  • 不带区域的基语言代码(例如 'en'、'es'、'fr')保持不变。

  • 语言包的文件名已更新为使用连字符。

  • 已更新 Premium 插件以识别符合 RFC5646 的代码。

向后兼容性

为确保平滑迁移

  • TinyMCE 8.0.0 同时支持带连字符和下划线的格式。

  • 当使用遗留的下划线格式时,会显示控制台警告。

  • TinyMCE 8.0.0 同时分发两种格式的语言包文件。

  • TinyMCE 9 将仅支持符合 RFC5646 的带连字符格式。

迁移

  1. 更新 tinymce.init 中的语言相关配置:

    language: 'en-US',
    spellchecker_language: 'en-US'
  2. 更新 content_langs 配置:

    content_langs: [
      { title: 'English (US)', code: 'en-US' },
      { title: 'Portuguese (Brazil)', code: 'pt-BR' }
    ]
  3. 重命名任何自定义词典文件以使用连字符(例如,'en-GB.txt' 代替 'en_GB.txt')。

  4. 确保任何服务器端集成或自定义语言包文件遵循新的命名约定。

此标准化使 TinyMCE 与现代 Web 标准保持一致,并提高了其多语言功能的一致性。

有关 Spell Checker Premium 插件的信息,请参阅:Spell Checker 插件;如需完整的支持语言列表,请参阅:支持的语言。

Accessibility Checker

TinyMCE 8.0.0 发布包含了配套的 Accessibility Checker Premium 插件。

Accessibility Checker Premium 插件包含以下改进。

可访问性:在 a11ychecker 插件中增强了图像可访问性检查

TinyMCE 8.0.0 在 a11ychecker 插件中引入了四个新的图像可访问性规则(Image rules),以提高合规性和编写指导。这些规则有助于识别与图像使用相关的常见可访问性问题,并提供可行的建议:

其他改进包括规则优先级系统以避免重复违规、集中的图像意图检测(例如装饰性、信息性、混合信号、不完整),以及更易读的用户界面消息。技术术语如"alternative text"已替换为"text description",修复说明现在更具上下文关联性和用户友好性。

用于无障碍检查器替代文本长度的新 a11ychecker_alt_text_max_length 配置选项

无障碍检查器插件新增了一个配置选项 a11ychecker_alt_text_max_length。此选项允许用户配置图像替代文本描述的最大允许长度。默认值为 150 个字符。例如:

tinymce.init({
  selector: 'textarea',
  plugins: 'a11ychecker',
  a11ychecker_alt_text_max_length: 150  // 将最大长度设置为 150 个字符
});

有关无障碍检查器插件的更多信息,请参阅:无障碍检查器。

PowerPaste

TinyMCE 8.0.0 发布版本包含配套的 PowerPaste 高级插件。

导入带有“无列表”级别的 Word 列表时解析失败。

当用户使用启用了 PowerPaste 的编辑器从 Microsoft Word 文档粘贴包含使用 Word“无列表”样式设置的列表的内容时,由于解析错误导致操作失败。结果,内容未插入编辑器,导致工作流程中断。TinyMCE 8.0.0 通过更新 PowerPaste 解析器以正确处理带有“无列表”样式的列表来解决此问题。因此,用户现在可以成功将此类内容粘贴到编辑器中而不会遇到错误。

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

Comments

TinyMCE 8.0.0 发布版本包含配套的 Comments 高级插件。

Comments 高级插件包含以下删除项。

移除了未使用的 Comments 样式表

在 8.0.0 版本中,未使用的 tinycomments.css 文件已从 Comments 插件中移除。在早期版本(如 7.9)中,尽管其内容已在之前的更新中移至 Oxide 主题,但该空的 CSS 文件仍被加载。此更改确保了更清洁的资源加载并避免了不必要的网络请求。

有关 Comments 插件的信息,请参阅:Tiny Comments 简介。

配套增强的皮肤与图标包更改

TinyMCE 8.0.0 发布版本包含配套的 Enhanced Skins & Icon Packs 发布。

增强的皮肤与图标包

Enhanced Skins & Icon Packs 发布包含以下更新:

重新构建了 Enhanced Skins & Icon Packs 以纳入也并入默认 TinyMCE 8.0.0 皮肤 Oxide 中的更改。

有关使用增强皮肤与图标包的信息,请参阅:增强的皮肤与图标包。

改进

TinyMCE 8.0.0 还包含以下改进:

增强的跨源资源处理

新增了一个基于函数的 crossorigin 配置选项,提供对跨源资源加载的细粒度控制。该函数接收资源 URL 和类型(脚本或样式表)作为参数,并可返回 'anonymous'、'use-credentials' 或未定义值来控制 crossorigin 属性。

示例:将 crossorigin="anonymous" 设置为脚本。
<script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/8/tinymce.min.js" referrerpolicy="origin" crossorigin="anonymous"></script>

或者;

示例:设置可重用的常量函数。
const crossOriginFunction = (url, resourceType) => {
    // 在此处返回 'anonymous' 或 'use-credentials' 将显式设置该属性
    return 'anonymous';
    // return 'use-credentials';
    // return undefined; // 通过返回 undefined 省略所有资源的 'crossorigin' 属性
};

tinymce.init({
  selector: "textarea",
  crossorigin: crossOriginFunction
});

此改进确保了不同部署场景下资源加载行为的一致性,并为脚本和样式表提供了更好的 CORS 设置控制。

更多详情,请参见 crossorigin 配置选项 文档。

现在可以通过按 escape 键关闭工具提示。

在 8.0.0 之前,无法使用键盘关闭工具提示,这构成了无障碍问题。自 TinyMCE 8.0.0 起,现在可以通过 escape 键关闭工具提示,从而提高了无障碍性。

屏幕阅读器现在会播报如何导航颜色选择板、图像选择和插入表格小部件的说明。

此前,交互式元素(如颜色选择板、创建表格网格和图像选择)缺少 aria-label。这导致键盘用户缺乏操作说明,阻碍了整体无障碍体验。

TinyMCE 8.0.0 现在为这些元素包含了 aria-labels,提供了清晰的键盘导航说明。此改进确保了所有用户获得更无障碍的体验。

调整大小手柄现在具有 role 和 aria-valuetext 属性,可访问性更强。

在 TinyMCE 的先前版本中,编辑器的调整大小手柄缺少 role 属性,引发了无障碍问题。

在 TinyMCE 8.0.0 中,调整大小手柄现在包含一个 role 分隔符和一个 aria-valuetext 属性,该属性动态反映编辑器的当前尺寸。这些改进增强了可访问性并确保屏幕阅读器播报更准确。

关闭警报、确认或其他对话框后,焦点现在会恢复至对话框

此前,当从另一个对话框内打开对话框时——例如通过 file_picker_callback 触发的文件选择器——在关闭二级对话框后,焦点未正确恢复到原始对话框。此问题也影响了从父对话框中打开的警报和确认对话框。

结果,键盘用户在导航过程中遭遇干扰并失去焦点上下文,损害了多对话框工作流程中的无障碍性和可用性。

在 8.0.0 中,TinyMCE 现在在嵌套对话框关闭后将焦点恢复到父对话框中的触发按钮。此改进增强了涉及多个重叠对话框场景下的键盘导航和无障碍性。

在 ToggleToolbarDrawer 命令中添加了 skip_focus 选项支持

ToggleToolbarDrawer 命令现在支持标准的 skip_focus 选项,允许在不聚焦编辑器的情况下打开工具栏抽屉。这与其他编辑器命令的行为保持一致。

更新后的 skip_focus 选项用法命令
editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true });

有关 ToggleToolbarDrawer 命令的更多信息,请参阅:可用命令。

拆分按钮现在渲染为独立的操作按钮和箭头按钮。

TinyMCE 8.0.0 中的拆分按钮现在渲染为两个独立的、可聚焦组件,而不是单个复合元素。主按钮执行主要操作,而箭头按钮控制下拉菜单。此设计改进通过为每个按钮提供单独的关注目标和 ARIA 标签增强了无障碍性。

translate API 现在自动将连续的三个点替换为省略号字符。

此前,包含三个连续句点(…​)的菜单项和工具提示会被 JAWS 屏幕阅读器读作"dot dot dot",这可能会让依赖辅助技术的用户感到困惑。为了提升无障碍访问体验,TinyMCE 8.0.0 中的 translate API 现在会在所有翻译中自动将三个句点替换为排版用的省略号字符(…)。此更新确保了视觉外观的一致性,同时改进了屏幕阅读器的行为,因为省略号字符不会被读出。该更改直接在翻译函数中实现,确保涵盖所有语言。

新增功能

TinyMCE 8.0.0 还包含以下新增内容:

新增 allow_html_in_comments 选项,允许在注释数据中包含类 HTML 内容

出于安全原因,默认情况下编辑器会从内容中移除包含类 HTML 内容的注释。这是在清理过程中完成的,可确保移除注释中的所有类 HTML 内容。

TinyMCE 引入了一个新的配置选项 allow_html_in_comments,让用户可以控制是否保留或移除注释中的类 HTML 内容。默认情况下,出于安全考虑会移除该内容,但将选项设置为 true 可在需要时保留注释中的类 HTML 内容。

分割按钮工具提示配置

chevronTooltip 属性用于为分割按钮的下拉箭头部分提供自定义工具提示文本。当未指定 chevronTooltip 时,TinyMCE 会自动使用模式 "{tooltip} menu" 生成工具提示文本。setTooltip 方法会同时更新主按钮和下拉箭头的工具提示,以保持一致性。

更多信息,请参见 分割工具栏按钮。

新增用于检索和缓存用户详情的用户查找 API

TinyMCE 8.0.0 引入了一个新的 用户查找 API,使集成能够检索和缓存用户详情(如姓名和头像),并在编辑器中识别当前用户。此 API 在构建依赖用户上下文的特性时特别有用,例如评论系统或显示包含用户信息的元素列表。

用户查找 API 提供了高效的用户数据管理,内置缓存机制可减少冗余的网络请求并提升性能。它可以作为各种插件中 <pluginname>_author 和 <pluginname>_author_avatar 配置的通用解决方案,包括目前支持的插件,如Suggested Edits、Comments和Revision History。

主要功能包括:

  • 当前用户识别:使用新的 user_id 配置选项设置和检索活动用户的 ID

  • 灵活的用户获取:通过 fetch_users 回调函数配置自定义用户数据检索

  • 内置缓存:自动缓存用户数据以最小化 API 调用

  • 回退处理:当未提供自定义获取函数时,自动生成默认用户信息

  • 可扩展的用户对象:支持通过 custom 属性添加自定义元数据

基础配置

该 API 需要两个主要配置选项:

tinymce.init({
  selector: 'textarea',
  user_id: 'alextaylor', // Set the current user's unique identifier
  fetch_users: (userIds) => {
    // Return a Promise that resolves to an array of user objects
    return Promise.all(
      userIds.map(userId =>
        fetch(`/users/${userId}`)
          .then(response => response.json())
          .catch(() => ({ id: userId })) // Fallback for failed requests
      )
    );
  }
});

API 用法

配置完成后,该 API 提供两个主要方法:

  • editor.userLookup.userId - 返回当前用户的 ID

  • editor.userLookup.fetchUsers(userIds) - 获取并缓存用户信息

editor.on('init', () => {
  // Get current user ID
  console.log('Current user:', editor.userLookup.userId);

  // Fetch multiple users
  const users = editor.userLookup.fetchUsers(['user-1', 'user-2']);

  // Handle individual user promises
  users['user-1'].then(user => {
    console.log('User 1 name:', user.name);
  });
});

完整文档和示例,请参见:用户查找 API。

新增 list_max_depth 选项以限制列表缩进

TinyMCE 8.0.0 引入了一个新的 list_max_depth 选项,允许配置列表项的最大缩进深度。此设置接受一个非负整数值,其中 0 允许创建不带任何缩进的列表,更高的值则设置允许的最大缩进深度。负值无效并会触发错误。当未设置该选项时,列表行为保持不变。

此设置仅适用于列表缩进,不影响段落缩进。现有内容不会改变,粘贴的超过最大缩进深度的列表将保留其结构,但无法进一步缩进。当选择多个列表项时,只有符合缩进条件的项才会被单独缩进——验证是按项进行的,而不是针对整个选择范围。

取消缩进功能不受影响且始终可用。缩进和取消缩进控件的状态会根据此设置反映当前的缩进能力。

示例配置

以下示例展示了 list_max_depth 选项的基础配置,将列表缩进限制为最多 2 级:

tinymce.init({
  selector: "textarea",
  plugins: [
    "advlist", "anchor", "autolink", "charmap", "code", "fullscreen",
    "help", "image", "insertdatetime", "link", "lists", "media",
    "preview", "searchreplace", "table", "visualblocks",
  ],
  list_max_depth: 2,
  toolbar: "undo redo | styles | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
});

更多信息,请参见:用户格式设置 - 列表最大深度。

变更

TinyMCE 8.0.0 包含以下变更:

增强版许可密钥系统,带 T8LK 前缀

TinyMCE 8 的许可密钥系统已增强,以提供更完善的订阅访问控制和简化的续订流程。此变更主要影响自托管部署,因为云用户(Tiny Cloud)不需要许可密钥。

  • 如果您使用 Tiny Cloud,则不需要许可密钥——您的云订阅已自动包含商业许可证。

  • 对于自托管部署,所有商业许可证密钥必须使用新的 T8LK: 前缀格式。

  • 现有的 TinyMCE 7 许可证密钥无法通过添加 T8LK 前缀与 TinyMCE 8 兼容。

自托管部署的关键变更:

  • 所有商业许可证密钥都需要新的 T8LK: 前缀。

  • 无需服务器通信或“回连”检查

  • 支持基于日期和版本锁定的密钥

  • 简化的混合部署配置

  • 改进对气隙隔离和离线环境的支持

云部署:

  • 使用 Tiny Cloud 时,只需要 API 密钥——无需许可密钥

  • 您的云订阅已自动包含商业许可证

自托管部署:

  • 商业用途:联系您的客户经理或访问 Tiny Cloud Account 获取带 T8LK 前缀的许可证密钥

  • GPL 用途:设置 license_key: 'gpl'(不区分大小写)

  • 使用高级功能的开源项目:使用组合格式 license_key: 'GPL+T8LK:…​'

自托管商业部署所需的许可证密钥管理器设置:

为了使商业许可证密钥正常工作,必须正确配置许可证密钥管理器。如果没有此设置,编辑器将无法工作。

  • 独立托管(例如在 /public 文件夹中):licensekeymanager 文件夹必须位于 plugins 文件夹内,与其他所有插件一起存放。

  • 捆绑应用程序:licensekeymanager/index.js 文件必须被导入,否则编辑器将处于禁用状态。

示例:在捆绑应用程序中导入许可证密钥管理器
import 'tinymce/plugins/licensekeymanager';

从 TinyMCE 7 升级

  • 云用户(Tiny Cloud):无需更改许可证密钥 - 只需更新您的 TinyMCE 版本。

  • 自托管用户:请联系您的客户经理以获取新的以 T8LK 开头的许可证密钥。

有关新许可证密钥系统的更多信息,请参阅:License Key。

DomParser 在使用上下文解析时不再尝试修复某些节点

此前,DomParser 在带上下文解析时会尝试修复无效的 HTML 结构,例如将内容插入特定元素时。这种行为会导致意外结果,特别是当该结构在父元素的上下文中无效时。

在 TinyMCE 8.0.0 中,DomParser 已更新,在使用上下文解析时不再尝试修复无效节点。相反,它将验证节点,仅当它们在父元素的上下文中有效时才插入它们。如果节点无效,则不会插入。

移除

TinyMCE 8.0.0 还包含以下移除项:

从 Editor 实例中移除了未记录的 documentBaseUrl 属性。现在支持的是 documentBaseURI。

此前可以在 Editor 实例上访问未记录的 documentBaseUrl 属性。该属性不属于支持的公共 API,并可能导致不同实现中的混淆或不一致使用。

为了提高 API 的清晰度并保持定义良好的接口,已移除 documentBaseUrl 属性。集成人员应使用官方支持的 documentBaseURI 属性来访问文档的基础 URI。

错误修复

TinyMCE 8.0.0 还包含以下错误修复:

选中 figure 时按 Tab 键未能正确将选区移动到 figcaption。

此前,tab 键未能正确处理嵌套组件。具体来说,当 CET(Content Editable True)元素放置在 CEF(Content Editable False)元素(如 figcaption)内时,焦点行为不符合直觉。这导致在与可编辑的嵌套元素(如 figcaption)交互时,键盘导航不一致且令人困惑。

TinyMCE 8.0.0 通过确保按下 tab 键时能正确将焦点移至嵌套在 CEF 元素内的 CET 元素来解决此问题。这确保了像 figcaption 这样的嵌套可编辑元素的键盘导航流畅且可预测。

剪切整个 HTML 元素会添加一个空段落。

此前,发现一个问题:剪切整个块级元素(如 div 或 p HTML 元素)会导致该块被替换为空段落。此行为仅发生在不包含在表格中的块上,导致结果不一致,即剪切表格内的内容与表格外的内容行为不同。此外,该行为与退格 delete 操作的行为也不一致。

TinyMCE 8.0.0 通过统一表格内外内容的行为来解决此问题。更新的实现使剪切行为与退格 delete 操作保持一致,从而提供更一致和可预测的编辑体验。

Codesample 对话框未按预期禁用拼写检查。

此前,browser_spellcheck 设置未能正确禁用 Codesample 对话框文本区域中的拼写检查。这是因为该设置应用于对话框的文本区域,而非主编辑器实例。

此外,advcode 和 code 插件对话框未显式禁用浏览器拼写检查。因此,无论 browser_spellcheck 设置如何,代码内容中都会出现不必要的红色下划线。

尝试在 block 元素(如图片)后直接添加换行符会导致错误。

在之前的 TinyMCE 版本中,内容选择逻辑错误地假设目标元素位于文本节点内。实际上,它被直接放在 <div> 元素内。这种不匹配导致选中的内容被错误地重新插入自身,导致在图片后立即按 Enter 时出现错误,并引入数据丢失的风险。

此问题已在 TinyMCE 8.0.0 中解决。选择逻辑已更新,以正确识别和处理 <div> 元素内的内容,使其不会尝试将内容插入自身。因此,在 <div> 元素内的图片后按 Enter 不再触发错误或导致意外行为。

在内联模式下,按后退键会关闭上下文工具栏,并将焦点从选中的图片移至编辑器。

在内联模式下,上下文表单工具栏错误地将焦点从选中的图片移至编辑器容器。因此,依赖当前选择来应用更改的插件无法将 alt 文本等属性应用到正确的图片上。

TinyMCE 8.0.0 通过确保正确保留焦点来解决此问题,确保插件在内联模式下能将 alt 文本等更改应用到正确的图片上。

当编辑器失去焦点时,工具栏抽屉现在会关闭。

在之前的 TinyMCE 版本中,浮动工具栏即使在编辑器失去焦点时仍保持可见。这种行为引入了潜在的无障碍性问题,因为工具栏与其控制的编辑器未正确关联,可能会让用户感到困惑。

在 TinyMCE 8.0.0 中,工具栏现在会在编辑器失去焦点时自动关闭。这确保其仅在适当的上下文中显示,增强了无障碍性并改善了整体用户体验。

当鼠标悬停在按钮上时,箭头键在按钮间的导航会被阻止。

在之前的 TinyMCE 版本中,如果使用箭头键进行导航时鼠标悬停在按钮上,焦点会返回到之前聚焦的元素。这导致选区卡在带有 mouseover 事件的按钮上。

TinyMCE 8.0.0 通过防止在箭头键导航期间再次触发 mouseover 事件来解决此问题,确保使用箭头键导航时的无缝用户体验。

在 Firefox 中,无法使用左右箭头键退出 figcaption。

在 TinyMCE 8.0.0 之前,Firefox 存在一个问题:按下左或右箭头键时,用户无法退出图片 figcaption 元素。这种行为与其他主要浏览器(如 Google Chrome 和 Safari)不一致,在这些浏览器中,箭头键按预期工作,允许无缝退出 figcaption。

随着 TinyMCE 8.0.0 的发布,此问题已得到解决。用户现在可以在 Firefox 中使用左/右箭头键退出 figcaption,使其行为与其他浏览器保持一致。此更新确保了更一致的用户体验。

装饰性图片在使用 Apply 按钮关闭 alt 子工具栏时会失去其装饰状态。

此前,发现一个问题:使用 Apply 按钮关闭 alt 子工具栏会无意中移除已标记为装饰性的图片的装饰状态。这是因为 onSetup API 禁用了输入组,导致 Apply 逻辑错误地将图片解释为非装饰性。

此问题已在 TinyMCE 8.0.0 中解决。onSetup 和 Apply 行为已对齐,以一致地评估输入组,确保装饰性状态按预期保留。

HTML 模式未将 colgroup 或 col 元素视为块级元素。

在之前的 TinyMCE 版本中,TinyMCE 的 HTML 模式未移除 <colgroup> 和 <col> 标签之间的空白字符。这种行为导致编辑器在表格标记中保留了不必要的空白字符。

此问题已在 8.0.0 中解决。colgroup 和 col 元素现在被视为块级元素,确保从这些区域剥离多余的空白字符。因此,编辑器现在生成的表格标记更干净、更简洁。

删除整个元素有时会修改附近的内容

此前,使用“源代码”编辑器删除完整的 HTML 元素(无论是通过剪切 Ctrl+X 或 Cmd+X、退格还是按 Delete),都可能会无意中修改周围的内容。例如,删除 preceding <p> 标签的 <div> 元素可能会导致 <p> 转换为 <div>,从而导致意外的结构变化。

此问题已在 TinyMCE 8.0.0 中解决,方法是改进编辑器 DOM 逻辑中如何处理元素删除。剪切或删除选定的元素现在会保留相邻元素的完整性和标签类型。用户在修改 HTML 源内容时可以期望一致且可预测的编辑行为。

删除线格式若置于字体大小格式之外,在某些浏览器中会渲染错误。

此前,将删除线(s元素)与字体大小格式结合使用时,在某些浏览器(尤其是 Chrome)中可能导致渲染错误。当s(删除线)元素位于字体大小span外部时,就会出现删除线渲染不正确的问题。

修复方案确保s元素现在正确嵌套在字体大小元素内部,从而提升跨浏览器的视觉一致性。

长提示框可能在狭窄的浏览器窗口中溢出

此前,长提示框可能在狭窄的浏览器窗口中溢出,导致提示框文本被部分截断且无法阅读。此问题在使用“显示或隐藏更多工具栏选项”按钮的…​省略号工具栏时最为明显,因为提示框文本无法适应狭窄的视口。

在 TinyMCE 8.0.0 中,已改进提示框行为,确保长提示框在狭窄的浏览器窗口中得到正确定位和换行。这可防止溢出,即使在较小的视口中也能保证完整显示提示框文本。

在非可编辑最后一行的表格中使用 Tab 键创建新行会导致编辑器冻结。

此前,当使用 Tab 键进入表格的非可编辑最后一行时,编辑器未能识别该行只读,而是将其复制。这导致尝试将光标放置在复制的行中,而该复制行同样不可编辑。此过程会无限重复,形成循环,最终导致编辑器冻结。

TinyMCE 8.0.0 通过检测表格最后一行是否为只读状态来解决此问题,并在该情况下阻止插入新行。这确保了在使用 Tab 键导航表格时的稳定行为。

嵌套字体大小不再导致过大的行间距

此前,对嵌套元素应用不同的字体大小可能导致不一致且过大的行高。这影响了用户体验,引入视觉杂乱,使文本块看起来错位或难以阅读。

TinyMCE 8.0.0 引入了修复方案,确保行高根据新行中可见的字体大小进行计算,而不是从父元素继承行高。这意味着当在同一内容中应用不同字体大小时,行高将保持一致并与可见字体大小成比例。

插入无效 HTML 片段时改进了结构保留

此前,通过 API 插入 HTML 片段或粘贴时,解析器会尝试修复无效结构,这可能导致表、列表等有效结构的丢失。这种行为不一致,在处理复杂 HTML 内容时可能导致意外结果。

在 TinyMCE 8.0.0 中,解析器已更新,以在插入 HTML 片段时更好地保留结构。它现在会在其父结构的上下文中验证这些片段,确保即使片段包含无效 HTML,有效结构也能得到保留,从而在处理复杂 HTML 内容时产生更可预测且理想的结果。

当现有列表项包含块级元素时,新列表项未正确插入

TinyMCE 8.0.0 解决了影响列表管理的问题,即父列表项包含块级格式时。此前,当包含子列表的列表项被格式化为块级元素(如<p>或<div>)时,在该项末尾按 Enter 键会将新列表项错误地放置在子列表项旁边,而不是作为父列表项的兄弟节点。

TinyMCE 8.0.0 通过以下方式解决此问题:当用户在包含块级格式的列表项末尾按 Enter 键时,确保新列表项正确插入为父列表项的兄弟节点,而不是错误地放置在子列表项旁边。

弃用

TinyMCE 8.0.0 包含以下弃用项:

Java Swing 集成已被弃用

TinyMCE 的 Java Swing 集成已在 TinyMCE 8.0 中被弃用,并将于 2025 年 12 月 31 日停止支持。

有关 Java Swing 集成的信息,请参阅:TinyMCE for Java Swing integration

基于 Java 应用服务器的服务器组件已被弃用

TinyMCE 8.0.0 弃用了自托管服务的基于 Java 应用服务器的部署方法。Docker 容器现在是自托管服务唯一支持的部署方法。Java .war文件(ephox-spelling.war、ephox-image-proxy.war、ephox-hyperlinking.war)将在未来的版本中被移除。

有关使用 Docker 容器设置容器化服务器端组件的信息,请参阅:来自高级自托管捆绑包的容器化服务器端服务的介绍和初始设置

Docker 容器服务

ToggleToolbarDrawer命令的skipFocus选项已被弃用

ToggleToolbarDrawer命令此前接受一个非标准的skipFocus选项,以防止在执行命令时编辑器获得焦点。此行为与其他编辑器命令不同,后者使用通用的skip_focus选项实现相同目的。因此,这种不一致性在实现或维护命令逻辑时导致了混淆。

为解决此问题,现已向ToggleToolbarDrawer命令添加了对标准skip_focus选项的支持。skipFocus选项在 TinyMCE 8.0.0 中现已弃用,并将在未来版本中移除。

弃用前使用skipFocus选项
editor.execCommand('ToggleToolbarDrawer', false, { skipFocus: true });
弃用后使用skip_focus选项
editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true });

此更改提高了命令之间的一致性,并与 TinyMCE 8.0.0 中的预期使用模式保持一致。

弃用于事件处理的fire()方法

fire()方法最初在 TinyMCE 6 中被弃用,改用dispatch()方法进行事件处理,但从未从代码库中移除。TinyMCE 8.0.0 现在在使用fire()方法时会显示弃用警告,作为其在 TinyMCE 9 中移除前的最后通知。

这次迟来的清理使 API 与现代事件处理惯例保持一致,并消除了关于方法命名的困惑。集成者应迁移到dispatch()方法,以确保与未来版本的兼容性。

分发自定义事件的弃用方法
// 在 TinyMCE 8 中已弃用,将在 9 中移除
editor.fire('someEvent');
分发自定义事件的新方法
// 请使用 dispatch() 替代
editor.dispatch('someEvent');

有关dispatch()方法的更多信息,请参阅:EventDispatcher.