Ответ 1
Из личного опыта я рекомендую не делать этого, если ваша цель - обеспечить очень ограниченную функциональность. Огромное количество различий в браузерах и сложность их обходных решений делают это очень сложной и трудоемкой задачей, если вы хотите сделать это хорошо.
Если это вас не отпустило, вот мои мысли по вашим индивидуальным вопросам:
iframe docs и contenteditable divs
Я рекомендую подход iframe по двум основным причинам:
- У вас есть полный контроль над типом документа, CSS и script в iframe. Это важно, если вы хотите согласованного поведения и внешнего вида и хотите использовать свой редактор на разных страницах.
- Firefox, в частности, довольно неспособен с элементами
contenteditable
, которые они ввели только относительно недавно (версия 3.0), в то время как designMode существует на документах в течение многих лет (начиная с pre-1.0, около 0.6, если память обслуживается) и работает довольно хорошо.
кросс-браузерный стиль
Если для вас важно иметь единообразные результаты применения стилей в разных браузерах, тогда вам вообще нужно будет написать свой собственный код стиля. Тем не менее, это приведет к поломке встроенного стека отмены, и вам нужно будет реализовать свою собственную систему отмены/повтора.
добавление элементов в цепочку отмены
Нет никакого программного способа взаимодействия со встроенным стеком отмены браузера. Вам нужно будет написать свой собственный.
Обновить ноябрь 2012
В ваших работах есть спецификация для пользовательского отменить/повторить, чтобы в конечном итоге это было возможно. Вот соответствующие ошибки для Mozilla и WebKit.
сохранение выбора текста
Мне нужно объявить здесь свои интересы, так как я написал Rangy. Я не думаю, что там есть лучшая библиотека, которая выполняет аналогичную работу; Google Closure имеет API диапазона/выбора, но я думаю, что он использует собственный собственный интерфейс, а не эмуляцию DOM Range и общих объектов выбора браузера. IERange - это еще одна библиотека, похожая по идее на Rangy, но гораздо менее полностью реализована и, казалось бы, оставлена сразу после выпуска ее автором.