0

ローカルで正常に動作する swf (AS3) がありますが、swf をサーバーに置いてブラウザーで実行すると、draw メソッドを使用しようとするとクラッシュします。

var bmp:BitmapData=new BitmapData(ldr.width,ldr.height,true,0x00FFFFFF);
bmp.draw(ldr);

ldr は、この時点で他のサーバーから jpg を正常にロードしたローダーです。ステージにldrを追加して画像を見ることができます。何が起こっている?

4

2 に答える 2

1

リモートドメインからロードされたイメージのにアクセスするには、の(メソッドの2番目の(オプションの)引数)をcheckPolicyFileLoaderContext設定する必要があります。load()truebitmapData

var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext(true);
loader.load(urlRequest, context)

アクセスBitmapData

クラスのload()メソッドを使用して画像をロードする場合、オブジェクトであるパラメータを指定できます。オブジェクトのプロパティをtrueに設定すると、Flash Playerは、イメージのロード元のサーバー上のクロスドメインポリシーファイルをチェックします。クロスドメインポリシーファイルがあり、そのファイルがロード中のSWFファイルのドメインを許可している場合、ファイルはオブジェクト内のデータへのアクセスを許可されます。それ以外の場合、アクセスは拒否されます。LoadercontextLoaderContextcheckPolicyFileLoaderContextBitmap

LoaderContext::checkPolicyFile

呼び出し元のSWFファイル自体のドメインの外部から画像(JPEG、GIF、またはPNG)をロードしていて、ActionScriptからその画像のコンテンツにアクセスする必要がある場合は、このフラグをtrueに設定します。画像コンテンツへのアクセスの例には、Loader.contentプロパティを参照してBitmapオブジェクトを取得したり、BitmapData.draw()メソッドを呼び出してロードされた画像のピクセルのコピーを取得したりすることが含まれます。ロード時にcheckPolicyFileを指定せずにこれらの操作のいずれかを実行しようとすると、必要なポリシーファイルがまだダウンロードされていないため、SecurityError例外が発生する可能性があります。

Loader::load()

ロードされたコンテンツがイメージである場合、そのSWFファイルのドメインがイメージの元のドメインのクロスドメインポリシーファイルに含まれていない限り、セキュリティサンドボックスの外部のSWFファイルからそのデータにアクセスすることはできません。

BitmapData::draw()

注:ソースオブジェクトと(Spriteまたはオブジェクトの場合)そのすべての子オブジェクトは、呼び出し元と同じドメインからのものであるか、メソッドMovieClipを呼び出して呼び出し元がアクセスできるSWFファイル内にある必要があります。Security.allowDomain()これらの条件が満たされない場合、draw()メソッドは何も描画せず、SecurityError例外をスローします。この制限は、アプリケーションセキュリティサンドボックス内のAIRコンテンツには適用されません。

于 2010-01-21T08:03:30.800 に答える
1

他のサーバーの crossdomain.xml が正しいことを確認してください。

于 2010-01-21T04:42:41.567 に答える