Потратив более 15 часов на эту проблему (самоотверженность, я знаю), я нашел частичное решение, которое работает в FF и Safari, но не в IE. На данный момент это достаточно хорошо для меня, хотя я мог бы продолжить работу над этим в будущем.
Решение: при вставке HTML в текущую позицию каретки лучше всего использовать следующую функцию:
tinyMCE.activeEditor.selection.setContent(htmlcontent);
В Firefox и Safari эта функция будет вставлять содержимое в текущую позицию каретки внутри фрейма, который WordPress использует в качестве редактора TinyMCE. Проблема с IE 7 и 8 заключается в том, что функция добавляет содержимое в верхнюю часть страницы, а не в iframe (то есть полностью пропускает текстовый редактор). Чтобы решить эту проблему, я добавил условный оператор на основе этого кода , который будет использовать эту функцию вместо IE:
tinyMCE.activeEditor.execCommand("mceInsertRawHTML", false, htmlcontent);
Однако проблема для этой второй функции заключается в том, что позиция каретки устанавливается в начало области публикации после того, как она была вызвана (без надежды вызвать ее в зависимости от диапазона браузера и т. Д.). Где-то ближе к концу я обнаружил, что эта функция работает для восстановления позиции каретки в конце вставленного содержимого с помощью первой функции:
tinyMCE.activeEditor.focus();
Кроме того, он восстанавливает позицию каретки до конца вставленного содержимого без необходимости расчета длины вставленного текста. Недостатком является то, что он работает только с первой функцией вставки, которая, похоже, вызывает проблемы в IE 7 и IE 8 (что может быть скорее ошибкой WordPress, чем TinyMCE).
Словесный ответ, я знаю. Не стесняйтесь задавать вопросы для уточнения.