沙箱也稱之爲安全域,今日對安全域做一個整理:
一 , 信任授權
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操作它們,這就尷尬了。