从Chrome 53开始,如何添加文本,就好像调度了受信任的textInput事件一样?

时间:2016-10-09 19:51:58

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

从Chrome 53开始,不受信任的事件不再调用默认操作。 https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted

在Chrome 53之前,这个JavaScript会添加一个interrobang,‽。

var e = document.createEvent('TextEvent');
e.initTextEvent('textInput',
                true,
                true,
                null,
                String.fromCharCode( 8253 ));
document.activeElement.dispatchEvent(e);

在Chrome 53中,看看会发生什么:https://jsfiddle.net/dblume/2nfhrj1j/10/

由于使用createEvent()创建的事件是不受信任的,因此它不会像在Chrome 52及之前那样使用activeElement处理其数据。

我的Chrome扩展程序自Chrome 53起停止运行,因为它尝试调度此类textInput事件。它应该做什么呢?

1 个答案:

答案 0 :(得分:4)

切换到适用于任何文本元素的document.execCommand以及contenteditable="true"的任何元素,并生成受信任的"input"事件。文本插入插入位置(替换选择,如果有的话),就像它是由用户键入一样。与TextEvent事件相比唯一的缺点是"input"事件不包含插入的文本。

document.execCommand('insertText', false, String.fromCharCode(8253));
document.execCommand('insertHTML', false, '‽'); // the same

https://jsfiddle.net/2nfhrj1j/22/