既存アドオンのソースコードの閲覧

ソースコードの場所と、その展開方法

インストール済みのアドオンはプロファイル フォルダextensions/フォルダ※1 に、xpiファイル※2 として保存されています。このファイルの実体はzipファイルであるため、拡張子をxpiからzipに変更することで、圧縮ファイルとして展開できるようになります。アドオンのソースやリソースは、そこにあります。≫XPIパッケージング

※1 グローバル インストールされたアドオンのインストール場所は異なります。
※2 xpiファイルとして圧縮されず、展開された状態の場合もあります。

インストールされていないアドオンのソースについては、まずAdd-ons for Firefoxからそのアドオンのページを開きます。そして[Add to Firefox]のボタンを右クリックしてリンク先を保存することで、インストールせずにソースをダウンロードできます。

JARパッケージ

xpiファイルの展開後のchromeフォルダにjarという拡張子のファイルがある場合には、それも圧縮ファイルです。これはJARと呼ばれる圧縮ファイルで、これもxpiファイルと同様に拡張子をzipに変更することで展開できます。

アドオンID

xpiファイルの名前は、アドオンIDで表示されます。

ファイル名からアドオンが推定できないときには、ファイルを展開した後にinstall.rdfを開きます。そして<em:name>を探すことで、アドオン名を確認できます。またはaboutプロトコルのabout:support (トラブルシューティング情報) の[拡張機能]の項目で、アドオンの名前とIDを一覧できます。

代表的なアドオンのアドオンID
アドオン名 アドオンID
NoScript 73a6fe31-595d-460b-a920-fcc0f8843232
Adblock Plus d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d

グローバル インストール (Global install)

Java Consoleなどの一部のアドオンは、通常とは異なる場所にインストールされます。それらのアドオンは、Firefoxのインストール フォルダのextensionsフォルダにあります。アドオンを削除できない | Firefox ヘルプ

デバッガによるソースコードの閲覧

ファイルを展開せずとも、ブラウザツールボックスならば直接コードを閲覧できます。アドオンのソースコードを特定するにはChrome URIを把握している必要がありますが、スクリプトフィルタでアドオンの名前を入力すれば、 たいていそれを発見できます。

デバッガではブレークポイントを設定できるので、より詳細にアドオンを調べられます。

インストールしていないアドオンの、ソースの入手

Add-ons for Firefoxからアドオンのxpiファイルをダウンロードすることで、インストールしていないアドオンのソースも入手できます。

それにはアドオンのインストール ページで[Firefoxへ追加]を右クリックし、[名前を付けてリンク先を保存 (Save Link As)]を実行します。そうすることで、xpiファイルをダウンロードできます。

この方法ならば、互換性がなくインストールできないアドオンのソースも入手できます。

ファイル構成

たとえばフォルダ構成が次のようになっているとすると、

:.
|
\---chrome
|   +---content
|   |
|   +---locale
|   |   +---en-US
|   |   |
|   |   \---ja
|   |
|   \---skin
|       \---classic
|
+---components
|
+---defaults
|   \---preferences
|
\---platform
    \---WINNT

これらのフォルダは以下の意味を持ちます。

フォルダ 説明
ルート
  • chrome.manifest … UI要素のセットの基本情報 (Chrome Manifest)
  • install.rdf … アドオンをインストールするのに必要な情報 (Install Manifest)
  • icon.png … アドオン一覧に表示するアイコン (32×32)
  • icon64.png … アドオン一覧に表示するアイコン (64×64)
chrome UI要素のセット
+ content※1 UIの構造と振る舞い (ユーザー設定なども含む) ※2 スクリプトは、XULファイル内にインラインで記述されることもあります。
※3 CSSは、通常skinフォルダに配置します。
locale※1 UIの地域化
+ en-US 英語 (合衆国)
  • *.dtd … 実体参照によるローカライズされたテキスト
  • *.properties … プロパティによるローカライズされたテキスト
ja 日本語
  • (上記に同じ)
skin※1 UIのスキン。CSSやアイコンの画像など
+ classic 標準テーマのスキン
  • *.css
  • *.png
components
  • *.js
  • *.xpt … XPCOMを定義するIDLファイルを、バイナリ形式にコンパイルしたもの
defaults 既定の設定
+ preferences ユーザー設定の既定値
  • *.js
platform プラットフォーム依存のコンポーネント
+ WINNT WINNT用のコンポーネント
※1 chromeのJARパッケージにまとめられていることもあります。

フォルダの構成は、必ずしも上記の通りではありません。

ファイル構成の例

NoScript

