読者です 読者をやめる 読者になる 読者になる

ドメインをまたいだクロスムービースクリプト(クロススクリプト)

[ActionScript3.0]
actionscriptで別ドメインに属するxmlをロードしてデータを参照したい場合は、xmlが配置してあるドメインのルートパスにcrossdomain.xmlを配置しないとアクセスできないというのは有名。
ここらについてはググればいくらでも出てくるので、そこらへんを参考にどうぞ。


ただし、これは一般的なドキュメントデータに対してのみ適用されるセキュリティポリシーのようだ。
ロードするデータがswfの場合はこのセキュリティポリシーは適用されない。


あるswfから別ドメインのswfをロードして、その別ドメインswfに含まれるMovieClipなどにアクセスしたい場合はcrossdomain.xmlを配置してもセキュリティエラーになってしまう。
つまり、別ドメインのリソースをロードする場合は、xmlなどのドキュメントよりswfのほうがより強いセキュリティポリシーが設定されているということだ。


このようなswf←→swf(別ドメイン)でスクリプトアクセスすることをクロスドメインスクリプトと呼ぶようだ。

var request:URLRequest = new URLRequest("読み込みたい別ドメインのswfのURL");
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
function loadComplete(event:Event)
{
	var mc_root:MovieClip = loader.content as MovieClip;		//←ここでサンドボックスなんちゃらのエラーが出る
}
SecurityError: Error #2121: セキュリティサンドボックス侵害 : Loader.content:http://[読み込み元のswf] は http://[別ドメインのswf] にアクセスできません。これは、Security.allowDomain を呼び出すことによって回避できる場合があります。
	at flash.display::Loader/get content()

詳しくはこちら
http://livedocs.adobe.com/flex/3_jp/langref/flash/system/Security.html#allowDomain()

つまりドメイン間をまたいだswf同士のスクリプティングは、読み込まれる方(別ドメインのswf)にSecurity.allowDomain("許可するドメイン")の宣言が必要らしい。


これはきつい・・・


追記
回避方法についてはこちら
http://d.hatena.ne.jp/flick-flick/20090312