问题描述
网站新增栏目“有空读读书”,后台系统增加书评模块,列表显示图片,会根据条目引用的图片地址加载对应的图片,后台程序域名: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),可以去参考官方帮助文档 这个构造函数可以传三个参数:
第一参数:指定是否去加载跨域文件
第二参数:指定要使用的应用程序域
第三参数:指定要使用的安全沙箱