+---{73a6fe31-595d-460b-a920-fcc0f8843232}
|   |   chrome.manifest
|   |   GPL.txt
|   |   install.rdf
|   |   mozilla.cfg
|   |   NoScript_License.txt
|   |
|   +---chrome
|   |   \---noscript
|   |       +---content
|   |       |   \---noscript
|   |       |           ABE.g
|   |       |           ABE.js
|   |       |           ABELexer.js
|   |       |           ABEParser.js
|   |       |           about.xul
|   |       |           antlr.js
|   |       |           ASPIdiocy.js
|   |       |           ChannelReplacement.js
|   |       |           clearClick.js
|   |       |           clearClick.xul
|   |       |           ClearClickHandler.js
|   |       |           ClearClickHandlerLegacy.js
|   |       |           Cookie.js
|   |       |           DNS.js
|   |       |           DOM.js
|   |       |           ExternalFilters.js
|   |       |           frameOptErr.xhtml
|   |       |           HTTPS.js
|   |       |           iaUI.js
|   |       |           Lang.js
|   |       |           noscript.js
|   |       |           noscript.xbl
|   |       |           noscriptBM.js
|   |       |           noscriptBMOverlay.xul
|   |       |           noscriptOptions.js
|   |       |           noscriptOptions.xul
|   |       |           noscriptOverlay.js
|   |       |           noscriptOverlay.xul
|   |       |           NoScript_License.txt
|   |       |           options-mobile.xul
|   |       |           overlay-mobile.xul
|   |       |           PlacesPrefs.js
|   |       |           Plugins.js
|   |       |           Policy.js
|   |       |           Profiler.js
|   |       |           Removal.js
|   |       |           RequestWatchdog.js
|   |       |           ScriptSurrogate.js
|   |       |           Strings.js
|   |       |           STS.js
|   |       |           URIValidator.js
|   |       |
|   |       +---locale
|   |       |   +---en-GB
|   |       |   |   \---noscript
|   |       |   |           about.properties
|   |       |   |           noscript.dtd
|   |       |   |           noscript.properties
|   |       |   |
|   |       |   +---en-US
|   |       |   |   \---noscript
|   |       |   |           about.properties
|   |       |   |           noscript.dtd
|   |       |   |           noscript.properties
|   |       |   |
|   |       |   +---ja-JP
|   |       |   |   \---noscript
|   |       |   |           about.properties
|   |       |   |           noscript.dtd
|   |       |   |           noscript.properties
|   |       |   |
|   |       \---skin
|   |           \---classic
|   |               \---noscript
|   |                       abe16.png
|   |                       about.css
|   |                       block.wav
|   |                       browser.css
|   |                       close.png
|   |                       console16.png
|   |                       content.css
|   |                       ef-no16.png
|   |                       ef16.png
|   |                       emb16.png
|   |                       embed-no16.png
|   |                       embed16.png
|   |                       faq16.png
|   |                       flash16.png
|   |                       flash32.png
|   |                       folder_closed.png
|   |                       folder_open.png
|   |                       font.png
|   |                       glb-emb16.png
|   |                       glb-no16.png
|   |                       glb16.png
|   |                       https16.png
|   |                       ia.png
|   |                       icon24.png
|   |                       icon32.png
|   |                       icon64.png
|   |                       icon80.png
|   |                       inactive-emb16.png
|   |                       inactive-glb16.png
|   |                       inactive-no-emb16.png
|   |                       inactive-no16.png
|   |                       inactive-prt16.png
|   |                       inactive-yes16.png
|   |                       inactive-yu16.png
|   |                       java16.png
|   |                       java32.png
|   |                       mobile.css
|   |                       no-emb16.png
|   |                       no16.png
|   |                       options.css
|   |                       prt16.png
|   |                       redirect16.png
|   |                       revtemp16.png
|   |                       somelight16.png
|   |                       somelight32.png
|   |                       subprt16.png
|   |                       temp16.png
|   |                       unsafe-reload16.png
|   |                       untrusted-glb16.png
|   |                       untrusted16.png
|   |                       webgl16.png
|   |                       webgl32.png
|   |                       xss16.png
|   |                       yes16.png
|   |                       yu-emb16.png
|   |                       yu-glb16.png
|   |                       yu16.png
|   |
|   +---components
|   |       noscriptService.js
|   |
|   +---defaults
|   |   \---preferences
|   |           noscript.js
|   |
|   \---META-INF
|           manifest.mf
|           zigbert.rsa
|           zigbert.sf
NoScript Security Suite :: Add-ons for Firefox

FireGestures

