【问题标题】:Can't catch the ForeColor command anymore, tinymce 4.1.4无法再捕捉 ForeColor 命令了,tinymce 4.1.4
【发布时间】:2014-12-18 06:12:35
【问题描述】:

如果你运行,Tinymce 会触发文本颜色更改的事件:

tinymce.activeEditor.on('execCommand', function() {console.log(arguments);} )

你会看到 execCommand ForeColor,只要文本颜色改变就会运行。如果您查看 TinyMCE-Textcolor 插件,它似乎没有任何 execCommands 或任何方法来检测文本颜色何时发生变化。

【问题讨论】:

  • TextColor 插件不再触发 execCommand 事件,因为 since this commit it 直接使用 Formatter infrastructure。因此,您无法获取旧事件,但您可以使用格式化程序上的 formatChanged 来提供回调:jsfiddle.net/9hb4zbyj。但是,即使您只是选择了一些已经着色的文本,这也会触发......所以遗憾的是,这不是最好的选择
  • @nemesv 既然你可以'monkey-patch' editor.formatter.apply,你的评论基本上就是这个问题的答案——你为什么不让你的评论成为答案?

标签: javascript wordpress tinymce tinymce-4


【解决方案1】:

TextColor 插件不再触发execCommand 事件,因为since this commit 它直接使用Formatter infrastructure。所以你不能得到你的旧事件。

但是您可以使用格式化程序上的formatChanged 来提供回调:

tinymce.activeEditor.formatter.formatChanged('forecolor', function (isNew, args) {
    if (isNew)
    console.log("new color", args.node.style.color);
}, true)

演示JSFiddle.

但是,即使您只是选择了一些已经着色的文本,这也会触发......所以遗憾的是,这不是最好的选择。

当然,formatter.apply 可以通过猴子补丁来触发旧的ExecCommand 事件:

var oldApply = tinymce.activeEditor.formatter.apply;

tinymce.activeEditor.formatter.apply = function apply(name, vars, node) {
    oldApply(name, vars, node);
    tinymce.activeEditor.fire('ExecCommand', {name: name, vars: vars});
}

演示JSFiddle.

但这不能在全局范围内完成,并且必须为每个 tinymce 编辑器实例重复,所以这又不是最好的解决方案......

【讨论】:

  • 我将 formatter.apply 猴子补丁添加到 tinymce.init 的 init_instance_callback 回调中。这让我可以在创建时将其应用于每个实例,而不是依赖 tinymce.activeEditor。
猜你喜欢
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多