Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器窗口未激活的情况下侦听keydown事件_Javascript_Firefox Addon - Fatal编程技术网

Javascript 在浏览器窗口未激活的情况下侦听keydown事件

Javascript 在浏览器窗口未激活的情况下侦听keydown事件,javascript,firefox-addon,Javascript,Firefox Addon,我有一个Firefox插件,它在浏览器窗口处于活动状态时侦听按键事件,但我也希望在没有浏览器窗口处于活动状态时接收事件。我目前正在向所有浏览器窗口添加事件侦听器,并尝试创建Firefox热键,但它的作用域与浏览器窗口方法相同 我知道我可以使用Windows API来实现这一点,所以也许我唯一的选择就是创建一个插件?这不可能直接实现。如果浏览器没有从窗口系统接收到事件,则浏览器无法将事件传递给扩展。大概,您可以创建一个操作系统/窗口系统特定的插件,该插件允许在API中点击,以便窗口系统通常接收此类

我有一个Firefox插件,它在浏览器窗口处于活动状态时侦听按键事件,但我也希望在没有浏览器窗口处于活动状态时接收事件。我目前正在向所有浏览器窗口添加事件侦听器,并尝试创建Firefox热键,但它的作用域与浏览器窗口方法相同

我知道我可以使用Windows API来实现这一点,所以也许我唯一的选择就是创建一个插件?

这不可能直接实现。如果浏览器没有从窗口系统接收到事件,则浏览器无法将事件传递给扩展。大概,您可以创建一个操作系统/窗口系统特定的插件,该插件允许在API中点击,以便窗口系统通常接收此类事件(假设窗口系统API允许这样做)

您似乎希望接收窗口系统中发生的事件,这些事件不是针对任何浏览器窗口的。窗口系统通常不会将UI事件传递给未激活或未以某种方式操作的窗口。因此,浏览器没有发生此类事件的信息


一般来说,这可能会违反用户对浏览器和窗口系统如何操作的期望。你应该认真考虑是否适合你的插件做这件事。这样做的一个可能原因是有一个附加组件,它添加了一个系统级热键,将最新的窗口/选项卡置于窗口系统的前端。在这种情况下,如果它明确是附加组件的功能,那么这样做是合理的。至少,您可能会与其他窗口系统级热键发生冲突,这些热键是默认设置,或者是由用户设置的。应注意,至少允许用户更改为您正在创建的任何函数指定的热键。

用于。您还必须使用该API收听热键事件,以便将您的代码放在一个特定的位置,这样它就不会干扰Firefox主线程。

感谢您的回复。我的插件的明确目的是创建热键,这样我的用户就不会对这种行为感到惊讶。我不能把这算是一个答案,因为我没有比我在问题中提到的更多关于如何实现我的目标的信息。是的,你必须制作插件,或者更好的方法:使用js ctypes。对于windows使用钩子:呵呵,我昨天晚上在读XPCOM for Firefox时偶然发现了js ctypes。它看起来确实可以工作,但我还没有尝试通过Windows API注册热键。在Mac OS X上,您需要使用辅助功能API,因此如果用户尚未授予该API,则需要给用户一个一次性提示以允许Firefox的辅助功能。