InsertHtml在错误的位置添加了指向ckeditor的链接

时间:2018-11-04 16:23:25

标签: ckeditor lotus-domino

我已将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("&nbsp;")

还有其他方法可以使用所选文本的当前位置和长度将文本/链接添加到父ckeditor。请帮助解决问题。如果问题不清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

首先,我建议将编辑器升级到最新的4.10.1(或计划在几天内发布的4.11)。

接下来,请参阅CKEditor Link插件代码,并尝试以与此处显示的链接相同的方式应用该链接-https://github.com/ckeditor/ckeditor-dev/blob/major/plugins/link/dialogs/link.js#L24-L70

要使用insertElementinsertHtml,您需要尝试解锁选择内容或集中编辑器(或主体),例如

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 );