Firefoxの拡張(extension)機能作成(まとめ)
WindowsでFirefox(1.5以降)の拡張機能(extension)を作成する方法のまとめ。詳しくはhttp://kb.mozillazine.org/Getting_started_with_extension_developmentを参照のこと。
- 確認用プロファイルの作成
- デバッグ用設定
- 作業フォルダの作成
- 作業フォルダを認識させる
- xpiを作成する
確認用プロファイルの作成
通常のブラウズ用とは別途開発用にプロファイルを作成しておく。スタートメニューの[ファイル名を指定して実行]から
firefox -profilemanager
でプロファイルマネージャを起動する。実行する場合には、事前にfirefoxは終了させておくこと。このプロファイルマネージャで開発用のプロファイル名(ここではdev)を作成する。
この作成したプロファイル名で起動するように、以下のバッチを作成しておくといいかも。
set MOZ_NO_REMOTE=1 "C:\Program Files\Mozilla Firefox\firefox.exe" -P dev
デバッグ用設定
作成したプロファイルフォルダに以下の設定をuser.jsとして保存しておくことで、デバッグしやすくなるとのこと。
// Log errors in chrome file to the Javascript Console user_pref( "javascript.options.showInConsole", true); // Disable XUL cache, so chrome changes do not require a restart user_pref( "nglayout.debug.disable_xul_cache", true); // dump() function outputs to console if application started with -console flag user_pref( "browser.dom.window.dump.enabled", true); // Enable strict javascript warnings, to produce clean extensions user_pref( "javascript.options.strict", true);
作業フォルダの作成
作業フォルダ(ここではC:\FireFox\extest)を作成する。その配下として、以下のファイル、フォルダを用意する。
- content (overlay用のXULやJavaScriptなどを格納するフォルダ)
- locale (各ロケール用ファイルを保存するフォルダ)
- en-US (英語用フォルダ)
- ja-JP (日本語用フォルダ)
- その他のロケールがあれば
- skin (XULで使用する画像やCSSなどを保存するフォルダ)
- chrome.manifest (マニフェストファイル:各ファイルの関連を記述)
- install.rdf (この拡張機能のRDF)
chrome.manifest
chrome.manifestはデバッグ時とxpi作成時とは指定パスを変える。デバッグ時は以下(コメントがxpi作成時)。
content extest content/ #content extest jar:chrome/extest.jar!/content/ overlay chrome://browser/content/browser.xul chrome://extest/content/extension-browserOverlay.xul skin extest classic/1.0 skin/ #skin extest classic/1.0 jar:chrome/extest.jar!/skin/ style chrome://global/content/customizeToolbar.xul chrome://extest/skin/extension-browserOverlay.css locale extest en-US locale/en-US/ locale extest ja-JP locale/ja-JP/ #locale extest en-US jar:chrome/extest.jar!/locale/en-US/ #locale extest ja-JP jar:chrome/extest.jar!/locale/ja-JP/
install.rdf
拡張機能に関する記述を行う。最初のDescriptionのidはxpiを配布する場合はGUIDを作成する必要があるが、デバッグ時はメールアドレス風*1のものを設定。作業フォルダを認識させるために必要になる。最後のDescriptionはFirefoxの記述で、id({ec8030f7....})はFirefoxを表すものなので固定。
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:mozilla:install-manifest" em:id="foobar@miyagino.net" em:version="0.1" em:name="Firefox Extension test" em:description="Extension test of Firefox." em:creator="Kazuo Kohchi" em:homepageURL="http://www.miyagino.net/" em:iconURL="chrome://extest/skin/icon32x32.png" em:aboutURL="chrome://extest/content/about.xul"> <em:targetApplication RDF:resource="rdf:#$abc123"/> <em:contributor>Kazuo Kohchi</em:contributor> </RDF:Description> <RDF:Description RDF:about="rdf:#$abc123" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="2.0.0.0" em:maxVersion="2.0.0.*" /> </RDF:RDF>
作業フォルダを認識させる
プロファイルフォルダのextensionsフォルダ(なければ作成する)配下に上記install.rdfで指定したメールアドレス風idのファイルを作成して、フォルダパスを記述する。
> cd C:\Documents and Settings\XXXX\Application Data\Mozilla\Firefox\Profiles\ZZZZ.dev\extensions > type foobar@miyagino.net C:\FireFox\extest
これで作成したプロファイル用のfirefoxを実行すればよいはず。toolbarへの拡張機能の場合は、最初にツールバーのカスタマイズウィンドウにのみ表示されている。それからツールバーにドラッグしてあげる(このことを知らなくって、なぜツールバーにでないのか、半日悩んだ)。
xpiを作成する
- chrome.manifestをxpi用に変更を行う。
- GUIDを作成する。WindowsNT base system用
- 以下バッチを実行する。7-Zipをインストールしておくこと。
set x=%cd% mkdir build\chrome mkdir chrome xcopy content chrome\content /s/e/i xcopy locale chrome\locale /s/e/i xcopy skin chrome\skin /s/e/i cd chrome "C:\Program Files\7-Zip\7z" a -tzip "%x%.jar" * -r -mx=0 move "%x%.jar" ..\build\chrome cd .. copy install.rdf build copy chrome.manifest build cd build "C:\Program Files\7-Zip\7z" a -tzip "%x%.xpi" * -r -mx=9 move "%x%.xpi" ..\ cd .. rmdir chrome /s/q rmdir build /s/q
バッチを作成するときにいつも思うが、shellのほうがやっぱ、数段楽。もうちょっと使い勝手よくなってほしいなぁ。>MSさん。
*1:id:kazuokohchi:20061103