我正在开发一款与Gmail聊天互动并能够将同样的消息发送给所有打开聊天窗口的Google Chrome扩展程序。功能部分已经完成,但我无法发送
我的做法是使用
以下是关键代码:
代码没有问题,可以填充文本区域,因此所有的文本区域都被识别了,但是在脚本填充文本区域后,
那么,如何在插件中触发
keydown
事件到文本框中。我的做法是使用
page_action
在用户访问Gmail时显示扩展图标。当用户点击扩展图标时,它会弹出一个带有文本区域的弹出窗口,在用户打开聊天并在文本区域中写入内容并按下 Enter 键后,每个打开的聊天窗口的文本区域都会填充相同的消息,并且会触发 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;
}
};
});
send.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);
}
}
}
代码没有问题,可以填充文本区域,因此所有的文本区域都被识别了,但是在脚本填充文本区域后,
keydown
事件并没有触发。奇怪的是,当我将 send.js 代码放入 Google Chrome 控制台时,keydown
事件就会正常触发,并且消息也能发送,但是我不能用插件做同样的事情。那么,如何在插件中触发
keydown
事件呢?