我在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网址值作为非常简单的图片网址返回,没有十六进制值,而且显示得很好,但大部分内容,如上面的两个示例,根本不呈现,只是结果在flex中的破碎图像/问号符号(使用桌面调试/模拟器)。我尝试解码url字符串但是没有用。
当我将网址放入我的浏览器时,它们可以很好地工作并在浏览器中呈现。
我可以对URL做些什么来让它们工作吗?
答案 0 :(得分:1)
您能提供一个适合您的网址示例吗?
我相信Ebay专门阻止来自其他网域的Flash应用使用他们的图片。
URL编码不是问题... Flash只依赖于浏览器来下载它们。但是,看一下深埋在BitmapImage
组件内的这段代码(这是Spark Image
组件使用的基础内容):
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文件的link。
他们的crossdomain.xml文件专门允许来自各个ebay域的Flash应用程序访问i.ebayimage.com上的内容。我只是扫描了它,但我没有看到任何允许通配符(allow-access-from domain="*"
)的内容,因此允许使用非易趣域名。因此,除非ebay允许,否则您永远无法在Flash应用中使用这些图像。
<强> [编辑] 强>
在您执行以下某项操作之前,您应该determine the legality of what you're doing。
实际上,我接受了。您永远无法使用Flex Image
或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);
}
}
}