InsertHtml добавляет ссылки на ckeditor в неправильном месте - PullRequest
0 голосов
/ 04 ноября 2018

Я интегрировал ckeditor 4.5.1 с domino, и он работает нормально только с одной проблемой. Я добавил пользовательскую кнопку, которая откроет другое окно. Дочернее окно содержит 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 голосов
/ 06 ноября 2018

Прежде всего, я бы порекомендовал обновить редактор до последней версии 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...