我正在做一个与 Gmail 聊天交互的谷歌浏览器扩展,可以向所有打开的聊天发送相同的消息,功能部分已完成,但我无法将keydown
事件发送到 textareas。
我正在做的是page_action
在用户访问 Gmail 时使用 a 来显示扩展图标。当用户点击扩展图标时,会弹出一个带有 textarea 的弹出窗口,当用户打开聊天并在 textarea 中写入内容然后Enter按键时,每个打开的聊天的 textarea 将填充相同的消息和应该触发keydown
事件。
这是基本代码:
popup.js
chrome.tabs.executeScript(null, {file: 'send.js'}, function () {
// 'message' is the textarea inside the popup.html
var message = document.getElementById('message');
message.onkeydown = function (e) {
if (13 == e.keyCode) {
chrome.tabs.executeScript(null, {code: 'send("' + message.value + '");'}, function () {
message.value = '';
});
return false;
}
};
});
发送.js
function send(message) {
if (message) {
for (var i = 0, textareas = document.getElementsByTagName("TEXTAREA"), length = textareas.length; i < length; ++i) {
textarea = textareas[i];
textarea.value = message;
var evt = document.createEvent('KeyboardEvent');
evt.initKeyboardEvent('keydown', true, true, null, false, false, false, false, 13, 13);
Object.defineProperty(evt, 'keyCode', {
get : function() {
return 13;
}
});
Object.defineProperty(evt, 'which', {
get : function() {
return 13;
}
});
Object.defineProperty(evt, 'keyIdentifier', {
get : function() {
return 'Enter';
}
});
Object.defineProperty(evt, 'shiftKey', {
get : function() {
return false;
}
});
textarea.dispatchEvent(evt);
}
}
}
代码在填充 textareas 时没有问题,因此重新调整了所有 textareas,但keydown
在脚本填充 textareas 后事件没有触发。奇怪的是,当我在 Google Chrome 控制台中尝试send.jskeydown
代码时,事件正常触发并且消息已发送,但我无法对扩展程序做同样的事情。
那么,如何将keydown
事件触发到扩展中?