WebView bug - 替换 ContentEditable 中的选定文本
WebView bug - replace selected text in ContentEditable
所以,事情是这样的。 我有一个显示内容可编辑div 的 WebView。 现在,当我选择文本时,一切都很好,通过javascript接口,我可以看到document.getSelection()返回了它应该返回的内容。 但是,当我键入某些内容时,它似乎替换了当前节点中所选文本,而不是替换当前节点中的选定文本。 例如,如果我有
Blah1
Blah2
Blah3
Blah4
我选择"ah4"并输入"q",我最终得到
Blq
Blah2
Blah3
Blah4
而不是
Blah1
Blah2
Blah3
Blq
我注意到,如果我使用硬件键盘而不是软键盘在模拟器上运行它,它可以正常工作。
我试图拦截事件以手动执行操作,但是onKeyListener
和 javascript 都没有onKeyDown
,也没有onKeyPress
在替换文本时注册事件。 Javascript onInput
寄存器,但仅在替换发生之后。
有什么想法可以避免这种情况吗?
更多信息:
事实证明,当选择文本并按下软键盘上的某个键时,该键不会通过活动的调度 KeyEvent 方法。 我假设这种差异是故障发生的根本。 有人知道为什么以及如何发生这种情况,以及为什么会导致故障吗? 我要去看看我是否可以跟踪代码执行的路径。
哈! 找到了解决方案! 在 android 源代码中进行了太多的混乱之后,我最终尝试了以下内容:子类化 WebView,并覆盖以下方法:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new BaseInputConnection(this, false);
}
这就行了! 当然,选择(蓝色条纹)在您键入后在视觉上徘徊,但它至少会替换您期望的文本,并且条纹不会影响任何内容。 另外,无论如何,它以前这样做过。 我希望也有一种相当简单的方法来摆脱它。
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- jQuery匹配JSON对象的部分文本
- onkeyup无法动态创建多个文本区域
- 如何在下面的ES6循环中获得前面的文本
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 借助asp.net验证或java脚本对多个文本进行验证
- 无法在ajaxStart中更改跨度文本
- 高亮显示时编辑文本大小和颜色
- jquery中的文本框验证
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- Sails.js:同时发布文本输入和一个文件
- 当鼠标悬停在文本中的单词上时显示警报
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 将纯文本URL转换为可单击链接
- 如何使用nodes和.createElement(“b”)将文本加粗
- 是否可以将一个函数输入连接到另一个函数调用的文本