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
では、拡張機能にイベントを発生させるにはどうすればよいでしょうか?