Firefox を再起動する
Firefox 3 以前
Firefox を再起動するとき、 Firefox 3 までは以下のようなコードを書く必要があった。
var appStartup = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup); appStartup.quit(appStartup.eRestart | appStartup.eAttemptQuit);
ただし、上記コードでは Firefox 終了直前に「開いているタブを保存して次回起動時に復元しますか?」の確認ダイアログを表示する設定になっていた場合などに、ダイアログを表示せずに強制的に終了してしまう欠点がある。そのような場合でもちゃんとダイアログを表示させるようにするためには、 chrome://mozapps/content/extensions/extensions.js の restartApp 関数のように少々長いコードを書く必要があった。
Firefox 3.5 以降
FUEL の extIApplication インタフェースに追加された restart メソッドで実現可能となった。
Application.restart();
Application 定数が未定義の JS XPCOM 内では、以下のようにする。
var fuelApp = Cc["@mozilla.org/fuel/application;1"].getService(Ci.fuelIApplication); fuelApp.restart();
また、 restart メソッドの戻り値で、実際に再起動の処理を開始するか、あるいはユーザによってキャンセルされたかを判別可能。
var ret = Application.restart(); alert(ret ? "再起動します。" : "再起動はユーザによってキャンセルされました。");
なお、 Firefox を終了する処理についても、 FUEL で実現可能となった。
Application.quit();
FUEL 2.0
FUEL – MDC からリンクされている全オブジェクトのページの和訳が完了した。
以下、 FUEL 2.0 で追加された各オブジェクトについての雑感。
Window
ブラウザウィンドウの新しいタブでURIを開く。
タブを開く・閉じる・移動する・選択するイベントを監視する。
ブラウザウィンドウを開いた直後(つまり browser.xul にて window の load イベント発生時)に、イベントリスナを追加するために、 Application.activeWindow.events.addListener… などとやりたいところだが、アクティブなウィンドウ=今開いたウィンドウとは限らない?つまり、バックグラウンドでウィンドウを開くようなケースもありうるかも?
BrowserTab
タブでURIを読み込む、タブを移動する、タブを選択する、タブの内容ドキュメントを取得する。
タブへの読み込みイベントを監視する。
Window#open と BrowserTab#load は使用頻度高そうだが、引数はどちらも nsIURI オブジェクトってのは痛い。 FUEL の目的は XPCOM を意識しない形へとコードを簡略化することじゃなかったっけ?
BookmarkFolder
Bookmark
ブックマーク・区切り・フォルダの追加、削除、各プロパティの取得と変更。機能的にはそれだけ。
BookmarkFolder#addSeparator の引数にタイトルを指定できないのはなぜ?と思ったら、 Places では区切りにタイトルを付けられなくなっているようだ。
Annotations
Places:Annotation Service 自体は拡張機能開発者的にはかなり期待できそうなシステムだけど、 FUEL の Annotations オブジェクトによってどういうメリットがもたらされるかは現時点では不明。
Gran Paradiso Alpha 4 で FUEL 使用不可
使い方がよくわからないので色々試してみたけど時間の無駄だった。
Bug 379139 – FUEL 0.1: Component/typelibs need to be added to installer manifests