所以,事情就是这样。我有一个显示 contenteditable div 的 WebView。现在,当我选择文本时,一切都很好,并且通过 javascript 接口我可以看到 document.getSelection() 返回了它应该返回的内容。但是,当我键入某些内容时,而不是替换当前节点中的选定文本,它似乎替换了第一个节点中相应偏移量处的文本。例如,如果我有
Blah1
Blah2
Blah3
Blah4
我选择“ah4”并输入“q”,我最终得到
Blq
Blah2
Blah3
Blah4
代替
Blah1
Blah2
Blah3
Blq
我注意到,如果我使用硬件键盘而不是软键盘在模拟器上运行它,它可以正常工作。
我试图拦截事件以手动执行操作,但是在替换文本时,javascript 和onKeyListener
javascriptonKeyDown
都没有onKeyPress
注册事件。JavascriptonInput
注册,但仅在发生替换之后。
任何想法如何规避这个?
更多信息:
As it turns out, when text is selected and a key is pressed on the soft keyboard, that keypress does not pass through the activity's dispatchKeyEvent method. 我假设这种差异是故障发生的基础。任何人都知道为什么以及如何发生这种情况,以及为什么会导致故障?我去看看能不能追踪到代码执行的路径。