沙箱也称之为安全域,今日对安全域做一个整理:
一 , 信任授权
1, 不同域中的SWF(可执行文件)
尽管安全域只允许相同域下的通讯,但是我们可以使用授信(Security.allowDomain或Security.allowInsecureDomain)来解决2个不同域的通信问题。
注意 : 授信是单向的,举个例子: A和B。A向B授信,自然B是可以访问A的,但是此时的A是不能访问B的,如果要使A能够访问B,应该让B向A授信。
现在用Security.allowDomain为例,来讲解授信。
① : Security.allowDomain("*"); //此种授信方式是很危险的,意味着任何其他域都能访问其功能。
② : 假设你只想让http://www.51cto.com/可以访问本域的话 : Security.allowDomain("http://www.51cto.com/"); //这种方式相对比较安全。如果你还想让
http://www.baidu.com可以访问此域,只要并列加一句 : Security.allowDomain("http://www.baidu.com");
如:
Security.allowDomain("http://www.51cto.com/"); Security.allowDomain("http://www.baidu.com");
2,调用另一个域中的不可执行文件(图片 , 音乐 , 文本等等)
这类文件,不能使用Security.allowDomain或Security.allowInsecureDomain,这个时候需要用到另外一种方案:跨域文件。跨域文件文件名已经固定(crossdomain.xml),
这种文件,放在服务器(http或者socket服务器根目录)之下,这样服务器才能和SWF正常的通信。
现在给出一个跨域文件的例子:
<?xml version="1.0"?> <cross-domain-policy> <sity-control permitted-cross-domian-policies="by-content-type"/> <allow-access-from domain="http://www.51cto.com/"/> <allow-access-from domain="> </cross-domain-policy>
此处不可执行文件又有一个分类
①:本身就是数据类文件 如:文本文件 , 二进制文件 , XML文件等等
如果没有跨域文件,这类的文件根本就不会被加载。
②:除了数据类文件还有声音文件和图片文件等
这类文件在没有跨域文件的情况下 , 是会被正确加载的,还可以显示出来 , 但是BitmapData.draw是不能使用的,原因是SWF没有对这个文件形成引用,
要是用跨域文件才行。这个一定要注意。因为,你加载的图片显示出来了,有不能使用API操作它们,这就尴尬了。
本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1950206
原文地址:http://aonaufly.blog.51cto.com/3554853/1950206