swfから他ドメインのファイルを見に行く際の手順

こんにちは。ActionScript乳児のマツモです。

swfから他ドメインのファイルを見に行く際の手順について色々調べました。
で、どうすりゃいいのYO!?というまとめ。

まず
Flash Player7以降あたりから基本的にクロスドメイン禁止。
つまり現在ほとんどの人(クライアント)が対象。避けては通れない道になりました。

前提
http://example.com/hoge.swf
から
http://static.example.com/json/hoge.json
を取得してムービーを再生。

サブドメインが異なるだけでもFlashPlayerは異なるドメインとして扱います。


手順
1.http://example.com/hoge.swfをまず作る。

↓とかを参考にしたりincludeしたり。

hoge.swf

var myLoadVars = new LoadVars();
myLoadVars.onData = function (json) {
	.... // 読み込み完了時の処理
}
myLoadVars.load("http://static.example.com/json/hoge.json");

とまぁここで動く気がするわけですが動きません。
というかドメインが異なるのでloadできません。


2.そこでポリシーファイルの登場
ドメイン間のデータロード許可
に色々と書いてあるんですが、今回のケースで要約すると

http://static.example.com/json/crossdomain.xmlっての作っておいてね。

でその中身は

<?xml version="1.0"?>
<!-- http://static.example.com/json/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="example.com" />
</cross-domain-policy>

こんな感じにしといてね。という事のような感じがしなくも無いような気がしなくもない。
ちなみに*はワイルドカードとして扱われるようです。
なので*.example.comサブドメイン全部という事になりますな。

配置的にはこんな感じ

static.example.com

    `-- json
        |-- crossdomain.xml
        `-- hoge.json

example.com

    `-- hoge.swf


3.で動くと思いきや

で動くと思いきや動きませぬ。
crossdomain.xmlを有効にするために最後に一行追加が必要みたいです。

System.security.loadPolicyFile("http://static.example.com/json/crossdomain.xml");

でキターーーーーーーーーーーー!


但し
crossdomain.xml脆弱性を生む温床になり得るのでご利用は計画的に。