如何确定是否加载了CKEditor?

时间:2010-08-10 10:02:43

标签: javascript ckeditor

如何确定CKEditor是否已加载?我查看了API文档,但只能找到加载的事件。我想检查CKEditor是否已加载,因为如果我第二次加载它,我的textareas就会消失。

7 个答案:

答案 0 :(得分:25)

loaded事件对我不起作用。工作instanceReady

CKEDitor_loaded = false;

CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; }); 

答案 1 :(得分:3)

var waitCKEDITOR = setInterval(function() {
    if (window.CKEDITOR) {
       clearInterval(waitCKEDITOR);
       //CKEDITOR.replace(...);
    }
}, 100/*milli*/);

答案 2 :(得分:1)

  

我查看了API文档,但只能找到已加载的事件。

我不知道是否存在特定属性 - 有可能! - 但您可以使用加载的事件来设置全局标志。这不是很好,但会做这个工作。

// At the top of the script
CKEDitor_loaded = false;

// then later
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; });

您可以考虑在CKEDITOR中设置内容而不是全局变量:

CKEDITOR.flag_loaded = true;

这会更清洁。

答案 3 :(得分:0)

我知道这是一个非常古老的帖子,但在我的研究中它不断出现。我正在动态加载CKEditorjQuery。正如你所发现的那样,我不想多次加载它,因为事情已经发生了。

简单的解决方案:

if (!window.CKEDITOR) {
    // (not loaded yet, your code to load it)
}

答案 4 :(得分:0)

希望这有助于某人。

我还通过AJAX加载了具有CKEDITOR功能的页面片段,因此我遇到了这个问题中列出的许多问题。这是我的解决方案:

function setCk(id){
if(window.CKEDITOR){
    var _instId = CKEDITOR.instances[id];
    if(_instId == undefined){
        CKEDITOR.inline(id);
    }else{
        CKEDITOR.instances[id].destroy();
        CKEDITOR.inline(id);
    }
}

}

在这个代码片段的每个AJAX响应中,我通过调用setCk(textareaId)将脚本元素注入头部。诀窍是销毁目标ID&的任何先前CKEDITOR实例。在每次AJAX片段加载后重新初始化CKEDITOR。

答案 5 :(得分:0)

//creating instance of ck-editor
var yourInstance = CKEDITOR.instances.yourContainer;
//check instance of your ck-editor 
if(yourInstance){
      //destroy instance
      yourInstance .destroy(true); 
}
// create instance again
CKEDITOR.replace( 'yourContainer' );

答案 6 :(得分:0)

如果实例尚未准备好,则文本集将被丢弃

在初始化CkEditor(此处为版本4)时,切勿在编辑器准备好处理它之前设置任何数据。

// Initialize this._editor with replace

if (this._editor.status !== "ready") {
    this._editor.on("instanceReady",
        event => {
            event.editor.setData(data);
        });
} else {
    this._editor.setData(data);
}