从chrome 54开始,如何从扩展中调度受信任的textInput事件?

时间:2016-10-19 18:51:27

标签: javascript google-chrome google-chrome-extension

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

在Chrome≤52我可以做以下事情:

const textEvent = document.createEvent('TextEvent')
textEvent.initTextEvent('textInput',
            true,
            true,
            null,
            'myString');
document.activeElement.dispatchEvent(textEvent)

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

document.execCommand('insertText', false, 'myString')

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

正如预期的那样,在Chrome 54中我的解决方法不再起作用了......有没有人有想法?

与此问题有关: As of Chrome 53, how to add text as if a trusted textInput event was dispatched?

1 个答案:

答案 0 :(得分:2)

我确认它不再适用于Chrome 54。但是,我找到了解决方案。 我现在使用剪贴板API。 更确切地说:

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

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

  • 然后我将要写的文字放在文字区域,选择并复制

  • 我把焦点放回到我要写的元素中,然后粘贴

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

在我的情况下,选择范围会有更多的诡计,因为我需要以编程方式替换选择文本,不仅插入文本,而且我已经解释了所有主要步骤:)这是我发现的唯一解决方案在ContentEditable div和Inputs中,无论是否有反应,无处不在。祝你好运!