ツールバーへのボタンの追加

このチュートリアルに沿って学習するには、あらかじめ SDK をインストールし、cfx 入門を学習してください。

ツールバーにボタンを追加するには、widget モジュールを使用します。

cfx init で作成されるデフォルトのアドオンではウィジェットが使用されているので、それを例にとって説明しましょう。cfx init を紹介するチュートリアルをまだ完了していない場合は、まずそれを完了した後、このページに戻ってください。

新しいディレクトリを作成し、そのディレクトリに移動して cfx init を実行します。その後、「lib」ディレクトリで「main.js」ファイルを開きます。

const widgets = require("widget");
const tabs = require("tabs");

var widget = widgets.Widget({
  id: "mozilla-link",
  label: "Mozilla website",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: function() {
    tabs.open("http://www.mozilla.org/");
  }
});

ウィジェットが、ブラウザウィンドウの一番下の「アドオンバー」に追加されます。

Mozilla icon widget

開発者はウィジェットを最初の場所から移動できませんが、ユーザーはウィジェットを別のツールバーに移動することができます。id はウィジェットの位置を記憶するための必須の属性なので、このアドオンの後続のバージョンでも変更しないでください。

ボタンをクリックすると、http://www.mozilla.org が開きます。

アイコンの指定

ウィジェットを使用してツールバーボタンを作成する場合、表示するアイコンを contentURL で指定します。アイコンには、上の例のようにリモートファイルを指定することも、ローカルファイルを指定することもできます。下の例では、アドオンの data ディレクトリから「my-icon.png」というアイコンファイルを読み込みます。

var widgets = require("widget");
var tabs = require("tabs");
var self = require("self");

var widget = widgets.Widget({
  id: "mozilla-link",
  label: "Mozilla website",
  contentURL: self.data.url("my-icon.png"),
  onClick: function() {
    tabs.open("http://www.mozilla.org/");
  }
});

アイコンは、ウィジェットの contentURL プロパティを設定していつでも変更できます。

ユーザーの操作への対応

clickmouseovermouseout イベントをリッスンするには、対応するコンストラクタオプションとしてハンドラ関数を渡します。上のウィジェットの例では、onClick オプションを使用して click イベントにリスナーを割り当てています。これと同様の onMouseover オプションや onMouseout オプションも用意されています。

ユーザー操作に対してより複雑な処理を行うには、ウィジェットにコンテンツスクリプトを付加します。アドオンスクリプトとコンテンツスクリプトは、互いの変数に直接アクセスすることも、互いの関数を呼び出すこともできませんが、相互にメッセージを送信することは可能です。

例を挙げて説明しましょう。ウィジェットに内蔵された onClick プロパティではマウスの右クリックと左クリックが区別されないので、これを区別するにはコンテンツスクリプトを使用する必要があります。このスクリプトは、以下のようになります。

window.addEventListener('click', function(event) {
  if(event.button == 0 && event.shiftKey == false)
    self.port.emit('left-click');

  if(event.button == 2 || (event.button == 0 && event.shiftKey == true))
    self.port.emit('right-click');
    event.preventDefault();
}, true);

このスクリプトでは、標準の DOM addEventListener() 関数を使用してクリックイベントがリッスンされ、イベントが発生した場合、対応するメッセージがメインのアドオンコードに送信されます。「left-click」および「right-click」の2つのメッセージは、ウィジェット API 自体で定義されているのではなく、アドオン作成者が定義したカスタムイベントであることに注意してください。

このスクリプトを data ディレクトリに「click-listener.js」という名前で保存します。

次に、main.js が以下の動作を行うように変更します。

  • contentScriptFile プロパティを設定してスクリプトを渡します。
  • 新しいイベントをリッスンします。
var widgets = require("widget");
var tabs = require("tabs");
var self = require("self");

var widget = widgets.Widget({
  id: "mozilla-link",
  label: "Mozilla website",
  contentURL: "http://www.mozilla.org/favicon.ico",
  contentScriptFile: self.data.url("click-listener.js")
});

widget.port.on("left-click", function(){
  console.log("left-click");
});

widget.port.on("right-click", function(){
  console.log("right-click");
});

ここで cfx run を再度実行し、左右のマウスボタンをクリックしてみます。 対応する文字列が、コマンドシェルに書き込まれるのを確認してください。

パネルの付加

Panel attached to a widget

ウィジェットのコンストラクタで panel オブジェクトを指定すると、ユーザーがウィジェットをクリックしたときにパネルが表示されます。

data = require("self").data

var clockPanel = require("panel").Panel({
  width:215,
  height:160,
  contentURL: data.url("clock.html")
});

require("widget").Widget({
  id: "open-clock-btn",
  label: "Clock",
  contentURL: data.url("History.png"),
  panel: clockPanel
});

パネルの操作の詳細については、ポップアップの表示 のチュートリアルを参照してください。

さらに詳しく

widget モジュールの詳細については、API リファレンスのドキュメント(英語) を参照してください。

コンテンツスクリプトの詳細については、コンテンツスクリプトガイド(英語)を参照してください。