Начал прикручивать вот этот
http://www.samclarke.com/sceditor/example/example.php редактор (SCEditor) к своему проекту. Редактор неплохой, написан на jquery поддерживает
WYSIWYG BBCode режим, как раз то что мне нужно.
Столкнулся со следующей проблемой:
Мне необходимо из Popup окна в визивиг ифрайм окно этого редактора вставлять картинки и ссылки на файлы.
В самом Popup окне как можно догадаться я подгружаю данные из файлового архива моей CMS-ки. Т.е. из родительского окна, где инициализирован данный редактор, я жмакаю ссылку, открывается Popup окно, где я выбираю картинку и при клике на неё или на ссылку она должна вставляеться в родительское окно в WYSIWYG, в позицию курсора.
Набросал пример
http://dym.su/sceditor/
За вставку HTML в редакторе отвечает функция:
base.wysiwygEditorInsertHtml = function (html, endHtml) {
base.focus();
// don't apply to code elements
if($(getWysiwygSelectedContainerNode()).is('code') ||
$(getWysiwygSelectedContainerNode()).parents('code').length !== 0)
return;
if(typeof endHtml !== "undefined")
html = html + base.getWysiwygSelectedHtml() + endHtml;
if (getWysiwygDoc().getSelection) {
var range = getWysiwygSelection();
var htmlNode = getWysiwygDoc().createElement('div');
htmlNode.innerHTML = html;
// A better way of inserting the HTML would be to use documentFragments
// however you then need to find the last inserted node to setStartAfter
htmlNode = htmlNode.children[0];
range.deleteContents();
range.insertNode(htmlNode);
range = range.cloneRange();
// move the cursor to the end of the insertion
if(htmlNode.parentNode !== range.startContainer || !$.browser.opera)
range.setStartAfter(htmlNode);
else // this is only needed for opera
{
return;
//range.setStart(htmlNode.parentNode, range.startOffset+1);
//range.setEnd(htmlNode.parentNode, range.endOffset+1);
}
// change current range
wysiwygEditor.contentWindow.getSelection().removeAllRanges();
wysiwygEditor.contentWindow.getSelection().addRange(range);
}
else if (getWysiwygDoc().selection && getWysiwygDoc().selection.createRange)
getWysiwygDoc().selection.createRange().pasteHTML(html);
else
base.execCommand("insertHtml", html);
lastRange = null;
};
но она вшита в объект и как до нее достучаться из вне я ума не представляю, понимаю, что без
window.opener здесь не обойтись, но как добраться до этой функции, не инициализировав заново редактор я не знаю
Может есть какой способ? или нужно своебразное API к нему дописывать? Если не сложно направьте на путь истинный...