2017-03-09 5 views
0

次のフレックスコードは、イメージファイルを取得してイメージデータをビットマップに複製するためにイメージコントロールソースを '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」について教えてくれる人もいますが、わかりません。私は何が間違っているのか、何が欠けていますか?

答えて

1

は、次のコードを追加し、それが働いた

Security.loadPolicyFile("yoursite/crossdomain.xml"); 
+0

動作します。理由を知ることができますか? –

+0

サイト内でcrossdomain.xmlを使用しています。しかし、flexはポリシーファイルをどこから見つけるべきかわからないので、ポリシーファイルを読んで、アプリケーションが自分以外のサーバーからデータをロードできるようにするかどうかを決定できます。そこで、 'loadPolicyFile'を使ってポリシーファイルをロードするように指示する必要があります。 – Jeffin

関連する問題