0

在尝试了一周不同的方法后,我最后的手段是向你们询问我的 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 ),并且图像与应用游戏相关。

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

4

2 回答 2

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

于 2013-10-30T10:09:45.203 回答
1

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

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

如果您收听安全事件,您可能会看到它给出错误。Loader有效,因为您只是在访问图像,所以很好,但是URLLoaderBINARY模式下不会因为您尝试访问像素数据,因此出现安全错误。如果您尝试通过 访问像素数据Loader,您可能会遇到相同的错误。

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

于 2013-10-30T12:55:26.160 回答