开发公司的某flash页面应用,初涉swf文件的html页面调用,开发过程中不可避免滴出现了跨域问题。
开发工具:FlexBuilder3, FlashCS3,语言ActionScript 3.0
应用简介:需要由flash前端按照算法选择相应的图片信息,由RUBY端生成图片,发送至新浪围脖。
所遇问题:
1、本地无法测试加载swf文件,由于html位于swf上层,加载之时报错,无法找到相应的swf文件,最初的SwfLoader加载使用相对路径data/swf/xxx.swf加载;
2、添加crossdomain.xml文件之后测试,无果;
3、继续处理,在createComplete事件中及SwfLoader的Init事件之内,,加入域允许并载入跨域文件:
Security.allowDomain('*');
Security.loadPolicyFile('http://xxx.xxxxx.net/crossdomain.xml');
使用FF测试,依旧访问不到原始swf文件;
4、绝杀技,Loader加载,使用LoaderContent内容解决跨域,Loader使用绝对路径加载
Security.allowDomain('*');
Security.loadPolicyFile('http://xxx.xxxx.net/crossdomain.xml');
_loader = new Loader();
var aPolce:LoaderContext = new LoaderContext(true);
_loader.load(new URLRequest('http://xxx.xxxx.net/images/maimeng/data/swf/daoShu.swf'),aPolce); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadSwfComplete);
_loader.contentLoaderInfo.addEventListener(Event.INIT, onDaoshuSwfInit);
测试之后,问题搞定,跨域问题由此解决。
总结:flash跨域一直以来都是很头大的问题,解决方案步骤:
1、在访问服务器上及测试服务器根目录下放置crossdomain.xml文件;
2、若条件允许,将html与swf文件置于同一级目录之下;
3、使用Loader加载swf,设置LoaderContnent;
4、还是不能访问滴盆友,请自行清空本地浏览器缓存及服务器端缓存。