我正在做一個與Chrome聊天交互的Google Chrome擴展,並且可以將相同的消息發送給所有打開的聊天,功能部分已完成,但我無法將事件發送給文字區域。Google Chrome擴展中的Fire Keydown事件
我在做什麼是使用page_action
來顯示用戶訪問Gmail時的擴展名圖標。當用戶點擊擴展圖標時,它會提示一個帶有textarea的彈出窗口,當用戶打開聊天並向textarea寫入內容,然後按輸入鍵時,每個打開的聊天的textarea將填充相同的消息並被認爲是觸發事件。
這裏是esencial代碼:
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);
}
}
}
的代碼沒有問題填滿文字區域,因此所有textareas被重新調整,但事件沒有在腳註後觸發t填充textareas。奇怪的部分是,當我嘗試將send.js代碼放入Google Chrome控制檯時,事件正常啓動並且發送了消息,但我無法對該擴展程序做同樣的事情。
那麼,如何將事件放入擴展中?
您能否提供js小提琴演示 – shareef
您是否在擴展中或僅在網頁中使用Chrome Inspector? –
@NathanCampos我使用開發工具來檢查彈出窗口和網頁。 –