CD-ROMに後から全文検索機能をつける難しさ(2)

CD-ROMに後から全文検索機能をつけるには、専用アプリケーションを作る必要があるという話の続き。その専用アプリケーションに真正面から取り組むとどのようなことになるか、自分の経験も交えて書き連ねていきたい。

まずは、本当に本格的なアプリケーションを作成する場合の説明から。HTMLアプリケーションでごまかす手法についてはまた後で。

自分が初めてNamazuに取り組んだ際、メインの開発環境はBorland C++ Builderだった。が、別にDelphiでも、Visual Basicでも、はたまたMFCでもC#.NETでも、言語上の若干の違いはあるが、やることは基本的に同じだっただろう。
アプリケーションのメインウインドウを作って、そこにIEコンポーネント(WebBrowserコンポーネントともいう)を貼り付け、CD-ROMから読み込んだHTMLをそこに表示させるのだ。これなら、Internet Explorerとまったく同じ見た目を再現できる。
そして、全文検索の処理だが、これにはいくつかのパターンが考えられる。

1.IEコンポーネントの外に検索専用の窓を設ける
Googleツールバーのようなものを想像してほしい。ツールバー上に検索窓があり、そこに文字を入力して「検索」ボタンをクリックしたなら、IEコンポーネント上に検索結果が表示されるようにするのだ。Namazuからの出力は基本的にHTMLなので、そのまま読み込むだけでいい。
これだと、元のHTMLに一切手をつけずに済むという利点がある。
が、このやり方だと、IEコンポーネント上で「Backspace」キーを押した際に、思わぬページにナビゲートされてしまうというやっかいな問題が生じる。
プログラムの組み方にもよるが、基本的にNamazuから読み込んだ画面は、IEコンポーネント上では1画面として履歴に残らないのだ。なので、Backspaceキーを押すと、「検索の際に表示されていた画面」よりももう一つ前の画面まで戻ってしまう。「検索の際に表示されていた画面」へはどうやっても戻れないのだ。
これでは使いやすいアプリケーションとはいえない。

2.IEコンポーネントの中に検索窓を設ける
Googleのホームページのような検索窓を、直接IEコンポーネントの中に埋め込んでしまうという手もある。
IEコンポーネントは、ページ遷移のたびに「BeforeNavigate2」というイベントを発生させるので、これをプログラム上で監視し、「検索ボタンを押した」ために画面遷移する場合は、画面の遷移を中止させ(BeforNavigate2を適切に処理すればこれは可能)、Namazuからの出力を代わりにIEコンポーネントに表示させるのだ。
元のHTMLを改造する必要はあるが、ユーザーにとっては、こちらのほうが馴染みやすいインターフェースといえるだろう。
ただし、このやり方でも、Backspaceキーの問題は残る。
また、Namazuなら問題にはならないが、他のCGIに応用しようとしても、ファイルから読み出したHTMLに対しては、FORMからPOSTすることができない(GETしかできない)という制約が加わる点にも注意しなければならない。

3.IEコンポーネントの外に検索結果表示エリアを設ける
私がかつて採用したのはこのやり方だった。
単に検索窓をツールバーに表示するだけでなく、検索結果までもIEコンポーネントとは別のウインドウに表示させるのだ。こうすれば、IEコンポーネント上には「検索の際に表示されていた画面」が残っているので、そもそも1画面戻るためにBackspaceキーを押す必要がなくなる。
元のHTMLに手を加える必要もない。
ただし、画面全体がごちゃごちゃしてしまい、ユーザーにとってもなじみにくい、いかにも専用アプリケーションといった感じの見た目になってしまうという欠点があった。
「取り扱い説明書がないと使えない」アプリケーションになってしまうのだ。

4.アプリケーションにHTTPサーバーを組み込む
アプリケーションを起動したら、HTTPサーバーも起動するようにして、IEコンポーネントと自ホストとでHTTP通信させてしまうという手もあるにはある。実際にテストしたところ、意外と使えた。
ただし、セキュリティ上の問題があるので、現実的ではない。

と、以上4つくらいが王道だろうと思われる。
そして、案3が一番現実的だろう。
今の自分なら、WTLを使って、案3の方針で行く可能性が一番高い。

そして、2番目に考えられるのは、上の4案とはやや趣が異なるが、HTMLアプリケーションを使う方法である。
いつでも使えるわけではないが、一定の条件を満たすならば、かなり使えるので、また日を改めて紹介したい。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック