次のフレックスコードは、イメージファイルを取得してイメージデータをビットマップに複製するためにイメージコントロールソースを 'httpsプログラム呼び出し'別の画像ビューアの子として追加します。httpsプログラムコールに設定されたAdobe Flexイメージコントロールソースが失敗しました(SecurityError:Error#2122)
<ns1:ImageViewer id="imageViewer" bitmapScaleFactorMax="5" bitmapScaleFactorMin=".05"width="100%" height="100%" x="0" y="0" />
<mx:Image id="navImage" source="{_imageURL}" complete="{loadOK()}" />
private function loadOK():void
{
Alert.show("load ok");
try {
preImageData = (navImage.content as Bitmap).bitmapData.clone();
Alert.show("clone ok");
} catch (err:Error) {
Alert.show"error="+err);
}
preImage = new Bitmap(preImageData);
Alert.show("bitmap ok");
preImage.scaleX /= scaleRatio;
preImage.scaleY /= scaleRatio;
imageViewer.addChildAt(preImage, 0);
Alert.show("cloned navImage add to imageBiewer ok");
// some further codes
}
public function appStart():void
{
_imageURL = "https://fs.mysite.com/getimgurl.jsp?pic=logo";
}
「https://fs.mysite.com/getimgurl.jsp?pic=logo」は実際には文字列「https://fs.mysite.com/img/mylogo.jpg」を返します。
私はap.mysite.com上のcrossdomain.xmlでポリシーを設定しました:ap.mysite.comで
<allow-access-from domain="ap.mysite.com" secure="false" />
を、私はこのswfファイルを含めると、ブラウザ上でそれを実行するためのJSPを書き、それだけ"load ok"と表示されますが、 "clone ok"は表示されず、例外には "error = SecurityError:Error#2122"と表示されます。 _imageURL = https://fs.mysite.com/img/mylogo.jpgを直接設定すると、「クローンOK」と表示されます。
イメージコントロールソースがプログラムコールを受け付けていないと思っていましたが、プログラムコール文字列のhttpsをhttpに変更するとうまくいきます。
「loadPolicyFile」と「allowDomain」について教えてくれる人もいますが、わかりません。私は何が間違っているのか、何が欠けていますか?
動作します。理由を知ることができますか? –
サイト内でcrossdomain.xmlを使用しています。しかし、flexはポリシーファイルをどこから見つけるべきかわからないので、ポリシーファイルを読んで、アプリケーションが自分以外のサーバーからデータをロードできるようにするかどうかを決定できます。そこで、 'loadPolicyFile'を使ってポリシーファイルをロードするように指示する必要があります。 – Jeffin