1
我有許多SWF文件應該從外部服務器訪問。爲了能夠做到這一點,我需要在每個SWF文件中都有Security.allowDomain。這裏的問題是,我沒有這些文件的FLA,並且有成千上萬的SWF文件。解決方法Security.allowDomain
如果有更好的方法來配置這些文件可以從其他域訪問? 就像有某種配置文件左右。
我有許多SWF文件應該從外部服務器訪問。爲了能夠做到這一點,我需要在每個SWF文件中都有Security.allowDomain。這裏的問題是,我沒有這些文件的FLA,並且有成千上萬的SWF文件。解決方法Security.allowDomain
如果有更好的方法來配置這些文件可以從其他域訪問? 就像有某種配置文件左右。
是的,有一種解決方法,但我認爲這是一個安全漏洞,所以它可以在任何版本的Flash播放器中修復。同時現在的工作所以這裏是解決方案 - 使用URLLoader
與BINARY
dataFormat
作爲預加載的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將無法加載字節,這是唯一的安全要求。