回到顶部
您的当前位置: 编程语言> FLEX> FLEX基础> 进阶应用
Flex跨域加载图片
2014-06-10 21:50:25
标签: 原创 flex 跨域 加载 图片
问题描述

网站新增栏目“有空读读书”,后台系统增加书评模块,列表显示图片,会根据条目引用的图片地址加载对应的图片,后台程序域名:admin.song-z.com,文件存储:file.song-z.com,导致图片不能加载,但通过firebug显示网络已经找到了该图片。

问题原因

debug模式启动后,加载图片部分报错,报错内容如下:

SecurityError: Error #2122: 安全沙箱冲突:LoaderInfo.content:http://admin.song-z.com/flex-debug/index.swf 不能访问 http://file.song-z.com/res/book/worked/1401704310598_000001_01.jpg。需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志。
	at flash.display::LoaderInfo/get content()
	at com.erim.core.component::EImage/imgLoadComplete()[/Users/kk/Dev/workspace/erimming/frim-core/src/com/erim/core/component/EImage.as:83]

由于swf程序在二级域名admin的下加载二级域名flie下的文件,所以产生了安全沙箱冲突的错误。

解决方案

修正前程序加载图片部分代码:

var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,imgLoadInit);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,imgLoadIoError);
loader.load(url,new LoaderContext());

修正后程序加载图片部分代码:

var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,imgLoadInit);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,imgLoadIoError);
loader.load(url,new LoaderContext(true));

主要区别在于load对应url图片的时候LoaderContext的参数。

加的这个new LoaderContext(true),可以去参考官方帮助文档 这个构造函数可以传三个参数:

    第一参数:指定是否去加载跨域文件 

    第二参数:指定要使用的应用程序域 

    第三参数:指定要使用的安全沙箱