(57)【要約】【課題】非同期的に行われる処理を意識させずにプログラムの記述を可能とする。【解決手段】リモートブラウザ２Ａ，２Ｂから送信される返却値を待つ必要がある場合に、実行部１４によるＪａｖａＳｃｒｉｐｔの実行を中断させて、リモートブラウザ２Ａ，２Ｂから返却値が得られたときに実行を再開させる。これにより、コンテンツ表示装置１とリモートブラウザ２Ａ，２Ｂ間の非同期処理について意識することなくＷＥＢコンテンツのＪａｖａＳｃｒｉｐｔコードを記述することができる。【選択図】図１
2015026151.tif 000002
【特許請求の範囲】
【請求項１】
非同期的に行われる処理を含むスクリプトを実行する情報処理装置であって、
前記スクリプトを実行する実行手段と、
前記実行手段が実行する処理が他の装置において実行される処理の返却値を用いる場合、ＩＤを生成して当該ＩＤを含む通信電文を前記他の装置へ送信して処理を行わせるとともに、前記ＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータをテーブルに登録した上で前記実行手段に前記スクリプトの実行を中断させる実行中断手段と、
前記他の装置から前記ＩＤと前記返却値を含む通信電文を受信したときに、当該通信電文から前記ＩＤと前記返却値を取り出し、前記ＩＤをキーとして前記テーブルから前記スクリプトの実行を再開するのに必要なデータを取得し、前記実行手段に前記返却値を渡して前記スクリプトの実行を再開させる実行再開手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記他の装置において実行される処理は、前記スクリプトを実行する実行手段によってアクセスされるエレメントが備えたメソッドが前記他の装置に処理を行わせるものであって、当該メソッド内で前記スクリプトの実行を中断させることを特徴とする請求項１記載の情報処理装置。
【請求項３】
非同期的に行われる処理を含むスクリプトを実行する情報処理装置による情報処理方法であって、
前記スクリプトを実行するステップと、
前記ステップにおいて実行する処理が他の装置において実行される処理の返却値を用いる場合、ＩＤを生成して当該ＩＤを含む通信電文を前記他の装置へ送信して処理を行わせるとともに、前記ＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータをテーブルに登録した上で前記スクリプトの実行を中断させるステップと、
前記他の装置から前記ＩＤと前記返却値を含む通信電文を受信したときに、当該通信電文から前記ＩＤと前記返却値を取り出し、前記ＩＤをキーとして前記テーブルから前記スクリプトの実行を再開するのに必要なデータを取得し、前記返却値を渡して前記スクリプトの実行を再開させるステップと、
を有することを特徴とする情報処理方法。
【請求項４】
前記他の装置において実行される処理は、前記スクリプトを実行するステップにおいてアクセスされるエレメントが備えたメソッドが前記他の装置に処理を行わせるものであって、当該メソッド内で前記スクリプトの実行を中断させることを特徴とする請求項３記載の情報処理方法。
【請求項５】
イベント発生時に明示的な中断および再開ができる状態で実行されるスクリプトによってアクセスされるデータ構造であって、
スクリプトの実行を中断する処理を行うメソッドを備えたエレメントと、
前記メソッドが呼び出される度に生成されるＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータを格納するテーブルと、
を有することを特徴とするデータ構造。
【請求項６】
請求項１又は２に記載の情報処理装置の各手段としてコンピュータを機能させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、非同期的な処理を扱う技術に関する。
【背景技術】
【０００２】
Ｗｅｂコンテンツをよりダイナミックにするために、ＷｅｂコンテンツにＪａｖａＳｃｒｉｐｔ（登録商標）と呼ばれるスクリプトを記述することが知られている。ＪａｖａＳｃｒｉｐｔでは、状態に応じた動作を記述するために、オブジェクトのメソッドを呼び出したり、オブジェクトのプロパティ値を取得するなど、状態を示す値を取得することが可能である。例えば、動画を再生するためのエレメントを参照するオブジェクトをｖｉｄｅｏという変数に割り当て、そのエレメントが特定タイプの動画再生が可能かどうかを確認するメソッド（ｃａｎＰｌａｙＴｙｐｅ）を呼び出したり、現在の再生位置のプロパティ値（ｃｕｒｒｅｎｔＴｉｍｅ）を取得することができる。図７，８にＪａｖａＳｃｒｉｐｔの例を示す。図７の例では、ｖｉｄｅｏエレメントのｃａｎＰｌａｙＴｙｐｅメソッドの戻り値を変数ｔｙに代入している。エレメントから得られる値は、図８の例のｃｕｒｒｅｎｔＴｉｍｅプロパティのように、変数に代入せずに条件文中に記載したり、加減乗除などの式の一部として使用することも可能である。
【０００３】
非特許文献１では、Ｗｅｂコンテンツの一部を複数のデバイスのブラウザに表示させることが提案されている。非特許文献１では、Ｗｅｂサーバとデバイスの間に中間ブラウザを配置し、中間ブラウザがデバイス間の通信やＪａｖａＳｃｒｉｐｔを実行することで、複数のデバイスを連携させている。Ｗｅｂコンテンツの一部を複数のデバイスのブラウザに表示させることで、例えば、Ｗｅｂコンテンツ中に動画を表示する部分と動画を操作する部分が含まれる場合、動画の表示をテレビのブラウザで行い、動画の操作をスマートフォンのブラウザで行うことが可能となる。この場合、スマートフォン上の操作が中間ブラウザに送られて、中間ブラウザがテレビにその操作内容に対応する動作を実行させる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】中茂睦裕、他４名、“中間ブラウザによるマルチデバイス連携技術の提案”、第８７回ＧＮ研究発表会、情報処理学会、２０１３年３月、第2013-GN-87巻、第6号、p.1-6
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１の技術では、中間ブラウザが異なるデバイス上のブラウザ（以下、「リモートブラウザ」という）に展開されているエレメントの状態を取得するためには、そのデバイスとの通信が不可欠である。具体的には、図７で示したＪａｖａＳｃｒｉｐｔは中間ブラウザで実行されるが、ｖｉｄｅｏエレメントがリモートブラウザに展開されている場合は、ｃａｎＰｌａｙＴｙｐｅメソッドを起動するのはリモートブラウザとなる。そこで、リモートブラウザ上でｃａｎＰｌａｙＴｙｐｅメソッドを起動するための通信電文ＲＥＱ１と、そのメソッドの返却値を通知するための通信電文ＲＥＳ１を予め決めておき、中間ブラウザでｃａｎＰｌａｙＴｙｐｅメソッドが実行されるときに、中間ブラウザからリモートブラウザへＲＥＱ１を送信し、リモートブラウザから中間ブラウザへ返信されたＲＥＳ１から返却値を取り出し、ｃａｎＰｌａｙＴｙｐｅメソッドの返却値とする。同様に、図８の例では、ｃｕｒｒｅｎｔＴｉｍｅプロパティを参照するための通信電文ＲＥＱ２と、ｃｕｒｒｅｎｔＴｉｍｅプロパティの値を通知するための通信電文ＲＥＳ２を予め決めておき、中間ブラウザでｃｕｒｒｅｎｔＴｉｍｅプロパティが参照されたときに、中間ブラウザからリモートブラウザへＲＥＱ２を送信し、リモートブラウザから中間ブラウザへ返信されたＲＥＳ２から返却値を取り出し、ｃｕｒｒｅｎｔＴｉｍｅプロパティの値とする。
【０００６】
非特許文献１では、中間ブラウザとリモートブラウザとの間の通信にＷｅｂＳｏｃｋｅｔを用いている。ＷｅｂＳｏｃｋｅｔ通信をＪａｖａＳｃｒｉｐｔにより処理するためには、通信電文を受信した際に呼び出されるコールバック関数を事前に定義する必要がある。そのため、リモートブラウザで展開されたエレメントのメソッドの起動、プロパティ値の取得をする場合、返却値を取り出すコールバック関数を記述する必要がある。具体的には、図７の３行目の変数ｔｙはリモートブラウザからＲＥＳ１を受信したタイミングで代入されるので、図７の４行目の変数ｔｙの値を出力する部分は、リモートブラウザからＲＥＳ１を受信したタイミングで実行する必要がある。そのため、図７の例は、図９に示すように、リモートブラウザからＲＥＳ１を受信したときに実行されるコールバック関数を分けて記述する必要がある。なお、図９の３行目のｒｅｑｕｅｓｔ＿ｃａｎＰｌａｙＴｙｐｅは、中間ブラウザ上でｃａｎＰｌａｙＴｙｐｅメソッドを起動する代わりに、リモートブラウザへＲＥＱ１を送信し、かつ、ＲＥＱ１受信時に、第２引数で指定した関数ｃａｌｌｂａｃｋ１を呼び出すよう指定したメソッドである。さらに、図８の例は、ｆｌａｇの値に応じて８行目のｃｏｎｓｏｌｅ．ｌｏｇ（ｆｌａｇ）を実行するタイミングが変わる。具体的には、ｆｌａｇの値が１でｃｕｒｒｅｎｔＴｉｍｅプロパティを参照する場合はリモートブラウザからＲＥＳ２を受信してｃｕｒｒｅｎｔＴｉｍｅプロパティの値を取得したときがｃｏｎｓｏｌｅ．ｌｏｇ（ｆｌａｇ）を実行するタイミングとなり、ｆｌａｇの値が１以外でｃｕｒｒｅｎｔＴｉｍｅプロパティを参照しない場合はｓａｐｍｌｅ２を呼び出したときがｃｏｎｓｏｌｅ．ｌｏｇ（ｆｌａｇ）を実行するタイミングとなる。そのため、図８のＪａｖａＳｃｒｉｐｔを中間ブラウザに対応するように単純に書き換えることさえも困難であるという問題があった。
【０００７】
また、従来のＷｅｂコンテンツは１つのブラウザで閲覧されることを前提としており、エレメントのプロパティの値を参照する処理などを非同期的に処理する必要はなかった。非特許文献１の技術を用いてＷｅｂコンテンツをリモートブラウザに表示させる場合、ＪａｖａＳｃｒｉｐｔが中間ブラウザで実行されることを考慮し、リモートブラウザで非同期的に行われる処理に対応させてＪａｖａＳｃｒｉｐｔを記述しなければならないという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであり、非同期的に行われる処理を意識させずにプログラムの記述を可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
第１の本発明に係る情報処理装置は、非同期的に行われる処理を含むスクリプトを実行する情報処理装置であって、前記スクリプトを実行する実行手段と、前記実行手段が実行する処理が他の装置において実行される処理の返却値を用いる場合、ＩＤを生成して当該ＩＤを含む通信電文を前記他の装置へ送信して処理を行わせるとともに、前記ＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータをテーブルに登録した上で前記実行手段に前記スクリプトの実行を中断させる実行中断手段と、前記他の装置から前記ＩＤと前記返却値を含む通信電文を受信したときに、当該通信電文から前記ＩＤと前記返却値を取り出し、前記ＩＤをキーとして前記テーブルから前記スクリプトの実行を再開するのに必要なデータを取得し、前記実行手段に前記返却値を渡して前記スクリプトの実行を再開させる実行再開手段と、を有することを特徴とする。
【００１０】
上記情報処理装置において、前記他の装置において実行される処理は、前記スクリプトを実行する実行手段によってアクセスされるエレメントが備えたメソッドが前記他の装置に処理を行わせるものであって、当該メソッド内で前記スクリプトの実行を中断させることを特徴とする。
【００１１】
第２の本発明に係る情報処理方法は、非同期的に行われる処理を含むスクリプトを実行する情報処理装置による情報処理方法であって、前記スクリプトを実行するステップと、前記ステップにおいて実行する処理が他の装置において実行される処理の返却値を用いる場合、ＩＤを生成して当該ＩＤを含む通信電文を前記他の装置へ送信して処理を行わせるとともに、前記ＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータをテーブルに登録した上で前記スクリプトの実行を中断させるステップと、前記他の装置から前記ＩＤと前記返却値を含む通信電文を受信したときに、当該通信電文から前記ＩＤと前記返却値を取り出し、前記ＩＤをキーとして前記テーブルから前記スクリプトの実行を再開するのに必要なデータを取得し、前記返却値を渡して前記スクリプトの実行を再開させるステップと、を有することを特徴とする。
【００１２】
上記情報処理方法において、前記他の装置において実行される処理は、前記スクリプトを実行するステップにおいてアクセスされるエレメントが備えたメソッドが前記他の装置に処理を行わせるものであって、当該メソッド内で前記スクリプトの実行を中断させることを特徴とする。
【００１３】
第３の本発明に係るデータ構造は、イベント発生時に明示的な中断および再開ができる状態で実行されるスクリプトによってアクセスされるデータ構造であって、スクリプトの実行を中断する処理を行うメソッドを備えたエレメントと、前記メソッドが呼び出される度に生成されるＩＤをキーとして前記スクリプトの実行を再開するのに必要なデータを格納するテーブルと、を有することを特徴とする。
【００１４】
第４の本発明に係る情報処理プログラムは、上記情報処理装置の各手段としてコンピュータを機能させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、非同期的に行われる処理を意識させずにプログラムの記述を可能とすることができる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態におけるコンテンツ表示装置の構成を示す機能ブロック図である。
【図２】ＤＯＭデータ記憶部に記憶されるＤＯＭの例を示す図である。
【図３】ＪａｖａＳｃｒｉｐｔの実行を明示的に中断、再開できるように書き換えたｄｉｓｐａｔｃｈＥｖｅｎｔ関数の実装例を示す図である。
【図４】ＪａｖａＳｃｒｉｐｔの実行を中断して再開する処理の流れを示すシーケンス図である。
【図５】非同期的に行われるメソッドの実装例を示す図である。
【図６】リモートブラウザからプロパティの値を取得するＧｅｔｔｅｒ関数の実装例を示す図である。
【図７】ＷＥＢコンテンツに含まれるＪａｖａＳｃｒｉｐｔの例を示す図である。
【図８】ＷＥＢコンテンツに含まれるＪａｖａＳｃｒｉｐｔの例を示す図である。
【図９】図７に示すＪａｖａＳｃｒｉｐｔを非同期的に行われるメソッドに対応させて記述した例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を用いて説明する。
【００１８】
図１は、本実施の形態におけるコンテンツ表示装置の構成を示す機能ブロック図である。本実施の形態におけるコンテンツ表示装置１は、ＷＥＢコンテンツを取得し、取得したＷＥＢコンテンツを分割してリモートブラウザ２Ａ，２Ｂそれぞれに送信し、リモートブラウザ２Ａ，２ＢそれぞれにＷＥＢコンテンツの一部を表示させる。例えば、動画を表示するＷＥＢコンテンツを受信し、テレビなどのリモートブラウザ２Ａに動画を表示させ、スマートフォンなどのリモートブラウザ２Ｂに操作ボタンを表示させることで、ユーザは、手元のスマートフォンで操作をしながらテレビで動画を見ることが可能となる。なお、図１では、一例として２つのリモートブラウザ２Ａ，２Ｂを示したが、これに限るものではない。
【００１９】
図１に示すコンテンツ表示装置１は、ＷＥＢコンテンツ評価部１１、ＤＯＭデータ記憶部１２、ＤＯＭデータ送信部１３、実行部１４、ＤＯＭアクセス部１５、ブラウザ通信部１６、およびイベント受信部１７を備える。コンテンツ表示装置１が備える各部は、演算処理装置、記憶装置等を備えたコンピュータにより構成して、各部の処理がプログラムによって実行されるものとしてもよい。このプログラムはコンテンツ表示装置１が備える記憶装置に記憶されており、磁気ディスク、光ディスク、半導体メモリ等の記録媒体に記録することも、ネットワークを通して提供することも可能である。以下、コンテンツ表示装置１の各部について説明する。
【００２０】
ＷＥＢコンテンツ評価部１１は、Ｗｅｂサーバ（図示せず）などからＷＥＢコンテンツを取得し、ＷＥＢコンテンツに含まれる、ＨＴＭＬデータ、ＣＳＳ（Ｃａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔ）データをＤＯＭデータ記憶部１２へ送り、ＪａｖａＳｃｒｉｐｔコードを実行部１４に送る。
【００２１】
ＤＯＭデータ記憶部１２は、ＨＴＭＬデータを解析して、ツリー状のデータ構造であるＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）に展開して記憶する。ＨＴＭＬデータの１つのタグがＤＯＭの１つのエレメントを構成し、タグで囲まれた部分が子エレメントとなる。また、ＤＯＭデータ記憶部１２は、ＤＯＭのエレメントを表示する態様を指定するＣＳＳデータも記憶する。
【００２２】
ＤＯＭデータ送信部１３は、ＤＯＭデータ記憶部１２に記憶されたＤＯＭからリモートブラウザ２Ａ，２Ｂそれぞれに表示させるＷＥＢコンテンツの一部に対応する部分木を判定し、リモートブラウザ２Ａ，２Ｂそれぞれに対応する部分木を送信する。リモートブラウザ２Ａ，２Ｂへ送信する部分木を判定する方法としては、例えばＨＴＭＬデータ中にｄｅｖｉｃｅという属性を設けておき、ｄｅｖｉｃｅ属性の値に基いて判定する。図２に、ＤＯＭデータ記憶部１２に記憶されるＤＯＭの例を示す。同図に示すＤＯＭには、ｄｅｖｉｃｅ属性に“ＴＶ”と“ｐｈｏｎｅ”が設定されたエレメントが存在する。ｄｅｖｉｃｅ属性に“ＴＶ”が設定されたエレメントをルートとする部分木Ａをリモートブラウザ２Ａに送信し、ｄｅｖｉｃｅ属性に“ｐｈｏｎｅ”が設定されたエレメントをルートとする部分木Ｂをリモートブラウザ２Ｂに送信する。
【００２３】
ＤＯＭデータ記憶部１２、ＤＯＭデータ送信部１３を構成する方法としては、サーバサイド上のＪａｖａＳｃｒｉｐｔ実行環境として知られているｎｏｄｅ．ｊｓというプラットフォームを用いることができる。ｎｏｄｅ．ｊｓには、ＪａｖａＳｃｒｉｐｔでＤＯＭを操作するＪＳＤＯＭと呼ばれるソフトウェアライブラリも知られている。
【００２４】
実行部１４は、Ｗｅｂコンテンツに含まれるＪａｖａＳｃｒｉｐｔコードを実行する。ＤＯＭのエレメントでイベントが発生した際には対応するイベントリスナを実行する。イベントリスナは、イベントが発生したときに実行されるＪａｖａＳｃｒｉｐｔで記載されたプログラムである。
【００２５】
ＤＯＭアクセス部１５は、実行部１４がＤＯＭのエレメントにアクセスする際に、アクセス対象のＤＯＭ（部分木）を保持するリモートブラウザ２Ａ，２Ｂに通知してリモートブラウザ２Ａ，２Ｂに自身が保持するＤＯＭへアクセスさせて返却値を受け取る。なお、エレメントのメソッドを呼び出して返却値がある場合や、エレメントのプロパティを参照する場合など、リモートブラウザ２Ａ，２Ｂから返却値を受信する場合は、リモートブラウザ２Ａ，２Ｂに自身が保持するＤＯＭに対するアクセスを実行させる通信電文を送信した後、実行部１４にＪａｖａＳｃｒｉｐｔの実行を中断させて、リモートブラウザ２Ａ，２Ｂから返却値を受け取った後で、ＪａｖａＳｃｒｉｐｔの実行を再開させる。ＪａｖａＳｃｒｉｐｔの実行を中断して再開する処理の詳細については後述する。
【００２６】
ブラウザ通信部１６は、リモートブラウザ２Ａ，２Ｂとの間で通信を行い、変更するＤＯＭデータ、メソッドの実行を要求する通信電文などを送信し、メソッドの返却値やプロパティの値を含む通信電文などを受信する。ブラウザ通信部１６は、例えばＷｅｂＳｏｃｋｅｔサーバとして構築しておき、リモートブラウザ２Ａ，２Ｂとの間でＷｅｂＳｏｃｋｅｔコネクションを確立してデータを送受信する。
【００２７】
イベント受信部１７は、リモートブラウザ２Ａ，２Ｂ上で発生した、ボタンクリック等のイベント通知を受信し、ＤＯＭデータ記憶部１２に記憶したＤＯＭの対応するエレメントで擬似的に同種のイベントを発生させて、ＤＯＭデータ記憶部１２に記憶したＤＯＭのエレメントに登録されているイベントリスナを実行部１４に実行させる。リモートブラウザ２Ａ，２Ｂが保持するＤＯＭのエレメントに、イベントが発生した時にイベント通知をコンテンツ表示装置１へ送信する処理をイベントリスナとして登録しておくことで、リモートブラウザ２Ａ，２Ｂで発生したイベントをコンテンツ表示装置１で処理できる。
【００２８】
次に、ＪａｖａＳｃｒｉｐｔの実行を中断して再開する処理について説明する。
【００２９】
明示的にプログラムを中断、再開する技術としてＦｉｂｅｒと呼ばれる技術がある。Ｆｉｂｅｒにおいては、実行中のプログラムが、明示的な中断要求をすることで、プログラム実行継続に必要なデータを一時記憶域に保存してから実行を停止する。停止したプログラムは、明示的な再開要求をすることで、一時記憶域からデータを復元して実行を再開する。本実施の形態では、Ｆｉｂｅｒをｎｏｄｅ．ｊｓ上で実装したｎｏｄｅ−ｆｉｂｅｒｓと呼ばれるライブラリを用いた。ｎｏｄｅ−ｆｉｂｅｒｓでは、中断する可能性のあるプログラムをｎｏｄｅ−ｆｉｂｅｒｓにおけるＦｉｂｅｒオブジェクト内で実行し、プログラムの中でＦｉｂｅｒ．ｙｉｅｌｄ関数を呼び出すことでプログラムの実行が中断される。また、その中断状態を保持しているＦｉｂｅｒオブジェクトに対してｒｕｎメソッドを呼び出すことで、中断しているプログラムが再開される。
【００３０】
実行部１４においてＪａｖａＳｃｒｉｐｔの実行を明示的に中断、再開できるように、イベントリスナを起動するためのｄｉｓｐａｔｃｈＥｖｅｎｔ関数を図３のように書き換えて、イベントが発生したときに、イベントリスナがＦｉｂｅｒオブジェクト内で実行されるようにする。これにより、イベントリスナはＦｉｂｅｒオブジェクト内で実行されて、プログラムの実行を明示的に中断、再開することが可能となる。
【００３１】
図４は、ＪａｖａＳｃｒｉｐｔの実行を中断して再開する処理の流れを示すシーケンス図である。以下、実装例を参照しつつ、ＪａｖａＳｃｒｉｐｔの実行を中断して再開する処理について説明する。
【００３２】
実行部１４によりリモートブラウザ２Ａ，２Ｂにおいて非同期的に行われるメソッドが呼び出されると、実行を再開するＦｉｂｅｒオブジェクトを識別するために用いるＩＤを生成し（ステップＳ１１）、生成したＩＤを埋め込んだ要求電文をリモートブラウザ２Ａ，２Ｂへ送信し（ステップＳ１２）、ＩＤをキーとしてテーブルにＦｉｂｅｒオブジェクトを登録した後（ステップＳ１３）、実行部１４にＪａｖａＳｃｒｉｐｔの実行を中断させる（ステップＳ１４）。ここまでの処理により、リモートブラウザ２Ａ，２Ｂに要求電文が送信され、実行部１４で実行されているＪａｖａＳｃｒｉｐｔの処理が中断される。リモートブラウザ２Ａ，２Ｂにおいて非同期的に行われるメソッドについては、リモートブラウザ２Ａ，２Ｂに処理を要求した後でプログラムの実行を中断するようにＤＯＭアクセス部１５を実装する。非同期的に行われるメソッドの実装例を図５に示す。図５に示す実装例では、２行目でＩＤを生成し、３行目でＩＤとともに処理内容をリモートブラウザ２Ａ，２Ｂに送信し、４行目でＩＤにＦｉｂｅｒオブジェクトを関連つけて記憶している。３行目のＲＥＱ１は、リモートブラウザ２Ａ，２Ｂに処理させる内容を示す値である。リモートブラウザ２Ａ，２Ｂに処理を要求した後は、５行目でＦｉｂｅｒ．ｙｅｉｌｄ関数を呼び出して該当メソッドを呼び出したＪａｖａＳｃｒｉｐｔの実行を中断する。この時点で、実行部１４はＪａｖａＳｃｒｉｐｔの実行を中止し、イベント発生を待つ処理など他の処理を行う。
【００３３】
リモートブラウザ２Ａ，２Ｂは、要求電文を受信すると（ステップＳ２１）、要求電文で指定された処理を実行し（ステップＳ２２）、要求とともに受信したＩＤと得られた返却値をコンテンツ表示装置１へ送信する（ステップＳ２３）。図５に示す実装例では、ＲＥＱ１に対応する通信電文ＲＥＳ１にＩＤと返却値を埋め込んで送信する。
【００３４】
コンテンツ表示装置１は、リモートブラウザ２Ａ，２ＢからＩＤと返却値を受信すると（ステップＳ３１）、ＩＤをキーとしてテーブルからＦｉｂｅｒオブジェクトを取得し（ステップＳ３２）、返却値を引数に入れて特定したＦｉｂｅｒオブジェクトのｒｕｎメソッドを呼び出すことで中断しているＪａｖａＳｃｒｉｐｔの実行を再開させる（ステップＳ３３）。ＪａｖａＳｃｒｉｐｔの実行が再開されると、図５の実装例の５行目の変数ｒｅｔに返却値が代入されて、ｒｅｑ＿ｃａｎＰｌａｙＴｙｐｅ関数からの返却値として呼び出し元に渡される。図５に示したｒｅｑ＿ｃａｎＰｌａｙＴｙｐｅ関数をオリジナルのｃａｎＰｌａｙＴｙｐｅに置き換えておけば、ＷＥＢコンテンツに含まれるＪａｖａＳｃｒｉｐｔコードでは、リモートブラウザ２Ａ，２Ｂの処理を待つ記載をする必要がなくなり、ｃａｎＰｌａｙＴｙｐｅ関数を記載しておくだけで、リモートブラウザ２Ａ，２Ｂに処理を実行させて返却値を受信する処理が実行される。
【００３５】
ｖｉｄｅｏ．ｃｕｒｒｅｎｔＴｉｍｅなどリモートブラウザ２Ａ，２Ｂが保持するエレメントのプロパティ値へのアクセスについては、ＪａｖａＳｃｒｉｐｔのＧｅｔｔｅｒ関数を定義する方法を用いる。図６に、プロパティの値を得るＧｅｔｔｅｒ関数の例を示す。図６の実装例の処理の内容は、図５の実装例の処理の内容とほぼ同じであり、リモートブラウザ２Ａ，２ＢへＲＥＱ２を送信してプロパティの値を問い合わせた後、リモートブラウザ２Ａ，２ＢからＲＥＳ２を受信してプロパティの値が得られるまでＪａｖａＳｃｒｉｐｔの実行を中断する。
【００３６】
なお、ＤＯＭ  ＡＰＩとして規定されている値を返却するメソッドやプロパティ値の参照すべてに対して上述のプログラムの実行を中断・再開する処理が必要というわけではない。例えば、エレメントには、そのＩＤを参照するための“ｉｄ”というプロパティがあるが、このｉｄプロパティの値は、ＤＯＭデータ記憶部１２とリモートブラウザ２Ａ，２Ｂによって差異が生じるものではないため、ＤＯＭデータ記憶部１２上で参照すればよい。ＤＯＭデータ記憶部１２上を参照するときは遅延が生じないので、値が得られるまでＪａｖａＳｃｒｉｐｔの実行を中断する処理を行わなくてもよい。したがって、ＤＯＭアクセス部１５では、各ＤＯＭ  ＡＰＩに対して、リモートブラウザ２Ａ，２Ｂ上でのメソッドの起動、プロパティ値の参照が必要となるものに対してのみ、上述のｒｅｑ＿ＸＸＸＸＸ、ｇｅｔ＿ＸＸＸＸＸを実装すればよい。
【００３７】
以上説明したように、本実施の形態によれば、リモートブラウザ２Ａ，２Ｂから送信される返却値を待つ必要がある場合に、実行部１４によるＪａｖａＳｃｒｉｐｔの実行を中断させて、リモートブラウザ２Ａ，２Ｂから返却値が得られたときに実行を再開させることで、コンテンツ表示装置１とリモートブラウザ２Ａ，２Ｂ間の非同期処理について意識することなくＷＥＢコンテンツのＪａｖａＳｃｒｉｐｔコードを記述することができる。このことにより、ＷＥＢコンテンツの一部をリモートブラウザに送信する場合でも、ＷＥＢコンテンツを１つのブラウザで表示させるときと同様の同期処理の態様でＷＥＢコンテンツに含まれるＪａｖａＳｃｒｉｐｔコードを記述することができる。
【符号の説明】
【００３８】
１…コンテンツ表示装置
１１…ＷＥＢコンテンツ評価部
１２…ＤＯＭデータ記憶部
１３…ＤＯＭデータ送信部
１４…実行部
１５…ＤＯＭアクセス部
１６…ブラウザ通信部
１７…イベント受信部
２Ａ，２Ｂ…リモートブラウザ
【図１】
2015026151.tif 000003
【図２】
2015026151.tif 000004
【図３】
2015026151.tif 000005
【図４】
2015026151.tif 000006
【図５】
2015026151.tif 000007
【図６】
2015026151.tif 000008
【図７】
2015026151.tif 000009
【図８】
2015026151.tif 000010
【図９】
2015026151.tif 000011