Javascript 使用execCommand插入文本会导致重复问题

Javascript 使用execCommand插入文本会导致重复问题,javascript,facebook,reactjs,xul,execcommand,Javascript,Facebook,Reactjs,Xul,Execcommand,我正在开发一个Firefox扩展,它使用键盘快捷键将波兰语字符插入任何文本字段。它适用于所有文本字段,除了Facebook、Draft.js和任何React contentEditable DIV 复制步骤: 装载 打开Chrome开发工具 选择Draft.js输入框,以显示输入插入符号 执行document.execCommand(“insertHTML”,false,“X”) 预期结果: X被添加到输入框中 实际结果: 将X添加到输入框中两次。您可以删除其中一个实例,但另一个实例不可删除,但

我正在开发一个Firefox扩展,它使用键盘快捷键将波兰语字符插入任何文本字段。它适用于所有文本字段,除了Facebook、Draft.js和任何React contentEditable DIV

复制步骤:

  • 装载
  • 打开Chrome开发工具
  • 选择Draft.js输入框,以显示输入插入符号
  • 执行
    document.execCommand(“insertHTML”,false,“X”)
  • 预期结果: X被添加到输入框中

    实际结果: 将X添加到输入框中两次。您可以删除其中一个实例,但另一个实例不可删除,但可以选择


    注意:在Draft.js输入中输入至少一个字符后,命令将按预期工作。

    我已经解决了这个问题。在执行
    document.execCommand(“insertHTML”,false,“X”)之前
    ,检查
    的长度是否为0。如果是,只需运行
    document.execCommand(“undo”,false)遵循insertHTML execCommand,瞧!它起作用了

    代码如下:

    if (document.querySelectorAll('span[data-text="true"]').length === 0) {
        document.execCommand("insertHTML", false, "X");
        document.execCommand("undo", false);
    } else {
        document.execCommand("insertHTML", false, "X");
    }
    

    它将检查您是否输入了第一个字符。如果您这样做了,它将执行undo exece命令并删除额外的X。
    else
    将只插入tml
    ,因为一旦输入了字符,它就不会插入任何额外的字符。

    Hi,这对您仍然有效吗?我在facebook上执行
    execCommand()
    时出现“无法显示composer”错误,在控制台上执行时出现错误。我不确定,因为我已经有一段时间没有更新我的Firefox扩展,它已从Mozilla加载项页面中删除。我需要在有机会的时候更新它,我会让你知道的。非常感谢!我试图让它与draftjs一起工作,但它总是抛出错误,我在这里提出了一个问题:如果你真的能让它工作,也许你可以在那里发布答案,这样我就可以给你评分了。