|
Модераторы: Sardar, Aliance |
|
Stampede |
|
||||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
Всем привет!
Взываю к коллективной мудрости. Есть следующая задача. Я приделываю к своему сайту визуальный редактор NicEdit. Выбрал его за компактность, простоту и разборчивый код. Вроде пока все получается, хотя многое приходится затачивать под свои нужды. Сейчас встал вопрос о том, чтобы при копированиии в поле редактирования содержимое буфера очищалось от разметки HTML. В ходе продолжительных поисков и экспериментов наткнулся вот на такую подсказку:
Закодил согласно описанию, получилось вот так: Остается одна маленькая досадная мелочь: если вклеивать содержимое буфера через меню или перетаскиванием, то "очистительный фильтр", естественно, не срабатывает. Кто подскажет, что здесь можно сделать? Для удобства привожу полный код страницы:
Заранее спасибо! -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Можно перехватывать событие onpaste и сохранять контент в переменной. После небольшого таймаута можно выковырять изменения в контенте простым текстовым сравнением с начала и конца текста с сохраненным значением.
Правда, вероятно, возможны разные глюки, при вставке некорректного Html, например. При этом броузер будет корректировать контент и сравнение будет глючить. Возможно, можно выковыривать изменения более разумно, используя сохраненную позицию курсора до вставки и после вставки, хотя с этим надо возится... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Котокобра |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 147 Регистрация: 26.11.2009 Репутация: нет Всего: 4 |
а что мешает очищать всегда, когда произведена вставка?
|
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
К содержимому буфера в общем случае не так легко доступиться, поэтому приходится идти на такие вот ухищрения. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Котокобра |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 147 Регистрация: 26.11.2009 Репутация: нет Всего: 4 |
посмотрел пример. я думаю, текст нужно парсить. что-нибудь в этом духе:
|
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
Котокобра, загвоздка не в том, чтобы руками вычистить разметку (хотя, конечно, это делается не так прямолинейно, как в вашем примере — вспомним хотя бы, что теги могут быть с атрибутами), а в том, чтобы получить содержимое буфера обмена. Firefox, например, скрывает его от программного доступа из соображений безопасности. Потому-то WYSIWYG-редакторы вынуждены делать финт ушами: позволяют браузеру сделать вставку своим внутренними средствами, но при этом перенаправляют вывод в текстовое поле путем изменения фокуса.
Какие еще будут идеи? -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
Если другого выхода не будет, тупо поставлю на onpaste заглушку с сообщением, чтобы копировали с клавы. Примерно так, как это сделано в TinyMCE:
Но прежде чем капитулировать, хочется все же еще немного повоевать. Так что продолжаем мозговой штурм. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
вобще-то, событие onpaste в Мозиле есть. Убедиться в этом достаточно легко
А в чем проблема? Получить содержимое области редактирования? Получить положение "курсора"? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
Событие-то есть, но нет простой возможности получить содержимое буфера. Скажем, команды cut/copy/paste, выполняемые по document.execCommand, не дают ничего сделать, пока не подредактируешь настройки безопасности в пользовательском файле user.js. Существуют хаки в виде флэшевых компонентов для работы с буфером (например, ZeroClipboard), но нет никакой гарантии, что в будущем Adobe не прикроет эту лавочку. Впрочем, как вариант можно и попробовать. Stay tuned! Это сообщение отредактировал(а) Stampede - 13.4.2011, 08:26 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
ksnk |
|
||||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
А зачем нам буфер? Нам нужно получить изменение. Вот небольшая модификация "рабочего примера" для демонстрации. Из за теперешнего перехвата клавиатурной вставки срабатывает только на вставку из copy-paste менюшки. Осталось только прикрутить что-то такое на drag&drop. Но, вроде, даже события такие где-то появились...
Добавлено через 1 минуту и 10 секунд Я проверяю на FireFox. сейчас, к сожалению, нет возможности проверить на других броузерах. :( -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
ksnk, спасибо за деятельное участие в решении вопроса. Метод не без недостатков (например, при большом объеме вклеиваемого форматированного текста будет заметно видимое перемигивание), но в целом "ход вашей мысли мне нравится" © , так что держите плюса.
-------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 4 Всего: 144 |
Ну что я могу сказать: вроде бы получилось. Посмотреть и потестить можно вживую:
Код, приведенный ksnk, пришлось подправить в части коррекции маркеров начала и конца расхождения до границ тегов. Это, конечно, далеко не окончательый вариант, но без этого вообще вставлялось с ненужными хвостами. Ну и перемигивание при вставке, действительно, довольно заметное. Полный код страницы такой:
Если у кого-то будут еще какие-либо другие предложения — давайте обсудим. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Embedded |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: нет Всего: 1 |
довольно неплохая штука nicedit, имхо tinymce сильно загружен ненужностямии у tiny какие-то странные глюки при копировании/вставке из ie в opera
Это сообщение отредактировал(а) Embedded - 29.4.2011, 11:46 |
|||
|
||||
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |