0

私が取り組んでいるflashbuilder 4.5モバイルアプリでJSONをロードしています。これまでのところ、すべての変数が正常にレンダリングされ、左右のスワイプジェスチャを使用して、actionscript3を使用してユーザーがアイテムの配列を移動できるようにしています。

ここで、SOURCE パラメーターが変数 (thisimg2) にバインドされているステージに画像を追加する作業を行っている部分に到達します。その値は、画像 URL の json 値です... URL の例は次のとおりです。

http://i.ebayimg.com/00/s/MTA2MlgxNjAw/%24T2eC16JHJG%21E9nm3pkoZBQDVSKHsow%7E%7E60_1.JPG?set_id=880000500F

http://i.ebayimg.com/00/s/MTIwMFgxNjAw/%24%28KGrHqV,%21pcE9eMM4r4ZBPmiD+Ft%21%21%7E%7E60_1.JPG?set_id=880000500F

JSON URL 値のごく一部は、16 進値のない非常に単純な画像 URL として返され、それらは問題なく表示されますが、上記の 2 つの例のように表示される大部分はまったくレンダリングされず、壊れた結果になります。 flex の画像/疑問符記号 (デスクトップ デバッグ/エミュレータを使用)。URL文字列をデコードしようとしましたが、うまくいきませんでした。

ブラウザに URL を入力すると、正常に動作し、ブラウザでレンダリングされます。

URL を動作させるためにできることはありますか?

4

1 に答える 1

1

うまくいっている URL の例を教えてください。

Ebay は、他のドメインの Flash アプリが自社の画像を使用することを明確に防いでいると思います。

URL エンコーディングは問題ではありません。Flash はブラウザに依存してダウンロードします。ただし、コンポーネントの奥深くに埋め込まれたこのコードを見てくださいBitmapImage(これは、SparkImageコンポーネントが使用する基本的なものです)。

BitmapImage::loadExternal() (1513 行目)

    try
    {
        loaderContext.checkPolicyFile = true;
        var urlRequest:URLRequest = source is URLRequest ?
            source as URLRequest : new URLRequest(source as String);
        loader.load(urlRequest, loaderContext);
    }

ここではLoader、画像を取得してソース ドメインの crossdomain.xml ファイルを確認するために使用することを に伝えています。その crossdomain.xml ファイルへのリンクを次に示します。

彼らの crossdomain.xml ファイルは、さまざまな ebay ドメインの Flash アプリが i.ebayimage.com のコンテンツにアクセスできるようにするためのものです。スキャンしたところ、allow-access-from domain="*"ebay 以外のドメインを許可するワイルドカード ( ) を許可するものは見当たりません。そのため、ebay が許可しない限り、これらの画像を Flash アプリで使用することはできません。

[編集]

以下のいずれかを行う前に、おそらく、自分が行っていることの合法性を判断する必要があります。

実際、私はそれを取り戻します。Imageこれらのコンポーネントはポリシー ファイルをチェックするため、FlexまたはBitmapImageコンポーネントを使用してこれらのイメージをロードすることはできません。ただし、いくつかのオプションがあります。

  • クラスを拡張しBitmapImageてメソッドをオーバーライドしloadExternal()、ポリシー ファイルをチェックしないようにする
  • 独自のものを使用Loaderして画像を表示します。これは Flex アプリ内での作業ですが、機能します (単純な AS3 アプリでテストしたところです)。

これは、私がテストした非常に初歩的な AS3 アプリケーションです (Flex を使用していません)。

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.net.URLRequest;

    public class As3Project extends Sprite
    {

        private var loader:Loader;

        function As3Project()
        {
            loader=new Loader();
            var url:URLRequest = new URLRequest("http://i.ebayimg.com/00/s/MTA2MlgxNjAw/%24T2eC16JHJG%21E9nm3pkoZBQDVSKHsow%7E%7E60_1.JPG?set_id=880000500F");
            loader.load(url);
            addChild(loader);
        }
    }
}
于 2013-03-02T19:19:32.240 に答える