You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinyMCE 6.7.0:如何捕获指定工具栏按钮的点击事件

解决TinyMCE 6.7.0指定工具栏按钮点击事件捕获问题

你遇到的问题是因为TinyMCE 6中大部分内置工具栏按钮已不再依赖ExecCommand事件,而是采用了新的Action系统,所以之前的监听方式只对少数仍使用ExecCommand的按钮(比如链接)有效。下面提供两种可靠的解决方案:

方案一:监听ActionExecuted全局事件

这个事件会在任何Action执行时触发,不管是通过工具栏按钮、菜单还是快捷键,能覆盖你需要的所有目标按钮。

首先明确目标按钮对应的Action名称:

  • 插入/编辑链接:mceLink
  • 插入/编辑图片:mceImage
  • 插入/编辑媒体:mceMedia
  • 插入模板:mceTemplate
  • 源代码:mceCodeEditor

在TinyMCE的setup配置中添加监听:

tinymce.init({
  // 其他配置项...
  setup: function(editor) {
    editor.on('ActionExecuted', function(e) {
      const targetActions = ['mceLink', 'mceImage', 'mceMedia', 'mceTemplate', 'mceCodeEditor'];
      if (targetActions.includes(e.action)) {
        // 这里执行你的自定义代码
        console.log(`触发了${e.action}操作`);
        // 示例:插入自定义代码片段
        editor.insertContent('<p>自定义插入内容</p>');
        
        // 如需阻止原Action执行,可添加:
        // e.preventDefault();
      }
    });
  }
});

方案二:修改目标按钮的点击逻辑

直接修改工具栏按钮的onAction方法,仅针对工具栏点击生效,适合不需要监听快捷键/菜单触发的场景。

同样在setup配置中实现:

tinymce.init({
  // 其他配置项...
  setup: function(editor) {
    // 定义需要修改的按钮名称和对应原Action
    const targetButtons = [
      { name: 'link', action: 'mceLink' },
      { name: 'image', action: 'mceImage' },
      { name: 'media', action: 'mceMedia' },
      { name: 'template', action: 'mceTemplate' },
      { name: 'code', action: 'mceCodeEditor' }
    ];

    targetButtons.forEach(item => {
      editor.ui.registry.modifyButton(item.name, {
        onAction: function() {
          // 先执行自定义代码
          console.log(`${item.name}按钮被点击`);
          editor.insertContent('<p>自定义插入内容</p>');
          
          // 再执行原按钮逻辑
          editor.execCommand(item.action);
        }
      });
    });
  }
});

注意:如果需要调整自定义代码与原按钮逻辑的执行顺序,直接调换对应代码块位置即可。

内容的提问来源于stack exchange,提问作者heero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:12:52