Вставка в форматированный текст не удается в Firefox при использовании OnPaste - PullRequest
0 голосов
/ 05 января 2011

Я пишу расширение для nicEdit , которое приведет к тому, что весь вставленный форматированный текст будет вставлен как обычный текст. Мой код отлично работает в Chrome и IE7, но не работает в Firefox 3 (и, по-видимому, Firefox 2, но по разным причинам, в частности, из-за отсутствия события вставки).

Странная часть в том, что мой код отлично работает, когда вставляемый текст - простой текст. Кажется, задыхается от любого форматирования. Вот шаги, включенные в версию Firefox, которые запускаются при вставке (событие запускается, но вставка не выполняется):

  • Получить текущий выбор и диапазон
  • Создайте новый div с contentEditable = true и добавьте его в DOM
  • Переместить каретку в новый div
  • установить таймаут, чтобы получить HTML из нового div, очистить его и поместить в старое выделение (которое я получил на шаге 1)
  • вернуть true (разрешение завершить оригинальную вставку, вставить содержимое в новый div)

Кажется, что все эти шаги выполнены, но вставка никогда не происходит. Я не получаю ошибок в консоли (только предупреждение, относящееся к ошибке разбора на text-align - объявление отбрасывается), и ничего не подозрительного не происходит, когда я отлаживаю с Firebug (за исключением того, что моя вставка кажется пустой, что является проблемой).

Предупреждение заставляет меня думать, что Firefox может просто не разобрать содержимое, которое я вставил, но без моего кода перехвата я могу просто вставить в nicEditor.

Я загрузил свой тестовый скрипт только для Firefox в http://www.ryankinal.com/paste/firefox.html - это код, который Firefox выполняет из моего полного расширения.

Несколько замечаний:

  • Я черпал вдохновение из плагина TinyMCE paste
  • Я использую jQuery для выбора элемента
  • Там также, кажется, есть некоторая модификация Function.prototype в nicEdit, которую я нахожу странным
  • Я мог бы использовать другой Rich Text Editor, но считаю это упражнением в отладке
  • Код, указанный выше, предназначен ТОЛЬКО ДЛЯ ПОЖАРОФОКСА

1 Ответ

1 голос
/ 06 января 2011

Проблема в том, что событие вставки просто слишком поздно для перенаправления каретки в некоторых браузерах, включая Firefox. Вы сможете сделать трюк с перенаправлением каретки, если перехватываете сочетания клавиш для вставки ( Ctrl + V , Cmd + V и Shift + Вставить ) и игнорировать событие вставки, но это означает, что вставки, запускаемые контекстом и меню редактирования, не рассматриваются. Однако я думаю, что это лучшее, что вы можете сделать.

...