У вас есть два варианта. Вы можете добавить встроенную таблицу стилей в обработчик instanceReady
через:
var myStyleSheet = e.editor.document.appendStyleText("body {background:...}");
Это добавляет пустой элемент <style>
к заголовку документа редактора (iframed), содержащего предоставленный текст.
Возвращаемым значением является CSSStyleSheet (объект DOM браузера), поэтому, если вы сохраните его где-нибудь, вы можете добавить, удалить или изменить правила стиля, используя методы DOM из javascript. Я не уверен, сохраняются ли они при смене режима (т.е. после двойного нажатия «Source») или при вызове setData (), но вы можете захватить эти вещи, используя события mode и contentDom, и повторно применить styleSheet в обработчик событий. Обратите внимание, что (по крайней мере для обработчика 'mode') вам нужно проверить, что editor.mode==='wysisyg'
, потому что editor.document
равно нулю в режиме источника.
С другой стороны, если вы действительно хотите встроить свои стили в элемент редактора <body>
, попробуйте определить функцию:
function setEditorStyle(e)
{
var ed = e.editor;
if (ed.mode!=="wysiwyg") return; // don't set styles when in "Source" mode
// now change whatever styles you want, e.g.:
ed.document.getBody().setStyles({backgroundColor:"blue",color:"#FFFFFF",...});
// for setting just 1 style property, you can use .setStyle() instead
}
затем в настройках вашего редактора вам нужно добавить:
..., on: { instanceReady: setEditorStyle, mode: setEditorStyle, ... }, ...
, который устанавливает стиль как после первого создания редактора iframe, так и после возврата в режим «wysiwyg» (обычное редактирование, а не режим исходного кода).
Я не знаю, почему ваши стили сбрасываются при вызове updateElement (); Я делаю то же самое (используя CKEditor v4) и updateElement () не сбрасывает встроенные стили, которые я установил на <body>
. Возможно, это то, что изменилось с версиями CKeditor. В любом случае, если это проблема, вы можете просто вручную сбросить стиль после вызова updateElement (). (Я бы сказал «просто вызовите setEditorStyle ()», но, как показано выше, эта функция написана так, чтобы требовать параметр события e
. Вместо этого вы можете переписать его, используя внешнюю переменную «ed» (например, глобальную переменную) - т.е. изменить
var ed = e.editor;
до
if (!ed) ed = e.editor;
и затем вы можете безопасно вызывать setEditorStyle () из любой точки вашего javascript после создания редактора.)