最新のソースをビルドしてみたのだが、Firefox で動かない。そもそもバックグラウンド部に当たる main.js が実行されていないか、あるいは途中でエラーになってるようだ。しかしエラーコンソールには何も出ていない。
動かない原因を探るのにも、Firefox + Add-on SDK では一苦労だ。まず Firebug でデバッグできない。できることはまずそうな箇所に console.log() をちりばめるくらいである。
そんなわけで原因は require() しているところのようだ、と分かりかけてきたのだけど…… cfx run で実行してみる分には普通に動くのだ。しかし xpi をビルドしてそれを Firefox にインストールしてみると動かない。先の記事の通り、必要なライブラリの有無の問題? と xpi の中を覗いてみても問題なさげ。
そういうわけでいろいろ試行錯誤してみたところ、意味が分からないことに console.log() を付加したり外したりするごとに main.js の最後まで通常通り実行されたり、途中で止まったり再現性のあまりない動作をすることに気が付いた。
うー、これは javascript のレベルでのバグじゃなくて Firefox のバイナリ自身のバグじゃないのかしら。ちなみにやはり先の記事の通り、main.js は minify してある。もしかしてこれが……? と、試しに minify せずに xpi をビルドしてみると、これが普通に動くのだ。えーそういうことなのか。
しかし minify しないと、xpi のサイズが 300KB 超になってしまう。Add-on SDK による xpi は SDK のコードも含むため、ただでさえサイズ大きめ(Chrome と Opera のエクステンションのサイズが 100KB 程度なのに対して、xpi は 200KB くらいになる)なのに、minify をしないとさらに増えてしまうわけだ。もっとも 300KB というサイズ自体が、21 世紀の今現在においては全然大したことのない大きさではあると思うが、Chrome/Opera/Firefox のそれぞれのエクステンションを並べたときに Firefox の xpi だけ異常に巨大なのはやはり不自然だ。
しかし minify すると動かないのだから背に腹は変えられない。300KB のままで公開することにした。
調べてみるとそもそも SDK 自体が jetpack と呼ばれていたものを一旦キャンセルした後作り直したものだったり、api の仕様がプロセス分離モデルを前提としていたのにプロセス分離モデル自体がキャンセルされたので無駄に複雑なものになってしまったり、デバッガが使えなかったり、IE の唯一のカウンターパートという立ち位置だったころは Firefox って超クールでナウいブラウザなイメージだったのだけど、最近はなんだか迷走続きでかなりイケてないなーと思いました。Firefox がんばれ超がんばれ。