Я считаю, что название говорит само за себя, но все же, возможно, мне стоит спросить подробнее. Я создаю редактор WYSIWYG, и я действительно в самом его начале. Итак, я понял, что, возможно, знание плюсов и минусов просветит меня. По сути, мой вопрос в том, что, поскольку я хочу, чтобы редактор работал по крайней мере с 90% во всех основных браузерах, как дальше я могу пойти, используя contenteditable в div, и каковы минусы и плюсы использования contenteditable по сравнению с designMode и iframe ? Кроме того, во время исследования я нашел этот редактор. Я считаю, что он не использует ни один из этих атрибутов и перемещает расположение текстового поля. Это лучший подход? Что ж, я знаю, что существует множество факторов, которые влияют на ответ на последний вопрос, но, как я уже упоминал, самое важное, что я ищу в редакторе, - это то, что его могут использовать 90% пользователей. NB: я не хочу использовать сторонние библиотеки.
Насколько надежно использование contenteditable в div для WYSIWYG-редактора?
Ответы (3)
В большинстве случаев я предпочитаю iframe с designMode
в большинстве браузеров и contenteditable <body>
в IE, что упрощает работу. Причины:
- Наличие редактируемого содержимого в iframe эффективно помещает его в песочницу и позволяет вам перетащить редактор на любую страницу с уверенностью, что события CSS и DOM страницы не могут повлиять на редактируемый контент.
designMode
более надежен в Firefox. Я видел несколько ошибок сcontenteditable
, которых нет сdesignMode
, вероятно, потому, что contenteditable был добавлен в Firefox относительно недавно, тогда как designMode существует примерно с 2003 года.
Что касается ACE, его подход к текстовым полям умен и имеет много преимуществ, но я подозреваю, что подход ограничен моноширинными шрифтами. Кроме того, CodeMirror 2 использует похожий подход, но аналогично ограничивается моноширинными шрифтами.
contentEditable
не работает с числами с плавающей запятой в IE:
<p>
<img style="float:left" src="foo">
<p contentEditable="true">very long text here ...
... this text won't flow round the image</p>
</p>
Это потому, что contentEditable
запускает печально известный hasLayout
. В остальном все работает очень хорошо.
Атрибуты
designMode
иcontentEditable
, а также API-интерфейсы, управляющие редакторами форматированного текста, реализованы во всех основных браузерах, включая Firefox, Opera, Safari, Google Chrome и, конечно же, Internet Explorer.
http://blog.whatwg.org/the-road-to-html-5-contenteditable
Марк Финкл написал прекрасное общее описание designMode, а позже добавил сообщение о contentEditable.