Firefox SDK:如何在首选项中“捕获”用户热键?

时间:2015-09-26 16:18:51

标签: firefox firefox-addon firefox-addon-sdk

package.json我有:

"preferences": [{
    "name": "hotkeyPopup",
    "title": "Hotkey for translating selected text",
    "type": "string",
    "value": "alt-Y"
  }]

它看起来像input type=text。如何捕获用户的热键组合?用户必须用alt或更差accel之类的单词输入内容并不酷。

Official documentation about hotkeys对偏好中的捕捉没有任何说明。

1 个答案:

答案 0 :(得分:1)

在此片段窗口中可以是内容窗口(tab / iframe / etc)或xul窗口(nsIDOMWindow)

非常基本非常详细,没有技巧。未经测试。

function enterHotkeyRecord() {
    window.addEventListener('keydown', downed, false);
    window.addEventListener('keyup', upped, false);
    window.addEventListener('keypress', pressed, false);
}

function exitHotkeyRecord() {
    window.removeEventListener('keydown', downed, false);
    window.removeEventListener('keyup', upped, false);
    window.removeEventListener('keypress', pressed, false);
}

function pressed(e) {
    e.preventDefault();
    e.stopPropagation();
}

function upped(e) {
    e.preventDefault();
    e.stopPropagation();
}

function downed(e) {
    e.preventDefault();

    if (e.repeat) {
        // if hold down a key it fires multiple times so ignore it
        return;
    }


    var key = String.fromCharCode(e.code);

    var str = [];

    if (e.keyCode == 27) {
        // user hit escape so lets exit
        enterHotkeyRecord();
        return;
    }

    if (e.altKey) {
        str.push('Alt');
    }

    if (e.shiftKey) {
        str.push('Shift');
    }

    if (e.metaKey) {
        str.push('Meta');
    }

    if (e.ctrlKey) {
        str.push('Ctrl');
    }


    str.push(key);

    console.log('you pressed:', str.join(' + '));
}

enterHotkeyRecord();