Есть ли замена для document.execCommand? (или безопасно использовать document.execCommand?) - PullRequest
4 голосов
/ 30 апреля 2020

Я создаю любительский форматированный текстовый редактор с vanilla JavaScript, а document.execCommand () имеет важное значение для включения основных функций текстового редактора.

Например, команды bold, itali c и неупорядоченный список:

Array.from(toolbarBtn).forEach(btn => {
  btn.addEventListener('click', (e) => {
    e.preventDefault();
    if (e.target.id === "toolbar__btn--bold") {
      format('bold');
    }
    if (e.target.id === "toolbar__btn--italic") {
      format('italic');
    }
    if (e.target.id === "toolbar__btn--unorderedlist") {
      format('insertunorderedlist');
    }
});
});

Однако при поиске этой команды в MDN Web Docs я обнаружил, что эта команда считается устаревшей :

Устаревшее Эта функция устарела. Хотя он все еще может работать в некоторых браузерах, его использование не рекомендуется, поскольку его можно удалить в любое время. Старайтесь избегать его использования.

Итак, мне интересно, есть ли в vanilla JavaScript какой-нибудь метод замены, который мог бы создать все функции Rich Text Editor, как execCommand ()?

Поиск в Google не дал мне никаких результатов, поэтому, в то же время, мне интересно, как это возможно, что метод объявлен устаревшим, но альтернативы не предлагается.

1 Ответ

1 голос
/ 01 мая 2020

Как изменение маркировки MDN document.execCommand() как устаревшего, так и связанное с этим изменение в https://github.com/mdn/browser-compat-data/commit/2d3890a были частично выполнены из-за того, что https://w3c.github.io/editing/ActiveDocuments/execCommand.html имеет большое красное предупреждение с следующие заявления:

Эта спецификация c является неполной, и не ожидается, что она выйдет за рамки чернового статуса. Авторам не следует использовать большинство этих функций напрямую, а вместо этого использовать JavaScript библиотеки редактирования. Функции, описанные в этом документе, не реализованы последовательно или полностью пользовательскими агентами, и не ожидается, что это изменится в обозримом будущем.

Что касается любого метода замены в vanilla JavaScript в том же окне предупреждения указано:

предсказал, что в будущем обе спецификации будут заменены на Content Editable и Input Events

… но, к сожалению, мы не там еще. Таким образом, к сожалению, текущее положение вещей таково, что, хотя у нас еще нет замены, мы знаем, что document.execCommand() как есть, теперь не работает кросс-браузерно, а браузерные проекты не собираются это исправлять. Вот почему предупреждение MDN гласит:

его использование не рекомендуется ... Постарайтесь избегать его использования.

Так что, как сказано выше, это похоже на случай drag-and-drop: известно, что он ломался разными способами, и так было в течение длительного времени, потому что исправлять его практически невозможно.

И вот почему в окне предупреждения отображается красный c также говорит, что разработчики и авторы:

не должны использовать большинство этих функций напрямую, а вместо этого использовать JavaScript библиотеки редактирования

Доступные JavaScript редактирование библиотек в онлайн-инструментах для форматирования текста, таких как CKEditor и TinyMCE, «замазывает» всю основную неисправность в document.execCommand() для вас. Если бы вы попытались написать свою собственную надежную обработку для document.execCommand() в ванили JavaScript с нуля, вы бы в основном - после большой работы и времени - в итоге повторили работу, проделанную для создания JavaScript библиотеки, лежащие в основе этих инструментов.

Итак, суть в следующем: чтобы сэкономить много времени и работы, используйте одну из доступных библиотек.

...