所以,这就是事情。我有一个WebView显示一个contenteditable div。现在,当我选择文本时,一切都很好,通过javascript接口,我可以看到document.getSelection()返回它应该的内容。但是,当我输入内容时,而不是替换当前节点中的所选文本,它似乎替换相应偏移处的第一个节点中的文本。例如,如果我有
Blah1
Blah2
Blah3
Blah4
我选择“ah4”并输入“q”,我最终以
结束Blq
Blah2
Blah3
Blah4
而不是
Blah1
Blah2
Blah3
Blq
我注意到如果我使用硬件键盘而不是软键盘在模拟器上运行它,它可以正常工作。
我试图拦截事件以手动执行操作,但onKeyListener
和javascript onKeyDown
以及onKeyPress
在替换文本时都没有注册事件。 Javascript onInput
注册,但仅在替换发生后才会注册。
任何想法如何绕过这个?
更多信息:
事实证明,当选择文本并在软键盘上按下某个键时,该按键不会通过活动的dispatchKeyEvent方法。我假设这种差异是发生故障的基础。任何人都知道为什么以及如何发生这种情况,以及为什么会引起故障?我将去看看是否可以跟踪代码执行的路径。
答案 0 :(得分:0)
哈!找到了解决方案!在android源代码中经过太多麻烦之后,我最终尝试了以下内容:子类WebView,并覆盖以下方法:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new BaseInputConnection(this, false);
}
就是这样!当然,选择(蓝色条纹)在您键入后会直观地徘徊,但它至少会替换您期望的文本,并且条纹不会影响任何内容。而且,无论如何,它之前就是这样做的。我希望有一种相当简单的方法可以摆脱它。