如何在 JavaScript 中以编程方式结束文本撰写会话?

Lee*_*aul 9 javascript contenteditable uiwebview ios

当用户在 UIWebView(iOS SKD 中的旧视图对象,将 Web 内容嵌入到我的混合应用程序中)的可内容编辑 DIV 区域(稍后将其称为编辑器)中键入一些非拉丁字符时,我试图以编程方式结束文本撰写会话,例如出于某种原因我需要使用它而不是使用 WKWebView)。

当用户使用输入法编辑器 (IME) 键入一些非拉丁字符时,我的应用程序会在 UI 上建议一些特定于域的文本,并且用户可以选择它。

但是,我发现在用户通过单击本机 UI (a UIButton) 选择这些域特定文本并且应用程序已调用后document.exeCommand('insertText', false, 'my domain text'),编辑器仍处于文本撰写会话中,用户刚刚输入的文本上有浅蓝色背景。

如果用户按下 IME 上的某个键,compositionend事件将被调用并且组合会话将结束。

但是,我想以编程方式结束它,以便获得更合理的用户体验。在其他情况下,我需要能够首先结束文本撰写会话,然后输入这些域特定的文本。是否可以?

这是我的混合应用程序的用户界面: 应用程序用户界面

我尝试向编辑器分派合成更新事件,事件侦听器确实被调用,但浅蓝色背景仍在文本下方,这意味着文本合成会话尚未结束。

这是我尝试过的代码:

var editor = document.getElementByID("myContendteditableArea")

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

var event = new CompositionEvent('compositionend')

editor.dispatchEvent(event)
Run Code Online (Sandbox Code Playgroud)

我还尝试以编程方式将编辑器设置为蓝色,它确实触发了“组合”事件,但这会导致一些不需要的动画和 UI 更改。

任何帮助将不胜感激,提前谢谢您。