Дополнительно к ответу uadrive:
insertAtCaret
не будет играть ни с одним редактором в реальном времени, потому что все они используют приемлемый iframe. Основная teaxtarea (или другой html-элемент) скрывается при инициализации.
uadrive прав, вам нужно будет добавить обработчики в этот iframe, чтобы выполнять любые действия, когда вам это нужно. Если вы используете параметр конфигурации tinymce "paste_block_drop", вы не сможете выполнить какое-либо действие перетаскивания, если вы установите для этого параметра значение true, все события перетаскивания будут заблокированы.
Для вставки кода в позицию каретки в tinymce есть команда для использования:
tinyMCE.execCommand('mceInsertContent', false, 'my new content to be added');
Вот некоторый код, с которым можно поиграть (это действие, которое я выполняю по капле в редакторе, я восстанавливаю вставленное содержимое, а затем в соответствии с моей потребностью добавляю / фильтрую его и вставляю обратно в редактор).
setup : function(ed)
{
ed.onInit.add(function(ed){
$(ed.getDoc()).bind('drop', function(event){
ed.content_pre = ed.getContent();
ed.drag_content_html = event.originalEvent.dataTransfer.getData('text/html');
ed.drag_content_plain1 = event.originalEvent.dataTransfer.getData('text/plain');
//console.log('x', ed.content_pre, ed);
tinymce.activeEditor = ed;
setTimeout(function(){
var ed = tinymce.activeEditor;
var content_post = ed.getContent();
var diff_front = 0;
for (var i=0; i < ed.content_pre.length; i++) {
if (ed.content_pre.charCodeAt(i) !== content_post.charCodeAt(i)) {
diff_front = i;
break;
}
}
if (ed.content_pre.substr(diff_front-2, 2) == '<p') diff_front -= 2;
if (ed.content_pre.substr(diff_front-1, 1) == '<') diff_front -= 1;
ed.setContent( ed.content_pre.substr(0, diff_front) + ed.drag_content_plain1 + ed.content_pre.substr(diff_front) );
},0);
});
});
},