addon-sdk-1.17 を使用してキーボードからイベントをキャプチャし、特定のキーを再マップし、新しいキー イベントをディスパッチするために、Firefox アドオンを作成しようとしています。キーをキャプチャして Web ページに表示されないようにすることはできますが、再マップされたキーを生成して Web ページにディスパッチすることはできません。以下は私のコードです、
main.js : コード スニペット
var pageMod = require("sdk/page-mod");
var data = require("sdk/self").data;
pageMod.PageMod({
include: "*",
contentScriptFile: data.url("mykey.js")
});
mykey.js : 完全なコード
window.addEventListener("keypress", captureKeyPress);
function captureKeyPress(ev)
{
if( ev.cancelable && ev.charCode && !ev.altKey && !ev.ctrlKey){ // event is cancelable not NULL, CTRL+ nor ALT+
if((ev.charCode >= 97) && (ev.charCode <= 122)){ // a-z charecters
ev.preventDefault();
//ev.stopPropagation ? ev.stopPropagation() : (ev.cancelBubble = true);
generateKeyPress(String.fromCharCode(ev.charCode-32), ev.originalTarget); // a-z => A-Z
}
}
}
function generateKeyPress(ch, event_object)
{
var pressEvent = document.createEvent ("KeyboardEvent");
pressEvent.initKeyEvent ("keypress", true, true, null, false, false, false, false, 0, ch.charCodeAt(0));
event_object.dispatchEvent (pressEvent);
}
このコードはキーをシミュレートし、captureKeyPress() によってもキャッチされますが、Web ページ (テキスト領域) には表示されません。いくつかのデバッグの後、Web ページに入る元のキーイベントは「信頼済み」であり、Web ページに表示されないシミュレートされたキーイベントは「信頼済み」ではないことがわかりました。問題を解決し、シミュレートされたキーを Web ページにディスパッチするにはどうすればよいですか?