• Как работать с htmldataprocessor и замена script без dataFilter.addRules в ckeditor

    По умолчанию ckeditor помещает все скрипты в документе в комментарий, и кодирует код скрипта через encodeURIComponent. Это политика безопасности. Чтобы скрипт не выполнялся при редактировании контента.  В  умелых руках это очень удобная фича. Заменяться могут не только скрипты, но и embed, iframe и object. К примеру текстовый парсер используется плагином flash для того, чтобы вставлять в документ flash объекты. При этом такой объект не инициализируется при редактировании,  а место него видна лишь иконка. Такую замену осуществляет editor.dataProcessor. Вот как он это делает

    afterInit: function( editor ) {
    	var dataProcessor = editor.dataProcessor,
    	dataFilter = dataProcessor && dataProcessor.dataFilter;
    	if ( dataFilter ) {
    		dataFilter.addRules({
    			elements: {
    				'p(span2)': function( element ) {
    					return editor.createFakeParserElement( element, 'cke_p_span', 'p_span', true );;
    				},
    			}
    		}, 5 );
    	}
    }

    createFakeParserElement создает "фейковый" (не настоящий) элемент, картинку и заменяет на него все теги <p> с классом span2. Так работает текстовый  dataProcessor.

    Цифра 5 тут не случайна. Это порядок в котором происходит замена. Вот тут и возникает проблема замены script. Дело в том, что их экранирует сама система ckeditor, т.е. они в этот круговорот   dataProcessor.dataFilter не входят. Как же заменить <script> на свой фейковый элемент, или просто получить его значение.