当键盘按键在页面外释放时,是否存在KeyUp事件?

3
我目前可以使用JavaScript查看按下了哪些键,使用依赖于KeyDown / KeyUp事件的库。尽管在页面内按下/释放键时这很有效,但当在页面外释放键时(即,没有焦点时),事件不会触发。
因此,当页面有焦点时,可以按Enter键(事件将触发,一切正常),但是当页面没有焦点时释放它时,事件就不会触发,这导致我无法知道该键是否仍然被按下。
关于所使用的库,请参考: http://www.n-son.com/scripts/keyLib/keyLib.js 是否可能在页面没有焦点时知道何时释放键?或者是否有一个通用函数来检查特定时间是否按下某个键?
3个回答

3

当窗口失去焦点时,我建议将所有按下的键的标志重置为false。你可以使用windowblur事件来实现:

var someKeyIsDown;

window.onblur = function() {
    someKeyIsDown = false;
};

2
如果他们没有与“您”的程序交互(在网页的情况下,“您”的程序是其Web浏览器的一部分),那么他们所做的任何事情都不会生成您的程序知道的事件。
允许网页了解与其无关的事件(例如我在完全不同的程序中输入机密电子邮件,或输入密码或其他任何内容)将是巨大的安全风险。

好观点,我没有考虑过。在线键盘记录器是一个坏主意... - pimvdb

1

你不能使用更高级别的事件,例如KeyPressed,这可以保证按键被按下然后释放吗?


1
很抱歉,我正在游戏中使用它。因此,需要在按下键时调用函数,所以这不仅仅是一个按下/释放的情况。 - pimvdb
3
你无法捕获窗口外发生的事件,最好的方法是监听焦点/失焦事件并将它们视为KeyUp事件。这类似于你在这里关于鼠标事件所问的内容:http://stackoverflow.com/questions/4748177/possible-to-get-mouse-events-fired-when-cursor-is-outside-page - BiAiB
是的,那很合理,谢谢。我确实已经询问了关于鼠标的问题,但也许有针对按键的解决方案。 - pimvdb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接