使用Loader加載外部SWF文件的時候,如果不出現錯誤,文件是可以成功加載進來的,只不過是在使用該SWF文件時,flash會報安全沙箱錯誤,我們可以使用一種方式繞過該安全沙箱,具體操作如下:
1、首先使用一個Loader加載一個外部SWF,監聽Loader.contentLoaderInfo的Event.COMPLETE事件;
2、加載成功後,先暫時不使用這個加載成功的Loader,而是另寫一個Loader,使用Loader.loadBytes()來加載第一個Loader的contentLoaderInfo.bytes;
3、在第二個Loader加載成功後,就可以使用被加載的SWF文件了;
示例代碼: public function load():void
{
// 第一個Loader用於使用url加載文件
var loader1:Loader = new Loader();
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, loader1Complete);
loader1.load(new URLRequest("文件url"));
}
private function loader1Complete(event:Event):void
{
var loaderinfo:LoaderInfo = event.target as LoaderInfo;
// 第二個Loader用於加載第一個Loader加載進來的bytes
var loader2:Loader = new Loader();
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, loader2Complete);
loader2.loadBytes(loaderinfo.bytes);
}
private function loader2Complete(event:Event):void
{
// 在這裏可以使用被加載進來的文件了
// event.target as DisplayObject
}
注意:使用上面的方式,也應該注意B服務器上有crossdomain.xml文件
附:Flash Player的安全模型 轉載請註明來自:http://www.shengshiyouxi.com
您可以加載來自任何可訪問源的內容。
如果執行調用的 SWF 文件位於網絡沙箱中並且要加載的文件是本地的,則不允許加載。
如果加載的內容爲用 ActionScript 3.0 編寫的 SWF 文件,那麼除非可以通過調用加載的內容文件中的 System.allowDomain() 或 System.allowInsecureDomain() 方法來允許跨腳本排列,否則另一個安全沙箱中的 SWF 文件不能對它執行跨腳本操作。
如果被加載的內容爲 AVM1 SWF 文件(用 ActionScript 1.0 或 2.0 編寫),則 AVM2 SWF 文件(用 ActionScript 3.0 編寫)不能對它執行跨腳本操作。但是,可以通過使用 LocalConnection 類在兩個 SWF 文件之間實現通信。
如果被加載的內容爲圖像,則除非該 SWF 文件的域包含在該圖像原始域的跨域策略文件中,否則安全沙箱之外的 SWF 文件無法訪問其數據。
在只能與本地文件系統的內容交互的沙箱中的影片剪輯不能對只能與遠程內容交互的沙箱中的影片剪輯使用腳本,反之亦然。