在没有浏览器窗口激活的情况下监听keydown事件

时间:2014-10-18 16:42:43

标签: javascript firefox-addon

我有一个Firefox附加组件,当浏览器窗口处于活动状态时会监听keydown事件,但我也希望在没有浏览器窗口处于活动状态时接收事件。我正在向所有浏览器窗口添加事件监听器,我尝试创建一个Firefox热键,但它的范围与浏览器窗口方法相同。

我知道我可以使用Windows API执行此操作,所以也许我唯一的选择就是创建一个插件?

2 个答案:

答案 0 :(得分:1)

这不是直接可能。如果浏览器没有从窗口系统接收事件,则浏览器无法将事件传递给扩展。据推测,您可以创建一个特定于操作系统/窗口系统的插件,允许为窗口系统添加API以便通常接收此类事件(假设窗口系统API允许这样做)。

您似乎希望接收窗口系统中不以任何浏览器窗口为目标的事件。窗口系统通常不会将UI事件传递给不活动的窗口,或者不以某种方式操纵窗口。因此,浏览器没有发生此类事件的信息。

通常,这可能会违反用户对浏览器和窗口系统如何运行的期望。您应该认真考虑是否适合您的加载项执行此操作。这样做的一个可能原因是有一个附加组件,它添加了一个系统级热键,将最新的窗口/选项卡带到了窗口系统的前面。在这种情况下,如果它明确是附加组件的功能,那么这样做是合理的。至少,您可能会与其他窗口系统级别的热键冲突,这些热键是默认值,或者是由用户设置的。应该注意,至少应允许用户更改为您正在创建的任何功能分配的热键。

答案 1 :(得分:0)

使用js-ctypesregister the hotkey via the Windows API。您还必须使用该API收听热键事件,因此请将您的代码放在ChromeWorker中,这样它就不会干扰主要的Firefox主题。