我有一个Firefox附加组件,当浏览器窗口处于活动状态时会监听keydown事件,但我也希望在没有浏览器窗口处于活动状态时接收事件。我正在向所有浏览器窗口添加事件监听器,我尝试创建一个Firefox热键,但它的范围与浏览器窗口方法相同。
我知道我可以使用Windows API执行此操作,所以也许我唯一的选择就是创建一个插件?
答案 0 :(得分:1)
这不是直接可能。如果浏览器没有从窗口系统接收事件,则浏览器无法将事件传递给扩展。据推测,您可以创建一个特定于操作系统/窗口系统的插件,允许为窗口系统添加API以便通常接收此类事件(假设窗口系统API允许这样做)。
您似乎希望接收窗口系统中不以任何浏览器窗口为目标的事件。窗口系统通常不会将UI事件传递给不活动的窗口,或者不以某种方式操纵窗口。因此,浏览器没有发生此类事件的信息。
通常,这可能会违反用户对浏览器和窗口系统如何运行的期望。您应该认真考虑是否适合您的加载项执行此操作。这样做的一个可能原因是有一个附加组件,它添加了一个系统级热键,将最新的窗口/选项卡带到了窗口系统的前面。在这种情况下,如果它明确是附加组件的功能,那么这样做是合理的。至少,您可能会与其他窗口系统级别的热键冲突,这些热键是默认值,或者是由用户设置的。应该注意,至少应允许用户更改为您正在创建的任何功能分配的热键。
答案 1 :(得分:0)
使用js-ctypes与register the hotkey via the Windows API。您还必须使用该API收听热键事件,因此请将您的代码放在ChromeWorker中,这样它就不会干扰主要的Firefox主题。