使用Flash时,很多数据是不能直接跨域加载的,因为跨域不可信,为了安全考虑,Flash将抛出一个SecurityError错误并终止加载操作
需要安全考虑的数据一般是用户可操作性的(可读写),如文本、XML等,对应于CMP4中的配置,列表,歌词,皮肤(需解压操作)等
而其他一些无需用户直接操作的数据(FP内核处理),是可以直接跨域加载的,如http视频,MP3(不读ID3),图片和flash(不通讯)等
问题:如果跨域的数据是安全可信的,比如是自己的分站,二级域名,合作伙伴等,此时需要Flash跨域直接加载数据,如何解决?
使用跨域策略文件crossdomain.xml设置跨域访问权限
Flash跨域请求时,首先会下载此策略文件,并查看是否有权进行安全访问:
如果下载失败或内容错误,也就是默认为没有策略,此时Flash将终止操作
只有读取到策略中有允许进行操作权限,才能进行下一步访问,否则也将终止操作
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
CMP4跨域访问示意图
http://B.com/crossdomain.xml -> http://B.com/config.xml
http://C.com/crossdomain.xml -> http://C.com/list.xml
http://D.com/crossdomain.xml -> http://D.com/test.lrc
A站的CMP分别跨域加载B/C/D站的资源时,都会先下载这些站的crossdomain.xml,然后判断是否有权进行下一步访问
如果跨域数据是永久不可信资源,也就是不能去设置crossdomain.xml,我们还可以通过
代理程序去抓取数据