CKEditor 4或以上
我有表格>具有CKEditor功能的textarea。
我在模态对话框中有iframe,iframe内部是带有insert_media()javascript函数的按钮。
function insert_media( element ) {
// get element html decode
element = htmlspecialchars_decode( element, 'ENT_QUOTES' );
// htmlspecialchars_decode is external function.
// CKEditor insert element ---------------------------------------------
// use .insertElement()
var CKEDITOR = window.parent.CKEDITOR;
var element = CKEDITOR.dom.element.createFromHtml(element);
// body_value is name of textarea
// this code only works with specific textarea NOT current active textarea
//CKEDITOR.instances.body_value.insertElement(element);
var current_instance_ckeditor = window.parent.test_current();
// CKEditor insert element ---------------------------------------------
// close modal dialog at parent window
window.parent.close_dialog();
// done
return false;
}// insert_media
这是主页html中的javascript
function close_dialog() {
$('#media-modal').modal('hide');
}// close_dialog
function test_current() {
console.log( CKEDITOR.currentInstance.name );
}
问题是我无法获取当前活动的CKEditor 以使用insertElement命令插入元素。
CKEDITOR.currentInstance未定义或为空
window.parent.CKEDITOR.currentInstance未定义或为空
如何从iframe 获取当前活动的CKEditor ?
测试文件:http://www.megafileupload.com/en/file/420060/test-ckeditor-zip.html
答案 0 :(得分:3)
如果CKEDITOR.currentInstance
为null/undefined
,则没有任何编辑器实例处于活动状态。这意味着您将焦点从编辑器移到了无法识别的位置。
但是,如果您正在使用CKEditor的对话框(是吗?),编辑器实例应始终处于活动状态,此时将打开此对话框。如果这是你的情况,那么你需要向我们提供一个有效的例子,因为很难猜出什么是错误的。
第二个选项是您不使用CKEditor的对话框,然后您必须注意将该iframe注册到CKEditor的focusManager,尽管这很棘手,因此您不应该使用第三方与CKEditor的对话框。
编辑当我点击“测试”按钮时,test_current
功能正常工作,但必须重点关注编辑器。但是,从您点击按钮编辑器的那一刻起200ms后,您将无法从currentInstance
获得它。为了避免在单击按钮时出现模糊编辑器,您需要在focusManagers
中注册它(如果它们将与两者一起使用,则需要在两个编辑器中注册)。
答案 1 :(得分:0)
我会这样做
var ck_instance_name = false;
for ( var ck_instance in CKEDITOR.instances ){
if (CKEDITOR.instances[ck_instance].focusManager.hasFocus){
ck_instance_name = ck_instance;
return ck_instance_name;
}
}
答案 2 :(得分:0)
如Reinmar所说,CKEditor为null / undefined。
现在,即使您在CKEditor外部点击,我也可以找到使用当前实例的方法。
以下是测试的示例文件。 http://www.megafileupload.com/en/file/448409/test-ckeditor-zip.html
我做的是......
var parent_cke_current_id = window.parent.current_instance_id;
)CKEDITOR.instances[parent_cke_current_id].insertElement(element);
)谢谢Reinmar。