Web ユーザーから入力を受け取る1,001通りの方法
Michael Edwards
Developer Technology Evangelist
Microsoft Corporation
October 21, 1997 日本語版最終更新日 1999 年 4 月 25 日
目次
はじめに
HTMLフォーム
クライアント側の話
サーバー側の話
ユーザー情報の保存
クッキー: お菓子以上の働き
クッキーを使いたくない場合
Profile Assistant
ページ ヒットのロギング
Dynamic HTMLによる魅力的なページの作成
新しい属性
新しいエレメント
拡張されたドキュメント オブジェクト モデル
判断を下す前に……
Visual InterDev、FrontPage 98ベータ、およびその他のツール
要約
はじめに
Web開発テクノロジーの数は、新しいWebホストの数と同じほど急速に増えつつあるように思われます。今日、Webページ上でユーザーからの入力を受け取る方法は、HTMLフォーム以外にも多数存在します。これは悪いことではありません。というのも、開発者はユーザーがエディット フィールドに入力する以外の情報も多数必要としているからです。この記事では、ユーザーからの入力を受け取るためのいくつかのユーザー入力テクノロジーについて概要を述べます。各テクノロジーについて、それがどのように動作するのか、それを使うためにどのようなオーサリング スキルとコーディング スキルが必要なのか、どのターゲット プラットフォームで動作するのかを簡単に説明し、関連情報、サンプル、および記事へのリンクを豊富に紹介します。
HTMLフォーム
HTMLに関してはさまざまな本が出ていますが(私が前回、行きつけの本屋に行ったときには、あらゆるサイズと色の数十冊の本が棚を埋めつくしていました)、どの本もHTMLフォームについて少なくとも1章は割いています。しかし、本を買うのにはお金がかかります。そこで、ここではまず無料の20分のツアーにご案内し、その後に、より高度なユーザー入力方法論を(やはり無料で)紹介することにしましょう。
クライアント側の話
<FORM>エレメントを使うと、静的な、および編集可能なテキスト フィールド、ドロップダウン メニュー、ボタン、チェック ボックス、ラジオ ボックスをWebページに挿入することができます。フォームから得られた情報は(HTTPプロトコルを通して)サーバーに送られ、サーバー上で処理されます。HTMLフォームは、ユーザーからテキスト ベースの情報と選択項目を受け取るのに便利です。たとえば、HTMLフォームを使ってユーザーからパラメータを受け取り、サーバー サイドのデータベースにクエリーをサブミットして、クエリーの結果をクライアントのマシン上に表示するというようなことができます。あるいは、複数のHTMLフォームのセットとして作成したデータ入力パッケージを使って、サーバー サイドのデータベースに含まれているレコードを更新することも可能です。
これまでに何度も見たはずの簡単な例を取り上げてみましょう。XML-Devのアーカイブ では、XML-Dev電子メール リストのブラウズと検索を行うことができます。電子メール リストを知らない方のために説明すると、これは共通の関心を持っている人々のリストに対するメールの送受信を簡単に行うための手段です。このサイトには、数か月前の設立以来、XML-Devメーリング リストに対して行われたすべての投稿がアーカイブされています。すべての投稿の内容が、ある公共心あふれる人の手によって検索可能な状態にされています。その方法については少し後に説明することにして、まずこの簡単なフォームを表示するコードを見てみましょう。
<form method=GET action="/cgi-bin/wwwwais">
Search for: <input type=text name="keywords" size=40>
<input type=hidden name="source"
value="/usr/local/wwwindex/sources/xml-dev/index.src">
<input type=submit value=" Search ">
</form>
フォームのデータとコードが<FORM>エレメントの中に完全に収まっていることに注目してください。先に子エレメントの<INPUT>について説明し、その後で<FORM>エレメントの属性を取り上げます。
最初の<INPUT>エレメントは、ユーザーが検索キーワードを入力するためのテキスト ボックスを挿入します。テキスト ボックスはTYPE属性(type=text)によって指定されています。この属性に対しては、他にもチェック ボックス(type=checkbox)、ラジオ ボタン(type=radio)、およびプッシュ ボタン(type=button)を挿入するための値が指定できます。<INPUT>のNAME属性とVALUE属性は、そのエレメントに関連付けられたデータの変数名と初期値を指定します。たとえば、テキスト ボックスの値はテキスト ボックスに入力されたテキストであり、この例ではVALUE属性を指定していないので、Keywordsテキスト ボックスは初期状態では空になっています。フォームに入力されたデータは、フォーム内の個々の<INPUT>エレメントについて、名前=値のペアの文字列を使ってサーバーに送信されます。たとえば、このテキスト ボックスに"CDF"と入力すると、"keywords=cdf"という文字列がサーバーに送られます。
2番目の<INPUT>エレメントはTYPE=HIDDENを使用しています。非表示として指定された<INPUT>エレメントは、ユーザーに対して表示されません。非表示の<INPUT>エレメントは、ユーザーが知る必要のない(また変更できない)名前=値の文字列をサーバーに送信します。この例のエレメントは、サーバーに対して"source=/usr/local/wwwindex/sources/xml-dev/index.src"という文字列を送信します。
最後の<INPUT>エレメントは、特殊な種類のボタンであるTYPE=SUBMITを使用しています。Submitボタンを押すと何が起こるかわかりますか? ブラウザが、現在の名前=値の文字列をすべて収集し、サーバーに対して送信するのです。では、文字列はサーバーにどのように送られ、その後には何が起こるのでしょうか? ここで、1行目のコードの<FORM>タグに目を向ける必要が生じます。
この<FORM>エレメントには2つの属性があります。METHOD属性は、サーバー サイド プログラムへの入力として、2つのHTTPプロトコルのうちのどちらを使って名前=値の文字列を送信するかを指定します。サーバー サイド プログラムはACTION属性の部分的なURLによって指定されます。使用できるHTTPプロトコルはGETとPOSTの2つです。ここでは、POSTプロトコルは宿題にしておいて、説明が簡単なGETプロトコルだけを扱うことにします(古いブラウザでのGETプロトコルの使用には、セキュリティ上の問題がいくつかあります)。GETプロトコルを使用すると、ブラウザはすべての名前=値の文字列を、サーバー サイド プログラムのURLの末尾に連結します。たとえば、"CDF"を検索すると、ブラウザは次のURLに移ります。
http://www.lists.ic.ac.uk/cgi-bin/wwwwais?keywords=CDF&source=%2Fusr%2Flocal%2Fwwwindex%2Fsources%2Fxml-dev%2Findex.src
解読しやすいように、実際のURLは赤色で、フォーム データは緑色で表示しています。実際のURLとフォーム データは"?"の文字で区切られており、パスの区切り文字がASCII形式(黒いテキストで表示しています)に変換されている点に注意してください。この文字列がWebサーバーに到着したとき、"?"の文字は、URLの中の"wwwais"の部分は実行すべきプログラムであり、"?"の後に続く文字列を渡さなければならないということを指示しています。サーバーはプログラム(ゲートウェイ プログラムと呼ばれます)とCommon Gateway Interface (CGI)を使って通信し、プログラムは標準入力を通してブラウザからパラメータを取得し、標準出力に書き込むことでブラウザにデータを返送します。では、標準出力には何が書き込まれるのでしょうか? もちろんHTMLです。要約すると、サーバー サイド プログラムは、クライアントから送信された情報を使ってWebページを動的に生成し、クライアントに送り返します。つまり、上記のコードは、ある意味で仮想的なURLであると考えることができます。
HTMLフォームを使えば、クライアント側のコードは書きやすく、理解しやすくなります。また、HTMLフォームは高度なクロス ブラウザの互換性を備えています。HTMLフォームは、純粋なテキスト ベースのブラウザも含めて、ほぼすべてのブラウザが表示できます。また、MicrosoftとNetscapeの両方が、さまざまなブラウザ固有のエクステンション(ボタンの<INPUT>タイプなど)をサポートしています。
目次に戻る
サーバー側の話
最近まで、ほとんどのHTTPサーバーはUNIXマシン上で動作していたので、ゲートウェイ プログラムを書く人はかなり熟練した(そしておそらくは怖いもの知らずの)プログラマに限定されていました。しかし、三度の食事にコードを食べるような人であっても、CGIのアプローチには1つの問題がありました。Webサーバーは、ユーザー要求があるたびに、独立したプログラムを実行しなければならなかったのです。これらのプロセスはサーバー上で同時実行されるので、ポピュラーなサイトではパフォーマンスが大きく低下します。サーバー上でのユーザー入力の処理には、これよりも良い方法があります。今日のWebサーバーは、サーバー自身と同じプロセス内で動作し、プログラミング作業を簡単にしてくれる追加機能を持ったプログラム可能なエクステンションを備えているのです。
Windows NTとInternet Information Server (IIS)エクステンションの組み合わせには、インターネット サーバーAPI(ISAPI)と呼ばれるアプリケーション プログラミング インターフェイスが含まれています。Win32®のデベロッパーは、このインターフェイスと直接に対話するコードを作成して、CGIに可能な事柄にとどまらず、さまざまな作業を行わせることができます。ISAPIを使うと、フォーム データを取得し、クライアントにHTMLを返送することができます。さらに、C/C++、Java、Visual Basic®、さらにはActive Server Pagesによるスクリプティングなど、Windows® DLLとのインターフェイスを持てる任意の言語でサーバー サイドのコードが作成できます。HTMLフォームは、ゲートウェイ プログラムと同じようにこれらのアプリケーションにアクセスし(submitのTYPEが割り当てられた<INPUT>エレメントのACTION属性を通して行います)、すべてのWin32コードがサーバー上で実行されるので、クロス ブラウザ的な高度なソリューションが実現できます。ISAPIにより、オーダー入力フォームやカスタム カタログなどのデータベース アプリケーションの作成が非常に簡単になります。さらに、すべてのWin32 APIと、Win32アプリケーションの作成に利用できる幅広いプログラミング ツールを使うことができます。
Microsoft Visual C++® Microsoft Foundation Classes (MFC)は、1年以上前にMFC version 4.1がリリースされた時点でISAPIのサポートを開始しました。いくつかのMFCクラスが2つのタイプのサーバー オブジェクトの作成をサポートしています。CGIの効率的な代替物として使用できるサーバー エクステンション(またはDLLベースのアプリケーション)と、インターネット サーバーとの間で送受信されるメッセージをスクリーニングするためのサーバー ベースのメカニズムであるフィルタです。たとえば、MFCのChttpServerクラスにはクライアントからフォーム データを受信するためのメソッドが含まれており、ChtmlStreamクラスはクライアントにHTMLストリームを返送するために使用されます。
IIS互換のWebサーバー(Windows NT Server 、FrontPage® Server Extensions 、およびWindows 95 Peer Web Services )が提供しているもう1つのアプローチは、HTMLとスクリプティングの経験がある人々に特に魅力的なものです。これはMicrosoft Active Server Pages(ASP)を使う方法です。ASPは、スクリプティング可能なオブジェクトのセットをHTMLと統合するためのサーバー サイド スクリプティング環境なので、デベロッパーがWebページの作成に関して持っている知識を有効に活用することができます。ブラウザがWebサーバーに対して.ASPファイルを要求すると、ASPは要求されたファイルを上から下に向けて解析し、すべてのコマンドを実行し、結果として得られたHTMLページをブラウザに送信します。このように、ASPもサーバー上でHTMLフォームを処理するための優れたクロス ブラウザ的なソリューションであると言えます。
Webユーザーから情報を取得するために使われる中心的な組み込みASPオブジェクトはRequestオブジェクトです。Requestオブジェクトでは、HTMLフォーム上でサブミットされたデータを含めて、5種類の情報のコレクションにアクセスすることができます。以下のASPリンクには実際のサンプルが含まれています。
目次に戻る
ユーザー情報の保存
Webページは、クライアントに関して入手した情報を保存しなければならないことがあります。この種の情報を保存することで、ユーザーのプリファレンスやその他の情報を残しておき、ユーザーが次にサイトを訪れたときに、より良いサービスを提供することができます。また、デザインを正常に動作させるために、情報を一時的または永久的に保存する必要がある場合もあります。たとえば、これまでのページで入手した情報に基づいて異なるページを表示する、マルチページのフォームを作成する場合などです。これにはいくつかの方法がありますが、まずは、私が知っている唯一のクロス ブラウザ的な方法から説明しましょう。
クッキー: お菓子以上の働き
Webの世界では、クッキーはクライアント マシン上に情報(ブラウザの設定、最近訪れたWebサイト、クラス パスなど)を保存するための手段として使われます。クッキーに関しては議論があります。一部のユーザーは、クッキーは重大なセキュリティ ホールであり、クライアント マシン上の情報に悪意あるプログラムからのアクセスを許してしまうと考えています。彼らがこう考えるのは、一部にはクッキーの不透明性が原因です。ユーザーは、サイトがマシン上にクッキーを格納したこと、クッキーにどのような情報が含まれているのか、そして(最も重要なことに)クッキーの中の情報がどのように使われるのかを知ることができません。このため、クッキーはユーザーのプライバシーを侵しているように見えるのです。この懸念に対応するために、調整可能なセキュリティ設定(Internet Explorer 4.0の[表示]メニューの[インターネット オプション]コマンドの[詳細設定]タブがその一例です)によって、クッキーを無効にしたり、クッキーを受け付ける前にプロンプトを表示するというような方法が取られます。クッキーを使用したい場合には、一部のユーザーがこれをプライバシーの侵害だと見なしていることを念頭に置き、クッキーを受け付けないクライアントのために何らかのバックアップ プランを用意しておいてください。
Internet Explorer 4.0では、クッキーはDocumentオブジェクトのプロパティであり、スクリプティングによってアクセスすることができます。スクリプティングを通して、クッキーに有効期限を与えたり、サーバー ドメインの中の他のページとの共有を可能にしたり、クッキー情報へのアクセスをセキュアな環境からに限定することができます。また、クッキーがクライアント上で有効になっているか、無効になっているかを調べることもできます。
クッキーはHTTP version 1.0のリクエスト ヘッダーを使ってクライアント上に保存できますが、これは複雑なトピックなのでここでは扱いません。関連情報のセクションにリンクを用意するだけにしておきます。
関連情報
目次に戻る
クッキーを使いたくない場合
クッキーは、クライアント上で永続的なデータを保持するための、(私の知る限り)唯一のクロス プラットフォームのテクニックです。しかし、Internet Explorer 4.0プラットフォーム上だけで動作するソリューションでよいのであれば、クライアント上に状態などのデータを保存するための手段が、他にもいくつかあります。
第1の方法はIPersistHistoryインターフェイスです。このインターフェイスは、特定のページに関する状態情報を、後に取り出せるように保存するためのものです。Internet Client SDKには、このインターフェイスを使用するサンプルのActive Template Library (ATL) ActiveX(TM)コントロールが付属しています。これはPercyという名前で、サンプル リストからアクセスすることができます。
ページに関する状態情報を、ドメインの中の他のページからアクセスできる形で保存する必要がある場合には、IDiscardableBrowserPropertyインターフェイスを検討してください。現在われわれは、このインターフェイスを扱ったサンプル コード付きの詳細記事を準備しているところなので、適宜このサイトをチェックしてください。
ローカルまたはリモートのデータベースを使用している場合には、ソース上のデータの更新をサポートしているデータ ソース オブジェクト(DSO)をWebページに置くという方法もあります。ページ上のスクリプトを、データベースのレコードを表示しているフィールドに連結しておけば、ユーザーが情報を更新したときに、更新情報をサーバーに伝えることができます。もちろん、DSOをコントロールやHTMLエレメントにバインドしなくても、DSOメカニズムをWebページ上のデータの保存に利用することができます。このためにはコーディングをある程度は行う必要がありますが、DSOはWebページからサーバー上のデータを変更するための手段であるわけで、その目的だけのDSOを作ることも可能なのです。DSOはサーバー データをWebページ上のビジュアルなエレメントにバインドしなければならないという決まりはないのであって、Webページに関する永続的な情報をサーバーに保存するためにのみ使っても問題はありません。この方法は、他のすべてのWebページからアクセスできるデータを永続化することができ、クライアントで深刻な障害が起こっても生き残れる永続的データを作る唯一の方式でもあります。
目次に戻る
Profile Assistant
Internet Explorer 4.0のProfile Assistantは、Web上でのプライバシーとユーザー プリファレンスを扱うW3Cのプロジェクト、Platform for Privacy Preferences (P3P) によって可能になるタイプのプライバシーの初めてのインプリメンテーションです。Profile Assistantにより、ユーザーのプライバシーの権利を守りながら、ユーザー プロファイルをWebクライアントとサーバーの間で交換することができます。これはクッキーの最も大きな問題の1つを解決します。ユーザーは、自分自身に関する情報がWebサイトでどのように使われるかを正確に知りたい(またコントロールしたい)と考えています。Profile Assistantは、ユーザーが明示的に指定した権限により、HTMLフォーム フィールドに、Windowsレジストリに格納されたユーザー プロファイルからの入力を行います。また、新たにフォームに入力された情報をレジストリに保存して、ユーザーが同じものを再び入力しなくて済むようにすることもできます。私もそうですが、同じことを何度も繰り返して入力するのに飽き飽きしているユーザーは、このInternet Explorer 4.0の新機能を使っているサイトを歓迎するでしょう。Profile Assistantはユーザーの指定によって無効にすることができます。
関連情報
- MSDN Online には、Profile Assistant の利用と作成に関する詳しい記事があります。
目次に戻る
ページ ヒットのロギング
Webサイトのページ ヒットを追跡すべき理由はいくつもあります。アクティブ チャンネルを発行している場合には、Channel Definition Format (CDF)ファイルで指定しているページのページ ヒットを記録するように指示することができます。C/C++デベロッパーはHit Logging APIを使って、ブラウジング コンテキスト(通常のブラウザ ウィンドウ、シアター ビュー、Active Desktopアイテム、またはアクティブ スクリーン セーバー)、ページがキャッシュから表示されたかどうか、表示された日付と時刻、および文字列にカプセル化できる任意のカスタム情報といった情報を記録することができます。
関連情報
目次に戻る
Dynamic HTMLによる魅力的なページの作成
Dynamic HTMLは、Internet Explorer 4.0でWebページのレンダリングとコンテントを動的に変更できる先進的な機能のセットであり、よりインタラクティブで魅力的なページを作成できる新しい機能がいくつも用意されています。幸いなことに、これらの機能の多くは、現在、W3Cのワーキング グループが作業を進めているHTML 4.0のドキュメント オブジェクト モデル(DOM)とカスケーディング スタイル シート(CSS)の新機能に基づいた、標準ベースのインプリメンテーションです(標準策定プロセスの詳細については、Nancy Cluts による標準化に関する文書を参照してください)。つまり、これらの機能はあらゆるInternet Explorer 4.0プラットフォーム上でサポートされるものと期待することができます。また、Netscapeは自社のブラウザ プロダクトでW3C標準をサポート することを約束しているので、これらの新機能をクロス ブラウザ的に活用することがいっそう簡単になります。
新しい属性
HTML 4.0仕様は、いくつかの新しいイベント属性をHTMLエレメントに適用します。新しいイベントの大部分は組み込みイベントなので反復可能ですが、そうでないものは1回しかトリガされません。すべてのイベントがすべてのエレメントに適用されるわけではないので、コーディングを行うときには最新版のHTMLリファレンスを手元に用意しておく必要があります(関連情報のセクションにポインタがあります)。これらの新しいイベント属性は、スクリプティングを通して、ユーザーがWebページ上の個々のタグと行う対話をさらに拡張することができます。つまり、いままでよりも多くの、ユーザーが開始するイベントに応答できるようになったのです。
HTML 4.0のフォームは、キーボード アクセラレータとコントロールのタブ オーダーを指定するACCESSKEY属性とTABINDEX属性が追加されており、ユーザーのためのナビゲーション モデルがさらに強化されています。さらに、フォームの読み取り専用状態と使用不可状態を指定するための新しい属性が追加されているので、ラジオ ボタンやチェック ボックスの設定に従って、フォームに複数の状態を反映させることができます。
HTML 4.0の新しいSTYLE属性は、スタイル情報の指定における柔軟性をさらに高めます。STYLE属性は任意のHTMLエレメントに適用できるので、オーサーはドキュメント内の個々のHTMLエレメントのレンダリングを直接に制御できます。HTML 4.0のさまざまな新しいユーザー インタラクション イベントと組み合わせることで、オーサーはこれまではプラグインやコントロールが必要だった処理を行うことができます。
目次に戻る
新しいエレメント
HTML 4.0は、スタイルを複数のエレメントで再利用するときに便利な新しいSTYLEエレメントを定めています。オーサーは、ドキュメント ヘッダーに任意の数のスタイル エレメントを追加し、ドキュメントのボディ全体に適用することができます。HTML 4.0では、特定のスタイル言語は定めておらず、TYPE属性はMultipurpose Internet Mail Extension (MIME)タイプの指定に使用されます。Internet Explorer 4.0はtext/cssタイプ、つまりカスケーディング スタイル シート(CSS)をサポートします。CSSでは、<STYLE>タグを使って、特定のエレメントのすべてのインスタンスに、特定のエレメント クラスに(CLASS属性によって識別)、またはエレメントの特定のインスタンスに(ID属性によって識別)適用されるスタイル情報を指定することができます。
CSSがカスケーディングと呼ばれるのは、ブラウザが複数のソースから適用されるスタイルに優先順位(「カスケーディングの順序」)の規則を適用するためです。たとえば、HTMLエレメントの特定のインスタンスのSTYLE属性を介して適用されたスタイルは、STYLEエレメントによってドキュメントのボディ全体に適用されたスタイルよりも優先されます。
<LABEL>エレメントの新しいFOR属性を使うと、<LABEL>を他のHTMLエレメントに関連付けることができます。これにより、入力フォーカスを<LABEL>から、それに関連付けられたエレメントに割り当てしなおすことができます。<LABEL>エレメントのFOR属性を別のエレメントのID値に割り当てると、ブラウザは関連付けられたエレメントにフォーカスを割り当てます。
目次に戻る
拡張されたドキュメント オブジェクト モデル
これらの新しいクールなエレメントと属性は、(ユーザーの操作性の改善という点で言えば)ドキュメント オブジェクト モデル(DOM)なしではそれほど役に立ちません。DOMとは、スクリプトがHTMLドキュメントのコンテントと構造に動的にアクセスし、更新するための標準的な手段です。Internet Explorer 3.xとNetscape Navigator 3.0は、W3Cが「レベル ゼロ」オブジェクト モデル機能と呼んでいるものを実現しています。現在、W3Cは、Internet Explorer 4.0でインプリメントされているドキュメント オブジェクト モデル仕様の「レベル1」と「レベル1以降」の仕様の改良を行っています。
新しいオブジェクト モデルは、いったいどこがそんなにクールなのでしょうか? この疑問に詳しく答えている記事がすでにたくさんあります(そのうちの一部を、後の関連情報のセクションで紹介します)。次に、ユーザー入力のクールさの概略を説明します。
レベル ゼロの機能制限は、基本的に次の2つの事柄に集約されます。
- イベント、プロパティ、メソッドの数が限られたオブジェクトが少数しか用意されていない。
- スクリプトは、ドキュメントのロード時に(表示の前に)しかHTMLコンテントを変更できない。
新しいオブジェクト モデルには、以下のような特徴があります。
- ページ上のすべてのエレメントと、そのすべての属性にアクセスすることができる。
- ページ上のHTMLコンテントをいつでも変更できる。
- すべてのエレメントについて、マウス、キーボード、およびその他のイベントを豊富に提供する。
新しいオブジェクト モデルはDynamic HTMLの「ダイナミック」の部分であり、ユーザーに対する応答を行うWebページを設計するためのInternet Explorer 4.0のコアの機能でもあります。
関連情報
Dynamic HTML
- Dynamic HTMLの入門的な概論から高度なハウツーまでを網羅したガイドが、Web Workshop の DHTML, HTML & CSS section セクションにあります。
W3Cのドキュメンテーション
MIME
スクリプティング
CSS
目次に戻る
判断を下す前に……
Internet Explorer 4.0には、上記の標準ベースの機能を拡張し、ユーザー入力を処理するためのクールな方法を提供している機能が他にもあります。
HTMLダイアログ
Webページに対してモーダルに働くダイアログ的な機能が2つあります(モーダルとは、ユーザーが「ダイアログ」を消すまでページが使用不可になるということです)。第1の機能ではHTMLファイルをモーダル ダイアログ ウィンドウにロードすることができます。第2の機能ではWin32スタイルのダイアログ ボックスを開き、スクリプトを通して入出力パラメータにアクセスすることができます。
第1のダイアログ機能は、windowオブジェクトのshowModalDialogメソッドです。表示するURLを指定するだけでなく、バリアントとして入力パラメータを渡すことができ、文字列、数値、またはその他の値を受け取ることができます。MSDN Online DHTML, HTML, & CSS エリアの DHTML References では、スクリプト作成のために、このメソッドについて文書があります。また、C++プログラマは、windowオブジェクトへのアクセスを提供するIHTMLWindow2 COMインターフェイスを利用することができます。
第2のダイアログ機能は、MSHTML.DLLにインプリメントされているShowHTMLDialog関数を使用します。この機能を使うためにはC++をいくらかは知っている必要がありますが、Internet Client SDKにはこの関数を動的にロードし、呼び出すために必要な小さなWin32コードが収録されています。これはサンプル リストの中のHTMLDlgサンプルに含まれています。また、このサンプルはスクリプトを使ってパラメータと戻り値をダイアログ ウィンドウと交換する方法も示しています。このサンプルを利用すれば、どんなにC++のスキルがある人でも、使い慣れたダイアログ エディタでダイアログ リソース ファイルを作成するという以上の作業は必要ありません。MSDN Online Web Workshop の Reusing Browser Technology エリアには、 HTML Dialog Boxes に関する記事も参考になります。
ユーザーに対してメッセージ ボックスを表示したいだけならば、MSDN Online Web Workshop DHTML References の中の windowオブジェクトのalertメソッドについて調べてみてください。
HTMLヘルプの表示
ヘルプ オーサーは、WinHelp APIがHTML Help APIに進化し、アプリケーションのヘルプと状況依存のヘルプにWeb風のインターフェイスが提供されたことに大きな喜びを感じることでしょう。ヘルプ ファイルのロードと表示を制御するWin32 APIに加えて、オーサーがヘルプのコンテントとナビゲーション エレメントを作成するのを支援するツールのセットが用意されています。
HTMLヘルプはWin32関数呼び出しを使って表示することができますが、WindowオブジェクトのshowHelpメソッドをスクリプトから使用して、WinHelpまたはHTMLヘルプで作成されたヘルプ ファイルを表示することも可能です。
詳細については、HTMLHelp APIを参照してください
。
HTMLクリップボード フォーマット
HTMLドキュメントからコピーした内容を貼り付けることができるコントロールやアプリケーションを開発している人は、HTMLフォーマットのクリップボード フォーマットをサポートすることを検討するといいでしょう。MSDN Online Web Workshop の Networking, Protocols, & Data Formats エリアにある HTML Clipboard Format ページには、コピーされたHTMLに対応するために、このクリップボード フォーマットに用意されているコンテキスト情報の説明があります。また、この記事にはInternet Explorer 4.0の動作をベースにして、このフォーマットを解析する方法を説明した例があります(Internet Explorer 4.0は、HTMLのクリップボード操作の正しい処理という問題を論じる際には、確実な基準となります)。
カスタム コントロール
Webページ上のコントロールを開発し、使用するためのテクノロジーにはさまざまなものがあります。たとえば、Component Object Model (COM)とActiveXテクノロジーの組み合わせは、再利用可能で言語に依存しないプラグイン コンポーネントを開発するための1つの手段です。これらのコンポーネントにオートメーションと呼ばれるインターフェイスを持たせることで、コンポーネントをWebページ上に置き、開発者の好きなスクリプティング言語から利用できるようになります。一般に、これらのCOMコンポーネントはC++で開発されますが、COMはコンポーネント間の関数呼び出しを定めるバイナリ標準なので、任意の言語をCOMオブジェクトの開発に使用することができます。
Webページ上でスクリプトから利用できるJavaコンポーネントを作成することもできます。今日市販されているすべてのJava開発プロダクトには、開発の際に利用できるさまざまなコントロール ライブラリが付属しています。たとえば、Visual J++には、すでにおなじみの各種のWin32ユーザー インターフェイスと同等な機能を提供する再利用可能なJavaクラスのセット、Advanced Foundation Classes (AFC)が付属しています。
サードパーティ デベロッパーが開発したコントロールが多数販売されていることもご存じでしょう。これらのコントロールの多くは、ユーザーに対してインターフェイスを表示します。たとえば、ファイル システムなどの階層的な情報を表示するためのツリー ビュー コントロールなどです。また、Webベースのフォームや電子コマースなどの完全なパッケージを提供するハイエンドのオーサリング システムも市販されています。
さらに、スクリプトレットと呼ばれるカスタムの再利用可能なコンポーネントを、HTMLとスクリプトを使って作成することもできます。スクリプトレットは、スクリプトとHTMLにオブジェクト指向性を与え、大規模なWebサイトで再利用できるユーザー インターフェイス エレメントを開発するためのソリューションとしての機能を強化します
関連情報
- Microsoft COMサイトには、COM(およびActiveX)テクノロジーの動作についての説明、この種のコンポーネントを作成するためのツールに関する情報、Microsoftの関連サイトや有益な外部のサイトへのリンクなどがあります。
- Web上でCOMとActiveXという単語で検索を行うと、ソリューションを提供しているサードパーティのサイトを見つけることができます(自分で検索をしようと思ったのですが、ActiveXコントロール ソリューションを提供している企業の数が多すぎたので、読者に任せることにしました。ActiveXはサードパーティ デベロッパーにとって、年間4億ドル規模のマーケットになっていますから、ニーズがある限り、そのニーズに応えるコントロールがどこかにあるはずです)。
- Web用のJavaソリューションについては、Microsoft Technologies for Java
とVisual J++のサイトを参照してください。
データ バインディング
データ バインディングとは、HTMLエレメントのコンテントをサーバー ベースのデータベースやファイルとリンクし、結果として得られたデータをクライアント コンピュータ上でキャッシングするという意味の言葉です。データをクライアント上でキャッシングすることにより、サーバーへのアクセスを新たに行わなくても、データを動的に操作できるようになります。リンクは双方向に行えるので、データ バインディングはクライアント上でのコンテントの表示とサーバー上でのコンテントの更新の両方に利用できます(更新操作はHTMLフォーム上のSubmitボタンに連結します)。データ バインディングは、クライアント上でデータ ソース オブジェクト(DSO)を構築し、標準的なプロパティ、メソッド、およびイベントのセットを通してスクリプティング可能な機能を提供する方法を定めたInternet Explorer 4.0アーキテクチャによって実現されています。DSOのデータ フィールドは、Internet Explorer 4.0で定義されている新たなHTML属性を通して、特定のHTMLエレメントにリンクされます。DSOは、前述のコントロール テクノロジーを使って作成されたコントロールなどの他のデータ コンシューマにもリンクできます。
デベロッパーは独自のDSOを構築することもできますし、Internet Explorer 4.0に付属しているいくつかの組み込みDSOを利用することもできます。たとえば、Tabular Data Control (TDC)を使うと、区切りの入ったテキスト ファイル(パーソナル インフォメーション マネージャ(PIM)アプリケーションがエクスポートするカンマ区切り形式など)にアクセスできます。ActiveX Data Objects (ADO)は、プレビュー2に付属していたAdvanced Data Connector (ADC) DSOと統合されました。この統合を反映して、ADCテクノロジーは公式にRemote Data Service (RDS) for ADOという名称に変更されました。ADOは、OLE-DBまたはODBC準拠のデータベース(SQL Server、Microsoft Access、Oracleなど)へのコネクションとクエリーを扱うためのAPIを提供します。RDSは、これらのAPIを使用して、データベース上のデータをWebページ上のコントロールやエレメントにバインドします。これらのDSOやその他の組み込みDSOについての詳細は、関連情報のセクションを参照してください。
関連情報
- MSDN Online Web Workshop の DHTML, HTML, & CSS エリアには、データ バインディングの入門記事がいくつかあります。
- Data Binding Gallery には、データを各種のHTMLタグにバインドする方法を示したサンプルがあります。また、データ バインディングの例を紹介している社外のサイトへのリンクもあります。
- MINDの1997年7月号のData Binding in Dynamic HTML
が参考になります。
- Data Source Object Gallery では、DSOサンプルをJava、Visual Basic、およびC++で作成する方法が紹介されています。
- MSDN Online
には、Microsoftのすべての情報アクセス テクノロジーに関する情報の集積場所である Universal Data Access の解説があります。
目次に戻る
Visual InterDev、FrontPage 98ベータ、およびその他のツール
Webベースのフォームにより、ペーパーレス オフィスの夢が急速に現実のものとなりつつあります。これらのフォームの中には、「イントラネット アプリケーション」と呼ぶに足るほどの機能を備えているものもあります。Web上のフォームのライブラリを作成することで、作業を行う人の生産性が向上し、コストが削減されるため、企業のイントラネットに対する投資の見返りが向上します。たとえば、Microsoftのセキュアなイントラネットでは、自分が取った休暇の記録を付けたり、社内販売のソフトウェアを注文したり、Microsoftプロダクトをダウンロードしたり、401Kオプションを表示したり、これまでグループ アシスタントや総務手続きに頼ってきたありとあらゆる作業を行うことができます。
イントラネットは大きなビジネスになりつつあるため、Webベースのフォームを生成するためのツールがそろそろ発売されはじめています。これらのツールは、既存のWebページ作成ツールにHTMLフォームのレイアウト機能を追加した単純なものから(Webページによるフォームの結果の処理方法をセットアップする、FrontPage 98 の単純なForm Save Results機能がその一例です)、Microsoft Visual InterDev 開発システムのように、Webアプリケーション デベロッパーが高度にインタラクティブでダイナミックなWebサイトを素早く開発できるようにした高度なプロダクトまで多種多様です。これらのプロダクトは、ビジネス マネージャやテクノロジー マネージャ向けの各種の雑誌で取り上げられています。たとえば、InformationWeek の1997年9月8日号では、紙ベースのフォームをコンバートし、社内イントラネット用のWebベースのフォームを開発するための2つのプロダクトのレビューを行っています。
目次に戻る
要約
この概要では多くの事柄を取り上げたように見えますが、実際には、Webページからユーザー入力を受け取る方法のほんの触りに過ぎません。優れたユーザー入力手法は、1/10がテクノロジーであり、残りの9/10はクリエイティビティの問題であるというのがその理由の1つです。また、これが幅広い内容を持つ分野であるということも理由の1つでしょう。たとえば、この記事ではWebページのパーソナライゼーションについてはまったく触れませんでした。これまで、Webページのパーソナライゼーション機能に感銘を受けたことがない方は、Barnes and Nobleサイト を見れば(私のように)考えを変えることでしょう(サイトのメンバーになる必要があります)。
|