沙箱也称之为安全域,今日对安全域做一个整理:

一 , 信任授权

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操作它们,这就尴尬了。