我的Flex 4应用程序中有以下Actionscript代码,用于在Sprite上显示图像。在开发此功能时,在本地Flash播放器中完美运行:
private function initializePhoto():void {
var photoLoader:Loader = new Loader();
photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPhotoReady);
photoLoader.load(new URLRequest("http://image.mydomain.com/icon/mark.png"));
}
public function onPhotoReady(event:Event):void {
var marker:Bitmap = new Bitmap();
marker.x = -32;
marker.y = -8;
marker.smoothing = true;
marker.bitmapData = event.target.content.bitmapData;
marker.width = 64;
marker.height = 64;
addChild(marker);
}
因此我获取生成的.swf文件并在我的本地Web服务器中运行它。看起来不错。将其上传到舞台并且看起来不错。第二天上映时,图像没有出现!困惑,我看着萤火虫,它显示图像实际上正在下载...只是不可见。当我在本地网络服务器上查看应用程序时,我会在本地查看firebug,图像有时只会出现!但总是在下载图像。通过adobe flash播放器在开发模式下永远不会失败。
发生了什么事?我想我有点困惑......我的想法是:
我的猜测是存在某种竞争条件,在将位图添加到Sprite之前,是否必须等待onPhotoReady方法被调用?
更新 :对于如此简单的操作(显示来自网址的图片)而言,这是非常令人沮丧的。因此,当失败时,发生的事情是Event.COMPLETE事件永远不会被触发。但是,ProgressEvent.PROGRESS总是被触发两次(首先是0 bytesLoaded然后是所有bytesLoaded)。不会抛出或触发任何错误。
有趣的是,当这确实有效时,我在Firebug中看到http://image.mydomain.com/crossdomain.xml被请求,而未请求则不起作用(即使ProgressEvent.PROGRESS回调显示所有字节)加载)。我会想象在 获取图像之前,crossdomain.xml会被称为 。
更新2 :只需将额外参数new LoaderContext(true)
添加到photoLoader.load()
来电即可解决。
答案 0 :(得分:0)
您是否检查过这可能是跨域政策问题?如果问题不能始终如一地发生,那么它就不是安全问题。
答案 1 :(得分:0)
如果您不需要编辑位图数据,您可以尝试简单地拍摄和图像对象,并将网址作为源。 直到现在,这对我有用,一定没有。