我已将ckeditor 4.5.1与多米诺骨牌集成在一起,并且只有一个问题运行良好。我添加了自定义按钮,它将打开另一个窗口。子窗口包含html按钮,这些按钮将使用insertHtml或insertElement插入到编辑器的链接。这对于已经保存的文档效果很好。但是,如果我将新内容粘贴到编辑器中,并使用我的自定义按钮窗口插入链接,则这些链接会在一个地方而不是选定区域中大量添加。在这两种情况下,光标的位置和范围都返回正确的值。
function openReferenceDialog(field){
//OpenReferenceDialog(field,'DialogReference',500,500);
fieldname=field
var oEditor = eval('CKEDITOR.instances.' + fieldname);
var mySelection = oEditor.getSelection();
if (CKEDITOR.env.ie) {
mySelection.unlock(false);
selectedText = mySelection.getNative().createRange().text;
} else {
selectedText = mySelection.getNative();
}
//oEditor.lockSelection(mySelection)
range = mySelection.getRanges()[0];
var filepath=document.location.protocol+'//'+document.location.host+'/'+document.forms[0].DbName.value;
dialog=window.open(filepath + '/' + 'DialogCreateNewGraph' + '?Openform&field='+field+"&seltext="+selectedText,'win','scrollbars=1,resizable=1,width=370,height=270');
dialog.focus();
}
在子窗口中插入代码(对ckeditor不满意)
var CKEdit = window.opener.CKEDITOR;
var oEditor = eval('CKEdit.instances.' + window.opener.fieldname);
var elementHtml = "<a href=\"javascript:OpenCkLink('" + url + "')\">" + txt + "</a>"
alert(window.opener.range.startOffset+"after window")
//oEditor.insertHtml(elementHtml);
element = CKEdit.dom.element.createFromHtml(elementHtml);
oEditor.insertHtml(elementHtml,window.opener.range);
oEditor.insertHtml(" ")
还有其他方法可以使用所选文本的当前位置和长度将文本/链接添加到父ckeditor。请帮助解决问题。如果问题不清楚,请告诉我。
答案 0 :(得分:0)
首先,我建议将编辑器升级到最新的4.10.1(或计划在几天内发布的4.11)。
接下来,请参阅CKEditor Link插件代码,并尝试以与此处显示的链接相同的方式应用该链接-https://github.com/ckeditor/ckeditor-dev/blob/major/plugins/link/dialogs/link.js#L24-L70。
要使用insertElement
或insertHtml
,您需要尝试解锁选择内容或集中编辑器(或主体),例如
document.body.focus();
child = window.open(path, '', 'toolbar=no,width=800,height=370,directories=no,status=yes,scrollbars=yes,menubar=no,resizable=yes');
child.creator = self;
但是这些方法可能无法在较旧的IE中运行,因此最好的方法与Link插件相同。基本上,您需要:
// Get Selection
var selection = CKEDITOR.instances.editor1.getSelection();
// Get Range or Ranges
var range = selection.getRanges( )[0];
// You use the range to insert either text or wrap link around selected text
// Please see Link plugin code for that.
// Set some sample link attributes
var attributes = {};
attributes.target = '_blank';
attributes.href = link_passed_as_ paramater;
// Create new style
var style = new CKEDITOR.style( { element: 'a', attributes: attributes } );
style.type = CKEDITOR.STYLE_INLINE;
// Apply style.
style.applyToRange( range, CKEDITOR.instances.editor1 );