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

概述

TinyMCE 8.0.0 于 2025 年 7 月 23 日(星期三)面向 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 插件包含以下修复和移除内容。

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

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

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

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

在 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 属性的内容,特别是当语言代码使用不同格式时。这种不一致导致使用替代大小写或分隔符约定的 span 中的单词遗漏拼写检查(例如 en-GB 与 en_GB)。

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

在 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')保持不变。

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

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

    Accessibility Checker

    TinyMCE 8.0.0 版本包括一个配套的 Accessibility Checker高级插件版本。

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

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

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

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

    Accessibility Checker alt 文本长度的新 a11ychecker_alt_text_max_length 配置选项

    Accessibility Checker 插件中添加了一个新的配置选项 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
    });

    有关 Accessibility Checker 插件的更多信息,请参阅:Accessibility Checker。

    PowerPaste

    TinyMCE 8.0.0 版本包括一个配套的 PowerPaste高级插件版本。

    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)中,尽管其内容在先前的更新中已移动到 Oxide 主题,但该空的 CSS 文件仍被加载。此更改确保了更干净的资源加载,并避免了不必要的网络请求。

    有关 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",
    });

    有关更多信息,请参阅:用户格式 - 列表最大深度。

    变更

    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。

    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或pHTML元素)会导致该块被替换为一个空段落。这种行为仅发生在不包含在表格中的块上,导致剪切表格内的内容与表格外的内容行为不同。此外,这种行为与退格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键不再触发错误或导致意外行为。

    在inline模式下,按退格键会取消上下文工具栏并将焦点从所选图像移动到编辑器。

    在inline模式下,上下文表单工具栏错误地将焦点从所选图像移动到编辑器容器。结果,依赖当前选择以应用更改的插件无法将诸如alt文本之类的属性应用于正确的图像。

    TinyMCE 8.0.0通过确保焦点得到正确保留来解决了这个问题,从而确保插件现在在inline模式下将诸如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、退格键还是按删除键,都可能意外地修改周围的内容。例如,删除位于<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 容器设置容器化服务器端组件的信息,请参阅:高级自托管 bundles 的容器化服务器端服务简介和初始设置

    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() 方法,以确保与未来版本的兼容性。

    分发自定义事件的已弃用方法
    // Deprecated in TinyMCE 8, will be removed in 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 保持一致。