Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > セキュリティについて > ドメイン、ドメイン間のセキュリティ、および SWF ファイルについて > クロスドメイン SWF ファイル間のデータアクセスの許可 | |||
2 つの SWF ファイルが互いのデータ (変数とオブジェクト) にアクセスできるようにするには、2 つのファイルが同じドメインに存在する必要があります。Flash Player 7 以降では、デフォルトで 2 つの SWF ファイル間でデータを共有するには、両ファイルのドメインが完全に一致する必要があります。ただし、SWF ファイルは、LocalConnection.allowDomain または System.security.allowDomain() を呼び出すと、特定のドメインからのサービスを受けている複数の SWF ファイルが別の SWF ファイルにアクセスできるようになります。
System.security.allowDomain()allowDomain() 呼び出しを含むファイル内のオブジェクトと変数にアクセスできるドメインを、SWF ファイルおよび HTML ファイルから指定できます。
たとえば http://adobe.com/movieA.swf と http://adobe.com/movieB.swf のように、2 つの SWF ファイルが同じドメインからサービスを受けている場合、movieA.swf で movieB.swf 内の変数、オブジェクト、プロパティ、メソッドなどを調査、変更でき、movieB でも movieA に対して同様のことを実行できます。これを "クロススクリプト" と呼びます。
たとえば http://adobe.com/movieA.swf と http://helpexamples.com/movieB.swf のように、2 つの SWF ファイルが異なるドメインからサービスを受けている場合、デフォルトでは、movieA.swf で movieB.swf をスクリプトすることも、movieB で movieA をスクリプトすることも許可されません。movieB.swf では、System.security.allowDomain("adobe.com") を呼び出すことで、movieA.swf に movieB.swf をスクリプトする許可を与えます。SWF ファイルでは、他のドメインの SWF ファイルに対して、System.security.allowDomain() を呼び出すことで、自分自身をスクリプトする許可を与えます。これをクロスドメインスクリプトと呼びます。
System.security.allowDomain()、クロススクリプト、およびクロスドメインスクリプトの詳細については、『ActionScript 2.0 リファレンスガイド』の「allowDomain (security.allowDomain メソッド)」を参照してください。
たとえば、メイン SWF ファイルが www.adobe.com からサービスを受けていて、これが data.adobe.com から別の SWF ファイル (data.swf) を、createEmptyMovieClip() を使用して動的に作成されるムービークリップインスタンスにロードするとします。
// adobe.swf 内
this.createEmptyMovieClip("target_mc", this.getNextHighestDepth());
target_mc.loadMovie("http://data.adobe.com/data.swf");
さらに、"data.swf" がメインタイムライン上に getData() という名前のメソッドを定義しているとします。デフォルトでは、"main.swf" は "data.swf" のロード後、そのファイルで定義されている getData() メソッドを呼び出すことができません。2 つの SWF ファイルが同じドメインにないためです。たとえば、"data.swf" をロードした後、"main.swf" で次のメソッド呼び出しを行うとエラーになります。
// data.swf をロードした後の adobe.swf 内 target_mc.getData(); // このメソッド呼び出しはエラーになる
ただし、LocalConnection.allowDomain ハンドラおよび System.security.allowDomain() メソッドを使用すると、www.adobe.com のサービスを利用している SWF ファイルが "data.swf" にアクセスできる場合があります。"data.swf" に次のコードを追加すると、www.adobe.com のサービスを利用しているすべての SWF がこのファイルの変数とメソッドにアクセスできるようになります。
// data.swf の内部
this._lockroot = true;
System.security.allowDomain("www.adobe.com");
var my_lc:LocalConnection = new LocalConnection();
my_lc.allowDomain = function(sendingDomain:String):Boolean {
return (sendingDomain == "www.adobe.com");
};
function getData():Void {
var timestamp:Date = new Date();
output_txt.text += "data.swf:" + timestamp.toString() + "\n\n";
}
output_txt.text = "**INIT**:\n\n";
これで、ロードされた SWF ファイル内の getData 関数を、"adobe.swf" ファイルで呼び出すことができます。allowDomain() では、アクセスされる側の SWF ファイルがセキュリティ保護プロトコル (HTTPS) を使用したサイトでホストされていない限り、許可されたドメイン内の任意の SWF ファイルに対して、他の任意の SWF ファイルをスクリプトする許可が与えられる点に注意してください。
ドメイン一致規則の詳細については、SWF ファイル間のクロスドメインおよびサブドメインのアクセスを参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001083.html