flashcast:フリーで働くITエンジニア集団のブログ: google翻訳APIの翻訳結果JSONを読み込むswfのソースを公開しますでは、google翻訳APIをHTTPServiceを継承したクラスから呼び出しています。Internetの世界では、何かとクロスドメインの制約がつき物ですが、Flash Playerも例外ではありません。クロスドメインのアクセスには制限があります。つまり、WebサーバA上にあるswfファイルからWebサーバB上にあるリソース(API、テキスト、html、画像にかかわらず)にアクセスすることは基本的にはできません。これは開発ツールがFlex BuilderであろうがFlash CS3 Professionalであろうが関係ありません。Flash Playerのセキュリティなのです。

これを可能にするのがクロスドメインポリシーファイルです。
Adobe – デベロッパーセンター : クロスドメインポリシーファイルの仕様

<?xml version="1.0" ?>
<!DOCTYPE cross-domain-policy (View Source for full doctype...)>
<cross-domain-policy>
 <allow-access-from domain="許可するサイトのドメイン名" />
</cross-domain-policy>

Webサーバ上のルートディレクトリにcrossdomain.xmlが配置されている場合、allow-access-fromで許可されたサイト上にあるswfファイルからのアクセスが可能になります。allow-access-fromタグは繰り返しで、許可するサイトを複数指定することができます。google翻訳APIの翻訳結果JSONを読み込むswfでコールしているgoogle翻訳APIのURLはhttp://ajax.googleapis.com/ajax/services/language/translateですが、この結果を取得できているのはajax.googleapis.comのルートディレクトリにcrossdomain.xmlがあるからなのです。

http://ajax.googleapis.com/crossdomain.xml

<?xml version="1.0" ?>
<!DOCTYPE cross-domain-policy (View Source for full doctype...)>
<cross-domain-policy>
<allow-access-from domain="*" secure="true" />
</cross-domain-policy>

許可ドメインに*(ワイルドカード)が指定されているので、すべてのサイトのswfファイルからアクセス可能です。ちなみに、*.googleapis.comのように指定すると、googleapis.comのすべてのサブドメインからのアクセスが許可されます。

但し、これはFlash Playerのセキュリティの話で、AIRアプリの場合この制約は受けず、すべてのWebサーバ上のリソースへのアクセスが可能となっています。今後はどうなるかわかりませんが、もし、これができなくなると「Webの技術をデスクトップに」持ってきた意味が半減してしまいますね。

関連記事

Trackback URL