Вы по существу просите полный механизм визуализации, доступный Java. Лично, я сохранил бы меня стычка и обратился бы к дочернему процессу.
Иначе, я столкнулся с этим чистым браузером Java: Lobo
Потратив более 15 часов на эту проблему (я знаю, самоотверженность), я нашел частичное решение, которое работает в FF и Safari, но не в IE. На данный момент для меня этого достаточно, хотя я мог бы продолжить работу над этим в будущем.
Решение: при вставке HTML в текущую позицию курсора лучше всего использовать функцию:
tinyMCE.activeEditor. selection.setContent (htmlcontent);
В Firefox и Safari эта функция вставит контент в текущую позицию курсора в iframe, который WordPress использует в качестве редактора TinyMCE. Проблема с IE 7 и 8 заключается в том, что функция, кажется, добавляет контент в верхнюю часть страницы, а не iframe (т.е. полностью пропускает текстовый редактор). Чтобы решить эту проблему, Я добавил условный оператор , основанный на этом коде , который будет использовать эту функцию вместо IE:
tinyMCE.activeEditor.execCommand ("mceInsertRawHTML", false, htmlcontent);
Проблема для этой секунды функция, однако, заключается в том, что позиция курсора устанавливается в начало области публикации после того, как она была вызвана (без надежды на ее вызов, исходя из диапазона браузера и т. д.). Где-то ближе к концу я обнаружил, что эта функция восстанавливает положение курсора в конце вставленного содержимого с помощью первой функции:
tinyMCE.activeEditor.focus ();
Кроме того, он восстанавливает положение курсора до конец вставленного содержимого без необходимости вычислять длину вставленного текста. Обратной стороной является то, что он работает только с первой функцией вставки, которая, кажется, вызывает проблемы в IE 7 и IE 8 (что может быть скорее ошибкой WordPress, чем TinyMCE).
Я знаю многословный ответ. Не стесняйтесь задавать вопросы для уточнения.
Я заимствовал это из здесь .
function setCaretTo(obj, pos) {
if(obj.createTextRange) {
/* Create a TextRange, set the internal pointer to
a specified position and show the cursor at this
position
*/
var range = obj.createTextRange();
range.move("character", pos);
range.select();
} else if(obj.selectionStart) {
/* Gecko is a little bit shorter on that. Simply
focus the element and set the selection to a
specified position
*/
obj.focus();
obj.setSelectionRange(pos, pos);
}
}
Первое, что вам нужно сделать, это добавить диапазон в конце содержимого, которое вы хотите создать.
var ed = tinyMCE.activeEditor;
//add an empty span with a unique id
var endId = tinymce.DOM.uniqueId();
ed.dom.add(ed.getBody(), 'span', {'id': endId}, '');
//select that span
var newNode = ed.dom.select('span#' + endId);
ed.selection.select(newNode[0]);
Это стратегия, которую использовали сами разработчики TinyMCE при написании Selection.js. Чтение основного источника может быть очень полезным для такого рода проблем.