2013-02-08 97 views
1

我有許多SWF文件應該從外部服務器訪問。爲了能夠做到這一點,我需要在每個SWF文件中都有Security.allowDomain。這裏的問題是,我沒有這些文件的FLA,並且有成千上萬的SWF文件。解決方法Security.allowDomain

如果有更好的方法來配置這些文件可以從其他域訪問? 就像有某種配置文件左右。

回答

2

是的,有一種解決方法,但我認爲這是一個安全漏洞,所以它可以在任何版本的Flash播放器中修復。同時現在的工作所以這裏是解決方案 - 使用URLLoaderBINARYdataFormat作爲預加載的SWF字節:

沒有安全設置權限的SWF爲它的腳本:

package 
{ 
import flash.display.MovieClip; 


public class astest extends MovieClip 
{ 
    public function astest() 
    { 
    } 

    public function externalCheck():void 
    { 
     graphics.beginFill(0xFF0000); 
     graphics.drawCircle(100, 100, 100); 
    } 
} 
} 
想要加載以前的SWF和調用

裝載機SWF externalCheck方法:

package 
{ 
import flash.display.Loader; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.net.URLLoader; 
import flash.net.URLLoaderDataFormat; 
import flash.net.URLRequest; 
import flash.utils.ByteArray; 

public class astest2 extends MovieClip 
{ 
    private var loader:Loader; 
    private var urlLoader:URLLoader; 

    public function astest2() 
    { 
     init(); 
    } 

    //this method works fine 
    protected function init():void 
    { 
     urlLoader = new URLLoader(); 
     urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
     urlLoader.load(new URLRequest("http://domain_with_your_swfs/astest.swf")); 

     urlLoader.addEventListener(Event.COMPLETE, function(event:Event):void 
     { 
      addChild(loader = new Loader()); 

      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader); 
      loader.loadBytes(urlLoader.data as ByteArray); 
     }); 
    } 

    //this method will fire SecurityError when calling the 'externalCheck' method 
    protected function init2(event:Event = null):void 
    { 
     addChild(loader = new Loader()); 

     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader); 
     loader.load(new URLRequest("http://domain_with_your_swfs/astest.swf")); 
    } 

    protected function onLoader(event:Event = null):void 
    { 
     var swf:Object = loader.content; 
     swf.externalCheck(); 
    } 


} 
} 

不要忘了放置crossdomain.xml文件與SWF文件加載您的服務器的根,沒有它的URLLoader將無法加載字節,這是唯一的安全要求。