(57)【要約】【課題】Ｗｅｂアプリケーション間でのデータの共有を容易にする。【解決手段】情報処理装置は、第１の実行部、第２の実行部、第３の実行部を備える。第１の実行部は、データ格納部にアクセスする。第２の実行部は、第１の実行部を介してデータ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行する。第３の実行部は、第１の実行部を介してデータ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行する。第１の実行部は、第２の実行部からデータ格納部に格納されたデータ中の対象データの更新が要求されると、更新を対象データに適用するとともに、対象データに適用した更新を第３の実行部に通知する。【選択図】図２
2017191445.tif 000002
【特許請求の範囲】
【請求項１】
データ格納部にアクセスする第１の実行部と、
前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行する第２の実行部と、
前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行する第３の実行部
を備え、
前記第１の実行部は、前記第２の実行部から前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第３の実行部に通知する
ことを特徴とする情報処理装置。
【請求項２】
前記第３の実行部は、
前記第１の実行部を介して前記データ格納部から取得したデータの複製を保持し、
前記第２のＷｅｂアプリケーションの実行により、前記対象データの複製を第１の値に更新した場合、前記第１の実行部に対して、前記対象データを前記第１の値に更新することを要求し、
前記第１の実行部から前記対象データが前記第１の値に更新されたことが通知された後に、前記対象データが第２の値に更新されたことが通知されると、前記対象データの複製を前記第２の値に更新する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第３の実行部は、
前記対象データが前記第１の値に更新されたことが通知される前に、前記第１の実行部から、前記対象データが前記第２の値に更新されたことが通知されると、前記対象データの前記第２の値への更新は、前記対象データが前記第１の値に更新される前に行われたと判定し、
前記対象データの複製を前記第２の値に更新しない
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記データ格納部にアクセスする第４の実行部と、
前記第４の実行部を介して前記データ格納部から取得済みのデータを用いて、第３のＷｅｂアプリケーションを実行する第５の実行部
をさらに備え、
前記データ格納部は、前記第１の実行部により前記対象データが更新されると、前記対象データが更新されたことと更新後の値を前記第４の実行部に通知し、
前記第４の実行部は、前記データ格納部から通知を受けると、前記対象データの最新の値が前記更新後の値と一致しているかの判定結果とともに、前記対象データの更新が発生したことを、前記第５の実行部に通知し、
前記第５の実行部は、前記対象データの最新の値が前記更新後の値と一致していない場合、前記第５の実行部が保持しているデータ中の前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第５の実行部は、
前記第３のＷｅｂアプリケーションの実行により、前記対象データの複製を第３の値に更新すると、前記第４の実行部に対して、前記対象データを前記第３の値に更新することを要求し、
前記対象データが前記第３の値に更新されたことが通知される前に、前記第４の実行部から、前記対象データが更新されたことと、前記対象データの最新の値が前記更新後の値と一致していることが通知されると、前記対象データの前記更新後の値への更新は、前記対象データが前記第３の値に更新される前に行われたと判定し、
前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
データ格納部にアクセスする管理アプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行し、
前記管理アプリケーションは、前記第１のＷｅｂアプリケーションから前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第２のＷｅｂアプリケーションに通知する
処理を情報処理装置が行うことを特徴とする情報処理方法。
【請求項７】
データ格納部にアクセスする管理アプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行し、
前記管理アプリケーションは、前記第１のＷｅｂアプリケーションから前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第２のＷｅｂアプリケーションに通知する
処理を情報処理装置に行わせることを特徴とする処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、処理プログラムに関する。
【背景技術】
【０００２】
Ｗｅｂアプリケーション（Ｗｅｂアプリ）は、インターネットなどのネットワークを介して使用するアプリケーションソフトウェアであり、Ｗｅｂブラウザ上で動作する。Ｗｅｂアプリは、例えばＪａｖａＳｃｒｉｐｔ（登録商標）などのプログラミング言語とＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＨＴＭＬ）で記述されており、Ｗｅｂサーバ側のプログラムと協調して動作する。
【０００３】
Ｗｅｂアプリは、ブラウジングコンテキストで実行される。ブラウジングコンテキストは、ＨＴＭＬ５の仕様によれば、文書が表示されるウィンドウやタブなどの環境を示す。また、ＨＴＭＬ５のインラインフレームなども、ブラウジングコンテキストと呼ばれる。ブラウジングコンテキストは、インストールされたＷｅｂブラウザ上で動作する。さらに、ＨＴＭＬ５を用いると、Ｗｅｂストレージを用いて複数のＷｅｂアプリの間でデータを共有することもできる。Ｗｅｂアプリは、Ｗｅｂ＿ＳｔｏｒａｇｅのＡＰＩ（Application Programming Interface）を介して、Ｗｅｂストレージにアクセスすることができる。
【０００４】
Ｗｅｂアプリは、オリジンと呼ばれるグループに属している。同一生成源ポリシー（Ｓａｍｅ  Ｏｒｉｇｉｎ  Ｐｏｌｉｃｙ：ＳＯＰ）が使用される場合、Ｗｅｂアプリは、同じオリジンに属している別のＷｅｂアプリに対する操作が許可されている。そのため、Ｗｅｂアプリは、同じオリジンに属している別のＷｅｂアプリに対して、例えば、Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ（以下、ＤＯＭ）操作や、Ｗｅｂアプリ間のメッセージの送受信などを行うことが許可されている。また、Ｗｅｂストレージの記憶領域にもオリジンが対応付けられており、Ｗｅｂアプリは、そのＷｅｂアプリと同じオリジンの領域にアクセスできる。
【０００５】
一方、同一生成源ポリシーが使用される場合、Ｗｅｂアプリは、異なるオリジンに属している別のＷｅｂアプリや記憶領域に対する操作を行うことが許可されていない。例えば、Ｗｅｂアプリは、異なるオリジンに属している別のＷｅｂアプリ等に対するＤＯＭ操作は許可されていない。このため、Ｗｅｂアプリの処理に起因して、異なるオリジンのＷｅｂアプリへデータが漏洩することなどを避けることができる。
【０００６】
関連する技術として、複数の端末でデータの分析画面を共有する方法が提案されている（例えば、特許文献１）。この方法では、サーバでは相場データを要求した端末と相場データの識別情報を対応付けている。第２の端末から第１の端末に表示されている相場データのリクエストを受信したサーバは、第１の端末に表示されているデータのうち、第２の端末に未送信の情報を第２の端末に送信する。また、複数のクライアントから選択されたクライアントをコラボレーションプロセスに招待するコラボレーション方法も提案されている（例えば、特許文献２）。さらに、端末が第１のサーバから取得したウェブページデータに記述されている処理に伴って要求される情報を、第１のサーバとは異なるドメインに属する第２のサーバから取得するシステムも提案されている（例えば、特許文献３）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第５４７７７９６号
【特許文献２】特表２００７−５２４９２９号公報
【特許文献３】特開２０１０−０１５３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
同一生成源ポリシーが用いられる場合、Ｗｅｂ＿ＳｔｏｒａｇｅのＡＰＩを介した記憶領域へのアクセスは、Ｗｅｂアプリケーションの属するオリジン単位で制御される。オリジンは、Ｗｅｂアプリケーションの配布者により決定されるが、配布者であっても、複数のＷｅｂアプリケーション間の関連性を考慮したオリジンの設計は困難である。このため、複数のＷｅｂアプリケーション間でのデータの共有も容易ではない。
【０００９】
本発明は、１つの側面では、Ｗｅｂアプリケーション間でのデータの共有を容易にすることを目的とする。
【課題を解決するための手段】
【００１０】
ある１つの態様にかかる情報処理装置は、第１の実行部、第２の実行部、第３の実行部を備える。第１の実行部は、データ格納部にアクセスする。第２の実行部は、前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行する。第３の実行部は、前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行する。前記第１の実行部は、前記第２の実行部から前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第３の実行部に通知する。
【発明の効果】
【００１１】
Ｗｅｂアプリケーション間でのデータの共有が容易になる。
【図面の簡単な説明】
【００１２】
【図１】実施形態にかかるシステムの例を説明する図である。
【図２】実施形態にかかる方法を用いたときの処理の例を説明する図である。
【図３】情報処理装置の構成の例を説明する図である。
【図４】情報処理装置のハードウェア構成の例を説明する図である。
【図５】取得データの取得方法の例を説明するシーケンス図である。
【図６】履歴情報の例を説明する図である。
【図７】通信方法の例を説明するシーケンス図である。
【図８】履歴情報の更新処理の例を説明する図である。
【図９】Ｗｅｂアプリがデータの書き込み処理を行うときの処理の例を説明するフローチャートである。
【図１０】データの書き込みの通知を受けたときの管理アプリの処理の例を説明するフローチャートである。
【図１１】管理アプリから通知を受けたときのＷｅｂアプリの処理の例を説明するフローチャートである。
【図１２】他のＷｅｂアプリによる書き込み処理の通知を受けたときのＷｅｂアプリの処理の例を説明するフローチャートである。
【図１３】他のＷｅｂアプリによるデータ消去の通知を受けたときのＷｅｂアプリの処理の例を説明するフローチャートである。
【図１４】情報処理装置で行われる処理順序の例を説明する図である。
【図１５】第２の実施形態にかかる通信方法の例を説明する図である。
【図１６】通信方法の例を説明するシーケンス図である。
【図１７】通知を受けた管理アプリでの処理の例を説明するフローチャートである。
【図１８】他のＷｅｂアプリによる書き込み処理の通知を受けたときのＷｅｂアプリの処理の例を説明するフローチャートである。
【図１９】他のＷｅｂアプリによるデータ消去の通知を受けたときのＷｅｂアプリの処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
図１は、実施形態にかかるシステムの例を説明する図である。情報処理装置１００には、ブラウザ１１０がインストールされている。ブラウザ１１０は、複数のブラウジングコンテキスト（ＢＣ）を提供することができる。ブラウジングコンテキストは、例えば、ウィンドウ、タブ、インラインフレームなどであり、各ＢＣでは、Ｗｅｂアプリが実行される。複数のＢＣは階層化（nested）されてもよい。図１の例では、ブラウザ１１０において、トップレベルＢＣ１２０、子ＢＣ１３０ａ、子ＢＣ１３０ｂがツリー状に提供されている。子ＢＣ１３０ａおよび子ＢＣ１３０ｂは、トップレベルＢＣ１２０にネスティングしているブラウジングコンテキストであり、トップレベルＢＣ１２０は、子ＢＣ１３０ａと子ＢＣ１３０ｂの親ＢＣである。例えば、トップレベルＢＣ１２０はトップレベルのウィンドウであってもよく、子ＢＣ１３０ａと子ＢＣ１３０ｂは、トップレベルＢＣ１２０内のインラインフレームであってもよい。
【００１４】
図１の例では、トップレベルＢＣ１１０において管理アプリ５０が実行され、子ＢＣ１３０ａにおいてＷｅｂアプリ３０ａ、子ＢＣ１３０ｂにおいてＷｅｂアプリ３０ｂが実行されているとする。また、管理アプリ５０はオリジンＸ、Ｗｅｂアプリ３０ａはオリジンＲ、Ｗｅｂアプリ３０ｂはオリジンＳに属するものとする。
【００１５】
情報処理装置１００は、データ格納部１５０も備える。データ格納部１５０は、ブラウザ１１０を実行する情報処理装置１００内の記憶装置によって実現される。ここで、記憶装置は、情報処理装置１００が備える主記憶装置、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ（ＨＤＤ）や、それらの組み合わせである。図１の例では、データ格納部１５０は、オリジンＸに対応付けられた記憶領域１５１を確保している。
【００１６】
ブラウザ１１０は、Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ１４０を提供することができる。Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ１４０は、管理アプリ５０から記憶領域１５１へのアクセスを仲介するインタフェースである。図１の例では、データ格納部１５０は、オリジンＸに対応付けられた記憶領域を有しているが、オリジンＲやオリジンＳに対応付けられた記憶領域を確保しないとする。従って、Ｗｅｂアプリ３０ａやＷｅｂアプリ３０ｂは、それらのアプリケーションから直接アクセス可能な記憶領域をデータ格納部１５０内に保持していない。一方、管理アプリ５０は記憶領域１５１に対応付けられたオリジンと同じオリジンＸに対応付けられているため、管理アプリ５０は、記憶領域１５１へのデータの書き込み、読み出しなどを行うことができる。従って、Ｗｅｂアプリ３０ａとＷｅｂアプリ３０ｂは、管理アプリ５０を介して、記憶領域１５１に格納されているデータへのアクセスやデータの共有を行うことができる。この場合、コールバック関数を用いる処理が可能である。
【００１７】
（１）コールバック関数を用いた処理
例えば、Ｗｅｂアプリ３０ａが記憶領域１５１に対してアクセスする場合、Ｗｅｂアプリ３０ａを実行する実行部３３ａは、管理アプリ５０に対してアクセスを求める第１の要求を出力する。管理アプリ５０を実行する実行部５３は、第１の要求を取得し、要求された処理内容を特定する。第１の要求には、書き込み処理（setItem）や読み込み処理 （getItem）などの処理命令が含まれる。
【００１８】
管理アプリ５０の実行部５３は、第１の要求の要求元のＷｅｂアプリ３０に、データへのアクセス権がある場合、第１の要求で要求された処理を記憶領域１５１に行うための第２の要求を生成する。ここで、Ｗｅｂアプリ３０と管理アプリ５０の間でのメッセージの入出力はＪａｖａＳｃｒｉｐｔ（登録商標）などを用いてシングルスレッドな処理として行われる。このため、例えば、第１の要求により、Ｗｅｂアプリ３０ａが記憶領域１５１中の値の読み出し要求をすると、一旦、第１の要求が終了しないと、第２の要求が行われないことになってしまう。そこで、Ｗｅｂアプリ３０ａを実行する実行部３３ａは、管理アプリ５０にデータの取得を要求するが、管理アプリ５０からデータが得られるのを待たずに第１の要求による処理を終了する。
【００１９】
一方、管理アプリ５０中の実行部５３は、第１の要求の要求元に取得した値を出力するためのコールバック関数として、記憶領域１５１への第２の要求を生成する。すなわち、実行部５３は、第１の要求の呼び出し元のＢＣが子ＢＣ１３０ａであることと、第１の要求を識別する識別子を含むコールバック関数を第２の要求として生成する。ここで、コールバック関数に含まれる識別子と第１の要求の呼び出し元の情報は、得られた情報の出力先を特定するために使用される。すなわち、実行部５３は、第２の要求の応答として、コールバック関数中の識別子に対応付けられたデータを記憶領域１５１から取得すると、コールバック関数に含まれている呼び出し元ＢＣに、得られたデータを出力する。コールバック関数には、Ｗｅｂアプリ３０ａが実行されている子ＢＣ１３０ａが含まれているので、実行部５３は、記憶領域１５１から読み出したデータを、Ｗｅｂアプリ３０ａに出力する。
【００２０】
このように、管理アプリ５０が、Ｗｅｂアプリ３０ａによる記憶領域１５１へのアクセスを仲介することで、オリジン単位の制御ではなくＷｅｂアプリ単位での記憶領域１５１へのアクセス制御が可能になる。また、Ｗｅｂアプリ３０ｂがデータの書き込みや読み込みを行う際にも、同様に、管理アプリ５０が書き込み処理や読み込み処理を中継できる。そのため、オリジンＲに属するＷｅｂアプリ３０ａやオリジンＳに属するＷｅｂアプリ３０ｂから、オリジンＸに属するデータ格納部１５０に対する書き込み処理や読み込み処理が可能となる。
【００２１】
しかしながら、コールバック関数を用いた処理を行う場合、プログラムがシーケンシャルに記載されないため、プログラムの記載が複雑になりやすいという問題がある。さらに、ＨＴＭＬ５で標準となっているＷｅｂ  Ｓｔｒａｇｅの処理の場合とはプログラムの記載が異なるので、置き換え処理が煩雑になり、記載ミスによるバグが発生する可能性が高くなる。
【００２２】
（２）各Ｗｅｂアプリ３０がデータの複製を保持する方式
そこで、各Ｗｅｂアプリ３０の初期設定の際に、各Ｗｅｂアプリ３０の実行部３３が、記憶領域１５１中のデータのうちで、そのＷｅｂアプリ３０にアクセス権のあるデータを取得し、取得済みのデータを用いてＷｅｂアプリ３０を実行する方式が考えられる。
【００２３】
例えば、初期設定において、Ｗｅｂアプリ３０ａを実行する実行部３３ａは、記憶領域１５１中に記憶されているデータのうちＷｅｂアプリ３０ａの処理に使用する情報を、管理アプリ５０に要求する。管理アプリ５０中の実行部５３は、Ｗｅｂアプリ３０ａからＷｅｂアプリ３０ａにアクセス権のあるデータの読み込みが要求された場合、要求されたデータを取得し、Ｗｅｂアプリ３０ａに出力する。実行部３３ａは、取得した情報を、記憶領域１５１中のデータの複製として記憶する。すなわち、実行部３３ａは、Ｗｅｂアプリ３０ａが使用可能なメモリ領域に取得済みのデータを格納する。なお、以下の説明では、各データは、そのデータの検索などに使用されるキーと値の組み合わせとして記憶領域１５１に格納されており、Ｗｅｂアプリ３０ａも同様の形式で記憶するものとする。実行部３３ａは、Ｗｅｂアプリ３０ａの実行の際には取得済みのデータを使用する。
【００２４】
Ｗｅｂアプリ３０ｂを実行する実行部３３ｂもＷｅｂアプリ３０ａと同様に、管理アプリ５０を介して記憶領域１５１中のデータのうち、Ｗｅｂアプリ３０ｂでの処理に使用する情報を取得し、取得したデータを記憶する。また、実行部３３ｂも、Ｗｅｂアプリ３０ｂの実行の際には、取得済みのデータを使用する。
【００２５】
この場合、複数のＷｅｂアプリ３０がアクセス可能なデータについては、各Ｗｅｂアプリ３０での処理に使用されることによって、初期設定の際に取得済みのデータと記憶領域１５１中の最新データの間に不整合が発生する可能性がある。このため、実行部５３は、いずれかのＷｅｂアプリ３０の実行部３３から要求されたデータの更新を記憶領域１５１に適用すると共に、他のＷｅｂアプリ３０にもデータの更新を通知することで、不整合の発生を防止する。
【００２６】
図２は、実施形態にかかる方法を用いたときの処理の例を説明する図である。図２では、縦を時間軸Ｔとして、各アプリケーションでの処理順序を示している。なお、時間軸Ｔに示すように時間が経過している。
【００２７】
ケースＣ１において、例えば、Ｗｅｂアプリ３０ａの処理により、キー＝ｋのデータの変更が発生したとする（手順Ｐ１）。すると、実行部３３ａは、管理アプリ５０に対して、記憶領域１５１中のキー＝ｋのデータの更新を要求する（矢印Ａ１）。さらに、実行部３３ａは、キー＝ｋのデータは、更新処理中であることを記憶する。
【００２８】
手順Ｐ２において、管理アプリ５０の実行部５３は、Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ１４０を介して記憶領域１５１にアクセスすることにより、記憶領域１５１中のキー＝ｋのデータの値をＷｅｂアプリ３０ａから通知された値に変更する。その後、記憶領域１５１のデータをＷｅｂアプリ３０ａからの要求に応じて更新したことをＷｅｂアプリ３０ａに通知する。すると、実行部３３ａは、キー＝ｋのデータを、更新処理中ではないデータに設定変更する。
【００２９】
ここで、キー＝ｋのデータは、Ｗｅｂアプリ３０ａ以外にＷｅｂアプリ３０ｂにおいても使用されている可能性がある。そこで、実行部５３は、キー＝ｋのデータが更新されていることと、更新後の値を、Ｗｅｂアプリ３０ｂに通知する（矢印Ａ２）。
【００３０】
手順Ｐ３において、Ｗｅｂアプリ３０ｂにおいて、実行部３３ｂは、通知された値がキー＝ｋのデータの最新の値であるかを判定する。実行部３３ｂは、キー＝ｋのデータの最新の値であると判定すると、Ｗｅｂアプリ３０ｂの処理に使用しているデータの複製のうちのキー＝ｋのデータを通知された値に変更する。
【００３１】
ここで、キー＝ｋのデータの最新の値であるかを判定する際に、実行部３３ｂは、更新が通知されたデータに対して、実行部３３ｂ自身が行った更新についての処理結果を待ち合わせている状態であるかを基準として用いる。更新が通知されたデータに対して処理結果を待ち合わせている状態である場合、今回通知された更新の後に、実行部３３ｂ自身が要求した更新の処理が行われることになる。そこで、実行部３３ｂは、Ｗｅｂアプリ３０ｂが処理に使用する複製中のキー＝ｋのデータを、通知された値に更新しない。
【００３２】
一方、更新が通知されたデータに対して実行部３３ｂが更新を要求していないか、実行部３３ｂが要求した更新の結果が通知されたため、処理結果を待ち合わせている状態ではないとする。この場合、更新が通知されたデータが最新の値となる可能性があるので、実行部３３ｂは、Ｗｅｂアプリ３０ｂが処理に使用するために格納しているデータの複製において、キー＝ｋのデータを、通知された値に更新する。
【００３３】
なお、ケースＣ１では、データ変更のみが行われるケースを説明したが、データの変更とともにイベント発行が行われても良い。
【００３４】
ケースＣ２では、Ｗｅｂアプリ３０ａは、データの更新と共にイベントを発行する（手順Ｐ１１）。ここで、Ｗｅｂアプリ３０ａによって発行されるイベントは、Ｗｅｂアプリ３０ｂでのデータの更新を要求するものとする。Ｗｅｂアプリ３０ａは、データの更新とイベントの発行を管理アプリ５０に通知するが、管理アプリ５０は、通知された処理を１つずつ行う。ケースＣ２では、管理アプリ５０は、まず、Ｗｅｂアプリ３０ａの通知に従って、記憶領域１５１中のデータを更新し、各Ｗｅｂアプリ３０に対して、更新の情報を通知する（手順Ｐ１２）。手順Ｐ１２の詳細は、ケースＣ１と同様である。その後、管理アプリ５０は、Ｗｅｂアプリ３０ａから通知されたイベントを他のＷｅｂアプリ３０に通知する（手順Ｐ１３）。Ｗｅｂアプリ３０ｂは、管理アプリ５０での手順Ｐ１２による通知を受け取ると、通知されたデータが最新の値かを確認し、最新の値である場合は通知に従って、記憶領域１５１の情報のコピーを変更する（手順Ｐ１４）。手順Ｐ１４の詳細は、ケースＣ１の矢印Ａ２や手順Ｐ３を参照しながら説明した処理と同様である。その後、Ｗｅｂアプリ３０ｂにおいて管理アプリ５０から通知されたイベントの処理を行うことにより、Ｗｅｂアプリ３０ｂが保持しているデータが更新される（手順Ｐ１５）。このとき、手順Ｐ１５では、Ｗｅｂアプリ３０ｂは、Ｗｅｂアプリ３０ａでの処理後の値に対して処理を行っているので、Ｗｅｂアプリ３０ｂとＷｅｂアプリ３０ａの間でのデータの不整合は発生しない。その後、Ｗｅｂアプリ３０ｂもケースＣ１で説明した処理と同様に、管理アプリ５０にデータの更新を通知するので、Ｗｅｂアプリ３０ｂの更新に合わせて各Ｗｅｂアプリ３０でのデータの複製も適宜更新される。
【００３５】
このように、実施形態にかかる方法では、各Ｗｅｂアプリ３０が記憶領域１５１中のデータの複製を保持し、データの更新が行われると、更新処理を管理アプリ５０に要求したＷｅｂアプリ３０ａ以外のＷｅｂアプリ３０ｂに、データの更新が通知される。このため、複数のＷｅｂアプリ３０が共有しているデータについても、各Ｗｅｂアプリ３０が最新のデータに基づいた処理を行うことができる。従って、Ｗｅｂアプリケーション間でのデータの共有が容易になる。さらに、各Ｗｅｂアプリ３０が記憶領域１５１中のデータの複製を保持している場合でも、各Ｗｅｂアプリ３０は管理アプリ５０を介して記憶領域１５１中のデータにアクセスできる。従って、コールバック関数が使用される場合と同様に、Ｗｅｂアプリ単位での記憶領域１５１へのアクセス制御が可能になる。そのため、オリジンＲに属するＷｅｂアプリ３０ａから、オリジンＲと異なるオリジンＸに対応付けられたデータ格納部１５０への、管理アプリ５０を介したデータの書き込みや読み込み処理が可能である。
【００３６】
さらに、各Ｗｅｂアプリ３０が記憶領域１５１中のデータの複製を保持しているので、各Ｗｅｂアプリ３０中の実行部３３は、あらかじめ保持されているデータの複製を用いて処理を行うことができる。従って、プログラムをシーケンシャルに記載することができ、バグを未然に防ぐことができる。
【００３７】
なお、図１、図２は実施形態の一例であり、実装に応じて、Ｗｅｂアプリ３０の数や階層化の状況は変更され得る。すなわち、図１中に示したブラウザ１１０内の各ＢＣの階層、ＢＣの数、ＢＣ同士が階層化されているか否か、ＢＣ同士が階層化されている場合のＢＣ間の親子関係などは一例であり、実装に応じて変更され得る。また、管理アプリ５０は、ＢＣが階層化されていなくとも、記憶領域１５１へのアクセス制御は可能である。
【００３８】
＜装置構成＞
以下、各Ｗｅｂアプリ３０がデータの複製を保持する方式を用いる場合について詳しく説明する。
【００３９】
図３は、情報処理装置１００の構成の例を説明する図である。情報処理装置１００は、インストールされているブラウザ１１０を動作させる。管理アプリ５０は、ブラウザ１１０によって実現されているトップレベルＢＣ１２０上で実行される。管理アプリ５０が実行されると、管理アプリ５０に含まれているコードによる処理は、メッセージ出力部５１、メッセージ取得部５２、実行部５３として実現される。管理アプリ５０の実行中に実行部５３がアクセス可能なメモリや記憶装置が、データ格納部１５０として使われる。データ格納部１５０には、記憶領域１５１が含まれる。
【００４０】
メッセージ取得部５２は、他のＷｅｂアプリ３０からメッセージを取得する。メッセージ出力部５１は、他のＷｅｂアプリ３０にメッセージを出力する。実行部５３は、他のＷｅｂアプリ３０などからの要求に応じて、記憶領域１５１中のデータにアクセスすると共に、処理結果をＷｅｂアプリ３０に通知する。なお、実行部５３は、データの更新に関する処理結果については、要求元以外のＷｅｂアプリ３０にも通知する。
【００４１】
次に、Ｗｅｂアプリ３０について説明する。管理アプリ５０中の実行部５３は、ブラウザ１００からＷｅｂアプリ３０の実行要求を受け取ると、実行要求を受けたＷｅｂアプリ３０を、適宜、ネットワーク中の他のサーバなどからダウンロードして、子ＢＣ１３０や孫ＢＣなどで実行させる。
【００４２】
Ｗｅｂアプリ３０が実行されると、Ｗｅｂアプリ３０に含まれているコードによる処理はメッセージ出力部３１、メッセージ取得部３２、実行部３３として実現される。また、Ｗｅｂアプリ３０の実行中に実行部３３がアクセスすることが可能なメモリや記憶装置に、取得データ３５や履歴情報３６が格納される。取得データ３５は、初期設定時などに、管理アプリ５０を介して取得した記憶領域１５１中のデータの複製である。履歴情報３６は、実行部３３の処理によってデータが更新され、記憶領域１５１中のデータへの反映を管理アプリ５０に要求したデータについての更新履歴の情報である。なお、履歴情報３６としては、実行部３３が要求した処理の処理結果を待ち合わせているデータについての情報が記録される。メッセージ出力部３１は、実行部３３の処理によって生成されたメッセージを出力する。メッセージ取得部３２は、他のＷｅｂアプリ３０や管理アプリ５０から出力されたメッセージなどを取得する。実行部３３は、Ｗｅｂアプリ３０での処理を実行する。
【００４３】
ブラウザ１１０中で動作する管理アプリ５０の数やＷｅｂアプリ３０の数は任意である。図３では、Ｗｅｂアプリ３０ａ、Ｗｅｂアプリ３０ｘ、Ｗｅｂアプリ３０ｙがブラウザ１１０中で動作している。
【００４４】
図４は、情報処理装置１００のハードウェア構成の例を説明する図である。情報処理装置１００は、プロセッサ１１、メモリ１２、バス１５、外部記憶装置１６、ネットワーク接続装置１９を備える。情報処理装置１００は、さらに、入力装置１３、出力装置１４、媒体駆動装置１７の１つ以上を有していても良い。
【００４５】
プロセッサ１１は、Central Processing Unit（ＣＰＵ）を含む任意の処理回路である。情報処理装置１００において、プロセッサ１１は、メッセージ出力部３１、メッセージ取得部３２、実行部３３として動作する。さらに、プロセッサ１１は、メッセージ出力部５１、メッセージ取得部５２、実行部５３としても動作する。プロセッサ１１は、処理によって得られたデータの記録や記憶しているデータの取得の際に、適宜、メモリ１２や外部記憶装置１６を使用する。このため、メモリ１２および外部記憶装置１６は、取得データ３５や履歴情報３６の格納に使用される。同様に、メモリ１２や外部記憶装置１６は、管理アプリ５０での処理にも使用される。プロセッサ１１は、メモリ１２や外部記憶装置１６に記憶されたプログラムを実行することができる。プロセッサ１１が実行するプログラムは、例えば、管理アプリ５０、Ｗｅｂアプリ３０ａ、Ｗｅｂアプリ３０ｂなどである。メモリ１２には、ＲＡＭ（Random Access Memory）が含まれ、さらに、ＲＯＭ（Read Only Memory）等の不揮発性のメモリも含まれる。外部記憶装置１６は、例えば、ＨＤＤ（Hard Disk Drive）でもよく、Ｓｏｌｉｄ‐Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ、Solid State Drive）でもよい。
【００４６】
情報処理装置１００は、ネットワーク接続装置１９を介して、ネットワーク中の他の装置と通信する。バス１５は、プロセッサ１１、メモリ１２、入力装置１３、出力装置１４、外部記憶装置１６、媒体駆動装置１７、ネットワーク接続装置１９を、相互にデータの送受信が可能になるように接続する。
【００４７】
入力装置１３は、キーボードやマウスなど、情報の入力に使用される任意の装置であり、出力装置１４は、ディスプレイなど、データの出力に使用される任意の装置である。媒体駆動装置１７は、メモリ１２や外部記憶装置１６のデータを可搬型記憶媒体１８に出力することができ、また、可搬型記憶媒体１８からプログラムやデータ等を読み出すことができる。ここで、可搬型記憶媒体１８は、Compact Disc Recordable（ＣＤ−Ｒ）やDigital Versatile Disk Recordable（ＤＶＤ−Ｒ）を含む、持ち運びが可能な任意の記憶媒体とすることができる。
【００４８】
＜第１の実施形態＞
以下の説明では、いずれのアプリケーションによる処理であるかを分かりやすくするために、符号の末尾に処理を実行するアプリケーションの符号の末尾と同じアルファベットを付けて記載することがある。例えば、Ｗｅｂアプリ３０ｘが実行されている場合、実行部３３ｘは、Ｗｅｂアプリ３０ｘを実行する実行部３３である。
【００４９】
図５は、取得データ３５の取得方法の例を説明するシーケンス図である。初期設定の際に、実行部３３ｘは、記憶領域１５１中に記録されているデータのうち、Ｗｅｂアプリ３０ｘがアクセス可能な情報のコピーを要求するメッセージを生成する。実行部３３ｘは、生成した要求メッセージを、メッセージ出力部３１ｘを介して、管理アプリ５０に出力する（ステップＳ１）。
【００５０】
管理アプリ５０では、メッセージ取得部５２が要求メッセージを取得し、要求メッセージを実行部５３に出力する。実行部５３は、Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ１４０を介してデータ格納部１５０中の記憶領域１５１にアクセスすることにより、Ｗｅｂアプリ３０ｘにアクセス権のあるデータを取得する（ステップＳ２）。なお、実行部５３は、データを、データの識別に使用するキーとそのキーに対応付けられた値の組み合わせとして取得する。実行部５３は、取得したデータを、メッセージ出力部５１を介してＷｅｂアプリ３０ｘに出力する（ステップＳ３）。Ｗｅｂアプリ３０ｘを実行する実行部３３ｘは、記憶領域１５１に格納されているデータのうちでＷｅｂアプリ３０ｘにアクセス権のあるデータのコピーを、メッセージ取得部３２ｘを介して取得する（ステップＳ４）。実行部３３ｘは、取得したデータのコピーを取得データ３５ｘとして格納する。ここで、履歴情報３６ｘには、実行部３３ｘでの処理によるデータの更新を管理アプリ５０に要求する場合の履歴の情報が記録されるが、初期設定の段階では、実行部３３ｘはいずれのデータに対する更新も行っていない。そこで、実行部３３ｘは、履歴情報３６ｘの情報を初期化する（ステップＳ５）。
【００５１】
他のＷｅｂアプリ３０も、初期設定の際に、記憶領域１５１に記録されている情報のうちで、そのＷｅｂアプリ３０がアクセス可能なデータを、図５に示す処理と同様の処理により管理アプリ５０から取得する。なお、図５の説明では、初期設定の際に行われる処理として説明したが、図５に示すデータの取得処理は、実装に応じて初期設定以外のタイミングで行われても良い。例えば、ブラウザ１１０中で動作する各Ｗｅｂアプリ３０と記憶領域１５１中の情報の不一致を防止するために、所定期間ごとに、図５に示す処理が各Ｗｅｂアプリ３０によって行われても良い。
【００５２】
図６は、履歴情報３６の例を説明する図である。履歴情報３６は、実行部３３での処理対象となったデータの特定に使用するキーと、そのキーに対応付けられている値の変更履歴を含む。履歴情報３６ｘ−１では、各キーに対して、実行部３３での処理前にそのキーに対応付けられていた値（変更前の値）、実行部３３の処理によって得られた値（変更後の値）、ＩＤが記録されている。ＩＤは、実行部３３での処理によってデータが変更された場合に、管理アプリ５０に対して行われたデータ変更の要求を識別する際に使用される。なお、ＩＤは、個々のＷｅｂアプリ３０によって独立に使用されるので、複数のＷｅｂアプリ３０において同じＩＤが使用されても良い。
【００５３】
履歴情報３６ｘ−１のｋｅｙ＝ｋに対応付けられた情報では、ｋｅｙ＝ｋの値がｗからｘに変更され、ｋｅｙ＝ｋの値をｘに変更することがＩＤ＝１に対応付けて管理アプリ５０に要求されたことが記録されている。同様に、ｋｅｙ＝３の値がｗｗからｘｘに変更され、ｋｅｙ＝３の値をｘｘに変更することがＩＤ＝２に対応付けて管理アプリ５０に要求されたことが記録されている。
【００５４】
履歴情報３６ｘ−１中のＣｌｅａｒ処理ＩＤは、実行部３３ｘが管理アプリ５０に対してＣｌｅａｒを要求したときのＩＤの番号である。ここで、Ｃｌｅａｒは、全てのデータを初期化することを要求する命令である。このため、例えば、実行部３３ｘがＣｌｅａｒ処理を行う場合、記憶領域１５１中の情報のうち、Ｗｅｂアプリ３０ｘがアクセス可能なデータの値が初期化される。Ｃｌｅａｒ処理を行う場合、実行部３３ｘは、Ｃｌｅａｒ処理ＩＤを生成し、生成したＣｌｅａｒ処理ＩＤに対応付けて管理アプリ５０にＣｌｅａｒ処理を要求する。さらに、実行部３３ｘは、Ｃｌｅａｒ処理ＩＤを履歴情報３６に記録する。
【００５５】
なお、履歴情報３６中に含まれる情報の数は任意であるので、例えば、履歴情報３６ｘ−２や履歴情報３６ｙのように、１つのキーについての情報が含まれる履歴情報３６が生成されても良い。また、３つ以上のキーについての情報が履歴情報３６に含められても良い。
【００５６】
図７は、通信方法の例を説明するシーケンス図である。以下、適宜、図６を参照しながら、Ｗｅｂアプリ３０ｘとＷｅｂアプリ３０ｙのいずれもがｋｅｙ＝ｋのデータにアクセスする場合を例として、各Ｗｅｂアプリ３０で保持するデータや記憶領域１５１中のデータに対して行われる処理を説明する。なお、Ｗｅｂアプリ３０ｘとＷｅｂアプリ３０ｙのいずれも、図５に示す方法によって、取得データ３５を取得しているものとする。
【００５７】
いずれのＷｅｂアプリ３０にも処理される前は、ｋｅｙ＝ｋの値はｗであるとする。その後、Ｗｅｂアプリ３０ｘの実行により、実行部３３ｘは、取得データ３５ｘ中のｋｅｙ＝ｋの値にｘを代入したとする（ステップＳ１１）。さらに、実行部３３ｘは、履歴情報３６ｘの情報を更新する。ここでは、ｋｅｙ＝ｋの他にｋｅｙ＝３についても処理が行われていたため、履歴情報３６ｘ−１（図６）が得られたとする。実行部３３ｘは、ｋｅｙ＝ｋの値にｘを代入することを要求する命令（Ｓｅｔ  ｋ，ｘ）を、ＩＤ＝１に対応付けて、管理アプリ５０に出力する（ステップＳ１２）。
【００５８】
一方、Ｗｅｂアプリ３０ｙでの処理により、実行部３３ｙは、取得データ３５ｙ中のｋｅｙ＝ｋの値にｙを代入したとする（ステップＳ１３）。実行部３３ｙは、ステップＳ１３での処理に対応付けてＩＤ＝１１を生成し、履歴情報３６を履歴情報３６ｙ（図６）に示すように更新したとする。実行部３３ｙは、ｋｅｙ＝ｋの値にｙを代入することを要求する命令（Ｓｅｔ  ｋ，ｙ）を、ＩＤ＝１１に対応付けて、管理アプリ５０に出力する（ステップＳ１４）。
【００５９】
ステップＳ１２で出力された命令が管理アプリ５０に届くと、実行部５３は、記憶領域１５１にアクセスすることにより、ｋｅｙ＝ｋの値にｘを代入する（ステップＳ１５）。ｋｅｙ＝ｋの値へのｘの代入が成功すると、実行部５３は、Ｗｅｂアプリ３０ｘに対して、ＩＤ＝１で要求されたｋｅｙ＝ｋへの処理が成功したことを通知する（ステップＳ１６）。さらに、実行部５３は、処理を行った命令の要求元ではないＷｅｂアプリ３０ｙにも、ｋｅｙ＝ｋの値へｘを代入したことを通知する（ステップＳ１７）。
【００６０】
Ｗｅｂアプリ３０ｘの実行部３３ｘは、メッセージ取得部３２ｘを介して、ＩＤ＝１でのｋｅｙ＝ｋへの処理命令の成功を通知するメッセージを取得する。ここで、履歴情報３６には処理結果を待ち合わせているデータに関する情報を記録しているので、処理結果が通知されたｋｅｙの変更に関する情報は履歴情報３６から削除される。図７の例では、ＩＤ＝１の変更処理が成功したことが管理アプリ５０から通知されたので、実行部３３ｘは、ｋｅｙ＝ｋのデータに関する情報を履歴情報３６ｘ−１から削除して、履歴情報３６ｘ−２（図６）に更新する。さらに、実行部３３ｘは、実行部３３ｘから要求した処理が完了したと認識する（ステップＳ１８）。
【００６１】
Ｗｅｂアプリ３０ｙの実行部３３ｙは、メッセージ取得部３２ｙを介して、ｋｅｙ＝ｋの値としてｘが代入されたことを通知するメッセージを取得する。実行部３３ｙは通知されたｋｅｙ＝ｋについての更新履歴を用いて、通知された情報がｋｅｙ＝ｋについての最新の値であるかを判定する。ここでは、ｋｅｙ＝ｋに関する処理の履歴が履歴情報３６ｙ（図６）に含まれているので、実行部３３ｙは、ｋｅｙ＝ｋに関して、Ｗｅｂアプリ３０ｙの実行による変更処理の結果の通知を待っている状態であると判定する。すなわち、ステップＳ１７によって通知された通知処理の後に、実行部３３ｙが要求した処理に応じて、ｋｅｙ＝ｋの値が再度変更されることが予測される。そこで、実行部３３ｙは、取得データ３５ｙを変更せずに、管理アプリ５０からの通知を廃棄する（ステップＳ１９）。
【００６２】
ステップＳ１４で実行部３３ｙから出力された命令が管理アプリ５０に届くと、実行部５３は、記憶領域１５１にアクセスすることにより、ｋｅｙ＝ｋの値にｙを代入する（ステップＳ２０）。ｋｅｙ＝ｋの値へのｙの代入が成功すると、実行部５３は、Ｗｅｂアプリ３０ｙに対して、ＩＤ＝１１で要求されたｋｅｙ＝ｋへの処理が成功したことを通知する（ステップＳ２１）。さらに、実行部５３は、処理を行った命令の要求元ではないＷｅｂアプリ３０ｘにも、ｋｅｙ＝ｋの値へｙを代入したことを通知する（ステップＳ２２）。
【００６３】
Ｗｅｂアプリ３０ｙの実行部３３ｙは、メッセージ取得部３２ｙを介して、ＩＤ＝１１の処理命令の成功を通知するメッセージを取得する。実行部３３ｙは、履歴情報３６ｙから処理命令の成功が通知されたＩＤ＝１１に対応付けられたｋｅｙ＝ｋへの変更の履歴を削除するとともに、実行部３３ｙから要求した処理が完了したと認識する（ステップＳ２３）。
【００６４】
Ｗｅｂアプリ３０ｘの実行部３３ｘは、メッセージ取得部３２ｘを介して、ｋｅｙ＝ｋの値としてｙが代入されたことを通知するメッセージを取得する。実行部３３ｘは通知されたｋｅｙ＝ｋについての更新履歴が履歴情報３６ｘ−２中に含まれているかを判定する。ここでは、ｋｅｙ＝ｋに関する処理の履歴が履歴情報３６ｘ−２（図６）に含まれていないので、実行部３３ｘは、ｋｅｙ＝ｋに関して、Ｗｅｂアプリ３０ｘの実行による変更処理結果の待機中ではないと判定する。このため、管理アプリ５０から通知された値がｋｅｙ＝ｋの最新の値になりうる。そこで、実行部３３ｘは、取得データ３５ｘ中に含まれているｋｅｙ＝ｋにｙを代入することにより、通知された情報を取得データ３５ｘに反映させる（ステップＳ２４）。
【００６５】
以上説明したように、各Ｗｅｂアプリ３０での処理によって発生した変更を管理アプリ５０が通知することにより、各Ｗｅｂアプリ３０を実行する実行部３３は、他のＷｅｂアプリ３０の処理によるデータの更新を認識できる。さらに、管理アプリ５０は、管理アプリ５０に処理の要求が届いた順に書き込み要求などを処理し、処理結果を要求元に通知する。このため、実行部３３は、実行部３３自身が要求した命令に対する処理結果が得られる前に通知された変更については、その後、実行部３３自身が行った処理によって値が上書きされることを見越して変更処理を省略できる。一方、実行部３３自身が要求した命令に対する処理結果の待機中ではない場合は、通知された値が最新データとなる可能性がある。このため、実行部３３は、通知に応じて取得データ３５を更新することにより、他のＷｅｂアプリ３０での処理による記憶領域１５１の更新に合わせて、取得データ３５を更新できる。
【００６６】
図７では、個々のＷｅｂアプリ３０中の実行部３３が処理結果を受け取るまでは再度の更新を行っていない場合を例として説明したが、これは一例である。実行部３３は、管理アプリ５０から処理結果が通知される前にも、任意の回数の変更処理を同じデータに対して行うことができる。
【００６７】
図８は、同じデータに対して連続的に更新が行われるケースでの履歴情報３６の更新処理の例を説明する図である。なお、シーケンスＳＥ１では、図を見やすくするために記憶領域１５１を図示していない。
【００６８】
Ｗｅｂアプリ３０ｘの実行により、実行部３３ｘは、取得データ３５ｘ中のｋｅｙ＝ｋの値にｘを代入したとする（ステップＳ３１）。実行部３３ｘは、ステップＳ３１での処理のＩＤをＩＤ＝１に決定したとすると、履歴情報３６ｘは、履歴情報３６ｘ−１１に示す通りになる。実行部３３ｘは、ｋｅｙ＝ｋの値にｘを代入することを要求する命令を、ＩＤ＝１に対応付けて、管理アプリ５０に出力する（ステップＳ３２）。管理アプリ５０は、記憶領域１５１中のｋｅｙ＝ｋの値にｘを代入するとともに、ＩＤ＝１に対応付けられたｋｅｙ＝ｋへの処理の成功をＷｅｂアプリ３０ｘに通知する（ステップＳ３３、Ｓ３４）。
【００６９】
ステップＳ３４で送信された通知がＷｅｂアプリ３０ｘに到達する前に、実行部３３ｘは、取得データ３５ｘ中のｋｅｙ＝ｋの値にｚを代入したとする（ステップＳ３５）。実行部３３ｘは、ステップＳ３５での処理のＩＤをＩＤ＝６に決定したとする。実行部３３ｘは、履歴情報３６ｘ−１１にｋｅｙ＝ｋの値の更新履歴があるので、更新結果を待ち合わせているデータを再度更新したと判定する。そこで、変更前の値＝ｗは変更せずに、変更後の値をｘからｚに変更する。さらに、更新履歴に対するＩＤをＩＤ＝１から最新のＩＤ＝６に変更する。このため、履歴情報３６ｘ−１１は、履歴情報３６ｘ−１２に示すように更新される。さらに、実行部３３ｘは、ｋｅｙ＝ｋの値にｚを代入することを要求する命令と、ＩＤ＝６を対応付けて、管理アプリ５０に出力する（ステップＳ３６）。
【００７０】
ステップＳ３５、Ｓ３６の処理後に、ステップＳ３４で出力された通知がＷｅｂアプリ３０ｘに到達したとする。実行部３３ｘは、通知されたＩＤとｋｅｙの組合せを含む履歴が履歴情報３６ｘ−１２に含まれているかを判定する。履歴情報３６ｘ−１２において、ｋｅｙ＝ｋへの処理の履歴に対応付けられたＩＤはＩＤ＝６である。このため、実行部３３ｘは、処理の成功が通知された情報には、さらに変更が行われていると判定して、ｋｅｙ＝ｋの履歴の情報は削除しない。しかし、ステップＳ３４での通知により、現在のｋｅｙ＝ｋの値がｘになっていることから、実行部３３ｘが通知したＩＤ＝６の処理が反映される前の記憶領域１５１中でのｋｅｙ＝ｋの値はｘであると判定する。そこで、実行部３３ｘは、履歴情報３６ｘ−１２において、ｋｅｙ＝ｋについての変更前の値を、管理アプリ５０から通知された値ｘに更新する（ステップＳ３７）。従って、履歴情報３６ｘ−１２は、履歴情報３６ｘ−１３に示すように更新される。
【００７１】
シーケンスＳＥ１にはその後の処理は記載していないが、その後も、図７や図８を参照しながら説明した処理と同様に、管理アプリ５０とＷｅｂアプリ３０ｘの間での処理が行われる。
【００７２】
図９は、Ｗｅｂアプリ３０がデータの書き込み処理を行うときの処理の例を説明するフローチャートである。なお、図９の例は一例であり、例えば、ステップＳ５１の処理がステップＳ５２の判定後やステップＳ５６の前に行われるなど、実装に応じて処理の手順が変更され得る。
【００７３】
実行部３３は、命令の通知に使用するＩＤを取得する（ステップＳ５１）。実行部３３は、要求する命令の種類がＣｌｅａｒではない場合、更新対象のｋｅｙに対する新規の更新処理であるかを判定する（ステップＳ５２でＮｏ、ステップＳ５３）。新規の更新処理であるかは、履歴情報３６中に更新対象のｋｅｙに対するエントリがあるかで判定される。新規の更新処理の場合は、履歴情報３６中に更新対象のｋｅｙに対するエントリが無いので、実行部３３は、新たなエントリとして、処理対象のｋｅｙに対応付けて更新の前後の値とＩＤを履歴情報３６に記録する（ステップＳ５３でＹｅｓ、ステップＳ５４）。新規の更新処理ではない場合、実行部３３は、履歴情報３６中の更新対象のｋｅｙに対するエントリの情報を更新する（ステップＳ５３でＮｏ、ステップＳ５５）。さらに、実行部３３は、処理種別、処理対象のｋｅｙ、更新後の値、ＩＤを、メッセージ出力部３１を介して、管理アプリ５０に通知する（ステップＳ５６）。その後、実行部３３は、更新後の値を、Ｗｅｂアプリ３０が保持する取得データ３５に記録する（ステップＳ６２）。
【００７４】
実行部３３は、要求する命令の種類がＣｌｅａｒである場合、新規のＣｌｅａｒ処理であるかを判定する（ステップＳ５２でＹｅｓ、ステップＳ５７）。新規のＣｌｅａｒ処理であるかは、履歴情報３６中にＣｌｅａｒ処理ＩＤが含まれているかによって判定される。新規のＣｌｅａｒ処理の場合は、Ｃｌｅａｒ処理ＩＤを設定すると共に、履歴情報３６中にＣｌｅａｒ処理ＩＤを記録する（ステップＳ５７でＹｅｓ、ステップＳ５８）。新規のＣｌｅａｒ処理ではない場合、実行部３３は、履歴情報３６中のＣｌｅａｒ処理ＩＤを更新する（ステップＳ５７でＮｏ、ステップＳ５９）。ステップＳ５８かＳ５９の処理後、実行部３３は、履歴情報３６に含まれている情報のうち、Ｃｌｅａｒ処理ＩＤ以外の情報を全て削除する（ステップＳ６０）。実行部３３は、処理種別がＣｌｅａｒであることと、Ｃｌｅａｒ処理ＩＤを、メッセージ出力部３１を介して、管理アプリ５０に通知する（ステップＳ６１）。その後、実行部３３は、更新後の値を取得データ３５に記録する（ステップＳ６２）。なお、Ｃｌｅａｒ処理が行われる場合は、ステップＳ６２によって、取得データ３５中の全てのデータが初期化される。
【００７５】
図１０は、データの書き込みの通知を受けたときの管理アプリ５０の処理の例を説明するフローチャートである。図１０において、定数Ｎと変数ｎを使用する。定数Ｎはブラウザ１１０中で動作しているＷｅｂアプリ３０の総数であり、変数ｎは通知を行ったＷｅｂアプリ３０の数の計数に用いられる値である。
【００７６】
管理アプリ５０において、実行部５３は、メッセージ取得部５２を介して、Ｗｅｂアプリ３０からの通知を取得する。実行部５３は、Ｗｅｂアプリ３０からの通知を用いて、記憶領域１５１中のデータを更新する（ステップＳ７１）。実行部５３は、変数ｎを１に設定する（ステップＳ７２）。実行部５３は、処理対象の書き込み命令は、ｎ番目のＷｅｂアプリ３０が要求元であるかを判定する（ステップＳ７３）。ｎ番目のＷｅｂアプリ３０が処理対象の書き込み命令の要求元である場合、実行部５３は、ｎ番目のＷｅｂアプリ３０に処理結果と書き込み命令に対応付けられたＩＤを通知する（ステップＳ７３でＹｅｓ、ステップＳ７４）。その後、実行部５３は、変数ｎが定数Ｎ以上であるかを判定する（ステップＳ７７）。変数ｎが定数Ｎ未満の場合、実行部５３は、変数ｎを１つインクリメントしてステップＳ７３以降の処理を繰り返す（ステップＳ７７でＮｏ、ステップＳ７８）。一方、変数ｎが定数Ｎ以上の場合、実行部５３は、処理を終了する（ステップＳ７７でＹｅｓ）。
【００７７】
一方、ｎ番目のＷｅｂアプリ３０が処理対象の書き込み命令の要求元ではない場合、実行部５３は、ｎ番目のＷｅｂアプリ３０には変更されたｋｅｙへのアクセス権があるかを判定する（ステップＳ７３でＮｏ、ステップＳ７５）。なお、実行部５３は、予め、アクセス権の有無の判定のための情報を記憶しており、記憶している情報に基づいてステップＳ７５の判定を行うものとする。ｎ番目のＷｅｂアプリ３０に変更されたｋｅｙへのアクセス権がある場合、ｎ番目のＷｅｂアプリ３０に対して、更新対象となったｋｅｙ、更新対象となったｋｅｙについての更新前の値と更新後の値を通知する（ステップＳ７５でＹｅｓ、ステップＳ７６）。なお、記憶領域１５１に対するＣｌｅａｒを行った場合、実行部５３は、ステップＳ７６において処理種別がＣｌｅａｒであることを通知しても良い。ステップＳ７６の処理後、ステップＳ７７以降の処理が行われる。また、ｎ番目のＷｅｂアプリ３０には変更されたｋｅｙへのアクセス権がない場合も（ステップＳ７５でＮｏ）、ステップＳ７７以降の処理が行われる。
【００７８】
図１１は、管理アプリ５０から通知を受けたときのＷｅｂアプリ３０の処理の例を説明するフローチャートである。メッセージ取得部３２は、管理アプリ５０からのメッセージを取得する（ステップＳ９１）。実行部３３は、管理アプリ５０からのメッセージが変更要求に対する応答であるかを判定する（ステップＳ９２）。ここで、変更要求には、記憶領域１５１へのデータの書き込み要求、Ｃｌｅａｒ要求などが含まれる。変更要求に対する応答ではない場合、実行部３３は、他のＷｅｂアプリ３０からの更新に応じた更新処理を行う（ステップＳ９２でＮｏ、ステップＳ９３）。ステップＳ９３の処理については、図１２を参照しながら詳しく説明する。
【００７９】
管理アプリ５０からのメッセージが変更要求に対する応答である場合、実行部３３は、Ｃｌｅａｒを要求したかを判定する（ステップＳ９２でＹｅｓ、ステップＳ９４）。要求した処理がＣｌｅａｒではない場合、処理対象のｋｅｙに対応するエントリが履歴情報３６に含まれているかを判定する（ステップＳ９５）。処理対象のｋｅｙに対応するエントリが履歴情報３６に含まれていない場合、実行部３３は処理を終了する（ステップＳ９５でＮｏ）。処理対象のｋｅｙに対応するエントリが履歴情報３６に含まれている場合、実行部３３は、管理アプリ５０から通知されたＩＤと履歴情報３６のエントリ中のＩＤが一致するかを判定する（ステップＳ９６）。管理アプリ５０から通知されたＩＤと履歴情報３６のエントリ中のＩＤが一致する場合、実行部３３は、履歴情報３６から、通知されたｋｅｙのエントリを削除して処理を終了する（ステップＳ９６でＹｅｓ、ステップＳ９７）。一方、管理アプリ５０から通知されたＩＤと履歴情報３６のエントリ中のＩＤが一致しない場合、実行部３３は、処理対象のエントリ中の変更前の値を、メッセージによって通知された値に更新する（ステップＳ９６でＮｏ、ステップＳ９８）。
【００８０】
一方、要求した処理がＣｌｅａｒである場合、実行部３３は、管理アプリ５０からの通知と履歴情報３６の間でＣｌｅａｒ処理ＩＤが一致しているかを判定する（ステップＳ９４でＹｅｓ、ステップＳ９９）。管理アプリ５０からの通知と履歴情報３６の間でＣｌｅａｒ処理ＩＤが一致していない場合、実行部３３は処理を終了する（ステップＳ９９でＮｏ）。一方、管理アプリ５０からの通知と履歴情報３６の間でＣｌｅａｒ処理ＩＤが一致している場合、履歴情報３６からＣｌｅａｒ処理ＩＤを削除する（ステップＳ９９でＹｅｓ、ステップＳ１００）。
【００８１】
図１２は、他のＷｅｂアプリ３０による書き込み処理の通知を受けたときのＷｅｂアプリ３０の処理の例を説明するフローチャートである。図１２は、図１１のステップＳ９３の処理の例である。他のＷｅｂアプリ３０による書き込み処理の通知を管理アプリ５０から取得すると、実行部３３は、記憶領域１５１中のデータが変更されたことを通知するイベントを発行する（ステップＳ１１１）。実行部３３は、記憶領域１５１に対して行われた処理がＣｌｅａｒであるかを判定する（ステップＳ１１２）。記憶領域１５１に対して行われた処理がＣｌｅａｒである場合、実行部３３は、Ｃｌｅａｒによるデータ消去を含む更新処理を行う（ステップＳ１１２でＹｅｓ、ステップＳ１１３）。ステップＳ１１３での処理の詳細は、図１３を参照しながら説明する。
【００８２】
記憶領域１５１に対して行われた処理がＣｌｅａｒではない場合、実行部３３は、履歴情報３６に、通知されたｋｅｙの情報があるかを判定する（ステップＳ１１４）。履歴情報３６に、通知されたｋｅｙの情報がない場合、実行部３３は、Ｃｌｅａｒ用のエントリが有効であるかを判定する（ステップＳ１１４でＮｏ、ステップＳ１１５）。なお、履歴情報３６中にＣｌｅａｒ処理ＩＤが記録されている場合、Ｃｌｅａｒ用のエントリが有効であると判定されるものとする。Ｃｌｅａｒ用のエントリが有効である場合、通知された処理の後にＣｌｅａｒ処理が行われることが予測されるので、実行部３３は取得データ３５を更新せずに処理を終了する（ステップＳ１１５でＹｅｓ）。一方、Ｃｌｅａｒ用のエントリが有効ではない場合、取得データ３５を通知に従って更新する（ステップＳ１１５でＮｏ、ステップＳ１１６）。
【００８３】
履歴情報３６に、通知されたｋｅｙの情報がある場合、実行部３３は、Ｃｌｅａｒ用のエントリが有効であるかを判定する（ステップＳ１１４でＹｅｓ、ステップＳ１１７）。Ｃｌｅａｒ用のエントリが有効である場合、通知された処理の後にＣｌｅａｒ処理が行われることが予測されるので、実行部３３は取得データ３５を更新せずに処理を終了する（ステップＳ１１７でＹｅｓ）。一方、Ｃｌｅａｒ用のエントリが有効ではない場合、処理対象のｋｅｙの値に対する更新結果の待機中であるが、実行部３３自身による更新前に、そのｋｅｙに対して他のＷｅｂアプリ３０からの更新処理が発生している（ステップＳ１１７でＮｏ）。そこで、実行部３３は、履歴情報３６中において、通知されたｋｅｙの変更前の値を、通知された値に変更する（ステップＳ１１８）。
【００８４】
図１３は、他のＷｅｂアプリ３０によるデータ消去の通知を受けたときのＷｅｂアプリ３０の処理の例を説明するフローチャートである。図１３は、図１２のステップＳ１１３の処理の例である。なお、図１３は一例であり、例えば、ステップＳ１２３とＳ１２４の処理順序が互いに変更されるなど、実装に応じて手順が変更されても良い。
【００８５】
実行部３３は、Ｃｌｅａｒ用のエントリが有効であるかを判定する（ステップＳ１２１）。Ｃｌｅａｒ用のエントリが有効である場合、通知された処理の後にＣｌｅａｒ処理が行われることが予測されるので、実行部３３は取得データ３５を更新せずに処理を終了する（ステップＳ１２１でＹｅｓ）。一方、Ｃｌｅａｒ用のエントリが有効ではない場合、実行部３３は、取得データ３５中のデータを全て削除する（ステップＳ１２１でＮｏ、ステップＳ１２２）。その後、実行部３３は、履歴情報３６の全てのｋｅｙについて、変更前の値をｎｕｌｌに設定する（ステップＳ１２３）。すなわち、ステップＳ１２２とＳ１２３の処理により、他のＷｅｂアプリ３０によって行われたＣｌｅａｒ処理を、取得データ３５と履歴情報３６に適用する。さらに、実行部３３は、履歴情報３６中の全てのｋｅｙの変更後の値を、取得データ３５に反映させる（ステップＳ１２４）。すなわち、実行部３３が実行しているＷｅｂアプリ３０の処理によって発生した更新は、Ｃｌｅａｒ処理の後に記憶領域１５１に反映される情報であるので、実行部３３は、履歴情報３６中の更新後の値を取得データ３５に記録する。
【００８６】
図１４は、情報処理装置１００で行われる処理順序の例を説明する図である。図１４を参照しながら、第１の実施形態によって得られるプログラムの処理順序を、コールバック関数を用いた場合の処理順序を比較する。ケースＣ１１とＣ１２のいずれでも、処理Ａ、処理Ｂ、処理Ｃが行われ、処理Ａでは、Ｗｅｂアプリ３０によってデータの読み込みが行われるものとする。
【００８７】
ケースＣ１１では、処理Ａにおいて、Ｗｅｂアプリ３０を実行する実行部は、ｓｔｏｒａｇｅ．ｇｅｔＩｔｅｍ（“ｋｅｙ”，Ｃａｌｌｂａｃｋ）というコールバック関数を含む処理を用いて、管理アプリ５０に読み込みを要求する。管理アプリ５０などでの処理が可能になるように、処理Ａは、読み込み対象のデータが得られていない状態で終了される。コールバック関数によるデータの取得は処理Ｃとなる。このため、処理Ａの後で処理Ｃの前に行われる処理Ｂでは、処理Ａでの読み込み対象となっている値（図中ではｖａｌｕｅと記載する）は使用不可となる。さらに、処理Ｂと処理Ｃの間に他の処理が入る可能性も高く、処理Ｂと処理Ｃの間に行われる処理においても、コールバック関数を用いて得られる予定のデータは使用不可となる。すなわち、シーケンシャルな処理が行われていないため、プログラミングの際に、どのタイミングでどのデータが使用可能であるのかを検討しないと、バグが発生する恐れがあり、プログラミングが複雑になる。
【００８８】
ケースＣ１２では、第１の実施形態が適用されているので、各Ｗｅｂアプリ３０は、記憶領域１５１のデータへのアクセスを管理アプリ５０に要求しなくても、処理用のデータを取得データ３５から取得できる。このため、処理Ａでは、ｓｔｏｒａｇｅ．ｇｅｔＩｔｅｍ（“ｋｅｙ”）とすることにより、取得データ３５から処理対象のｋｅｙの値を取得できる。従って、処理Ａの後の処理Ｂ、処理Ｃにおいても、処理Ａでの読み込み対象となっている値（ｖａｌｕｅ）が使用可能になる。このため、処理をシーケンシャルに記述することができ、バグを防ぎやすくなる。
【００８９】
さらに、第１の実施形態にかかる方法では、管理アプリ５０が更新処理の要求元以外にもデータの更新を通知するので、各Ｗｅｂアプリ３０は、管理アプリ５０からの通知に合わせて、適宜、取得データ３５を変更できる。このため、各Ｗｅｂアプリ３０が保持する取得データ３５中のデータと記憶領域１５１中のデータの不整合が防止される。従って、複数のＷｅｂアプリ３０が記憶領域１５１中のデータと整合の取れたデータを保持できることになり、Ｗｅｂアプリ３０間でのデータの共有が容易に行われる。さらに、第１の実施形態により、プログラムをシーケンシャルに記載できるので、プログラミングも容易になる。また、各Ｗｅｂアプリ３０は、オリジンに関係なく、Ｗｅｂアプリ３０単位での記憶領域１５１へのアクセスも可能である。
【００９０】
＜第２の実施形態＞
図１５は、第２の実施形態にかかる通信方法の例を説明する図である。第２の実施形態では、複数の管理アプリ５０が実行される場合について説明する。情報処理装置１００中で動作するブラウザ１１０では、トップレベルＢＣ１２０ａ、トップレベルＢＣ１２０ｂ、子ＢＣ１３０ｃ、子ＢＣ１３０ｄが提供されているとする。トップレベルＢＣ１２０ａでは管理アプリ５０ａが実行され、トップレベルＢＣ１２０ｂでは管理アプリ５０ｂが実行されているとする。また、管理アプリ５０ａと管理アプリ５０ｂのいずれも、記憶領域１５１と同様にオリジンＸに属しており、Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ１４０を介して記憶領域１５１にアクセス可能であるとする。子ＢＣ１３０ｃはトップレベルＢＣ１２０ａにネスティングされ、子ＢＣ１３０ｄはトップレベルＢＣ１２０ｂにネスティングされている。子ＢＣ１３０ｃでは、オリジンＲに属するＷｅｂアプリ３０ｃが実行されているとする。一方、子ＢＣ１３０ｄでは、オリジンＳに属するＷｅｂアプリ３０ｄが実行されているとする。
【００９１】
図１６は、通信方法の例を説明するシーケンス図である。管理アプリ５０ａと管理アプリ５０ｂのいずれも、図３の管理アプリ５０と同様の機能ブロックを有しており、Ｗｅｂアプリ３０ｃとＷｅｂアプリ３０ｄのいずれも、図３のＷｅｂアプリ３０ａと同様の機能ブロックを有しているとする。なお、第２の実施形態においても、管理アプリ５０とその管理アプリ５０を介して記憶領域１５１にアクセスするＷｅｂアプリ３０との間の通信処理、Ｗｅｂアプリ３０での取得データ３５や履歴情報３６の更新処理などは第１の実施形態と同様である。
【００９２】
Ｗｅｂアプリ３０ｃを実行する実行部３３ｃは、取得データ３５ｃ中のｋｅｙ＝ｋの値にｘを代入すると、ｋｅｙ＝ｋの値にｘを代入することを、要求を識別するためのＩＤとともに、管理アプリ５０ａに要求する（ステップＳ１４１、Ｓ１４２）。管理アプリ５０ａを実行する実行部５３ａは、記憶領域１５１にアクセスして、ｋｅｙ＝ｋの値にｘを代入する（ステップＳ１４３）。その後、実行部５３ａは、ステップＳ１４２で通知されたＩＤと共に、ｋｅｙ＝ｋのデータの更新結果をＷｅｂアプリ３０ｃに通知する（ステップＳ１４４）。すると、Ｗｅｂアプリ３０ｃは、ステップＳ１４２で要求した更新処理が終了したと認識して、履歴情報３６ｃを更新する（ステップＳ１４５）。
【００９３】
一方、記憶領域１５１は、ｋｅｙ＝ｋのデータの更新が発生したことと更新結果を、管理アプリ５０ｂに通知することにより、管理アプリ５０ａと管理アプリ５０ｂの間でデータを共有させる（ステップＳ１４６）。
【００９４】
ステップＳ１４６の通知が管理アプリ５０ｂに到達する前に、Ｗｅｂアプリ３０ｄを実行する実行部３３ｄが取得データ３５ｄ中のｋｅｙ＝ｋの値にｚを代入したとする（ステップＳ１４７）。実行部３３ｄは、ｋｅｙ＝ｋの値にｚを代入することを、要求を識別するためのＩＤとともに、管理アプリ５０ｂに要求する（ステップＳ１４８）。管理アプリ５０ｂを実行する実行部５３ｂは、記憶領域１５１にアクセスして、ｋｅｙ＝ｋの値にｚを代入する（ステップＳ１４９）。その後、実行部５３ｂは、ステップＳ１４８で通知されたＩＤと共に、ｋｅｙ＝ｋのデータの更新結果をＷｅｂアプリ３０ｄに通知する（ステップＳ１５０）。すると、Ｗｅｂアプリ３０ｄは、ステップＳ１４８で要求した更新処理が終了したと認識して、履歴情報３６ｄを更新する（ステップＳ１５１）。
【００９５】
一方、記憶領域１５１は、管理アプリ５０ｂの処理によりｋｅｙ＝ｋのデータの更新が発生したことと更新結果がｚであることを、管理アプリ５０ａに通知することにより、管理アプリ５０ａと管理アプリ５０ｂの間でデータを共有させる（ステップＳ１５２）。
【００９６】
ステップＳ１５２で記憶領域１５１から出力された通知が管理アプリ５０ａに到達すると、実行部５３ａは、記憶領域１５１に格納されているｋｅｙ＝ｋのデータの値を取得する（ステップＳ１５３）。すなわち、記憶領域１５１からの通知が管理アプリ５０ａに到達する前に、他の管理アプリ５０を介した記憶領域１５１へのアクセスが行われているかを判定するために、通知されたデータの現在の記憶領域１５１中の値を確認する。Ｓ１５３の時点では、記憶領域１５１のｋｅｙ＝ｋの値はｚである。そこで、実行部５３ａは、記憶領域１５１から管理アプリ５０ａへの通知と、記憶領域１５１中に格納されている値の間で、通知対象となっているｋｅｙ＝ｋのデータが一致していると判定する。実行部５３ａは、ｋｅｙ＝ｋにｚに更新されたことと共に、更新された値が記憶領域１５１の現在値と一致しているかの判定結果をＷｅｂアプリ３０ｃに通知する（ステップＳ１５４）。
【００９７】
Ｗｅｂアプリ３０ｃに通知が到達すると、実行部３３ｃは通知に沿って取得データ３５ｃを変更するかを判定する。ここで、実行部３３は、更新されたｋｅｙについての情報が履歴情報３６に記録されていない場合、更新後の値が記憶領域１５１の現在値と一致しているかについての管理アプリ５０での判定結果を用いて、更新を行うかを判定する。図１６の例では、管理アプリ５０ａからの通知がＷｅｂアプリ３０ｃに到達した時点では、更新されたｋｅｙについての情報が履歴情報３６ｃに記録されていない。さらに、管理アプリ５０ａにおいて、更新後の値が記憶領域１５１の現在値と一致していると判定されている。そこで、実行部３３ｃは、管理アプリ５０ａからの通知に従って、取得データ３５ｃを更新する。すなわち、実行部３３ｃは、取得データ３５ｃ中のｋｅｙ＝ｋの値をｚに更新する（ステップＳ１５５）。
【００９８】
次に、ステップＳ１４６で記憶領域１５１から出力された通知が管理アプリ５０ｂに到達したときの処理について説明する。この通知では、ｋｅｙ＝ｋの値がｘに更新されたことが管理アプリ５０ｂに通知されている。実行部５３ｂは、記憶領域１５１に格納されているｋｅｙ＝ｋのデータの値を取得する（ステップＳ１５６）。ステップＳ１５６の時点では、記憶領域１５１には、ｋｅｙ＝ｋの値としてｚが記録されている。従って、通知対象となっているｋｅｙ＝ｋのデータは、記憶領域１５１から管理アプリ５０ｂへの通知と、記憶領域１５１中の情報で異なっている。このため、管理アプリ５０ｂは、記憶領域１５１からの通知が管理アプリ５０ｂに到達する前に、記憶領域１５１中のデータが変更されていると判定できる。実行部５３ａは、ｋｅｙ＝ｋがｘに更新されたことと共に、更新された値が記憶領域１５１の現在値と一致していないという判定結果をＷｅｂアプリ３０ｄに通知する（ステップＳ１５７）。
【００９９】
Ｗｅｂアプリ３０ｄに通知が到達すると、実行部３３ｄは、管理アプリ５０ｂにおいて、通知の内容と現在の記憶領域１５１中のデータが一致していないと判定されていることから、通知に沿って取得データ３５ｄを変更しない（ステップＳ１５８）。
【０１００】
このように、第２の実施形態によると、複数の管理アプリ５０が含まれているシステムにおいて、異なる管理アプリ５０を介して記憶領域１５１にアクセスしているＷｅｂアプリ３０の間でもデータが共有されている。また、図１５、図１６に示すように、異なる管理アプリ５０を介して記憶領域１５１にアクセスしているＷｅｂアプリ３０の間でオリジンが異なっていても、管理アプリ５０を介してデータがＷｅｂアプリ３０間で共有されうる。
【０１０１】
なお、図１６の説明では分かりやすくするために、各管理アプリ５０を介して記憶領域１５１にアクセスするＷｅｂアプリ３０を１つずつにしているが、複数のＷｅｂアプリ３０が１つの管理アプリ５０を介して記憶領域１５１にアクセスしても良い。複数のＷｅｂアプリ３０が１つの管理アプリ５０を介して記憶領域１５１にアクセスする場合、第１の実施形態と同様に、各管理アプリ５０は、その管理アプリ５０を介して記憶領域１５１にアクセスする全てのＷｅｂアプリ３０に対して、第１の実施形態と同様の通知処理を行う。
【０１０２】
図１７は、記憶領域１５１から通知を受けた管理アプリ５０での処理の例を説明するフローチャートである。図１７〜図１９の例では、管理アプリ５０は、記憶領域１５１から通知された値と記憶領域１５１中の値が一致する場合、判定結果の代わりに、通知する情報を取得データ３５に反映させることを要求する反映要求を、変更されたデータの情報と共に通知する。一方、記憶領域１５１から通知された値と記憶領域１５１中の値が一致しない場合、判定結果の代わりに、通知する情報を取得データ３５に反映させないことをＷｅｂアプリ３０に通知する。
【０１０３】
実行部５３は、メッセージを取得すると、記憶領域１５１から通知されたイベントであるかを判定する（ステップＳ１７１）。記憶領域１５１から通知されたイベントではない場合、実行部５３は、配下のＷｅｂアプリ３０からの記憶領域１５１中のデータの変更要求であるかを判定する（ステップＳ１７２）。配下のＷｅｂアプリ３０からの記憶領域１５１中のデータの変更要求ではない場合、実行部５３は要求された処理を行う（ステップＳ１７２でＮｏ、ステップＳ１７３）。配下のＷｅｂアプリ３０からの記憶領域１５１中のデータの変更要求である場合、記憶領域１５１中の情報の変更処理を行う（ステップＳ１７２でＹｅｓ、ステップＳ１７４）。ステップＳ１７４の詳細は、図１０を参照しながら説明した処理と同様である。
【０１０４】
記憶領域１５１から通知されたイベントである場合、実行部５３は、Ｃｌｅａｒ処理が要求されたかを判定する（ステップＳ１７１でＹｅｓ、ステップＳ１７５）。Ｃｌｅａｒ処理が要求されていない場合、記憶領域１５１中に記録されている値と、記憶領域１５１からの通知で受け取った値が同じであるかを判定する（ステップＳ１７５でＮｏ、ステップＳ１７６）。記憶領域１５１中に記録されている値と、記憶領域１５１からの通知で受け取った値が同じである場合、実行部５３は、更新が通知されたｋｅｙ、変更前の値、変更後の値、反映要求を配下のＷｅｂアプリ３０に通知する（ステップＳ１７６でＹｅｓ、ステップＳ１７７）。一方、記憶領域１５１中に記録されている値と、記憶領域１５１からの通知で受け取った値が異なる場合、実行部５３は、記憶領域１５１から通知された値と共に、通知する値を反映しないことを配下のＷｅｂアプリ３０に通知する（ステップＳ１７６でＮｏ、ステップＳ１７８）。
【０１０５】
次に、記憶領域１５１から通知されたイベントがＣｌｅａｒ処理の要求である場合（ステップＳ１７５でＹｅｓ）について説明する。記憶領域１５１から通知されたイベントがＣｌｅａｒ処理の要求である場合、通知されたＣｌｅａｒ処理の後に、いずれかの管理アプリ５０を介して、記憶領域１５１への書き込みが行われている可能性がある。このため、実行部５３は、配下のＷｅｂアプリ３０のいずれかにアクセス権のある全てのｋｅｙについて、記憶領域１５１に記録されている値を取得する（ステップＳ１７５でＹｅｓ、ステップＳ１７９）。実行部５３は、配下のＷｅｂアプリの各々に、そのＷｅｂアプリがアクセス可能なｋｅｙの値を通知する（ステップＳ１８０）。ステップＳ１８０の処理により、いずれかのＷｅｂアプリ３０でのＣｌｅａｒ処理の後で書き込み処理が行われていたとしても、ｋｅｙの最新の値をＷｅｂアプリ３０に通知することができる。なお、ある管理アプリ５０にとっての「配下のＷｅｂアプリ３０」は、その管理アプリ５０を介して記憶領域１５１にアクセスするＷｅｂアプリ３０である。
【０１０６】
図１８は、他のＷｅｂアプリ３０による書き込み処理の通知を受けたときのＷｅｂアプリ３０の処理の例を説明するフローチャートである。ステップＳ１９１、Ｓ１９２、Ｓ１９４、Ｓ１９５の処理は、図１２を参照しながら説明したステップＳ１１１、Ｓ１１２、Ｓ１１４、Ｓ１１５の処理と同様である。ステップＳ１９３については、図１９を参照しながら詳しく説明する。
【０１０７】
ステップＳ１９５において、Ｃｌｅａｒ用のエントリが有効ではないと判定した場合、実行部３３は、管理アプリ５０から更新が要求されているかを判定する（ステップＳ１９６）。管理アプリ５０から更新が要求されている場合、管理アプリ５０からの通知に従って、取得データ３５を更新する（ステップＳ１９６でＹｅｓ、ステップＳ１９７）。一方、管理アプリ５０から更新が要求されていない場合、実行部３３は、取得データ３５を更新せずに処理を終了する（ステップＳ１９６でＮｏ）。
【０１０８】
ステップＳ１９４において、履歴情報３６に管理アプリ５０から通知されたｋｅｙの情報があると判定された場合、実行部３３は、Ｃｌｅａｒ用のエントリが有効かを判定する（ステップＳ１９８）。Ｃｌｅａｒ用のエントリが有効になっている場合、実行部３３は処理を終了する（ステップＳ１９８でＹｅｓ）。Ｃｌｅａｒ用のエントリが有効ではないと判定した場合、実行部３３は、管理アプリ５０から更新が要求されているかを判定する（ステップＳ１９８でＮｏ、ステップＳ１９９）。管理アプリ５０から更新が要求されている場合、実行部３３は、管理アプリ５０からの通知に従って、履歴情報３６において、通知されたｋｅｙの変更前の値を、通知された値に更新する（ステップＳ１９９でＹｅｓ、ステップＳ２００）。一方、管理アプリ５０から更新が要求されていない場合、実行部３３は、履歴情報３６を更新せずに処理を終了する（ステップＳ１９９でＮｏ）。
【０１０９】
図１９は、他のＷｅｂアプリ３０によるデータ消去の通知を受けたときのＷｅｂアプリ３０の処理の例を説明するフローチャートである。図１９は、図１８のステップＳ１１３の詳細を表わしている。なお、管理アプリ５０から他のＷｅｂアプリ３０によるデータ消去が行われたことが通知される場合には、通知対象のＣｌｅａｒ処理後にいずれかのＷｅｂアプリ３０の処理により、記憶領域１５１の値が変わっている可能性がある。このため、管理アプリ５０での図１７のステップＳ１７９、Ｓ１８０の処理により、各Ｗｅｂアプリ３０には、アクセス可能な全てのｋｅｙについての記憶領域１５１中の値が通知される。図１９では、Ｗｅｂアプリ３０がアクセス可能なｋｅｙの総数を定数Ｋとする。さらに、図１９では、処理をしたｋｅｙの数を計数するために変数ｋも使用される。
【０１１０】
ステップＳ２１１〜Ｓ２１３は、図１３を参照しながら説明したステップＳ１２１〜Ｓ１２３と同様である。実行部３３は、変数ｋを１に設定する（ステップＳ２１４）。実行部３３は、ｋ番目のｋｅｙに対して履歴情報３６中にエントリがあるかを判定する（ステップＳ２１５）。ｋ番目のｋｅｙに対して履歴情報３６中にエントリがある場合、実行部３３は、履歴情報３６中のｋ番目のｋｅｙに対するエントリ中の変更前の値を、ｋ番目のｋｅｙに対して通知された値に変更する（ステップＳ２１５でＹｅｓ、ステップＳ２１６）。ステップＳ２１６は、ｋ番目のｋｅｙに対してＷｅｂアプリ３０が変更を要求していて処理結果の待機中であるが、Ｗｅｂアプリ３０が要求した変更が行われる前に、ｋ番目のｋｅｙが他のＷｅｂアプリ３０によってｎｕｌｌから変更されているケースである。このため、実行部３３は、管理アプリ５０から通知された値を履歴情報３６に反映させている。
【０１１１】
一方、ｋ番目のｋｅｙに対するエントリが履歴情報３６中にない場合、実行部３３は、取得データ３５に、ｋ番目のｋｅｙの値として通知された値を書き込む（ステップＳ２１５でＮｏ、ステップＳ２１７）。ステップＳ２１７は、ｋ番目のｋｅｙに対してＷｅｂアプリ３０が更新処理中ではなく、他のＷｅｂアプリ３０によってｋ番目のｋｅｙがｎｕｌｌから変更されているケースである。このため、実行部３３は、管理アプリ５０から通知された値をｋ番目のｋｅｙの最新の値として、取得データ３５に反映させる。
【０１１２】
ステップＳ２１６かステップＳ２１７の処理後、実行部３３は、変数ｋが定数Ｋ以上であるかを判定する（ステップＳ２１８）。変数ｋが定数Ｋ未満の場合、変数ｋをインクリメントして、ステップＳ２１５以降の処理を繰り返す（ステップＳ２１８でＮｏ、ステップＳ２１９）。一方、変数ｋが定数Ｋ以上の場合、実行部３３は、履歴情報３６にある全てのｋｅｙの情報を取得データ３５に反映させる（ステップＳ２１８でＹｅｓ、ステップＳ２２０）。なお、ステップＳ２２０において、履歴情報３６中の各エントリについて記録されている変更後の値が、そのエントリのｋｅｙについての取得データ３５での値として反映される。
【０１１３】
以上説明したように、第２の実施形態にかかる方法では、記憶領域１５１中のデータを更新した管理アプリ５０は、他の管理アプリ５０にデータの更新を通知する。さらに、第２の実施形態においても、個々の管理アプリ５０は、更新処理の要求元以外にもデータの更新を通知する。このため、第２の実施形態によると、記憶領域１５１にアクセスする際の管理アプリ５０が異なるＷｅｂアプリ３０間でも、容易にデータを共有することができる。なお、第２の実施形態においても、第１の実施形態と同様に、各Ｗｅｂアプリ３０は取得データ３５として記憶しているデータを用いて実行される。このため、プログラムをシーケンシャルに記載でき、プログラミングが容易になる。また、各Ｗｅｂアプリ３０は、管理アプリ５０を介して記憶領域１５１にアクセスしているため、オリジンに関係なく、Ｗｅｂアプリ３０単位での記憶領域１５１へのアクセスも可能である。
【０１１４】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１１５】
以上の説明では、管理アプリ５０がトップレベルＢＣ１２０で実行されている場合を例として説明したが、管理アプリ５０は、トップレベルＢＣ１２０以外のブラウジングコンテキストで実行されても良い。管理アプリ５０が子ＢＣ１３０などで実行される場合であっても、管理アプリ５０は、その管理アプリ５０を介して記憶領域１５１にアクセスしているＷｅｂアプリ３０の各々に対して、データの変更の処理結果を通知する。
【０１１６】
以上の説明で記載した情報の形式等は一例であり実装に応じて変更され得る。例えば、図６などに記載した履歴情報３６に含まれる情報要素や形式は、一例であり、実装に応じて任意に変更され得る。
【０１１７】
上述の第１および第２の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
データ格納部にアクセスする第１の実行部と、
前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行する第２の実行部と、
前記第１の実行部を介して前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行する第３の実行部
を備え、
前記第１の実行部は、前記第２の実行部から前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第３の実行部に通知する
ことを特徴とする情報処理装置。
（付記２）
前記第３の実行部は、
前記第１の実行部を介して前記データ格納部から取得したデータの複製を保持し、
前記第２のＷｅｂアプリケーションの実行により、前記対象データの複製を第１の値に更新した場合、前記第１の実行部に対して、前記対象データを前記第１の値に更新することを要求し、
前記第１の実行部から前記対象データが前記第１の値に更新されたことが通知された後に、前記対象データが第２の値に更新されたことが通知されると、前記対象データの複製を前記第２の値に更新する
ことを特徴とする付記１に記載の情報処理装置。
（付記３）
前記第３の実行部は、
前記対象データが前記第１の値に更新されたことが通知される前に、前記第１の実行部から、前記対象データが前記第２の値に更新されたことが通知されると、前記対象データの前記第２の値への更新は、前記対象データが前記第１の値に更新される前に行われたと判定し、
前記対象データの複製を前記第２の値に更新しない
ことを特徴とする付記２に記載の情報処理装置。
（付記４）
前記データ格納部にアクセスする第４の実行部と、
前記第４の実行部を介して前記データ格納部から取得済みのデータを用いて、第３のＷｅｂアプリケーションを実行する第５の実行部
をさらに備え、
前記データ格納部は、前記第１の実行部により前記対象データが更新されると、前記対象データが更新されたことと更新後の値を前記第４の実行部に通知し、
前記第４の実行部は、前記データ格納部から通知を受けると、前記対象データの最新の値が前記更新後の値と一致しているかの判定結果とともに、前記対象データの更新が発生したことを、前記第５の実行部に通知し、
前記第５の実行部は、前記対象データの最新の値が前記更新後の値と一致していない場合、前記第５の実行部が保持しているデータ中の前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記１〜３のいずれか１項に記載の情報処理装置。
（付記５）
前記第５の実行部は、
前記第３のＷｅｂアプリケーションの実行により、前記対象データの複製を第３の値に更新すると、前記第４の実行部に対して、前記対象データを前記第３の値に更新することを要求し、
前記対象データが前記第３の値に更新されたことが通知される前に、前記第４の実行部から、前記対象データが更新されたことと、前記対象データの最新の値が前記更新後の値と一致していることが通知されると、前記対象データの前記更新後の値への更新は、前記対象データが前記第３の値に更新される前に行われたと判定し、
前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記４に記載の情報処理装置。
（付記６）
データ格納部にアクセスする管理アプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行し、
前記管理アプリケーションは、前記第１のＷｅｂアプリケーションから前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第２のＷｅｂアプリケーションに通知する
処理を情報処理装置が行うことを特徴とする情報処理方法。
（付記７）
前記第２のＷｅｂアプリケーションは、
前記管理アプリケーション経由で前記データ格納部から取得したデータの複製を保持し、
前記対象データの複製を第１の値に更新した場合、前記管理アプリケーションに対して、前記対象データを前記第１の値に更新することを要求し、
前記管理アプリケーションから前記対象データが前記第１の値に更新されたことが通知された後に、前記対象データが第２の値に更新されたことが通知されると、前記対象データの複製を前記第２の値に更新する
ことを特徴とする付記６に記載の情報処理方法。
（付記８）
前記第２のＷｅｂアプリケーションは、
前記対象データが前記第１の値に更新されたことが通知される前に、前記管理アプリケーションから、前記対象データが前記第２の値に更新されたことが通知されると、前記対象データの前記第２の値への更新は、前記対象データが前記第１の値に更新される前に行われたと判定し、
前記対象データの複製を前記第２の値に更新しない
ことを特徴とする付記７に記載の情報処理方法。
（付記９）
前記情報処理装置が
前記データ格納部にアクセスする他の管理アプリケーションを実行し、
前記他の管理アプリケーションを介して前記データ格納部から取得済みのデータを用いて、第３のＷｅｂアプリケーションを実行し、
前記管理アプリケーションにより前記対象データが更新されると、前記対象データが更新されたことと更新後の値を、前記他の管理アプリケーションに通知し、
前記他の管理アプリケーションは、前記対象データの最新の値が前記更新後の値と一致しているかの判定結果とともに、前記対象データの更新が発生したことを、前記第３のＷｅｂアプリケーションに通知し、
前記第３のＷｅｂアプリケーションは、前記対象データの最新の値が前記更新後の値と一致していない場合、前記第３のＷｅｂアプリケーションが保持しているデータ中の前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記６〜８のいずれか１項に記載の情報処理方法。
（付記１０）
前記第３のＷｅｂアプリケーションは、
前記第３のアプリケーションの実行により、前記対象データの複製を第３の値に更新すると、前記他の管理アプリケーションに対して、前記対象データを前記第３の値に更新することを要求し、
前記対象データが前記第３の値に更新されたことが通知される前に、前記他の管理アプリケーションから、前記対象データが更新されたことと、前記対象データの最新の値が前記更新後の値と一致していることとが通知されると、前記対象データの前記更新後の値への更新は、前記対象データが前記第３の値に更新される前に行われたと判定し、
前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記９に記載の情報処理方法。
（付記１１）
データ格納部にアクセスする管理アプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第１のＷｅｂアプリケーションを実行し、
前記管理アプリケーション経由で前記データ格納部から取得済みのデータを用いて、第２のＷｅｂアプリケーションを実行し、
前記管理アプリケーションは、前記第１のＷｅｂアプリケーションから前記データ格納部に格納されたデータ中の対象データの更新が要求されると、前記更新を前記対象データに適用するとともに、前記対象データに適用した更新を前記第２のＷｅｂアプリケーションに通知する
処理を情報処理装置に行わせることを特徴とする処理プログラム。
（付記１２）
前記第２のＷｅｂアプリケーションは、
前記管理アプリケーション経由で前記データ格納部から取得したデータの複製を保持し、
前記対象データの複製を第１の値に更新した場合、前記管理アプリケーションに対して、前記対象データを前記第１の値に更新することを要求し、
前記管理アプリケーションから前記対象データが前記第１の値に更新されたことが通知された後に、前記対象データが第２の値に更新されたことが通知されると、前記対象データの複製を前記第２の値に更新する
ことを特徴とする付記１１に記載の処理プログラム。
（付記１３）
前記第２のＷｅｂアプリケーションは、
前記対象データが前記第１の値に更新されたことが通知される前に、前記管理アプリケーションから、前記対象データが前記第２の値に更新されたことが通知されると、前記対象データの前記第２の値への更新は、前記対象データが前記第１の値に更新される前に行われたと判定し、
前記対象データの複製を前記第２の値に更新しない
ことを特徴とする付記１２に記載の処理プログラム。
（付記１４）
前記データ格納部にアクセスする他の管理アプリケーションを実行する処理と、
前記他の管理アプリケーションを介して前記データ格納部から取得済みのデータを用いて、第３のＷｅｂアプリケーションを実行する処理と、
前記管理アプリケーションにより前記対象データが更新されると、前記対象データが更新されたことと更新後の値を、前記他の管理アプリケーションに通知する処理
を前記情報処理装置にさらに行わせ、
前記他の管理アプリケーションは、前記対象データの最新の値が前記更新後の値と一致しているかの判定結果とともに、前記対象データの更新が発生したことを、前記第３のＷｅｂアプリケーションに通知し、
前記第３のＷｅｂアプリケーションは、前記対象データの最新の値が前記更新後の値と一致していない場合、前記第３のＷｅｂアプリケーションが保持しているデータ中の前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記１１〜１３のいずれか１項に記載の処理プログラム。
（付記１５）
前記第３のＷｅｂアプリケーションは、
前記第３のＷｅｂアプリケーションの実行により、前記対象データの複製を第３の値に更新すると、前記他の管理アプリケーションに対して、前記対象データを前記第３の値に更新することを要求し、
前記対象データが前記第３の値に更新されたことが通知される前に、前記他の管理アプリケーションから、前記対象データが更新されたことと、前記対象データの最新の値が前記更新後の値と一致していることとが通知されると、前記対象データの前記更新後の値への更新は、前記対象データが前記第３の値に更新される前に行われたと判定し、
前記対象データの複製を前記更新後の値に更新しない
ことを特徴とする付記１４に記載の処理プログラム。
【符号の説明】
【０１１８】
１１  プロセッサ
１２  メモリ
１３  入力装置
１４  出力装置
１５  バス
１６  外部記憶装置
１７  媒体駆動装置
１８  可搬型記憶媒体
１９  ネットワーク接続装置
３０  Ｗｅｂアプリ
３１、５１  メッセージ出力部
３２、５２  メッセージ取得部
３３、５３  実行部
３５  取得データ
３６  履歴情報
５０  管理アプリ
１００  情報処理装置
１１０  ブラウザ
１２０  トップレベルＢＣ
１３０  子ＢＣ
１４０  Ｗｅｂ＿Ｓｔｏｒａｇｅ  ＡＰＩ
１５０  データ格納部
１５１  記憶領域
【図１】
2017191445.tif 000003
【図２】
2017191445.tif 000004
【図３】
2017191445.tif 000005
【図４】
2017191445.tif 000006
【図５】
2017191445.tif 000007
【図６】
2017191445.tif 000008
【図７】
2017191445.tif 000009
【図８】
2017191445.tif 000010
【図９】
2017191445.tif 000011
【図１０】
2017191445.tif 000012
【図１１】
2017191445.tif 000013
【図１２】
2017191445.tif 000014
【図１３】
2017191445.tif 000015
【図１４】
2017191445.tif 000016
【図１５】
2017191445.tif 000017
【図１６】
2017191445.tif 000018
【図１７】
2017191445.tif 000019
【図１８】
2017191445.tif 000020
【図１９】
2017191445.tif 000021