在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();