あどけない話

インターネットに関する技術的な話など

Firemacs 3.7

Firefox で新しいフレームを開くと、そのフレームでは Firemacs 3.6 が動かないというレポートを 3 つ頂きました。忙しかったのと、Firefox 3.5 では再現しないのとで、ほおっておいたのですが、昨日時間ができたので調べてみました。

Firefox 2 と 3 では内部の構造が異なる部分があります。そこで、いわゆるアダプターパターンが書いてあって、起動時に Firefox のバージョンを判断し、どちらのアダプターを使うか決めています。

Firemacs 3.5 までは、navigator.userAgent を見て Firefox のバージョンを判断していました。Firefox なら当然 Firefox という文字列があると思いきや、Iceweasel や BonEcho など文字列を変えているパッケージがあって、その都度追加するのが嫌になってきました。また、ついには navigator.userAgent を IE に変更している人からも動かないと言われて、この方法を諦めました。

そこで Firemacs 3.6 では、gFindBar.onFindCommand という関数があれば Firefox 3、なければ 2 と判断することにしました。このコードは、Firefox 3.5 ではうまく動きます。また、Firefox 3.0 でも起動時のフレームではうまく動きます。しかし、起動後に新しく開いたフレームでは、見えない形でなんらかのエラーを起こしているらしく、おかしくなります。

Firefox 3.5 ではうまく動くことから判断して、これは Firefox 3.0 のバグだと思います。しょうがないので、navigator.userAgent を調べる昔のコードに戻しました。ただし、知らない文字列の場合はすべて Firefox 3 だと決め打ちました。

Firefox 2 で navigator.userAgent を変更している場合はうまく行きませんが、そういう人はサポートしないと割り切ります。

というわけで、Firemacs 3.7 を提出しました。380 個の承認待ちがあるようなので、いつのことになるのやら。。。