CKEditor无法从iframe获取当前实例
CKEditor cannot get current instance from iframe
CKEditor 4或以上
我有表单>文本区与CKEditor启用和功能。
我有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
这是javascript在主页html
function close_dialog() {
$('#media-modal').modal('hide');
}// close_dialog
function test_current() {
console.log( CKEDITOR.currentInstance.name );
}
问题是i 不能得到当前活动CKEditor插入元素与insertElement命令。
CKEDITOR。当前实例未定义或为null
window.parent.CKEDITOR。当前实例未定义或为null
如何从iframe获得当前活动CKEditor ?
测试文件:http://www.megafileupload.com/en/file/420060/test-ckeditor-zip.html
如果CKEDITOR.currentInstance
为null/undefined
,则没有编辑器实例处于活动状态。这意味着您将焦点从编辑器移到不被识别为其部分的地方。
然而,如果你正在使用CKEditor的对话框(你吗?)编辑器实例应该始终是活跃的,当这个对话框为它打开。如果这是您的情况,那么您需要向我们提供一个工作示例,因为很难猜测哪里可能出错。
第二个选项是,你不使用CKEditor的对话框,然后你必须照顾注册该iframe到CKEditor的focusManager,虽然这是棘手的,所以你宁愿不使用CKEditor的第三方对话框。
编辑当我点击"测试"按钮时,test_current
功能工作正常,但编辑器必须集中。但是从你点击按钮编辑器的那一刻起200毫秒后,编辑器会模糊,你将无法从currentInstance
中获得它。为了避免在点击按钮时模糊编辑器,您需要在focusManagers
中注册它(如果它将与两个编辑器一起使用)。
我想这样做
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;
}
}
CKEditor是null/undefined,如Reinmar所说。
现在我可以找到工作的方式与当前实例,即使你点击外部CKEditor。
这里是用于测试的示例文件。http://www.megafileupload.com/en/file/448409/test-ckeditor-zip.html
我所做的是…
- 在javascript (in html)中为当前实例添加全局变量
- 点击打开模式对话框按钮,获取当前实例并设置为选择1中的全局变量。
- 在模态对话框中单击iframe插入按钮,获取window.parent。Current_instance变量并用作texteditor id。(
var parent_cke_current_id = window.parent.current_instance_id;
) - 现在做任何你想点击CKEditor实例。例如(
CKEDITOR.instances[parent_cke_current_id].insertElement(element);
)
谢谢你,Reinmar。
- 使用jQuery获取Dropzone实例/对象
- 如何在速度模板中获取LiferayPortlet实例id
- 如何获取单选按钮的多个实例的选定单选按钮值
- 无法在XUL Firefox扩展中获取TinyMCE的实例
- 如何在另一个组件中获取指令/组件实例
- 如何从一个友好的iframe中获取iframe实例
- 更新Redux状态&然后在同一实例中获取更新状态
- 从对象实例中获取变量名称
- 可以获取模板实例值,但不能将其用于其他函数
- 突出显示所选文本并同时获取实例
- 如何获取先前创建的Google图表的实例
- 获取JSON标记(JAVASCRIPT)中的所有JSON实例
- jquery获取类的下一个实例的值
- 获取 CodeMirror 实例
- 如何通过元素选择器获取tinyMCE编辑器实例
- 剑道网格:在Angular指令中获取一个实例
- 如何获取谷歌图表的实例
- 使用ID获取AmChart的实例
- 从实例获取主干视图的父类
- 使用实例获取所选标记的id