在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对偏好中的捕捉没有任何说明。
答案 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();