API EditContext
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментальная функция: Это экспериментальная технология.
Перед использованием в продакшене тщательно изучите таблицу совместимости с браузерами.
API EditContext позволяет создавать на веб-страницах богатые текстовые редакторы, поддерживающие расширенный ввод текста, такие как ввод с помощью Input Method Editor (IME), выбор эмодзи или другие платформенно-специфичные интерфейсы редактирования.
С API EditContext вы получаете гибкость в отображении собственной области редактирования текста с помощью любой технологии.
Концепция
При вводе текста в редактируемую область приложения участвуют несколько субъектов:
- Пользователь
-
Пользователь вводит текст с помощью устройства ввода: клавиатуры, мыши, голоса или другого метода.
- Программное обеспечение метода ввода
-
Программное обеспечение метода ввода преобразует ввод пользователя в текст. Например, это может быть Input Method Editor (IME), преобразующий нажатия клавиш с обычной клавиатуры в японские, китайские или корейские символы.
- Сервис ввода текста ОС
-
Сервис ввода текста операционной системы служит связующим звеном между программным обеспечением метода ввода и приложением.
- Контекст редактирования текста приложения
-
Контекст редактирования текста приложения предоставляет состояние редактируемого текста. Состояние содержит информацию, такую как сам текст, текущий выделенный фрагмент, расположение текста в пользовательском интерфейсе приложения.
- Редактируемая область приложения
-
Редактируемая область приложения — это элемент пользовательского интерфейса приложения, отображающий текст.
В то время как три первых субъекта предоставляются операционной системой, приложение отвечает за предоставление области редактирования и контекста редактирования текста.
В веб-приложениях области редактирования часто являются элементами <textarea>, элементами <input> или элементами с атрибутом contenteditable, установленным в значение true. Для этих элементов браузер автоматически предоставляет контекст редактирования текста, и веб-разработчикам не требуется писать код для поддержки ввода текста.
Создание пользовательских областей редактирования
Веб-разработчики также могут создавать пользовательские области редактирования с помощью API EditContext. Например, веб-разработчик может создать богатый текстовый редактор, используя элемент <canvas> для отображения текста. В этом случае веб-разработчик должен написать код для поддержки ввода текста.
Задачи разработчика
Если вы решите реализовать собственную область редактирования, независимо от того, рисуете ли вы текст в <canvas> или отображаете его в виде серии элементов DOM, вы несете ответственность за обеспечение того, что браузер обычно предоставлял бы вам при использовании элемента <textarea>. Это включает:
- Отображение текста.
- Отображение выделения (если вы создаете свою область редактирования с помощью элементов DOM вместо
<canvas>, то браузер отображает выделение за вас). - Уведомление сервиса ввода текста ОС о изменении выделения.
- Уведомление сервиса ввода текста ОС о местоположении текста в пользовательском интерфейсе, чтобы программное обеспечение метода ввода могло отобразить окно IME в правильном месте.
- Применение определенных форматов текста, когда пользователь вводит текст в окне IME.
Взамен API EditContext делает выбранный вами элемент DOM редактируемым и частью порядка фокусировки документа. Кроме того, API EditContext также предоставляет информацию о состоянии редактируемого текста, что позволяет вам отобразить его нестандартным способом. Предоставляемая вам информация включает:
- Текущее содержимое текста.
- Текущее выделение.
- Происходит ли ввод с помощью IME, и необходимо ли применять форматы текста.
Доступность
Если вы используете API EditContext с элементом <canvas>, убедитесь, что текст также доступен для вспомогательных технологий. Экранные читатели не могут прочитать текст в элементе <canvas>. Например, вы можете сохранить отдельный просмотр текста в скрытом элементе DOM, который представлен для экранных читателей.
Основные примеры использования
Чтобы использовать API EditContext, вам нужно создать экземпляр интерфейса EditContext и прикрепить его к элементу DOM, который вы хотите сделать редактируемым, используя свойство editContext. Элемент DOM может быть любым элементом, включая <div> или <canvas>.
<canvas id="editor-canvas"></canvas>
const canvas = document.getElementById("editor-canvas");
const editContext = new EditContext();
canvas.editContext = editContext;
Экземпляр EditContext может быть прикреплен только к одному элементу DOM за раз.
Прикрепление экземпляра EditContext к элементу DOM делает элемент фокусируемым, как часть порядка фокусировки документа. Пользователь может вводить текст в элемент с помощью метода ввода по своему выбору, и вы можете использовать события, генерируемые экземпляром EditContext для отображения текста и выделения.
Архитектура модели и представления
При использовании API EditContext полезно строить свой опыт редактирования как модель и представление.
Экземпляр EditContext представляет модель вашей области редактирования. Его внутреннее состояние обновляется при получении ввода текста и при изменении выделения.
Затем вы можете отобразить текст и выделение в представлении, используя информацию, предоставляемую экземпляром EditContext , однако ваше представление не обязательно должно точно соответствовать модели. Вы можете отображать текст любым желаемым образом.
Интерфейсы
-
EditContextЭкспериментальная -
Интерфейс
EditContext— это JavaScript-отражение контекста редактирования текста, который обычно прозрачно предоставляется браузером при использовании стандартных областей редактирования, таких какtextarea.EditContextпредоставляет состояние редактируемого текста, включая информацию о самом тексте, текущем выделении или местоположении текста в пользовательском интерфейсе приложения. TextFormat-
Интерфейс
TextFormatиспользуется для представления определенных форматов, которые должны быть применены к диапазонам текста, когда пользователь вводит текст в окне IME.
Спецификации
| Спецификация |
|---|
| API EditContext # dom-editcontext |
Совместимость с браузерами
| Рабочий стол | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
EditContext |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
EditContext_API |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
attachedElements |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
characterBounds |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
characterBoundsRangeStart |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
characterboundsupdate_event |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
compositionend_event |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
compositionstart_event |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
selectionEnd |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
selectionStart |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
text |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
textformatupdate_event |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
textupdate_event |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
updateCharacterBounds |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
updateControlBounds |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
updateSelection |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
updateSelectionBounds |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
updateText |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/EditContext_API