在WordPress中检查TinyMCE是否处于活动状态的方法

15

我正在开发一个插件,当使用TinyMCE作为可视化编辑器时,它会使用TinyMCE命令将文本插入到正文内容编辑区域中。目前,它只是通过运行命令来实现此功能。如果它能够工作,那么TinyMCE就是活动的;否则,我有自定义JS可用于处理HTML编辑器。

我想问的问题是:是否有任何方法可以检查TinyMCE是否处于活动状态,而不是仅仅运行该命令并在未活动时使其失败?

4个回答

25

而且...我已经为自己回答了这个问题。你想要测试的条件如下:

is_tinyMCE_active = false;
if (typeof(tinyMCE) != "undefined") {
  if (tinyMCE.activeEditor == null || tinyMCE.activeEditor.isHidden() != false) {
    is_tinyMCE_active = true;
  }
}

问题在于当TinyMCE未激活时,tinyMCE.activeEditor返回null。可以使用isHidden()方法来确保在切换回HTML编辑器模式时不执行该操作。

这一点在TinyMCE的官方网站和论坛上的文档说明很差。


嗯,这对我来说不起作用。出于某种原因,不管是在HTML模式还是可视化模式下,它都是真的。还有其他人遇到这个问题吗? - Shaan
1
我觉得我的问题是tinyMCE编辑器还没有加载完全,而我在它完全加载之前就进行了检查。我应该如何等待它加载完全后再进行这个检查? - Shaan

7

是的,我在WordPress的ABSPATH/wp-includes/js/autosave.js文件中看到了那段代码。

// (bool) is rich editor enabled and active
var rich = (typeof tinyMCE != "undefined") && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden();

2
作为一道在搜索引擎中排名较高的问题,我认为我应该扩展Daniel的答案,以支持在同一页中有多个WordPress编辑器实例的情况。
    var is_editor_active = function(editor_id){

        if(typeof tinyMCE == 'undefined'){
            return false;
        }

        if( typeof editor_id == 'undefined' ){
            editor = tinyMCE.activeEditor;
        }else{
            editor = tinyMCE.EditorManager.get(editor_id);
        }

        if(editor == null){
            return false;
        }

         return !editor.isHidden();

    };

用途

当你只需要检查活动编辑器时

if(is_editor_active()){
    // do stuff
}

如果需要检查具有特定id的编辑器
if(is_editor_active('mycontent'){
    // do stuff
}

我希望这个小函数能对其他人有所帮助 :)

0
根据WordPress editor.js,我们可以轻松地检查到:
    if ( window.wpActiveEditor ) {
       // editor active
    }else {
       // not active
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接