FireFox SDK keydown / keyup事件

时间:2012-04-28 13:01:03

标签: firefox firefox-addon firefox-addon-sdk

是否可以在FireFox插件中跟踪keydown / keyup事件? 我想实现类似于以下场景的东西:

  • 按住修改键面板后出现
  • 按住这些修改键,按其他键将导致面板执行某些操作
  • 当修改键释放时,面板消失

1 个答案:

答案 0 :(得分:7)

您需要在每个浏览器窗口中注册您的事件监听器。高级SDK API不允许您直接访问浏览器窗口,但是,您必须使用低级模块,特别是(当前未记录的)sdk/keyboard/observer模块。它允许您在所有浏览器窗口中收听关键事件,因此这样的事情应该有效:

// Register key event handlers in each browser window
var {observer} = require("sdk/keyboard/observer");

observer.on("keydown", function(event) {
  // Ignore events that have been handled elsewhere (e.g. by the web page)
  if (event.defaultPrevented)
    return;

  if (...)
    panel.show();
});
observer.on("keyup", function(event) {
  // Ignore events that have been handled elsewhere (e.g. by the web page)
  if (event.defaultPrevented)
    return;

  if (...)
    panel.hide();
});

注意:

  • sdk/keyboard/observer模块完全没有文档,它可能会随时更改或完全消失。
  • 此处提出的解决方案最初使用WindowTracker模块中的sdk/window-utils,现在已弃用。如果您真的想自己查看浏览器窗口,现在可以使用(也是未记录的)sdk/windows/observer模块,该模块允许收听openclose事件。用于区分浏览器窗口的函数isBrowser()现在可通过sdk/window/utils module获得。您还需要使用windows() function来考虑已打开的窗口,Windows观察者不会自动执行此操作。