从外部资源加载图像闪烁

时间:2013-10-30 09:54:04

标签: actionscript-3 flash actionscript loader vk

经过一周尝试不同的方法后,我的最后一招是向你们询问有关ActionScript Loader的问题。

我无法使用Loader从URL加载图像,因为它适用于我的另一个应用程序。我根本不知道代码的区别在哪里。我甚至无法调试Loader对象的内容,因为只是试图查看其中的内容会引发异常。

我的代码是:

urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE, onLoadedBytes);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, passEvent);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, passEvent);
urlLoader.load(new URLRequest(url));

普通装载机:

loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, passEvent);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,   passEvent);
loader.load(new URLRequest(url), new LoaderContext(true));

加载相关方法:

private function onLoadedBytes(e:Event):void
{
    var ba:ByteArray = e.target.data;
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
    loader.loadBytes(ba);
}
private function onImageLoaded(e:Event):void
{
    _bitmapData = e.target.content.bitmapData;
    dispatchEvent(new Event(Event.COMPLETE));
}

知道怎么解决吗?我尝试加载图片的域名是VK Games(http://vk.com/playfreegames),图片与应用游戏相关。

我已经在堆栈中搜索了答案,但所提出的解决方案都没有解决我的问题。

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,服务器A上的SWF文件和服务器B上的图像需要服务器B上的crossdomain.xml文件,以便允许swf加载图像。

http://kb2.adobe.com/cps/142/tn_14213.html

- 我建议使用一个库来加载像LoaderMax或Hydotics / Queloader ......

greensock com / loadermax /

github com / hydrotik / QueueLoader / wiki

答案 1 :(得分:1)

这是一个安全问题。来自文档:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html

“如果加载的内容是图像,则安全沙箱外的SWF文件无法访问其数据,除非该SWF文件的域包含在图像原始域的URL策略文件中。”

如果你听安全事件,你可能会看到它发出错误。 Loader之所以有用,是因为您只是访问该图片,所以没关系,但是URLLoader模式中的BINARY不会因为您尝试访问像素数据而导致安全性错误。如果您尝试通过Loader访问像素数据,则可能会收到相同的错误。

要么只是加载它而不访问后面的BitmapData(包括应用过滤器等),要么使用跨域文件