スライド

「既存ウィンドウでタブを開き、自身を閉じる」処理は、Navigatorを一つしか開かない「シングルウィンドウモード」や、ユーザーが望んだ場合以外はウィンドウを開かないといった機能を実装するのにも使っています。

XULウィンドウでは、そのウィンドウ自身のwindow.openなどいくつかのプロパティを手がかりにして、そのウィンドウが「他のXULウィンドウ」「Webページ」「ネイティブアプリ」のいずれから開かれたかを知ることができます。タブブラウザ拡張は全てのNavigatorウィンドウで、起動時にこれらの情報を見てそのウィンドウをそのまま開くか途中で破棄するか判断する処理を行います。

このような「複数のウィンドウを開くかどうかの制御」は、本来ならばウィンドウを開くメッセージをMozillaのコア部分が受け取った段階、つまりウィンドウが開かれる前の段階で処理を行うべきなのですが、XULのレイヤからはこの処理に介入することができません。そこで、このような面倒くさい・ややこしい方法をとっているという次第です。

おわりに

私自身、このタブブラウザ拡張の前身にあたる「コンテキストメニュー拡張」を作るまではオブジェクト指向の「オ」の字も分からなかったというようなド素人ですので、このプログラムは(「も」?)「既に世にある機能をXULで再現する」という「模倣」「練習」「デモンストレーション」が中心となってしまっています。ほとんど(というか全部?)がIEベースのタブブラウザやOperaなどの機能をそのまま引っぱってきたもので、プログラムがXULで作られているという点を除けば、独自性は皆無に近いです。

しかしせっかくのMozilla dot Party 4.0、せっかくのXULコンテストですから、自分も参加してみたい。そういうわけで、応募してみることにしました。このような内容で満足して頂けるかどうか大いに疑問ですが、せめてイベントのにぎやかしにでもなれれば幸いです。

それから。

今回紹介したいくつかの機能はどれも、当初は自分自身「実現できないからやめておこう」と避けていた機能で、ユーザーの皆さん方からの要望を受けて初めて実装に着手しました。皆さんの声がなければこのアプリはここまで成長しなかったでしょうし、私自身も、ここまでできるようにはならなかったでしょう。この場を借りて、応援して下さった皆さんに御礼申し上げます。

ありがとうございます、Thanks a lot!

2003/4/18 Piro(下田洋志)