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

概述

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

  • 新的 Premium 插件

  • 配套的 Premium 插件变更

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

  • 改进

  • 新增功能

  • 变更

  • 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 用户名在深色模式下切换皮肤时未更新

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

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

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

在 8.0.0 版本中,Mentions 插件中未使用的 mentions.css 文件已被移除。在早期版本(如 7.9)中,尽管其内容已在先前的更新中移至 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,导致包含混合格式语言代码的文档无法可靠地进行拼写检查。结果是,使用替代大小写或分隔符约定的 span 标签中的拼写错误单词无法被检测到,尽管它们在 6.3 版本中表现正常。

在 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 plugins 已更新以识别符合 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 plugin 的信息,请参阅:Spell Checker plugin 或有关支持的语言的完整列表,请参阅:Supported languages。

    Accessibility Checker

    TinyMCE 8.0.0 版本包括一个配套发布的 Accessibility Checker premium plugin。

    Accessibility Checker Premium plugin 包括以下改进。

    无障碍:增强 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 premium plugin。

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

    当用户将内容从使用 Word 的“无列表”设置样式的 Microsoft Word 文档粘贴到启用了 PowerPaste 的编辑器中时,由于解析错误,操作会失败。结果是,内容不会被插入到编辑器中,从而干扰了内容工作流。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 版本包括增强型皮肤和图标包的配套发布。

    增强型皮肤和图标包

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

    增强型皮肤和图标包经过重新构建,以纳入同样被纳入到默认的 TinyMCE 8.0.0 皮肤 Oxide 中的更改。

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

    改进

    TinyMCE 8.0.0 还包括以下改进:

    增强的跨域资源处理

    添加了一个基于函数的 crossorigin 配置选项,可对跨域资源加载进行精细控制。该函数接收资源 URL 和类型(script 或 stylesheet)作为参数,并可以返回 '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方法会同时更新主按钮和箭头按钮的工具提示,以保持一致性。

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

    用于检索和缓存用户详细信息的新用户查找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” 检查

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

    • 简化的混合部署配置

    • 改进了对气隙(air-gapped)和离线环境的支持

    云部署:

    • 使用 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 还包括以下移除项:

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

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

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

    错误修复

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

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

    以前,tab 键未正确处理嵌套组件。具体来说,当 CET(内容可编辑为 True)元素放置在 figcaption 等 CEF(内容可编辑为 False)元素内部时,焦点行为不直观。这导致在与可编辑嵌套元素(如 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)不一致,在Chrome和Safari中,方向键的功能符合预期,并且允许无缝地退出figcaption。

    在TinyMCE 8.0.0中,这个问题已经解决。用户现在可以在Firefox中使用左/右方向键退出figcaption,使其行为与其他浏览器保持一致。此更新确保了更一致的用户体验。

    装饰性图像在使用apply按钮关闭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 for Java Swing integration

    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() 方法进行事件处理,但从未从代码库中移除。现在,当使用 fire() 方法时,TinyMCE 8.0.0 会显示弃用警告,这是其在 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 保持一致。