这是 Tiny Cloud 和 TinyMCE 企业版的发行说明。如需了解最新版 TinyMCE 社区版的信息,请参阅 TinyMCE 更新日志。

概述

TinyMCE 8.0.0 已于 2025 年 7 月 23 日(星期三)面向 TinyMCE 企业版和 Tiny Cloud 发布。本发行说明概述了 TinyMCE 8.0.0 的变更,包括:

  • 新的高级插件

  • 配套的高级插件变更

  • 配套的增强型皮肤与图标包变更

  • 改进

  • 新增内容

  • 变更

  • 错误修复

  • 弃用

此版本包含对许可证密钥系统的破坏性变更。所有商业自托管部署都必须将其许可证密钥更新为新的 T8LK: 前缀格式。如需了解有关此变更及其他破坏性变更的详细信息(在考虑升级时),请参阅 从 TinyMCE 7 迁移至 TinyMCE 8.0.0。

新的高级插件

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

建议编辑 (Suggested Edits)

TinyMCE 8.0.0 版本包含了 建议编辑高级插件的配套版本。

建议编辑插件允许多名用户协同编辑文档。审阅窗口会显示哪位用户提出了哪些编辑建议(无论是添加、删除、修改还是替换内容),并允许用户针对这些建议提供反馈,或通过接受或拒绝建议来完成最终审阅。

如需了解有关 建议编辑插件的信息,请参阅:建议编辑。

配套的高级插件变更

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

提及 (Mentions)

TinyMCE 8.0.0 版本包含了 提及高级插件的配套版本。

提及高级插件包含以下修复和移除内容。

在深色模式切换皮肤时,提及用户名未更新

此前,在切换皮肤时(尤其是在深色模式下),提及卡片上显示的用户名无法正确更新。该问题会导致用户名在深色背景下不可见,从而使用户难以阅读。

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

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

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

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

如需了解有关 提及插件的信息,请参阅:提及。

拼写检查器 (Spell Checker)

TinyMCE 8.0.0 版本包含了 拼写检查器高级插件的配套版本。

拼写检查器高级插件包含以下修复和改进。

标记为 lang 属性的内容有时无法正确进行拼写检查。

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

此问题引入于 TinyMCE 6.4,在该版本中,包含混合格式语言代码的文档无法可靠地进行拼写检查。结果导致,在使用备用大小写或分隔符约定的 span 中,拼写错误的单词无法被检测到,尽管它们在 6.3 版本中运行正常。

在 8.0.0 版本中,恢复了对混合大小写和混合格式语言代码的支持。拼写检查器现在能正确识别并处理语言属性格式的差异,确保无论代码风格如何,都能可靠地检查内容。此项改进实现了对包含多语言和不同区域约定的文档的准确拼写检查。

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

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

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

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

  • UI 语言包(高级版和社区版)

  • 拼写检查器语言代码

  • HTML lang 属性

  • 内容语言选择

变更

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

    • 'en-US' 替代 'en_US'

    • 'zh-TW' 替代 'zh_TW'

    • 'pt-BR' 替代 'pt_BR'

  • 不含地区的基础语言代码(如 'en'、'es'、'fr')保持不变。

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

  • 高级插件已更新以识别符合 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 高级插件的信息,请参阅:Spell Checker 插件,或查看支持语言的完整列表,请访问:支持语言。

无障碍检查器 (Accessibility Checker)

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

Accessibility Checker 高级插件包含以下改进。

无障碍 (Accessibility):在 a11ychecker 插件中增强了图像无障碍检查

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

  • I1:混合信号与装饰性策略:标记具有冲突无障碍指示器的图像(例如 alt 与 role="presentation"),并确保装饰性图像符合最佳实践。

  • I2:alt 属性要求:强制要求所有 <img> 元素上必须存在 alt 属性,无论其他标签机制如 aria-label、aria-labelledby 或 title 是否存在。

  • I3:文件名检测:当 alt 文本看似文件名时(例如 image123.jpg)发出警告,包括 URL 编码的情况。

  • I4:alt 文本长度:检测超过可配置最大长度的 alt 文本,促进简洁的描述。默认限制为 150 个字符,可通过新的 a11ychecker_alt_text_max_length 设置进行调整。

其他改进包括一个规则优先级系统以避免重复违规,集中化的图像意图检测(例如装饰性、信息性、混合信号、不完整)以及更易读的用户界面消息。诸如“替代文本” (alternative text) 的技术术语已被替换为“文本描述”,修复说明现在更具上下文相关性且更易于用户理解。

为无障碍检查器 alt 文本长度新增的 a11ychecker_alt_text_max_length 配置选项

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

tinymce.init({
  selector: 'textarea',
  plugins: 'a11ychecker',
  a11ychecker_alt_text_max_length: 150  // Set maximum length to 150 characters
});

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

PowerPaste

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

列表的“更轻量”级别的 Word 导入解析失败。

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

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

