FireFox SDK keydown / keyup events

隐身守侯 提交于 2020-01-30 07:54:05

问题


Is it possible to track keydown/keyup events in FireFox addons? I would like to implement something similar as following scenario:

  • After pressing and holding the modifier key panel appears
  • While holding these modifier keys, pressing the other keys will cause some actions with the panel
  • When modifier key released, the panel disappears

回答1:


You would need to register your event listener in each browser window for that. The high-level SDK API don't give you direct access to the browser window however, you will have to use the low-level modules for that, in particular the (currently undocumented) sdk/keyboard/observer module. It allows you to listen to key events in all browser windows, so something like this should work:

// 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();
});

Notes:

  • sdk/keyboard/observer module is completely undocumented, it might change or go away completely any time.
  • Originally the solution proposed here used WindowTracker from the sdk/window-utils module which is now deprecated. If you really want to look at browser windows yourself you would now use the (also undocumented) sdk/windows/observer module which allows listening to open and close events. The function isBrowser() to distinguish browser windows is now available via sdk/window/utils module. You would also need to use windows() function to consider already open windows, the windows observer doesn't do that automatically.


来源:https://stackoverflow.com/questions/10363708/firefox-sdk-keydown-keyup-events

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!