我该如何确定CKEditor是否已加载?我已查阅API文档,但只找到了加载事件。我想检查CKEditor是否已加载,因为如果我第二次加载它,我的文本区域就会消失。
我该如何确定CKEditor是否已加载?我已查阅API文档,但只找到了加载事件。我想检查CKEditor是否已加载,因为如果我第二次加载它,我的文本区域就会消失。
loaded
事件对我没用,但instanceReady
事件可用:
CKEDitor_loaded = false;
CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; });
var waitCKEDITOR = setInterval(function() {
if (window.CKEDITOR) {
clearInterval(waitCKEDITOR);
//CKEDITOR.replace(...);
}
}, 100/*milli*/);
// At the top of the script
CKEDitor_loaded = false;
// then later
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; });
你可以考虑在 CKEDITOR
中设置某些内容,而不是使用全局变量:
CKEDITOR.flag_loaded = true;
在初始化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);
}
//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' );
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)。诀窍在于,在每次 AJAX 片段加载后销毁目标 ID 的任何先前的 CKEDITOR 实例,并重新初始化 CKEDITOR。我知道这是一个非常古老的帖子,但在我的研究中,它一直出现。我通过 jQuery
动态加载 CKEditor
。我不想多次加载它,因为会出现一些问题,就像你发现的那样。
简单解决方案:
if (!window.CKEDITOR) {
// (not loaded yet, your code to load it)
}
|| {}
链式调用来避免 CKEDITOR 或对象层次结构中的任何其他键尚不可用的情况,代码如下:const isCKEInstanceReady = instanceName => (((window.CKEDITOR || {}).instances || {})[instanceName] || {}).status === 'ready';
- Ashley Wilson