注释

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

Comments 高级插件包括以下移除内容。

移除了未使用的注释样式表

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

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

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

TinyMCE 8.0.0 版本包括 增强皮肤和图标包的配套发布。

增强皮肤和图标包

增强皮肤和图标包 的发布包括以下更新:

重建了 增强皮肤和图标包,以纳入也包含在 TinyMCE 8.0.0 默认皮肤 Oxide 中的更改。

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

改进

TinyMCE 8.0.0 还包括以下改进:

增强了跨源资源处理

添加了一个新的基于函数的 crossorigin 配置选项,可对跨源资源加载进行细粒度控制。该函数接收资源 URL 和类型(脚本或样式表)作为参数,并可返回 'anonymous'、'use-credentials' 或 undefined 以控制 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 屏幕阅读器读作“点点点”,这可能会让依赖辅助技术的用户感到困惑。为增强可访问性,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 方法会同时更新主按钮和箭头按钮的工具提示,以保持一致性。

有关更多信息,请参阅 拆分工具栏按钮。

用于检索和缓存用户详细信息的新 User Lookup API

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

User Lookup API 提供高效的用户数据管理,内置缓存功能,可减少冗余网络请求并提高性能。它可以作为各种插件中 <pluginname>_author 和 <pluginname>_author_avatar 配置的通用解决方案,包括当前支持的插件,如建议编辑、评论和修订历史。

主要特性包括:

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

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

  • 内置缓存:自动缓存用户数据,以最大限度减少 API 调用

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

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

基本配置

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

tinymce.init({
  selector: 'textarea',
  user_id: 'alextaylor', // 设置当前用户的唯一标识符
  fetch_users: (userIds) => {
    // 返回一个 Promise,解析为用户对象数组
    return Promise.all(
      userIds.map(userId =>
        fetch(`/users/${userId}`)
          .then(response => response.json())
          .catch(() => ({ id: userId })) // 请求失败时的回退处理
      )
    );
  }
});

API 用法

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

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

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

editor.on('init', () => {
  // 获取当前用户 ID
  console.log('当前用户:', editor.userLookup.userId);

  // 获取多个用户
  const users = editor.userLookup.fetchUsers(['user-1', 'user-2']);

  // 处理单个用户的 promise
  users['user-1'].then(user => {
    console.log('用户 1 的姓名:', 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 账户 获取带有 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 前缀的许可证密钥。

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

使用上下文解析时 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)元素放置在诸如 figcaption 之类的 CEF(Content Editable False)元素内部时,焦点行为不直观。这导致在与诸如 figcaption 之类的可编辑嵌套元素交互时,键盘导航不一致且令人困惑。

TinyMCE 8.0.0 解决了这个问题,确保当 CET 元素嵌套在 CEF 元素内时,按 Tab 键能正确地将焦点移动到 CET 元素。这确保了诸如 figcaption 之类的嵌套可编辑元素的键盘导航顺畅且可预测。

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

以前,已确定一个问题,即剪切整个块元素(如 div 或 p HTML 元素)会导致该块被空段落替换。这种行为仅发生在不包含在表格内的块上,并导致不一致的结果,即表格内的剪切内容行为与表格外的剪切内容行为不同。此外,这种行为与 Backspace 删除操作的行为不同。

TinyMCE 8.0.0 通过统一表格内外内容的剪切行为解决了这个问题。更新后的实现使剪切行为与 Backspace 删除操作的行为一致,确保了更一致和可预测的编辑体验。

代码示例对话框不会按预期禁用拼写检查。

以前,browser_spellcheck 设置不能正确地在代码示例对话框的文本区域中禁用拼写检查。这是因为该设置被应用于对话框的文本区域,而不是主编辑器实例。

此外,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,使其行为与其他浏览器一致。此更新确保了更一致的用户体验。

使用“应用”按钮关闭 alt 子工具栏时,装饰性图像会失去其装饰状态。

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

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

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

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

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

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

以前,通过“源代码”编辑器删除整个 HTML 元素(无论是使用剪切 Ctrl+X 或 Cmd+X、退格还是按下删除键)可能会意外修改周围的内容。例如,删除位于 <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 引入了一个修复,确保行高基于新行中可见的字体大小计算,而不是从父元素继承 line-height。这意味着当在同一内容中应用不同字体大小的时候,行高将保持一致并与可见字体大小成比例。

插入无效 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 集成的信息,请参阅:用于 Java Swing 集成的 TinyMCE

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

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

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

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。

已弃用的 editor.selection.setContent API

在 TinyMCE 8.0.0 中,editor.selection.setContent 方法已被弃用。此底层 API 从未打算供外部使用,并且在插入复杂内容结构(如列表)时不能保证行为的一致性。建议集成人员使用受支持的 editor.insertContent 方法进行可靠的内容插入。

此次弃用有助于减少混淆,并使内容插入与 TinyMCE 受支持的 API 保持一致。