2010-05-21 4 views
1

J'ai été chargé de développer un module Firefox capable d'enregistrer des raccourcis clavier globaux (ceux qui fonctionneront dans tous les domaines de Firefox) qui ouvriront le barre latérale et exécuter une requête XMLRPC basée sur une entrée précédemment enregistrée. L'idée ici est qu'il y aura beaucoup de requêtes XMLRPC potentielles que l'utilisateur voudra exécuter via un raccourci clavier.Développement de modules complémentaires Firefox: Enregistrer des raccourcis clavier personnalisés dynamiques globaux

Actuellement, l'add-on est capable de gérer des raccourcis clavier statiques prédéfinis via la superposition de Firefox. Ce que je voudrais réaliser, c'est permettre à l'utilisateur d'enregistrer son propre raccourci clavier dynamique personnalisé.

Il existe un module qui possède actuellement certaines de ces fonctionnalités, appelé Keyconfig. Je ne tiens pas à demander aux utilisateurs d'installer un second module pour définir leurs propres raccourcis. Il semble également que l'utilisation de la méthode d'enregistrement de raccourci clavier dynamique dans Keyconfig nécessite que l'utilisateur ferme toutes les fenêtres de Firefox avant que le raccourci dynamique ne soit disponible.

Ce que je voudrais savoir est:

  • est un composant XPCOM la meilleure manière d'enregistrer les raccourcis clavier dynamiques à partir d'un Firefox add-on?
  • Existe-t-il un moyen d'enregistrer le raccourci clavier afin qu'il soit immédiatement disponible pour toutes les fenêtres de Firefox, sans avoir à fermer les fenêtres au préalable?

Répondre

1

Je ne suis pas en mesure de répondre « est un composant XPCOM la meilleure façon d'enregistrer les raccourcis clavier dynamiques à partir d'un add-on Firefox? », mais avec l'aide d'un collègue de travail, nous avons compris un moyen de faire les raccourcis clavier dynamiques et les rendre immédiatement utilisables.

window.onkeypress = callback; 

Tout en étant une bidouille flagrants, comme il exécutera le rappel pour chaque pression de touche que les processus de fenêtre de chrome; il permet à la fenêtre principale de Firefox Chrome d'avoir des raccourcis clavier dynamiques sans nécessiter de rechargement.

Pour que cela fonctionne avec les raccourcis clavier étant définis dans la barre latérale, j'ai créé un auditeur dans la superposition de méthode init() de JavaScript qui écoute un événement personnalisé dans la barre latérale:

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

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

L'objet dans la barre latérale déclenche alors l'un de ces événements lors de tout changement d'état sur la carte, ce qui amène l'écouteur d'événement à affecter la carte à l'objet dans la superposition de Firefox. La clé de la cartographie est un hachage composite des membres de données d'événements keypress suivants:

  • altKey
  • ctrlKey
  • metaKey
  • shiftKey
  • charCode

Il convient de noter ici, que keyCode ne peut pas être utilisé car il semble avoir la valeur '0' tout le temps; mais charCode a la valeur correcte.

La valeur de chaque clé est une clé de rappel pour l'objet de la barre latérale permettant d'exécuter l'appel XMLRPC souhaité.

Cette carte de touches de raccourci est ensuite interrogée pour chaque pression de touche, et s'il y a correspondance; la touche de rappel est utilisée sur un rappel de barre latérale pré-enregistré

Questions connexes