Flexでセキュリティーサンドボックスの制限を超えて他サーバーの画像バイト列を得る方法
結論:URLLoaderではなくImageかLoaderを使う
Flexでどこかのサーバーにある画像のバイト列を得る方法はいくつかあるが、問題はFlexコンテンツを読み込んだサーバー(自サーバー)以外のサーバー(他サーバー)にある画像のバイト列を得る方法だ。
この場合、セキュリティーサンドボックスの制限により、自サーバーからバイト列を得る場合より方法は限られてくる。
ひとつはcrossdomain.xmlをサーバー上に配置する方法だが、なんらかの理由によりcrossdomain.xmlを配置したくない場合はどうするか。
始めはURLLoaderを使ってバイト列を得ていたが、これは自サーバーかcrossdomain.xmlを配置した場合のみ有効で、これではダメだとわかった。
その後、Imageコンポーネントがセキュリティーサンドボックス制限を超えている事がわかり、それならLoaderなら同様に超えられるかも知れないと試したところ、その通りだった。
今回のケースの場合、Imageを使用したくなかったのでわざわざLoaderを使ったが、Image.loaderInfo.bytesを取っても可能だろう。
URLLoaderは汎用だが、LoaderやImageは画像の読み込みに用途を限っているためセキュリティーサンドボックスの制限が緩いのではないかと思われる。
目的が達成できたので、これ以上追求する気なし(^^);
Flexでどこかのサーバーにある画像のバイト列を得る方法はいくつかあるが、問題はFlexコンテンツを読み込んだサーバー(自サーバー)以外のサーバー(他サーバー)にある画像のバイト列を得る方法だ。
この場合、セキュリティーサンドボックスの制限により、自サーバーからバイト列を得る場合より方法は限られてくる。
ひとつはcrossdomain.xmlをサーバー上に配置する方法だが、なんらかの理由によりcrossdomain.xmlを配置したくない場合はどうするか。
始めはURLLoaderを使ってバイト列を得ていたが、これは自サーバーかcrossdomain.xmlを配置した場合のみ有効で、これではダメだとわかった。
その後、Imageコンポーネントがセキュリティーサンドボックス制限を超えている事がわかり、それならLoaderなら同様に超えられるかも知れないと試したところ、その通りだった。
var bytes:ByteArray;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoader);
function onCompleteLoader():void {
bytes = loader.contentLoaderInfo.bytes;
}
loader.load(new URLRequest(url));
今回のケースの場合、Imageを使用したくなかったのでわざわざLoaderを使ったが、Image.loaderInfo.bytesを取っても可能だろう。
URLLoaderは汎用だが、LoaderやImageは画像の読み込みに用途を限っているためセキュリティーサンドボックスの制限が緩いのではないかと思われる。
目的が達成できたので、これ以上追求する気なし(^^);
コメント
コメントを投稿