如何确定CKEditor是否已加载?我查看了API文档,但只能找到加载的事件。我想检查CKEditor是否已加载,因为如果我第二次加载它,我的textareas就会消失。
答案 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)
我知道这是一个非常古老的帖子,但在我的研究中它不断出现。我正在动态加载CKEditor
到jQuery
。正如你所发现的那样,我不想多次加载它,因为事情已经发生了。
简单的解决方案:
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);
}