FirefoxにはFind As You Type(以下、FAYT)という便利なページ内検索機能が付いています。 Firefox1.0では、まだこの機能は未完成で、ASCII文字以外が入力できないという問題を抱えていました。 Firefox1.5ではこれが改善され、Firefoxのナビゲーションの利便性を大きく向上させています。
しかし、FAYTはあまり知られていない機能かもしれません。 そこで、ここではこの機能の使い方から仕様まで詳細に解説します。 もし、あなたがなんらかのソフトウェアの開発者なら、 さらに、そのソフトウェアに検索機能があるなら、 是非これを模倣した機能をあなたのソフトウェアに実装することをお勧めします。
FAYTとは、Firefoxに搭載されている、Webページ内のテキスト、 またはリンクを検索する、検索機能です。
通常の検索機能はCtrl+Fで、Find Toolbar(図2.1)を表示して、 ここのエディタに検索したい文字を入力し、検索を行います。しかし、これはFAYTではありません。 通常の検索は、文字列をページ内から検索するだけですが、FAYTはそれだけでは無いのです。

図2.1: Find Toolbar
FAYTで検索を行うと、リンクを発見し、それに対してなんらかのアクションを行うことが可能なのです。
FAYTには二つのモードがあります。ひとつはテキスト全体を検索するテキストモード、 リンク内のテキストのみを検索するリンクモードです。 これらのモード名はオフィシャルなものではありません。 私が、ここでの解説の便宜上付けたものであることに注意しください。
操作はWindows版を元に記述しています。
デフォルト設定のFirefoxの場合、表示されたWebページにフォーカスがある時 (ただし、ページ内のフォームのエディタ上にフォーカスがある場合を除きます) に、/を押すとテキストモード、 'を押すとリンクモードでFAYTが始まります。
この時に自動的にFind Toolbarが表示され、フォーカスがFind Toolbarのエディタに移動します。
もし、意図に反してFAYTが開始されない場合(Find Toolbarが表示されない場合)、 IMEがオンになっている可能性があります。半角/全角キーからIMEを終了し、 再度、/か'を入力してください。
続いて、検索したい文字列を入力します。
一文字入力するたびに、自動的に検索されます。 検索対象は現在のタブに表示されている全てのWebページです。 複数のフレームが表示されている場合、全てのフレームが検索対象となります。
文字列を発見すると、その部分が緑色で選択されます。また、見つかった文字列の一部がリンク内に有る場合、 そのリンクにもフォーカスがセットされます。(図3.1)

図3.1:visitを検索して、visitを含むリンクを発見した状態
検索中に一定時間、入力が無かった場合、Find Toolbarが自動的に閉じられてFAYTが強制終了します。 注意してください。(IMEで日本語入力中は、閉じられることが無いようになっていますので、変換に時間がかかっても焦る必要はありません。)
ページの内容によっては、当然、一つめに発見されたものが、あなたの求めるものでは無いかもしれません。 そこで、ページ下部の方向に再検索したい場合、F3または、Ctrl+Gを入力すると、次の対象が検索されます。
もし、その方向に検索対象が無い場合、ページの最上端から再度検索されます。 つまり、上方向にスクロールすることもあります。
また、逆に、ページ上部方向に再検索したい場合、Shift+再検索で検索できます。 つまり、Shift+F3か、Ctrl+Shift+Gで再検索できます。
検索した結果、リンクを発見している場合、次の操作が可能になります。
つまり、リンクを発見している状態でEnterキーを押すと、そのタブでリンク先を読み込みに行きます。 Ctrl+Enterならリンク先を新しいタブに読み込みます。 Shift+Enterなら、リンク先を新しいウインドウに読み込みます。 Alt+Enterなら、リンク先を保存します。 また、Tabキーを押すと、発見したリンクの次のリンクにフォーカスが移動し、 Shift+Tabなら、ひとつ手前のリンクにフォーカスが移動します。
要するに、FAYTではない、普段の状態で、リンクにフォーカスが当たっている時と同じ操作を受け付けます。
これらの操作を行った場合、FAYTはその時点で終了し、Find Toolbarは閉じられます。
一定時間入力が無かった場合、自動的にFAYTは終了しますが、Escキーを押すことでただちに中断できます。
このセクションは開発者向けの資料です。一般ユーザは読む必要はありません。
このセクションは小まめにアップデートされるかもしれませんが、 常に最新の情報だとは信用しないでください。 Firefoxへのハックに利用する場合、実際にコードで確認を行ってください。
以下、FAYT設計に関するメモ書き。
FAYTのモジュールがブラウザのコンテンツウインドウのイベントをフックし、 /もしくは'キーが入力されたらFAYTを開始します。 FAYTの開始処理は、以下のようになります。
FAYTの終了は以下のパターンがあります。
これらの場合に、以下のFAYT終了処理が行われます。
リンクを発見した場合、そのリンクに擬似フォーカス(pseudo focus)を与えます。 リンクが実際のフォーカスを持つわけではありません。 フォーカスはFind Toolbarのエディタが保持し続けます。
擬似フォーカスを表現するには、フォーカスを持っているかのように見せる偽装表示処理と、 Find Toolbarが受け取ったイベントを擬似フォーカスを持つリンクで同じイベントを生成してやる必要があります。
リンクを発見した時の偽装表示処理は以下のようになります。
1px dotted invert"に設定する発見したリンクがある状態でEnterキーが押された場合、 そのイベントオブジェクトと同内容のイベントオブジェクトを生成して、リンクで新たにイベントを発生させます。 そして、元のイベントオブジェクトには処理の中断を指示します。
発見したリンクが無い状態でEnterキーが押された場合、何もしません。
発見したリンクがある状態でTabキー、もしくはShift+Tabキーが押された場合、 フォーカスの移動処理を指示し、イベントオブジェクトには処理の中断を指示します。
発見したリンクが無い状態でTabキー、もしくはShift+Tabキーが押された場合、 何もしません。
FAYTが開始された時、何らかの文字入力、再検索があった場合、タイマーをリセットします。
IMEによる未確定文字列の入力が開始された時、タイマーを停止します。 これは、未確定文字列入力中、漢字への変換中にFAYTが終了してしまうことを防止するためです。 そして、文字列が確定されて、入力イベントが発生したら、タイマーを再起動し、リセットします。