Как программно завершить сеанс композиции текста в JavaScript? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь завершить сеанс композиции текста программно, когда пользователь печатает какой-то нелатинский символ в приемлемой области DIV (пусть это будет называться редактором позже) в UIWebView (устаревший объект представления в iOS SKD, который встраивает веб-контент в мой гибрид приложение, по какой-то причине мне нужно использовать его вместо WKWebView).

Когда пользователь вводит несколько нелатинских символов с помощью редактора метода ввода (IME), мое приложение будет предлагать некоторый специфичный для домена текст в пользовательском интерфейсе, и пользователь сможет выбрать его.

Однако я обнаружил, что после того, как пользователь выбрал этот специфичный для домена текст, щелкнув собственный пользовательский интерфейс (a UIButton), и приложение вызвало document.exeCommand('insertText', false, 'my domain text'), редактор все еще находился в сеансе композиции текста с голубым фоном на текст, который пользователь только что ввел.

Если пользователь нажал какую-то клавишу в IME, compositionend Будет вызвано событие, и сеанс композиции завершится.

Однако я хочу программно завершить его, чтобы он был более разумным для пользователя. А в другом сценарии мне нужно иметь возможность сначала завершить сеанс композиции текста, а затем ввести этот текст для конкретного домена. Возможно ли это?

Вот пользовательский интерфейс моего гибридного приложения: app UI

Я попытался отправить событие составления обновлений в редактор, вызвал прослушиватель событий, но светло-синий фон все еще находился под текстом, что означает, что сеанс составления текста не был завершен.

Вот код, который я пробовал:

var editor = document.getElementByID("myContendteditableArea")

editor.addEventListener('compositionend', function(e) {
    console.log('text composition session end')
})

var event = new CompositionEvent('compositionend')

editor.dispatchEvent(event)

Я также попробовал синий редактор программно, он вызвал «составное» событие, однако это может вызвать нежелательную анимацию и изменение пользовательского интерфейса.

Любая помощь будет признательна, спасибо заранее.

...