「再起動不要な拡張機能」の編集履歴(バックアップ)一覧に戻る

再起動不要な拡張機能 - (2014/01/25 (土) 20:35:54) の編集履歴(バックアップ)


基本

ファイル構成

*.xpi
 ├ install.rdf
 ├ bootstrap.js   ←これが追加
 ├ chrome.manifest
 ├ content
 ├ locale 
 └ skin

install.rdf に追加

<em:bootstrap>true</em:bootstrap>

bootstrap.js の内容

function startup(data, reason) {
    // 拡張機能の起動時(Firefoxの起動、拡張機能の有効化など)に実行
}
function shutdown(data, reason) {
    // 拡張機能の終了時(Firefoxの終了、拡張機能の無効化など)に実行
}
function install(data, reason) {
    // 拡張機能のインストール時に一度だけ実行
}
function uninstall(data, reason) {
    // 拡張機能のアンインストール時に一度だけ実行
} 

制限

  • chrome.manifestでoverlayが使えない。
    • つまり既存の機能やUIを変更したい場合、xul overlayに頼らず全てjavascriptで処理しなければならない。
    • contentは使えるので独自のxulウィンドウ等を使う事は可能。
    • overrideなら使える。
  • chrome.manifestでstyleも使えない。
    • この辺もjavascriptで。
  • defaults/preferences/prefs.js によるデフォルト設定が出来ない。
    • 全部javascriptで。
  • 独自XPCOMコンポーネントを登録できない。使えない。


実際にどう書くか等

例えばブラウザウィンドウにメニューを追加する場合、startup()には
  1. 既存のブラウザウィンドウをServices.wmで全て取得
  2. 取得した全ウィンドウにDOM操作でメニュー追加
  3. Services.wmかServices.wwで今後開かれるブラウザウィンドウを監視して、その都度メニューを追加
という処理を書く。
当然shutdown()には全ウィンドウを取得してメニューを削除する処理を書く。