1

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 ページにディスパッチするにはどうすればよいですか?

4

0 に答える 0