Firefox 3.6.2以降のペルソナで拡張機能などからローカルファイルを有効にする方法

上記エントリでFirefox3.6.2からペルソナの画像ファイルがhttp上のファイルでないと表示されなくなりました。そしてローカルファイルのfile://から始まるURLでも良いようにコードを直に書き換えるという大胆なことをしました。

が、どう考えても良いやり方ではないので探っていたところ、Firefoxインストールディレクト/modules/LightweightThemeConsumer.jsmというファイルを見つけました。

MXRで検索してみるとhttp://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/general.xmlXBLで使用されていて、実際のペルソナの画像やカラーの設定をするモジュールのようです。このXBLFirefox自体のroot要素に使用されているので、document.documentElement._lightweightThemeからアクセスできます。

let lwt = {};
Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", lwt);

let theme = lwt.LightweightThemeManager.usedThemes[0]
document.documentElement._lightweightTheme._update(theme);

と直に_updateメソッドを実行すればどんなURLであっても変更が可能です。

拡張機能などで、ローカルファイルを使用してペルソナを変更する場合には有効な手だと思います。ただ、「どんなURLであっても」なので危険かもしれません。