[第1の実施形態]
以下、第1の実施形態について図面を用いて説明する。
図1は、第1の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。
中間ブラウザサーバ装置1(通信装置)は、コンテンツ配信装置3からコンテンツデータを取得し、取得したコンテンツデータからスクリプトを抽出および実行し、その結果をDOM(Document Object Model)に反映し、DOMからクライアント装置で実行するスクリプト(以下、クライアントスクリプトと呼ぶ)を抽出および変換し、クライアント装置に送信する。クライアント装置2は受信したDOMからスクリプトを抽出および実行し、その結果をDOMに反映し、DOMを表示する。
同図に示す中間ブラウザサーバ装置1は、コンテンツ取得部11、スクリプト抽出部12、スクリプト実行部13、DOM記憶部14、データ変換部15、データ通信部16を備える。
以下、中間ブラウザサーバ装置1の各部について説明する。
コンテンツ取得部11は、コンテンツ配信装置3に接続し、HTTP等の公知のプロトコルによって、コンテンツデータをダウンロードする。コンテンツ取得部11により取得されたコンテンツデータはスクリプト抽出部12に送られる。
図2にクライアントスクリプトを含むコンテンツデータの例を示す。この例では、クライアントスクリプトはcscript要素で指定されているファイル内に記述されている。
スクリプト抽出部12は、コンテンツデータをDOM記憶部14に送信する一方、コンテンツデータを解析して、JavaScriptコードを抽出する。JavaScriptコードを取得する際には、HTMLのscript要素の属性として記述されているJavaScriptファイルのURIを取得し、URIに示されるロケーションのJavaScriptファイルを取得する方法と、HTMLのscript要素の内容として記述されているJavaScriptコードを読み取る方法がある。別のファイルが指定されている場合はコンテンツ取得部11に指定ファイルの取得を指示し、抽出する。抽出されたJavaScriptコードはスクリプト実行部13へ送られ、コンテンツデータはDOM記憶部14に送られる。
図3にJavaScriptコードの例を示す。
スクリプト実行部13はJavaScriptコードを解釈して実行する。これは、一般にはJavaScriptエンジンと呼ばれる公知の技術であり、オープンソースソフトウェアとして広く利用可能なJavaScriptエンジンも存在する(例えば、http://code.google.com/p/v8/)。スクリプト実行部13は、JavaScriptコードの実行結果をDOM記憶部14に送信する。
DOM記憶部14は、スクリプト抽出部12から受信したコンテンツデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、DOM記憶部14は、JavaScriptコードの実行結果をDOMに反映し、DOMをデータ変換部15に送信する。
データ変換部15は、DOM記憶部14から受信したDOMからクライアントスクリプトを示す記述部分を抽出し、その記述部分を、HTMLにJavaScriptコードを記載する際と同様の書式に変換する。また、データ変換部15は、DOMから、スクリプト抽出部12で抽出されるscript要素を削除する。データ変換部15は、書式変換、script要素削除後のDOM(以下、コンテンツデータ)をデータ通信部16に送信する。
データ通信部16は、データ変換部15から受信したコンテンツデータをクライアント装置2(2A、2B)に送信する。
図4にデータ通信部16がクライアント装置2に送信するコンテンツデータの例を示す。
図4(a)は、クライアント装置2Aに送信されるコンテンツデータの例であり、図4(b)は、クライアント装置2Bに送信されるコンテンツデータの例である。
図1に示す中間ブラウザサーバ装置1の各部は一般的なWebブラウザを用いて構成できる。データ変換部15についてはJavaScriptで実装して構成することができる。例えば、cscriptという新たなHTML要素を定義する処理と、HTML内のcscript要素を取得して、その要素それぞれに対してscript要素を作成し、各script要素の属性値に対応するcscript要素の属性値を代入し、代入が終わったらcscript要素を削除する処理と、script要素を削除する処理を記載したJavaScriptコードを中間ブラウザサーバ装置1のスクリプト実行部13が実行することで、データ変換部15を機能させることができる。
データ通信部16についてはWebSocketサーバを作成して、複数のWebSocketクライアント装置から接続を受け付ける処理と、クライアント識別子等で指定されたWebSocketクライアント装置へのデータ送信処理を記載したJavaScriptコードを中間ブラウザサーバ装置1のスクリプト実行部13が実行することで、データ通信部16を機能させることができる。
次に、クライアント装置2について説明する。クライアント装置2Aとクライアント装置2Bは同じ構成である。
クライアント装置2は、データ通信部21、スクリプト抽出部22、スクリプト実行部23、DOM記憶部24、表示部25、コンテンツ取得部26を備える。
データ通信部21は、中間ブラウザサーバ装置1のデータ通信部16から送信されるコンテンツデータを受信し、コンテンツデータをスクリプト抽出部22に送信する。
スクリプト抽出部22は、コンテンツデータをDOM記憶部14に送信する一方、コンテンツデータを解析して、クライアントスクリプトであるJavaScriptコードを抽出する。JavaScriptを取得する際には、HTMLのscript要素の属性として記述されているJavaScriptファイルのURIを取得し、URIに示されるロケーションのJavaScriptファイルを取得する方法と、HTMLのscript要素の内容として記述されているJavaScriptのコードを読み取る方法がある。別のファイルが指定されている場合はコンテンツ取得部26に指定ファイルの取得を指示し、抽出する。抽出されたJavaScriptコードはスクリプト実行部23へ送られ、コンテンツデータはDOM記憶部24に送られる。
図5にクライアントスクリプトであるJavaScriptコードの例を示す。
スクリプト実行部23はクライアントスクリプト(JavaScriptコード)を解釈して実行する。これは、一般にはJavaScriptエンジンと呼ばれる公知の技術である。スクリプト実行部23は、クライアントスクリプト(JavaScriptコード)の実行結果をDOM記憶部24に送信する。
DOM記憶部24は、スクリプト抽出部22から受信したコンテンツデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、DOM記憶部24は、クライアントスクリプト(JavaScriptコード)の実行結果をDOMに反映する。
表示部25は、DOM記憶部24に記憶されているDOMを描画してクライアント装置の表示機能に表示する。この表示機能はクライアント装置内にディスプレイがあってもよいし、有線無線を問わず接続された別の表示専用装置であってもよい。
コンテンツ取得部26は、スクリプト抽出部22よりファイル取得の指示を受け、ファイルを取得しスクリプト抽出部22にわたす。
これらクライアント装置2の各部は一般的なWebブラウザを用いて構成できる。データ通信部21についてはJavaScriptで実装して構成することができる。例えば、WebSocketクライアント装置を作成して中間ブラウザサーバ装置1のWebSocketサーバへ接続する処理と、WebSocketサーバからのデータ受信時の処理としてon_receive関数を登録する処理を記載したJavaScriptコードをクライアント装置2のスクリプト実行部23が実行することで、データ通信部21を機能させることができる。
次に、第1の実施形態における中間ブラウザサーバ装置1の動作について説明する。
まず、図2に示すコンテンツデータを取得した時の動作について説明する。
コンテンツ取得部11は、図2のコンテンツデータをHTTPによりコンテンツ配信装置3から取得し、スクリプト抽出部12へコンテンツデータをわたす。
スクリプト抽出部12は、受け取ったコンテンツデータのHTMLに含まれている、<script type="text/javascript" src="sample.js">というタグがスクリプトを示すことを認識し、コンテンツ取得部11に対してscript要素のsrc属性が示すURIのsample.jsを取得するよう指示する。取得されたsample.js(図3)はスクリプト実行部13にわたされる。一方、<cscript type=“text/javascript” src=“sample-client.js” clientid=“A2”>というタグがあるが、HTMLタグとして標準ではないcscript要素に対しては何も行わない。スクリプト抽出後に、コンテンツデータはDOM記憶部14にわたされる。
スクリプト実行部13は、受け取ったsample.jsである図3のJavaScriptコードを実行し、実行結果をDOM記憶部14に反映させる。
DOM記憶部14は、スクリプト抽出部12から受信したコンテンツデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、DOM記憶部14は、JavaScriptコードの実行結果をDOMに反映する。
ここで、コンテンツ取得部11がDOM記憶部14へコンテンツデータをわたしDOMとして保持し、DOM記憶部14からスクリプト抽出部12がスクリプトを抽出し、スクリプト実行部13がスクリプトを実行し結果をDOM記憶部14に反映するという処理の順番としてもよい。
データ変換部15は、DOM記憶部14に保持されているDOMに、(A)共通的な処理と、(B)各クライアント装置に合わせて変換する処理を行う。
(A)共通的な処理としては、(A1)cscriptという新たなHTML要素を定義する処理、(A2)script要素を削除する処理を行う。
cscript要素を定義する処理により、HTMLタグとして標準ではないcscript要素をHTMLの要素と同等に取り扱うことができる。cscript要素が持つ属性はscript要素と同じ属性を少なくとも持つように定義する。script要素を削除する処理により、中間ブラウザサーバ装置で実行されるスクリプトは削除される。
(B)各クライアント装置に合わせて変換する処理は、データ通信部16で保持するクライアント識別子に応じて行う。共通的な処理を先に実行することで、cscript要素はHTML要素と同等に取り扱うことができるようになっている。図2のコンテンツデータのclientid属性に2Aという値が指定されている。この場合、クライアント装置2Aに対して、このcscript要素がクライアントスクリプトとして有効となり、他のクライアント装置に対しては無効となる。
(B1)有効なクライアント装置に向けてのデータ変換では、cscript要素に対応してscript要素を作成し、そのscript要素の各属性には対応するcscript要素の属性値を設定する。script要素に対応する属性がないcscript要素の属性は特に処理を行なわない。属性値の設定が終わったら元のcscript要素を削除する。
このデータ変換処理の実行結果を、図4(a)に示す。コンテンツ取得部11が取得した時点でのscript要素の内容であるJavaScriptコードは実行され、その結果が反映され、id属性がgreetingのdiv要素に、Hello worldという文字列が挿入されている。また、コンテンツ取得部11が取得した時点ではcscript要素であったものがscript要素となっており、もともとあったscript要素は削除されている。このコンテンツデータがクライアント装置2Aに送信されるものとなる。
(B2)無効なクライアント装置に向けてのデータ変換では、cscript要素を削除する処理を行う。
このデータ変換処理の実行結果を、図4(b)に示す。コンテンツ取得部11が取得した時点でのscript要素の内容であるJavaScriptコードは実行され、その結果が反映されている。もともとあったscript要素とcscript要素は削除されている。このコンテンツデータがクライアント装置2Bに送信されるものとなる。
データ変換部15は、DOM記憶部14がDOMを保持するとすぐにDOMを取得し、処理を開始してもよいし、DOM記憶部14はDOMを保持した状況で、データ通信部16とクライアント装置2Aまたは2Bのデータ通信部21が通信可能となることを契機として、DOM記憶部14からDOMを取得し、処理を開始してもよい。
データ通信部16はデータ変換部15から受け取ったコンテンツデータを対応するクライアント装置に送信する。すなわち、クライアント装置2A用のコンテンツデータをクライアント装置2Aに送信し、クライアント装置2B用のコンテンツデータをクライアント装置2Bに送信する。
次にクライアント装置2A、2Bの動作について説明する。
データ通信部21が図4AのコンテンツデータをWebSocketにより中間ブラウザサーバ装置1から受信し、スクリプト抽出部22へコンテンツデータをわたす。
クライアント装置2Aにおいては、スクリプト抽出部22は、受け取ったコンテンツデータのHTMLに含まれている、<script type="text/javascript" src="sample-client.js">というタグがスクリプトを示すことを認識し、コンテンツ取得部26に対してscript要素のsrc属性が示すURIのsample‐client.jsを取得するよう指示する。取得されたsample‐client.js(図5)はスクリプト実行部23にわたされる。スクリプト抽出後に、コンテンツデータはDOM記憶部24にわたされる。
クライアント装置2Bにおいては、スクリプト抽出部22は、受け取ったコンテンツデータのHTMLにスクリプトを示すタグが含まれていないため、そのままコンテンツデータをDOM記憶部24にわたす。
スクリプト実行部23は、受け取ったsample‐client.jsである図5のJavaScriptコードを実行し、実行結果をDOM記憶部24に反映させる。
DOM記憶部24は、スクリプト抽出部22より受け取ったコンテンツデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、スクリプト抽出部22で抽出されたJavaScriptがスクリプト実行部23で実行された結果も反映する。
ここで、データ通信部21がDOM記憶部24へコンテンツデータをわたしDOMツリーとして保持し、DOM記憶部24からスクリプト抽出部22がスクリプトを抽出し、スクリプト実行部23がスクリプトを実行し結果をDOM記憶部24に反映するという処理の順番としてもよい。
表示部25は、DOM記憶部24に記憶されているDOMを描画してクライアント装置の表示機能に表示する。
以上、中間ブラウザサーバ装置1がコンテンツデータ内のスクリプトを実行し、クライアント装置2がコンテンツデータ内のクライアントスクリプトを実行する実施例について説明したが、これは一例である。
図6に示すように、中間ブラウザサーバ装置1が表示部17を備えてDOM記憶部14に記憶されているDOMを描画して表示してもよい。
クライアントスクリプトを示す要素において、clientid属性などによってクライアント識別子を直接記述せずに、クライアント装置の有する特徴や情報と適合するか否かで、クライアントスクリプトの有効性を制御してもよい。例えば、client_useragent=”Android”という記述がある場合、クライアント装置のUserAgent情報にAndroidという文字列が含まれるクライアント装置についてはクライアントスクリプトが有効となるようにしてもよい。
クライアントスクリプトを示す要素において、clientid属性の指定がない場合は、クライアント装置を識別せずに、すべてのクライアント装置に対してクライアントスクリプトを有効となるようにしてもよい。
以上、第1の実施形態によれば、中間ブラウザサーバ装置1のコンテンツ取得部11が取得したコンテンツデータからスクリプト抽出部12がscript要素のスクリプトを抽出し、スクリプト実行部13がそのスクリプトを実行し、その結果のコンテンツデータがDOM記憶部14に保存され、データ変換部15がDOM記憶部14に保存されているコンテンツデータのscript要素を削除し、クライアント装置に応じて、cscript要素の属性の記述で該当するクライアント装置に対しては、cscript要素をscript要素に変換する処理を行い、cscript要素の属性の記述で該当しないクライアント装置に対しては、cscript要素を削除する処理を行い、データ通信部16からデータ通信部21にコンテンツデータがわたされ、スクリプト抽出部22がscript要素のスクリプトを抽出し、スクリプト実行部23がそのスクリプトを実行することにより、1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
これにより、WebサーバからコンテンツデータおよびJavaScriptを取得した中間ブラウザサーバ装置1がJavaScriptを自身で実行するだけでなく、中間ブラウザサーバ装置1がコンテンツデータを表示させるクライアント装置においてもJavaScriptを実行させることができる。
そのためには、一次クライアント装置に配信するのと同等のコンテンツデータを用意し、コンテンツデータのHTMLデータ内にクライアント装置で実行させたいスクリプトをcscript要素として記述することで、サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
なお、第1の実施形態では、中間ブラウザサーバ装置で実行するスクリプトの抽出、実行、DOMへの反映は必要時に行えばよく、そうでない場合は、これらの処理を実行しなくてよい。その場合、スクリプト抽出部12、スクリプト実行部13も不要となる。
[第2の実施形態]
以下、第2の実施形態について図面を用いて説明する。
図7は、第2の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、クライアント装置2A、2Bの各部について、第1の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1のデータ通信部16は、データ変換部15より受け取ったコンテンツデータをクライアント装置2A、2Bに送信する。また、データ通信部16は、クライアント装置2A、2BからコンテンツデータのURIを受信し、コンテンツ取得部11に受信したURIのコンテンツデータを取得するよう指示する。
クライアント装置2A、2Bのデータ通信部21は、中間ブラウザサーバ装置1のデータ通信部16からコンテンツデータを受信する。コンテンツデータはスクリプト抽出部22に送られる。また、クライアント装置2A、2Bの操作者あるいはスクリプト実行部23からの指示あるいはコンテンツ取得部26より取得したいコンテンツデータのURIを受け取り中間ブラウザサーバ装置1に送信する。
このクライアント装置2のデータ通信部21は一般的なWebブラウザを用いて構成できる。データ通信部21についてはJavaScriptで実装して構成することができる。
例えば、WebSocketクライアント装置を作成して中間ブラウザサーバ装置1のWebSocketサーバへ接続する処理と、WebSocketサーバからのデータ受信時の処理としてon_receive関数を登録する処理に加えて、WebSocketサーバへのデータ送信時の処理としてsend関数を登録する処理を記載したJavaScriptコードをクライアント装置2のスクリプト実行部23が実行することで、データ通信部21を機能させることができる。
次に、第2の実施形態における、クライアント装置2から中間ブラウザサーバ装置1に対してコンテンツ配信装置3のコンテンツデータの取得を要求する際の動作について、第1の実施形態との差分のみ説明する。
クライアント装置2A、2Bのデータ通信部21に、クライアント装置2の操作者あるいはスクリプト実行部23からの指示あるいはコンテンツ取得部26により、取得したいコンテンツデータのURIが渡される。
データ通信部21は取得したい旨とURIをデータ通信部16へ送信する。データ通信部16はコンテンツ取得部11に取得したいURIをわたす。
コンテンツ取得部11がコンテンツデータをHTTPによりコンテンツ配信装置3から取得し、スクリプト抽出部12へコンテンツデータをわたすところからは第1の実施形態と同様である。
以上、第2の実施形態によれば、サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる場合において、ライアント装置のコンテンツ取得部26あるいはスクリプト実行部23より、データ通信部21に、取得するコンテンツデータのURIが渡され、データ通信部21は、そのURIを中間ブラウザサーバ装置のデータ通信部16へ送信し、データ通信部16はコンテンツ取得部11にURIをわたすことにより、クライアント装置から中間ブラウザサーバ装置へURIをわたすことができる。
これにより、クライアント装置が、コンテンツデータのURIを指定するために、操作者の操作による指示あるいはスクリプトの実行結果による指示によって、クライアント装置の操作者またはクライアントスクリプトの実行結果によって、取得するコンテンツデータのURIを中間ブラウザサーバ装置に指定することができる。
[第3の実施形態]
以下、第3の実施形態について図面を用いて説明する。
図8は、第3の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、クライアント装置2A、2Bの各部について、第2の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1のスクリプト実行部13は、実行するJavaScriptコード内にクライアント装置のJavaScriptへデータを送信する旨が記述されている場合、スクリプト間通信受付部18に、送信内容と送信宛先のクライアント識別子をわたす。また、スクリプト間通信受付部18からの受信内容を実行中のJavaScriptコードに適用する。
スクリプト間通信受付部18は、スクリプト実行部13より受け取った送信内容と送信宛先のクライアント識別子より通信文を生成し、データ通信部16に指定のクライアント識別子宛てに通信文を送信するように指示する。また、データ通信部16から受け取った通信文から受信内容を抽出して、スクリプト実行部13にわたす。
データ通信部16は、スクリプト間通信受付部18からわたされた通信文を、該当クライアント識別子のクライアント装置に送信する。また、受信した通信文がスクリプト実行部への通信文である場合、スクリプト間通信受付部18に通信文をわたす。
これら中間ブラウザサーバ装置1のデータ通信部16を除く各部は一般的なWebブラウザを用いて構成できる。第2の実施形態との差分であるスクリプト間通信受付部18についてはJavaScriptで実装して構成することができる。
例えば、送信内容とクライアント装置の宛先とを組み合わせ通信オブジェクトを生成し、データ通信部16が確保しているWebSocket通信路を経由して、クライアント装置に送信する処理と、受け取った通信オブジェクトから送信元と受信内容を抽出する処理とを記載したJavaScriptコードを中間ブラウザサーバ装置1のスクリプト実行部13が実行することで、スクリプト間通信受付部18を機能させることができる。
クライアント装置のデータ通信部21は、受信した通信文がスクリプト実行部23への通信文である場合、スクリプト間通信受付部27に通信文をわたす。また、スクリプト間通信受付部27からわたされた通信文を、中間ブラウザサーバ装置に送信する。
スクリプト間通信受付部27は、データ通信部21から受け取った通信文から受信内容を抽出して、スクリプト実行部23にわたす。また、スクリプト実行部23より受け取った送信内容と送信宛先より通信文を生成し、データ通信部21に中間ブラウザサーバ装置宛てに通信文を送信するように指示する。
スクリプト実行部23は、スクリプト間通信受付部27からの受信内容を実行中のJavaScriptコードに適用する。また、実行するJavaScriptコード内に中間ブラウザサーバ装置1のJavaScriptへデータを送信する旨が記述されている場合、スクリプト間通信受付部27に、送信内容と送信宛先をわたす。
これらクライアント装置2の各部は一般的なWebブラウザを用いて構成できる。第2の実施形態との差分であるスクリプト間通信受付部27についてはJavaScriptで実装して構成することができる。
例えば、送信内容と、クライアント装置の宛先とを組み合わせ通信オブジェクトを生成し、データ通信部21が確保しているWebSocket通信路を経由して、クライアント装置に送信する処理と、受け取った通信オブジェクトから送信元と受信内容を抽出する処理とを記載したJavaScriptコードをクライアント装置2A、2Bのスクリプト実行部23が実行することで、スクリプト間通信受付部27を機能させることができる。
次に、第3の実施形態における第2の実施形態との差分である、中間ブラウザサーバ装置1のスクリプト実行部13で実行されるスクリプトからクライアント装置2A、2Bのスクリプト実行部23で実行されるスクリプトに送信する動作、および、クライアント装置2A、2Bのスクリプト実行部23で実行されるスクリプトから中間ブラウザサーバ装置1のスクリプト実行部13で実行されるスクリプトに送信する動作について具体例を用いて説明する。
図9にスクリプト実行部13で実行されるJavaScriptコード例を示す。このコードが実行されると、クライアント装置2Aから通信文を受信した場合にid属性がgreetingの要素の内容に受信内容を表示するように登録し、クライアント装置2Aに対して「hello from 1 to 2A」という文字列を送信する。
図10にスクリプト実行部23で実行されるJavaScriptコード例を示す。このコードが実行されると、中間ブラウザサーバ装置1から通信文を受信した場合にid属性がgreetingの要素の内容に受信内容を表示するように登録し、中間ブラウザサーバ装置1に対して「hello from 2A to 1」という文字列を送信する。
中間ブラウザサーバ装置1のスクリプト実行部13が図9に示すJavaScriptコードを実行し、クライアント装置2Aに「hello from 1 to 2A」の文字列を送信する際には、スクリプト間通信受付部18は受け取った送信内容と送信宛先のクライアント識別子より通信文を生成し、データ通信部16に指定のクライアント識別子宛てに通信文を送信するように指示する。
データ通信部16は、スクリプト間通信受付部18からわたされた通信文を、該当クライアント識別子のクライアント装置に送信する。
クライアント装置のデータ通信部21は、受信した通信文がスクリプト実行部23への通信文である場合、スクリプト間通信受付部27に通信文をわたす。
スクリプト間通信受付部27は、データ通信部21から受け取った通信文から受信内容を抽出して、スクリプト実行部23にわたす。
スクリプト実行部23は、スクリプト間通信受付部27からの受信内容を実行中のJavaScriptコードに適用する。図10のJavaScriptコード例においては、id属性がgreetingの要素の内容に、受信内容「hello from 1 to 2A」の文字列を挿入しDOM記憶部24に保存する。
また、クライアント装置2Aのスクリプト実行部23が図10に示すJavaScriptコードを実行し、中間ブラウザサーバ装置1に「hello from 2A to 1」の文字列を送信する際には、スクリプト間通信受付部27は、スクリプト実行部23より受け取った送信内容と送信宛先のクライアント識別子より通信文を生成し、データ通信部21に指定のクライアント識別子宛てに通信文を送信するように指示する。
データ通信部21は、スクリプト間通信受付部27からわたされた通信文を、該当クライアント識別子のクライアント装置に送信する。
中間ブラウザサーバ装置1のデータ通信部16は、受信した通信文がスクリプト実行部への通信文である場合、スクリプト間通信受付部18に通信文をわたす。
スクリプト間通信受付部18は、データ通信部16から受け取った通信文から受信内容を抽出して、スクリプト実行部13にわたす。
スクリプト実行部13は、スクリプト間通信受付部18からの受信内容を実行中のJavaScriptコードに適用する。図9のJavaScriptコード例においては、id属性がgreetingの要素の内容に、受信内容「hello from 2A to 1」の文字列を挿入しDOM記憶部14に保存する。
以上、第2の実施形態との差分として説明したが、第1の実施形態に本差分を加えることで構成することもできる。
以上、第3の実施形態によれば、サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる場合において、中間ブラウザサーバ装置1のスクリプト実行部13で実行されるスクリプトにクライアント装置のスクリプトへデータを渡す指示がある場合、スクリプト実行部13はスクリプト間通信受付部18に宛先と送信内容をわたし、スクリプト間通信受付部18はデータ通信部16に宛先と送信内容からなる通信文をわたし、データ通信部16はクライアント装置のデータ通信部21に通信文を送信し、データ通信部21はスクリプト間通信受付部27に通信文をわたし、スクリプト間通信受付部27はスクリプト実行部23に受信内容をわたし、スクリプト実行部23は受信内容を実行中のスクリプトに適用することと、クライアント装置のスクリプト実行部23で実行されるスクリプトに中間ブラウザサーバ装置1のスクリプトへデータを渡す指示がある場合、スクリプト実行部23はスクリプト間通信受付部27に宛先と送信内容をわたし、スクリプト間通信受付部27はデータ通信部21に宛先と送信内容からなる通信文をわたし、データ通信部21は中間ブラウザサーバ装置のデータ通信部16に通信文を送信し、データ通信部16はスクリプト間通信受付部18に通信文をわたし、スクリプト間通信受付部18はスクリプト実行部13に受信内容をわたし、スクリプト実行部13は受信内容を実行中のスクリプトに適用することにより、中間ブラウザサーバ装置1のスクリプト実行部13とクライアント装置2のスクリプト実行部23の間で相互にメッセージを送ることができる。
これにより、中間ブラウザサーバ装置1のスクリプト実行部とクライアント装置のスクリプト実行部が連携して動作するために、中間ブラウザサーバ装置1のスクリプト実行部で実行されるスクリプトにクライアント装置のスクリプトと通信する旨を記述すること、クライアント装置のスクリプト実行部で実行されるスクリプトに中間ブラウザサーバ装置1のスクリプトと通信する旨を記述することで、中間ブラウザサーバ装置1のスクリプト実行部とクライアント装置のスクリプト実行部が連携して動作することができる。
[第4の実施形態]
以下、第4の実施形態について図面を用いて説明する。
図11は、第4の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、クライアント装置2A、2Bの各部について、第1の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1の、DOM記憶部14は、スクリプト抽出部12より受け取ったコンテンツデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、スクリプト実行部13の結果も反映する。
データ通信部16は、DOM記憶部14より受け取ったデータをクライアント装置2A、2Bに送信する。
クライアント装置2A、2Bの、データ変換部28は、データ通信部21より受け取ったコンテンツデータからスクリプト抽出部22で抽出されるscript要素を削除する。続いてクライアントスクリプトを示す記述部分を抽出し、その記述部分をHTMLにJavaScriptコードを記載する際と同様の書式に変換する。変換後のコンテンツデータはスクリプト抽出部22に送られる。
これらクライアント装置2A、2Bの各部は一般的なWebブラウザを用いて構成できる。データ変換部28についてはJavaScriptで実装して構成することができる。例えば、cscriptという新たなDOM要素を定義する処理と、DOM内のcscript要素を取得して、その要素それぞれに対してscript要素を作成し、各script要素の属性値に対応するcscript要素の属性値を代入し、代入が終わったらcscript要素を削除する処理と、script要素を削除する処理を記載したJavaScriptコードをクライアント装置2A、2Bのスクリプト実行部23が実行することで、データ変換部28を機能させることができる。
次に、第4の実施形態における、中間ブラウザサーバ装置1とクライアント装置2A、2Bの動作について、第1の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1のDOM記憶部14は第1の実施形態と同様にDOMを保持する。
中間ブラウザサーバ装置1のデータ通信部16は第1の実施形態と同様にDOM記憶部14から受け取ったコンテンツデータをクライアント装置2A、2Bに送信する。
次にクライアント装置2A、2Bの動作について説明する。
クライアント装置2A、2Bの、データ通信部21は中間ブラウザサーバ装置1から受け取ったコンテンツデータをデータ変換部28にわたす。
データ変換部28は、データ通信部21から受け取ったコンテンツデータを変換する処理を行う。
データ変換部28は、データ通信部21から受け取ったデータを、(A)共通的に変換する処理と、(B)各クライアント装置に合わせて変換する処理を行う。
(A)共通的に変換する処理としては、(A1)cscriptという新たなDOM要素を定義する処理、(A2)script要素を削除する処理を行う。これにより、HTMLタグとして標準ではないcscript要素をDOMの要素として取り扱うことができ、cscript要素の定義ではscript要素と同じ属性を少なくともcscript要素が持つように定義する。
(B)各クライアント装置に合わせて変換する処理は、データ通信部21で保持するクライアント識別子に応じて行う。共通的に変換する処理を先に実行することで、cscript要素はDOM要素として取り扱うことができるようになっている。図2のコンテンツデータのclientid属性に2Aという値が指定されている。この場合、クライアント装置2Aに対して、このcscript要素がクライアントスクリプトとして有効となり、他のクライアント装置に対しては無効となる。
(B1)有効なクライアント装置でのデータ変換では、cscript要素に対応してscript要素を作成し、その属性には対応するcscript要素の属性値を代入する。script要素に対応する属性がないものは特に代入処理を行なわず、属性値の代入が終わったらcscript要素を削除する処理を行う。
(B2)無効なクライアント装置でのデータ変換では、cscript要素を削除する処理を行う。
変換後のコンテンツデータはスクリプト抽出部22に送られる。スクリプト抽出部22の処理以降は第1の実施形態と同様である。
以上、第1の実施形態との差分として説明したが、第2の実施形態および第3の実施形態に本差分を加えることで構成することもできる。
以上、第4の実施形態によれば、中間ブラウザサーバ装置1のコンテンツ取得部11が取得したコンテンツデータからスクリプト抽出部12がscript要素のスクリプトを抽出し、スクリプト実行部13がそのスクリプトを実行し、その結果のコンテンツデータがDOM記憶部14に保存され、データ通信部16からデータ通信部21にコンテンツデータがわたされ、データ変換部28がDOM記憶部14に保存されているコンテンツデータのscript要素を削除し、自クライアント装置がcscript要素の属性の記述で該当する場合は、cscript要素をscript要素に変換する処理を行い、自クライアント装置がcscript要素の属性の記述で該当しない場合は、cscript要素を削除する処理を行い、スクリプト抽出部22がscript要素のスクリプトを抽出し、スクリプト実行部23がそのスクリプトを実行することにより、1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
これにより、WebサーバからコンテンツデータおよびJavaScriptを取得した中間ブラウザサーバ装置1がJavaScriptを自身で実行するだけでなく、中間ブラウザサーバ装置1がコンテンツデータを表示させるクライアント装置においてもJavaScriptを実行させるために、
一次クライアント装置に配信するのと同等のコンテンツデータを用意し、コンテンツデータのHTMLデータ内にクライアント装置で実行させたいスクリプトをcscript要素として記述することで、
サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
[第5の実施形態]
以下、第5の実施形態について図面を用いて説明する。
図12は、第5の実施形態における中間ブラウザサーバ装置、一次のクライアント装置および二次のクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、一次のクライアント装置2A、二次のクライアント装置2Cの各部について、第4の実施形態との差分のみ説明する。
クライアント装置2A、クライアント装置2Bの有する各部は第4の実施形態のクライアント装置2Aと同様である。
クライアント装置2AのDOM記憶部24はスクリプト抽出部22より受け取ったデータを解析して、ツリー状のデータ構造であるDOMに展開して記憶する。また、スクリプト抽出部22で抽出されたJavaScriptがスクリプト実行部23で実行された結果も反映する。
クライアント装置2Aのデータ通信部29は、DOM記憶部24から受け取ったコンテンツデータを対応する二次クライアント装置に送信する。
クライアント装置2Cのデータ通信部21は、一時クライアント装置2Aのデータ通信部29から送信されるデータを受信する。受信したデータはデータ変換部28に送られる。
次に、第5の実施形態における、クライアント装置2A、クライアント装置2Cの動作について具体例を用いて説明する。第4の実施形態との差分のみ説明する。
図13に示すコンテンツデータを、第4の実施形態と同様に、クライアント装置2Aのデータ通信部21が取得し、データ変換部28でデータが変換され、クライアントスクリプトを実行され、実行結果がDOM記憶部24に反映される。
データ変換部28は、データ通信部21から受け取ったデータを変換する処理を行う。
データ変換部28は、データ通信部21から受け取ったデータを、共通的に変換する処理と、各クライアント装置に合わせて変換する処理を行う。
(A)共通的に変換する処理としては、(A1)cscriptという新たなDOM要素を定義する処理、(A2)script要素を削除する処理、を行う。これにより、HTMLタグとして標準ではないcscript要素をDOMの要素として取り扱うことができ、cscript要素の定義ではscript要素と同じ属性を少なくともcscript要素が持つように定義する。
(B)各クライアント装置に合わせて変換する処理は、データ通信部21で保持するクライアント識別子に応じて行う。共通的に変換する処理を先に実行することで、cscript要素はDOM要素として取り扱うことができるようになっている。図13のコンテンツデータには、cscript要素が2つあり、clientid属性が2A、2Cという値が指定されている。この場合、クライアント装置2Aに対しては、clientid属性が2Aとなっているcscript要素がクライアントスクリプトとして有効となる。
(B1)有効なcscript要素のデータ変換では、cscript要素に対応してscript要素を作成し、その属性には対応するcscript要素の属性値を代入する。script要素に対応する属性がないものは特に代入処理を行なわない。
(B2)有効ではないcscript要素は、データ変換を行わない。
データ通信部29は、DOM記憶部24からコンテンツデータを受け取り、クライアント装置2Cに送信する。
クライアント装置2Cのデータ変換部28が受け取るコンテンツデータを図14に示す。クライアント装置2Cのデータ変換部28も、クライアント装置2Bのデータ変換部28と同様に動作する。
すなわち、(A1)cscriptという新たなDOM要素を定義する処理、(A2)script要素を削除する処理を行い、cscript要素のclientid属性と自装置のクライアント識別子を比較、判別し、有効なcscript要素であれば、cscript要素に対応するscript要素を作成し、そのscript要素の属性に、対応するcscript要素の属性値を代入する。
ここまで、中間ブラウザサーバ装置、一次のクライアント装置、二次のクライアント装置の構成で説明したが、本手法により、より多段構成であっても、スクリプトを指定の装置のみで実行させることが可能となる。また、各段階でのクライアント装置の数が複数であっても、本手法によりスクリプトを指定の装置で実行させることが可能となる。
以上、第5の実施形態によれば、中間ブラウザサーバ装置1のコンテンツ取得部11が取得したコンテンツデータからスクリプト抽出部12がscript要素のスクリプトを抽出し、スクリプト実行部13がそのスクリプトを実行し、その結果のコンテンツデータがDOM記憶部14に保存され、データ通信部16からデータ通信部21にコンテンツデータがわたされ、データ変換部28がDOM記憶部14に保存されているコンテンツデータのscript要素を削除し、自クライアント装置がcscript要素の属性の記述で該当する場合は、cscript要素をscript要素に変換する処理を行い、自クライアント装置がcscript要素の属性の記述で該当しない場合は、cscript要素を削除する処理を行い、スクリプト抽出部22がscript要素のスクリプトを抽出し、スクリプト実行部23がそのスクリプトを実行することにより、1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
これにより、WebサーバからコンテンツデータおよびJavaScriptを取得した中間ブラウザサーバ装置(中間ブラウザサーバ装置)がJavaScriptを自身で実行するだけでなく、中間ブラウザサーバ装置(中間ブラウザサーバ装置)がコンテンツデータを表示させるクライアント装置においてもJavaScriptを実行させるために、
一次のクライアント装置に配信するのと同等のコンテンツデータを用意し、コンテンツデータのHTMLデータ内にクライアント装置で実行させたいスクリプトをcscript要素として記述することで、
サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、一次のクライアント装置、二次のクライアント装置といった多段階のクライアント装置でも実行させることができる。
[第6の実施形態]
以下、第6の実施形態について図面を用いて説明する。
図15は、第6の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、クライアント装置2A、2Bの各部について、第1の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1のデータ通信部16は、データ変換部15より受け取ったデータをクライアント装置2A、2Bに送信する。その際、配信ルール記憶部19にクライアント装置の情報をわたす。データ通信部16は、配信ルール記憶部19から返却されてきたコンテンツデータの要素の情報とデータ変換部15より受け取ったデータを照らし合わせて合致するものをクライアント装置2A、2Bへ送信する。
配信ルール記憶部19は、データ通信部16からクライアント装置の情報を受け取ると、そのクライアント装置の情報に合わせて配信するコンテンツデータの要素の情報をデータ通信部16に返却する。
次に、第6の実施形態における中間ブラウザサーバ装置の動作について、第1の実施形態との差分のみ説明する。
データ通信部16は、データ変換部15から受け取ったコンテンツデータを対応するクライアント装置に送信する。ここで、どのコンテンツデータをどのクライアント装置に送信すべきかを判別するために、配信ルール記憶部19にクライアント装置の情報を送る。
配信ルール記憶部19は、あらかじめルールが定義されている。配信ルール記憶部19は、クライアント装置の情報を受け取ると、このルールに従ってそのクライアント装置を特定するコンテンツデータ特定情報を返却する。
図16に1つめのルールであるブラウザグループルールの例を示す。クライアント装置の情報に応じて必ずどれか1つのグループに属するようにルールを定義する。例えば、画面の横幅が500ピクセル以下の場合「小型端末グループ」とし、500ピクセルより大きい場合「大型端末グループ」とするようにルールを定義する。
図17に2つめのルールであるグループ毎要素選択ルールの例を示す。クライアント装置の属するグループに応じた、送信すべきコンテンツデータ特定情報のルールを定義する。例えば、小型端末グループにはclass属性の値がsmallとなっている要素を送信し、大型端末グループにはclass属性の値がlargeとなっている要素を送信するようにルールを定義する。
この例の場合、配信ルール記憶部19は、データ通信部16より受け取ったクライアント装置の情報から画面の横幅の情報を用いて、各クライアント装置に送信するコンテンツデータを特定するためにclass属性の条件を返却する。
データ通信部16は、送信するコンテンツデータ特定情報を受け取り、そのコンテンツデータ特定情報にある方法をコンテンツデータに適用する。例えば、class属性の値を比較しコンテンツデータ特定情報と一致する要素をクライアント装置に送信する。
ここでのコンテンツデータは、データ変換部15にて、cscriptという新たなHTML要素を定義する処理、script要素を削除する処理を行っており、cscript要素を定義する処理により、HTMLタグとして標準ではないcscript要素をHTMLの要素と同等に取り扱うことができるため、cscript要素にclass属性が設定されている場合、他の要素と同様に、コンテンツデータ特定情報と一致するcscript要素をクライアント装置に送信する。
以上、第1の実施形態との差分として説明したが、第2乃至第5の実施形態に本差分を加えることで構成することもできる。
以上、中間ブラウザサーバ装置1が配信ルール記憶部19を用いて、クライアント装置に応じたコンテンツデータを送信する実施例について説明したが、これは一例である。
クライアント装置の情報を配信ルール記憶部19はデータ通信部16より受け取るとしたが、外部のクライアント装置の認証システムから受け取るとしてもよいし、利用者の操作から情報を受け取るとしてもよい。
配信ルール記憶部19を、ファイル参照で実施してもよいし、メモリ参照で実施してもよいし、データベース参照で実施してもよい。
以上、第6の実施形態によれば、中間ブラウザサーバ装置1のコンテンツ取得部11が取得したコンテンツデータからスクリプト抽出部12がscript要素のスクリプトを抽出し、スクリプト実行部13がそのスクリプトを実行し、その結果のコンテンツデータがDOM記憶部14に保存され、データ変換部15がDOM記憶部14に保存されているコンテンツデータを変換し、データ通信部16が、通信相手のクライアント装置の情報を配信ルール記憶部19にわたし、配信ルール記憶部19は、記憶しているルールに従って、クライアント装置に応じたコンテンツデータの送信範囲を決定し、コンテンツデータの送信範囲をデータ通信部16に返却し、データ通信部16からデータ通信部21に配信ルール記憶部19で決められた範囲のコンテンツデータがわたされ、スクリプト抽出部22がscript要素のスクリプトを抽出し、スクリプト実行部23がそのスクリプトを実行することにより、1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
これにより、中間ブラウザサーバ装置が、どのクライアント装置にコンテンツデータのどこを送信するかを判別する際に、クライアント識別子やクライアント適合性以上の自由度をもたせるために、クライアント装置の情報とコンテンツデータの配信範囲の決定ルールを、コンテンツデータ以外の場所で記述し、それを記憶し、ルールを適用する手段をもつことで、
サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント識別子やクライアント適合性以上の自由度をもった指定方法でクライアント装置を指定し、クライアント装置でも実行させることができる。
[第7の実施形態]
以下、第7の実施形態について図面を用いて説明する。
図18は、第7の実施形態における中間ブラウザサーバ装置およびクライアント装置を含む全体構成図である。中間ブラウザサーバ装置1、クライアント装置2A、2Bの各部について、第1の実施形態との差分のみ説明する。
中間ブラウザサーバ装置1のデータ通信部16は、クライアント装置権限管理部101にクライアント装置2A、2Bとの通信状況の情報をわたし、クライアント装置権限管理部101は、データ通信部16より中間ブラウザサーバ装置1と通信しているクライアント装置の情報を受け取り、通信状況情報を保存する。
次に、第7の実施形態における中間ブラウザサーバ装置の動作について、第1の実施形態との差分のみ説明する。
クライアント装置2Aが中間ブラウザサーバ装置1と通信を開始すると、データ通信部16はクライアント装置権限管理部101に、クライアント装置2Aとの通信開始の旨の情報をわたし、クライアント装置権限管理部101はその情報を保存する。この情報の中には、クライアント装置2Aがこの接続空間の代表権を持つ旨が含まれている。
クライアント装置2Bが中間ブラウザサーバ装置1と通信を開始し、クライアント装置2Aの接続空間に参加すると、データ通信部16はクライアント装置権限管理部101に、クライアント装置2Bとの通信開始およびクライアント装置2A接続空間への参加の旨の情報をわたし、クライアント装置権限管理部101はその情報を保存する。
同一の接続空間に参加するクライアント装置は、1つのコンテンツデータを中間ブラウザサーバ装置で展開したものを共有することができる。したがって、いずれかのクライアント装置の表示部25内の操作がすべてのクライアント装置の表示に反映される。
ここで代表権の有無による違いを説明する。代表権を持つクライアント装置2Aが利用を終了すると、接続空間の利用が終了となり、そこに参加しているクライアント装置2Bの利用も強制的に終了となる。代表権を持たないクライアント装置2Bが利用を終了しても接続空間の利用は終了とならず、代表権を持つクライアント装置2Aの利用は終了しない。
以上、第1の実施形態との差分として説明したが、第2乃至第5の実施形態に本差分を加えることで構成することもできる。
以上、中間ブラウザサーバ装置1がクライアント装置権限管理部101を用いて、クライアント装置に応じたクライアント装置の接続状態を制御する実施例について説明したが、これは一例である。
代表権の有無によって、他の制御を行ってもよい。
以上、第7の実施形態によれば、中間ブラウザサーバ装置1のコンテンツ取得部11が取得したコンテンツデータからスクリプト抽出部12がscript要素のスクリプトを抽出し、スクリプト実行部13がそのスクリプトを実行し、その結果のコンテンツデータがDOM記憶部14に保存され、データ変換部15がDOM記憶部14に保存されているコンテンツデータを変換し、データ通信部16は、クライアント装置権限管理部101にクライアント装置との通信状況の情報をわたし、クライアント装置権限管理部101はクライアント装置の通信状況の情報を保存し、データ通信部16はクライアント装置が切断した時には。代表権の有無をクライアント装置権限管理部101の情報を参照して、代表権がある場合はすべてのクライアント装置を切断し、代表権がない場合は特に処理をおこなわず、データ通信部16からデータ通信部21にコンテンツデータをわたし、スクリプト抽出部22がscript要素のスクリプトを抽出し、スクリプト実行部23がそのスクリプトを実行することにより、1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができる。
これにより、同じ接続空間に接続しているクライアント装置の利用者が異なる場合に、利用を開始した者が利用していない状況で、別の利用者が継続利用することを防ぐために、クライアント装置に代表権という属性をもたせることで、サーバに配置された1つのコンテンツデータに含まれるスクリプトを中間ブラウザサーバ装置で実行するだけでなく、クライアント装置でも実行させることができ、クライアント装置の利用者が異なる場合でも、クライアント装置の権限に応じた制御ができる。
なお、各実施の形態の中間ブラウザサーバ装置やクライアント装置としてコンピュータを機能させるためのコンピュータプログラムは、半導体メモリ、磁気ディスク、光ディスク、光磁気ディスク、磁気テープなどのコンピュータ読み取り可能な記録媒体に記録でき、また、インターネットなどの通信網を介して伝送させて、広く流通させることができる。