| Adobe AIR |
|
|
アプリケーション間通信LocalConnection クラスを使用すると、Adobe® AIR™ アプリケーションとブラウザで実行される SWF コンテンツとの間だけでなく、AIR アプリケーション間でも通信できます。 LocalConnection クラスについてLocalConnection オブジェクトでの通信相手は、同じクライアントコンピュータ上で動作する AIR アプリケーションと SWF ファイルに限られますが、通信相手が同じアプリケーションで動作している必要はありません。例えば、AIR アプリケーションとブラウザで実行される SWF ファイルで可能なように、LocalConnection クラスを使用して 2 つの AIR アプリケーションで通信できます。 LocalConnection オブジェクトの最も簡単な使用方法は、同じドメイン内または同じ AIR アプリケーション内の LocalConnection オブジェクト間の通信のみを許可することです。この場合、セキュリティに関する問題への対処は不要です。しかし、異なるドメイン間で通信を行う必要がある場合は、セキュリティ対策を実施する必要があります。いくつかの方法があります。詳しくは、send() メソッドの connectionName パラメータおよび allowDomain() と domain のエントリ(LocalConnection クラスのリスト内)の説明を『Adobe AIR Language Reference』で参照してください。 LocalConnection オブジェクトにコールバックメソッドを追加するには、次のコードに示すように、LocalConnection.client プロパティに、メンバーメソッドを持つオブジェクトを設定します。 var lc = new air.LocalConnection();
var clientObject = new Object();
clientObject.doMethod1 = function() {
air.trace("doMethod1 called.");
}
clientObject.doMethod2 = function(param1) {
air.trace("doMethod2 called with one parameter: " + param1);
air.trace("The square of the parameter is: " + param1 * param1);
}
lc.client = clientObject;
LocalConnection.client プロパティに、呼び出すことができるすべてのコールバックメソッドが含まれます。 2 つのアプリケーション間でのメッセージ送信LocalConnection クラスを使用すると、異なる AIR アプリケーション間でも、AIR アプリケーションとブラウザで実行される Adobe® Flash® Player(SWF)アプリケーションの間でも通信できます。 次のコードでは、サーバとして動作し、他のアプリケーションから受信する LocalConnection 呼び出しを受け付ける LocalConnection オブジェクトを定義します。 var lc = new air.LocalConnection();
lc.connect("connectionName");
var clientObject = new Object();
clientObject.echoMsg = function(msg) {
air.trace("This message was received: " + msg);
}
lc.client = clientObject;
このコードでは、まず、lc という LocalConnection オブジェクトを作成し、client プロパティを clientObject オブジェクトに設定します。この LocalConnection インスタンスのメソッドを別のアプリケーションが呼び出すと、AIR は clientObject オブジェクトでそのメソッドを探します。 指定した名前の接続が既に存在する場合は ArgumentError 例外がスローされます。この例外は、オブジェクトが接続済みであるために接続の試行が失敗したことを示します。 次のコードでは、conn1 という名前を指定して LocalConnection を作成する方法を示します。 connection.connect("conn1");
第 1 のアプリケーションに第 2 のアプリケーションから接続するには、まず、送信側 LocalConnection オブジェクト内で LocalConnection オブジェクトを作成し、次に、接続名と実行するメソッドの名前を指定して LocalConnection.send() メソッドを呼び出す必要があります。例えば、前述の例で作成した LocalConnection オブジェクトに接続するには、次のコードを使用します。 sendingConnection.send("conn1", "echoMsg", "Bonjour.");
このコードでは、既存の LocalConnection オブジェクトに接続名 conn1 で接続し、リモートアプリケーションの doMessage() メソッドを呼び出しています。リモートアプリケーションにパラメータを送信する場合は、次のコードに示すように、send() メソッドに対するメソッド名の指定の後に追加パラメータを指定します。 sendingConnection.send("conn1", "doMessage", "Hello world");
異なるドメインのコンテンツおよび他の AIR アプリケーションへの接続特定のドメインからの通信のみ許可するには、LocalConnection クラスの allowDomain() メソッドまたは allowInsecureDomain() メソッドを呼び出し、この LocalConnection オブジェクトへのアクセスを許可するドメインのリストを渡し、許可するドメインの 1 つ以上の名前を渡します。 LocalConnection.allowDomain() メソッドおよび LocalConnection.allowInsecureDomain() メソッドに渡すことができる特別な値として、* と localhost の 2 つがあります。アスタリスク値(*)は、すべてのドメインにアクセスを許可することを示します。localhost というストリングは、ローカル(ただし、アプリケーションリソースディレクトリ外)にインストールされているコンテンツから該当のアプリケーションへの呼び出しを許可することを示します。 LocalConnection.send() メソッドで、呼び出し元コードでのアクセスが認められていないアプリケーションにセキュリティサンドボックスから通信しようとすると、securityError イベント(SecurityErrorEvent.SECURITY_ERROR)が送出されます。このエラーを回避するには、受信側の LocalConnection.allowDomain() メソッドで、呼び出し元のドメインを指定してください。 同じドメイン内のコンテンツ間のみで通信を行う場合は、connectionName パラメータに対して、先頭がアンダースコア(_)以外で、かつドメイン名を含まない名前を指定します(例:myDomain:connectionName)。また、それと同じストリングを LocalConnection.connect(connectionName) コマンドでも使用します。 異なるドメインにあるコンテンツ間での通信を実装する場合は、connectionName パラメータに対して、アンダースコアで始まる名前を指定します。このアンダースコアを付けると、受信側 LocalConnection オブジェクトを含むコンテンツのドメイン間におけるポータビリティが高まります。考えられる 2 つの状況を次に示します。
|