Javascript Android4.3(KitKat/Using Chromium WebView)如何在WebView上侦听onfocus DOM事件?

Javascript Android4.3(KitKat/Using Chromium WebView)如何在WebView上侦听onfocus DOM事件?,javascript,android,events,contenteditable,copy-paste,Javascript,Android,Events,Contenteditable,Copy Paste,我在互联网上搜索了几乎所有的地方,没有一个明显的解决方案 我有一个本地Android应用程序,它有一个contentEditableWebView。 (其中有一个带有一些格式和一些图像的初始示例HTML) 目前,当用户粘贴一些东西时,我们有一些问题 首先,Android不尊重插入符号的位置:当示例文本粘贴到contentEditablediv的底部时;而是在开头粘贴 LI>在测试自我暗示中也会发生同样的情况:当用户从可编辑内容中间的自动提示列表中选择某个内容时,该建议被粘贴到内容的开始处。

我在互联网上搜索了几乎所有的地方,没有一个明显的解决方案

我有一个本地Android应用程序,它有一个
contentEditable
WebView。 (其中有一个带有一些格式和一些图像的初始示例HTML)

目前,当用户粘贴一些东西时,我们有一些问题

  • 首先,Android不尊重插入符号的位置:当示例文本粘贴到
    contentEditable
    div的底部时;而是在开头粘贴
  • <> LI>在测试自我暗示中也会发生同样的情况:当用户从可编辑内容中间的自动提示列表中选择某个内容时,该建议被粘贴到内容的开始处。
以下是我的进一步调查结果:

  • onpaste
    事件不会触发(这是检测是否粘贴了内容的最明显方法)
  • 我试着使用;虽然他们在桌面Chrome上工作,但当我在设备上尝试时,我遇到了一个“未定义对象”错误
  • 仅粘贴内容时,
    keyup
    input
    ,和
    keydown
    事件被触发。(*我认为他们是唯一有效的
此外:

  • 当用户粘贴某物时,我得到一个
    keydown
    事件,然后是一个
    input
    事件
  • 当用户键入某个内容时,我得到一系列
    keydown
    input
    keydup
    事件
  • 当用户自动更正某些内容时,我会得到N个连续的
    输入
    事件(N是1到5之间的随机数,根据我的观察)
(请注意,粘贴或自动建议操作后不会触发任何keyup事件)

考虑到这些限制,我唯一可行的解决办法是

  • 每当用户点击屏幕或键入内容时,缓存当前的
    选择范围
    (以缓存插入符号位置)
  • 在每次按键时缓存
    contentEditable
    区域的
    innerHTML
  • 当触发
    输入
    事件时,设置
    100ms
    计时器以检查其后面是否有
    keyup
    事件。
    • 如果是,则不执行任何操作,因为这是常规类型的事件
    • 如果不是,那么
    • 在缓存的
      innerHTML
      和当前的
      innerHTML
      之间执行diff/merge
    • 从“差异/合并”中提取粘贴的内容
    • contentEditable
      innerHTML
      恢复为缓存的
    • 将提取的粘贴内容插入缓存的插入符号位置
    • 将插入符号移动到上面插入内容的末尾
  • 这个算法(虽然在理论上可行)非常粗糙


    有没有人遇到过类似的问题?我非常感谢任何建议。

    我想我会致力于此,并以开源项目的形式发布。这看起来是一项富有挑战性和乐趣的任务。--不过,任何建议都非常受欢迎。