このチュートリアルを行うには SDK をインストール し、cfx の基本 について学んでいる必要があります。

このチュートリアルは、Firefox 29 以降で使用可能な アクションボタン API を使用しています。

ポップアップダイアログを表示するには、panel モジュールを使用します。パネルのコンテンツは HTML を使用して定義されます。パネル内でコンテンツのスクリプトを実行できます: パネル内で実行されるスクリプトは、アドオンのメインコードには直接アクセスできませんが、パネルのスクリプトとアドオンのコードの間でメッセージを交換できます。

このチュートリアルでは、クリックした際にパネルを表示する アクションボタン をツールバーに追加したアドオンを作成します。パネルには、<textarea> 要素のみが含まれています: return キーを押すと、<textarea> 内のコンテンツがメインのアドオンコードに送信されます。メインのアドオンコードでは、メッセージをコンソールログに表示 します。

アドオンは 6 つのファイルで構成されています:

  • main.js: アドオンのメインコードで、ボタンとパネルを生成します
  • get-text.js: パネルのコンテンツとインタラクティブなコンテンツスクリプトです
  • text-entry.html: パネルのコンテンツそのもので、HTML で記述されます
  • icon-16.pngicon-32.pngicon-64.png: 3 つの異なるサイズのボタン用アイコンです

"main.js" は以下のようになっています:

var data = require("sdk/self").data;
// Construct a panel, loading its content from the "text-entry.html"
// file in the "data" directory, and loading the "get-text.js" script
// into it.
var text_entry = require("sdk/panel").Panel({
  contentURL: data.url("text-entry.html"),
  contentScriptFile: data.url("get-text.js")
});

// Create a button
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
});

// Show the panel when the user clicks the button.
function handleClick(state) {
  text_entry.show();
}

// When the panel is displayed it generated an event called
// "show": we will listen for that event and when it happens,
// send our own "show" event to the panel's script, so the
// script can prepare the panel for display.
text_entry.on("show", function() {
  text_entry.port.emit("show");
});

// Listen for messages called "text-entered" coming from
// the content script. The message payload is the text the user
// entered.
// In this implementation we'll just log the text to the console.
text_entry.port.on("text-entered", function (text) {
  console.log(text);
  text_entry.hide();
});

コンテンツスクリプト "get-text.js" は、以下のようになっています:

// When the user hits return, send the "text-entered"
// message to main.js.
// The message payload is the contents of the edit box.
var textArea = document.getElementById("edit-box");
textArea.addEventListener('keyup', function onkeyup(event) {
  if (event.keyCode == 13) {
    // Remove the newline.
    text = textArea.value.replace(/(\r\n|\n|\r)/gm,"");
    self.port.emit("text-entered", text);
    textArea.value = '';
  }
}, false);
// Listen for the "show" event being sent from the
// main add-on code. It means that the panel's about
// to be shown.
//
// Set the focus to the text area so the user can
// just start typing.
self.port.on("show", function onShow() {
  textArea.focus();
});
 

そして、"text-entry.html" ファイルで <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>
 

3 種類のアイコンファイルを "data" ディレクトリに保存します:

icon-16.png
icon-32.png
icon-64.png

試してください: "main.js" をアドオン内の lib ディレクトリに保存し、他の 5 つのファイルをアドオン内のdata ディレクトリに保存してください:

my-addon/
         data/
              get-text.js
              icon-16.png
              icon-32.png
              icon-64.png
              text-entry.html
         lib/
             main.js

アドオンを実行し、ボタンをクリックすると、パネルが表示されます。テキストを入力し、"return" を押すと、コンソールに出力されます。

Firefox 30 以降では、トグルボタン を使用すると、 ボタンからパネルを呼び出せます

詳しく学ぶ

panel モジュールについてさらに学ぶには、panel API リファレンス をご覧ください。

ボタンについてさらに学ぶには、アクションボタントグルボタン API リファレンスをご覧ください。

ドキュメントのタグと貢献者

 このページの貢献者: hamasaki, dskmori
 最終更新者: hamasaki,