Tab Killer タブキラーの紹介

Mozilla.Party.jp 5.0のXULコンテスト用に作成した、タブキラーの資料です。

コンセプト

Mozillaを「非タブブラウザ化」する。

概要

この拡張機能は、Mozilla 0.9.5以降で実装されたタブブラウジング機能を無効化して、従来どおりのSDI(シングルドキュメント・インターフェース)のWebブラウザとしてMozilla SeamonkeyおよびFirefoxを機能させるというものです。ですから、「拡張機能」というよりは、「拡張」の対義語で「萎縮機能」と呼ぶのが適当かもしれません。(ここ、笑うところですよ)

実装の方法

タブ関連の機能の無効化

まずは名称にもなっている方の機能からご説明します。

Mozillaのタブブラウジング機能は、タブ関係の基本機能を全て「tabbrowserウィジェット」という極小のXULアプリケーションで実装しておき、他の部分はそのメソッドを利用するのみという形で実現されています。そして、タブを開く・タブを閉じるというタブブラウジングの中枢とも言える機能は、このtabbrowserウィジェットのaddTab()およびremoveTab()というたった二つのメソッドでまかなわれています。(※詳しくはタブブラウザ拡張の解説をご覧ください)

この拡張機能は、これら二つのメソッドと「タブを表示する」処理の3つをピンポイントで上書きすることにより、タブの追加・削除などの処理を一切行えなくします。

ちなみに、タブを開く要求があった場合、要求を無視するだけでなく、タブの代わりに新しいウィンドウを開くようにも設定できます。

メニュー項目の隠蔽

タブ関連の機能を無効化しただけだと、メニューにはまだ「リンクをタブで開く」などの項目が残ったままにですので、これらはCSSのdisplay: noneで隠しておく必要があります。この拡張機能では、項目にID名がある場合はそれを使い、無い場合に対しては属性セレクタでラベル名などを使って特定しています。セレクタの記述には後述する「非タブ化計画」で公開されていた内容を一部参考にしています。

おわりに

この拡張機能を制作するに至ったきっかけは、中村友次郎氏の「非タブ化計画」を目にしたことです。「どこを見回してもタブの便利な使い方の解説ばかりで、拡張機能もタブを使うことが前提のものばかりだ」という氏の言葉を見て、その不満はもっともなことだと思いました。

Mozillaのタブブラウジング機能は初期状態では不完全と言わざるを得ず、私はここで「完全なタブブラウジング機能を実現する」ことを目標に「タブブラウザ拡張」という拡張機能を制作する道を選びました。しかし、逆に「こんな中途半端なタブブラウジング機能なら無い方がマシだ」と考える人がいてもおかしくはありませんし、そもそもタブインターフェースよりもOS標準のウィンドウインターフェースの方が使いやすいという人もいるでしょう。この拡張機能がそういう人のための解決策となれたら幸いです。

なお、そのようなもっともな理由以外にも、「タブブラウザ拡張」と「非タブブラウザ化拡張」の二つを同時に制作・公開すれば何かの話のネタになるのではないか、という目論見もありました。どこかの風呂用洗剤あたりを想起させるようなアレなネーミングにもそれが顕れていると思います。私自身は結構この名前を気に入っているのですが、皆さんはどう思われるでしょうか?