Богатая текстовая паста терпит неудачу в Firefox при использовании OnPaste
-
25-09-2019 - |
Вопрос
Я пишу расширение 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+Внимание а также Сдвиг+Вставлять) И игнорируйте событие пасты, но это означает, что пасты, вызванные контекстом, и меню редактирования не покрываются. Я думаю, что это лучшее, что вы можете сделать, однако.