(57)【特許請求の範囲】
【請求項１】
クライアント装置から受信したメッセージをサーバ装置に転送することで、前記サーバ装置からプログラムを取得して前記クライアント装置に返信する中継装置であって、
前記クライアント装置から前記サーバ装置に対する、前記クライアント装置で動作させるプログラムを要求するメッセージを、前記サーバ装置に代えて受信する受信部と、
第１のプログラムを要求する第１のメッセージの受信に応じて、前記第１のプログラムおよびそのプログラムを監視する監視プログラムを要求する、ロードプログラムを、前記第１のプログラムに代えて前記クライアント装置に返信して実行させる第１返信部と、
受信した第２のメッセージが、その監視プログラムを要求することを条件に、その監視プログラムを前記サーバ装置から取得して返信する処理に代えて、予め記憶している監視プログラムを前記クライアント装置に返信して実行させる第２返信部と
を備える中継装置。
【請求項２】
前記第１返信部は、前記第１のメッセージが要求する前記第１のプログラムが、前記クライアント装置から前記サーバ装置に順次要求され、前記クライアント装置において互いに並列に実行される複数のプログラムのうちの最初のプログラムであることを条件に、前記ロードプログラムを返信する、請求項１に記載の中継装置。
【請求項３】
前記サーバ装置が前記クライアント装置からの要求に応じて当該中継装置を経由して前記クライアント装置に返信したプログラムの識別情報を記憶する記憶装置を更に備え、
前記受信部は、前記第１のプログラムを要求する前記第１のメッセージに、そのプログラムを要求する他のプログラムの識別情報を含めて受信し、
前記第１返信部は、前記第１のメッセージに含めて受信した当該他のプログラムの識別情報を、前記記憶装置から検索し、検索されないことを条件に、前記第１のメッセージにおいて要求されたそのプログラムが、前記複数のプログラムのうちの最初のプログラムであると判断する、請求項２に記載の中継装置。
【請求項４】
前記第１のメッセージにより要求される前記第１のプログラムは、フラッシュのムービークリップを実現するＳＷＦファイルに記録されており、
前記第１返信部は、その第１のメッセージが、前記クライアント装置で動作する他のＳＷＦファイルに記録されたプログラムにより送信されたものでなく、前記クライアント装置のウェブブラウザがＨＴＭＬ文書を解釈して送信したものであることを条件に、前記ロードプログラムを返信する、請求項２に記載の中継装置。
【請求項５】
前記第２のメッセージは、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）に準拠しており、
前記第１返信部は、前記クライアント装置に、前記第２のメッセージにＨＴＴＰのＰＯＳＴ属性を設定して送信させるプログラムを、前記ロードプログラムとして返信する、請求項４に記載の中継装置。
【請求項６】
前記クライアント装置において、前記第１のメッセージにより要求した前記第１のプログラムに与えられる入力パラメータは、前記第１のプログラムに代えて受信した前記ロードプログラムに与えられ、
前記第１返信部は、前記ロードプログラムに与えられるその入力パラメータを、前記ロードプログラムの実行により要求される前記第１のプログラムに入力パラメータとして与えるコマンドを、前記ロードプログラムに含めて返信する、請求項１に記載の中継装置。
【請求項７】
前記ロードプログラム、および、前記監視プログラムは、それぞれ、アクション・スクリプト・プログラムであり、
前記第１返信部は、前記第１のメッセージの受信に応じ、前記第１のメッセージにより要求された前記第１のプログラム、および、前記監視プログラムを、共に同一のドメインのＵＲＬを宛先として要求させるプログラムを、前記ロードプログラムとして返信し、
前記第２返信部は、前記第２のメッセージが、前記監視プログラムを要求することを条件に、その要求の宛先のＵＲＬに関わらず、予め記憶している監視プログラムを返信する、請求項４に記載の中継装置。
【請求項８】
前記第２返信部は、前記クライアント装置において前記監視プログラムと並列に動作する、更に他のプログラムから、前記監視プログラム内のオブジェクトを参照可能とするコマンドを、前記監視プログラムに含めて返信する、請求項１に記載の中継装置。
【請求項９】
前記ロードプログラム、前記第１のプログラム、および、前記監視プログラムは、それぞれ、フラッシュのムービークリップを実現するアクション・スクリプト・プログラムであり、
前記ロードプログラムは、前記第１のプログラムおよび前記監視プログラムを前記クライアント装置で並列動作させるプログラムであり、
前記監視プログラムは、前記クライアント装置において前記監視プログラムと並列に動作する前記第１のプログラム内のオブジェクトを、更に他のプログラムに対し出力する、請求項３に記載の中継装置。
【請求項１０】
前記ロードプログラム、前記第１のプログラム、および、前記監視プログラムは、それぞれ、フラッシュのムービークリップを実現するアクション・スクリプト・プログラムであり、
前記ロードプログラムは、前記第１のプログラムおよび前記監視プログラムを前記クライアント装置で並列動作させるプログラムであり、
前記監視プログラムは、前記クライアント装置において前記監視プログラムと並列に動作する前記第１のプログラム内のオブジェクトを、更に他のプログラムの制御に基づき変更する、請求項３に記載の中継装置。
【請求項１１】
前記第１のメッセージの受信に応じ、前記第１のプログラムを前記サーバ装置から取得して記憶装置に格納する格納部を更に備え、
前記第２返信部は、受信した第３のメッセージが前記第１のプログラムを要求することを条件に、前記記憶装置から読み出した前記第１のプログラムを前記クライアント装置に返信して実行させる、請求項１に記載の中継装置。
【請求項１２】
前記第２返信部は、前記格納部が前記サーバ装置からプログラムを取得して前記記憶装置に格納する処理と並行に、前記ロードプログラムを返信する
請求項１１に記載の中継装置。
【請求項１３】
クライアント装置と、サーバ装置と、前記クライアント装置から受信したメッセージを前記サーバ装置に転送することで、前記サーバ装置からプログラムを取得して前記クライアント装置に返信する中継装置とを備えたシステムであって、
前記中継装置は、
前記クライアント装置から前記サーバ装置に対する、前記クライアント装置で動作させるプログラムを要求するメッセージを、前記サーバ装置に代えて受信する受信部と、
第１のプログラムを要求する第１のメッセージの受信に応じて、前記第１のプログラムおよびそのプログラムを監視する監視プログラムを要求する、ロードプログラムを、前記第１のプログラムに代えて前記クライアント装置に返信して実行させる第１返信部と、
受信した第２のメッセージが、その監視プログラムを要求することを条件に、その監視プログラムを前記サーバ装置から取得して返信する処理に代えて、予め記憶している監視プログラムを前記クライアント装置に返信して実行させる第２返信部と
を有し、
前記クライアント装置は、前記第１のプログラムに代えて前記ロードプログラムを実行することで、前記監視プログラムおよび前記第１のプログラムの双方を実行する、システム。
【請求項１４】
クライアント装置から受信したメッセージをサーバ装置に転送することで、前記サーバ装置からプログラムを取得して前記クライアント装置に返信する方法であって、
前記クライアント装置から前記サーバ装置に対する、前記クライアント装置で動作させるプログラムを要求するメッセージを、前記サーバ装置に代えて受信するステップと、
第１のプログラムを要求する第１のメッセージの受信に応じて、前記第１のプログラムおよびそのプログラムを監視する監視プログラムを要求する、ロードプログラムを、前記第１のプログラムに代えて前記クライアント装置に返信して実行させるステップと、
受信した第２のメッセージが、その監視プログラムを要求することを条件に、その監視プログラムを前記サーバ装置から取得して返信する処理に代えて、予め記憶している監視プログラムを前記クライアント装置に返信して実行させるステップと
を備える方法。
【請求項１５】
クライアント装置から受信したメッセージをサーバ装置に転送することで、前記サーバ装置からプログラムを取得して前記クライアント装置に返信する中継装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記クライアント装置から前記サーバ装置に対する、前記クライアント装置で動作させるプログラムを要求するメッセージを、前記サーバ装置に代えて受信する受信部と、
第１のプログラムを要求する第１のメッセージの受信に応じて、前記第１のプログラムおよびそのプログラムを監視する監視プログラムを要求する、ロードプログラムを、前記第１のプログラムに代えて前記クライアント装置に返信して実行させる第１返信部と、
受信した第２のメッセージが、その監視プログラムを要求することを条件に、その監視プログラムを前記サーバ装置から取得して返信する処理に代えて、予め記憶している監視プログラムを前記クライアント装置に返信して実行させる第２返信部と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアント装置およびサーバ装置の間の通信を中継する技術に関する。特に、本発明は、プログラムを取得するために送信するメッセージを中継する技術に関する。
【背景技術】
【０００２】
近年、インターネットで公開されているソフトウェア・モジュールを組み合わせて新たなアプリケーション・プログラムを作成する手法である、マッシュアップが研究されている。マッシュアップを実現するためには、あるソフトウェア・モジュールが他のソフトウェア・モジュール内のオブジェクトを参照し、または、変更できることが望ましい。しかしながら、公開されているソフトウェア・モジュールの中には、そのモジュール内のオブジェクトにアクセスするためのインターフェイスが未公開なものや、そのソースファイルが未公開なものもある。この場合、そのソフトウェア・モジュールをマッシュアップに利用するのは困難である。
【非特許文献１】Saito, S., Takagi, H., and Asakawa, C. 2006. Transforming Flash to XML for Accessibility Evaluations. In Proceedings of the 8th international ACM SIGACCESS conference on Computers and Accessibility (Portland, Oregon, USA, October 23-25, 2006). Assets '06. ACM Press, New York, NY, 157-164.
【発明の開示】
【発明が解決しようとする課題】
【０００３】
これに対し、コンパイルされたプログラムを逆コンパイルしたうえで、逆コンパイルされたプログラムに元のプログラムのオブジェクトを参照するコマンドを挿入するアイデアが提案されている（上記の非特許文献１を参照）。しかしながら、プログラムによっては、ライセンス契約によってそれを逆コンパイルすることが禁じられている場合がある。従って、そのようなプログラムにはこの技術を適用することができない。また、逆コンパイルは比較的長い処理時間を要するため、プログラムを実行しようとする利用者の待ち時間を増加させてしまうおそれがある。
そこで本発明は、上記の課題を解決することのできる中継装置、システム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００４】
上記課題を解決するために、本発明の第１の形態においては、クライアント装置から受信したメッセージをサーバ装置に転送することで、前記サーバ装置からプログラムを取得して前記クライアント装置に返信する中継装置であって、前記クライアント装置から前記サーバ装置に対する、前記クライアント装置で動作させるプログラムを要求するメッセージを、前記サーバ装置に代えて受信する受信部と、第１のプログラムを要求する第１のメッセージの受信に応じて、前記第１のプログラムおよびそのプログラムを監視する監視プログラムを要求する、ロードプログラムを、前記第１のプログラムに代えて前記クライアント装置に返信して実行させる第１返信部と、受信した第２のメッセージが、その監視プログラムを要求することを条件に、その監視プログラムを前記サーバ装置から取得して返信する処理に代えて、予め記憶している監視プログラムを前記クライアント装置に返信して実行させる第２返信部とを備える中継装置を提供する。また、当該中継装置としてコンピュータを機能させるプログラムおよび方法を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００５】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００６】
図１は、本実施形態に係る情報システム１０の全体構成を示す。情報システム１０は、相互に電気通信回線で接続された、クライアント装置２０と、サーバ装置３０と、中継装置４０と、サーバ装置５０とを備える。クライアント装置２０は、例えば、ウェブブラウザを動作させており、利用者からポインティング・デバイスの操作又はキーボードの入力操作を受け付ける。サーバ装置３０は、例えば、ソフトウェア・ベンダーなどにより管理されており、利用者から要求されたソフトウェアをその利用者に提供する。中継装置４０は、例えばプロキシーサーバと呼ばれる装置であり、クライアント装置２０およびサーバ装置５０の間の通信を中継する役割を果たす。サーバ装置５０は、例えば、ウェブサイトを実現するものであり、利用者から要求されたＨＴＭＬ（Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋ−ｕｐ  Ｌａｎｇｕａｇｅ）文書その他のファイルをその利用者に提供する。
【０００７】
クライアント装置２０は、利用者の操作に応じて、外部プログラム１２を要求するメッセージをサーバ装置３０に送信する。このメッセージは、例えば、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）に準拠している。これに応じて、サーバ装置３０は、外部プログラム１２をクライアント装置２０に返信して実行させる。外部プログラム１２は、例えば、ＡｃｔｉｖｅＸ（登録商標）コントロールのような、ウェブブラウザにより実行可能なプログラムを含んでよい。この場合、クライアント装置２０は、その外部プログラム１２を実行することにより、その外部プログラム１２による出力をウェブブラウザの画面内に表示する。クライアント装置２０のうちこのウェブブラウザを表示する部分を表示部２２とする。
【０００８】
また、クライアント装置２０は、サーバ装置５０から取得したＨＴＭＬファイルを解釈して、その内容を表示部２２に表示している。ＨＴＭＬファイルを解釈する、とは、即ち例えば、ＨＴＭＬのタグなどに従って、ＨＴＭＬファイル内で定義されたテキストや画像などを、所定の形式（例えば、テキストであれば文字の大きさ、フォント、表示位置、画像であればその大きさ、圧縮率）に従って表示することをいう。ＨＴＭＬを解釈した結果、または、ウェブブラウザが利用者から操作を受け付けた結果、クライアント装置２０がプログラムをサーバ装置５０から取得する必要が生じる場合がある。取得されたプログラムはクライアント装置２０によって実行される。なお、このプログラムは、本発明に係る第１のプログラムの一例である。このプログラムは、後に説明する解析の対象となることから、以降このプログラムのことを、対象プログラム１５と呼ぶ。
【０００９】
この場合、クライアント装置２０は、対象プログラム１５を要求するメッセージを、中継装置４０を介してサーバ装置５０に対し送信する。このメッセージも、例えば、ＨＴＴＰに準拠していてよい。これに応じて、サーバ装置５０は、中継装置４０を介してクライアント装置２０に対し対象プログラム１５を返信して実行させる。対象プログラム１５は、例えば、アドビ（Ａｄｏｂｅ）社（登録商標）のフラッシュ（Ｆｌａｓｈ）のムービークリップを実現するＳＷＦファイルに記録されたプログラムのような、動画又は静止画をウェブブラウザ（Ｆｌａｓｈプレイヤーをプラグインとしてインストールしたウェブブラウザを含む。）の画面に表示するプログラムである。これにより、クライアント装置２０の表示部２２には、対象プログラム１５の出力である動画又は静止画等が表示される。
【００１０】
図２は、本実施形態に係る表示部２２の表示例を示す。クライアント装置２０は、例えば、マイクロソフト社（登録商標）のインターネット・エクスプローラ（登録商標）のような、ウェブブラウザを動作させており、表示部２２はその画面を表示する。そして、表示部２２は、その画面内に、例えば第１ウィンドウ２００および第２ウィンドウ２１０の２つのウィンドウを表示する。第１ウィンドウ２００は、対象プログラム１５による出力を表示している。対象プログラム１５は、この図のように、複数の表示オブジェクトを所定の構造（例えばｚオーダーなどと呼ばれる階層構造）により出力する。一例として、図２の例では、表示オブジェクトＡの手前側に、表示オブジェクトＢおよびＣが重ねて表示され、表示オブジェクトＣの手前側に、更に、表示オブジェクトＤおよびＥが重ねて表示されている。この画像が動画の場合には、このような表示オブジェクトの構造は動的に変化し得る。
【００１１】
一方、第２ウィンドウ２１０は、外部プログラム１２による出力を表示している。外部プログラム１２は、対象プログラム１５の内部処理で用いられるオブジェクトの構造を解析して、解析したその構造を出力する。この構造は、例えばＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）ツリーと呼ばれる。対象プログラム１５の内部処理で用いられるオブジェクトの構造は、対象プログラム１５の出力である表示オブジェクトの階層構造と対応していてもよい。一例として、第２ウィンドウ２１０は、オブジェクトＡの子オブジェクトが、オブジェクトＢおよびＣであって、オブジェクトＣの子オブジェクトが、オブジェクトＤおよびＥであることを示す構造を表示する。但し、このオブジェクトの構造は、あくまで内部処理で用いられるオブジェクトの構造であって、第１ウィンドウ２００に表示された表示オブジェクトの構造とは一致しない場合がある。
【００１２】
ここで、対象プログラム１５は、ＤＨＴＭＬ、Ａｊａｘ、または、Ｊａｖａｓｃｒｉｐｔなどのようなテキストファイルではなく、フラッシュのアクション・スクリプト・プログラムなどの、予めコンパイルされたバイナリファイルの場合がある。この場合、クライアント装置２０において外部プログラム１２が動作の解析のために対象プログラム１５のソースコードを参照することはできない。対象プログラム１５を逆コンパイルすればソースコードを参照できるとも考えられるが、そもそも逆コンパイルはライセンス契約等に基づき禁止されている場合もある。また、対象プログラム１５の内部処理で用いられるオブジェクトは、対象プログラム１５の実行に応じて動的に変化する場合もあることから、例えソースコードを参照できたとしても、動作中の対象プログラム１５の内部処理で用いられるオブジェクトの構造を外部プログラム１２が解析するのは非常に困難である。
【００１３】
これに対し、本実施形態に係る情報システム１０は、対象プログラム１５のダウンロード時に、対象プログラム１５の動作を解析し易くするための監視プログラムを対象プログラム１５と共にクライアント装置２０に送信することで、これらのプログラムをクライアント装置２０において並行に動作させる。これにより、予めコンパイルされてその動作内容が解析困難な対象プログラム１５についても、ライセンス契約等にも違反することなく、その動作を解析し易くすることを目的とする。以下、中継装置４０がクライアント装置２０に対象プログラム１５をダウンロードさせる処理を中心に説明する。
【００１４】
図３は、本実施形態に係るクライアント装置２０、中継装置４０、および、サーバ装置５０間の通信の具体例を示す。クライアント装置２０は、ＨＴＭＬ文書２５をサーバ装置５０からダウンロードしてその内容を解釈する。図示したように、このＨＴＭＬ文書２５は、ｏｂｊｅｃｔタグを含む。ｏｂｊｅｃｔタグは、それが記述された部分に、フラッシュのムービークリップなどの画像オブジェクトを挿入する指示を示す。図では、ｏｂｊｅｃｔタグによって、フラッシュのムービークリップを実現するファイルのファイル名が指定されている。このファイルは、ＳＷＦというファイルフォーマットを有するから、このファイルのことをＳＷＦファイルと呼ぶ。このほかに、ｏｂｊｅｃｔタグには、挿入した画像オブジェクトの表示形式、例えば表示領域の大きさや表示領域の位置などを指定することもできる。
【００１５】
以下、このＳＷＦファイル名の部分に、「ｈｔｔｐ：／／△△△．ｃｏｍ／ｆｏｏ．ｓｗｆ？ｘ＝３０＆ｙ＝５０」という文字列が指定されたものとして説明をすすめる。
このＨＴＭＬ文書２５を解釈したクライアント装置２０は、この文字列中のＵＲＬの部分、即ち「ｈｔｔｐ：／／△△△．ｃｏｍ／ｆｏｏ．ｓｗｆ」を、対象プログラム１５のファイル名と判断する。そして、クライアント装置２０は、対象プログラム１５を要求する第１のメッセージを、中継装置４０を介してサーバ装置５０に送信する。即ち、サーバ装置５０は、この「ｈｔｔｐ：／／△△△．ｃｏｍ／」というドメイン名を有するウェブサイトとして機能している。
【００１６】
クライアント装置２０におけるウェブブラウザは、外部プログラム１２等の機能によって、中継装置４０をＨＴＴＰメッセージのためのプロキシーサーバとして用いるように設定されている。従って、中継装置４０は、この第１のメッセージをサーバ装置５０に代わって受信する。このメッセージの受信に応じて、中継装置４０は、対象プログラム１５に代えてロードプログラム６０をクライアント装置２０に返信して実行させる。このロードプログラム６０は、対象プログラム１５およびそのプログラムの動作を監視する監視プログラム７０を要求するプログラムである。これと共に、中継装置４０は、受信したこの第１のメッセージをサーバ装置５０に転送することで、対象プログラム１５をサーバ装置５０から取得して記憶装置に格納しておく。
【００１７】
クライアント装置２０は、ロードプログラム６０を実行することにより、監視プログラム７０を要求する第２のメッセージ、および、対象プログラム１５を再度要求する第３のメッセージを、サーバ装置５０宛に順次送信する。中継装置４０は、この第２および第３のメッセージを、サーバ装置５０に代わって受信する。中継装置４０は、第２のメッセージの受信に応じ、そのメッセージの宛先に関わらず、予め記憶している監視プログラム７０を記憶装置から読み出してクライアント装置２０に返信する。一方、中継装置４０は、第３のメッセージの受信に応じ、既に第１のメッセージを転送することで取得していた対象プログラム１５を、記憶装置から読み出して、クライアント装置２０に返信する。これにより、クライアント装置２０は、対象プログラム１５および監視プログラム７０の双方を並列に動作させることができる。
【００１８】
図４は、本実施形態に係る中継装置４０の機能構成を示す。中継装置４０は、インストールされたプログラムを後述のＣＰＵ１０００およびＲＡＭ１０２０等を用いて実行することにより、受信部４００と、転送部４１０と、格納部４２０と、返信モジュール４３０として機能する。また、中継装置４０は、例えば後述のハードディスクドライブ１０４０により実現される、記憶装置４４０を有する。これらの各部は、基本的機能として、いわゆるウェブサーバのプロキシーサーバとして機能する。具体的には以下の通りである。
【００１９】
まず、受信部４００は、クライアント装置２０からサーバ装置５０に対する、クライアント装置２０で動作させるプログラムを要求するメッセージを、サーバ装置５０に代えて受信する。転送部４１０は、受信したそのメッセージをサーバ装置５０に対し転送することで、要求されたそのプログラムをサーバ装置５０から取得する。そして、格納部４２０は、その取得したプログラムを記憶装置４４０に格納する。返信モジュール４３０は、そのプログラムを記憶装置４４０から読み出してクライアント装置２０に返信する。同一のプログラムが再度要求されたときには、返信モジュール４３０はそのプログラムを記憶装置４４０から読み出して直ちに返信することで、クライアント装置２０における返信待ちの時間を節約できる。
【００２０】
記憶装置４４０は、サーバ装置５０がクライアント装置２０からの要求に応じて中継装置４０を経由してクライアント装置２０に返信したプログラムを、そのプログラムの識別情報に対応付けて記憶している。その一例を図５に示す。
図５は、本実施形態に係る記憶装置４４０のデータ構造の一例を示す。記憶装置４４０は、そのプログラムの識別情報の一例としてそのプログラムを取得するためのメッセージの宛先となるＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）を記憶している。そして、記憶装置４４０は、そのＵＲＬに対応付けて、そのプログラムそれ自体を記憶している。一例として、「ｈｔｔｐ：／／△△△．ｃｏｍ／ｆｏｏ．ｓｗｆ」を宛先として取得されたプログラムは、「ｆｏｏ．ｓｗｆ」というファイル名で記憶装置４４０に記憶されている。このように、記憶装置４４０がＵＲＬをプログラムに対応付けて記憶することで、返信モジュール４３０がＵＲＬをキーとして記憶装置４４０からプログラムを検索できる。
【００２１】
図４の説明に戻る。返信モジュール４３０は、記憶装置４４０に格納されたプログラムを単にクライアント装置２０に返信する処理の他、対象プログラム１５が要求された場合にはその対象プログラム１５と共に監視プログラム７０を返信する機能を有する。具体的には、返信モジュール４３０は、第１返信部４３２および第２返信部４３５を有する。第１返信部４３２は、受信部４００が受信した第１のメッセージが、特定条件を満たす対象プログラム１５かどうかを判断する。この特定条件は、対象プログラム１５が、クライアント装置２０からサーバ装置５０に順次要求され、クライアント装置２０において互いに並列に実行される複数のプログラムのうちの最初のプログラムであることである。
【００２２】
この特定条件の判断は、例えば、受信部４００がメッセージに含めて受信する識別情報、および、返信モジュール４３０に記憶された宛先ＵＲＬを照合することにより実現される。具体的には、まず、受信部４００は、対象プログラム１５を要求するメッセージに、その対象プログラム１５を要求する他のプログラムの識別情報を含めて受信する。この識別情報は、例えば、ＨＴＴＰにおける"Ｒｅｆｅｒｅｒ："データフィールドの設定値である。即ち、クライアント装置２０のウェブブラウザで動作する一のプログラムが他のプログラムを要求した場合において、その要求メッセージの中の"Ｒｅｆｅｒｅｒ："データフィールドには当該一のプログラムの識別情報が設定される。対象プログラム１５を要求したのがＳＷＦファイルに記録されたプログラムでなく、ＨＴＭＬ文書である場合には、このデータフィールドにはそのＨＴＭＬ文書のＵＲＬなどが設定される。
【００２３】
そして、第１返信部４３２は、そのメッセージに含めて受信した当該他のプログラムの識別情報を、記憶装置４４０の宛先ＵＲＬのフィールドから検索する。この識別情報が検索されるということは、既にクライアント装置２０のブラウザ上で動作する当該他のプログラムによって、対象プログラム１５が要求されたことを示す。一方で、この識別情報が検索されない場合には、このメッセージが、当該他のプログラムによって送信されたものでなく、他の方法によって、例えば、ＨＴＭＬ文書を解釈して送信したものであることが分かる。従って、第１返信部４３２は、その識別情報が記憶装置４４０から検索されないことを条件に、クライアント装置２０において並列に動作する上記の複数のプログラムのうちの最初のプログラムと判断する。もし最初のプログラムでなければ、それよりも前に何らかのプログラムが既にクライアント装置２０にダウンロードされているはずだからである。
【００２４】
そして、第１返信部４３２は、対象プログラム１５が当該最初のプログラムであることを条件に、対象プログラム１５に代えて、対象プログラム１５および対象プログラム１５の動作を監視する監視プログラム７０を要求するロードプログラム６０を、クライアント装置２０に返信して実行させる。また、中継装置４０がロードプログラム６０を返信する処理と並行に、格納部４２０は、対象プログラム１５をサーバ装置５０から取得して記憶装置４４０に格納してもよい。中継装置４０が返信するロードプログラム６０の一例を図６に示す。
図６は、本実施形態に係るロードプログラム６０の一例を示す。ロードプログラム６０は、フラッシュのムービークリップを実現するアクション・スクリプト・プログラムを要求するプログラムであり、そのプログラム自体もアクション・スクリプトで記述されている。まず、５行目から８行目のコマンドについて説明する。６行目は、対象プログラム１５を要求するコマンドを示す。このコマンドは、例えば、アクション・スクリプトのｌｏａｄＭｏｖｉｅＮｕｍコマンドである。このコマンドの第１引数には、要求先のＵＲＬが与えられる。
【００２５】
第１引数の詳細として、まず、ｔｈｉｓは、このロードプログラム６０自体をオブジェクトとして参照する演算子である。そして、ｔｈｉｓ．＿ｕｒｌは、このロードプログラム６０を取得するために送信したメッセージの宛先ＵＲＬを示している。中継装置４０は要求された対象プログラム１５に代えてロードプログラム６０を返信したものの、クライアント装置２０が要求したのはあくまで対象プログラム１５であるから、「ｔｈｉｓ．＿ｕｒｌ」は対象プログラム１５のＵＲＬ、例えば、「ｈｔｔｐ：／／△△△．ｃｏｍ／ｆｏｏ．ｓｗｆ」である。
【００２６】
第２引数は、要求するムービークリップを読み込むレベルを指定する。フラッシュのムービークリップは、例えば、０から所定の数値（倍精度ＩＥＥＥ−７５４における最大値）までの各レベルの何れかにロードすることができる。０レベルは特別なレベルであり、０レベルに対象プログラム１５がロードされたことを条件に、既に０レベルで動作しているロードプログラム６０を含めた全てのプログラム（ＳＷＦファイルに記録された全てのプログラム）の動作が終了する。第３引数は、オプション要素であって、指定された場合にはＨＴＴＰリクエストに設定する属性を示す。第３引数に「ＰＯＳＴ」という文字列を与えることで、第１返信部４３２は、クライアント装置２０に、第２のメッセージにＨＴＴＰのＰＯＳＴ属性を設定して送信させることができる。（なお、第３引数に「ＧＥＴ」という文字列を与えると、ウェブブラウザに設けられたソフトウェア・キャッシュの機能によって、ＨＴＴＰリクエストが中継装置４０に到達しない場合がある。）
【００２７】
次に、８行目は、監視プログラム７０を要求するコマンドを示す。このコマンドも、６行目と同様に、アクション・スクリプトのｌｏａｄＭｏｖｉｅＮｕｍコマンドである。但し、第１引数および第２引数が６行目とは異なり、第３引数は設定されていない。具体的には、第１引数として、「ｇｅｔＳａｍｅＤｏｍａｉｎＵＲＬ（ｔｈｉｓ．＿ｕｒｌ、"監視プログラムのＵＲＬ"）」という文字列が設定されている。「ｇｅｔＳａｍｅＤｏｍａｉｎＵＲＬ」という関数は、２つの引数を採り、第１引数で与えられたＵＲＬのドメイン部分を、第２引数で与えられたＵＲＬのドメイン以外の部分を結合して出力する。
【００２８】
このため、この関数の出力は、対象プログラム１５のＵＲＬのドメイン部分と、監視プログラム７０のＵＲＬのドメイン以外の部分を結合したＵＲＬとなる。従って、８行目のコマンドは、実際には中継装置４０に記憶されている監視プログラム７０を、サーバ装置５０に対し要求するコマンドとなる。この結果、ロードプログラム６０は、対象プログラム１５よび監視プログラム７０を、共に同一のドメインのＵＲＬを宛先として要求させると共に、これらのプログラムをクライアント装置２０において並列に動作させることができる。なお、第２引数は、上記の例と同様である。但し、指定されるレベルは、その後に対象プログラム１５が動作することによってロードされる他のプログラムのレベルとは異なるように設定されることが望ましい。この図の例では、一般的に使用されにくいと考えられるレベルとして、レベル５３５５３が設定されている。
【００２９】
以上のコマンドを実行した結果、ロードプログラム６０の実行が完了した時点で、対象プログラム１５および監視プログラム７０が、あたかも同一のドメインを有するＵＲＬからダウンロードされたかのようにクライアント装置２０において動作する。
続いて、１行目から３行目のコマンドについて説明する。クライアント装置２０において、第１のメッセージにより要求する対象プログラム１５には、その実行に先立って、入力パラメータが与えられる場合がある。例えば、第１のメッセージが宛先ＵＲＬとして「ｈｔｔｐ：／／△△△．ｃｏｍ／ｆｏｏ．ｓｗｆ？ｘ＝３０＆ｙ＝５０」という文字列を含む場合において、この「？」以降の変数の値が入力パラメータである。中継装置４０が対象プログラム１５に代えてロードプログラム６０を返信した場合において、この入力パラメータは、クライアント装置２０において対象プログラム１５に代えてロードプログラム６０に与えられる。１行目から３行目のコマンドは、このようにしてロードプログラム６０に与えられるその入力パラメータを、ロードプログラム６０の実行により要求される対象プログラム１５に新たな入力パラメータとして与えるコマンドである。
【００３０】
このコマンドは、例えば、Ｏｂｊｅｃｔのプロトタイプに対する代入によって実現される。アクション・スクリプトは、ＥＣＭＡＳｃｒｉｐｔなどと同様に、プロトタイプベースオブジェクト指向言語（Prototype Based Object Oriented Language）である。プログラムに記述可能な全てのオブジェクトは、Ｏｂｊｅｃｔクラスという特別なクラスのサブクラスである。また、Ｏｂｊｅｃｔクラスはプロトタイプというデータフィールドを含む。プロトタイプは、Ｏｂｊｅｃｔクラスの全てのサブクラスから参照可能なフィールドである。例えば、あるオブジェクトがプロトタイプに格納された場合において、そのオブジェクトと同一名のオブジェクトが、あるサブクラスに定義されていなければ、そのオブジェクトがそのサブクラスのメソッドまたはフィールドとして参照可能となる。
【００３１】
このようなＯｂｊｅｃｔのプロトタイプの性質を利用して、この１から３行目のコマンドは、ロードプログラム６０に与えられた入力パラメータ（ｔｈｉｓ［ｐｒｏｐ］）を、Ｏｂｊｅｃｔのプロトタイプに代入している。これにより、その後にロードされた対象プログラム１５からも、その入力パラメータを参照することができる。その後にロードされる対象プログラム１５に定義された如何なるオブジェクトも、Ｏｂｊｅｃｔというクラスのサブクラスだからである。
【００３２】
入力パラメータの代入を、このようにＯｂｊｅｃｔのプロトタイプを利用して実現することは、次のような作用・効果を奏する。第１に、中継装置４０が、ロードプログラム６０にどのような入力パラメータが代入されたかを解析する必要がない。ロードプログラム６０に与えられる入力パラメータの種類や数は、それを呼び出すＨＴＭＬ文書に依存する。図６のコマンド例では、どのような入力パラメータが与えられたかによらず、与えられる入力パラメータを一括して対象プログラム１５に入力することができる。第２に、対象プログラム１５の動作開始前に予め入力パラメータを与えることができる。他の手法を採用しようとすれば、対象プログラム１５が動作を開始してから、対象プログラム１５内で生成されるオブジェクトに対し、ロードプログラム６０に与えられる入力パラメータを代入しなければならないと考えられる。この場合には、代入のタイミングが遅れて、対象プログラム１５を誤動作させてしまうおそれがある。これに対し、本手法によれば、対象プログラム１５の動作開始前に予め入力パラメータを与えることができ、対象プログラム１５を確実に正常動作させることができる。
【００３３】
図４の説明に戻る。次に、第２返信部４３５は、第１のメッセージ以降に受信する第２のメッセージが、監視プログラム７０を要求するかどうかを判断する。そのメッセージが監視プログラム７０を要求することを条件に、第２返信部４３５は、その監視プログラム７０をサーバ装置５０から取得して返信する処理に代えて、予め記憶装置４４０等に記憶している監視プログラム７０をクライアント装置２０に返信して実行させる。一方で、第１のメッセージ以降に受信する第３のメッセージが対象プログラム１５を要求する場合には、返信モジュール４３０は通常動作する。即ちこの場合、第２返信部４３５は、記憶装置４４０から読み出した対象プログラム１５をクライアント装置２０に返信して実行させる。これにより、クライアント装置２０は、対象プログラム１５および監視プログラム７０を、共にロードプログラム６０の要求の下で動作させることができる。
【００３４】
次に、図７および図８を参照して、外部プログラム１２、対象プログラム１５および監視プログラム７０の連係動作の一例を説明する。
図７は、本実施形態に係る監視プログラム７０の一例を示す。図８は、本実施形態に係る外部プログラム１２、対象プログラム１５および監視プログラム７０の連係動作の一例を示す。図７の１行目はアクセス制限に関するセキュリティの設定を示す。この１行目のコマンドにより、外部プログラム１２から監視プログラム７０内のオブジェクトを参照可能とすることができる。２行目は、変数"ＩＢＭ＿ＡＲ＿ｒｅｑｕｅｓｔ＿ａｒｇｓ"の値が変化した場合に、ＩＢＭ＿ＡＲ＿ｐｒｏｃｅｓｓＲｅｑｕｅｓｔという関数（以下、ハンドラと呼ぶ）を呼び出す設定を示す。そして、その関数の実体は、４行目から１１行目に定義されている。
【００３５】
この関数が呼ばれる過程についてまず説明する。例えば、外部プログラム１２は、下記のようなＪａｖａｓｃｒｉｐｔのコマンドを実行することにより、外部プログラム１２と並列に動作する監視プログラム７０内の変数に値を設定することができる。
ｄｏｃｕｍｅｎｔ．ｇｅｔＥｌｅｍｅｎｔｓＢｙＴａｇＮａｍｅ（"ｏｂｊｅｃｔ"）［０］．ＳｅｔＶａｒｉａｂｌｅ（'ｘ'，５０）；
ここで、'ｘ'は、値を変更しようとする変数の名前である。そして、"ｏｂｊｅｃｔ"は、その変数を有するＦｌａｓｈコンテンツ（ここでは、たとえば監視プログラム７０）を実行しているＦｌａｓｈプレイヤーを表すＨＴＭＬのタグ名である。そして、５０は、設定しようとする値である。従って、外部プログラム１２の実行によって、上記の'ｘ'に代えて'＿ｌｅｖｅｌ５３５５３．ＩＢＭ＿ＡＲ＿ｒｅｑｕｅｓｔ＿ａｒｇｓ'を設定したコマンドを発行すれば、監視プログラム７０内で定義された上記のハンドラを呼び出すことができる。なお、"＿ｒｏｏｔ"はレベル０で動作中のプログラムをオブジェクトとみなした識別子、即ち例えば対象プログラム１５を示す識別子である。
【００３６】
次に、ハンドラが呼び出された場合の処理について説明する。図７の２行目のｗａｔｃｈメソッドの機能によって、ハンドラには、値が変化した変数の名前（ｐｒｏｐＮａｍｅ）、変化前の値（ｏｌｄＶａｌ）および変化後の値（ｎｅｗＶａｌ）が、引数として少なくとも与えられる。この引数のリストは例えば４行目の引数の定義に示す通りである。そして、５行目において、この変化後の値がデシリアライズされる。
【００３７】
シリアライズ・デシリアライズとは公知の概念であり、その意味は概ね以下の通りである。シリアライズとは、一のプログラムの実行中に参照される複数のオブジェクトを、他のプログラムに対し転送可能なデータ形式に変換する処理である。プログラムの実行中に、複数のオブジェクトは、処理の効率化等を目的として、アレイ構造、リスト構造などの、様々な形態で記憶される。例えばリスト構造において、第１オブジェクトは、第２オブジェクトが記憶されているメモリ上のアドレスを参照している場合がある。
【００３８】
このような場合において、一のプログラムがこれらのオブジェクトをそのまま他のプログラムに転送してしまうと、不都合が生じる場合がある。それは、当該一のプログラムおよび当該他のプログラムにおいて、オブジェクトが記憶されるメモリ上のアドレスは異なるからである。この結果、当該他のプログラムにおいて第１オブジェクトは第２オブジェクトを適切に参照できなくなってしまう。これに対し、シリアライズによれば、複数のオブジェクトを、例えばアドレスを用いた参照を除外したデータ形式に変換することができる。なお、デシリアライズは、このようなシリアライズの逆変換を表す。
【００３９】
ここで、引数ｎｅｗＶａｌには、複数の変数を予めシリアライズした数値が与えられるものとして説明をすすめる。即ち、外部プログラム１２が、対象プログラム１５に対し出力しようとする複数の変数を生成し、それら複数の変数をシリアライズして、その結果の数値を上記のＳｅｔＶａｒｉａｂｌｅコマンドにより変数"ＩＢＭ＿ＡＲ＿ｒｅｑｕｅｓｔ＿ａｒｇｓ"に代入すると仮定して、図７の説明を続ける。
【００４０】
５行目に示すデシリアライズの結果、変数ａｒｇには、外部プログラム１２により設定された複数の変数が正確に設定される。６行目は、変数ａｒｇによって表される複数の変数のうちの第１番目の変数を読み出した上で、変数ａｒｇを、当該複数の変数のうちの第２番目以降の変数を表す変数に変更する処理を示す。この結果、変数ｎａｍｅには、当該１番目の変数の値が代入される。７行目は、メソッドを表す変数ｍｅｔｈｏｄに、変数ｎａｍｅをメソッド名とするメソッドを代入する処理を表す。なお、Ｉｎｉｔ．ｃａｌｌｂａｃｋｓ［ｎａｍｅ］は、変数ｎａｍｅをメソッド名とするメソッドのポインタやその実体などを読み出すことを表す。
【００４１】
８行目は、変数ｍｅｔｈｏｄに代入されたメソッドを、変数ａｒｇによって表された複数の変数を引数として実行させる処理を表す。メソッドを実行した戻り値は、変数ｒｅｔＯｂｊに代入される。ここで呼び出されるメソッドは、監視プログラム７０または対象プログラム１５内で定義されるいずれのメソッドであってもよい。即ち、外部プログラム１２は、呼び出すメソッドの名前および引数を"ＩＢＭ＿ＡＲ＿ｒｅｑｕｅｓｔ＿ａｒｇｓ"にセットすれば、対象プログラム１５または監視プログラム７０内で定義される如何なるメソッドをも呼び出すことができる。例えば、監視プログラム７０内に、クライアント装置２０において動作する対象プログラム１５内のオブジェクトを変更するメソッドを定義しておけば、外部プログラム１２は、そのメソッドを呼び出すことで、そのオブジェクトを変更することができる。
【００４２】
次の９行目は、変数ｒｅｔＯｂｊをシリアライズして、変数ＩＢＭ＿ＡＲ＿ｒｅｓｐｏｎｓｅに代入する処理を表す。これにより、外部プログラム１２は、例えば以下のコマンドを実行することにより、メソッドを実行した戻り値を監視プログラム７０から取得することができる。
ｄｏｃｕｍｅｎｔ．ｇｅｔＥｌｅｍｅｎｔｓＢｙＴａｇＮａｍｅ（"ｏｂｊｅｃｔ"）［０］．ＧｅｔＶａｒｉａｂｌｅ（'＿ｌｅｖｅｌ５３５５３．ＩＢＭ＿ＡＲ＿ｒｅｓｐｏｎｓｅ＿ｖａｌｕｅ'）；
【００４３】
これにより、対象プログラム１５内のオブジェクトを外部プログラム１２に参照させることができる。即ち例えば、監視プログラム７０内に、クライアント装置２０において動作する対象プログラム１５内のオブジェクトを読み出すメソッドを定義しておけばよい。そうすれば、外部プログラム１２は、そのメソッドを呼び出すことで、そのオブジェクトを監視プログラム７０から外部プログラム１２に変数「ＩＢＭ＿ＡＲ＿ｒｅｓｐｏｎｓｅ＿ｖａｌｕｅ」の値として出力させることができる。
【００４４】
以上のように、外部プログラム１２および監視プログラム７０が相互に連携することで、外部プログラム１２は、対象プログラム１５内で定義されたオブジェクトに対し、参照のみならず変更も含む、任意の操作をすることができる。更に、逆方向の通信、例えば、監視プログラム７０が外部プログラム１２中で定義されたコマンドを実行することが、実現可能であることを、この実施形態を参照した当業者であれば理解するであろう。具体的には、外部プログラム１２が、監視プログラム７０内で定義された変数値を、例えば定期的に読み出して、変数値が変化したかどうかを判断する。そして、外部プログラム１２は、その変数値が変化した場合に、その変数値が表す監視プログラム７０からの指示に基づく処理をする。この変数値は、例えば、上記の説明のような、メソッド名およびその引数をシリアライズした数値を表す。即ちこの場合、監視プログラム７０は、監視プログラム７０内で定義された変数の変数値を、外部プログラム１２に対する指示を示す変数値に変更することで、外部プログラム１２に所望の動作をさせることができる。
【００４５】
図９は、本実施形態に係る中継装置４０による処理を示すフローチャートである。受信部４００は、クライアント装置２０からサーバ装置５０に対する、クライアント装置２０で動作させるプログラムを要求するメッセージを、サーバ装置５０に代えて受信する（Ｓ９００）。そして、第２返信部４３５は、受信したそのメッセージが、監視プログラム７０を要求するメッセージかどうかを判断する（Ｓ９１０）。受信したそのメッセージが監視プログラム７０を要求するメッセージであることを条件に（Ｓ９１０：ＹＥＳ）、第２返信部４３５は、その監視プログラム７０を記憶装置４４０から読み出して返信する（Ｓ９２０）。
【００４６】
一方、そのメッセージが監視プログラム７０を要求するメッセージでないことを条件に（Ｓ９１０：ＮＯ）、第１返信部４３２は、要求されるプログラムが既に記憶装置４４０に記憶されているかどうかを判断する（Ｓ９３０）。例えば、転送部４１０がサーバ装置５０に要求して既に対象プログラム１５を取得した場合には、対象プログラム１５は格納部４２０により記憶装置４４０に格納されている。そのように、要求されるプログラムが記憶装置４４０に記憶されている場合には（Ｓ９３０：ＹＥＳ）、第１返信部４３２は、そのプログラムを記憶装置４４０から読み出してクライアント装置２０に返信する（Ｓ９４０）。
【００４７】
一方で、要求されるプログラムが記憶装置４４０に記憶されていないことを条件に（Ｓ９３０：ＮＯ）、第１返信部４３２は、そのメッセージがプログラム間の呼び出し関係を示すコールツリーのルートノードに対応するプログラムを要求するメッセージかを判断する（Ｓ９５０）。この判断は、既に述べたように、例えば、ＨＴＴＰメッセージの"Ｒｅｆｅｒｅｒ："データフィールドを記憶装置４４０に記憶されたＵＲＬと照合することによって実現されてもよい。このルートノードに対応するプログラムは、上記の対象プログラム１５である。
【００４８】
これに加えて、第１返信部４３２は、Ｓ９５０において、要求されるプログラムはアクション・スクリプト・プログラムであるかどうかを、更に判断してもよい。例えば、第１返信部４３２は、受信したメッセージを転送部４１０によりサーバ装置５０に対し転送させることで、要求されるプログラムを表すバイナリデータの先頭の数バイトを取得する。この先頭の数バイトには、そのプログラムの種別を示すヘッダ部分が含まれる。第１返信部４３２は、このヘッダ部分を、アクション・スクリプト・プログラムを示す予め定められたバイト列と比較する。一致すれば、そのプログラムはアクション・スクリプト・プログラムであることが分かる。このような判断によれば、第１返信部４３２は、アクション・スクリプト・プログラムのみを、監視プログラム７０による監視の対象とすることができる。
【００４９】
そして、第１返信部４３２は、受信したそのメッセージが対象プログラム１５を要求するメッセージであることを条件に（Ｓ９５０：ＹＥＳ）、その対象プログラム１５を返信する処理に代えて、予め記憶しているロードプログラム６０をクライアント装置２０に返信する（Ｓ９６０）。この返信の処理の次に、又は、この返信の処理と並行して、転送部４１０は、受信したそのメッセージをサーバ装置５０に転送することで、その対象プログラム１５をサーバ装置５０から取得する（Ｓ９７０）。そして、格納部４２０は、取得したその対象プログラム１５を記憶装置４４０に格納する（Ｓ９７５）。
【００５０】
一方、受信したメッセージがルートノードに対応するプログラムを要求するものではない場合に（Ｓ９５０）。中継装置４０は、通常のプロキシーサーバとして機能する。即ち、転送部４１０は、受信したそのメッセージをサーバ装置５０に転送することで、プログラムをサーバ装置５０から取得する（Ｓ９８０）。そして、格納部４２０は、取得したそのプログラムを記憶装置４４０に格納すると共に、返信モジュール４３０は、そのプログラムをクライアント装置２０に返信する（Ｓ９８５）。
以上の処理を、中継装置４０は、プログラムを要求するメッセージを受信する毎に繰り返す。
【００５１】
図１０は、本実施形態に係る中継装置４０として動作するコンピュータの機能構成を示す。コンピュータは、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＢＩＯＳ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【００５２】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＢＩＯＳ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００５３】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、コンピュータが使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又はハードディスクドライブ１０４０に提供する。
【００５４】
また、入出力コントローラ１０８４には、ＢＩＯＳ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＢＩＯＳ１０１０は、コンピュータの起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータのハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００５５】
コンピュータに提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出されコンピュータにインストールされて実行される。プログラムがコンピュータ等に働きかけて行わせる動作は、図１から図９において説明した中継装置４０における動作と同一であるから、説明を省略する。
【００５６】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータに提供してもよい。
【００５７】
以上、本実施の形態に係る中継装置４０によれば、クライアント装置２０がサーバ装置５０に要求する対象プログラム１５に対し、逆コンパイル、命令コードの追加、または、再コンパイルなどを行うことなく、動作中のその対象プログラム１５の内部処理で用いられるオブジェクトを外部プログラム１２によってアクセスさせることができる。これにより、外部プログラム１２は、例えばオブジェクトの階層関係を表したＤＯＭツリーなどの情報を取得できる。この機能を利用することで、例えば以下に示す様々な応用が可能となる。
【００５８】
まず、基本的機能として、内部処理用のオブジェクトと画面上の表示オブジェクトの対応付けを表示部２２の画面上に表示できる。即ち例えば、外部プログラム１２は、図２の第２ウィンドウ２１０などにおいて、あるオブジェクトがクリックされたのに応じて、それに対応する表示オブジェクトを第１ウィンドウ２００上でハイライトして表示することができる。また、外部プログラム１２は、図２の第２ウィンドウ２１０において、例えば出力音声のボリュームを調整するようなオブジェクトがクリックされたのに応じて、第１ウィンドウ２００において動画と併せて出力する音声のボリュームを調整することができる。このほかにも、外部プログラム１２は、第２ウィンドウ２１０に表示したオブジェクト名に対する操作に応じ、第１ウィンドウ２００に表示した表示オブジェクトがクリックされたかのように対象プログラム１５を動作させることもできる。このように、フラッシュなどで実現された動画コンテンツに対して、テキストベースの代替のインターフェイスを提供することができる。このインターフェイスは、マッシュアップのための対象プログラム１５の動作解析、対象プログラム１５のデバッグ、または、視覚障害者向けのページ読み上げツールに対して広く応用することができる。
【００５９】
また、フラッシュなどの動画コンテンツにおいて、ボタン、画像、テキストまたはチェックボックスなどの表示オブジェクトが、利用者によって操作可能に表示される場合がある。ウェブブラウザがそのような表示オブジェクトの表示をサポートしていない場合に備えて、ＨＴＭＬ文書には、その表示オブジェクトがどのような機能を有するかを示す代替テキストを記述することができる。しかしながら、そのような代替テキストの記述はページ作成者に委ねられているゆえ、代替テキストが記述されていない場合や、記述されていたとしても正しい内容を示していない場合がある。さらには、動画コンテンツには、画面には現れないが、要素の入れ子構造又はグループ構造を示す特別なオブジェクトが含まれる場合がある。このような場合、例えば、視覚障害者向けのテキスト読み上げツールを用いても、そのオブジェクトの機能を正しく知ることができない。
【００６０】
このような場合に、その表示オブジェクトに対応する内部処理用のオブジェクトのインスタンス名・クラス名等が分かれば、その表示オブジェクトの機能を推測することができる。即ち、外部プログラム１２は、対象プログラム１５の内部処理で用いられるそのオブジェクトの名称を、監視プログラム７０を介して取得し、その名称を示すテキストを表示する。テキスト読み上げツールは、そのテキストを読み上げた音声を生成して出力する。そうすれば、この音声を聞いた利用者は、その表示オブジェクトがどのような機能を示すかをある程度推測することができる。
【００６１】
また、他の例として、オブジェクトの階層関係を示したＤＯＭツリーなどの情報それ自体を利用することもできる。例えば、テキスト読み上げツールは、単に連続的に記述されたテキストであれば、そのテキストを先頭から順に読み上げることができる。しかしながら、フラッシュなどを用いたウェブページは、階層構造を持つゆえ、どの表示オブジェクトから順に読み上げの対象とするべきかを判断するのは難しい。特に、フラッシュなどのバイナリコードをブラウザがダウンロードする場合においては、ブラウザがその階層構造を正しく認識することでさえも困難である。これに対し、本実施形態に係る中継装置４０を用いれば、ブラウザ側でその階層構造については少なくとも正しく認識できるので、例えば親オブジェクトから子オブジェクトに至る順序というように、一定の規則によって読み上げの順序を定めることができる。
【００６２】
さらに、本実施形態において、ロードプログラム６０および監視プログラム７０は、対象プログラム１５の内容によらず同一でよい。即ち、中継装置４０は、ロードプログラム６０および監視プログラム７０を、要求される対象プログラム１５ごとに変更する必要はなく、どのようなプログラムを対象プログラム１５として受信しても、予め定められたロードプログラム６０および監視プログラム７０を送信すればよい。これにより、中継装置４０の動作を高速化でき、利用者が対象プログラム１５を要求してから対象プログラム１５が動作を開始するまでの所要時間を短くすることができる。
【００６３】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００６４】
【図１】図１は、本実施形態に係る情報システム１０の全体構成を示す。
【図２】図２は、本実施形態に係る表示部２２の表示例を示す。
【図３】図３は、本実施形態に係るクライアント装置２０、中継装置４０、および、サーバ装置５０間の通信の具体例を示す。
【図４】図４は、本実施形態に係る中継装置４０の機能構成を示す。
【図５】図５は、本実施形態に係る記憶装置４４０のデータ構造の一例を示す。
【図６】図６は、本実施形態に係るロードプログラム６０の一例を示す。
【図７】図７は、本実施形態に係る監視プログラム７０の一例を示す。
【図８】図８は、本実施形態に係る外部プログラム１２、対象プログラム１５および監視プログラム７０の連係動作の一例を示す。
【図９】図９は、本実施形態に係る中継装置４０による処理を示すフローチャートである。
【図１０】図１０は、本実施形態に係る中継装置４０として動作するコンピュータの機能構成を示す。
【符号の説明】
【００６５】
１０  情報システム
１２  外部プログラム
１５  対象プログラム
２０  クライアント装置
２２  表示部
２５  ＨＴＭＬ文書
３０  サーバ装置
４０  中継装置
５０  サーバ装置
６０  ロードプログラム
７０  監視プログラム
２００  第１ウィンドウ
２１０  第２ウィンドウ
４００  受信部
４１０  転送部
４２０  格納部
４３０  返信モジュール
４３２  第１返信部
４３５  第２返信部
４４０  記憶装置
【図１】
0005039946.tif 000002
【図２】
0005039946.tif 000003
【図３】
0005039946.tif 000004
【図４】
0005039946.tif 000005
【図５】
0005039946.tif 000006
【図６】
0005039946.tif 000007
【図７】
0005039946.tif 000008
【図８】
0005039946.tif 000009
【図９】
0005039946.tif 000010
【図１０】
0005039946.tif 000011