Firefox附加组件开发:注册全局动态自定义键盘快捷方式

时间:2010-05-21 03:53:06

标签: keyboard-shortcuts firefox-addon

我的任务是开发一个能够注册全局键盘快捷键的Firefox附加组件(可以在Firefox的所有区域使用的快捷键),它将打开侧栏并根据以前记录的信息执行XMLRPC请求输入。这里的想法是,用户希望通过键盘快捷方式执行许多潜在的XMLRPC请求。

目前,该插件能够通过Firefox覆盖处理预定义的静态键盘快捷键。我想要实现的是允许用户注册他们自己的动态自定义键盘快捷键。

目前有一个附加组件具有一些此功能,称为Keyconfig。我并不热衷于要求用户安装第二个加载项来定义自己的快捷方式。似乎在Keyconfig中使用动态键盘快捷方式注册方法需要用户在动态快捷方式可用之前关闭所有Firefox窗口。

我想知道的是:

  • XPCOM组件是从Firefox插件中注册动态键盘快捷键的最佳方式吗?
  • 有没有办法注册键盘快捷方式,以便所有Firefox窗口立即可用,而无需事先关闭窗口?

1 个答案:

答案 0 :(得分:1)

我无法回答“ XPCOM组件是从Firefox附加组件中注册动态键盘快捷键的最佳方式吗?”,但在工作同事的帮助下,我们已经找到了一种方法来制作动态键盘快捷键并让它们立即可用。

window.onkeypress = callback;

虽然是一个令人震惊的hack,因为它将执行chrome窗口处理的每个按键事件的回调;它允许主要的Firefox chrome窗口具有动态键盘快捷键,而无需重新加载。

为了使用侧栏中定义的键盘快捷键,我在overlay JavaScript的init()方法中创建了一个侦听器,它从侧栏中侦听自定义事件:

init: function() {
    var sidebarElement = document.getElementById("sidebar");

    sidebarElement.addEventListener("fooKeyboardShortcut", function shortcutKeyListener(anEvent) {
        fooOverlay.shortcutMap = sidebarElement.contentWindow.foo.getShortcutKeysMap();
    }, true);
},

侧边栏中的对象将在对地图进行任何状态更改时触发其中一个事件,这将导致事件侦听器将地图分配给Firefox覆盖中的对象。映射关键字是以下按键事件数据成员的复合哈希:

  • 方altKey
  • 中ctrlKey
  • metaKey
  • Shift键,
  • 则charCode

值得注意的是, keyCode 无法使用,因为它似乎始终具有值“0”;但 charCode 确实有正确的值。

每个键的值是侧栏对象执行所需XMLRPC调用的回调键。

然后为每个按键查询此快捷键映射,如果匹配则;回调密钥用于预先注册的侧边栏回调