在Flash中导入外部数据,是flash编程常用的方法,利用这种方法结合后台程序可以完成很多强大的功能,但是出于安全上的考虑,这中间也有一些限制。
现在越来越多服务都开放了api供其他程序调用,但是由于这些限制的存在,往往使得flash开发者非常沮丧。。。
最大的限制是禁止跨域读取,这一点和Ajax类似,在默认情况下,域名A上的swf程序,是无法读取域名B上的文件或后台程序的。但和Ajax不同的是,flash并不是绝对禁止,如果要让域名A的程序访问域名B的内容,只要在域名B上放置一个xml的文件,通常命名为crossdomain.xml,在文件中声明允许域名A的访问,域名A上的flash程序访问域名B之前,调用System.security.loadPolicyFile()读取这个文件(细节请参考flash帮助),之后就可以访问了。
另外,在本地硬盘上运行的swf程序,只要在全局安全性设置面板中设置永远允许就可以访问任意网站的内容。
还有一种方法就是利用后台程序作为proxy,域名A的swf先调用域名A上的后台proxy程序,后台proxy再调用域名B的程序,最后把结果返回给swf。
crossdomain.xml文件格式
crossdomain.xml的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。下边是两个例子:
程序代码
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com" />
<allow-access-from domain="*.foo.com" />
<allow-access-from domain="105.216.0.40" />
</cross-domain-policy>
程序代码
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
第二个例子允许任何域的访问。对于crossdomain.xml文件存放位置,建议将其存放于站点根目录中!
本文介绍了Flash中如何解决跨域数据加载的问题,并提供了crossdomain.xml文件的配置示例。

356

被折叠的 条评论
为什么被折叠?