+---firegestures@xuldev.org
|   |   chrome.manifest
|   |   FireGestures.idl
|   |   icon.png
|   |   icon64.png
|   |   install.rdf
|   |   LICENSE.txt
|   |
|   +---chrome
|   |   +---content
|   |   |   \---firegestures
|   |   |           browser.js
|   |   |           browser.rdf
|   |   |           browser.xul
|   |   |           edit.js
|   |   |           edit.xul
|   |   |           prefs-generic.xul
|   |   |           prefs.js
|   |   |           prefs.xul
|   |   |           viewSource.js
|   |   |           viewSource.rdf
|   |   |           viewSource.xul
|   |   |
|   |   +---locale
|   |   |   |   BZ_localized.txt
|   |   |   |
|   |   |   +---en-US
|   |   |   |   \---firegestures
|   |   |   |           firegestures.properties
|   |   |   |           mapping.dtd
|   |   |   |           prefs.dtd
|   |   |   |
|   |   |   +---ja
|   |   |   |   \---firegestures
|   |   |   |           firegestures.properties
|   |   |   |           mapping.dtd
|   |   |   |           prefs.dtd
|   |   |   |
|   |   |   \---zh-TW
|   |   |       \---firegestures
|   |   |               firegestures.properties
|   |   |               mapping.dtd
|   |   |               prefs.dtd
|   |   |
|   |   \---skin
|   |       \---classic
|   |           \---firegestures
|   |                   icon.png
|   |                   prefs.css
|   |                   prefs.png
|   |
|   +---components
|   |       FireGestures.xpt
|   |       xdGestureHandler.js
|   |       xdGestureMapping.js
|   |       xdGestureService.js
|   |
|   \---defaults
|       \---preferences
|               firegestures-prefs.js
FireGestures :: Add-ons for Firefox

NoSquint

+---nosquint@urandom.ca
|   |   chrome.manifest
|   |   icon.png
|   |   icon64.png
|   |   install.rdf
|   |
|   +---chrome
|   |       nosquint.jar
|   |
|   +---components
|   |       about-handler.js
|   |
|   \---defaults
|       \---preferences
|               nosquint.js
NoSquint :: Add-ons for Firefox

HighlightAll

+---{26FD1F83-A45B-4c74-AF5A-F2EE0EE4D691}
|   |   chrome.manifest
|   |   install.rdf
|   |
|   +---chrome
|   |       highlightall.jar
|   |
|   \---defaults
|       \---preferences
|               highlightall_pref.js
HighlightAll :: Add-ons for Firefox

Download Statusbar

+---{D4DD63FA-01E4-46a7-B6B1-EDAB7D6AD389}
|   |   chrome.manifest
|   |   downbarPackage.jar
|   |   install.rdf
|   |   license.txt
|   |
|   +---components
|   |       downbar.js
|   |
|   \---defaults
|       \---preferences
|               downbarconfig.js
Download Statusbar :: Add-ons for Firefox

Firefox同梱のツール (omni.ja)

Firefoxに同梱されているツール類は、Firefoxのインストール フォルダのbrowser\omni.jaにまとめられています。これも圧縮ファイルですので、拡張子をzipに変更することで展開できます。

Firefox 21.0では、以下のフォルダ構成となっています。

C:.
+---chrome
|   +---browser
|   |   +---content
|   |   |   +---branding
|   |   |   \---browser
|   |   |       +---abouthealthreport
|   |   |       +---abouthome
|   |   |       +---bookmarks
|   |   |       +---certerror
|   |   |       +---devtools
|   |   |       |   +---framework
|   |   |       |   +---inspector
|   |   |       |   +---layoutview
|   |   |       |   \---profiler
|   |   |       |       \---cleopatra
|   |   |       |           +---css
|   |   |       |           +---images
|   |   |       |           \---js
|   |   |       +---downloads
|   |   |       +---feeds
|   |   |       +---history
|   |   |       +---migration
|   |   |       +---newtab
|   |   |       +---pageinfo
|   |   |       +---places
|   |   |       +---preferences
|   |   |       |   \---in-content
|   |   |       +---search
|   |   |       \---sync
|   |   \---skin
|   |       \---classic
|   |           +---aero
|   |           |   \---browser
|   |           |       +---devtools
|   |           |       |   \---breadcrumbs
|   |           |       +---downloads
|   |           |       +---feeds
|   |           |       +---newtab
|   |           |       +---places
|   |           |       +---preferences
|   |           |       |   \---in-content
|   |           |       +---social
|   |           |       +---tabbrowser
|   |           |       \---tabview
|   |           +---browser
|   |           |   +---devtools
|   |           |   |   \---breadcrumbs
|   |           |   +---downloads
|   |           |   +---feeds
|   |           |   +---newtab
|   |           |   +---places
|   |           |   +---preferences
|   |           |   |   \---in-content
|   |           |   +---social
|   |           |   +---tabbrowser
|   |           |   \---tabview
|   |           \---communicator
|   +---ja
|   |   \---locale
|   |       +---branding
|   |       +---browser
|   |       |   +---devtools
|   |       |   +---downloads
|   |       |   +---feeds
|   |       |   +---migration
|   |       |   +---places
|   |       |   +---preferences
|   |       |   \---safebrowsing
|   |       +---browser-region
|   |       +---feedback
|   |       \---pdfviewer
|   \---pdfjs
|       +---components
|       \---content
|           +---build
|           \---web
|               \---images
+---components
+---defaults
|   +---preferences
|   \---profile
|       \---chrome
+---jsloader
|   \---resource
|       \---app
|           +---components
|           \---modules
|               +---devtools
|               +---sessionstore
|               \---tabview
\---modules
    +---devtools
    +---sessionstore
    \---tabview
Firefoxアドオンの情報サイトから、まとめて検索