WebView错误 - 替换ContentEditable中的选定文本

时间:2013-11-06 02:17:15

标签: javascript android webview contenteditable

所以,这就是事情。我有一个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方法。我假设这种差异是发生故障的基础。任何人都知道为什么以及如何发生这种情况,以及为什么会引起故障?我将去看看是否可以跟踪代码执行的路径。

1 个答案:

答案 0 :(得分:0)

哈!找到了解决方案!在android源代码中经过太多麻烦之后,我最终尝试了以下内容:子类WebView,并覆盖以下方法:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    return new BaseInputConnection(this, false);
}

就是这样!当然,选择(蓝色条纹)在您键入后会直观地徘徊,但它至少会替换您期望的文本,并且条纹不会影响任何内容。而且,无论如何,它之前就是这样做的。我希望有一种相当简单的方法可以摆脱它。