Para seguir este tutorial você precisará ter instalado o SDK e ter conhecimento básico sobre cfx.
Este tutorial usa a API action button, que está disponível somente do Firefox 29 em diante.
Para mostrar um popup de diálogo, use o módulo panel
. Um painel de conteúdo é definido usando HTML. Você pode executar scripts no painel: embora o script em execução no painel não pode acessar diretamente o código de seu add-on, você pode trocar mensagens entre o script do painel e o código do add-on.
Neste tutorial nós criaremos um add-on que adiciona um action button à barra de ferramentas que mostra um painel quando clicado. O painel contém apenas um elemento <textarea>:
quando o usuário aperta a tecla return
, o conteúdo da <textarea>
é enviado ao código principal do add-on. O código principal do add-on repassa a mensagem ao console.
O add-on consiste em seis arquivos:
main.js
: o código principal do addon, que cria o botão e o painelget-text.js
: o conteúdo do script que interage com o conteúdo do paineltext-entry.html
: o conteúdo do painel em si, especificado como HTMLicon-16.png
,icon-32.png
, andicon-64.png
: ícone para o botão em três tamanhos diferentes
O "main.js" se parece com isso:
var data = require("sdk/self").data;
// Constrói um painel, carrega seu conteúdo do arquivo
// "text-entry.html" no diretório "data", e carrega o script "get-text.js"
// para ele.
var text_entry = require("sdk/panel").Panel({
contentURL: data.url("text-entry.html"),
contentScriptFile: data.url("get-text.js")
});
// Cria um botão
require("sdk/ui/button/action").ActionButton({
id: "show-panel",
label: "Show Panel",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
//Mostra o painel quando o usuário clica no botão
function handleClick(state) {
text_entry.show();
}
//Quando o painel é mostrado ele gera um evento chamado
//"show": nós esperaremos por este evento e quando ele ocorrer
//enviamos nosso próprio evento "show" para o script do painel,
//então o script pode preparar o painel para mostrar.
text_entry.on("show", function() {
text_entry.port.emit("show");
});
//Espera pela mensagem chamada "text-entered" vinda do
//script do conteúdo. A carga útil da mensagem é o texto
//digitado pelo usuário.
//Nesta implementação nós passaremos o texto para o console.
text_entry.port.on("text-entered", function (text) {
console.log(text);
text_entry.hide();
});
O conteúdo do script "get-text.js" parece com isto:
//Quando o usuário digita return, envia a mensagem "text-entered"
// para o main.js.
//A carga útil da mensagem é o conteúdo da caixa de edição.
var textArea = document.getElementById("edit-box");
textArea.addEventListener('keyup', function onkeyup(event) {
if (event.keyCode == 13) {
// Remove a nova linha.
text = textArea.value.replace(/(\r\n|\n|\r)/gm,"");
self.port.emit("text-entered", text);
textArea.value = '';
}
}, false);
//Espera pelo evento "show" vim do
//código principal do add-on. O que significa que o
//painel sobre será mostrado.
//
//Configura o foco para a área de texto então o usuário pode
//começar a digitar.
self.port.on("show", function onShow() {
textArea.focus();
});
Finalmente, o arquivo "text-entry.html" define o elemento <textarea>
:
<html>
<head>
<style type="text/css" media="all">
textarea {
margin: 10px;
}
body {
background-color: gray;
}
</style>
</head>
<body>
<textarea rows="13" cols="33" id="edit-box"></textarea>
</body>
</html>
Finalmente, salve estes três ícones no diretório "data":
![]() |
icon-16.png |
![]() |
icon-32.png |
![]() |
icon-64.png |
Teste: o "main.js" está salveo no diretório lib
do add-on, e os outros cinco arquivos vão no diretório data do add-on:
my-addon/ data/ get-text.js icon-16.png icon-32.png icon-64.png text-entry.html lib/ main.js
Execute o add-on, clique no botão, e você deverá ver o painel. Digite algum texto e pressione "return" e você deverá ver a saída no console.
Do Firefox 30 em diante, se você usar o toggle button, você pode anexar o painel ao botão.
Aprendendo Mais
Para aprender mais sobre o módulo panel
, veja a referência da API panel
.
Para aprender mais sobre buttons, veja referência da API action button e toggle button.