Богатая текстовая паста терпит неудачу в Firefox при использовании OnPaste

StackOverflow https://stackoverflow.com/questions/4608913

Вопрос

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

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

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

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

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

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

Пара вещей, чтобы отметить:

  • Я сделал значительное количество вдохновения от плагина Tinymce Page
  • Я использую jQuery для выбора элементов
  • Также кажется, какая-то модификация Function.prototype в Nieditit, который я нахожу странным
  • Я мог бы использовать другой богатый текстовый редактор, но считаю это упражнением в отладке
  • Код, связанный выше, предназначен только для Firefox
Это было полезно?

Решение

Проблема в том, что событие пасты просто слишком поздно, чтобы перенаправить карету в некоторых браузерах, включая Firefox. Вы сможете сделать трюк Caret-Redirect, если вы перехватываете ярлыки клавиатуры для вставки (Ctrl.+Внимание, CMD+Внимание а также Сдвиг+Вставлять) И игнорируйте событие пасты, но это означает, что пасты, вызванные контекстом, и меню редактирования не покрываются. Я думаю, что это лучшее, что вы можете сделать, однако.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top