Вставка в форматированный текст не удается в 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) и проигнорируете событие вставки, но это означает, что вставки, запускаемые контекстом, и меню редактирования не распространяется. Однако я думаю, что это лучшее, что вы можете сделать.