図1は、本発明の情報処理装置および画像形成装置を含むネットワーク環境を例示した図である。図1に示す情報処理装置は、PC100とされ、画像形成装置は、MFP(Multi Function Peripheral)110とされ、ネットワーク120にこれらのほか、外部サーバ130、140が接続されている。
PC100は、OSや各種アプリケーションを実行し、装置全体の制御や各種の演算処理を行うCPUを備える。例えば、CPUは、ネットワーク120を介した通信を行い、ユーザから入力を受け付け、表示装置に演算結果等を出力し、コンテンツ再生、リッピング、記憶装置へのデータ等の記憶、記憶装置からのデータ等の読み出し、データ等の管理を行う。
PC100は、上述した通信を行うために通信インタフェースを備え、また、ユーザからの入力を受け付けるために入力装置を備える。通信インタフェースは、LAN端子、モデム、無線LANを実現するためのアンテナおよび送受信機を含むことができる。入力装置としては、文字や数字を入力するためのキーボード、画面に表示されるカーソルの移動、ウィンドウやアイコン等の選択、ボタンの押下を実現するためのマウスのほか、指やスタイラス等を使用して画面上のカーソルの移動やアイコンの選択等を実現するタッチパネルを採用することができる。また、上述した表示装置として、液晶ディスプレイやCRT等を採用することができる。さらに、記憶装置として、ROM、RAM、HDD等を備えることができ、外部記憶装置としてのSDカード、CD−R、CD−RW、DVD−R、DVD−RW、DVD−RAM等に記憶するためにSDカードスロット、CDドライブ、DVDドライブ等を備えることができる。
そのほか、PC100は、音声を出力するためのスピーカ、AV機器や他の機器を接続するためのIEEE1394デバイスやUSBデバイス等を備えることができる。
MFP110は、PC100と同様、CPU、記憶装置としてのROM、RAM、HDD、表示装置、入力装置、通信インタフェース、スピーカ、IEEE1394デバイス、USBデバイス、SDカードスロット等を備える。MFP110は、表示装置および入力装置として、操作パネルを備え、入力装置として複数のキーを備える。
また、MFP110は、印刷、FAX送受信、コピー、画像読み取りを実現するために画像読み取り装置、プリンタを備えている。画像読み取り装置は、外光を遮断するためのカバーと、そのカバーの下の、原稿を載せるための透明なプラスチック製あるいはガラス製の原稿台と、原稿台の下から原稿台を通して光を照射する光源と、原稿に反射した光を受光し、電気信号に変換する撮像素子と、変換された電気信号がアナログ信号であるため、このアナログ信号をデジタル信号へ変換するためのADコンバータとを備えている。
ここでは、反射型の画像読み取り装置の構成について説明したが、画像読み取り装置は透過型であってもよく、透過型の場合、光源がカバーに設けられ、カバー側から光を照射し、原稿および原稿台を透過した光を撮像素子により受光することができる。なお、撮像素子は、CCDイメージセンサやCMOSイメージセンサ等を採用することができ、原稿台を通した光は、直接に撮像素子に受光されるもののほか、1または複数のミラーにより反射されてから、イメージセンサに入射される構成であってもよい。
MFP110で採用されるプリンタは、レーザプリンタとすることができ、PC100から送られてきた印刷イメージデータを、MFP110が備えるCPUによりメモリ上に展開し、そのイメージを、レーザを用いて形成する。すなわち、このプリンタは、印刷イメージデータを基に書き込み光としてのレーザを照射する露光装置と、レーザが照射されることにより表面にそのイメージと同様の潜像が形成される感光体と、その感光体を、レーザが照射される前に帯電させる帯電ユニットと、潜像が形成された感光体にトナーを付着させ、現像する現像ユニットと、紙を給紙する給紙ユニットと、感光体の回転により表面に形成されたトナー像を、給紙された紙上に転写させる転写ユニットと、紙上に転写されたトナー像を、熱および圧力を加えて紙に定着させる定着ユニットと、トナー像が定着された紙を排紙する排紙ユニットとを備えている。
プリンタは、そのほか、感光体上に残ったトナーを除去するためのクリーニングユニット、紙を所定の方向へ搬送するための複数のローラ等を備えることができる。
MFP110は、原稿を自動で原稿台上へ搬送するために原稿自動送り装置(ADF)、高速な画像処理が必要であることから、画像処理専用の回路であるASIC等をさらに備えることができる。
MFP110は、原稿を読み取る場合は、上記の画像読み取り装置を使用して原稿を読み取ることができる。また、印刷する場合は、送られてきた印刷データに基づき、上記プリンタにより感光体の表面にレーザで潜像を形成し、それを現像し、紙に転写および定着させることにより、印刷することができる。コピーの場合は、画像読み取り装置を使用して原稿を読み取り、その読み取ったデータに基づきプリンタにより印刷出力することができる。
FAX送信する場合は、画像読み取り装置により原稿を二次元情報である線あるいは点に分解して読み取り、モデムを利用してデジタル変調し、電話網等の通信回線へと送出することができる。一方、FAX受信する場合は、通信回線を介して送信された信号を、モデムを利用して復調し、原稿を復元することができる。
なお、画像読み取り装置で読み取ったデータ、そのデータを圧縮、変換等した後のデータ、FAX受信したデータは、メモリ等の記憶装置に記憶することができる。
ネットワーク120は、社内等の限られた範囲で構築されるイントラネット、範囲が限定されないインターネットを挙げることができる。外部サーバ130、140は、上述したPC100と同様、CPU、記憶装置、通信インタフェースを備える構成とされ、表示装置、入力装置を備えていてもよい。
外部サーバ130、140は、マークアップ言語で記述された文書データを含むコンテンツデータを提供する。ここで、マークアップ言語とは、文章の段落やフォントサイズ等の指定や、画像や他の文書へのリンクをタグと呼ばれる文字列を使用して記述する記述言語である。このマークアップ言語としては、HTML(Hyper Text Markup Language)等が使用される。このHTMLにより記述されるHTMLファイルを含むコンテンツデータにWebページがある。外部サーバ130、140は、PC100やMFP110からの要求に応答して、このWebページを提供することができる。PC100やMFP110は、このWebページの閲覧を外部サーバ130、140へ要求し、Webページの提供を受けるためにWebブラウザが実装される。
PC100およびMFP110は、Webブラウザから外部サーバ130、140へWebページを要求し、外部サーバ130、140から送信されたWebページのHTMLファイルを解釈し、ブラウザ画面上にWebページの内容を表示することができる。外部サーバ130、140は、Webブラウザからの要求に応答するため、アプリケーションソフトウェアとして、Webサーバを実装する。
PC100およびMFP110が実装するWebブラウザと、外部サーバ130、140が実装するWebサーバとの間の通信は、HTTP(Hypertext Transfer Protocol)を通信プロトコルとして使用し、HTMLファイルを含むコンテンツデータの送受信が行われる。
なお、PC100およびMFP110は、アプリケーションソフトウェアとしてのWebブラウザを動作させるために、入出力機能やメモリの管理等、アプリケーションソフトウェアから共通して利用される基本的な機能を提供し、装置全体を管理する基本的なソフトウェアであるOS(Operating System)を実装する。
MFP110においては、アプリケーションソフトウェアとしてそのほか、印刷ジョブを実行させるプリンタアプリ、コピージョブを実行させるコピーアプリ、ファックス送受信ジョブを実行させるファックスアプリ、スキャンジョブを実行させるスキャナアプリを備える。これらのアプリとOSとの間のインタフェースとして、API(Application Programming Interface)、Java(登録商標)仮想マシン(JVM)等を備えることができる。APIは、プリンタアプリ等のアプリケーションプログラムを記述する際、OSの機能を呼び出すためのインタフェースであり、JVMは、Java(登録商標)バイトコードをOS上で動作可能なネイティブコードに変換して実行するものである。このため、JVMを実装する場合、アプリケーションソフトウェアは、Java(登録商標)のバイトコードによって実装されたものとすることができる。
図2は、図1に示す情報処理装置および画像形成装置のコンポーネント構成図である。これらの装置は、コンポーネントとして、Webブラウザ200、プラグインマネージャ210、プラグイン220、ユーティリティ230、デバイスSDK240を備えている。また、Webブラウザ200は、イベントプロセス201、UI202、スクリプトパーサ203を備えている。
このWebブラウザ200は、CPUにより実行され、コンテンツデータをWebサーバに対して要求し、Webサーバから提供されたコンテンツデータを表示する等のデータ処理を行うことから、CPUにより実行されてデータ処理部として機能する。また、プラグインマネージャ210、プラグイン220、ユーティリティ230、デバイスSDK240も同様に、CPUにより実行され、各々の処理を行うことから、CPUにより実行されてスクリプト実行管理部、スクリプト実行部、インタフェース部、デバイス制御部としてそれぞれ機能する。実際の処理は、これらデータ処理部、スクリプト実行管理部、スクリプト実行部、インタフェース部、デバイス制御部が実行するが、説明を容易にし、内容の理解をしやすくするために、以下、Webブラウザ200、プラグインマネージャ210、プラグイン220、ユーティリティ230、デバイスSDK240の用語を用いて説明する。
Webブラウザ200は、一定の書式によりコンテンツデータを指し示す識別子であるURI(Uniform Resource Identifier)やHTTPに基づき、外部サーバ130、140に実装されるWebサーバと通信し、目的のコンテンツデータを取得し、その取得したコンテンツデータを、種類に応じて解析し、その解析結果を基に、テキストや画像等を適切な位置に配置したり、文字サイズを調整したり、色を付ける等して表示する。
UI202は、Webブラウザ200において、ユーザからのデータ取得の指示を入力として受け付け、また、取得したコンテンツデータに含まれる文字や画像等を適切な位置に配置し、文字調整等されたものの表示を行う。Webブラウザ200は、このコンテンツデータに含まれるHTML文書を解析し、UI202に対しレイアウト指示を行うために、図示しないHTMLパーサを備えることができる。
イベントプロセス201は、ユーザ入力等により発生するイベントを処理する。また、イベントプロセス201は、Webブラウザ200の機能拡張のためにハードコーディングにより記述されたWebブラウザ200に予め定義されている定義済みスクリプト、例えば、任意の入力キーが押下された場合に実行されるスクリプト等のほか、装置に設定されている値の取得や値の設定を行うためのスクリプト、セキュリティや重要な処理に関するスクリプト等のWebブラウザ200に予め定義されていないスクリプト、すなわち機能拡張のために独自に作成され、装置に追加されたスクリプトや変更されたスクリプトの実行要求を、それらの検知したイベントを処理するために生成し、スクリプトパーサ203へ送る。
スクリプトは、操作対象となるオブジェクトについての性質や設定に関する付加情報としての属性と、そのオブジェクトに対する操作を規定するメソッドとを含んで構成される。このため、Webブラウザ200に定義されていない未定義スクリプトとしては、この属性やメソッドの追加や変更したものが挙げられる。未定義スクリプトを実行するためには、そのスクリプトを解釈し実行するコードが必要となるが、そのコードが、機能を追加するためのプログラムであるプラグイン220として提供され、装置にプラグイン220として実装される。
イベントプロセス201は、ユーザからの値の取得、設定、キー入力等を受け付けた場合、また、セキュリティ上や処理の種類に応じて確認アラート(警告や注意)を表示する必要がある場合等、イベントが発生した場合に、そのイベントに対応するスクリプトの実行要求を生成し、それをスクリプトパーサ203へ送る。例えば、ユーザが任意の値を設定する場合であれば、ユーザによる値の入力によりイベントが発生し、そのイベント発生を受けてその値を含む設定要求を生成し、それをスクリプトパーサ203へ送る。
イベントプロセス201からスクリプトの実行要求を受け付けると、スクリプトパーサ203は、そのスクリプトの実行要求がWebブラウザ200に定義されているものであるか、未定義のものであるかを判断する。その実行要求で要求される処理がスクリプト言語によりハードコーディングされていて、既に定義されているものである場合、スクリプトパーサ203は、その要求がその処理を要求するものと解釈し、その処理を実行することができる。しかしながら、未定義スクリプトの実行要求である場合、スクリプトパーサ203は、それを解釈し、実行するコードが存在しないため、解釈および実行することはできず、プラグインマネージャ210へそのスクリプトの実行を要求する。
プラグインマネージャ210は、未定義スクリプトを実行するためのプラグイン220を複数管理しており、スクリプトパーサ203から受け付けたスクリプト実行要求を基に、そのスクリプトに対応するプラグイン、すなわちそのスクリプトを実行することができるプラグインを探し、その対応するプラグインへそのスクリプトの実行を要求する。
プラグイン220は、プラグインの開発言語に依存せず、プラグインを呼び出す環境が変わっても利用可能にするために、COM(Component Object Model)インタフェースとして実装される。これにより、プラグインを修正する必要がなくなり、様々なプログラミング言語でプラグインの開発を行うことが可能とされる。また、実装の際、プラグインマネージャ210に管理されるように、プラグイン220を識別するための識別情報がプラグインマネージャ210に登録される。
プラグイン220は、装置のリソースにアクセスするために、デバイスSDK240を呼び出す。なお、デバイスSDK240は、メモリに記憶されている値の取得やその設定、入力キーの押下の検知等を行うものである。
プラグイン220は、Webブラウザ200に対し、画面表示等の処理を要求するために、Webブラウザ200から提供されたユーティリティ230を呼び出す。ユーティリティ230は、プラグイン220がWebブラウザ200へ処理を要求するためのインタフェースであって、ライブラリとして実装される。このインタフェースは、様々なプログラムから利用できるように部品化した複数のプログラム部品からなるライブラリであることから、複数のプラグインから利用可能とされる。これにより、プラグイン220から要求されたユーティリティ230は、その要求された処理を、Webブラウザ200がバージョンアップ等され、更新されたとしても、更新後のWebブラウザ200へ適切に通知することができる。
Webブラウザ200では、その通知をイベントプロセス201が受け付け、UI202に対し、所望の表示を指示することができる。
ユーザは、自己が保有あるいは管理するPCやMFPに対し、装置固有の動作をさせたい場合がある。例えば、上記のようにスクリプトとしてのJavascript(登録商標)から装置のログインユーザ名やシリアルナンバーを取得し、それに応じた任意の処理を行う場合や、Javascript(登録商標)の実行により読み取りや印刷を行う場合等である。本発明の装置では、未定義スクリプトをプラグイン220という形で容易に追加し、実装することができるため、Webブラウザ200についてその未定義スクリプトを解釈し実行するコードを実装し直す必要がなく、Webブラウザ200のバージョンアップ等の変更に迅速に対応することができる。
Webブラウザ200にスクリプトの属性やメソッドを追加する場合、その追加したWebブラウザ200に定義されていない未定義スクリプトをプラグイン220として実装するが、複数のアプリケーションソフトウェアが共通して利用するために部品化されたDLL(Dynamic Link Library)ファイルとして実装することができる。
以下、上記の未定義スクリプトをプラグインとして実装した情報処理装置あるいは画像形成装置が行う処理について、図面を参照しながら詳細に説明する。図3は、その装置がある値を取得あるいは設定する処理の基本的な流れを示したシーケンス図である。取得する値としては、システム情報やステータス情報としての各値やパラメータ等を挙げることができる。また、装置への値の設定については、それらの値やパラメータの設定を挙げることができる。実行するスクリプト関数の設定であってもよい。なお、この値の取得あるいは設定する処理は未定義スクリプトを実行することにより実現される処理である。
まず、Webブラウザ200のイベントプロセス201は、ユーザから値の取得あるいは設定の要求を受け付けると、その処理を実現するために未定義スクリプトの実行要求を生成し、その実行要求をスクリプトパーサ203に送る。スクリプトパーサ203は、それを受け取ると、そのスクリプトがWebブラウザ200に定義されているか否かを判断する。ここではこのスクリプトはWebブラウザ200に定義されていないため、スクリプトパーサ203は、未定義スクリプトと判断し、プラグインマネージャ210へそのスクリプトの実行を要求する。プラグインマネージャ210は、そのスクリプトに対応するプラグイン220を探し、そのプラグイン220に対してその実行を要求する。プラグイン220は、その実行要求を受け付けると、デバイスSDK240に対し、そのスクリプトにより要求された値の取得や設定を要求する。
図4は、未定義スクリプトを実行する処理の一例として、確認アラートを表示する処理を実行する処理の流れを示したシーケンス図である。この確認アラート(警告や注意)は、例えば、セキュリティや重要な処理に関係するスクリプトの実行を行う前に表示することができる。
イベントプロセス201は、セキュリティや重要な処理の実行の要求を受け付けたことに応答して、その処理を実現するためにスクリプトの実行要求を生成し、この実行要求をスクリプトパーサ203へ送る。スクリプトパーサ203は、受け取った実行要求から、実行対象のスクリプトがWebブラウザ200に定義されているか否かを判断する。このスクリプトは定義されていないので、スクリプトパーサ203は、未定義スクリプトと判断し、プラグインマネージャ210にその実行を要求する。プラグインマネージャ210は、そのスクリプトに対応するプラグイン220を探し、そのプラグイン220に対し実行を要求する。
このスクリプトは、まず、Webブラウザ200において確認アラートを表示する処理を実行することから、プラグイン220は、ユーティリティ230に対し、確認アラートの表示を要求する。ユーティリティ230は、この要求を受け付け、Webブラウザ200が実行できる実行要求へ変換し、Webブラウザ200のイベントプロセス201に対し、その実行要求を送信し、確認アラートの表示を要求する。イベントプロセス201は、その実行要求を受信し、UI202に確認アラートの表示を指示し、表示させる。
UI202は、その指示に従い、「警告」あるいは「注意」等のメッセージを含む文字列、「OK」および「キャンセル」ボタン等を表示する。これにより、ユーザに対し、ボタンの押下を促す。UI202は、ユーザからの「OK」ボタンの押下または「キャンセル」ボタンの押下を検知すると、イベントプロセス201に押下されたボタンの種類を通知する。イベントプロセス201は、その情報を受け付け、ユーティリティ230に対し、そのボタンの種類を通知し、ユーティリティ230は、プラグイン220に対し、そのボタンの種類を通知する。
この通知を受けて、プラグイン220は、ユーティリティ230に確認アラートを表示する処理の終了を要求する。そして、プラグイン220は、押下されたボタンが「キャンセル」ボタンである場合は処理を中止し、「OK」ボタンである場合は上述したセキュリティや重要な処理に関係するスクリプトの実行を開始し、デバイスSDK240に対して処理を要求する。
図5は、未定義スクリプトを実行する処理の別の例として、上記装置の状態変化によるスクリプトを実行する処理の流れを示したシーケンス図である。例えば、ユーザがキーを押下することにより任意のスクリプトを実行する場合である。
この場合、デバイスSDK240は、装置の状態変化による任意のスクリプト関数を実行するために、Webブラウザ200にその処理を要求するプラグイン220へ装置の状態変化(ここでは、キーの押下)があったことを通知する。この状態変化を通知する処理は、プラグイン220が予めデバイスSDK240に対し、キーの操作があった場合に通知するよう要求しておくことで実現できる。なお、実行するスクリプト関数は、未定義スクリプトの実行により、図3に示したシーケンスに基づき設定されるものとすることができる。
通知を受けたプラグイン220は、ユーティリティ230に対し、任意のスクリプト関数の実行を要求する。ユーティリティ230は、Webブラウザ200で実行できる実行要求に変換し、その実行要求をイベントプロセス201へ送る。イベントプロセス201は、その実行要求を受け付け、スクリプトパーサ203に対し、そのスクリプト関数の実行を要求する。
スクリプトパーサ203は、その実行要求を解釈し、その任意のスクリプト関数が、図3に示したシーケンスに基づき設定されていることから、定義済みスクリプトであり、その定義済みスクリプトを実行することができる。なお、その処理結果は、イベントプロセス201を介してUI202に表示することができる。
図6は、スクリプトパーサ203が行う処理の流れを示したフローチャートである。この処理は、ステップ600から開始し、まず、スクリプトパーサ203は、ステップ610において、イベントプロセス201からスクリプトの実行要求を受け付ける。次に、ステップ620において、スクリプトパーサ203は、実行要求されたスクリプトがWebブラウザ200に定義されているスクリプトであるか否かを判断する。具体的には、スクリプトパーサ203がそのスクリプトを解釈し、実行することができるか否かにより判断する。定義されているスクリプトである場合、ステップ630へ進み、そのスクリプトを実行し、その後、ステップ660へ進み、その実行を要求したイベントプロセス201に処理の結果として返す戻り値を設定し、ステップ680でこの処理を終了する。この場合の戻り値としては、処理結果のほか、処理が正しく終了したことを示す値を含むことができる。
一方、定義されていないと判断すると、ステップ640へ進み、スクリプトパーサ203は、プラグインマネージャ210に対し、その未定義スクリプトの実行を要求する。スクリプトパーサ203は、その実行要求を送った後、ステップ650で、プラグインマネージャ210から処理の結果として何らかの値を戻り値として受け取る。プラグインマネージャ210は、そのスクリプトに対応するプラグイン220を探し、対応するプラグイン220が見つからない場合、未定義応答を返し、その他の場合は実行応答として任意の値を返す。したがって、スクリプトパーサ203は、いずれかの値を受け取り、いずれであるか判断する。
その値が任意の値である場合、ステップ660へ進み、イベントプロセス201へ返す戻り値を設定し、戻り値が未定義応答である場合、ステップ670へ進み、未定義応答として返された「undefined」を設定し、いずれもステップ680でこの処理を終了する。
図7は、プラグインマネージャ210が行う処理の流れを示したフローチャートである。この処理は、ステップ700から開始し、ステップ710で、プラグインマネージャ210は、スクリプトパーサ203からスクリプトの実行要求を受け取り、実行要求されたスクリプトに対応するプラグイン220が見つかるまで、プラグインマネージャ210が管理する複数のプラグインの各々に対し、順に、スクリプトの実行を要求する。プラグインマネージャ210は、複数のプラグイン220の1つ1つに実行要求を送り、プラグイン220からその実行要求に対する応答を受ける。ステップ720において、プラグインマネージャ210は、その応答が実行応答であるか否かを判断し、実行応答であれば、ステップ740へ進み、この処理を終了する。その後の処理は、プラグイン220で行われるからである。
実行応答でない場合、対応するプラグイン220ではないことを示すため、ステップ730へ進み、次のプラグイン220が存在するかを判断する。すなわち、自己が管理するプラグイン220のすべてに対し、スクリプトの実行を要求したかを判断する。まだ要求していないプラグイン220がある場合は、そのプラグインへ要求するために、ステップ710へ戻る。
一方、すべてのプラグイン220に対し要求した場合は、次に要求するプラグイン220が存在しないため、ステップ740へ進み、この処理を終了する。具体的にどのようにして対応するプラグイン220を探すかについては後述する。
図8は、プラグインマネージャ210およびプラグイン220のクラス構成図の例を示したものである。図8に示す「PluginManager」は、プラグインマネージャ210であり、「Device」、「Scan」、「Print」は、プラグイン220によって提供され、図9に示す未定義スクリプトのオブジェクトに対応するものである。このオブジェクトは、COMオブジェクトである。
プラグインマネージャ210およびプラグイン220に対応するクラスは、すべてあらゆるCOMインタフェースを呼び出し可能なように設計されたIDispachインタフェースを継承しており、COMによるアクセスが可能とされている。ここで、クラスは、オブジェクトを定義するモデルであり、継承は、クラスの定義を他のクラスに受け継がせることをいう。したがって、図8の矢線で示すように、「PluginManager」、「Device」、「Scan」、「Print」のいずれのオブジェクトも、「IDispatch」で示されたIDispatchインタフェースにアクセスすることができ、あらゆるCOMインタフェースを呼び出すことが可能である。
未定義スクリプトのオブジェクトに対応する上記のオブジェクトは、図9に示されるような階層構造の上位のオブジェクトからIDispatch::invoke()というメソッドにより呼び出され、要求された処理(呼び出されたオブジェクトのメソッドまたは属性アクセス)の結果を呼び出し元に返す。このIDispatch::invoke()は、呼び出すメソッドを識別するための情報と、その呼び出すメソッドに渡す情報とを指定するように構成されており、指定された情報をIDispatchインタフェースを介してCOMインタフェースへ送る。COMインタフェースは、COMオブジェクトの1つのまとまった機能を提供するための複数のメソッドがプログラムコードとして格納されているメモリ上のアドレスを指定するポインタを保持している。このため、COMインタフェースは、上記の指定された情報のうち、呼び出すメソッドを識別するための情報に基づきメソッドを呼び出し、そのメソッドへ渡すべき情報を送り、処理させることができる。処理結果は、COMインタフェースを介して呼び出し元に返すことができる。
ここで、未定義スクリプトの実行として集約印刷を行う場合について説明する。スクリプトは、例えば「device.print.layout=2up」のように記述されたものであり、この装置では、このスクリプトを以下のようにして処理する。
スクリプトパーサ203は、このスクリプトを含むスクリプトの実行要求をイベントプロセス201から受け取ると、このスクリプトを解釈し、定義されていないスクリプトであるため、未定義スクリプトと判断して、図9に示す最上位のPluginManagerクラスに対して「device.print.layout」に「2up」を設定するように要求する。PluginManagerクラスは、図9に示す実施形態では「window」と示されている。このPluginManagerクラスは、実際には上述したようにIDispatch::invoke()によりIDispatchインタフェースを介してCOMインタフェースへアクセスし、COMインタフェースがその下位に属するクラスのオブジェクトへアクセスすることになるが、ここではその処理についての説明は省略する。したがって、PluginManagerクラスは、その下位に属するクラス中からDeviceクラスを探し、Deviceクラスのオブジェクトに対し、「print.layout」に「2up」を設定するように要求する。
次に、Deviceクラスのオブジェクトは、図9に示す「Device」の下位に属するクラスの中からPrintクラスを探し、Printクラスのオブジェクトに対し、「layout」に「2up」を設定するように要求する。
PluginManagerクラスがDeviceクラスを参照するためにはオブジェクトを識別するための識別情報が必要となるが、識別情報としてプログラムIDを付与し、プラグイン220のインストール、アップデート、アンインストールの際、HDD等の記憶装置に記憶される設定ファイルにこのプログラムIDを記録することで、プラグインマネージャ210とプラグイン220とを関連付けることができる。
このように複数のプラグイン220の管理を容易にするために、複数のプラグイン220が対応するオブジェクトとして階層構造を形成し、その階層構造の上位のオブジェクトから下位のオブジェクトへと順に未定義スクリプトの実行要求を送信して実行可能であるか否かを問い合わせ、実行可能な下位のオブジェクトに未定義のスクリプトを実行させることができる。また、その実行後、その下位のオブジェクトは、実行結果を上位のオブジェクトへ送り、上位のオブジェクトはプラグインマネージャ210へ送り、プラグインマネージャ210は、Webブラウザ200へ通知することにより、Webブラウザ200がそのスクリプトの実行要求が処理されたことを知ることができる。
図10は、ユーティリティ230が実装するWebブラウザ200とプラグイン220との間のインタフェースをプログラミング言語で記述したものを例示した図である。図10(a)は、Webブラウザ200への処理要求を記述した例で、「//」は、それ以降の1行がコメントとして扱われ、この処理がWebブラウザへ要求するものであることを示している。また、「command」は、ダイアログ表示要求等の要求の種類を示し、「args」は、ダイアログに表示するメッセージやボタンの文字列等の要求毎に異なる引数を示している。ここで、引数とは、関数やメソッドを呼び出す際にその関数やメソッドに渡す値である。
図10(a)の例では、即座にイベントを送信して所定のメッセージおよびボタンを含むダイアログを表示させ、イベントが処理されたときは戻り値として「true」が、処理されないときは「false」が返されるようになっている。これは、SendEventリクエストが送られてきた場合に実行されるため、プラグイン220は、このリクエストを送信することで、Webブラウザ200が更新されたか否かに関係なく、Webブラウザ200に対しダイアログ表示を行わせることができる。
図10(b)は、Webブラウザ200からの通知を受け付ける処理を記述したものを例示した図である。図10(b)では、Webブラウザ200と連携するために、呼び出すコールバック関数を、関数ポインタ型名(CALLBACK_FUNC)と引数(ID)とを用いて定義している。図10(b)に示す例では、引数として左ボタンが押下された場合のイベントIDと、右ボタンが押下された場合のイベントIDとを渡し、いずれのボタンが押下されたかの通知を受けることが可能とされている。
その通知を受けるために、事前に、呼び出すべきコールバック関数の登録を行う必要がある。そのための登録処理が記述されている。この登録処理では、コールバック関数のポインタを追加し、その処理が行われたときは戻り値として「true」が、行われないときは「false」が返されるようになっている。
ボタンが押下された通知を受けた後は、さらなる通知は不要である。そこで、その通知を停止するためにコールバック関数のポインタを削除する処理が記述されている。この処理では、上記の通知を受けた後、その通知に使用したコールバック関数のポインタを削除し、その処理が行われたときは戻り値として「true」が、行われないときは「false」が返されるようになっている。
これも、プラグイン220からのリクエストにより、Webブラウザ200が更新されたか否かに関係なく、コールバック関数の登録・解除を行うことができる。
これまで説明してきた情報処理装置および画像形成装置が行う処理についてまとめると以下のようになる。これら装置は、マークアップ言語で記述された文書データを含むコンテンツデータを処理するためのWebブラウザ200を実装する。Webブラウザ200は、検知したイベントを処理するためにスクリプトの実行要求を生成し、その実行要求が定義済みスクリプトの実行要求であるか否かを判定する。
定義済みスクリプトの場合は、スクリプトパーサ203において実行し、定義済みスクリプトでないと判定された場合は、プラグインマネージャ210へその未定義スクリプトの実行要求を送信する。
プラグインマネージャ210は、その未定義スクリプトの実行要求を、機能拡張のために追加して実装された1以上のプラグイン220へ順に送り、実行可能であるか否かを問い合わせる。そして、それらのプラグイン220の中から、その未定義スクリプトを実行できるプラグイン220を見つけ出し、そのプラグイン220にその未定義スクリプトを実行させる。
プラグイン220は、階層構造を形成しており、階層構造の上位のプラグインから下位のプラグインへ順に未定義スクリプトの実行要求を送って実行可能であるか否かを問い合わせ、実行可能な下位のプラグインにその未定義のスクリプトを実行させることができる。
また、プラグイン220からのWebブラウザ200への処理要求を受けて呼び出されるユーティリティ230は、その処理要求に対応しWebブラウザ200が実行可能な実行要求をそのWebブラウザ200へ送り、Webブラウザ200に処理させることができる。
本発明では、これらの各処理ステップを含む情報処理方法を提供することができ、また、その方法を実行するためのコンピュータ可読なプログラムや、そのプログラムが記録されたFD、CD、DVD、SDカード等の記録媒体を提供することも可能である。これまで本発明を上述した実施の形態をもって説明してきたが、本発明は上述した実施の形態に限定されるものではなく、他の実施の形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。