По умолчанию 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> на свой фейковый элемент, или просто получить его значение.

Рассказать друзьям

 Самая простая и удобная

function htmlspecialchars( html){
  var div =  document.createElement('div');
  div.innerText = html;
  return div.innerHTML;
}

но это работа с дом. Медленно.

Другой вариант.

function htmlspecialchars(str) {
 if (typeof(str) == "string") {
  str = str.replace(/&/g, "&amp;"); /* must do &amp; first */
  str = str.replace(/"/g, """);
  str = str.replace(/'/g, "&#039;");
  str = str.replace(/</g, "<");
  str = str.replace(/>/g, ">");
  }
 return str;
 }

далее

Рассказать друзьям

JSONP  Отправка post запроса на чужой домен задача часто встречающаяся. Как оказалось работающего решения у нее нет. Есть лишь пара "костыльных" вариантов.

  Первый, и самый работающий это jsonp. Однако jsonp - это GET запрос. Т.е. количество данных переданных за один запрос в разных ситуациях не может превышать 1024 байта, или другого значения. Зависит то ли от настроек браузера, то ли от настроек сервера.

  Объясню, что такое jsonp. При jsonp запросе, в документе динамически создается элемент <script>, его атрибуту src присваивается url содержащий все данные, которые Вы хотите передать на сервер. Затем, элемент присоединяется к документу и в этот момент происходит запрос на сервер. В ответ, сервер может вернуть js код, который выполниться после загрузки. Обычно в одним из параметров в src скрипта подают еще название callback  функции, которую нужно будет вызвать. Рассмотрим подробнее

Рассказать друзьям

 javascript главное окно. Как в js определить, что скрипт запустился в главном фрейме

if( !self.parent.frames.length ){
 alert('Мы находимся в главном окне');
}

т.е. смотрим сколько фреймов содержит родитель окна

Рассказать друзьям

Как в ckeditor отключить контекстное менюВ ckeditor'е есть такая неприятная особенность, которая из версии в версию меня раздражает все больше и больше. Это совершенно бесполезное контекстное меню. Хотя оговорюсь. Контекстное меню это одна из важных составляющих плагинов этого чудесного редактора wysiwyg. Однако при обычном использовании эта фича редактора сильно раздражает. Особенно если проверка правописания включена, то клик правой кнопкой по слову место ожидаемых вариантов написания дает совершенно бесполезные - вставить, копировать. А наживать каждый раз ctrl просто лень. Еще раздражает то, что из-за приватной настройки браузеров, эти функции копирования текста попросту не работают, и при нажатии просто выдают ошибку. Поэтому отключим данную фичу, за ненадобностью. Как это сделать? Как в ckeditor отключить контекстное меню.

Рассказать друзьям

Подкатегории

Все о разработке на библиотеке jQuery