我已经编译了代码(发布在下面):
var keys = [];
var key1="17"; //ctrl
var key2="16"; //shift
var key3="83"; //s
window.addGlobalHotkey = function(callback,keyValues){
if(typeof keyValues === "number")
keyValues = [keyValues];
var fnc = function(cb,val){
return function(e){
keys[e.keyCode] = true;
executeHotkeyTest(cb,val);
};
}(callback,keyValues);
window.addEventListener('keydown',fnc);
return fnc;
};
window.executeHotkeyTest = function(callback,keyValues){
var allKeysValid = true;
for(var i = 0; i < keyValues.length; ++i)
allKeysValid = allKeysValid && keys[keyValues[i]];
if(allKeysValid)
callback();
};
window.addEventListener('keyup',function(e){
keys[e.keyCode] = false;
});
addGlobalHotkey(function(){
var x = getIn("What Task?");
switch(x)
{
case "a":
//...
break;
case "t":
//...
break;
default:
//...;
}
},[key1,key2,key3]);
function getIn(text){
var x = prompt(text);
if (x != null && x != ''){
return x;
}
}
- 允许创建热键(在我的情况下为Ctrl+ Shift+ S)
- 旨在调出输入框(又名
prompt
) - 并接受一个命令(一些预定义的
switch
或选项) - 节中定义
addGlobalHotkey(function(){/PLAY HERE/},[key1,key2,key3]);
所以现在你有了整个背景。它在使用 GreaseMonkey 和 TamperMonkey 的 Firefox、Chrome 中运行良好,并且完全符合我的需要。
但是,我注意到在任何给定选项卡上执行它后,该特定选项卡开始逐渐变慢,挂起,延迟绘制,唯一的解决方案是关闭它。其他选项卡不受影响,仅影响您在执行时所在的选项卡。所以我担心可能存在内存泄漏,这是我缺少的代码中的东西吗?可以以某种方式改进以确保不是这种情况吗?
另外,我注意到虽然 99+% 的时间,它释放键就好了,有时当你按下键盘上的 ANY 键并执行命令时,这表明钩子在之后没有正确清理本身,导致任何键被困并处理触发器,即使不是指定的键,我错过了什么?稳定性能提高吗?