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

概述

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

  • 新的 Premium 插件

  • 配套的 Premium 插件更改

  • 配套的增强版 Skins & Icon Packs 更改

  • 改进

  • 新增

  • 更改

  • Bug 修复

  • 已弃用

此版本包含对 license key 系统的破坏性更改。所有商业自托管部署都必须更新其 license key 以使用新的 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 插件包括以下修复和移除。

Mentions 用户名在暗色模式下的外观更改时不更新

以前,当在外观之间切换时,mentions 卡片上显示的用户名无法正确更新,尤其是在暗色模式下。这导致用户名在深色背景上变得不可见,使用户难以阅读。

为了解决这个问题,更新了用户名的样式。该类现在对其默认样式使用 @text-color 变量,确保当项目处于活动状态时从其父元素继承正确的颜色。此更改保证用户名在浅色和暗色主题中都保持可见和可读。

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

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

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

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

Spell Checker

TinyMCE 8.0.0 版本包括配套的 Spell Checker premium 插件的发布。

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

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

以前,拼写检查器无法一致地处理使用不同 lang 属性标记的内容,特别是当语言代码使用不同格式时。这种不一致导致对于使用替代大小写或分隔符约定的 span 中的单词(例如 en-GB 对比 en_GB),拼写检查会被遗漏。

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

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

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

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

语言代码标准化为 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 plugin 或有关支持语言的完整列表,请参阅:Supported languages。

无障碍检查器

TinyMCE 8.0.0 版本包括 Accessibility Checker premium 插件的配套版本。

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

无障碍:a11ychecker 插件中增强的图像无障碍检查

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

额外的改进包括规则优先级系统以避免重复违规,集中化的图像意图检测(例如装饰性、信息性、混合信号、不完整),以及更易读的用户消息。诸如“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  // 将最大长度设置为 150 个字符
});

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

PowerPaste

TinyMCE 8.0.0 版本包括 PowerPaste premium 插件的配套版本。

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

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

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

Comments

TinyMCE 8.0.0 版本包含了 Comments 高级插件的相应版本。

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

移除未使用的 Comments 样式表

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

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

伴随的 Enhanced Skins & Icon Packs 更改

TinyMCE 8.0.0 版本包含了 Enhanced Skins & Icon Packs 的相应版本。

Enhanced Skins & Icon Packs

Enhanced Skins & Icon Packs 版本包括以下更新:

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

有关使用 Enhanced Skins & Icon Packs 的信息,请参阅:Enhanced Skins & Icon Packs。

改进

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 屏幕阅读器读作“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 配置的通用解决方案,包括当前支持的插件,如 建议编辑、评论 和 修订历史。

主要功能包括:

  • 当前用户识别:使用新的 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('Current user:', editor.userLookup.userId);

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

  // 处理各个用户的 promise
  users['user-1'].then(user => {
    console.log('User 1 name:', user.name);
  });
});

如需完整文档和示例,请参阅:User Lookup 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",
});

更多信息,请参阅:User formatting - List max depth。

变更

TinyMCE 8.0.0 包括以下变更:

增强的许可证密钥系统,采用 T8LK 前缀

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

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

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

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

自托管部署的关键变更:

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

  • 无需服务器通信或“phone home”检查

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

  • 简化的混合部署配置

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

云部署:

  • 使用 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。

Bug 修复

TinyMCE 8.0.0 还包含以下 Bug 修复:

当选择 figure 时按 Tab 键无法正确将选择移动到 figcaption。

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

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

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

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

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

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

以前,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 schema 未将 colgroup 或 col 元素视为块级元素。

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

此问题已在 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 集成的信息,请参见:TinyMCE 的 Java Swing 集成

基于 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。

已弃用的 editor.selection.setContent API

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

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