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の技術をデスクトップに」持ってきた意味が半減してしまいますね。