Вставка в форматированный текст не удается в Firefox при использовании OnPaste

Я пишу расширение для 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
  • Я использую некоторые JQuery для выбора элемента
  • Там также, кажется, есть некоторая модификация Function.prototype в nicEdit, который я нахожу странным
  • Я мог бы использовать другой Rich Text Editor, но считаю это упражнением в отладке
  • Код, указанный выше, предназначен ТОЛЬКО ДЛЯ ПОЖАРНОГО

1 ответ

Решение

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

Другие вопросы по тегам