从 chrome 54 开始,如何从扩展程序调度可信的 textInput 事件?

Tim*_*urs 5 javascript google-chrome google-chrome-extension

我目前正在尝试从 Chrome 扩展程序触发可信的 textInput TextEvent。

\n\n

在 Chrome \xe2\x89\xa4 52 中我可以执行以下操作:

\n\n
const textEvent = document.createEvent(\'TextEvent\')\ntextEvent.initTextEvent(\'textInput\',\n            true,\n            true,\n            null,\n            \'myString\');\ndocument.activeElement.dispatchEvent(textEvent)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Chrome 53 中,我有以下解决方法:

\n\n
document.execCommand(\'insertText\', false, \'myString\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它根本不应该起作用(设计模式未启用,并且应该只适用于contenteditablediv)

\n\n

正如预期的那样,在 Chrome 54 中我的解决方法不再有效...有人有想法吗?

\n\n

与此问题相关:\n从 Chrome 53 开始,如何添加文本,就像调度了受信任的 textInput 事件一样?

\n

ara*_*tes 3

我确认它不再适用于 Chrome 54。不过,我已经找到了解决办法。我现在使用剪贴板 API。更准确地说:

  • 我创建一个临时文本区域并将其聚焦

  • 我将剪贴板的当前内容粘贴到文本区域,然后将其保存到变量中

  • 然后我将要写入的文本放入文本区域,选择它并复制

  • 我将焦点放回到要写入的元素上,然后粘贴

  • 然后,我重新选择文本区域,重新复制以将原始内容放回剪贴板中,最后将焦点放回我正在写入的元素中。

在我的例子中,选择范围还存在一些技巧,因为我需要以编程方式替换选择文本,不仅插入文本,而且我已经解释了所有主要步骤:)这是我发现的唯一可以在任何地方使用的解决方案ContentEditable div 和输入类似,无论是否有反应。祝你好运!