我有一个AIR应用我的工作,需要加载SWF(总是从本地主机)将访问一些方法,它的父,反之亦然。 我不担心在一个桌面应用程序,虽然打开巨大的安全漏洞。 我一直在寻找全国各地,但不断撞击墙壁那里每个执行。
在SWF我的当前设置负载和它起着但我从沙箱得到一个小错误,因为我在同一个作为应用程序我不是。 有谁知道如何让过去这个错误所以完全自由的AIR应用程序和SWF之间开辟了?
*安全沙箱冲突*
SecurityDomain中的“http://localhost/test.swf”尝试访问不兼容的情况下“应用程序:/Test_Player.swf”
public function loadSWF():void {
//var context:LoaderContext = new LoaderContext();
//context.checkPolicyFile = true;
//context.applicationDomain = ApplicationDomain.currentDomain;
//context.securityDomain = SecurityDomain.currentDomain;
var req:URLRequest = new URLRequest(swfURL);
adLoader = new Loader();
videoCanvas.rawChildren.addChild(adLoader);
loader.contentLoaderInfo.addEventListener(Event.INIT, adLoadedHandler, false, 0, true);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError, false, 0, true);
//loader.load(req, context);
loader.load(req);
}
你需要用的URLLoader加载您的SWF远处,然后通过loadByte重新加载它。 通过这种方法,你会路过安全。
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class TestDistantSwf extends Sprite
{
private var _urlLoader : URLLoader = new URLLoader;
private var _loader : Loader = new Loader;
public function TestDistantSwf()
{
addChild(_loader);
// Won't work
//_loader.load(new URLRequest("http://localhost/test.swf"));
// Load it as binary
_urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
_urlLoader.addEventListener(Event.COMPLETE, onLoad);
_urlLoader.load(new URLRequest("http://localhost/test.swf"));
}
private function onLoad(e : Event) : void
{
// Load distant swf data locally
_loader.loadBytes(_urlLoader.data, new LoaderContext(false, ApplicationDomain.currentDomain));
}
}
}
如果您需要通过像闪光变种参数,双向做,如果使用空调2.6或更高版本,可以使用LoaderContext.parameters:
private function onLoad(e : Event) : void
{
var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
lc.parameters ={
foo:"hello !"
};
lc.allowCodeImport = true;
// Load distant swf data locally
_loader.loadBytes(_urlLoader.data, lc);
}
然后在你加载的SWF loaderInfo.parameters得到它。
或者,你可以调用加载的SWF的功能:
private function onLoadBinary(e : Event) : void
{
e.target.content.init("hello 2 !");
}
private function onLoad(e : Event) : void
{
var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
lc.allowCodeImport = true;
// Load distant swf data locally
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadBinary);
_loader.loadBytes(_urlLoader.data, lc);
}
这将加载的SWF在其主类拨打:
public function init(foo : String) : void
{
trace(foo);
}