Firefox へのメニューアイテムの追加

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

この SDK では、Firefox に新しいメニューアイテムを追加する API がまだ提供されていません。しかしこの SDK は拡張性に優れ、誰もがアドオン開発者向けのモジュールを作成して公開できるように設計されています。幸い、メニューアイテムの追加については、Erik Vold 氏の作成による menuitems パッケージが利用できます。

このチュートリアルでは、外部のサードパーティパッケージをアドオンで使用する一般的な方法と、特に menuitems パッケージを使用してメニューアイテムを追加する方法の両方について説明します。

menuitems のインストール

まず menuitemshttps://github.com/erikvold/menuitems-jplib からダウンロードします。

次に、SDK の packages ディレクトリ上で menuitems を展開します。

cd packages
tar -xf ../erikvold-menuitems-jplib-d80630c.zip

ここで cfx docs を実行すると、サイドバーに「Third-Party APIs」という新しいセクションが追加され、menuitems パッケージが表示されます。パッケージに含まれるモジュールは、その下に表示されます。menuitems には、同じく menuitems という名前のモジュールが 1 つだけ入っていることがわかります。

モジュール名をクリックすると、そのモジュールの API ドキュメントが表示されます。またパッケージ名をクリックすると、そのパッケージの基本的なドキュメントが表示されます。

パッケージページに記載されている重要事項の 1 つに、以下のようなパッケージの依存関係があります。

Dependencies             api-utils, vold-utils

この記述は、このパッケージを使用するためには、vold-utils パッケージ(https://github.com/erikvold/vold-utils-jplib からダウンロードできます)をインストールし、packages ディレクトリの下に menuitems とともに保存する必要があることを示しています。

menuitems の使用

menuitems の使用方法は、内蔵モジュールの使用方法とまったく同じです。

menuitems モジュールのドキュメントの記述によると、メニューアイテムの作成には MenuItem() を使用します。MenuItem() のオプションの中から、ここでは以下の最小セットを使用します。

  • id:このメニューアイテムの識別子(固有名)
  • label:このメニューアイテムに表示されるテキスト
  • command:ユーザーがこのメニューアイテムを選択したときに呼び出される関数
  • menuid:このメニューアイテムの親要素の識別子
  • insertbefore:このメニューアイテムの前に表示されるアイテムの識別子

次に、新しいアドオンを作成します。任意の場所に 'clickme' という名前のディレクトリを作成し、そのディレクトリに移動して cfx init を実行します。lib/main.js を開き、内容を以下と置き換えます。

var menuitem = require("menuitems").Menuitem({
  id: "clickme",
  menuid: "menu_ToolsPopup",
  label: "Click Me!",
  onCommand: function() {
    console.log("clicked");
  },
  insertbefore: "menu_pageInfo"
});

次に、 menuitems パッケージに対する依存関係を宣言する必要があります。 アドオンの package.json に、次の行を追加します。

"dependencies": "menuitems"

bug 663480 のバグのため、package.jsondependencies 行を追加し、addon-kit などの内蔵パッケージにあるモジュールを使用する場合でも、以下のように依存関係を宣言する必要があることに注意してください。

"dependencies": ["menuitems", "addon-kit"]

これで作業は完了です。アドオンを実行すると、「ツール」メニューに新しいアイテムが表示されます。そのアイテムを選択すると、コンソールに info: clicked と表示されます。

注意

Mozilla は、サードパーティ製パッケージの豊富さが、いずれはこの SDKの大きな魅力の 1 つになると考えています。現在これらのパッケージは、面倒な低レベル API を使用せずに、現行の API では対応できない機能を実現する優れた方法です。しかし同時に、以下の点に注意する必要があります。

  • Mozilla によるサードパーティ製パッケージのサポートは、まだ万全とはいえません。その一例として、SDK の GitHub Wiki にある Community Developed Modules のページにパッケージの一覧が用意されてはいますが、サードパーティ製パッケージが容易に見つからないこともあります。

  • サードパーティ製パッケージでは、通常、低レベル API が使用されているので、Firefox の新規リリースによって機能しなくなることがあります。