自定义输入框中JS IME合成与Mac accent菜单适配问题求助
自定义输入框适配Mac Accent菜单的事件处理困境
我们正在开发一款需要适配多语言(日语、中文等)及不同文字方向(从左到右、从右到左、混合方向)的项目,因此实现了一套跨浏览器行为一致的自定义输入框。目前在按照W3C规范处理IME合成与Mac accent菜单适配时,遇到了难以解决的问题:
当前正常的IME处理逻辑
IME合成场景已经通过compositionstart、compositionupdate、compositionend事件完成了正确处理;非IME的普通输入场景则通过input事件处理,借助event.isComposing属性可以准确区分两类场景,这部分逻辑运行稳定。
Mac Accent菜单的异常事件序列
Mac系统的accent菜单(长按字符弹出的带重音符号的选择菜单)的事件生命周期完全不符合预期:长按打开菜单时,触发的事件序列为:
keydown,event.isComposing = falseinput,event.isComposing = falsekeydown,event.isComposing = false(触发次数由长按时长决定)keyup,event.isComposing = false
虽然Mac accent菜单在视觉表现上和多语言IME合成类似,但事件链中没有任何标识能识别出当前处于合成状态,目前只能通过统计keydown/keyup的次数手动模拟“无合成事件的IME合成”状态。而后续操作的事件表现更混乱:
- 使用箭头键导航菜单选项时,会触发
compositionstart和compositionupdate事件 - 使用数字键选择目标字符时,仅触发
input事件
寻求帮助
希望有过浏览器自定义编辑器开发经验的同行,分享针对Mac accent菜单事件适配的可行解决方案或实践经验。
内容的提问来源于stack exchange,提问作者Martin Janíček
相关产品推荐
相关产品推荐

