クロススクリプト

Flash Player 9 以降、Adobe AIR 1.0 以降

ActionScript 3.0 で記述された 2 つの SWF ファイル、または AIR で実行される 2 つの HTML ファイルが同じドメインに所属している場合は、例えば 1 つの SWF ファイルの URL が http://www.example.com/swfA.swf、もう 1 つの SWF ファイルの URL が http://www.example.com/swfB.swf であれば、片方のファイルに定義されたコードはもう一方の変数、オブジェクト、プロパティ、メソッドなどを検査および変更でき、その逆も可能です。これをクロススクリプトと呼びます。

2 つのファイルが異なるドメインに所属している場合(例えば http://siteA.com/swfA.swf および http://siteB.com/swfB.swf)、Flash Player および AIR のデフォルトでは、swfA.swf で swfB.swf をスクリプトすることも、swfB.swf で swfA.swf をスクリプトすることもできません。SWF ファイルは、 Security.allowDomain() を呼び出すことで他のドメインの SWF ファイルに許可を付与します。 Security.allowDomain("siteA.com") を呼び出すことで、swfB.swf での siteA.com の SWF ファイルのスクリプト許可が付与されます。

AVM1 SWF ファイルと AVM2 SWF ファイル間でのクロススクリプトはサポートされません。 AVM1 SWF ファイルは、ActionScript 1.0 または ActionScript 2.0 を使用して作成されたファイルです。 AVM1 および AVM2 は、ActionScript 仮想マシンを意味します。 しかし、LocalConnection クラスを使用すると、AVM1 と AVM2 間でデータを送信できます。

クロスドメインの場合は、関与する 2 つのドメインを明確にすることが重要です。 説明のため、ここでは、クロススクリプトを実行する側をアクセス元(通常、アクセスする SWF)と呼び、もう一方をアクセス先(通常、アクセスされる SWF)と呼びます。次の図に示すように、siteA.swf が siteB.swf をスクリプトする場合、siteA.swf がアクセス元で、siteB.swf がアクセス先です。

Security.allowDomain() メソッドを使用して確立されるクロスドメイン許可は非対称です。前の例では、siteA.swf は siteB.swf をスクリプトできますが、siteB.swf は siteA.swf をスクリプトできません。この理由は、siteB.com の SWF ファイルに siteA.swf をスクリプトする許可を付与するための Security.allowDomain() メソッドを siteA.swf で呼び出していないからです。対称的な許可を設定するには、両方の SWF ファイルで Security.allowDomain() メソッドを呼び出します。

Flash Player では、SWF ファイルを他の SWF ファイルによるクロスドメインスクリプトから保護するだけでなく、HTML ファイル によるクロスドメインスクリプトからも保護します。 HTML から SWF へのスクリプトは、 ExternalInterface.addCallback() メソッドを通じて確立されたコールバックで発生させることができます。HTML から SWF へのスクリプトがドメインを越える場合、アクセス先 SWF ファイルは、アクセス元が SWF ファイルの場合と同様に、 Security.allowDomain() メソッドを呼び出す必要があります。さもなければ、操作は失敗します。詳しくは、 作成者(開発者)コントロール を参照してください。

また、Flash Player は SWF から HTML へのスクリプトのセキュリティ管理も行います。 詳しくは、 送信 URL アクセスの制御 を参照してください。