经过一周尝试不同的方法后,我的最后一招是向你们询问有关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),图片与应用游戏相关。
我已经在堆栈中搜索了答案,但所提出的解决方案都没有解决我的问题。
答案 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
(包括应用过滤器等),要么使用跨域文件