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

概述

2025 年 7 月 23 日(周三),TinyMCE 8.0.0 正式发布,适用于 TinyMCE Enterprise 和 Tiny Cloud。本发行说明概述了 TinyMCE 8.0.0 的变更内容,包括:

  • 新增 Premium 插件

  • 配套的 Premium 插件变更

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

  • 改进

  • 新增功能

  • 变更

  • Bug 修复

  • 弃用

本次发布包含对许可证密钥系统的破坏性变更。所有商业自托管部署必须更新其许可证密钥,以使用新的 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 用户名不更新

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

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

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

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

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

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

Spell Checker(拼写检查器)

TinyMCE 8.0.0 版本包含 Spell Checker Premium 插件的配套版本。

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

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

此前,拼写检查器无法一致地处理标记了不同 lang 属性的内容,尤其是在语言代码采用不同格式时。这种不一致导致对于使用了不同大小写或分隔符惯例(例如 en-GB 与 en_GB)的 span 中的单词,会遗漏拼写检查。

此问题始于 TinyMCE 6.4,在该版本中,包含混合格式语言代码的文档无法可靠地进行拼写检查。结果,尽管使用不同大小写或分隔符惯例的 span 在 6.3 版本中功能正常,但其中的拼写错误却无法被检测到。

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

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

在先前版本中,Spell Checker 对话框的拼错单词输入字段缺少适当的无障碍标签,导致屏幕阅读器无法播报其用途。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')保持不变。

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

    • 高级插件已更新,以识别符合 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 插件 或有关支持语言的完整列表,请参阅:支持的语言。

    无障碍检查器

    TinyMCE 8.0.0 版本包含了配套发布的 无障碍检查器 高级插件。

    无障碍检查器 高级插件包含以下改进。

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

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

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

    • 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" 等技术术语已被 "text description" 取代,修复说明现在更具上下文性和用户友好性。

    无障碍检查器新增 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 个字符
    });

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

    PowerPaste

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

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

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

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

    Comments

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

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

    移除了未使用的 Comments 样式表

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

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

    Accompanying Enhanced Skins & Icon Packs changes

    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。

    Improvements

    TinyMCE 8.0.0 还包含以下改进:

    Enhanced cross-origin resource handling

    添加了新的基于函数的 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 配置选项 文档。

    Tooltips can now be closed by pressing the escape key.

    在 8.0.0 版本之前,无法通过键盘关闭工具提示框,这带来了无障碍性问题。从 TinyMCE 8.0.0 开始,现在可通过 escape 键关闭工具提示框,提升了无障碍性。

    Instructions on how to navigate the color swatch, image select and insert table widget are now announced by screen readers.

    此前,颜色样本、创建表格网格和图像选择等交互元素缺少 aria-label。这导致键盘用户缺少操作说明,影响了整体无障碍性。

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

    Resize handles are more accessible with role and aria-valuetext attributes.

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

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

    Focus is now restored to a dialog after closing an alert, confirmation or another dialog

    此前,当从一个对话框打开另一个对话框(如通过 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方法会同时更新主按钮和箭头按钮的工具提示,以保持一致性。

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

    新的用户查找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', // 设置当前用户的唯一标识符
      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);
      });
    });

    完整的文档和示例,请参见:用户查找 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)元素被放置在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操作保持一致,确保了更一致且可预测的编辑体验。

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

    使用应用按钮关闭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、按退格键还是删除键,都可能意外修改周围内容。例如,删除位于<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 for Java Swing 集成

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

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

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

    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 保持一致。