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 值作为没有十六进制值的非常简单的图像 URL 返回,并且显示得很好,但是大部分看起来像上面的 2 个示例,根本不渲染,只会导致损坏flex 中的图像/问号符号(使用桌面调试/模拟器)。我尝试对 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 应用程序中使用这些图像。

[编辑]

在您执行以下任一操作之前,您可能应该确定您正在做的事情的合法性

实际上,我收回了这一点。您将永远无法使用 FlexImageBitmapImage组件来加载这些图像,因为这些组件会检查策略文件。但是,您有几个选择:

  • 扩展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 回答