沙箱也称之为安全域,今日对安全域做一个整理:
一 , 信任授权
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");
如:
1
2
|
Security.allowDomain(
"http://www.51cto.com/"
);
Security.allowDomain(
"http://www.baidu.com"
);
|
2,调用另一个域中的不可执行文件(图片 , 音乐 , 文本等等)
这类文件,不能使用Security.allowDomain或Security.allowInsecureDomain,这个时候需要用到另外一种方案:跨域文件。跨域文件文件名已经固定(crossdomain.xml),
这种文件,放在服务器(http或者socket服务器根目录)之下,这样服务器才能和SWF正常的通信。
现在给出一个跨域文件的例子:
1
2
3
4
5
6
|
<?
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操作它们,这就尴尬了。