Firefox SDK:如何"capture"用户在首选项中的热键?



package.json中我有:

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

看起来像input type=text。我如何捕获用户的热键组合?这不是很酷,用户必须用手输入像alt或更糟糕的accel这样的词。

关于热键的官方文档没有提到在首选项中捕获

这个代码段窗口可以是内容窗口(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();

最新更新