Para seguir este tutorial você precisará ter instalado o SDK e aprendido o básico do cfx.
Se vocé estiver usando jpm ao invés de cfx, o método para usar módulos de terceiros é diferente, e você deve ler a versão jpm ao invés deste guia.
O SDK não tem ainda uma API para adicionar novos itens de menu ao Firefox. Mas é extensível por design, então qualquer um pode construir e publicar módulos para desenvolvedores de add-on usar. Felizmente, Erik Vold escreveu um módulo menuitems
que nos permite adicionar itens de menu.
Este tutorial tem dupla função. Ele descreve o método geral para usar um externo, módulo de terceiro em seu add-on, e ele descreve como adicionar um item de menu usando o módulo menuitems
em especial.
Primeiro, crie um novo add-on. Crie um diretório chamado "clickme" onde você quiser, navegue para ele e execute cfx init
.
mkdir clickme cd clickme cfx init
A estrutura de diretório de costume será criada:
- clickme
- data
- lib
- main.js
- package.json
- tests
- test-main.js
Inslatando menuitems
Crie um diretório em "clickme" chamado "packages". Baixe o pacote menuitems
de https://github.com/mykmelez/menuitems-jplib e extrai ele dentro do diretório "packages" que você criou:
mkdir packages cd packages tar -xf ../erikvold-menuitems-jplib-d80630c.zip
Dependências de Módulo
Se os módulos de terceiros dependem de módulos SDK, você pode usá-los imediatamente, mas se eles dependem de módulos de terceiros, você terá de instalar essas dependências também.
No diretório principal do pacote (menuitems) você encontrará um arquivo chamado "package.json". Abra ele e procure por uma entrada chamada "dependencies". A entrada para o pacote menuitems
é:
"dependencies": ["api-utils", "vold-utils"]
Isso nos diz que nós precisamos instalar o pacote vold-utils
, que nós podemos fazer baixando ele de https://github.com/mykmelez/vold-utils-jplib e adicionando ele ao diretório packages com menuitems
. Veja também api-utils Docs(UtilsAPI).
Usando menuitems
A documentação para o módulo menuitems
nos diz para criar um item de menu usando MenuItem()
. Das opções aceitas pelo MenuItem()
, nós usaremos este conjunto mínimo:
id
: identificado para este item de menulabel
: texto para mostrar no itemcommand
: função chamada quando o usuário seleciona o itemmenuid
: identificador para o elemento pai do iteminsertbefore
: identificador para o item anterior àquele que nós queremos que o item apareça
var menuitem = require("menuitems").Menuitem({ id: "clickme", menuid: "menu_ToolsPopup", label: "Click Me!", onCommand: function() { console.log("clicked"); }, insertbefore: "menu_pageInfo" });
Próximo, nós temos que declarar nossa dependência do pacote menuitems
. No package.json
de nosso add-on adicionamos a linha:
"dependencies": "menuitems"
Observe que devido ao bug 663480, se você adicionar uma linha dependencies
ao package.json
, e você usar qualquer módulo do SDK, então você deve também declarar sua dependência naquele pacote embutido, como isto:
"dependencies": ["menuitems", "addon-sdk"]
Agora terminamos. Execute o add-on e você verá o novo item aparecer no menu de Ferramentas: selecione ele e você verá a info: clicked
aparecer no console.
Cuidados
Módulos de terceiros são uma ótima forma de usar características não suportadas diretamente pelo SDK, mas porque módulos de terceiros usam APIs de nível baixo, eles podem quebrar quando forem lançadas novas versões do Firefox.