(57)【特許請求の範囲】
【請求項１】
コンピュータが実行するローカルストレージ同期方法であって、
ローカルストレージを使用する第１のブラウザからサーバ宛てのリクエストを受信し、
前記サーバから取得した前記リクエストに対応するデータに、他のリクエストを送信する処理を示すスクリプトを挿入して前記第１のブラウザに送信し、
前記第１のブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージの更新を検知して更新情報を送信する処理を示す他のスクリプトを含む他のデータを、前記第１のブラウザに送信し、
前記第１のブラウザから前記更新情報を受信し、
他のローカルストレージを使用する第２のブラウザが実行中の場合に、前記更新情報を前記第２のブラウザに送信する、
ローカルストレージ同期方法。
【請求項２】
受信した前記更新情報を、前記ローカルストレージおよび前記他のローカルストレージと異なる記憶領域に保存し、
前記更新情報を受信したときに前記第２のブラウザが実行されていない場合は、前記第２のブラウザが起動した後に、前記記憶領域に保存した前記更新情報を送信する、
請求項１記載のローカルストレージ同期方法。
【請求項３】
前記スクリプトは、前記他のリクエストに応じて受信した前記他のデータを前記データと異なるウィンドウに表示させる処理を更に示す、
請求項１または２記載のローカルストレージ同期方法。
【請求項４】
前記他のスクリプトは、前記他のローカルストレージの更新に応じた他の更新情報を受信した場合に前記ローカルストレージを更新する処理を更に示す、
請求項１乃至３の何れか一項に記載のローカルストレージ同期方法。
【請求項５】
前記第１のブラウザおよび前記第２のブラウザは、前記コンピュータ上で実行される、
請求項１乃至４の何れか一項に記載のローカルストレージ同期方法。
【請求項６】
サーバと通信を行う通信部と、
ローカルストレージを使用する第１のブラウザおよび他のローカルストレージを使用する第２のブラウザから前記サーバへのアクセスを制御する制御部と、
を有し、前記制御部は、
前記第１のブラウザから前記サーバ宛てのリクエストを受信し、
前記サーバから取得した前記リクエストに対応するデータに、他のリクエストを送信する処理を示すスクリプトを挿入して前記第１のブラウザに送信し、
前記第１のブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージの更新を検知して更新情報を送信する処理を示す他のスクリプトを含む他のデータを、前記第１のブラウザに送信し、
前記第１のブラウザから前記更新情報を受信し、
前記第２のブラウザが実行中の場合に、前記更新情報を前記第２のブラウザに送信する、
ローカルストレージ同期装置。
【請求項７】
コンピュータに、
ローカルストレージを使用する第１のブラウザからサーバ宛てのリクエストを受信し、
前記サーバから取得した前記リクエストに対応するデータに、他のリクエストを送信する処理を示すスクリプトを挿入して前記第１のブラウザに送信し、
前記第１のブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージの更新を検知して更新情報を送信する処理を示す他のスクリプトを含む他のデータを、前記第１のブラウザに送信し、
前記第１のブラウザから前記更新情報を受信し、
他のローカルストレージを使用する第２のブラウザが実行中の場合に、前記更新情報を前記第２のブラウザに送信する、
処理を実行させるローカルストレージ同期プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はローカルストレージ同期方法、ローカルストレージ同期装置およびローカルストレージ同期プログラムに関する。
【背景技術】
【０００２】
ユーザがＷＷＷ（World Wide Web）を利用する場合、ユーザが使用するクライアント装置上でブラウザと呼ばれるアプリケーションソフトウェアが実行される。ブラウザは、Ｗｅｂサーバと呼ばれるサーバソフトウェアが動作するサーバ装置と通信し、通信結果に基づいて主に視覚的なユーザインタフェースを提供する。
【０００３】
ブラウザは、ＨＴＴＰ（Hypertext Transfer Protocol）リクエストをＷｅｂサーバに送信し、ＨＴＴＰリクエストで要求されたファイルを含むＨＴＴＰレスポンスを受信する。受信するファイルは、表示するＷｅｂページの内容を示し、例えば、ＨＴＭＬ（HyperText Markup Language）などのマークアップ言語を用いて記述される。受信するファイルに、ブラウザ上で実行されるプログラムであるスクリプトが付加されていることもある。ブラウザは、受信したファイルに基づいて、表示領域にＷｅｂページを描画（レンダリング）する。ファイルにスクリプトが付加されている場合、ブラウザは、スクリプトを実行し、実行結果に応じてＷｅｂページの表示を制御する。
【０００４】
スクリプトを活用することで、操作性の高いＷｅｂページをユーザに提供することが可能となる。一方で、スクリプトは第三者が作成したプログラムであり、セキュリティに対する脅威となる可能性があるため、受信したスクリプトをブラウザ上で無制限に実行することは好ましくない。そこで、ブラウザは、スクリプトによって実行できる処理を制限している。例えば、ネットワークアクセスに関して、ブラウザは、スクリプトから指定できるアクセス先を、スクリプトと同一のＷｅｂサイトなどに限定する。また、クライアント装置上のローカルの記憶領域に関して、ブラウザは、スクリプトから使用できる記憶領域をブラウザが管理する制限された記憶領域に限定する。
【０００５】
スクリプトから使用できるローカルの記憶領域に関して、従来は、「クッキー」と呼ばれる小容量のデータ格納先が使用されてきた。一方で、近年は、より操作性の高いＷｅｂページを実現するため、ブラウザ上でサイズの大きいデータを扱いたいというニーズが存在する。そこで、マークアップ言語の規格であるＨＴＭＬ５では、「ローカルストレージ」と呼ばれる大容量（例えば、１０ＭＢ以上）の記憶領域が定義された。ローカルストレージに格納されたデータは、ブラウザを終了しても保持される。
【０００６】
スクリプトは、ローカルストレージに様々なデータを格納させることができる。例えば、ブラウザがオフライン状態の間は、ユーザが入力したデータをローカルストレージに保存しておき、次にオンライン状態になったときに、ローカルストレージのデータをＷｅｂサーバにまとめて送信するＷｅｂページが考えられる。このように、ローカルストレージを活用することで、クライアント装置をネットワークに接続し続けなくても、ユーザがブラウザ上で断続的に様々な操作を行うことが可能となる。
【０００７】
なお、ＰＣ（Personal Computer）や携帯電話機などの複数のクライアント装置の間でデータを同期するシステムが提案されている。このシステムに含まれるクライアント装置は、アドレス情報・スケジュール情報・Ｗｅｂサイトのリンク情報・文書ファイルなどのデータの変更ログを、ネットワーク上のサーバ装置にアップロードする。他のクライアント装置は、サーバ装置から変更ログをダウンロードしてデータを同期する。
【０００８】
また、サーバ装置からＷｅｂデータを受信するクライアント装置上で実行されるＷｅｂデータプラットフォームが提案されている。このＷｅｂデータプラットフォームは、受信したＷｅｂデータをクライアント装置に保存し、クライアント装置上で実行されるアプリケーションソフトウェアから、保存したＷｅｂデータにアクセスできるようにする。
【０００９】
また、ブラウザ上の処理を、ネットワークに接続されていないオフライン状態で実行可能なシステムが提案されている。このシステムに含まれるクライアント装置は、ＨＴＭＬデータやスクリプトを含むＷｅｂコンテンツをサーバ装置から受信し、受信したＷｅｂコンテンツをクライアント装置に保存する。クライアント装置は、オフライン状態であるとき、保存したＷｅｂコンテンツを用いてＷｅｂページを表示させる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−１６３１３７号公報
【特許文献２】国際公開第２００８／０５４９５１号
【特許文献３】国際公開第２００８／１００８８１号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ユーザは、複数のブラウザを使用することが可能である。例えば、１つのクライアント装置に、複数のブラウザをインストールできる。よって、異なるブラウザから同じＷｅｂサイトにアクセスすることが生じ得る。例えば、ユーザは、ある日にブラウザＡを起動してあるＷｅｂサイトを閲覧し、その次の日にブラウザＢを起動して同じＷｅｂサイトを閲覧することがあり得る。しかし、ローカルストレージは、ブラウザ毎に閉じた記憶領域である。このため、複数のブラウザの間で、ローカルストレージに異なるデータが格納される可能性がある。これによって、データの一貫性に関する種々の問題が生じ得る。
【００１２】
例えば、ユーザが、ある日にブラウザＡを起動してオフライン状態でデータを入力し、その次の日にブラウザＢを起動してオンライン状態で新たなデータを入力したとする。その後、オンライン状態でブラウザＡを起動してＷｅｂサイトにアクセスすると、以前に入力した古いデータが、ブラウザＡのローカルストレージからＷｅｂサーバにアップロードされてしまう。これにより、ブラウザＢを使用して入力した最新のデータが失われてしまう可能性がある。また、意図しない古いデータが公開されてしまう可能性もある。
【００１３】
この問題に対し、複数のブラウザの間でローカルストレージを同期することが考えられる。しかしながら、セキュリティの観点から、ブラウザのローカルストレージへのアクセスには制限があり、どの様にローカルストレージの同期を実現するかが問題となる。
【００１４】
１つの側面では、本発明は、複数のブラウザの間でローカルストレージを同期するローカルストレージ同期方法、ローカルストレージ同期装置およびローカルストレージ同期プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
１つの態様では、コンピュータが実行するローカルストレージ同期方法が提供される。ローカルストレージを使用する第１のブラウザからサーバ宛てのリクエストを受信する。サーバから取得したリクエストに対応するデータに、他のリクエストを送信する処理を示すスクリプトを挿入して第１のブラウザに送信する。第１のブラウザから他のリクエストを受信する。他のリクエストに応じて、ローカルストレージの更新を検知して更新情報を送信する処理を示す他のスクリプトを含む他のデータを、第１のブラウザに送信する。第１のブラウザから更新情報を受信する。他のローカルストレージを使用する第２のブラウザが実行中の場合に、更新情報を第２のブラウザに送信する。
【００１６】
また、１つの態様では、通信部と制御部とを有するローカルストレージ同期装置が提供される。また、１つの態様では、コンピュータに実行させるローカルストレージ同期プログラムが提供される。
【発明の効果】
【００１７】
１つの側面では、複数のブラウザの間でローカルストレージを同期できる。
【図面の簡単な説明】
【００１８】
【図１】第１の実施の形態のローカルストレージ同期装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】端末装置のハードウェア例を示すブロック図である。
【図４】端末装置の機能例を示すブロック図である。
【図５】同期データテーブルの例を示す図である。
【図６】アクセス情報テーブルの例を示す図である。
【図７】Ｗｅｂアクセスの例を示すシーケンス図である。
【図８】Ｗｅｂページに付加されるスクリプトの例を示す図である。
【図９】制御ページに含まれるスクリプトの例を示す図である。
【図１０】プロキシ転送処理の手順例を示すフローチャートである。
【図１１】プロキシ同期処理の手順例を示すフローチャートである。
【図１２】ブラウザアクセス処理の手順例を示すフローチャートである。
【図１３】ブラウザ同期処理の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のローカルストレージ同期装置を示す図である。
【００２０】
第１の実施の形態のローカルストレージ同期装置１０は、サーバ２とブラウザ１３，１４との間で通信を中継する。サーバ２は、例えば、サーバアプリケーションとしてのＷｅｂサーバを実行するサーバ装置である。ブラウザ１３，１４は、例えば、ローカルストレージ同期装置１０を介してサーバ２とＨＴＴＰ通信を行うクライアントアプリケーションとしてのＷｅｂブラウザである。ブラウザ１３，１４は、ローカルストレージ同期装置１０上で実行されていてもよいし、他の装置上で実行されていてもよい。
【００２１】
後述するローカルストレージ同期装置１０の処理は、例えば、ブラウザ１３，１４に対するプロキシサーバとして実装される。その場合、ブラウザ１３，１４には、サーバ２へのアクセスがこのプロキシサーバを経由するよう設定される。
【００２２】
ブラウザ１３は、ブラウザ１３を実行する装置（例えば、ローカルストレージ同期装置１０）が備える記憶領域であるローカルストレージ１３ａを使用する。ブラウザ１３上で実行されるスクリプトによって、ローカルストレージ１３ａにデータを格納できる。ローカルストレージ１３ａに格納されたデータは、ブラウザ１３を終了しても保持される。また、ブラウザ１４は、ブラウザ１４を実行する装置（例えば、ローカルストレージ同期装置１０）が備える記憶領域であるローカルストレージ１４ａを使用する。ブラウザ１４上で実行されるスクリプトによって、ローカルストレージ１４ａにデータを格納できる。ローカルストレージ１４ａに格納されたデータは、ブラウザ１４を終了しても保持される。ローカルストレージ１３ａ，１４ａは、例えば、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置上に形成される。
【００２３】
ローカルストレージ同期装置１０は、通信部１１および制御部１２を有する。通信部１１は、サーバ２と通信を行う通信インタフェースである。通信部１１は、有線インタフェースでもよいし、無線インタフェースでもよい。制御部１２は、ブラウザ１３，１４からサーバ２へのアクセスを制御する。制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。なお、プロセッサは、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。
【００２４】
ここで、制御部１２は、ブラウザ１３がサーバ２宛てのリクエスト１５を送信すると、ブラウザ１３からリクエスト１５を受信する。リクエスト１５は、例えば、ＵＲＬ（Uniform Resource Locator）などのアドレスを含むＨＴＴＰリクエストである。制御部１２は、リクエスト１５を受信すると、サーバ２にリクエスト１５を転送し、リクエスト１５に対応するデータ１６（例えば、リクエスト１５に含まれるＵＲＬで指定されたデータ）をサーバ２から受信する。データ１６は、例えば、Ｗｅｂページの内容をＨＴＭＬを用いて記述したＨＴＭＬファイルである。ただし、データ１６をローカルストレージ同期装置１０にキャッシュしている場合、キャッシュされたデータ１６を使用すればよい。
【００２５】
制御部１２は、データ１６にスクリプト１６ａを挿入してブラウザ１３に送信する。スクリプト１６ａは、リクエスト１７を送信する処理を示す。リクエスト１７は、例えば、ＨＴＴＰリクエストである。リクエスト１７にＵＲＬが含まれる場合、ＵＲＬのプロトコルスキーム・ホスト名・ポート番号をリクエスト１５と同じにする。これにより、後述するデータ１８とデータ１６とが同じＷｅｂサイトに関するデータと認識される。また、好ましくは、リクエスト１７に所定の文字列が含まれるようにする。
【００２６】
データ１６を受信したブラウザ１３は、データ１６に基づいて一のウィンドウにＷｅｂページを表示する。また、ブラウザ１３は、データ１６に含まれるスクリプト１６ａを実行する。これにより、ブラウザ１３は、リクエスト１７を送信する。
【００２７】
制御部１２は、ブラウザ１３からリクエスト１７を受信する。すると、制御部１２は、リクエスト１７に対する応答として、データ１８をブラウザ１３に送信する。データ１８は、例えば、データ１６と異なるＷｅｂページを示すＨＴＭＬファイルである。データ１８を送信するか否かは、例えば、受信したリクエストに所定の文字列が含まれているか否かによって判断できる。データ１８は、スクリプト１８ａを含む。スクリプト１８ａは、ローカルストレージ１３ａの更新を検知し、検知した更新の内容を含む更新情報１９を送信する処理を示す。データ１６とデータ１８とは、同じＷｅｂサイトのデータと認識されるようにする。これにより、スクリプト１８ａは、データ１６に基づいて表示されたＷｅｂページ上で行われたローカルストレージ１３ａの更新を検知することができる。
【００２８】
データ１８を受信したブラウザ１３は、データ１８に基づいてＷｅｂページを表示する。例えば、ブラウザ１３は、データ１８に基づくＷｅｂページを、データ１６に基づくＷｅｂページと異なるウィンドウに表示する。ここで言う「異なるウィンドウ」には、タブ型ブラウザにおける異なるタブが含まれてもよい。データ１６に基づくＷｅｂページにおいてローカルストレージ１３ａが更新される（例えば、新たなデータが格納される）と、ブラウザ１３は、スクリプト１８ａに従って更新を検知し更新情報１９を送信する。
【００２９】
制御部１２は、ブラウザ１３から更新情報１９を受信する。制御部１２は、ブラウザ１４が実行中の場合に、更新情報１９をブラウザ１４に送信する。ブラウザ１４は、更新情報１９を受信すると、更新情報１９に基づいてローカルストレージ１４ａを更新する。これにより、ローカルストレージ１３ａ，１４ａが同期される。これを実現するため、制御部１２は、更新情報１９の受信に応じてローカルストレージ１４ａを更新する処理を示すスクリプトを含むデータを、予めブラウザ１４に送信しておいてもよい。
【００３０】
制御部１２は、更新情報１９を受信したときにブラウザ１４が実行中でない場合、ローカルストレージ１３ａ，１４ａと異なる記憶領域を用いたデータベースに更新情報１９を格納してもよい。この場合、制御部１２は、ブラウザ１４が起動した後に、データベースに格納された更新情報１９をブラウザ１４に送信すればよい。
【００３１】
第１の実施の形態のローカルストレージ同期装置１０によれば、リクエスト１５に対応するデータ１６に、リクエスト１７を送信するスクリプト１６ａが挿入されてブラウザ１３に送信される。そして、リクエスト１７に応じて、ローカルストレージ１３ａの更新を検知して更新情報１９を送信するスクリプト１８ａを含むデータ１８がブラウザ１３に送信される。これにより、ローカルストレージ同期装置１０を介して、ローカルストレージ１３ａとローカルストレージ１４ａを同期することが可能となる。
【００３２】
このとき、データ１６とデータ１８が同じＷｅｂサイトに関するデータと認識されるように、スクリプト１６ａによってリクエスト１７が生成される。また、データ１８は、データ１６とは異なるＷｅｂページとして、データ１６と同時に表示される。これにより、ブラウザ１３は、セキュリティ上の制限に反することなくリクエスト１７を送信できる。また、スクリプト１８ａは、データ１６に基づいて行われたローカルストレージ１３ａの更新を検出できる。よって、ブラウザ１３，１４を改変しなくても、ブラウザ１３，１４の既存の仕様や制限のもとでローカルストレージ１３ａ，１４ａを同期できる。
【００３３】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。
第２の実施の形態の情報処理システムは、視覚的なユーザインタフェースであるＷｅｂページをユーザに提供するクライアントサーバ型のＷｅｂシステムである。この情報処理システムは、サーバ装置２１および端末装置１００，１００ａ，１００ｂを有する。サーバ装置２１と端末装置１００，１００ａ，１００ｂとは、ネットワーク２０に接続されている。ネットワーク２０は、例えば、インターネットなどの広域ネットワークである。
【００３４】
サーバ装置２１は、サーバアプリケーションとしてのＷｅｂサーバを実行するサーバコンピュータである。サーバ装置２１は、端末装置１００，１００ａ，１００ｂからＨＴＴＰリクエストを受信すると、ＨＴＴＰリクエストに含まれるＵＲＬに応じたＨＴＭＬファイルを生成し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを返信する。
【００３５】
ＨＴＭＬファイルは、Ｗ３Ｃ（World Wide Web Consortium）が策定したＨＴＭＬ５の規格に従って記述されている。ＨＴＭＬファイルには、端末装置１００，１００ａ，１００ｂで実行されるスクリプトが含まれていることがある。また、ＨＴＭＬファイルには、スクリプトを記述したスクリプトファイルへのリンクが含まれていることがある。
【００３６】
端末装置１００，１００ａ，１００ｂは、クライアントアプリケーションとしてのブラウザを実行するクライアントコンピュータである。端末装置１００，１００ａ，１００ｂは、ブラウザ上のユーザ操作に応じてＨＴＴＰリクエストをサーバ装置２１に送信し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。端末装置１００，１００ａ，１００ｂは、受信したＨＴＭＬファイルに基づいてＷｅｂページを表示する。
【００３７】
ＨＴＭＬファイルまたはＨＴＭＬファイルからリンクされたスクリプトファイルにスクリプトが含まれている場合、端末装置１００，１００ａ，１００ｂは、取得したスクリプトを実行してＷｅｂページの表示を制御する。端末装置１００，１００ａ，１００ｂには、複数のブラウザをインストールすることができる。なお、端末装置１００は、第１の実施の形態のローカルストレージ同期装置１０の一例である。
【００３８】
次に、端末装置１００，１００ａ，１００ｂの構成について説明する。
図３は、端末装置のハードウェア例を示すブロック図である。
端末装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、それぞれバス１０８に接続されている。
【００３９】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、端末装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００４０】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、端末装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４１】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、ローカルストレージ同期プログラムが含まれる。なお、端末装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４２】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、端末装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４３】
入力信号処理部１０５は、端末装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、端末装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４４】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４５】
通信インタフェース１０７は、ネットワーク２０に接続され、サーバ装置２１と通信を行う。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局またはアクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００４６】
ただし、端末装置１００は、媒体リーダ１０６を備えていなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、端末装置１００の筐体と一体に形成されていてもよい。端末装置１００ａ，１００ｂおよびサーバ装置２１も、端末装置１００と同様のハードウェアを用いて実現することができる。なお、ＣＰＵ１０１は、第１の実施の形態の制御部１２の一例である。通信インタフェース１０７は、通信部１１の一例である。
【００４７】
図４は、端末装置の機能例を示すブロック図である。
端末装置１００は、ブラウザ１２０，１３０、ローカルストレージ１２４，１３４、プロキシサーバ１４０および同期データ記憶部１４４を有する。ローカルストレージ１２４，１３４および同期データ記憶部１４４は、ＨＤＤ１０３に確保した記憶領域として実現できる。ブラウザ１２０，１３０およびプロキシサーバ１４０は、ＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。端末装置１００ａ，１００ｂも、端末装置１００と同様のモジュール構成によって実現できる。
【００４８】
ブラウザ１２０，１３０は、互いに異なる種類のＷｅｂブラウザである。ブラウザ１２０，１３０の少なくとも一方は、ユーザによって端末装置１００にインストールされたものであってもよい。ここで言う「異なる種類のＷｅｂブラウザ」には、ブランド名の異なるＷｅｂブラウザや、同じブランド名の異なるバージョンのＷｅｂブラウザが含まれる。
【００４９】
ブラウザ１２０は、ＵＩ（User Interface）制御部１２１、スクリプト実行部１２２および通信部１２３を有する。ブラウザ１３０は、ＵＩ制御部１３１、スクリプト実行部１３２および通信部１３３を有する。ＵＩ制御部１３１、スクリプト実行部１３２および通信部１３３の機能は、ブラウザ１２０の同名のモジュールの機能と同様であるため、説明を省略する。
【００５０】
ＵＩ制御部１２１は、視覚的ユーザインタフェースとしてのＷｅｂページを制御する。ＵＩ制御部１２１は、ＨＴＭＬファイルを取得すると、ＨＴＭＬファイルの記載に基づいてＷｅｂページを描画（レンダリング）する。ＵＩ制御部１２１は、複数のウィンドウ（複数のタブであってもよい）を用いて、複数のＷｅｂページを同時にディスプレイ１１１に表示することが可能である。また、ＵＩ制御部１２１は、ユーザ操作を検出する。ユーザ操作には、ＵＲＬの入力、Ｗｅｂページ内のハイパーリンクのクリック、Ｗｅｂページ内の入力欄（フィールド）へのデータ入力などが含まれる。
【００５１】
スクリプト実行部１２２は、取得したＨＴＭＬファイルまたはＨＴＭＬファイルからリンクされたスクリプトファイルにスクリプトが含まれている場合、当該スクリプトを実行する。スクリプトは、例えば、高級言語で記載されたソースコードである。
【００５２】
スクリプトによって実行可能な処理には、ＨＴＴＰリクエストの送信が含まれる。送信したＨＴＴＰリクエストに対応して得られるＷｅｂページを、新たなウィンドウ（新たなタブであってもよい）を起動して表示することも可能である。ただし、セキュリティの観点から、スクリプトによって指定可能なアクセス先は、当該スクリプトとオリジンが同一のものに制限される。「オリジン」は、プロトコルスキームとホスト名とポート番号の組である。ＵＲＬがｈｔｔｐ：／／ｗｗｗ．ａ＊＊．ｃｏｍ／ｉｎｄｅｘ．ｈｔｍｌの場合、プロトコルスキームはｈｔｔｐであり、ホスト名はｗｗｗ．ａ＊＊．ｃｏｍであり、ポート番号は８０である（ポート番号が８０であるときはその記載を省略できる）。
【００５３】
また、スクリプトによって実行可能な処理には、Ｗｅｂソケットを用いた通信が含まれる。Ｗｅｂソケットを使用する場合、まず通信相手とコネクションを確立する。コネクションが確立されると、ブラウザ１２０と通信相手との間で双方向にメッセージを送信することができる。Ｗｅｂソケットを利用することで、ＨＴＴＰ通信とは異なり、サーバ側からブラウザ１２０に対する「プッシュ型通信」を実現することができる。
【００５４】
また、スクリプトによって実行可能な処理には、後述するように、ブラウザ１２０に対応するローカルストレージ１２４へのアクセスが含まれる。スクリプトによって、ローカルストレージ１２４にデータを書き込み、ローカルストレージ１２４からデータを読み出すことができる。ただし、セキュリティの観点から、スクリプトによって読み出すことができるデータは、当該スクリプト自身または当該スクリプトとオリジンが同一の他のスクリプトによって書き込まれたデータに制限される。
【００５５】
通信部１２３は、ＵＩ制御部１２１で検出されたユーザ操作またはスクリプトによる指示に応じて、ＨＴＴＰリクエストを送信する。また、通信部１２３は、送信したＨＴＴＰリクエストに対して、ＨＴＴＰレスポンスを受信する。第２の実施の形態では、通信部１２３は、ＨＴＴＰリクエストをプロキシサーバ１４０に送信するように設定されている。ＨＴＴＰレスポンスは、プロキシサーバ１４０から受信することになる。また、通信部１２３は、スクリプトによる指示に応じて、Ｗｅｂソケットのメッセージを送受信する。
【００５６】
ローカルストレージ１２４は、ブラウザ１２０に対応して設けられた不揮発性の記憶領域である。ローカルストレージ１２４は、オリジン毎に区分して、キーバリュー形式のデータを記憶する。１つのオリジンに対して、例えば、１０ＭＢ程度のデータを記憶することができる。スクリプト実行部１２２は、キーとバリュー（値）を対応付けてローカルストレージ１２４に書き込むことができる。また、スクリプト実行部１２２は、キーを指定してローカルストレージ１２４からバリューを読み出すことができる。ローカルストレージ１２４に記憶された一のオリジンに関するデータは、スクリプト実行部１２２において当該オリジンに属するスクリプトが実行されたときのみ参照できる。
【００５７】
ローカルストレージ１３４は、ブラウザ１３０に対応して設けられた不揮発性の記憶領域である。ローカルストレージ１３４は、ローカルストレージ１２４と同様に、オリジン毎に区分してキーバリュー形式のデータを記憶する。ローカルストレージ１３４に記憶された一のオリジンに関するデータは、スクリプト実行部１３２において当該オリジンに属するスクリプトが実行されたときのみ参照できる。
【００５８】
プロキシサーバ１４０は、ブラウザ１２０，１３０とサーバ装置２１との間でＨＴＴＰ通信を中継する。プロキシサーバ１４０は、アクセス転送部１４１、制御ページ生成部１４２およびデータ同期部１４３を有する。
【００５９】
アクセス転送部１４１は、ブラウザ１２０，１３０からＨＴＴＰリクエストを受信すると、ＨＴＴＰリクエストの所定の位置に所定の文字列が含まれているか、すなわち、制御用のＨＴＴＰリクエストであるか判断する。所定の位置としては、例えば、ＵＲＬに含まれるパス名、ＵＲＬの末尾に付加されたハッシュ（「＃」以下の文字）やクエリ（「？」以下の文字）、ＨＴＴＰリクエストがＰＯＳＴである場合のボディなどが挙げられる。
【００６０】
制御用のＨＴＴＰリクエストでない場合、アクセス転送部１４１は、サーバ装置２１に当該ＨＴＴＰリクエストを転送する。サーバ装置２１からＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信すると、アクセス転送部１４１は、ＨＴＴＰリクエストを送信したブラウザ（ブラウザ１２０またはブラウザ１３０）にＨＴＴＰレスポンスを転送する。ただし、アクセス転送部１４１は、サーバ装置２１から取得したＨＴＭＬファイルをキャッシュしてもよい。ブラウザ１２０，１３０から指定されたＵＲＬに対応するＨＴＭＬファイルがキャッシュ中である場合、アクセス転送部１４１は、サーバ装置２１にＨＴＴＰリクエストを転送せず、キャッシュされているＨＴＭＬファイルを返信してもよい。
【００６１】
ＨＴＴＰレスポンスを送信するにあたり、アクセス転送部１４１は、ＨＴＴＰリクエストを送信したブラウザにおいて同じオリジンのＷｅｂページを閲覧中であるか、すなわち、あるＷｅｂサイトに対する２回目以降のＨＴＴＰリクエストであるか判断する。２回目以降のＨＴＴＰリクエストであるか否かは、後述するアクセス情報テーブルを参照して判断できる。最初のＨＴＴＰリクエストである場合、アクセス転送部１４１は、取得したＨＴＭＬファイルに所定のスクリプトを挿入する。このスクリプトは、ブラウザ１２０，１３０に、上記の制御用のＨＴＴＰリクエストを送信させるものである。
【００６２】
一方、制御用のＨＴＴＰリクエストである場合、アクセス転送部１４１は、当該ＨＴＴＰリクエストをサーバ装置２１に転送する代わりに制御ページ生成部１４２に転送する。アクセス転送部１４１は、制御ページ生成部１４２からＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信し、ＨＴＴＰリクエストを送信したブラウザに転送する。ただし、アクセス転送部１４１を介さずにＨＴＴＰリクエストが当該ブラウザに返信されてもよい。
【００６３】
制御ページ生成部１４２は、アクセス転送部１４１からＨＴＴＰリクエストを受信すると、制御ページを表示するためのＨＴＭＬファイルを生成し、当該ＨＴＭＬファイルを含むＨＴＴＰレスポンスをアクセス転送部１４１に送信する。このＨＴＭＬファイルは、予め用意しておきＨＤＤ１０３に格納しておいてもよい。制御ページは、ブラウザ１２０，１３０の間でローカルストレージ１２４，１３４を同期できるようにするスクリプトを記載した制御用のＷｅｂページである。制御ページは、同期用ページと言うこともできる。
【００６４】
制御ページのＵＲＬには、制御ページを呼び出した元のＷｅｂページと同じオリジンが含まれる。よって、ブラウザ１２０，１３０は、制御ページと元のＷｅｂページとはオリジンが同一であると認識する。ＨＴＭＬ５の仕様によれば、あるＷｅｂページのスクリプトは、オリジンが同一である他のＷｅｂページにおいて発生したローカルストレージの更新を検出することができる。ただし、ＨＴＭＬ５の仕様では、同じＷｅｂページ内で発生したローカルストレージの更新を検出できることは保証されていない。そこで、第２の実施の形態では、元のＷｅｂページとは別に、オリジンが同じ制御ページを用意している。
【００６５】
ブラウザ１２０，１３０において、制御ページは元のＷｅｂページとは別のウィンドウ（別のタブであってもよい）に表示される。制御ページは、ローカルストレージ１２４，１３４を同期するスクリプトを含んでいればよく、表示すべき文字や画像を含まなくてもよい。制御ページを表示するウィンドウは、ユーザから認識されにくいように、元のＷｅｂページと比べて十分に小さいサイズで画面上に配置するようにしてもよい。
【００６６】
データ同期部１４３は、ブラウザ１２０，１３０との間でＷｅｂソケットのコネクションを確立する。コネクションの確立は、制御ページに含まれるスクリプトに従って、ブラウザ１２０，１３０からの要求に応じて実行される。データ同期部１４３は、確立されたコネクションを用いて、ローカルストレージ１２４，１３４の同期を実現する。Ｗｅｂソケットによる通信に代えて、ＨＴＴＰ通信を用いることも可能である。
【００６７】
ブラウザ１２０がローカルストレージ１２４を更新すると、データ同期部１４３は、ブラウザ１２０から更新通知を受信する。更新通知は、制御ページに含まれるスクリプトに従って、ブラウザ１２０から送信される。データ同期部１４３は、更新通知に含まれるキーバリュー形式のデータ（更新内容）を、同期データ記憶部１４４に格納する。また、データ同期部１４３は、ブラウザ１３０が同一オリジンのＷｅｂページを表示中であるか判断する。同一オリジンのＷｅｂページを表示中であるか否かは、後述するアクセス情報テーブルを参照して判断できる。ただし、データ同期部１４３は、Ｗｅｂソケットのメッセージを、定期的にまたは更新通知の受信時にブラウザ１３０に送信することで、同一オリジンのＷｅｂページを表示中であるか否か確認するようにしてもよい。
【００６８】
更新通知を受信したときに、ブラウザ１３０で同一オリジンのＷｅｂページを表示中である場合、データ同期部１４３は、Ｗｅｂソケットを用いて、更新通知を含むプッシュ型のメッセージをブラウザ１３０に送信する。送信したメッセージは、ブラウザ１３０で表示された制御ページに含まれるスクリプトによって処理される。当該スクリプトに従って、更新通知に基づいてローカルストレージ１３４が更新される。一方、更新通知を受信したときに、ブラウザ１３０で同一オリジンのＷｅｂページが表示されていない場合、データ同期部１４３は、ブラウザ１３０が同一オリジンのＷｅｂページを表示するのを待つ。
【００６９】
ブラウザ１３０で制御ページが表示されると、データ同期部１４３は、ローカルストレージ１３４に記憶されたデータを含むメッセージをブラウザ１３０から受信する。このメッセージは、制御ページに含まれるスクリプトに従ってブラウザ１３０から送信される。データ同期部１４３は、ブラウザ１３０から受信したデータと同期データ記憶部１４４に記憶されたデータとを比較して、両者の違いを示す差分データを生成する。データ同期部１４３は、Ｗｅｂソケットを用いて、生成した差分データを含むプッシュ型のメッセージをブラウザ１３０に送信する。送信したメッセージは、ブラウザ１３０で表示された制御ページに含まれるスクリプトによって処理される。当該スクリプトに従って、差分データがローカルストレージ１３４に格納される。
【００７０】
同期データ記憶部１４４は、キーバリュー形式のデータを記憶する。同期データ記憶部１４４は、プロキシサーバ１４０が管理する記憶領域であり、ローカルストレージ１２４，１３４とは別個に設けられる。ローカルストレージ１２４，１３４の同期が完了しているとき、同期データ記憶部１４４に記憶されたデータは、ローカルストレージ１２４，１３４と同じである。ローカルストレージ１２４，１３４の一方が更新されると、更新内容が同期データ記憶部１４４に反映される。同期データ記憶部１４４を参照することで、ローカルストレージ１２４，１３４を後で同期させることができる。また、同期データ記憶部１４４は、後述するアクセス情報テーブルを記憶する。
【００７１】
図５は、同期データテーブルの例を示す図である。
同期データテーブル１４５は、同期データ記憶部１４４に格納されている。同期データテーブル１４５は、オリジン、キーおよび値の項目を有する。キーは、キーバリュー形式のデータを識別する文字列である。１つのオリジンの中で、キーは重複しない。値は、キーと対応付けられた文字列である。オリジンの項目には、キーと値の組を書き込んだスクリプトのオリジン（プロトコルスキームとホスト名とポート番号）を示す文字列が登録される。１つのオリジンに対して、キーと値の組を複数登録することができる。
【００７２】
ローカルストレージ１２４，１３４も、同期データテーブル１４５と同様のデータ構造によって実現できる。なお、１つのオリジンに対して、ローカルストレージ１２４，１３４に保存可能なデータの容量が予め設定されている。例えば、オリジン毎のローカルストレージ１２４，１３４の容量が１０ＭＢ程度に設定される。
【００７３】
図６は、アクセス情報テーブルの例を示す図である。
アクセス情報テーブル１４６は、同期データ記憶部１４４に格納されている。アクセス情報テーブル１４６は、ブラウザおよびオリジンの項目を有する。ブラウザの項目には、ブラウザ１２０，１３０の識別名が登録される。識別名には、ブラウザ１２０，１３０のブランド名やバージョン番号を含めてもよい。例えば、ブラウザ１２０の識別名が「ブラウザＡ」であり、ブラウザ１３０の識別名が「ブラウザＢ」である。オリジンの項目には、ブラウザ１２０，１３０がアクセス中のＷｅｂサイトのオリジンが登録される。
【００７４】
図６に示したアクセス情報テーブル１４６の例は、ブラウザ１２０が、ｈｔｔｐ：／／ｗｗｗ．ａ＊＊．ｃｏｍ／を含むＵＲＬのＷｅｂページとｈｔｔｐ：／／ｈｏｓｔ．ｂ＊＊．ｏｒｇ／を含むＵＲＬのＷｅｂページを表示していることを示している。また、図６に示したアクセス情報テーブル１４６の例は、ブラウザ１３０が、ｈｔｔｐ：／／ｗｗｗ．ａ＊＊．ｃｏｍ／を含むＵＲＬのＷｅｂページとｈｔｔｐ：／／ｗｗｗ．ｃ＊＊．ｃｏｍ／を含むＵＲＬのＷｅｂページを表示していることを示している。
【００７５】
あるオリジンを含むＵＲＬを指定したＨＴＴＰリクエストをアクセス転送部１４１が受信すると、アクセス転送部１４１によって当該オリジンがアクセス情報テーブル１４６に登録される。アクセス情報テーブル１４６に登録されたオリジンは、登録から一定時間経過した後、アクセス情報テーブル１４６から削除されてもよい。また、あるブラウザがウィンドウを閉じたことまたは終了したことを検知し、検知したときに当該ブラウザに対応するオリジンをアクセス情報テーブル１４６から削除するようにしてもよい。
【００７６】
次に、ローカルストレージ１２４，１３４を同期する処理の流れを説明する。
図７は、Ｗｅｂアクセスの例を示すシーケンス図である。
ブラウザ１２０は、ユーザ操作によって、ＵＲＬが入力されたことまたはＵＲＬを指定したハイパーリンクがクリックされたことを検出する。すると、ブラウザ１２０は、当該ＵＲＬを含むＨＴＴＰリクエスト（Ｗｅｂページ要求）をプロキシサーバ１４０に送信する（Ｓ１０）。プロキシサーバ１４０は、サーバ装置２１にＷｅｂページ要求を転送する（Ｓ１１）。サーバ装置２１は、指定されたＵＲＬに対応するＷｅｂページのＨＴＭＬファイルを生成し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスをプロキシサーバ１４０に送信する（Ｓ１２）。プロキシサーバ１４０は、ＷｅｂページのＨＴＭＬファイルにスクリプトを付加し、ブラウザ１２０に転送する（Ｓ１３）。
【００７７】
ブラウザ１２０は、ステップＳ１３のＷｅｂページに含まれるスクリプトを実行することで、制御用のＨＴＴＰリクエスト（制御ページ要求）をプロキシサーバ１４０に送信する（Ｓ１４）。制御ページ要求では、ステップＳ１０のＷｅｂページ要求と同じオリジンおよび所定の文字列を含むＵＲＬが指定される。プロキシサーバ１４０は、制御ページ要求に応じて、制御ページのＨＴＭＬファイルを生成し、制御ページのＨＴＭＬファイルを含むＨＴＴＰレスポンスをブラウザ１２０に送信する（Ｓ１５）。なお、制御ページは、ブラウザ１２０においてオリジン毎に１つ表示される。
【００７８】
ブラウザ１２０は、ステップＳ１５の制御ページに含まれるスクリプトを実行することで、プロキシサーバ１４０との間にＷｅｂソケットのコネクションを確立する。また、ブラウザ１２０は、ローカルストレージ１２４から、ステップＳ１５の制御ページのオリジンに関するデータを抽出する。そして、ブラウザ１２０は、Ｗｅｂソケットのコネクションを用いて、オリジンを示す文字列および抽出したデータを含むメッセージ（同期要求）をプロキシサーバ１４０に送信する（Ｓ１６）。
【００７９】
プロキシサーバ１４０は、同期要求が示すオリジンに関するデータを同期データ記憶部１４４から検索する。プロキシサーバ１４０は、検索したデータと同期要求に含まれるデータとを比較し、両者の違いを示す差分データを生成する。そして、プロキシサーバ１４０は、Ｗｅｂソケットのコネクションを用いて、差分データを含むメッセージをブラウザ１２０に送信する（Ｓ１７）。ブラウザ１２０は、プロキシサーバ１４０から受信した差分データをローカルストレージ１２４に格納する。これにより、ステップＳ１３のＷｅｂページのオリジンに関してローカルストレージ１２４，１３４が同期される（Ｓ１８）。
【００８０】
ブラウザ１２０は、ステップＳ１５の制御ページに含まれるスクリプトを実行することで、ステップＳ１３のＷｅｂページ上でローカルストレージ１２４が更新されたことを検知する（Ｓ１９）。ローカルストレージ１２４を更新するスクリプトは、ステップＳ１２でサーバ装置２１から取得したＨＴＭＬファイルに元々記述されている。ローカルストレージ１２４の更新を検知すると、ブラウザ１２０は、Ｗｅｂソケットのコネクションを用いて、ステップＳ１３のＷｅｂページのオリジンを示す文字列および更新データを含むメッセージ（更新通知）をプロキシサーバ１４０に送信する（Ｓ２０）。
【００８１】
プロキシサーバ１４０は、更新通知で指定されたオリジンについてのデータとして、更新通知に含まれるデータを同期データ記憶部１４４に格納する。ここでは、端末装置１００においてブラウザ１３０が実行中であり、ステップＳ１３のＷｅｂページとオリジンが同じＷｅｂページを表示しているものとする。この場合、ステップＳ１６と同様にして、ブラウザ１３０とプロキシサーバ１４０との間にＷｅｂソケットのコネクションが確立されている。すると、プロキシサーバ１４０は、Ｗｅｂソケットのコネクションを用いて、更新通知をブラウザ１３０に送信する（Ｓ２１）。ブラウザ１３０は、制御ページに含まれるスクリプトに従って、プロキシサーバ１４０から受信した更新通知が示すデータをローカルストレージ１３４に格納する。これにより、ステップＳ１３のＷｅｂページのオリジンに関してローカルストレージ１２４，１３４が同期される（Ｓ２２）。
【００８２】
図８は、Ｗｅｂページに付加されるスクリプトの例を示す図である。
ＨＴＭＬファイル３１は、例えば、上記のステップＳ１３においてプロキシサーバ１４０からブラウザ１２０に送信される。ＨＴＭＬファイル３１のスクリプトは、関数ｏｐｅｎＳｙｎｃＰａｇｅ（）および関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）を含む。
【００８３】
関数ｏｐｅｎＳｙｎｃＰａｇｅ（）は、プロキシサーバ１４０によってＨＴＭＬファイル３１に挿入されたものである。関数ｏｐｅｎＳｙｎｃＰａｇｅ（）は、ＨＴＭＬファイル３１に基づくＷｅｂページが表示されるときに自動的に実行される。関数ｏｐｅｎＳｙｎｃＰａｇｅ（）は、ＨＴＭＬファイル３１のオリジンに所定のパス名（例えば、／Ｓｙｎｃ／ｓｙｎｃＰａｇｅ．ｈｔｍｌ）を連結したＵＲＬを生成する。このパス名が示すＨＴＭＬファイルは、サーバ装置２１に実在しないものでもよい。その場合、このＵＲＬは仮想的なＵＲＬであると言うことができる。関数ｏｐｅｎＳｙｎｃＰａｇｅ（）は、生成したＵＲＬに対応するＷｅｂページを、ＨＴＭＬファイル３１に基づくＷｅｂページとは異なる新たなウィンドウ（新たなタブでもよい）に表示させる。
【００８４】
関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）は、サーバ装置２１から取得したＨＴＭＬファイルに元々記述されていたものである。関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）は、キーと値の組をローカルストレージ１２４に格納する。
【００８５】
図９は、制御ページに含まれるスクリプトの例を示す図である。
ＨＴＭＬファイル３２は、例えば、上記のステップＳ１５においてプロキシサーバ１４０からブラウザ１２０に送信される。ＨＴＭＬファイル３２のスクリプトは、変数ｗｓ、同期要求処理、メッセージ受信処理、関数ｕｐｄａｔｅＩＳｔｏｒａｇｅ（）、イベントリスナ登録処理、および、関数ｓｅｎｄＥｖｅｎｔＤａｔａ（）を含む。
【００８６】
変数ｗｓは、プロキシサーバ１４０との間に確立したＷｅｂソケットのコネクションを示す。制御ページが表示されるときに、Ｗｅｂソケットのコネクションが確立される。同期要求処理は、ＨＴＭＬファイル３２のスクリプトから認識できる全てのデータ（ＨＴＭＬファイル３２のオリジンに関するデータ）をローカルストレージ１２４から抽出する。そして、同期要求処理は、記号「０」とオリジンを示す文字列と抽出したデータとを含むメッセージを、Ｗｅｂソケットのコネクションを用いて送信する。記号「０」は、送信するメッセージが同期要求であることを識別する記号である。
【００８７】
メッセージ受信処理は、Ｗｅｂソケットのメッセージを受信したか判定し、Ｗｅｂソケットのメッセージを受信すると関数ｕｐｄａｔｅＩＳｔｏｒａｇｅ（）を呼び出す。関数ｕｐｄａｔｅＩＳｔｏｒａｇｅ（）は、受信したＷｅｂソケットのメッセージに含まれるキーと値の組を、ローカルストレージ１２４に格納する。
【００８８】
イベントリスナ登録処理は、制御ページが表示されるときに実行される。イベントリスナ登録処理は、ＨＴＭＬファイル３２と同じオリジンに関するデータがローカルストレージ１２４に書き込まれたときに、書き込まれたデータを含むイベント情報を取得できるように設定する。イベントリスナ登録処理は、イベント情報が取得されると関数ｓｅｎｄＥｖｅｎｔＤａｔａ（）が呼び出されるように設定する。関数ｓｅｎｄＥｖｅｎｔＤａｔａ（）は、記号「１」とオリジンを示す文字列と取得したイベント情報とを含むメッセージを、Ｗｅｂソケットのコネクションを用いて送信する。記号「１」は、送信するメッセージが更新通知であることを識別する記号である。
【００８９】
図１０は、プロキシ転送処理の手順例を示すフローチャートである。
このプロキシ転送処理は、プロキシサーバ１４０によって実行される。ここでは、ブラウザ１２０とプロキシサーバ１４０との間で通信を行う場合を想定する。ブラウザ１３０とプロキシサーバ１４０との間でも同様の通信が行われる。
【００９０】
（Ｓ３０）アクセス転送部１４１は、ＨＴＴＰリクエストを受信する。
（Ｓ３１）アクセス転送部１４１は、ステップＳ３０で受信したＨＴＴＰリクエストが制御ページ要求であるか判断する。制御ページ要求であるか否かは、例えば、ＵＲＬに所定のパス名が含まれているかによって判断できる。また、例えば、ＵＲＬに所定のハッシュまたはクエリが含まれているか、ＨＴＴＰリクエストの種類がＰＯＳＴでありボディに所定の文字列が含まれているかによって判断することもできる。制御ページ要求である場合はステップＳ３７に処理が進み、それ以外の場合はステップＳ３２に処理が進む。
【００９１】
（Ｓ３２）アクセス転送部１４１は、受信したＨＴＴＰリクエストをサーバ装置２１に転送する。アクセス転送部１４１は、転送したＨＴＴＰリクエストに対する応答として、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。
【００９２】
（Ｓ３３）アクセス転送部１４１は、ブラウザ１２０が、ステップＳ３２で取得したＨＴＭＬファイルと同じオリジンのＷｅｂサイトにアクセス済みであるか判断する。具体的には、アクセス転送部１４１は、ブラウザ１２０と対応付けて、取得したＨＴＭＬファイルのオリジンがアクセス情報テーブル１４６に登録されているか判断する。登録されている場合はステップＳ３６に処理が進み、登録されていない場合はステップＳ３４に処理が進む。なお、アクセス情報テーブル１４６のオリジンは、一定時間の経過、制御ページのクローズ、ブラウザ１２０の終了などに応じて削除されてもよい。
【００９３】
（Ｓ３４）アクセス転送部１４１は、ブラウザ１２０と対応付けて、取得したＨＴＭＬファイルのオリジンをアクセス情報テーブル１４６に登録する。
（Ｓ３５）アクセス転送部１４１は、取得したＨＴＭＬファイルに所定のスクリプトを付加する。付加するスクリプトは、ステップＳ３２で取得したＨＴＭＬファイルと同じオリジンを含むＵＲＬを指定したものであって所定の文字列を含むＨＴＴＰリクエストを生成する処理を示す。付加するスクリプトは、例えば、図８に示したＨＴＭＬファイル３１に含まれる関数ｏｐｅｎＳｙｎｃＰａｇｅ（）である。
【００９４】
（Ｓ３６）アクセス転送部１４１は、サーバ装置２１から受信したＨＴＴＰレスポンスをブラウザ１２０に転送する。ただし、上記のステップＳ３５によって、ＨＴＴＰレスポンスに含まれるＨＴＭＬファイルに所定のスクリプトが付加されていることがある。
【００９５】
（Ｓ３７）アクセス転送部１４１は、ＨＴＴＰリクエストを制御ページ生成部１４２に転送する。制御ページ生成部１４２は、制御ページを示すＨＴＭＬファイルを生成し、生成したＨＴＭＬファイルを含むＨＴＴＰレスポンスをアクセス転送部１４１に送信する。アクセス転送部１４１は、制御ページ生成部１４２から受信したＨＴＴＰレスポンスをブラウザ１２０に転送する。制御ページのＨＴＭＬファイルには、ローカルストレージ１２４，１３４の同期に関する処理を示すスクリプトが含まれている。
【００９６】
このスクリプトは、制御ページが表示されたときにプロキシサーバ１４０とＷｅｂソケットのコネクションを確立する処理を示す。また、このスクリプトは、制御ページが表示されたときにＷｅｂソケットによって同期要求をプロキシサーバ１４０に送信し、差分データをプロキシサーバ１４０から受信してローカルストレージ１２４を更新する処理を示す。また、このスクリプトは、制御ページとオリジンが同一である他のＷｅｂページのスクリプトによってローカルストレージ１２４が更新されたことを検知し、Ｗｅｂソケットによって更新通知をプロキシサーバ１４０に送信する処理を示す。また、このスクリプトは、Ｗｅｂソケットによってプロキシサーバ１４０から更新通知を受信し、受信した更新通知に基づいてローカルストレージ１２４を更新する処理を示す。
【００９７】
図１１は、プロキシ同期処理の手順例を示すフローチャートである。
このプロキシ転送処理は、プロキシサーバ１４０によって実行される。ここでは、ブラウザ１２０とプロキシサーバ１４０との間で通信を行う場合を想定する。ブラウザ１３０とプロキシサーバ１４０との間でも同様の通信が行われる。
【００９８】
（Ｓ４０）データ同期部１４３は、Ｗｅｂソケットのメッセージを受信する。
（Ｓ４１）データ同期部１４３は、ステップＳ４０で受信したメッセージが、同期要求であるか判断する。メッセージが同期要求であることは、例えば、メッセージの先頭に含まれる記号が「０」であることを確認することで判断できる。メッセージが同期要求である場合、ステップＳ４２に処理が進む。メッセージが同期要求でない場合、すなわち、メッセージが更新通知である場合、ステップＳ４４に処理が進む。なお、更新通知を示すメッセージの先頭には、例えば、記号「１」が含まれている。
【００９９】
（Ｓ４２）データ同期部１４３は、ステップＳ４０で受信したメッセージからオリジンを示す文字列とデータを抽出する。データ同期部１４３は、同期データ記憶部１４４に記憶された同期データテーブル１４５から、メッセージで指定されたオリジンに対応するデータを全て検索する。そして、データ同期部１４３は、同期データテーブル１４５から検索したデータとメッセージから抽出したデータとを比較し、差分データを生成する。
【０１００】
例えば、データ同期部１４３は、同期データテーブル１４５に含まれメッセージに含まれないキーが存在する場合、同期データテーブル１４５内の当該キーとそれに対応する値の組を差分データに挿入する。これは、ローカルストレージ１２４に当該キーと値の組を追加することを示す。また、データ同期部１４３は、同期データテーブル１４５とメッセージとの間で、同じキーが存在し当該キーに対応する値が異なる場合、当該キーとそれに対応する同期データテーブル１４５内の値の組を差分データに挿入する。これは、当該キーに対応するローカルストレージ１２４内の値を上書きすることを示す。また、データ同期部１４３は、同期データテーブル１４５に含まれずメッセージに含まれるキーが存在する場合、当該キーと空文字列との組を差分データに挿入する。これは、当該キーと値との組をローカルストレージ１２４から削除することを示す。
【０１０１】
（Ｓ４３）データ同期部１４３は、ステップＳ４２で生成した差分データを含むメッセージを、Ｗｅｂソケットによってブラウザ１２０に送信する。
（Ｓ４４）データ同期部１４３は、ステップＳ４０で受信したメッセージからオリジンを示す文字列とデータを抽出する。そして、データ同期部１４３は、メッセージで指定されたオリジンと対応付けて、抽出したデータを同期データテーブル１４５に格納する。
【０１０２】
例えば、データ同期部１４３は、メッセージに含まれるキーが同期データテーブル１４５に存在しない場合、当該キーと値の組を同期データテーブル１４５に追加する。また、データ同期部１４３は、メッセージと同期データテーブル１４５との間で、同じキーが存在し値が異なる場合、同期データテーブル１４５に記憶された当該キーに対応する値を上書きする。また、データ同期部１４３は、メッセージにキーと空文字列の組が含まれる場合、同期データテーブル１４５から当該キーと値の組を削除する。
【０１０３】
（Ｓ４５）データ同期部１４３は、同じオリジンのＷｅｂサイトにアクセス中の他のブラウザ（ブラウザ１３０）が存在するか判断する。該当する他のブラウザが存在するか否かは、例えば、他のブラウザと対応付けて、メッセージで指定されたオリジンがアクセス情報テーブル１４６に登録されているかによって判断できる。ただし、データ同期部１４３は、定期的に他のブラウザ（ブラウザ１３０）に対してＷｅｂソケットのメッセージを送信して、同一オリジンに関する制御ページが表示されているか確認してもよい。また、データ同期部１４３は、更新通知のメッセージを受信したときに、他のブラウザに対してＷｅｂソケットのメッセージを送信して確認してもよい。該当する他のブラウザが存在する場合はステップＳ４６に処理が進み、存在しない場合は処理を終了する。
【０１０４】
（Ｓ４６）データ同期部１４３は、ステップＳ４５に該当する他のブラウザ（ブラウザ１３０）に対して、Ｗｅｂソケットによって更新通知を示すメッセージを送信する。
図１２は、ブラウザアクセス処理の手順例を示すフローチャートである。
【０１０５】
このブラウザアクセス処理は、ブラウザ１２０によって実行される。ブラウザ１３０でもブラウザ１２０と同様の処理が行われ得る。
（Ｓ５０）通信部１２３は、プロキシサーバ１４０にＨＴＴＰリクエストを送信する。
【０１０６】
（Ｓ５１）通信部１２３は、プロキシサーバ１４０から、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。ＵＩ制御部１２１は、取得したＨＴＭＬファイルに基づいてレンダリングを行い、あるウィンドウ（タブでもよい）にＷｅｂページを表示する。
【０１０７】
（Ｓ５２）スクリプト実行部１２２は、ステップＳ５１で取得したＨＴＭＬファイルに含まれるスクリプトを実行する。ここでは、スクリプト実行部１２２は、取得したＨＴＭＬファイルと同じオリジンを含むＵＲＬを指定しており所定の文字列を含むＨＴＴＰリクエストを生成する。通信部１２３は、スクリプト実行部１２２が生成したＨＴＴＰリクエストをプロキシサーバ１４０に送信する。このＨＴＴＰリクエストは、制御ページを示すＨＴＭＬファイルを取得するための制御ページ要求に相当する。
【０１０８】
（Ｓ５３）通信部１２３は、ステップＳ５２で送信したＨＴＴＰリクエストの応答として、ＨＴＭＬファイルを含むＨＴＴＰレスポンスをプロキシサーバ１４０から受信する。ＵＩ制御部１２１は、ステップＳ５１のＷｅｂページが表示されたウィンドウとは異なる新たなウィンドウ（新たなタブでもよい）を起動する。そして、ＵＩ制御部１２１は、取得したＨＴＭＬファイルに基づいてレンダリングを行い、新たなウィンドウに制御ページを表示する。ただし、制御ページには文字や画像が含まれない可能性がある。
【０１０９】
（Ｓ５４）スクリプト実行部１２２は、ステップＳ５３で取得したＨＴＭＬファイルに含まれるスクリプトを実行する。ここでは、スクリプト実行部１２２は、プロキシサーバ１４０とＷｅｂソケットのコネクションを確立するよう通信部１２３に指示する。通信部１２３は、指示に応じてＷｅｂソケットのコネクションを確立する。
【０１１０】
（Ｓ５５）スクリプト実行部１２２は、ローカルストレージ１２４から、ステップＳ５３で取得したＨＴＭＬファイルとオリジンが同一（すなわち、ステップＳ５１で取得したＨＴＭＬファイルともオリジンが同一）であるデータを全て抽出する。
【０１１１】
（Ｓ５６）スクリプト実行部１２２は、メッセージの種類を示す記号「０」と、ステップＳ５３で取得したＨＴＭＬファイルのオリジンを示す文字列と、ステップＳ５５で抽出したデータとを含む同期要求を生成する。通信部１２３は、ステップＳ５４で確立したＷｅｂソケットのコネクションを用いて、同期要求をプロキシサーバ１４０に送信する。
【０１１２】
（Ｓ５７）通信部１２３は、ステップＳ５４で確立したＷｅｂソケットのコネクションを用いて、差分データを含むメッセージをプロキシサーバ１４０から受信する。スクリプト実行部１２２は、Ｗｅｂソケットのメッセージが受信されたことを検出し、メッセージに含まれる差分データをローカルストレージ１２４に保存する。
【０１１３】
例えば、スクリプト実行部１２２は、差分データに含まれるキーがローカルストレージ１２４に存在しない場合、当該キーと値の組をローカルストレージ１２４に追加する。また、スクリプト実行部１２２は、差分データとローカルストレージ１２４との間で、同じキーが存在し値が異なる場合、ローカルストレージ１２４に記憶された当該キーに対応する値を上書きする。また、スクリプト実行部１２２は、差分データにキーと空文字列の組が含まれる場合、ローカルストレージ１２４から当該キーと値の組を削除する。
【０１１４】
図１３は、ブラウザ同期処理の手順例を示すフローチャートである。
このブラウザアクセス処理は、ブラウザ１２０によって繰り返し実行される。ブラウザ１３０でもブラウザ１２０と同様の処理が行われ得る。
【０１１５】
（Ｓ６０）スクリプト実行部１２２は、前述のステップＳ５３で取得したＨＴＭＬファイルに含まれるスクリプトに従って、ローカルストレージ１２４に関するイベント情報を監視する。制御ページとオリジンが同一の他のＷｅｂページによってローカルストレージ１２４が更新された場合に、更新されたデータを含むイベント情報が取得される。スクリプト実行部１２２は、ローカルストレージ１２４に関するイベント情報を取得したか判断する。ローカルストレージ１２４に関するイベント情報を取得した場合はステップＳ６１に処理が進み、取得していない場合はステップＳ６２に処理が進む。
【０１１６】
（Ｓ６１）スクリプト実行部１２２は、イベント情報から更新されたデータを抽出する。スクリプト実行部１２２は、メッセージの種類を示す記号「１」と、ステップＳ５３で取得したＨＴＭＬファイルのオリジンを示す文字列と、抽出したデータとを含む更新通知を生成する。通信部１２３は、前述のステップＳ５４で確立したＷｅｂソケットのコネクションを用いて、更新通知をプロキシサーバ１４０に送信する。
【０１１７】
（Ｓ６２）スクリプト実行部１２２は、プロキシサーバ１４０からＷｅｂソケットのメッセージが受信されたか判断する。メッセージが受信された場合はステップＳ６３に処理が進み、受信されていない場合は処理が終了する。
【０１１８】
（Ｓ６３）スクリプト実行部１２２は、ステップＳ６２で受信したメッセージに基づいてローカルストレージ１２４を更新する。
例えば、スクリプト実行部１２２は、メッセージに含まれるキーがローカルストレージ１２４に存在しない場合、当該キーと値の組をローカルストレージ１２４に追加する。また、スクリプト実行部１２２は、メッセージとローカルストレージ１２４との間で、同じキーが存在し値が異なる場合、ローカルストレージ１２４に記憶された当該キーに対応する値を上書きする。また、スクリプト実行部１２２は、メッセージにキーと空文字列の組が含まれる場合、ローカルストレージ１２４から当該キーと値の組を削除する。
【０１１９】
第２の実施の形態の情報処理システムによれば、プロキシサーバ１４０を介して、ブラウザ１２０のローカルストレージ１２４とブラウザ１３０のローカルストレージ１３４とを同期させることができる。これにより、ブラウザ１２０，１３０を使用して同じＷｅｂサイトにアクセスした場合であっても、ユーザが以前に入力した古いデータが意図せずサーバ装置２１にアップロードされてしまうことを抑制できる。よって、ユーザが入力した新しいデータが消去されてしまうことを抑制でき、また、公開したくない古いデータがユーザの意図に反して公開されてしまうことを抑制できる。
【０１２０】
また、元のＷｅｂページから制御ページを呼び出すＨＴＴＰリクエストでは、元のＷｅｂページと同じオリジンを含むＵＲＬを指定する。これにより、ブラウザ１２０，１３０のセキュリティの制限のもとでも、スクリプトによって当該ＨＴＴＰリクエストを送信することが許容される。また、ブラウザ１２０，１３０は、元のＷｅｂページと制御ページのオリジンが同一であると認識する。これにより、ＨＴＭＬ５の仕様のもとで、元のＷｅｂページによるローカルストレージの更新を検出することができる。また、ブラウザ１２０，１３０のセキュリティの制限のもとでも、制御ページのスクリプトによって、元のＷｅｂページと同じオリジンに関するローカルストレージのデータを扱うことができる。
【０１２１】
このように、ＨＴＭＬ５の仕様やブラウザ１２０，１３０のセキュリティの制限のもとでも、ローカルストレージ１２４，１３４を同期することが可能となる。よって、既存のブラウザ１２０，１３０を改変しなくてもよく、ローカルストレージ１２４，１３４の同期を容易に実現できる。また、ブラウザ１２０，１３０のセキュリティを維持できる。
【０１２２】
なお、第１の実施の形態の情報処理は、ローカルストレージ同期装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、サーバ装置２１や端末装置１００，１００ａ，１００ｂにプログラムを実行させることで実現できる。
【０１２３】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【０１２４】
２  サーバ
１０  ローカルストレージ同期装置
１１  通信部
１２  制御部
１３，１４  ブラウザ
１３ａ，１４ａ  ローカルストレージ
１５，１７  リクエスト
１６，１８  データ
１６ａ，１８ａ  スクリプト
１９  更新情報
【図１】
0006358049.tif 000002
【図２】
0006358049.tif 000003
【図３】
0006358049.tif 000004
【図４】
0006358049.tif 000005
【図５】
0006358049.tif 000006
【図６】
0006358049.tif 000007
【図７】
0006358049.tif 000008
【図８】
0006358049.tif 000009
【図９】
0006358049.tif 000010
【図１０】
0006358049.tif 000011
【図１１】
0006358049.tif 000012
【図１２】
0006358049.tif 000013
【図１３】
0006358049.tif 000014